billr@saab.CNA.TEK.COM (Bill Randle) (09/02/89)
Submitted-by: Adam Bryant <adb@cs.bu.edu> Posting-number: Volume 8, Issue 15 Archive-name: conquer4/Patch5c Patch-To: conquer4: Volume 6, Issue 83-97 #!/bin/sh # this is part 3 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file patchV4.5 continued # CurArch=3 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 echo "x - Continuing file patchV4.5" sed 's/^X//' << 'SHAR_EOF' >> patchV4.5 X+ * The following unseen (UNS_) value represents this. X+ */ X+ #define UNS_CITY_VALUE 10 /* If there is an under-defended City X+ * the value is 500 X+ */ X+ X void X prtattr() X { X*************** X*** 131,137 **** X if( ((sct[x][y].owner) == 0 X || solds_in_sector( x, y, sct[x][y].owner) == 0 ) X && (ntn[sct[x][y].owner].active!=NPC_NOMAD) ) { X! fprintf(fnews,"3.\tnomads capture sector %d,%d\n",x,y); X if(sct[x][y].owner!=0) flee(x,y,1,FALSE); X sct[x][y].owner=country; X DEVASTATE(x,y); X--- 169,175 ---- X if( ((sct[x][y].owner) == 0 X || solds_in_sector( x, y, sct[x][y].owner) == 0 ) X && (ntn[sct[x][y].owner].active!=NPC_NOMAD) ) { X! fprintf(fnews,"3:\tnomads capture sector %d,%d\n",x,y); X if(sct[x][y].owner!=0) flee(x,y,1,FALSE); X sct[x][y].owner=country; X DEVASTATE(x,y); X*************** X*** 180,186 **** X if( ((sct[x][y].owner == 0) X || (solds_in_sector( x, y, sct[x][y].owner) == 0)) X && (ntn[sct[x][y].owner].active != NPC_SAVAGE)) { X! fprintf(fnews,"3.\tsavages capture sector %d,%d\n",x,y); X if(P_ATYPE<MINLEADER) { X if(sct[x][y].owner!=0) flee(x,y,1,FALSE); X sct[x][y].owner=country; X--- 218,224 ---- X if( ((sct[x][y].owner == 0) X || (solds_in_sector( x, y, sct[x][y].owner) == 0)) X && (ntn[sct[x][y].owner].active != NPC_SAVAGE)) { X! fprintf(fnews,"3:\tsavages capture sector %d,%d\n",x,y); X if(P_ATYPE<MINLEADER) { X if(sct[x][y].owner!=0) flee(x,y,1,FALSE); X sct[x][y].owner=country; X*************** X*** 657,684 **** X } X } X if((free==TRUE)) { X! /* want to add ideal troops */ X! ideal = sct[x][y].people/MILINCITY - P_ASOLD; X! ideal = min(ideal, 250); X! if (P_ASOLD < 50) /* make the militia at least 50 */ X! ideal = max(ideal,50-P_ASOLD); X! if (P_ASOLD + ideal < 50) /*don't let ideal bring it below 50*/ X! continue; X if(ideal>0){ X if(magic(country,WARRIOR)==TRUE){ /* WARRIOR power */ X curntn->tgold-= X! (ideal* *(u_encost+P_ATYPE))/2; X } else { X curntn->tgold-= X! ideal* *(u_encost + P_ATYPE); X } X } X- P_ASOLD+=ideal; X- P_ATYPE=A_MILITIA; X- P_ASTAT=MILITIA; X #ifdef DEBUG X! printf("\tadding %ld troops to %s army %d (now %ld men - populace %ld)\n",ideal,unittype[P_ATYPE],armynum,P_ASOLD,sct[x][y].people); X #endif DEBUG X } X } X check(); X--- 695,721 ---- X } X } X if((free==TRUE)) { X! /* want to have ideal troops */ X! ideal = sct[x][y].people/MILINCITY; X! X! if(ideal < 50) /* make the militia at least 50 */ X! ideal = 50; X! X if(ideal>0){ X if(magic(country,WARRIOR)==TRUE){ /* WARRIOR power */ X curntn->tgold-= X! ((ideal-P_ASOLD)* *(u_encost+P_ATYPE))/2; X } else { X curntn->tgold-= X! (ideal-P_ASOLD)* *(u_encost + P_ATYPE); X } X } X #ifdef DEBUG X! printf("\tadding %ld troops to %s army %d (now %ld men - populace %ld)\n",ideal-P_ASOLD,unittype[P_ATYPE],armynum,ideal,sct[x][y].people); X #endif DEBUG X+ P_ASOLD=ideal; X+ P_ATYPE=A_MILITIA; X+ P_ASTAT=MILITIA; X } X } X check(); X*************** X*** 824,829 **** X--- 861,923 ---- X } X } X X+ X+ /* Find the average world food value per sector X+ * and the average tradegood value per sector. X+ * This is used for unseen sectors and unseen X+ * armies. */ X+ static void X+ find_avg_sector () X+ { X+ int armynum; X+ int i; X+ int nation; X+ int repeat; X+ struct s_sector *sptr; /* used to speed up this function */ X+ register int x,y; X+ register long total_food = 0; X+ int total_sectors; X+ register long total_tg = 0; X+ register long useable_land = 0; X+ X+ for(x=0;x<MAPX;x++) for(y=0;y<MAPY;y++) { X+ sptr = &sct[x][y]; X+ if(( sptr->altitude!=WATER )&&( sptr->altitude!=PEAK )) { X+ useable_land++; X+ total_food += tofood(sptr,country); X+ if(sptr->tradegood != TG_none) { X+ if(sptr->metal != 0) total_tg +=500; X+ else if(sptr->jewels != 0) total_tg +=500; X+ else total_tg +=300; X+ } X+ } X+ } X+ Avg_food = total_food / useable_land; X+ Avg_tradegood = total_tg / useable_land; X+ X+ for(nation=1;nation<NTOTAL;nation++) { X+ if(isntn(ntn[nation].active) X+ && !COUNT_ARMIES(nation,country)) { X+ /* Count the number of sectors which are occupied by each X+ * nation's armies. */ X+ total_sectors = 0; X+ for(armynum=1;armynum<MAXARM;armynum++) X+ if(ntn[nation].arm[armynum].sold > 0) { X+ x = ntn[nation].arm[armynum].xloc; X+ y = ntn[nation].arm[armynum].yloc; X+ repeat = FALSE; X+ for (i=1; (i<armynum) && !repeat; ++i) X+ if((ntn[nation].arm[i].xloc == x) X+ && (ntn[nation].arm[i].yloc == y)) X+ repeat = TRUE; X+ if (!repeat) X+ total_sectors++; X+ } X+ X+ Avg_soldiers[nation] = ntn[nation].tmil / total_sectors; X+ } X+ } X+ } X void X nationrun() X { X*************** X*** 864,869 **** X--- 958,965 ---- X X getdstatus(); X X+ find_avg_sector (); X+ X #ifdef SPEW X for(x=1;x<NTOTAL;x++) if(isntn( ntn[x].active )) { X /* here is the bit which will occasionally send a randomly X*************** X*** 1141,1147 **** X for(x=(int)curntn->capx-4;x<=(int)curntn->capx+4;x++){ X for(y=(int)curntn->capy-4;y<=(int)curntn->capy+4;y++){ X if((ONMAP(x,y))&&(sct[x][y].owner==0)) { X! attr[x][y] += 700; X } X } X } X--- 1237,1243 ---- X for(x=(int)curntn->capx-4;x<=(int)curntn->capx+4;x++){ X for(y=(int)curntn->capy-4;y<=(int)curntn->capy+4;y++){ X if((ONMAP(x,y))&&(sct[x][y].owner==0)) { X! attr[x][y] += 450; X } X } X } X*************** X*** 1148,1159 **** X X for(x=stx;x<endx;x++) { X for(y=sty;y<endy;y++) { X! /* add if metal high */ X! if(sct[x][y].tradegood != TG_none) { X! if(sct[x][y].metal != 0) attr[x][y]+=500; X! else if(sct[x][y].jewels != 0) attr[x][y]+=500; X! else attr[x][y]+=300; X } X /*add to attractiveness for unowned sectors*/ X if(sct[x][y].owner == 0) { X attr[x][y]+=300; X--- 1244,1261 ---- X X for(x=stx;x<endx;x++) { X for(y=sty;y<endy;y++) { X! if (SEE_SECTOR(x,y,country)) { X! /* add if metal high */ X! if(sct[x][y].tradegood != TG_none) { X! if(sct[x][y].metal != 0) attr[x][y]+=500; X! else if(sct[x][y].jewels != 0) attr[x][y]+=500; X! else attr[x][y]+=300; X! } X } X+ else X+ /*give some value: tradegood MIGHT be there*/ X+ attr[x][y] += Avg_tradegood; X+ X /*add to attractiveness for unowned sectors*/ X if(sct[x][y].owner == 0) { X attr[x][y]+=300; X*************** X*** 1161,1167 **** X if(ntn[sct[x][y].owner].active == NPC_NOMAD) X attr[x][y]+=100; X } X! attr[x][y] += 50*tofood(&sct[x][y],country); X X if(!is_habitable(x,y)) { X #ifdef XENIX X--- 1263,1273 ---- X if(ntn[sct[x][y].owner].active == NPC_NOMAD) X attr[x][y]+=100; X } X! if (SEE_SECTOR(x,y,country)) X! attr[x][y] += 50*tofood(&sct[x][y],country); X! else X! /* give some value: there is probably average food there */ X! attr[x][y] += 50*Avg_food; X X if(!is_habitable(x,y)) { X #ifdef XENIX X*************** X*** 1175,1192 **** X } X } X } X void X n_defend(natn) X register short natn; X { X! int x,y; X X! /* add 1/10th of their soldiers in sector */ X! for(x=1;x<MAXARM;x++) if(ntn[natn].arm[x].sold > 0) X! if(sct[ntn[natn].arm[x].xloc][ntn[natn].arm[x].yloc].owner==country) X! attr[ntn[natn].arm[x].xloc][ntn[natn].arm[x].yloc] += X! ntn[natn].arm[x].sold/10; X X /*plus 80 if near your capitol */ X for(x=(int)curntn->capx-1;x<=(int)curntn->capy+1;x++){ X for(y=(int)curntn->capy-1;y<=(int)curntn->capy+1;y++){ X--- 1281,1324 ---- X } X } X } X+ X void X n_defend(natn) X register short natn; X { X! register int i,j; X! int repeat; X! register int x,y; X X! if (COUNT_ARMIES(natn,country)) { X! /* add 1/10th of their soldiers in sector */ X! for(x=1;x<MAXARM;x++) if(ntn[natn].arm[x].sold > 0) X! if(sct[ntn[natn].arm[x].xloc][ntn[natn].arm[x].yloc].owner==country) X! attr[ntn[natn].arm[x].xloc][ntn[natn].arm[x].yloc] += X! ntn[natn].arm[x].sold/10; X! } X! else { X! /* For every of this country's sectors that has a 'natn' army X! * in it, add 1/10 of the average number of soldiers in that X! * 'natn' army. X! */ X! for(j=1;j<MAXARM;j++) if(ntn[natn].arm[j].sold > 0) { X! x = ntn[natn].arm[j].xloc; X! y = ntn[natn].arm[j].yloc; X! if(sct[x][y].owner==country) { X! /* insure the average soldiers is only added X! * once per sector */ X! repeat = FALSE; X! for (i=1; (i<j) && !repeat; ++i) X! if((ntn[natn].arm[i].xloc == x) X! && (ntn[natn].arm[i].yloc == y)) X! repeat = TRUE; X X+ if (!repeat) X+ attr[x][y] += Avg_soldiers[natn]/10; X+ } X+ } X+ } X /*plus 80 if near your capitol */ X for(x=(int)curntn->capx-1;x<=(int)curntn->capy+1;x++){ X for(y=(int)curntn->capy-1;y<=(int)curntn->capy+1;y++){ X*************** X*** 1218,1235 **** X long solds; /* solds within 1 of capitol or city */ X X for(x=stx;x<endx;x++) for(y=sty;y<endy;y++){ X! if((sct[x][y].owner==nation)&& X! ((sct[x][y].designation==DCITY) X! ||(sct[x][y].designation==DCAPITOL) X! ||(sct[x][y].designation==DTOWN))){ X! solds=0; X! for(armynum=1;armynum<MAXARM;armynum++) X! if((ntn[country].arm[armynum].sold > 0) X! &&(abs(AXLOC-x)<=1) X! &&(abs(AYLOC-y)<=1)) solds+=ASOLD; X! X! if(solds_in_sector(x,y,nation)*2 < 3*solds) X! attr[x][y]+=500; X } X } X } X--- 1350,1380 ---- X long solds; /* solds within 1 of capitol or city */ X X for(x=stx;x<endx;x++) for(y=sty;y<endy;y++){ X! if(sct[x][y].owner==nation) { X! if(SEE_CITIES(nation,country)) { X! if (((sct[x][y].designation==DCITY) X! ||(sct[x][y].designation==DCAPITOL) X! ||(sct[x][y].designation==DTOWN))){ X! solds=0; X! for(armynum=1;armynum<MAXARM;armynum++) X! if((ntn[country].arm[armynum].sold > 0) X! &&(abs(AXLOC-x)<=1) X! &&(abs(AYLOC-y)<=1)) solds+=ASOLD; X! X! if (COUNT_ARMIES(nation,country)) { X! if(solds_in_sector(x,y,nation)*2 < 3*solds) X! attr[x][y]+=500; X! } X! else { X! if((solds_in_sector(x,y,nation) != 0) X! &&(Avg_soldiers[nation]*2 < 3*solds)) X! attr[x][y]+=400; X! } X! } X! } X! else X! /* Give some value: the sector MIGHT be an under-defended city */ X! attr[x][y] += UNS_CITY_VALUE; X } X } X } X*************** X*** 1273,1278 **** X--- 1418,1426 ---- X { X int x1,x2,y1,y2,x,y; X X+ if (SEE_CITIES(nation,country)==FALSE) X+ return; X+ X /*plus if strategic blocking sector*/ X X /*+60 if between the two capitol*/ X*************** X*** 1304,1311 **** X--- 1452,1462 ---- X void X n_survive() X { X+ int i; X int nation,armynum; X int capx,capy; X+ int repeat; X+ int x,y; X X capx=curntn->capx; X capy=curntn->capy; X*************** X*** 1315,1336 **** X } X X /*defend your capitol if occupied, +50 more if with their army*/ X! for(nation=1;nation<NTOTAL;nation++) X if((isntn(ntn[nation].active)) X &&((ntn[nation].dstatus[country]>=WAR) X ||(curntn->dstatus[nation]>=WAR))){ X! for(armynum=1;armynum<MAXARM;armynum++) X! if((ntn[nation].arm[armynum].sold > 0) X! &&( ntn[nation].arm[armynum].xloc<=capx+2) X! &&( ntn[nation].arm[armynum].xloc>=capx-2) X! &&( ntn[nation].arm[armynum].yloc<=capy+2) X! &&( ntn[nation].arm[armynum].yloc>=capy-2)){ X! if((ntn[nation].arm[armynum].xloc==capx) X! &&(ntn[nation].arm[armynum].yloc==capy)){ X! attr[capx][capy]+=2*ntn[nation].arm[armynum].sold; X! } else { X! attr[ntn[nation].arm[armynum].xloc][ntn[nation].arm[armynum].yloc]+=ntn[nation].arm[armynum].sold; X } X } X } X } X--- 1466,1520 ---- X } X X /*defend your capitol if occupied, +50 more if with their army*/ X! for(nation=1;nation<NTOTAL;nation++) X if((isntn(ntn[nation].active)) X &&((ntn[nation].dstatus[country]>=WAR) X ||(curntn->dstatus[nation]>=WAR))){ X! if (COUNT_ARMIES(nation,country)) { X! for(armynum=1;armynum<MAXARM;armynum++) X! if((ntn[nation].arm[armynum].sold > 0) X! &&( ntn[nation].arm[armynum].xloc<=capx+2) X! &&( ntn[nation].arm[armynum].xloc>=capx-2) X! &&( ntn[nation].arm[armynum].yloc<=capy+2) X! &&( ntn[nation].arm[armynum].yloc>=capy-2)){ X! if((ntn[nation].arm[armynum].xloc==capx) X! &&(ntn[nation].arm[armynum].yloc==capy)){ X! attr[capx][capy]+=2*ntn[nation].arm[armynum].sold; X! } X! else { X! attr[ntn[nation].arm[armynum].xloc][ntn[nation].arm[armynum].yloc]+=ntn[nation].arm[armynum].sold; X! } X } X+ } else { X+ /* The next line might be more accurate to take into account X+ * the actual number of armies that natn has, but I don't X+ * think that VOID or HIDDEN should allow that to be known. X+ */ X+ for(armynum=1;armynum<MAXARM;armynum++) X+ if(ntn[nation].arm[armynum].sold > 0) { X+ x = ntn[nation].arm[armynum].xloc; X+ y = ntn[nation].arm[armynum].yloc; X+ if((capx-2<=x && x<=capx+2) X+ &&( capy-2<=y && y<=capy+2)){ X+ /* insure the average soldiers is only added X+ * once per sector X+ */ X+ repeat = FALSE; X+ for (i=1; (i<armynum) && !repeat; ++i) X+ if((ntn[nation].arm[i].xloc == x) X+ && (ntn[nation].arm[i].yloc == y)) X+ repeat = TRUE; X+ if (!repeat) { X+ if((ntn[nation].arm[armynum].xloc==capx) X+ &&(ntn[nation].arm[armynum].yloc==capy)){ X+ attr[capx][capy]+=2* Avg_soldiers[nation]; X+ } X+ else { X+ attr[ntn[nation].arm[armynum].xloc][ntn[nation].arm[armynum].yloc]+= Avg_soldiers[nation]; X+ } X+ } X+ } X+ } X } X } X } X*************** X*** 1399,1404 **** X--- 1583,1589 ---- X #ifdef DEBUG X printf("pceattr()\n"); X #endif DEBUG X+ n_unowned(); X n_unowned(); X n_unowned(); X n_trespass(); X*** onations Sat Aug 26 19:04:07 1989 X--- nations Sat Aug 26 19:04:24 1989 X*************** X*** 50,56 **** X ######################################################################### X argos The_Ed H A F 10 10 9 50000 1000 60 8 i -1 -1 1 X anorian Anudil E a F 30 40 8 70000 1500 60 8 g -1 -1 3 X! bobland Dogon O B G 20 0 6 12000 1500 70 13 i -1 -1 9 X darboth balrog O D R 0 0 7 70000 1500 70 12 e -1 -1 8 X edland Debbra H E R 10 15 12 30000 1000 60 8 g -1 -1 1 X fung Fungus E F G 10 40 8 50000 1000 70 8 i -1 -1 1 X--- 50,56 ---- X ######################################################################### X argos The_Ed H A F 10 10 9 50000 1000 60 8 i -1 -1 1 X anorian Anudil E a F 30 40 8 70000 1500 60 8 g -1 -1 3 X! bobland Dogon O B G 20 0 6 12000 1500 70 12 i -1 -1 9 X darboth balrog O D R 0 0 7 70000 1500 70 12 e -1 -1 8 X edland Debbra H E R 10 15 12 30000 1000 60 8 g -1 -1 1 X fung Fungus E F G 10 40 8 50000 1000 70 8 i -1 -1 1 X*************** X*** 57,69 **** X goldor Train D G F 10 15 8 30000 1000 70 8 n -1 -1 2 X haro Cesear H H R 10 10 9 30000 1500 60 7 i -1 -1 1 X jodoba Ganalf H J R 10 10 2 30000 1500 60 8 n -1 -1 3 X! lint Lynne E L F 20 30 8 50000 1500 70 10 g -1 -1 3 X muldor Gilur D M F 10 30 6 160000 1500 70 9 n -1 -1 1 X! noria Gloin D N R 10 30 6 50000 1000 60 8 n -1 -1 1 X tokus Sumu H T R 10 10 8 30000 1000 60 8 e -1 -1 1 X! woooo Nastus O W F 10 10 10 60000 3500 75 13 e -1 -1 10 X! zaos Dragonus O Z R 20 0 8 12000 1500 70 14 e -1 -1 9 X frika Frik D f F 10 10 8 50000 1200 60 10 n -1 -1 1 X amazon Diana E X F 10 10 8 50000 1200 60 10 e -1 -1 2 X! tasman Obilisk H t F 10 10 8 50000 1200 60 10 g -1 -1 3 X sahara Barbar H S F 10 10 8 50000 1200 60 10 i -1 -1 4 X--- 57,69 ---- X goldor Train D G F 10 15 8 30000 1000 70 8 n -1 -1 2 X haro Cesear H H R 10 10 9 30000 1500 60 7 i -1 -1 1 X jodoba Ganalf H J R 10 10 2 30000 1500 60 8 n -1 -1 3 X! #lint Lynne E L F 20 30 8 50000 1500 70 10 g -1 -1 3 X muldor Gilur D M F 10 30 6 160000 1500 70 9 n -1 -1 1 X! #noria Gloin D N R 10 30 6 50000 1000 60 8 n -1 -1 1 X tokus Sumu H T R 10 10 8 30000 1000 60 8 e -1 -1 1 X! woooo Nastus O W F 10 10 10 60000 3500 75 11 e -1 -1 10 X! #zaos Dragonus O Z R 20 0 8 12000 1500 70 12 e -1 -1 9 X frika Frik D f F 10 10 8 50000 1200 60 10 n -1 -1 1 X amazon Diana E X F 10 10 8 50000 1200 60 10 e -1 -1 2 X! #tasman Obilisk H t F 10 10 8 50000 1200 60 10 g -1 -1 3 X sahara Barbar H S F 10 10 8 50000 1200 60 10 i -1 -1 4 X*** onavy.c Sat Aug 26 19:04:07 1989 X--- navy.c Sat Aug 26 19:04:25 1989 X*************** X*** 423,429 **** X } X P_ASTAT=DEFEND; X P_NARMY=MAXARM; X! P_NMOVE=0; X NADJMOV; X NADJHLD; X AADJSTAT; X--- 423,435 ---- X } X P_ASTAT=DEFEND; X P_NARMY=MAXARM; X! if ((sct[XREAL][YREAL].designation!=DCITY X! && sct[XREAL][YREAL].designation!=DCAPITOL) X! || P_NMOVE < N_CITYCOST) { X! P_NMOVE=0; X! } else { X! P_NMOVE-= N_CITYCOST; X! } X NADJMOV; X NADJHLD; X AADJSTAT; X*************** X*** 445,451 **** X sct[XREAL][YREAL].people += amount; X P_NPEOP=(unsigned char)((mhold*P_NPEOP-amount)/mhold); X NADJHLD; X! P_NMOVE=0; X NADJMOV; X SADJCIV; X } X--- 451,463 ---- X sct[XREAL][YREAL].people += amount; X P_NPEOP=(unsigned char)((mhold*P_NPEOP-amount)/mhold); X NADJHLD; X! if ((sct[XREAL][YREAL].designation!=DCITY X! && sct[XREAL][YREAL].designation!=DCAPITOL) X! || P_NMOVE < N_CITYCOST) { X! P_NMOVE=0; X! } else { X! P_NMOVE-= N_CITYCOST; X! } X NADJMOV; X SADJCIV; X } X*************** X*** 483,489 **** X P_ASTAT=ONBOARD; X P_AMOVE=0; X P_NARMY=armynum; X! P_NMOVE=0; X NADJMOV; X NADJHLD; X AADJMOV; X--- 495,507 ---- X P_ASTAT=ONBOARD; X P_AMOVE=0; X P_NARMY=armynum; X! if ((sct[XREAL][YREAL].designation!=DCITY X! && sct[XREAL][YREAL].designation!=DCAPITOL) X! || P_NMOVE < N_CITYCOST) { X! P_NMOVE=0; X! } else { X! P_NMOVE-= N_CITYCOST; X! } X NADJMOV; X NADJHLD; X AADJMOV; X*************** X*** 503,509 **** X sct[XREAL][YREAL].people -= amount; X P_NPEOP += (unsigned char)(amount / mhold); X SADJCIV; X! P_NMOVE=0; X NADJMOV; X NADJHLD; X } X--- 521,533 ---- X sct[XREAL][YREAL].people -= amount; X P_NPEOP += (unsigned char)(amount / mhold); X SADJCIV; X! if ((sct[XREAL][YREAL].designation!=DCITY X! && sct[XREAL][YREAL].designation!=DCAPITOL) X! || P_NMOVE < N_CITYCOST) { X! P_NMOVE=0; X! } else { X! P_NMOVE-= N_CITYCOST; X! } X NADJMOV; X NADJHLD; X } X*** otxt0 Sat Aug 26 19:04:08 1989 X--- txt0 Sat Aug 26 19:04:25 1989 X*************** X*** 17,23 **** X 'S': diplomacy status MISC COMMANDS 'a': army report X 'q': quit and save 'f': fleet report X VISUAL 'v': version credits 'g': group army report X! 'd': change display 'Q': quit and save 'w': wizardry commands X 'cntrl-L': redraw '?': help screens 'ESC': extra commands X END X CONQUER EXTENDED COMMANDS X--- 17,23 ---- X 'S': diplomacy status MISC COMMANDS 'a': army report X 'q': quit and save 'f': fleet report X VISUAL 'v': version credits 'g': group army report X! 'd': change display '!': repeat unit cmd 'w': wizardry commands X 'cntrl-L': redraw '?': help screens 'ESC': extra commands X END X CONQUER EXTENDED COMMANDS X*************** X*** 65,74 **** X X To facilitate the use of conquer, the environment variable X XCONQENV has been added to conquer to allow settings of default options X! to conquer. Just add a line to your .cshrc or .login file with the X! following format: X X! setenv XCONQENV "G,nation=MyLand,datadir=this_game" X X If you then type just 'conquer' to enter conquer, it will be X equivalent to typing 'conquer -G -n MyLand -d this_game'. X--- 65,75 ---- X X To facilitate the use of conquer, the environment variable X XCONQENV has been added to conquer to allow settings of default options X! to conquer. Just add a line to your .cshrc or .login (BSD) or .profile (SYSV) X! file with the following format: X X! setenv XCONQENV "G,nation=MyLand,datadir=this_game" (BSD) X! XCONQENV="G,nation=MyLand,datadir=this_game" (SYSV) X X If you then type just 'conquer' to enter conquer, it will be X equivalent to typing 'conquer -G -n MyLand -d this_game'. X*** otxt2 Sat Aug 26 19:04:08 1989 X--- txt2 Sat Aug 26 19:04:26 1989 X*************** X*** 192,199 **** X Medium Two +XSIZESPD 2 x Base X Heavy Three +0 3 x Base X X! Ship maintenance will cost XSHIPMAINT per holding space X! on each update. X END X SHIP INFORMATION X X--- 192,199 ---- X Medium Two +XSIZESPD 2 x Base X Heavy Three +0 3 x Base X X! Ship maintenance will cost XSHIPMAINT per holding space on each update. X! (Un)loading costs XNCITYCOST movement in cities, full movement elsewhere. X END X SHIP INFORMATION X X*** otxt5 Sat Aug 26 19:04:08 1989 X--- txt5 Sat Aug 26 19:04:26 1989 X*************** X*** 114,120 **** X produces 3 points of popularity. Special display and redesignation options X will help you redesignate sectors to use the tradegood you desire. X X! popularity fur(1,any),wool(3,farm),beer(3,farm),cloth(3,farm),wine(5,farm) X communications mules(1,town),horses(5,town),pigeons(7,town),griffons(9,town) X spoilrate pottery(1,town),salt(3,mine),timber(1,lumberyard), X granite(1,mine),pine(3,lumberyd),oak(5,lumberyd),nails(7,town) X--- 114,120 ---- X produces 3 points of popularity. Special display and redesignation options X will help you redesignate sectors to use the tradegood you desire. X X! popularity fur(2,any),wool(5,farm),beer(6,farm),cloth(6,farm),wine(9,farm) X communications mules(1,town),horses(5,town),pigeons(7,town),griffons(9,town) X spoilrate pottery(1,town),salt(3,mine),timber(1,lumberyard), X granite(1,mine),pine(3,lumberyd),oak(5,lumberyd),nails(7,town) X*************** X*** 204,209 **** X--- 204,210 ---- X 100-wealth/4. Charity is a user paramter, which indicates the X percent of your NET income to go to the poor. Giving twice your X population in talons will reduce poverty by one. X+ wealth : see elsewhere. X END X ADDITIONAL MODIFIERS TO NATIONAL ATTRIBUTES X SHAR_EOF echo "File patchV4.5 is complete" chmod 0666 patchV4.5 || echo "restore of patchV4.5 fails" set `wc -c patchV4.5`;Sum=$1 if test "$Sum" != "111877" then echo original size 111877, current size $Sum;fi echo "x - extracting psmap.c (Text)" sed 's/^X//' << 'SHAR_EOF' > psmap.c && X X/* X * A program to convert conquer-maps to postscript Feel free to hack'n slash X * Comments should be sent to d8forma@dtek.chalmers.se X * X */ X X#include <stdio.h> X#include "psmap.h" X Xchar buffer[BUFSIZ]; Xint c, xsize, ysize; Xint xmin, ymin, xmax, ymax, centx, centy; XFILE *infile, *outfile, *fh, *fopen(); Xint grid = TRUE, sqsize = 9, maptype = SIMPLE, onepage = FALSE; Xint verbose = FALSE, coords = TRUE, center = TRUE, note = FALSE; Xint pagewidth, pageheight, xoffset, yoffset; Xchar title[81] = "", foot[81], fontname[81]; Xchar progname[80]; X Xint Xparsepagesize(buf) X char *buf; X{ X if (!strcmp(buf, "A4")) X return (1); X if (!strcmp(buf, "a4")) X return (1); X if (!strcmp(buf, "LETTER")) X return (2); X if (!strcmp(buf, "letter")) X return (2); X return (0); X} X Xvoid Xsetpagesize(defpag) X int defpag; X{ X switch (defpag) { X case 1: X pagewidth = PAGEWIDTH_A4; X pageheight = PAGEHEIGHT_A4; X xoffset = XOFFSET_A4; X yoffset = YOFFSET_A4; X break; X case 2: X pagewidth = PAGEWIDTH_LETTER; X pageheight = PAGEHEIGHT_LETTER; X xoffset = XOFFSET_LETTER; X yoffset = YOFFSET_LETTER; X break; X default: X pagewidth = PAGEWIDTH_OTHER; X pageheight = PAGEHEIGHT_OTHER; X xoffset = XOFFSET_OTHER; X yoffset = YOFFSET_OTHER; X break; X } X} X Xvoid Xget_pagesize() X{ X char *buf; X int defpag = DEFAULTPAGE; X X buf = (char *) getenv("CONQ_PSMAPDEFAULTPAGE"); X if (buf != NULL) X defpag = parsepagesize(buf); X setpagesize(defpag); X} X Xvoid Xpsstring(fh, str) X FILE *fh; X char *str; X{ X fprintf(fh, "("); X while (*str != NULL) { X switch (*str) { X case ('('): X fprintf(fh, "\\("); X break; X case (')'): X fprintf(fh, "\\)"); X break; X case ('\\'): X fprintf(fh, "\\\\"); X break; X case ('\n'): X case ('\f'): X break; X default: X fputc(*str, fh); X break; X } X str++; X } X fprintf(fh, ")"); X} X Xint Xisinstr(string, word) X char *string, *word; X{ X while ((c = index(string, *word)) != 0) X if (!strncmp((char *) c, word, strlen(word))) { X return (TRUE); X } else X string = (char *) c + 1; X return (FALSE); X} X Xint Xgetmaptype(string) X char *string; X{ X if (isinstr(string, "Altitude")) X return (ALTITUDES); X if (isinstr(string, "Designation")) X return (DESIGNATIONS); X if (isinstr(string, "Nation")) X return (NATIONS); X if (isinstr(string, "Vegetation")) X return (VEGETATIONS); X return (SIMPLE); X} X Xvoid Xreadmap() X{ X int x, none; X X /* X * Now we read the map. Anybody got an idea how big it is ? I don't, but X * who cares ? X */ X X x = 0; X xsize = 0; X ysize = 0; X xmin = 0xffffff; X xmax = (-1); X ymin = (-1); X ymax = 0; X none = TRUE; X X fprintf(outfile, "/Map [\n"); X X while ((c = fgetc(infile)) != EOF) { X switch (c) { X case ('\n'): X if (xsize == 0) X xsize = x; X if (xsize != x) { X fprintf(stderr, "Error in map-file. Lines different length\n"); X exit(1); X } X x = 0; X if ((xmax > -1) && (ymin == -1)) X ymin = ysize; X ysize++; X fprintf(outfile, ")\n"); X none = TRUE; X break; X case (' '): X x++; X if (none) { X fprintf(outfile, "("); X none = FALSE; X } X fprintf(outfile, " "); X break; X default: X if (x < xmin) X xmin = x; X if (x > xmax) X xmax = x; X if (ysize > ymax) X ymax = ysize; X x++; X if (none) { X fprintf(outfile, "("); X none = FALSE; X } X fprintf(outfile, "%c", c); X break; X } X } X X fprintf(outfile, "] def\n\n"); X X /* Did I get anything ? */ X if (xmax == -1) { X fprintf(stderr, "Empty input file\n"); X exit(1); X } X if (verbose) { X fprintf(stderr, "Map is %d * %d squares\n", xsize, ysize); X fprintf(stderr, "You can see %d * %d squares\n", X xmax - xmin + 1, ymax - ymin + 1); X } X} X Xvoid Xbuildps() X{ X int xbeg, ybeg, xnumb, ynumb, x, y, xpages, ypages, xcorr, ycorr; X X /* X * The map should be dumped to the outfile now. Maybe we should tell the X * printer what to do with it? X */ X X xpages = 1 + (xmax - xmin) * sqsize / (pagewidth - XMARGINS); X ypages = 1 + (ymax - ymin) * sqsize / (pageheight - YMARGINS); X X if (verbose) X fprintf(stderr, "The map will be %d * %d pages\n", xpages, ypages); X X fprintf(outfile, "/xmin %d def\n", xmin); X fprintf(outfile, "/ymin %d def\n", ymin); X fprintf(outfile, "/xmax %d def\n", xmax); X fprintf(outfile, "/ymax %d def\n", ymax); X fprintf(outfile, "/xpages %d def\n", xpages); X fprintf(outfile, "/ypages %d def\n", ypages); X fprintf(outfile, "/sqsize %d def\n", sqsize); X fprintf(outfile, "/title "); X psstring(outfile, title); X fprintf(outfile, " def\n"); X fprintf(outfile, "/foot "); X psstring(outfile, foot); X fprintf(outfile, " def\n"); X fprintf(outfile, "/foot2 (ConqPS Version %s) def\n", VERSION); X fprintf(outfile, "/PAGEWIDTH %d def\n", pagewidth); X fprintf(outfile, "/PAGEHEIGHT %d def\n", pageheight); X fprintf(outfile, "/XMARGINS %d def\n", XMARGINS); X fprintf(outfile, "/YMARGINS %d def\n", YMARGINS); X fprintf(outfile, "/XOFFSET %d def\n", xoffset); X fprintf(outfile, "/YOFFSET %d def\n", yoffset); X fprintf(outfile, "/maptype %d def\n", maptype); X fprintf(outfile, "/font /%s def\n", fontname); X fprintf(outfile, "/grid "); X if (grid) { X fprintf(outfile, "true def\n"); X } else X fprintf(outfile, "false def\n"); X fprintf(outfile, "/coords "); X if (coords) { X fprintf(outfile, "true def\n"); X } else X fprintf(outfile, "false def\n"); X fprintf(outfile, "/noteq "); X if (note) { X fprintf(outfile, "true def\n"); X } else X fprintf(outfile, "false def\n"); X X fprintf(outfile, "\n\n"); X X fh = fopen(PSFILE, "r"); X X if (fh == NULL) { X perror(progname); X exit(-10); X } X while ((c = fgetc(fh)) != EOF) X fputc(c, outfile); X X fclose(fh); X X fprintf(outfile, "\n %% Here we start the magic\n"); X X xnumb = (int) ((pagewidth - XMARGINS) / sqsize); X ynumb = (int) ((pageheight - YMARGINS) / sqsize); X X if (center) { X xcorr = (int) ((xpages * xnumb - (xmax - xmin)) / 2); X ycorr = (int) ((ypages * ynumb - (ymax - ymin)) / 2); X } else { X xcorr = 0; X ycorr = 0; X } X X if (onepage) { X fprintf(outfile, "%d %d %d %d %d %d DoPage\n", X 1, 1, centx - xnumb / 2, xnumb, centy - ynumb / 2, ynumb); X } else X for (x = 0; x < xpages; x++) X for (y = 0; y < ypages; y++) { X xbeg = x * xnumb + x + xmin - xcorr; X ybeg = y * ynumb + y + ymin - ycorr; X fprintf(outfile, "%d %d %d %d %d %d DoPage\n", X x + 1, y + 1, xbeg, xnumb, ybeg, ynumb); X } X} X Xmain(argc, argv) X int argc; X char **argv; X{ X extern char *optarg; X extern int optind; X char *buf, firstline[81]; X X strcpy(progname, argv[0]); X infile = stdin; X outfile = stdout; X buf = (char *) getenv("CONQ_PSFONT"); X if (buf != NULL) { X strncpy(fontname, buf, 80); X fontname[79] = '\0'; X } else X strcpy(fontname, "Times-Roman"); X get_pagesize(); X X while ((c = getopt(argc, argv, "nuf:gs:t:vcho:p:lW:L:X:Y:")) != -1) X switch (c) { X case 'h': X fprintf(stderr, "%s version %s\n", progname, VERSION); X fprintf(stderr, "Default pagesize is "); X switch (DEFAULTPAGE) { X case 1: X fprintf(stderr, "A4\n"); X break; X case 2: X fprintf(stderr, "LETTER\n"); X break; X default: X fprintf(stderr, "OTHER\n"); X break; X } X fprintf(stderr, USAGE, progname); X fprintf(stderr, "\t-c Turn off coordinates\n"); X fprintf(stderr, "\t-f Set the font\n"); X fprintf(stderr, "\t-g Turn off grid\n"); X fprintf(stderr, "\t-h Show this text\n"); X fprintf(stderr, "\t-l Print large maps\n"); X fprintf(stderr, "\t-L Set the pagelength\n"); X fprintf(stderr, "\t-n Turn off map centering\n"); X fprintf(stderr, "\t-o Show one page centered around x,y\n"); X fprintf(stderr, "\t-p Set pagesize (A4,LETTER or OTHER)\n"); X fprintf(stderr, "\t-s Set size of square (default: %d)\n", sqsize); X fprintf(stderr, "\t-t Set the title of the map\n"); X fprintf(stderr, "\t-u Force simple map output (just letters)\n"); X fprintf(stderr, "\t-v Verbose mode\n"); X fprintf(stderr, "\t-W Set the pagewidth\n"); X fprintf(stderr, "\t-X Set the X-offset\n"); X fprintf(stderr, "\t-Y Set the Y-offset\n"); X exit(1); X case 'u': X maptype = FORCED; X break; X case 'o': X onepage = TRUE; /* Mode one of onepage */ X if (2 != sscanf(optarg, "%d,%d", ¢x, ¢y)) { X fprintf(stderr, "Error in coordinates to o-option\n"); X exit(1); X } X break; X case 'l': X note = TRUE; X break; X case 'p': X setpagesize(parsepagesize(optarg)); X break; X case 'n': X center = FALSE; X break; X case 'g': X grid = FALSE; X break; X case 's': X sscanf(optarg, "%d", &sqsize); X break; X case 'f': X strncpy(fontname, optarg, 80); X fontname[79] = '\0'; X break; X case 't': X strncpy(title, optarg, 80); X title[79] = '\0'; X break; X case 'v': X verbose = TRUE; X break; X case 'c': X coords = FALSE; X break; X case 'W': X sscanf(optarg, "%d", &pagewidth); X break; X case 'L': X sscanf(optarg, "%d", &pageheight); X break; X case 'X': X sscanf(optarg, "%d", &xoffset); X break; X case 'Y': X sscanf(optarg, "%d", &yoffset); X break; X default: X fprintf(stderr, USAGE, argv[0]); X exit(1); X } X if (optind < argc) X infile = fopen(argv[optind], "r"); X X if (infile == NULL) { X perror(progname); X exit(-10); X } X if (++optind < argc) X outfile = fopen(argv[optind], "w"); X X if (outfile == NULL) { X perror(progname); X exit(-10); X } X setbuf(outfile, buffer); /* They recomended this on the net today */ X X if (++optind < argc) { X fprintf(stderr, USAGE, argv[0]); X exit(1); X } X /* If verbose identify program */ X X if (verbose) X fprintf(stderr, "Psmap version %s\n", VERSION); X X X /* First we check if the infile is a valid conquer map file */ X X if (NULL == fgets(firstline, 80, infile)) { X fprintf(stderr, "Empty input file\n"); X exit(1); X } X if (0 != strncmp(firstline, MATCHSTRING, strlen(MATCHSTRING))) { X fprintf(stderr, "Not a Conquer Map file\n"); X exit(1); X } X for (c = 0; c < strlen(firstline); c++) { X if (firstline[c] == ':') X break; X } X X strncpy(foot, firstline, c); X foot[c] = '\0'; X if (title[0] == '\0') { X strncpy(title, &firstline[c + 1], 80); X title[79] = '\0'; X } X /* Find out which type of map it is */ X X if (maptype != FORCED) { X maptype = getmaptype(&firstline[c + 1]); X } else X maptype = SIMPLE; X X if (verbose) { X fprintf(stderr, "Maptype is "); X switch (maptype) { X case (SIMPLE): X fprintf(stderr, "simple\n"); X break; X case (ALTITUDES): X fprintf(stderr, "altitudes\n"); X break; X case (DESIGNATIONS): X fprintf(stderr, "designations\n"); X break; X case (NATIONS): X fprintf(stderr, "nations\n"); X break; X case (VEGETATIONS): X fprintf(stderr, "vegetations\n"); X break; X default: X break; X } X } X /* Send the first part of the postscript file to outfile */ X X fprintf(outfile, "%%!\n"); X fprintf(outfile, "%% Created by conqps version %s\n\n", VERSION); X if (note) X fprintf(outfile, "\nnote\n\n"); X fprintf(outfile, "%% Here comes the map data:\n"); X X /* Parse the map */ X X readmap(); X X /* Build the last part of postscript file */ X X buildps(); X X /* Phu that was it. */ X X if (infile != NULL) X fclose(infile); X if (outfile != NULL) X fclose(outfile); X X return (0); X} X SHAR_EOF chmod 0664 psmap.c || echo "restore of psmap.c fails" set `wc -c psmap.c`;Sum=$1 if test "$Sum" != "11406" then echo original size 11406, current size $Sum;fi echo "x - extracting psmap.h (Text)" sed 's/^X//' << 'SHAR_EOF' > psmap.h && X/* X * Header file for conqps by MaF X * Feel free to modify X * Comments should be sent to d8forma@dtek.chalmers.se X * X */ X X/* Page size hassle */ X#ifdef OTHER X#define DEFAULTPAGE 0 X#endif X X#ifdef A4 X#define DEFAULTPAGE 1 X#endif X X#ifdef LETTER X#define DEFAULTPAGE 2 X#endif X X/* Printer dependant entries */ X#define PAGEWIDTH_A4 540 X#define PAGEHEIGHT_A4 820 X#define XOFFSET_A4 30 X#define YOFFSET_A4 10 X X#define PAGEWIDTH_LETTER 575 X#define PAGEHEIGHT_LETTER 760 X#define XOFFSET_LETTER 15 X#define YOFFSET_LETTER 10 X X#define PAGEWIDTH_OTHER 450 X#define PAGEHEIGHT_OTHER 700 X#define XOFFSET_OTHER 40 X#define YOFFSET_OTHER 30 X X/* Cosmetics */ X#define XMARGINS 30 X#define YMARGINS 50 X X/* Version specific defines */ X#define VERSION "1.0" X#define USAGE "Usage: %s [cghlnvu] [p pagesize] [f font] [o x,y] [s size]\n\t[W n] [L n] [X n] [Y n] [t title] [infile [outfile]]\n" X#define MATCHSTRING "Conquer Version" X X/* Mathematical definitions */ X#define TRUE 1 X#define FALSE 0 X X/* Types of maps possible to be printed */ X#define SIMPLE 0 X#define ALTITUDES 1 X#define DESIGNATIONS 2 X#define NATIONS 3 X#define VEGETATIONS 4 X#define FORCED 5 SHAR_EOF chmod 0664 psmap.h || echo "restore of psmap.h fails" set `wc -c psmap.h`;Sum=$1 if test "$Sum" != "1310" then echo original size 1310, current size $Sum;fi echo "x - extracting psmap.ps (Text)" sed 's/^X//' << 'SHAR_EOF' > psmap.ps && X%% Postscript part of conqps X%% Feel free to hack in it X%% Comments should be sent to d8forma@dtek.chalmers.se X X% This is the user variables X X% This is the font sizes X/TitleFont 13 def % For the title X/FootFont 7 def % For the foot texts X/CoordFont 5 def % For the coordinates X/SquareFont 6 def % For the letters inside the squares X X% This is the linewidth (one unit is 1/72 inch) X/LineWidth .3 def X X% This is how dark some things should be X% 0 is black 1 is white X/SeaCol .6 def % Colour of seas X/KnownCol .97 def % Colour of known squares X/SqTeCol 0 def % Colour of sector symbols X/WNCol 0.9 def % Colour of the other pages in where square X/WKCol 1 def % Colour of this page in where square X X X%=========================================================================== X%========== Behind these walls lures the monster called PostSript ========== X%============== If thou should choose to enter know thy enemy ============== X%=========================================================================== X X% This is the size of the little box showing which map this is X/WhereSize YMARGINS 2 div def X X/AdjustX X{ X /x exch def X x 0 lt { /x x largex 1 add mod def } if X x 0 lt { /x x largex 1 add add def } if X x largex gt { /x x largex 1 add mod def } if X x largex 1 add eq {/x 0 def} if X x X} def X X/AdjustY X{ X /y exch def X y 0 lt { /y y largey 1 add mod def } if X y 0 lt { /y y largey 1 add add def } if X y largey gt { /y y largey 1 add mod def } if X y largey 1 add eq {/y 0 def} if X y X} def X X/DoCoords X{ X newpath X font findfont CoordFont scalefont setfont X X % Do Y coordiates X XMARGINS 2 div X YMARGINS .80 mul ydel sqsize mul add X moveto X ystart 1 ystart ydel add X { X /y exch AdjustY def X currentpoint X /str y (888) cvs def X str stringwidth pop 5 add neg 2 X rmoveto X str show X 2 copy moveto X xdel 1 add sqsize mul 2 add 2 rmoveto X str show X sqsize sub moveto X } for X X % Do X coordinates X XMARGINS 2 div X YMARGINS .80 mul CoordFont sub 2 sub X moveto X xstart 1 xstart xdel add X { X /x exch AdjustX def X x 0 lt { /x x largex add def } if X x largex 1 add gt { /x x largex 1 add sub def } if X currentpoint X /str x (888) cvs def X str show X 2 copy ydel 2 add sqsize mul add 2 add moveto X str show X exch sqsize add exch moveto X } for X} def X X/DoGrid X{ X newpath X X % Do X-lines X XMARGINS 2 div X YMARGINS .80 mul X moveto X ystart ydel add -1 ystart 1 sub X { X pop X xdel 1 add sqsize mul 0 X rlineto X xdel 1 add sqsize mul neg sqsize X rmoveto X } for X X % Do Y-lines X XMARGINS 2 div X YMARGINS .80 mul X moveto X xstart 1 xstart xdel add 1 add X { X pop X 0 ydel 1 add sqsize mul X rlineto X sqsize ydel 1 add sqsize mul neg X rmoveto X } for X X stroke X} def X X/FillSec X{ X sqsize 0 rlineto X 0 sqsize rlineto X sqsize neg 0 rlineto X closepath X gsave X /old currentgray def X setgray X fill X old setgray X grestore X stroke X}def X X/DoMap X{ X /NotEmpty false def X /c ( ) def X font findfont SquareFont scalefont setfont X X 0 1 xdel X { X /X exch def X 0 1 ydel X { X /Y exch def X newpath X XMARGINS 2 div X sqsize mul add X ydel sqsize mul YMARGINS .80 mul add Y sqsize mul sub X moveto X /x X xstart add AdjustX def X /y Y ystart add AdjustY def X c 0 Map y get x get put X c ( ) ne X { X /NotEmpty true def X /NotDone true def X gsave X .01 setlinewidth X currentpoint X KnownCol FillSec X SqTeCol setgray X moveto X maptype (0) ne X { X c (#) eq X { X /NotDone false def X sqsize dup scale X .2 .2 rmoveto X .3 .6 rlineto X .3 -.6 rlineto X -.2 .4 rmoveto X -.2 0 rlineto X stroke X } if X c (^) eq X { X /NotDone false def X sqsize dup scale X .2 .2 rmoveto X .3 .4 rlineto X .2 -.4 rlineto X .1 0 rmoveto X -.1 .3 rlineto X -.1 -.1 rlineto X stroke X } if X c (%) eq X { X /NotDone false def X sqsize dup scale X currentpoint X translate X .2 .2 rmoveto X .4 .2 .2 180 40 arcn X .70 .2 moveto X .6 .2 .10 0 180 arc X stroke X } if X c (-) eq X { X /NotDone false def X sqsize dup scale X .2 .2 rmoveto X .6 0 rlineto X stroke X } if X } if X c (~) eq X { X /NotDone false def X SeaCol FillSec X } if X NotDone X { X sqsize 5 div dup rmoveto X c show X } if X grestore X } if X } for X } for X} def X X X/DoText X{ X font findfont TitleFont scalefont setfont X PAGEWIDTH title stringwidth pop sub 2 div X YMARGINS .4 mul TitleFont 2 div sub X moveto title show X font findfont FootFont scalefont setfont X foot stringwidth pop X foot2 stringwidth pop X gt {foot} {foot2} ifelse X stringwidth pop X PAGEWIDTH exch sub dup X YMARGINS .4 mul X moveto foot show X YMARGINS .4 mul FootFont 1.5 mul sub X moveto foot2 show X} def X X/DrawWhere X{ X 1 1 xpages { X /xsq exch def X ypages -1 1 { X /ysq exch def X newpath X 0 0 moveto X /sqxsize WhereSize xpages div def X /sqysize WhereSize ypages div def X xsq sqxsize mul ypages ysq sub sqysize mul X rmoveto % Am now at top left of this square X sqxsize 0 rlineto X 0 sqysize rlineto X sqxsize neg 0 rlineto X closepath X WNCol setgray X xsq currx eq ysq curry eq and { WKCol setgray } if X gsave fill grestore X 0 setgray stroke X } for X } for X} def X X/DoPage % currx curry xstart xdel ystart ydel X{ X /ydel exch def X /ystart exch def X /xdel exch def X /xstart exch def X /curry exch def X /currx exch def X X /largey Map length 1 sub def X /largex Map 1 get length 1 sub def X X initgraphics X XOFFSET YOFFSET translate X noteq { 0.8544 0.9304 scale 0 YMARGINS .4 mul translate} if X LineWidth setlinewidth X DoText X xpages 1 ne ypages 1 ne or {DrawWhere} if X coords {DoCoords} if X grid {DoGrid} if X DoMap X NotEmpty {showpage} if X} def SHAR_EOF chmod 0664 psmap.ps || echo "restore of psmap.ps fails" set `wc -c psmap.ps`;Sum=$1 if test "$Sum" != "6077" then echo original size 6077, current size $Sum;fi rm -f s2_seq_.tmp echo "You have unpacked the last part" exit 0