From decwrl!ucbvax!tut.cis.ohio-state.edu!gem.mps.ohio-state.edu!ginosko!uunet!zephyr!tektronix!tekgen!tekred!saab!billr Thu Aug 3 07:43:47 PDT 1989 Article 663 of comp.sources.games: Path: decwrl!ucbvax!tut.cis.ohio-state.edu!gem.mps.ohio-state.edu!ginosko!uunet!zephyr!tektronix!tekgen!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v07i053: conquer4 - middle earth multi-player game (V4), Patch3b Message-ID: <4292@tekred.CNA.TEK.COM> Date: 19 Jul 89 17:56:53 GMT Sender: nobody@tekred.CNA.TEK.COM Lines: 1863 Approved: billr@saab.CNA.TEK.COM Submitted-by: Adam Bryant Posting-number: Volume 7, Issue 53 Archive-name: conquer4/Patch3b Patch-To: conquer4: Volume 6, Issue 83-97 #!/bin/sh # this is part 2 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file oMakefile continued # CurArch=2 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 sed 's/^X//' << 'SHAR_EOF' >> oMakefile X $(CC) $(CFLAGS) -DADMIN -c data.c X mv data.o dataA.o Xdisplay.o: data.h header.h display.c X $(CC) $(CFLAGS) -DCONQUER -c display.c Xreports.o: data.h header.h reports.c X $(CC) $(CFLAGS) -DCONQUER -c reports.c Xmove.o: data.h header.h move.c X $(CC) $(CFLAGS) -DCONQUER -c move.c Xmain.o: data.h header.h main.c X $(CC) $(CFLAGS) -DCONQUER -c main.c Xforms.o: data.h header.h forms.c X $(CC) $(CFLAGS) -DCONQUER -c forms.c Xcommands.o: data.h header.h commands.c X $(CC) $(CFLAGS) -DCONQUER -c commands.c Xcheck.o: data.h header.h check.c X $(CC) $(CFLAGS) -c check.c Xtrade.o: data.h header.h trade.c X $(CC) $(CFLAGS) -DCONQUER -c trade.c XtradeA.o: data.h header.h trade.c X $(CC) $(CFLAGS) -DADMIN -c trade.c X mv trade.o tradeA.o XnavyA.o: data.h header.h navy.c X $(CC) $(CFLAGS) -DADMIN -c navy.c X mv navy.o navyA.o Xnavy.o: data.h header.h trade.c X $(CC) $(CFLAGS) -DCONQUER -c navy.c Xnewhelp: data.o header.h data.h newhelp.c X @echo Compiling the help program X $(CC) $(CFLAGS) newhelp.c data.o -o newhelp SHAR_EOF chmod 0644 oMakefile || echo "restore of oMakefile fails" sed 's/^X//' << 'SHAR_EOF' > patchV4.03 && X*** opatchlevel.h Tue Jul 18 22:04:44 1989 X--- patchlevel.h Tue Jul 18 22:04:54 1989 X*************** X*** 1 **** X! #define PATCHLEVEL 2 X--- 1 ---- X! #define PATCHLEVEL 3 X*** onotes.v4 Tue Jul 18 22:04:43 1989 X--- notes.v4 Tue Jul 18 22:04:54 1989 X*************** X*** 1,10 **** X ------------------------------------------------------------------------------ X | THIS FILE CONTAINS RELEASE NOTES FOR CONQUER V4.0 | X | It is broken into 3 sections. Section 3 reflects changes from v3.5 to v4. | X! | Section 1 reflects bugs in v4.0. Section 2 reflects. Future ideas. | X ------------------------------------------------------------------------------ X ------------------------------------------------------------------------- X! | == Bugs Fixed From Conquer Version 4.0 ============================== | X ------------------------------------------------------------------------- X 1. increased newstring[] array from 40 to 100 in makeworl.c. X 2. corrected a mispelling of irrigation. X--- 1,10 ---- X ------------------------------------------------------------------------------ X | THIS FILE CONTAINS RELEASE NOTES FOR CONQUER V4.0 | X | It is broken into 3 sections. Section 3 reflects changes from v3.5 to v4. | X! | Section 1 reflects bugs in v4.0. Section 2 reflects future ideas. | X ------------------------------------------------------------------------------ X ------------------------------------------------------------------------- X! | 1.0 == Bugs Fixed From Conquer Version 4.0 ========================== | X ------------------------------------------------------------------------- X 1. increased newstring[] array from 40 to 100 in makeworl.c. X 2. corrected a mispelling of irrigation. X*************** X*** 40,48 **** X 27. added more names to rebel name list. X 28. worked on Makefile. [made sure of parallelism; ready to distribute] X 29. reworded treasury display on budget screen for clarity. X X ------------------------------------------------------------------------- X! | 1.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V4 | X ------------------------------------------------------------------------- X o make land capture only occur during update. X o make the create world routine interactive with curses display. X--- 40,110 ---- X 27. added more names to rebel name list. X 28. worked on Makefile. [made sure of parallelism; ready to distribute] X 29. reworded treasury display on budget screen for clarity. X+ ===4.0 patch number two released => 4.2 ========================== X+ 30. worked more on Makefile. trying to fix others problems with .SUFFIXES. X+ 31. line 142 of commands.c: fixed bug with assignment of designation. X+ 32. main.c: added environment variable CONQ_NATION. overridden by '-n'. X+ 33. main.c: added environment variable CONQ_DATA. overridden by '-d'. X+ 34. patch to magic.c to extend printable user magics. [Bob Earl]. X+ 35. added BIGLTH, and FILELTH character string size constants. X+ 36. made NPC a number as with MONSTER. X+ 37. added new option '-G' for gaudy news country highlights. [T. Kivinen]. X+ 38. fixed bug with clearing WAR declarations in destroy. [T. Kivinen]. X+ 39. Added a CONQ_OPTS environment variable... can contain many options. X+ Format: setenv CONQ_OPTS "G,nation=foo,data=1" X+ so far only G (Gaudy News), nation, and data supported, may now X+ remove the redundant CONQ_NATION, CONQ_DATA. X+ 40. patched newlogin.c to fix check of new nation name [Bob Earl]. X+ 41. added LOCKF portion to FILELOCK for NFS systems [Richard Caley]. X+ 42. added routine to print designations with '-p' [Richard Caley]. X+ 43. added variations on 'data' or 'nation' to CONQ_OPTS (ex. 'name'). X+ 44. NEAT NEW FEATURE! DEMI-GOD! Now, ntn[0].leader holds the login name X+ of a user who has update and god priveledge on that data file. X+ It is set during world creation and changable from the 'c' command X+ during the game. ['c' for nation '0' to view name]. X+ This allows people to run their own games without owning conquer. X+ 45. Neatened the nation mark selection display in newlogin.c. X+ 46. Decided to remove default setting of nation mark.... always ask now. X+ 47. Fixed bugs in newlogin: 'points <= 0' where it should be 'temp <= 0'. X+ 48. Shortened name of monsters to 7 characters to prevent screen wrap. X+ 49. newlogin.c (916): decreased amount allocated for population dispersal. X+ 50. added command to select prior unit ['o'] like 'p' [Kianush Sayah-Karadji]. X+ 51. extcmds.c (174,178) fix to allow switching out of march. [Kevin Murray]. X+ 52. added a #define XENIX for some XENIX 386 specific bugs. [Jonathan Bayer]. X+ 53. reworked the make new_game in the Makefile. X+ 54. fixed the calculation of available nations in the campaign info screen. X+ 55. made slight adjustment to required wealth for gold mines. X+ 56. big redo on the Makefile. hopefully this is now static. X+ 57. completed change of Barbarians to Savages. Only makeworl.c vars now. X+ 58. removed the CONQ_DATA and CONQ_NATION environment variables since X+ the CONQ_OPTS covers them and can even be expanded more later. X+ 59. big revamp of the helpfiles. caught a few errors. X+ 60. added ntn[0].leader to the 'please contact' messages in admin and main. X+ 61. added monsters and peasants to the '-s' display. [Doesn't show size]. X+ 62. changed get_number() to return -1 for no input... fixed all occurances. X+ 63. reinstated ship and food trading. NOTE!!! Nothing has really been X+ done to fix it... use at own risk. Perhaps someone will find the X+ bugs and fix them. [these trading routines are only temp anyway.] X+ 64. added CONQ_OPTS to admin.c, ignore everything but "datadir=". X+ 65. spent ENTIRE weekend and rewrote newlogin.c. NEW NEWLOGIN HAS: X+ - curses screen interface. X+ - entire input is character by character. X+ - nice sliding arrow menu selection for final menu. X+ - may add or subtract from final menu. X+ - information on each selection is available via '?'. X+ - move up and down via 'hjkl', 'DEL', or 'RET'. X+ - in order to weaken orc population a little, set max repro. X+ during nation build to 12. [May still reach 14 through magic]. X+ - almost all selections are handled in the same manor, this. X+ allows for easier debugging and better code. X+ - the following routines will be available for a future makeworld. X+ interface: newinit(), newbye(), newmsg(), newerror(), newreset(). X+ 66. rewrote all routines that were called during a newlogin so that print X+ statments use the newerror() or newmsg() interface. X+ ===4.0 patch number three released => 4.3 ========================== X X ------------------------------------------------------------------------- X! | 2.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V4 | X ------------------------------------------------------------------------- X o make land capture only occur during update. X o make the create world routine interactive with curses display. X*************** X*** 66,72 **** X o provide a way for displaying monster nations properly... must also assure X accurate information in tmil and tciv. X -------------------------------------------------------------------------- X! | 2) The Following are Good Ideas, But are not going to be done soon | X -------------------------------------------------------------------------- X o Ruling leaders can ruthlesly supress revolts... X X--- 128,134 ---- X o provide a way for displaying monster nations properly... must also assure X accurate information in tmil and tciv. X -------------------------------------------------------------------------- X! | 2.5 The Following are Good Ideas, But are not going to be done soon | X -------------------------------------------------------------------------- X o Ruling leaders can ruthlesly supress revolts... X X*************** X*** 180,186 **** X percent less). X X ----------------------------------------------------------------- X! | 3) Release notes for V4.0. Changes from v3.5 | X ----------------------------------------------------------------- X 1) gave god NINJA power to see troops on the map X 2) fixed message bug (printed blanks). X--- 242,248 ---- X percent less). X X ----------------------------------------------------------------- X! | 3.0 Release notes for V4.0. Changes from v3.5 | X ----------------------------------------------------------------- X 1) gave god NINJA power to see troops on the map X 2) fixed message bug (printed blanks). X*** header.h.orig Wed Jul 12 06:47:18 1989 X--- header.h Wed Jul 19 10:48:54 1989 X*************** X*** 42,54 **** X #define SYSV /* uncomment this line on a UNIX SYSV machine */ X /* #define BSD /* uncomment this line on a BSD machine */ X /* #define HPUX /* uncomment for HP-UNIX */ X /* #define SYSMAIL /* if your system supports mail */ X /* conquer will notify you about system mail */ X X! /* -------------------MODIFICATION IS OPTIONAL ON THE FOLLOWING------------- */ X #define SPOOLDIR "/usr/spool/mail" /* location of mail spool */ X /* #define FILELOCK /* if your system supports BSD flock() */ X /* other file locking is not well implemented */ X #define TIMELOG /* if your system has the date command */ X X #define NTOTAL 25 /* max # of nations ( player + npc + monster ) */ X--- 42,56 ---- X #define SYSV /* uncomment this line on a UNIX SYSV machine */ X /* #define BSD /* uncomment this line on a BSD machine */ X /* #define HPUX /* uncomment for HP-UNIX */ X+ /*#define XENIX /* this plus SYSV for XENIX machines, untested */ X /* #define SYSMAIL /* if your system supports mail */ X /* conquer will notify you about system mail */ X X! /* -------------------MODIFICATION IS OPTIONAL ON THE FOLLOWING-----------*/ X #define SPOOLDIR "/usr/spool/mail" /* location of mail spool */ X /* #define FILELOCK /* if your system supports BSD flock() */ X /* other file locking is not well implemented */ X+ /*#define LOCKF /* in addition to FILELOCK if you have lockf */ X #define TIMELOG /* if your system has the date command */ X X #define NTOTAL 25 /* max # of nations ( player + npc + monster ) */ X*************** X*** 66,79 **** X #define JEWELPCT 33 /* percent of tradegoods that are luxury items */ X #define HIDELOC /* defined if news is not to report sectors */ X X! #define OGOD /* defined if you wish to enhance god powers. This X! should not be defined on the pc as there is no X! /etc/passwd file to read info from */ X X #define DERVDESG /* allow DERVISH to redesignate in a DESERT/ICE */ X! #define MONSTER 45 /* defined if pirates/barbarians/nomads/lzard exist. X represents # of sectors of land that need to be X! in world per pirate/barbarian/nomad nation */ X #define CHEAT /* npcs will cheat to keep up - this is a very weak X form of cheating. I use good npc algorithms X (i think... comments) */ X--- 68,82 ---- X #define JEWELPCT 33 /* percent of tradegoods that are luxury items */ X #define HIDELOC /* defined if news is not to report sectors */ X X! #define OGOD /* defined if you wish to enhance god powers. */ X X #define DERVDESG /* allow DERVISH to redesignate in a DESERT/ICE */ X! #define MONSTER 45 /* defined if pirates/savages/nomads/lzard exist. X represents # of sectors of land that need to be X! in world per pirate/savage/nomad nation */ X! #define NPC 45 /* defined if NPC nations should exist. The numeric X! represents # of sectors of land that need to be X! in world per non-player character nation */ X #define CHEAT /* npcs will cheat to keep up - this is a very weak X form of cheating. I use good npc algorithms X (i think... comments) */ X*************** X*** 87,94 **** X #define PMOUNT 40 /* % of land that is mountains */ X #define PSTORM 3 /* % chance that a storm will strike a fleet */ X /* unless it is in harbor */ X! #define NPC /* defined if non player country exists at start*/ X! #define CMOVE /* Defined if you wish the computer to move X for Player nations if they forget to move */ X #define BEEP /* defined if you wish terminal to beep */ X #define HILIGHT /* defined if terminals support inverse video */ X--- 90,96 ---- X #define PMOUNT 40 /* % of land that is mountains */ X #define PSTORM 3 /* % chance that a storm will strike a fleet */ X /* unless it is in harbor */ X! #define CMOVE /* #ifdef NPC; defined for the computer to move X for Player nations if they forget to move */ X #define BEEP /* defined if you wish terminal to beep */ X #define HILIGHT /* defined if terminals support inverse video */ X*************** X*** 100,106 **** X /* a turn is 1 season and 25% is a large value */ X #define SPEW /* spew random messages from npcs */ X X! /* ---BELOW THIS POINT ARE PARAMETERS YOU MIGHT OPTIONALLY WISH TO CHANGE--- */ X X /* making these numbers large takes more CPU time */ X #define LANDSEE 2 /* how far you can see from your land */ X--- 102,108 ---- X /* a turn is 1 season and 25% is a large value */ X #define SPEW /* spew random messages from npcs */ X X! /* -BELOW THIS POINT ARE PARAMETERS YOU MIGHT OPTIONALLY WISH TO CHANGE-*/ X X /* making these numbers large takes more CPU time */ X #define LANDSEE 2 /* how far you can see from your land */ X*** odata.h Tue Jul 18 22:04:40 1989 X--- data.h Tue Jul 18 22:04:55 1989 X*************** X*** 21,31 **** X #define SCREEN_X_SIZE (( COLS - 21) / 2) /* divide by two as only 1/2 X sectors will be shown */ X #define SCREEN_Y_SIZE ( LINES - 5 ) X! #define HAS_SEEN(x,y) hasseen[(x)+((y)*((COLS-10)/2))] X! #define PASSLTH 7 /*one less than the characters in the password*/ X! #define NAMELTH 9 /*one less than the characters in the name*/ X! #define LEADERLTH 9 /*one less than the characters in the leader*/ X X /*simple contour map definitions*/ X #define WATER (*(ele+0)) X #define PEAK (*(ele+1)) X--- 21,38 ---- X #define SCREEN_X_SIZE (( COLS - 21) / 2) /* divide by two as only 1/2 X sectors will be shown */ X #define SCREEN_Y_SIZE ( LINES - 5 ) X! #define HAS_SEEN(x,y) hasseen[(x)+((y)*((COLS-10)/2))] X! #define PASSLTH 7 /* the number of characters in the passwd*/ X! #define NAMELTH 9 /* the number of characters in the name*/ X! #define LEADERLTH 9 /* the number of characters in the leader*/ X! #define FILELTH 80 /*length for filename holders*/ X! #define LINELTH 80 /*length for input string lines*/ X! #define BIGLTH 256 /*length for large storage strings*/ X! #define NUMCLASS 11 /*number of nation classes */ X X+ /* environment variable strings to check */ X+ #define ENVIRON_OPTS "CONQ_OPTS" X+ X /*simple contour map definitions*/ X #define WATER (*(ele+0)) X #define PEAK (*(ele+1)) X*************** X*** 41,47 **** X #define LIZARD 'L' X #define HUMAN 'H' X #define PIRATE 'P' X! #define BARBARIAN 'B' X #define NOMAD 'N' X #define TUNKNOWN '?' X X--- 48,54 ---- X #define LIZARD 'L' X #define HUMAN 'H' X #define PIRATE 'P' X! #define SAVAGE 'S' X #define NOMAD 'N' X #define TUNKNOWN '?' X X*************** X*** 236,242 **** X #define NPC_PIRATE 18 X #define NPC_LIZARD 19 X #define NPC_NOMAD 20 X! #define NPC_BARBARIAN 21 X X #define ispc(x) (((x)==PC_GOOD)||((x)==PC_EVIL)||((x)==PC_NEUTRAL)) X #define npctype(x) (ispc(x) ? (x) : (x)/4) X--- 243,249 ---- X #define NPC_PIRATE 18 X #define NPC_LIZARD 19 X #define NPC_NOMAD 20 X! #define NPC_SAVAGE 21 X X #define ispc(x) (((x)==PC_GOOD)||((x)==PC_EVIL)||((x)==PC_NEUTRAL)) X #define npctype(x) (ispc(x) ? (x) : (x)/4) X*************** X*** 611,617 **** X extern int fltghold(),fltwhold(),fltmhold(),flthold(),compass(); X extern int get_country(),check_lock(),doclass(); X extern unsigned short fltspeed(); X! extern void do_pirate(), do_nomad(), do_barbarian(), do_lizard(); X extern void getjewel(),getmetal(),loadfleet(),removemgk(),exenewmgk(); X extern struct s_sector *rand_sector(); X extern void subgships(),submships(),subwships(),getspace(),sackem(); X--- 618,624 ---- X extern int fltghold(),fltwhold(),fltmhold(),flthold(),compass(); X extern int get_country(),check_lock(),doclass(); X extern unsigned short fltspeed(); X! extern void do_pirate(), do_nomad(), do_savage(), do_lizard(); X extern void getjewel(),getmetal(),loadfleet(),removemgk(),exenewmgk(); X extern struct s_sector *rand_sector(); X extern void subgships(),submships(),subwships(),getspace(),sackem(); X*************** X*** 622,627 **** X--- 629,635 ---- X extern void errormsg(), clear_bottom(), addgroup(),ext_cmd(); X extern void randomevent(), wdisaster(), weather(), deplete(); X extern void verify_ntn(), verify_sct(), verifydata(), prep(); X+ extern void newbye(), newreset(), newmsg(), newerror(), newinit(); X extern void destroy(), updmove(), spreadsheet(), mailopen(), mailclose(); X extern void updexecs(), updcapture(), updsectors(); X extern void updmil(), updcomodities(), updleader(); X*** oadmin.c Tue Jul 18 22:04:39 1989 X--- admin.c Tue Jul 18 22:04:55 1989 X*************** X*** 46,53 **** X int argc; X char **argv; X { X! int geteuid(), getuid(), setuid(); X! register int i; X char *name; X void srand(); X int getopt(); X--- 46,53 ---- X int argc; X char **argv; X { X! int geteuid(), getuid(), setuid(), realuser, l; X! register int i,j; X char *name; X void srand(); X int getopt(); X*************** X*** 55,71 **** X /* mflag = makeworld, a=add player, x=execute, p=print */ X /* rflag = make world from read in files */ X int mflag, aflag, xflag, pflag, rflag; X! char string[80]; X extern char *optarg; X! char defaultdir[256]; X struct passwd *getpwnam(); X X mflag = aflag = xflag = pflag = rflag = 0; X srand((unsigned) time((long *) 0)); X! strcpy(defaultdir, DEFAULTDIR); X name = string; X *name = 0; X X /* process the command line arguments */ X while((i=getopt(argc,argv,"maxpr:d:"))!=EOF) switch(i){ X /* process the command line arguments */ X--- 55,133 ---- X /* mflag = makeworld, a=add player, x=execute, p=print */ X /* rflag = make world from read in files */ X int mflag, aflag, xflag, pflag, rflag; X! char string[FILELTH]; X extern char *optarg; X! char defaultdir[BIGLTH],cq_opts[BIGLTH]; X struct passwd *getpwnam(); X X mflag = aflag = xflag = pflag = rflag = 0; X srand((unsigned) time((long *) 0)); X! strcpy(cq_opts,""); X name = string; X *name = 0; X X+ /* check conquer options */ X+ if (getenv(ENVIRON_OPTS)!=NULL) { X+ strncpy(cq_opts, getenv(ENVIRON_OPTS), BIGLTH-1); X+ } X+ if (cq_opts[0] != '\0') { X+ l = strlen(cq_opts); X+ for(i=0; i\n"); X+ exit(FAIL); X+ } X+ if (i\n",cq_opts[i]); X+ exit(FAIL); X+ break; X+ } X+ } X+ } X+ X+ /* set the default data directory */ X+ if (defaultdir[0] == '\0') { X+ strcpy(defaultdir, DEFAULTDIR); X+ } X+ X /* process the command line arguments */ X while((i=getopt(argc,argv,"maxpr:d:"))!=EOF) switch(i){ X /* process the command line arguments */ X*************** X*** 90,100 **** X strcpy(scenario, optarg); X break; X case 'd': X! if(optarg[0]!='/') { X! sprintf(defaultdir, "%s/%s", DEFAULTDIR, optarg); X! } else { X! strcpy(defaultdir, optarg); X! } X break; X case '?': /* print out command line arguments */ X printf("Command line format: %s [-maxp -dDIR -rSCENARIO]\n",argv[0]); X--- 152,158 ---- X strcpy(scenario, optarg); X break; X case 'd': X! strcpy(defaultdir, optarg); X break; X case '?': /* print out command line arguments */ X printf("Command line format: %s [-maxp -dDIR -rSCENARIO]\n",argv[0]); X*************** X*** 107,123 **** X exit(SUCCESS); X }; X X! #ifdef OGOD X! if(((getuid())!=(getpwnam(LOGIN)->pw_uid))&&(!aflag)) X! { X! printf("Sorry -- you can not administrate conquer\n"); X! printf("you need to be logged in as %s\n",LOGIN); X! exit(FAIL); X! } X /* may now replace user identity */ X (void) setuid (geteuid ()) ; X- #endif OGOD X X /* now that we have parsed the args, we can got to the X * dir where the files are kept and do some work. X */ X--- 165,180 ---- X exit(SUCCESS); X }; X X! realuser = getuid(); X /* may now replace user identity */ X (void) setuid (geteuid ()) ; X X+ /* set proper defaultdir */ X+ if (defaultdir[0] != '/') { X+ strcpy(cq_opts, defaultdir); X+ sprintf(defaultdir, "%s/%s", DEFAULTDIR, cq_opts); X+ } X+ X /* now that we have parsed the args, we can got to the X * dir where the files are kept and do some work. X */ X*************** X*** 126,131 **** X--- 183,196 ---- X exit(FAIL); X } X if((mflag)||(rflag)) { X+ if(realuser!=(getpwnam(LOGIN)->pw_uid)) { X+ printf("Sorry -- you can not create a world\n"); X+ printf("you need to be logged in as %s",LOGIN); X+ if (strcmp(LOGIN, ntn[0].leader)!=0) { X+ printf(" or %s",ntn[0].leader); X+ } X+ printf("\n"); X+ } X sprintf(string,"%sup",isonfile); X unlink(string); X makeworld(rflag); X*************** X*** 177,200 **** X newlogin(); X unlink(string); X exit(SUCCESS); X! } else if (pflag) { /* print a map of the game */ X fprintf(stderr,"\nFor convenience, this output is to stderr,\n"); X fprintf(stderr,"while the maps will be sent to stdout.\n\n"); X fprintf(stderr,"\tThe valid options are,\n"); X fprintf(stderr,"\t\t1) altitudes\n\t\t2) vegetations\n"); X! fprintf(stderr,"\t\t3) nations\n\n"); X fprintf(stderr,"\tWhat type of map? "); X scanf("%hd", &dismode); X fprintf(stderr,"\n"); X if(dismode==1) printele(); X else if(dismode==2) printveg(); X! else pr_ntns(); X exit(SUCCESS); X } else if (xflag) { /* update the game */ X #ifndef OGOD X! if ( getuid() != (getpwnam(LOGIN))->pw_uid ){ X printf("sorry -- your uid is invalid for updating\n"); X! printf("you need to be logged in as %s\n",LOGIN); X exit(FAIL); X } X #endif OGOD X--- 242,291 ---- X newlogin(); X unlink(string); X exit(SUCCESS); X! } X! X! #ifdef OGOD X! if((realuser!=(getpwnam(LOGIN)->pw_uid))&& X! (realuser!=(getpwnam(ntn[0].leader)->pw_uid))) { X! printf("Sorry -- you can not administrate conquer\n"); X! printf("you need to be logged in as %s",LOGIN); X! if (strcmp(LOGIN, ntn[0].leader)!=0) { X! printf(" or %s",ntn[0].leader); X! } X! printf("\n"); X! exit(FAIL); X! } X! #endif OGOD X! X! if (pflag) { /* print a map of the game */ X fprintf(stderr,"\nFor convenience, this output is to stderr,\n"); X fprintf(stderr,"while the maps will be sent to stdout.\n\n"); X fprintf(stderr,"\tThe valid options are,\n"); X fprintf(stderr,"\t\t1) altitudes\n\t\t2) vegetations\n"); X! fprintf(stderr,"\t\t3) nations\n"); X! fprintf(stderr,"\t\t4) designations\n\n"); X fprintf(stderr,"\tWhat type of map? "); X scanf("%hd", &dismode); X fprintf(stderr,"\n"); X if(dismode==1) printele(); X else if(dismode==2) printveg(); X! else if(dismode==3) pr_ntns(); X! else if(dismode==4) pr_desg(); X! else { X! fprintf(stderr,"must be 1-4\n"); X! exit(FAIL); X! } X exit(SUCCESS); X } else if (xflag) { /* update the game */ X #ifndef OGOD X! if((realuser!=(getpwnam(LOGIN)->pw_uid))&& X! (realuser!=(getpwnam(ntn[0].leader)->pw_uid))) { X printf("sorry -- your uid is invalid for updating\n"); X! printf("you need to be logged in as %s",LOGIN); X! if (strcmp(LOGIN, ntn[0].leader)!=0) { X! printf(" or %s",ntn[0].leader); X! } X! printf("\n"); X exit(FAIL); X } X #endif OGOD X*** oextcmds.c Tue Jul 18 22:04:41 1989 X--- extcmds.c Tue Jul 18 22:04:56 1989 X*************** X*** 174,184 **** X } X /* eliminate half starting movement if start out on march */ X if( P_ASTAT==MARCH && new_stat!=MARCH ) { X! if(P_AMOVE<(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/5){ X errormsg("That troop has gone too far to stop marching"); X return; X } X! P_AMOVE-=(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/5; X AADJMOV; X } X if(new_stat == SCOUT) { X--- 174,184 ---- X } X /* eliminate half starting movement if start out on march */ X if( P_ASTAT==MARCH && new_stat!=MARCH ) { X! if(P_AMOVE<(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/50){ X errormsg("That troop has gone too far to stop marching"); X return; X } X! P_AMOVE-=(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/50; X AADJMOV; X } X if(new_stat == SCOUT) { X*************** X*** 308,313 **** X--- 308,316 ---- X mvaddstr(LINES-2, 0, "How many men to split? "); X refresh(); X men = get_number(); X+ if(men <= 0) { X+ return; X+ } X reducearmy(armynum,men); X } X X*************** X*** 357,363 **** X mvaddstr(LINES-4,0,"enter a valid leader unit/army group id: "); X refresh(); X group = get_number(); X! if( group < 0 || group > MAXARM || curntn->arm[group].sold <=0){ X errormsg("invalid unit number"); X return; X } X--- 360,369 ---- X mvaddstr(LINES-4,0,"enter a valid leader unit/army group id: "); X refresh(); X group = get_number(); X! if(group < 0) { X! return; X! } X! if(group > MAXARM || curntn->arm[group].sold <=0){ X errormsg("invalid unit number"); X return; X } X*** omakeworl.c Tue Jul 18 22:04:42 1989 X--- makeworl.c Tue Jul 18 22:04:56 1989 X*************** X*** 45,51 **** X int rflag; /* TRUE if you wish to read in a map from mapfiles */ X { X char passwd[PASSLTH+1],*getpass(); X! char newstring[200]; X FILE *fopen(); X X /*abort if datafile currently exists*/ X--- 45,51 ---- X int rflag; /* TRUE if you wish to read in a map from mapfiles */ X { X char passwd[PASSLTH+1],*getpass(); X! char newstring[BIGLTH]; X FILE *fopen(); X X /*abort if datafile currently exists*/ X*************** X*** 87,93 **** X--- 87,112 ---- X } X X strncpy(ntn[0].passwd,crypt(passwd,SALT),PASSLTH); X+ X+ /* finally ask for the secondary administrator */ X+ printf("\nYou may now designate an alternate ruler for this world."); X while(TRUE) { X+ printf("\nWhat demi-god shall rule this world? "); X+ gets( newstring ); X+ if (strlen(newstring)==0) { X+ printf("\nGod blesses this world with his presense!\n"); X+ (void) strcpy(ntn[0].leader,LOGIN); X+ break; X+ } else if (strlen(newstring) <= LEADERLTH) { X+ /* HOW DO YOU VERIFY THAT IT IS AN ACTUAL USER? */ X+ printf("\nThe demi-god %s may administrate this new world.\n",newstring); X+ (void) strncpy(ntn[0].leader,newstring,LEADERLTH); X+ break; X+ } X+ printf("\nName too long."); X+ } X+ X+ while(TRUE) { X printf("\nplease enter the size of the world\n"); X X printf("values should be divisible by 8 & greater than 23\n"); X*************** X*** 126,131 **** X--- 145,151 ---- X if( rflag==FALSE ) createworld(); X else readmap(); /* read map in from mapfiles */ X rawmaterials(); X+ X verifydata(__FILE__,__LINE__); X writedata(); X X*************** X*** 712,724 **** X short npirates=0,nbarbarians=0,nnomads=0,nlizards=0; X X FILE *fp, *fopen(); X! char line[80],allign; X! char fname[80]; X X! /*set up god but dont place*/ X curntn = &ntn[0]; X strcpy(curntn->name,"unowned"); X- strcpy(curntn->leader,"god"); X curntn->race=GOD; X curntn->location=GOD; X curntn->powers=KNOWALL; /* so god can see the map */ X--- 732,743 ---- X short npirates=0,nbarbarians=0,nnomads=0,nlizards=0; X X FILE *fp, *fopen(); X! char line[LINELTH+1],allign; X! char fname[FILELTH]; X X! /*set up god but dont place -- do not change leader name*/ X curntn = &ntn[0]; X strcpy(curntn->name,"unowned"); X curntn->race=GOD; X curntn->location=GOD; X curntn->powers=KNOWALL; /* so god can see the map */ X*************** X*** 757,764 **** X } else if( country==NTOTAL-2 ) { X strcpy(curntn->name,"savages"); X strcpy(curntn->leader,"shaman"); X! curntn->active=NPC_BARBARIAN; X! curntn->race=BARBARIAN; X } else if( country==NTOTAL-3 ) { X strcpy(curntn->name,"nomad"); X strcpy(curntn->leader,"khan"); X--- 776,783 ---- X } else if( country==NTOTAL-2 ) { X strcpy(curntn->name,"savages"); X strcpy(curntn->leader,"shaman"); X! curntn->active=NPC_SAVAGE; X! curntn->race=SAVAGE; X } else if( country==NTOTAL-3 ) { X strcpy(curntn->name,"nomad"); X strcpy(curntn->leader,"khan"); X*************** X*** 800,806 **** X } else if(nnomads < MAXARM ) nnomads++; X break; X } X! printf("placing %d lizards, %d pirates, %d barbarians, and %d nomads\n", X nlizards,npirates,nbarbarians,nnomads); X X while((nlizards+npirates+nbarbarians+nnomads > 0 )&&(loopcnt++ <5000)) { X--- 819,825 ---- X } else if(nnomads < MAXARM ) nnomads++; X break; X } X! printf("placing %d lizards, %d pirates, %d savages, and %d nomads\n", X nlizards,npirates,nbarbarians,nnomads); X X while((nlizards+npirates+nbarbarians+nnomads > 0 )&&(loopcnt++ <5000)) { X*************** X*** 810,816 **** X armynum=lizarmy; X } else if( nbarbarians>0 ) { X for(country=1;country0 ) { X for(country=1;country0 ) { X for(country=1;country0 ) { X for(country=1;country MAPX*MAPY/MONSTER*(100-pwater)/100 ) { X printf("world too small to add npc nation %d %s\n",cnum,curntn->name); X continue; X } X--- 1034,1040 ---- X X country=cnum; X curntn = &ntn[country]; X! if( cnum > MAPX*MAPY/NPC*(100-pwater)/100 ) { X printf("world too small to add npc nation %d %s\n",cnum,curntn->name); X continue; X } X*** orandeven.c Tue Jul 18 22:04:44 1989 X--- randeven.c Tue Jul 18 22:04:57 1989 X*************** X*** 14,20 **** X extern FILE *fnews; X extern short country; X X! char eventstr[80]; X int xpos,ypos; /* saved x and y position */ X X char *randevents[] = { X--- 14,20 ---- X extern FILE *fnews; X extern short country; X X! char eventstr[LINELTH+1]; X int xpos,ypos; /* saved x and y position */ X X char *randevents[] = { X*************** X*** 47,53 **** X /* 26 */ "fire ravishes town", X /* 27 */ "black plague rages", X /* 28 */ "pirates raid", X! /* 29 */ "barbarian raid", X /* 30 */ "wizard grants power", X /* 31 */ "magic item grants magic power", X /* 32 */ "ores in one mine run out", X--- 47,53 ---- X /* 26 */ "fire ravishes town", X /* 27 */ "black plague rages", X /* 28 */ "pirates raid", X! /* 29 */ "savages raid", X /* 30 */ "wizard grants power", X /* 31 */ "magic item grants magic power", X /* 32 */ "ores in one mine run out", X*************** X*** 645,651 **** X case 28: /*pirate raid on harbor*/ X done=FALSE; X break; X! case 29: /*barbarian raid*/ X done=FALSE; X break; X case 30: /*new magician + RANDOM POWER*/ X--- 645,651 ---- X case 28: /*pirate raid on harbor*/ X done=FALSE; X break; X! case 29: /*savages raid*/ X done=FALSE; X break; X case 30: /*new magician + RANDOM POWER*/ X*** ocexecute.c Tue Jul 18 22:04:39 1989 X--- cexecute.c Tue Jul 18 22:04:57 1989 X*************** X*** 29,42 **** X { X FILE *fp, *fopen(); X int cmd,savectry; X! char comment[20]; X! char temp[10]; X long longvar,long2var; X int armynum; X short int x,y; X int execed=0; X int done=FALSE; X! char line[80]; X X /* initialize startgold */ X if( isupdate==0) startgold = curntn->tgold; X--- 29,42 ---- X { X FILE *fp, *fopen(); X int cmd,savectry; X! char comment[LINELTH]; X! char temp[LINELTH]; X long longvar,long2var; X int armynum; X short int x,y; X int execed=0; X int done=FALSE; X! char line[BIGLTH]; X X /* initialize startgold */ X if( isupdate==0) startgold = curntn->tgold; X*** oforms.c Tue Jul 18 22:04:41 1989 X--- forms.c Tue Jul 18 22:04:58 1989 X*************** X*** 19,24 **** X--- 19,25 ---- X extern FILE *fexe, *fnews; X extern short country,redraw; X extern long startgold; X+ extern short Gaudy; X X static char helplist[MAXHELP][20]={"Commands", "General Info", X "Military","Magic","Designations","Other"}; X*************** X*** 119,125 **** X diploscrn() X { X int i,j; X! char k,name[20]; X short nation, offset, count, count2, temp; X short isgod=FALSE; X long bribecost; X--- 120,126 ---- X diploscrn() X { X int i,j; X! char k,name[LINELTH]; X short nation, offset, count, count2, temp; X short isgod=FALSE; X long bribecost; X*************** X*** 283,291 **** X mvaddstr(j++,0,"INPUT:"); X refresh(); X temp = get_number(); X if((temp<=UNMET)||(temp>JIHAD) X ||((isgod==FALSE)&&(temp==UNMET))){ X! mvprintw(23,0,"SORRY, Invalid inputs -- hit return"); X refresh(); X getch(); X if(isgod==TRUE) reset_god(); X--- 284,296 ---- X mvaddstr(j++,0,"INPUT:"); X refresh(); X temp = get_number(); X+ if(temp<0) { X+ if(isgod==TRUE) reset_god(); X+ return; X+ } X if((temp<=UNMET)||(temp>JIHAD) X ||((isgod==FALSE)&&(temp==UNMET))){ X! mvprintw(LINES-1,0,"SORRY, Invalid inputs -- hit return"); X refresh(); X getch(); X if(isgod==TRUE) reset_god(); X*************** X*** 345,351 **** X change() X { X float temp; X! char string[10], command[80]; X int i, intval; X long cost,men; X short armynum; X--- 350,356 ---- X change() X { X float temp; X! char string[LINELTH], command[BIGLTH]; X int i, intval; X long cost,men; X short armynum; X*************** X*** 355,361 **** X #ifdef OGOD X FILE *ftmp; X #endif OGOD X! char filename[80]; X X if(country==0) { X isgod=TRUE; X--- 360,366 ---- X #ifdef OGOD X FILE *ftmp; X #endif OGOD X! char filename[FILELTH]; X X if(country==0) { X isgod=TRUE; X*************** X*** 381,387 **** X standend(); X mvprintw(10,0,"capitol loc: x is %d",curntn->capx); X mvprintw(11,0," y is %d",curntn->capy); X- mvprintw(12,0,"leader is %s",curntn->leader); X mvprintw(13,0,"class is %s",*(Class+curntn->class)); X if(ispc( curntn->active ) ) X addstr(" (PC)"); X--- 386,391 ---- X*************** X*** 426,436 **** X--- 430,442 ---- X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__); X X if (country!=0) { X+ mvprintw(12,0,"leader is %s",curntn->leader); X mvprintw(16,0,"score currently...%ld",curntn->score); X mvprintw(3,COLS-30, "attack bonus.........%+4d%%",curntn->aplus); X mvprintw(4,COLS-30, "defense bonus........%+4d%%",curntn->dplus); X mvprintw(12,COLS-30,"total soldiers....%8ld",curntn->tmil); X } else { X+ mvprintw(12,0,"demigod is %s",curntn->leader); X mvprintw(16,0,"turn currently....%ld",TURN); X mvprintw(3,COLS-30, "mercs attack bonus....+%2d%%",MERCATT); X mvprintw(4,COLS-30, "mercs defense bonus...+%2d%%",MERCDEF); X*************** X*** 463,471 **** X addstr(" 7) TOGGLE PC <-> NPC"); X X #ifdef OGOD X! if(isgod==TRUE) mvaddstr(LINES-3,COLS/2-24,"HIT 8 TO DESTROY NATION OR 9 TO CHANGE COMMODITY"); X #else OGOD X! if(isgod==TRUE) mvaddstr(LINES-3,COLS/2-11,"HIT 8 TO DESTROY NATION"); X #endif OGOD X else mvaddstr(LINES-3,COLS/2-14,"HIT ANY OTHER KEY TO CONTINUE"); X standend(); X--- 469,477 ---- X addstr(" 7) TOGGLE PC <-> NPC"); X X #ifdef OGOD X! if(isgod==TRUE) mvaddstr(LINES-3,COLS/2-33,"HIT 8 TO DESTROY, 9 TO CHANGE COMMODITY OR '0' TO CHANGE DEMI-GOD"); X #else OGOD X! if(isgod==TRUE) mvaddstr(LINES-3,COLS/2-24,"HIT 8 TO DESTROY NATION, OR '0' TO CHANGE DEMI-GOD"); X #endif OGOD X else mvaddstr(LINES-3,COLS/2-14,"HIT ANY OTHER KEY TO CONTINUE"); X standend(); X*************** X*** 534,540 **** X refresh(); X intval = get_number(); X if( intval < 0 ) X! errormsg("ERROR - negative tax rate"); X else if( intval > 20 ) X errormsg("NO WAY! the peasants will revolt!!!"); X else if( intval > 10 && (curntn->tsctrs<20 || curntn->score<20) ) X--- 540,546 ---- X refresh(); X intval = get_number(); X if( intval < 0 ) X! break; X else if( intval > 20 ) X errormsg("NO WAY! the peasants will revolt!!!"); X else if( intval > 10 && (curntn->tsctrs<20 || curntn->score<20) ) X*************** X*** 550,556 **** X standend(); X refresh(); X intval = get_number(); X! if(( intval < 0 ) ||( intval > 100 )) X errormsg("ERROR - invalid charity rate"); X /* this will protect from both underflow and overflow */ X else if((int)curntn->popularity + 2*(intval - (int)curntn->charity)>100) X--- 556,564 ---- X standend(); X refresh(); X intval = get_number(); X! if (intval < 0) { X! break; X! } else if( intval > 100 ) X errormsg("ERROR - invalid charity rate"); X /* this will protect from both underflow and overflow */ X else if((int)curntn->popularity + 2*(intval - (int)curntn->charity)>100) X*************** X*** 571,577 **** X refresh(); X intval = get_number(); X if( intval < 0 ) X! errormsg("ERROR - negative input"); X else if( intval+curntn->terror > 100 ) X errormsg("Cant go over 100 terror!!!"); X else if((intval > curntn->popularity ) X--- 579,585 ---- X refresh(); X intval = get_number(); X if( intval < 0 ) X! break; X else if( intval+curntn->terror > 100 ) X errormsg("Cant go over 100 terror!!!"); X else if((intval > curntn->popularity ) X*************** X*** 683,688 **** X--- 691,697 ---- X mvaddstr(LINES-1,0,"WHAT IS NEW VALUE FOR TREASURY? "); X refresh(); X curntn->tgold = (long) get_number(); X+ if (curntn->tgold < 0L) curntn->tgold=0L; X fprintf(ftmp,"L_NGOLD\t%d \t%d \t%ld \t0 \t0 \t%s\n", XNAGOLD ,country,curntn->tgold,"null"); X break; X case '2': X*************** X*** 689,694 **** X--- 698,704 ---- X mvaddstr(LINES-1,0,"WHAT IS NEW AMOUNT OF JEWELS? "); X refresh(); X curntn->jewels = (long) get_number(); X+ if (curntn->jewels < 0L) curntn->jewels=0L; X fprintf(ftmp,"L_NJWLS\t%d \t%d \t%ld \t0 \t0 \t%s\n", XNARGOLD ,country,curntn->jewels,"null"); X break; X case '3': X*************** X*** 695,700 **** X--- 705,711 ---- X mvaddstr(LINES-1,0,"WHAT IS NEW AMOUNT OF METAL? "); X refresh(); X curntn->metals = (long) get_number(); X+ if (curntn->metals < 0L) curntn->metals=0L; X fprintf(ftmp,"L_NMETAL\t%d \t%d \t%ld \t0 \t0 \t%s\n", XNAMETAL ,country,curntn->metals,"null"); X break; X case '4': X*************** X*** 701,706 **** X--- 712,718 ---- X mvaddstr(LINES-1,0,"WHAT IS NEW AMOUNT OF FOOD? "); X refresh(); X curntn->tfood = (long) get_number(); X+ if (curntn->tfood < 0L) curntn->tfood = 0L; X break; X default: X break; X*************** X*** 709,714 **** X--- 721,741 ---- X } X break; X #endif OGOD X+ case '0': X+ if(isgod==TRUE) { X+ mvaddstr(LINES-2,0,"ENTER CONQUER SUPER-USER PASSWORD:"); X+ refresh(); X+ getstr(string); X+ strcpy(passwd,crypt(string,SALT)); X+ if(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0) break; X+ mvaddstr(LINES-1,0,"PROMOTE WHAT USER TO DEMI-GOD? "); X+ refresh(); X+ get_nname(string); X+ if (strlen(string)!=0) { X+ strncpy(ntn[0].leader,string,LEADERLTH); X+ } X+ } X+ break; X case 'p': X case 'P': produce(); fclose(fp); return; X case 'b': X*************** X*** 729,735 **** X int lineno; X FILE *fp, *fopen(); X int i,xcnt,ycnt,done=FALSE; X! char line[80],fname[80]; X X /*find out which helpfile to read in */ X clear_bottom(0); X--- 756,762 ---- X int lineno; X FILE *fp, *fopen(); X int i,xcnt,ycnt,done=FALSE; X! char line[LINELTH],fname[FILELTH]; X X /*find out which helpfile to read in */ X clear_bottom(0); X*************** X*** 798,803 **** X--- 825,852 ---- X fclose(fp); X } X X+ /* routine to highlight a line for news display */ X+ /* if country name is mentioned. By T. Kivinen */ X+ mvaddstrnahil(li,col,p) X+ int li; X+ int col; X+ char *p; X+ { X+ int i,j; X+ move(li,col); X+ for (i=0;p[i];i++) { X+ for (j=0;p[i+j]==ntn[country].name[j];j++); X+ if (ntn[country].name[j]==0 && p[i+j]!='-') { X+ standout(); X+ addstr(ntn[country].name); X+ standend(); X+ i+=j-1; X+ } X+ else X+ addch(p[i]); X+ } X+ } X+ X void X newspaper() X { X*************** X*** 806,812 **** X int newpage,choice,done=FALSE; X short pagenum=1; X int i,ydist,xdist; X! char line[80],name[80]; X X /* check to make sure that there are newspapers */ X if (TURN==0) { X--- 855,861 ---- X int newpage,choice,done=FALSE; X short pagenum=1; X int i,ydist,xdist; X! char line[LINELTH],name[FILELTH]; X X /* check to make sure that there are newspapers */ X if (TURN==0) { X*************** X*** 874,881 **** X mvprintw(3,37-strlen(name)/2,"%s",name+2); X standend(); X /* display any pending non-blank lines */ X! if(strcmp(line,name)!=0 && strlen(line)>2) X! mvaddstr(lineno++,0,line+2); X } else if(fgets(line,80,fp)==NULL) done=TRUE; X else { X if(line[1]!='.') { X--- 923,932 ---- X mvprintw(3,37-strlen(name)/2,"%s",name+2); X standend(); X /* display any pending non-blank lines */ X! if(strcmp(line,name)!=0 && strlen(line)>2) { X! if (Gaudy) mvaddstrnahil(lineno++,0,line+2); X! else mvaddstr(lineno++,0,line+2); X! } X } else if(fgets(line,80,fp)==NULL) done=TRUE; X else { X if(line[1]!='.') { X*************** X*** 888,894 **** X pagenum=todigit(line[0]); X } X else if(lineno>LINES-4) newpage=FALSE; X! else if(strlen(line)>2) mvaddstr(lineno++,0,line+2); X } X } X if(newpage==FALSE||done==TRUE){ X--- 939,948 ---- X pagenum=todigit(line[0]); X } X else if(lineno>LINES-4) newpage=FALSE; X! else if(strlen(line)>2) { X! if (Gaudy) mvaddstrnahil(lineno++,0,line+2); X! else mvaddstr(lineno++,0,line+2); X! } X } X } X if(newpage==FALSE||done==TRUE){ X*** omisc.c Tue Jul 18 22:04:42 1989 X--- misc.c Tue Jul 18 22:04:58 1989 X*************** X*** 41,47 **** X } /* move_file() */ X #endif CONQUER X X! #ifdef CONQUER X long X get_number() X { X--- 41,48 ---- X } /* move_file() */ X #endif CONQUER X X! /* returns integer input greater than zero or */ X! /* -1 for no input. */ X long X get_number() X { X*************** X*** 51,57 **** X /* this routine totally redone to allow deleting */ X while(!done) { X ch=getch(); X! if(isdigit(ch)) { X /* only print numbers to the screen */ X addch(ch); X refresh(); X--- 52,58 ---- X /* this routine totally redone to allow deleting */ X while(!done) { X ch=getch(); X! if(isdigit(ch) && count<12) { X /* only print numbers to the screen */ X addch(ch); X refresh(); X*************** X*** 70,80 **** X } else if((ch=='\n')||(ch=='\r')) { X done=TRUE; X } X- if( count >= 12 ) done=TRUE; X } X return( sum ); X } X- #endif CONQUER X X #define INFINITE 1000 X X--- 71,82 ---- X } else if((ch=='\n')||(ch=='\r')) { X done=TRUE; X } X } X+ if (count==0) { X+ return(-1); X+ } X return( sum ); X } X X #define INFINITE 1000 X X*************** X*** 935,941 **** X { X short armynum, nvynum; X int i, x, y; X! char buf[20]; X struct s_nation *nptr; X X nptr = &ntn[country]; X--- 937,943 ---- X { X short armynum, nvynum; X int i, x, y; X! char buf[LINELTH]; X struct s_nation *nptr; X X nptr = &ntn[country]; X*************** X*** 968,974 **** X ntn[i].dstatus[country]=UNMET; X nptr->dstatus[i]=UNMET; X } X! X /*if take them you get their gold*/ X if(country!=sct[nptr->capx][nptr->capy].owner){ X if(nptr->tgold>0) ntn[sct[nptr->capx][nptr->capy].owner].tgold+=nptr->tgold; X--- 970,982 ---- X ntn[i].dstatus[country]=UNMET; X nptr->dstatus[i]=UNMET; X } X! #ifdef MONSTER X! for(i=NTOTAL-4;idstatus[i]=WAR; X! } X! #endif X! X /*if take them you get their gold*/ X if(country!=sct[nptr->capx][nptr->capy].owner){ X if(nptr->tgold>0) ntn[sct[nptr->capx][nptr->capy].owner].tgold+=nptr->tgold; X*************** X*** 1302,1309 **** X spread.gold += spread.revfood + spread.revjewels + spread.revmetal + spread.revcity + spread.revcap + spread.revothr; X } X X- #ifdef CONQUER X- X /* string inputing routine to allow deleting */ X void X get_nname(str) X--- 1310,1315 ---- X*************** X*** 1338,1343 **** X--- 1344,1351 ---- X str[count] = '\0'; X } X X+ X+ #ifdef CONQUER X /* routine to find a nation number using name or number */ X /* returns NTOTAL+1 if input is invalid; -1 for no input */ X int X*************** X*** 1441,1447 **** X void X mailopen(to) X { X! char line[20]; X if(mailok == TRUE) mailclose(); X X if (to != -2) X--- 1449,1455 ---- X void X mailopen(to) X { X! char line[LINELTH]; X if(mailok == TRUE) mailclose(); X X if (to != -2) X*************** X*** 1474,1507 **** X int prtflag; /* if true printf reason */ X { X register int i; X X if((isprint(mark)==0)||(isspace(mark)!=0)) { X! if(prtflag) printf("%c is white space\n",mark); X return(FALSE); X } X X for(i=0;ele[i]!='0';i++) if(mark==(*(ele+i))) { X! if(prtflag) printf("%c is elevation character\n",mark); X return(FALSE); X } X X for(i=0;veg[i]!='0';i++) if(mark==(*(veg+i))) { X! if(prtflag) printf("%c is vegetition character\n",mark); X return(FALSE); X } X X! for(i=1;i0) { X! P_ASOLD=men; X! AADJMEN; X! } X } X break; X #endif OGOD X*************** X*** 569,574 **** X--- 571,577 ---- X clrtoeol(); X refresh(); X nvynum = get_number(); X+ if(nvynum<0) break; X #ifdef TRADE X if (curntn->nvy[nvynum].commodity==TRADED) { X errormsg("Sorry - That Navy is up for trade"); X*************** X*** 593,599 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy<0 || newnavy>=MAXNAVY) { X errormsg("Sorry - Invalid Navy unit"); X break; X } X--- 596,603 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy < 0) break; X! if(newnavy >= MAXNAVY) { X errormsg("Sorry - Invalid Navy unit"); X break; X } X*************** X*** 700,706 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>P_NWAR(shipsize)) newnavy=0; X NSUB_WAR(newnavy); X (void) addwships(navy,shipsize,newnavy); X } X--- 704,710 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>P_NWAR(shipsize)||newnavy<0) newnavy=0; X NSUB_WAR(newnavy); X (void) addwships(navy,shipsize,newnavy); X } X*************** X*** 709,715 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>P_NMER(shipsize)) newnavy=0; X NSUB_MER(newnavy); X (void) addmships(navy,shipsize,newnavy); X } X--- 713,719 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>P_NMER(shipsize)||newnavy<0) newnavy=0; X NSUB_MER(newnavy); X (void) addmships(navy,shipsize,newnavy); X } X*************** X*** 718,724 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>P_NGAL(shipsize)) newnavy=0; X NSUB_GAL(newnavy); X (void) addgships(navy,shipsize,newnavy); X } X--- 722,728 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>P_NGAL(shipsize)||newnavy<0) newnavy=0; X NSUB_GAL(newnavy); X (void) addgships(navy,shipsize,newnavy); X } X*************** X*** 779,785 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>N_MASK) newnavy=0; X (void) NADD_WAR(newnavy); X } X for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { X--- 783,789 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>N_MASK||newnavy<0) newnavy=0; X (void) NADD_WAR(newnavy); X } X for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { X*************** X*** 787,793 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>N_MASK) newnavy=0; X (void) NADD_MER(newnavy); X } X for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { X--- 791,797 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>N_MASK||newnavy<0) newnavy=0; X (void) NADD_MER(newnavy); X } X for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { X*************** X*** 795,801 **** X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>N_MASK) newnavy=0; X (void) NADD_GAL(newnavy); X } X NADJWAR; X--- 799,805 ---- X clrtoeol(); X refresh(); X newnavy = get_number(); X! if(newnavy>N_MASK||newnavy<0) newnavy=0; X (void) NADD_GAL(newnavy); X } X NADJWAR; X*************** X*** 827,835 **** X mvaddstr(ypos,0,"What value for crew/ship unit: "); X refresh(); X crew = get_number(); X! if (crew>=0 && crew<=SHIPCREW) X P_NCREW = crew; X! NADJCRW; X } X break; X #endif OGOD X--- 831,840 ---- X mvaddstr(ypos,0,"What value for crew/ship unit: "); X refresh(); X crew = get_number(); X! if (crew>=0 && crew<=SHIPCREW) { X P_NCREW = crew; X! NADJCRW; X! } X } X break; X #endif OGOD X*** oupdate.c Tue Jul 18 22:04:46 1989 X--- update.c Tue Jul 18 22:05:00 1989 X*************** X*** 26,32 **** X void X update() X { X! char command[80],filename[80]; X X sprintf(filename,"%s%d",newsfile,TURN); X if ((fnews=fopen(filename,"w"))==NULL) { X--- 26,32 ---- X void X update() X { X! char command[BIGLTH],filename[FILELTH]; X X sprintf(filename,"%s%d",newsfile,TURN); X if ((fnews=fopen(filename,"w"))==NULL) { X*************** X*** 217,223 **** X if((designation==DDEVASTATED)||(Attr<0)||(movecost[x][y]<0)) Attr=0; SHAR_EOF echo "End of part 2, continue with part 3" echo "3" > s2_seq_.tmp exit 0