auto import from //depot/cupcake/@135843
diff --git a/send-ack.awk b/send-ack.awk
new file mode 100644
index 0000000..f55b7c2
--- /dev/null
+++ b/send-ack.awk
@@ -0,0 +1,68 @@
+BEGIN	{
+	# we need the number of bytes in a packet to do the output
+	# in packet numbers rather than byte numbers.
+	if (packetsize <= 0)
+		packetsize = 512
+	expectNext = 1
+	lastwin = -1
+	}
+	{
+	# convert tcp trace to send/ack form.
+	n = split ($1,t,":")
+	tim = t[1]*3600 + t[2]*60 + t[3]
+	if (NR <= 1) {
+		tzero = tim
+		ltim = tim
+		OFS = "\t"
+	}
+	if ($6 != "ack") {
+		# we have a data packet record:
+		# ignore guys with syn, fin or reset 'cause we
+		# can't handle their sequence numbers.  Try to
+		# detect and add a flag character for 'anomalies':
+		#   * -> re-sent packet
+		#   - -> packet after hole (missing packet(s))
+		#   # -> odd size packet
+		if ($5 !~ /[SFR]/) {
+			i = index($6,":")
+			j = index($6,"(")
+			strtSeq = substr($6,1,i-1)
+			endSeq = substr($6,i+1,j-i-1)
+			len = endSeq - strtSeq
+			id = endSeq
+			if (! timeOf[id])
+				timeOf[id] = tim
+			if (endSeq - expectNext < 0)
+				flag = "*"
+			else {
+				if (strtSeq - expectNext > 0)
+					flag = "-"
+				else if (len != packetsize)
+					flag = "#"
+				else
+					flag = " "
+				expectNext = endSeq
+			}
+			printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\
+				flag, $5, strtSeq
+			if (++timesSent[id] > 1)
+				printf "  (%.2f) [%d]", tim - timeOf[id], timesSent[id]
+			if (len != packetsize)
+				printf " <%d>", len
+		}
+	} else {
+		id = $7
+
+		printf "%7.2f\t%7.2f\t%s  ack %s %d", tim-tzero, tim-ltim,\
+			flag, $5, id
+		if ($9 != lastwin) {
+			printf "  win %d", $9
+			lastwin = $9
+		}
+		printf "  (%.2f)", tim - timeOf[id]
+		if (++timesAcked[id] > 1)
+			printf " [%d]", timesAcked[id]
+	}
+	printf "\n"
+	ltim = tim
+	}