From: utzoo!decvax!harpo!npoiv!eisx!whuxlb!eric Newsgroups: net.games.emp Title: Map combiner source (216 lines) - (nf) Article-I.D.: whuxlb.998 Posted: Fri Feb 11 19:44:38 1983 Received: Sat Feb 12 08:22:14 1983 #N:whuxlb:1100002:000:5664 whuxlb!eric Feb 11 18:59:00 1983 Ok, here is my map combiner program. It takes radar from ships and maps, and outputs an empire compatible map of the combined terrain. Therefore, this map could be saved, and used again with new data to build a map of the world. Files for the program are created with "radar # >file, radar # >>file, or map ##:##,##:## > [>>] file". Note that for maps, you must specify the sectors, the prgram will barf on "# or #1 or such". Enjoy, and of course, report any bugs or improvments you make. Eric Holtman harpo!whuxlb!eric ----- start combrad.c ----- /****************************************************************************** * * * Copyright by Eric Holtman Feburary, 1983 * * * * * * Combine empire radar and maps into big maps (which can be saved and * * sent through this program again to build even bigger maps. * * * * syntax: * * combrad [ ##:##,##:## | - | ##,##] file [more files] * * * * where ##:##,##:## would be an empire-type range of area to map, * * ##,## is a sector around which a whole 24x80 map will be drawn * * - means spit out the smallest map that contains all information * * like "realm #0" in empire * * * * any number of files may be specified (1 is nessecary). Files should be * * output of "radar/map 10 >file" or "radar/map 10 >>file" type. Doctoring * * may lead to strange results. Maps must supply coordinates (##:##,##:##), * * not just a realm number. * ******************************************************************************/ #include "stdio.h" #define YLEN 256 #define XLEN 256 #define NEXTLINE fgets(curlin,XLEN+2,rads) char tab[YLEN][XLEN+2]; char lines[80][80]; char curlin[XLEN+2]; int i,j,k,l; int x,y,hx,lx,hy,ly; int eof = 0; FILE *rads; int highx = -2000; int highy = -2000; int lowx = 2000; int lowy = 2000; main(argc,argv) int argc; char **argv; { if (argc < 3) { printf("Usage: %s [ ##:##,##:## | - | ##,##] file [more files]\n",argv[0]); exit(0); } for (i=0;i1) { if ( (rads = fopen(argv[argc],"r")) == NULL) { printf("%s: cannot open",argv[argc]); exit(0); } NEXTLINE; NEXTLINE; while (rads != NULL) { if (index(curlin,"rad") == 0) { if (radar() == 0) break; } if (index(curlin,"map") == 0) { if (map() == 0) break; } } fclose(rads); argc--; } eof = 0; if (argv[1][0] == '-' && argv[1][1] == 0) { hx = highx; lx = lowx; hy = highy; ly = lowy; } else if (strchr(argv[1],':') == NULL) { if (sscanf(argv[1],"%d,%d",&x,&y) != 2) eof = 1; lx = x - 35; hx = x + 35; ly = y - 9; hy = y + 9; } else { if (sscanf(argv[1],"%d:%d,%d:%d",&lx,&hx,&ly,&hy) != 4) eof = 1; } if (eof) { printf("Illegal specification: %s\n",argv[1]); printf("Usage: %s [ ##:##,##:## | - | ##,##] file [more files]\n",argv[0]); exit(0); } printf("\nmap %d:%d,%d:%d\n",lx,hx,ly,hy); doheader(); for (i = ly;i<=hy;i++) { printf("%3d ",i); for (j=lx;j<=hx;j++) { putchar(tab[i+(YLEN/2)][j+(XLEN/2)]); } printf(" %-d\n",i); } doheader(); } index(s,t) char s[],t[]; { int i,j,k; for (i=0;s[i] != '\0'; i++) { for (j=i,k=0;t[k] != 0 && s[j] == t[k];j++,k++); if (t[k] == 0) return(i); } return(-1); } map() { sscanf(curlin,"%*s %d:%d,%d:%d",&lx,&hx,&ly,&hy); NEXTLINE; NEXTLINE; for (i=ly;i<=hy;i++) { NEXTLINE; for (j=lx;j<=hx;j++) { if (curlin[(j-lx) + 4] != ' ') { intab(i,j,curlin[(j-lx) + 4]); } } } NEXTLINE; NEXTLINE; if (NEXTLINE == NULL) { return(0); } NEXTLINE; return(1); } radar() { NEXTLINE; while ((rads != NULL)) { if (strlen(curlin) == 1) { NEXTLINE; return(1); } i = index(curlin," at "); sscanf(&curlin[i+4],"%d, %d",&x,&y); NEXTLINE; for (i=0;i<80;i++) { for (j=0;j<80;j++) lines[i][j] = ' '; if (fgets(lines[i],80,rads) == NULL) { eof = 1; break; } if (lines[i][0] != ' ') break; for (j=0;j highx) highx = qj; if (qi < lowy) lowy = qi; if (qi > highy) highy = qi; tab[qi+YLEN/2][qj+XLEN/2] = qc; return; } doheader() { printf(" "); for (i = lx;i<=hx;i++) { j = i / 10; if (i >= -9 && i < 0) printf("-"); else printf("%d",(j<0) ? (-j) : j); } printf("\n "); for (i = lx;i<=hx;i++) { j = i % 10; printf("%d",(j<0) ? (-j) : j); } putchar('\n'); } ----- end combrad.c -----