|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T u
Length: 3672 (0xe58) Types: TextFile Names: »uplot.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/uplot/uplot.c«
/* * uplot.c * * Crude hack for drawing a map of the UUCP net - reads on standard * input a highly massaged version of the '#L' lines from the UUCP map, * processed by uplot.sed and sorted, and writes plot(3) instructions * on standard output. * * Released to the public domain August, 1986. * Larry Campbell (maynard!campbell) * The Boston Software Works, Inc. * 120 Fulton Street, Boston, MA 02109 */ #include <stdio.h> /* These defines set the bounds of the rectangle being drawn */ #define MINLAT 25 #define MAXLAT 50 #define MINLON (-125) #define MAXLON (-60) struct { int deg; int min; } lat, lon; int n, x, y, lastx, lasty, weight, col, maxweight, goodpoints, badpoints, outpoints, uniques, debug; char buf[256]; main(argc, argv) char *argv[]; { if (argc > 1) debug++; openpl(); erase(); space(MINLON*60, MINLAT*60, (MAXLON-30)*60, MAXLAT*60); city("Boston", 42, - 71); city("Chicago", 42, - 88); city("Dallas", 33, - 97); city("DC", 39, - 77); city("Denver", 40, -105); city("Houston", 30, - 95); city("LA", 34, -118); city("Miami", 26, - 80); city("NYC", 41, - 74); city("SF", 38, -122); city("Seattle", 47, -123); city("Toronto", 43, - 79); city("Vancouver", 49, -124); lastx = lasty = 0; while (gets(buf) != NULL) { n = sscanf(buf, "%d %d N / %d %d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d %*d N / %d %d %*d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d N %d %d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d %*d N %d %d %*d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d %*d %*d N / %d %d %*d %*d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d W / %d %d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d %*d W / %d %d %*d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d W %d %d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d %*d W %d %d %*d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d %*d %*d W / %d %d %*d %*d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) { n = sscanf(buf, "%d N / %d W", &lat.deg, &lon.deg) + 2; lat.min = lon.min = 0; } if (n != 4) { n = sscanf(buf, "%d W / %d N", &lon.deg, &lat.deg) + 2; lat.min = lon.min = 0; } if (n != 4) { badpoints++; if (debug) printf("bad: %s\n", buf); } else { goodpoints++; lon.deg = -lon.deg; lon.min = -lon.min; if (lat.deg >= MAXLAT || lat.deg < MINLAT || lon.deg >= MAXLON || lon.deg < MINLON) { outpoints++; continue; } x = lon.deg * 60 + lon.min; y = lat.deg * 60 + lat.min; if (x == lastx && y == lasty) weight++; else { uniques++; if (weight > maxweight) maxweight = weight; switch (weight) { case 0: col = 1; break; case 1: col = 2; break; default: col = 3; break; } if (debug) printf("lastx = %d, lasty = %d, weight = %d, color = %d\n", lastx, lasty, weight, col); if (lastx && lasty) { color(col); point(lastx, lasty); } weight = 0; lastx = x; lasty = y; } } } printf("Good: %d, bad: %d, out of range: %d, max: %d, uniques: %d\n", goodpoints, badpoints, outpoints, maxweight, uniques); } city(s, lat, lon) char *s; int lat, lon; { char buf[80]; if (lat < MINLAT || lat >= MAXLAT) return; if (lon < MINLON || lon >= MAXLON) return; color(2); move(lon*60, lat*60); sprintf(buf, ".%s", s); label(buf); }