#! /usr/bin/gawk -f # Last edited on 2000-01-13 10:23:51 by stolfi # Upgrades the ".grf" format to version "2000-01-13" # (with mixed edges, slot numbers, and vacant slots) BEGIN { abort = -1; directed = 1; split("", din); split("", dun); split("", dot); nS = 0; } (abort >= 0) { exit abort; } /^begin graph /{ gsub(/99-02-28/, "2000-01-13", $0); gsub(/2000-01-07/, "2000-01-13", $0); print; next; } /^[|]/{ print; next; } /^end /{ print; next; } /^vertices /{ nV = $3; gsub(/vertices/, "nodes", $0); print; next; } /^nodes /{ nV = $3; print; next; } /^edges /{ nE = $3; print; next; } /^directed /{ if (($3 == "T") || ($3 == "t") || ($3 == "1")) { directed = 1; } else if (($3 == "F") || ($3 == "f") || ($3 == "0")) { directed = 0; } else { error("bad \"directed\" flag"); } next; } /^ *[0-9]+ *[0-9]+ *$/{ if (nS == 0) { printf "slots = %d\n", 2*nE; } u = $1; v = $2 if (directed) { ku = dot[u]; kv = din[v]; dir = ">"; dot[u]++; din[v]++; } else { if (u == v) { error("undirected loop"); } ku = dun[u]; kv = dun[v]; dir = "-"; dun[u]++; dun[v]++ } nS += 2; printf "%d:%d %s %d:%d\n", u, ku, dir, v, kv; next; } // { error(("bad format \"" $0 "\"")); } END { if(abort >= 0) { exit abort; } if (nS != 2*nE) { error("bad nE"); } } function error(msg) { printf "** %s\n", msg > "/dev/stderr"; abort = 1; exit abort; }