#! /usr/bin/gawk -f # Last edited on 2000-01-11 06:17:58 by stolfi # Converts J.C.Setubal's graph format to ".grf" BEGIN { abort = -1; printf "begin graph (format of 2000-01-07)\n"; # dic[ws] is the Stolfi number of the node whose Setubal number is "ws" split("", dic); kv = 0; ke = 0; split("", adj); } (abort >= 0) { exit abort; } /^c +/{ printf "| %s\n", substr($0, 3); next; } /^v +/{ next; } /^p +/{ nv = $2; ne = $3; printf "nodes = %d\n", nv; printf "edges = %d\n", ne; printf "directed = T\n"; next; } /^a +/{ if (NF != 6) { error("bad edge format"); } u = convert($2); v = convert($3); label = $4; weight = $5; ignore = $6; if ((u,v) in adj) { printf "** repeated edge (%d,%d)\n", u, v > "/dev/stderr"; } adj[u,j] = 1; printf "%d %d\n", u, v; ke++; next; } END { if (abort >= 0) { exit abort; } if (kv != nv) { error("wrong nv"); } if (ke != ne) { error("wrong ne"); } printf "end graph\n"; for (us in dic) { printf "js.%d = jcs.%d\n", dic[us], us > "out.dic"; } close("out.dic"); } function convert(ws, w) { if (ws in dic) { w = dic[ws]; } else { w = kv; kv++; dic[ws] = w; } return(w); } function error(msg) { printf "** line %s: %s\n", FNR, msg > "/dev/stderr"; abort = 1; exit abort; }