|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: S T
Length: 26146 (0x6622) Types: TextFile Names: »SysVR3.pch«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Zork/SysVR3.pch«
*** README.rjnoe.orig Fri Oct 28 11:36:38 1988 --- README.rjnoe Fri Oct 28 11:36:38 1988 *************** *** 0 --- 1,144 ----- + I have attempted porting the UNIX F77 version of Dungeon - which you posted + to Usenet about a year ago - to the AT&T 3B2/400 running UNIX System V + Release 3.0. What follows is a description of some of the things I needed + to change just to get it running on my system. I hope you find it useful. + The base patch level I worked from was 3 (including the "3.1" patch). + + 1. Different F77 Compilation System + First off, this UNIX system does not use the FORTRAN 77 compiler and + archive libraries used on previous versions of System V. What I have is + called FORTRAN 77 XLA+ Compilation System, Issue 1 Version 0. The F77 + used on previous UNIX machines is sometimes called f77 1.1. This difference + required several changes to Makefile.sysv. Both the command to invoke + the compiler and options recognized by the compiler are different. + I have learned that there is a newer version of F77-XLA+ available from + AT&T; some of the problems I mention below might be fixed in that version. + + 2. No LOGICAL Arguments to Bitwise Intrinsic Functions + The F77-XLA+ compiler is picky about LOGICAL type arguments being passed + to the intrinsic bitwise (INTEGER) functions and(), or(), and not(). This + was very easily fixed by translating to the logical operators .AND., .OR., + and .NOT.. + + 3. No INTEGER Arguments to ichar() Intrinsic Function + The F77-XLA+ compiler is picky about INTEGER arguments passed to ichar(). + They were redundant calls in all cases I found. (Just the INW() and UINW() + arrays were involved.) + + 4. No $ Edit Descriptor in FORMAT Statements + The F77-XLA+ compiler does not recognize the $ in FORMAT statements as a + means of suppressing newline at the end of an output operation. This was + apparently not an oversight; they documented its absence. I have found some + vestiges of the code which would have implemented it (e.g. an external symbol + in the I/O library called "F77nonl") but the capability is just not there. + I can find no substitute and have been putting up with having my ">" game + prompt not appear on the same line as my input. + + 5. FUNCTION INIT() Name Conflict + The external symbol "init" is used in the F77-XLA+ I/O library libfortI77.a + to indicate whether or not it has been initialized in the current process. + I merely changed the Dungeon function name to DINIT. + + 6. CLOSE() with Long Filename Causes Fatal Run-time Errors + There is a bug in the F77-XLA+ I/O library libfortI77.a that occurs when + trying to CLOSE() a unit that had been OPENed to a UNIX file with a long + pathname. Think of the F77 I/O subsystem as overlying the standard I/O + (stdio) subsystem. A F77 OPEN eventually calls fopen(3S) [3S: in the stdio + library] and stores the FILE * pointer which fopen returns into an element + of an array of structures corresponding to the unit number OPENed. When + the unit is CLOSEd, the file name passed to OPEN is copied into a character + array within this same structure, using strcpy(3C) [3C: in the C library]. + (I assume this is to allow future reOPENing of the file, but haven't really + looked into this much.) No bounds or string length checking is done. So + when the filename is long (as might be expected for INDXFILE or TEXTFILE), + this overwrites the next F77 I/O unit structure with garbage. If the next + unit was being used, the pointer to the corresponding stdio structure is now + gone. If not, the next unit now appears to be in use because the FILE * + is no longer a NULL pointer and when the F77 code exits normally (e.g. + through STOP) it will try to clean up this unit. These considerations + led me to make the following changes: + + Since INDXFILE and TEXTFILE could not be CLOSEd once OPENed, I + moved INDXFILE from unit 1 to unit 3. Unit 1 is now used only + for "dsave.dat", which is short enough that it can be closed and + opened normally. TEXTFILE remains at unit 2. + + I dropped my exit.F source file containing SUBROUTINE EXIT (which + consisted entirely of one executable statement, STOP) and replaced + it with exit.c containing the C function void exit_(). Since STOP + tries to clean up F77 I/O unit structures that have been OPENed, + I circumvent this by doing a CALL EXIT in F77 which invokes the + C function exit_() on my system. The latter function simply calls + exit() in the C/stdio library, cleans up the stdio structures and + terminates the process without mucking with the screwy F77 I/O + subsystem. + + 7. CHARACTER Arguments Passed Inconsistently + The F77-XLA+ documentation indicates that a CHARACTER variable (or an + array of CHARACTER variables) is not quite passed by reference. Instead + of just passing the address of the variable (or base address of the array), + effectively what is passed is a pointer to a structure containing (in C): + struct { char *s; long l; } where s is the pointer to the CHARACTER variable + (or array) and l is its length. So dereferencing the passed pointer once + will give you s, the address of the CHARACTER variable. All fine and dandy, + but they DIDN'T TELL THE PEOPLE WHO CODED THE I/O LIBRARY! When a CHARACTER + array is passed to READ(), it interprets the structure pointer passed as the + address of the variable and starts overwriting the wrong place. The one place + I found this was in RDLINE() and I fixed it by changing the READ() BUFFER to + use an implied DO loop. What can I say, at least it works. + + 8. Large Amounts of I/O in One Statement Fail + There appears to be some not easily identifiable bug in the F77-XLA+ I/O + library which causes it to abort when writing large amounts of data in + one single WRITE(). I found this when attempting to save the game in + dsave.dat. I separated the largest arrays (notably the COMMON /OBJCTS/ + arrays) into individual WRITEs and haven't had any further problems. + I changed the READs (for game restoration) to be identical, just for + consistency's sake. + + + There are probably other bugs I have not yet discovered. Already I am + suspicious of the random number generation on my system since I've never + had to take more than one whack at the troll before he's knocked out. + I'll keep looking at things like that and keep you posted, if you like. + + + There are also a few other things my compiler complains about that I did not + bother to fix: + + The C preprocessor (/lib/cpp) in System V Release 3 warns about extra + tokens on cpp lines like #else, #elif, and #endif. One way to suppress + these warnings is to add /* comment */ delimiters around the offending token: + #ifdef PDP + ... + #else /* PDP */ + ... + #endif /* PDP */ + + The F77-XLA+ compiler warns about a duplicate type statement for PRSWON in + FUNCTION BLOW in demons.F. Since PRSWON is already declared in parser.h, it + need not be declared again in demons.F, as it #includes parser.h. + + The F77-XLA+ compiler complains if the last statement before END in each + FUNCTION is not a RETURN. Specifically, in the following: + BALLOP in ballop.F + DINIT in dinit.F + LEX in np.F + SPARSE in np1.F + CYCLOP in villns.F + DINIT has FORMAT statements between RETURN and END, CYCLOP has a computed + GOTO just before the END, and the others all have unconditional GOTOs just + before their ENDs. If you ask me, the F77-XLA+ compiler is being a little + weird here. + + If there's anything I can do to help out with Dungeon, please let me know. + If no one else has done it, I'm toying with the idea of porting it to C. + Please let me know your opinion on that. Thanks. + -- + Roger Noe rjnoe@arrakis.ece.uiuc.edu + University of Illinois + Department of Electrical and Computer Engineering + 248 Everitt Laboratory + 1406 West Green Street + Urbana, IL 61801 USA 40:06:39 N. 88:13:41 W. + +1 217 333 3496 *** Makefile.sysv.orig Mon Oct 24 15:28:55 1988 --- Makefile.sysv Mon Oct 24 15:28:54 1988 *************** *** 1,3 # Makefile for creating dungeon # Edit BIN DDIR and FFLAGS suitable for your system # Also, if you are running System V change the .F.o production --- 1,4 ----- + F77 = fort # Makefile for creating dungeon # Edit BIN DDIR and FFLAGS suitable for your system # Also, if you are running System V change the .F.o production *************** *** 11,17 # f77 -c $(FFLAGS) $*.F # For System V use the following production instead: @/lib/cpp $(CPPFLAGS) $*.F > $*.f ! f77 -c $(FFLAGS) $*.f rm $*.f # define SYSV if running System V or V7 --- 12,18 ----- # f77 -c $(FFLAGS) $*.F # For System V use the following production instead: @/lib/cpp $(CPPFLAGS) $*.F > $*.f ! $(F77) -c $(FFLAGS) $*.f rm $*.f # define SYSV if running System V or V7 *************** *** 24,30 #FOPTS = -q # -g -Ddebug # use -Nn650 for System V to increase default symbol table size # also, no -g flag (causes runtime errors) ! FOPTS = -q -Nn650 # f77 compiler flags for pdp (64K split I/D) #FOPTS = -q -I2 -L1 -i -DPDP # -Ddebug FFLAGS = -O $(FOPTS) --- 25,32 ----- #FOPTS = -q # -g -Ddebug # use -Nn650 for System V to increase default symbol table size # also, no -g flag (causes runtime errors) ! #FOPTS = -q -Nn650 ! FOPTS = # f77 compiler flags for pdp (64K split I/D) #FOPTS = -q -I2 -L1 -i -DPDP # -Ddebug FFLAGS = -O $(FOPTS) *************** *** 51,57 FSRC = actors.F ballop.F clockr.F demons.F\ dgame.F dinit.F dmain.F dso1.F dso2.F\ dso3.F dso4.F dso5.F dso6.F dso7.F\ ! dsub.F dverb1.F dverb2.F exit.F gdt.F lightp.F\ nobjs.F np.F np1.F np2.F np3.F nrooms.F objcts.F\ rooms.F sobjs.F sverbs.F verbs.F villns.F --- 53,59 ----- FSRC = actors.F ballop.F clockr.F demons.F\ dgame.F dinit.F dmain.F dso1.F dso2.F\ dso3.F dso4.F dso5.F dso6.F dso7.F\ ! dsub.F dverb1.F dverb2.F gdt.F lightp.F\ nobjs.F np.F np1.F np2.F np3.F nrooms.F objcts.F\ rooms.F sobjs.F sverbs.F verbs.F villns.F *************** *** 55,61 nobjs.F np.F np1.F np2.F np3.F nrooms.F objcts.F\ rooms.F sobjs.F sverbs.F verbs.F villns.F ! CSRC = cinit.c cio.c cspeak.c decode.c lex.c listen.c rtim.c OBJS = actors.o ballop.o clockr.o demons.o\ dgame.o dinit.o dmain.o dso1.o dso2.o\ --- 57,63 ----- nobjs.F np.F np1.F np2.F np3.F nrooms.F objcts.F\ rooms.F sobjs.F sverbs.F verbs.F villns.F ! CSRC = cinit.c cio.c cspeak.c decode.c exit.c lex.c listen.c rtim.c OBJS = actors.o ballop.o clockr.o demons.o\ dgame.o dinit.o dmain.o dso1.o dso2.o\ *************** *** 72,78 pdp: dungpdp speak listen dtext.dat dungeon: $(OBJS) ! f77 -o dungeon $(OBJS) $(LDFLAGS) @echo done dungpdp: $(OBJS) $(PDPOBJS) --- 74,80 ----- pdp: dungpdp speak listen dtext.dat dungeon: $(OBJS) ! $(F77) -o dungeon $(OBJS) $(LDFLAGS) @echo done dungpdp: $(OBJS) $(PDPOBJS) *************** *** 98,105 dinit.o: dinit.F # f77 $(FFLAGS) -DDDIR=$(DDIR) $(WIZDEF) -c dinit.F # For System V use the following instead: ! @/lib/cpp $(CPPFLAGS) dinit.F > dinit.f ! f77 $(FFLAGS) -DDDIR=$(DDIR) $(WIZDEF) -c dinit.f rm $*.f # uncomment the following for Suns to get around an optimizer bug --- 100,107 ----- dinit.o: dinit.F # f77 $(FFLAGS) -DDDIR=$(DDIR) $(WIZDEF) -c dinit.F # For System V use the following instead: ! @/lib/cpp $(CPPFLAGS) -DDDIR=$(DDIR) $(WIZDEF) dinit.F > dinit.f ! $(F77) -c $(FFLAGS) dinit.f rm $*.f # uncomment the following for Suns to get around an optimizer bug *** dinit.F.orig Mon Oct 24 15:28:55 1988 --- dinit.F Mon Oct 24 15:28:55 1988 *************** *** 18,24 C C DECLARATIONS C ! LOGICAL FUNCTION INIT(X) IMPLICIT INTEGER (A-Z) #ifndef PDP LOGICAL PROTCT --- 18,24 ----- C C DECLARATIONS C ! LOGICAL FUNCTION DINIT(X) IMPLICIT INTEGER (A-Z) #ifndef PDP LOGICAL PROTCT *************** *** 153,159 FROMDR=0 SCOLRM=0 SCOLAC=0 ! INIT=.FALSE. MLOC=MRB C C INIT, PAGE 4 --- 153,159 ----- FROMDR=0 SCOLRM=0 SCOLAC=0 ! DINIT=.FALSE. MLOC=MRB C C INIT, PAGE 4 *************** *** 247,253 HERE=AROOM(WINNER) THFPOS=OROOM(THIEF) BLOC=OROOM(BALLO) ! INIT=.TRUE. #ifdef debug C C Normally, PRSFLG is setable in gdt to allow seeing various --- 247,253 ----- HERE=AROOM(WINNER) THFPOS=OROOM(THIEF) BLOC=OROOM(BALLO) ! DINIT=.TRUE. #ifdef debug C C Normally, PRSFLG is setable in gdt to allow seeing various *************** *** 266,272 1925 continue END #else PDP ! 10000 INIT=.FALSE. C !ASSUME INIT FAILS. MMAX=1050 C !SET UP ARRAY LIMITS. --- 266,272 ----- 1925 continue END #else PDP ! 10000 DINIT=.FALSE. C !ASSUME INIT FAILS. MMAX=1050 C !SET UP ARRAY LIMITS. *************** *** 449,455 C C NOW RESTORE FROM EXISTING INDEX FILE. C ! OPEN(UNIT=1,file=INDXFILE,status='OLD', #ifdef XELOS & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900,recl=1) #else --- 449,455 ----- C C NOW RESTORE FROM EXISTING INDEX FILE. C ! OPEN(UNIT=3,file=INDXFILE,status='OLD', #ifdef XELOS & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900,recl=1) #else *************** *** 455,462 #else & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900) #endif ! rewind(unit=1, err=1900) ! READ(1,130) I,J,K C !GET VERSION. IF((I.NE.VMAJ).OR.(J.NE.VMIN)) & GO TO 1925 --- 455,462 ----- #else & FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900) #endif ! rewind(unit=3, err=1900) ! READ(3,130) I,J,K C !GET VERSION. IF((I.NE.VMAJ).OR.(J.NE.VMIN)) & GO TO 1925 *************** *** 474,483 150 FORMAT(' RESTORING FROM "dindx.dat"') #endif NOCC #endif debug ! READ(1,130) MXSCOR,STRBIT,EGMXSC ! READ(1,130) RLNT,RDESC2,RDESC1,REXIT,RACTIO,RVAL,RFLAG ! READ(1,130) XLNT,TRAVEL ! READ(1,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2, & OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN, & OREAD READ(1,130) R2LNT,OROOM2,RROOM2 --- 474,483 ----- 150 FORMAT(' RESTORING FROM "dindx.dat"') #endif NOCC #endif debug ! READ(3,130) MXSCOR,STRBIT,EGMXSC ! READ(3,130) RLNT,RDESC2,RDESC1,REXIT,RACTIO,RVAL,RFLAG ! READ(3,130) XLNT,TRAVEL ! READ(3,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2, & OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN, & OREAD READ(3,130) R2LNT,OROOM2,RROOM2 *************** *** 480,491 READ(1,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2, & OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN, & OREAD ! READ(1,130) R2LNT,OROOM2,RROOM2 ! READ(1,130) CLNT,CTICK,CACTIO ! READ(1,135) CFLAG ! READ(1,130) VLNT,VILLNS,VPROB,VOPPS,VBEST,VMELEE ! READ(1,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG ! READ(1,130) MBASE,MLNT,RTEXT C CLOSE(1) GO TO 1025 --- 480,491 ----- READ(3,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2, & OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN, & OREAD ! READ(3,130) R2LNT,OROOM2,RROOM2 ! READ(3,130) CLNT,CTICK,CACTIO ! READ(3,135) CFLAG ! READ(3,130) VLNT,VILLNS,VPROB,VOPPS,VBEST,VMELEE ! READ(3,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG ! READ(3,130) MBASE,MLNT,RTEXT C C don't CLOSE index file, even though it won't be used again C *************** *** 487,493 READ(1,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG READ(1,130) MBASE,MLNT,RTEXT C ! CLOSE(1) GO TO 1025 C !INIT DONE. C --- 487,494 ----- READ(3,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG READ(3,130) MBASE,MLNT,RTEXT C ! C don't CLOSE index file, even though it won't be used again ! C GO TO 1025 C !INIT DONE. C *************** *** 511,517 HERE=AROOM(WINNER) THFPOS=OROOM(THIEF) BLOC=OROOM(BALLO) ! INIT=.TRUE. C #ifdef debug PRINT 1050,RLNT,RMAX,XLNT,XMAX,OLNT,OMAX,MLNT,MMAX, --- 512,518 ----- HERE=AROOM(WINNER) THFPOS=OROOM(THIEF) BLOC=OROOM(BALLO) ! DINIT=.TRUE. C #ifdef debug PRINT 1050,RLNT,RMAX,XLNT,XMAX,OLNT,OMAX,MLNT,MMAX, *** dmain.F.orig Mon Oct 24 15:28:56 1988 --- dmain.F Mon Oct 24 15:28:55 1988 *************** *** 9,15 C DECLARATIONS C IMPLICIT INTEGER (A-Z) ! LOGICAL INIT #include "parser.h" #include "gamestate.h" #include "state.h" --- 9,15 ----- C DECLARATIONS C IMPLICIT INTEGER (A-Z) ! LOGICAL DINIT #include "parser.h" #include "gamestate.h" #include "state.h" *************** *** 193,199 C 1) INITIALIZE DATA STRUCTURES C 2) PLAY GAME C ! IF(INIT(X)) CALL GAME C !IF INIT, PLAY GAME. CALL EXIT C !DONE --- 193,199 ----- C 1) INITIALIZE DATA STRUCTURES C 2) PLAY GAME C ! IF(DINIT(X)) CALL GAME C !IF INIT, PLAY GAME. CALL EXIT C !DONE *** dso3.F.orig Mon Oct 24 15:28:56 1988 --- dso3.F Mon Oct 24 15:28:56 1988 *************** *** 64,70 C OBJECT IS ON LIST... IS IT A MATCH? C IF(and(OFLAG1(I),VISIBT).EQ.0) GO TO 1000 ! IF(and(not(NOCARE),(and(OFLAG1(I),TAKEBT).EQ.0)) .OR. & ((and(OFLAG1(I),F1).EQ.0).AND. & (and(OFLAG2(I),F2).EQ.0))) GO TO 500 IF(FWIM.EQ.0) GO TO 400 --- 64,70 ----- C OBJECT IS ON LIST... IS IT A MATCH? C IF(and(OFLAG1(I),VISIBT).EQ.0) GO TO 1000 ! IF( ((.NOT. NOCARE) .AND. (and(OFLAG1(I),TAKEBT).EQ.0)) .OR. & ((and(OFLAG1(I),F1).EQ.0).AND. & (and(OFLAG2(I),F2).EQ.0))) GO TO 500 IF(FWIM.EQ.0) GO TO 400 *** dso7.F.orig Mon Oct 24 15:28:56 1988 --- dso7.F Mon Oct 24 15:28:56 1988 *************** *** 23,29 C !UNBIAS, COMPUTE SUMS. UKEYW(I)=char(ichar(KEYW(I))-64) IF(INW(J).LE.char(64)) J=1 ! UINW(I)=ichar(ichar(INW(J))-64) UKEYWS=UKEYWS+ichar(UKEYW(I)) UINWS=UINWS+UINW(I) J=J+1 --- 23,29 ----- C !UNBIAS, COMPUTE SUMS. UKEYW(I)=char(ichar(KEYW(I))-64) IF(INW(J).LE.char(64)) J=1 ! UINW(I)=ichar(INW(J))-64 UKEYWS=UKEYWS+ichar(UKEYW(I)) UINWS=UINWS+UINW(I) J=J+1 *************** *** 32,38 USUM=MOD(UINWS,8)+(8*MOD(UKEYWS,8)) C !COMPUTE MASK. DO 200 I=1,6 ! J=and(xor(xor(ichar(UINW(I)),ichar(UKEYW(I))),USUM),31) USUM=MOD(USUM+1,32) IF(J.GT.26) J=MOD(J,26) OUTW(I)=char(MAX0(1,J)+64) --- 32,38 ----- USUM=MOD(UINWS,8)+(8*MOD(UKEYWS,8)) C !COMPUTE MASK. DO 200 I=1,6 ! J=and(xor(xor(UINW(I),ichar(UKEYW(I))),USUM),31) USUM=MOD(USUM+1,32) IF(J.GT.26) J=MOD(J,26) OUTW(I)=char(MAX0(1,J)+64) *** dsub.F.orig Mon Oct 24 15:28:57 1988 --- dsub.F Mon Oct 24 15:28:56 1988 *************** *** 391,401 C !INVOLUNTARY EXIT. 1100 CALL SCORE(.FALSE.) C !TELL SCORE. ! #ifdef PDP ! C file closed in exit routine ! #else ! CLOSE(DBCH) ! #endif PDP CALL EXIT C END --- 391,397 ----- C !INVOLUNTARY EXIT. 1100 CALL SCORE(.FALSE.) C !TELL SCORE. ! C don't close DBCH, just exit CALL EXIT C END *** dverb2.F.orig Mon Oct 24 15:28:57 1988 --- dverb2.F Mon Oct 24 15:28:57 1988 *************** *** 91,99 & SWDACT,SWDSTA,CPVEC WRITE(1) I,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC ! WRITE(1) ODESC1,ODESC2,OFLAG1,OFLAG2,OFVAL,OTVAL, ! & OSIZE,OCAPAC,OROOM,OADV,OCAN ! WRITE(1) RVAL,RFLAG WRITE(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG WRITE(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK C --- 91,109 ----- & SWDACT,SWDSTA,CPVEC WRITE(1) I,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC ! WRITE(1) ODESC1 ! WRITE(1) ODESC2 ! WRITE(1) OFLAG1 ! WRITE(1) OFLAG2 ! WRITE(1) OFVAL ! WRITE(1) OTVAL ! WRITE(1) OSIZE ! WRITE(1) OCAPAC ! WRITE(1) OROOM ! WRITE(1) OADV ! WRITE(1) OCAN ! WRITE(1) RVAL ! WRITE(1) RFLAG WRITE(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG WRITE(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK C *************** *** 195,201 rewind (unit=1, err=100) C READ(1) I,J,K ! IF(or((I.NE.VMAJ),(J.NE.VMIN))) GO TO 200 C READ(1) WINNER,HERE,THFPOS,TELFLG,THFFLG,THFACT, & SWDACT,SWDSTA,CPVEC --- 205,211 ----- rewind (unit=1, err=100) C READ(1) I,J,K ! IF(((I.NE.VMAJ) .OR. (J.NE.VMIN))) GO TO 200 C READ(1) WINNER,HERE,THFPOS,TELFLG,THFFLG,THFACT, & SWDACT,SWDSTA,CPVEC *************** *** 201,209 & SWDACT,SWDSTA,CPVEC READ(1) PLTIME,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC ! READ(1) ODESC1,ODESC2,OFLAG1,OFLAG2,OFVAL,OTVAL, ! & OSIZE,OCAPAC,OROOM,OADV,OCAN ! READ(1) RVAL,RFLAG READ(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG READ(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK C --- 211,229 ----- & SWDACT,SWDSTA,CPVEC READ(1) PLTIME,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD, & LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC ! READ(1) ODESC1 ! READ(1) ODESC2 ! READ(1) OFLAG1 ! READ(1) OFLAG2 ! READ(1) OFVAL ! READ(1) OTVAL ! READ(1) OSIZE ! READ(1) OCAPAC ! READ(1) OROOM ! READ(1) OADV ! READ(1) OCAN ! READ(1) RVAL ! READ(1) RFLAG READ(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG READ(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK C *************** *** 421,427 C C C7- FROBOZZ FLAG (BANK ALARM) C ! 7000 FROBZF=and((OROOM(BILLS).NE.0),(OROOM(PORTR).NE.0)) RETURN C CXAPPL, PAGE 3 C --- 441,447 ----- C C C7- FROBOZZ FLAG (BANK ALARM) C ! 7000 FROBZF=((OROOM(BILLS).NE.0) .AND. (OROOM(PORTR).NE.0)) RETURN C CXAPPL, PAGE 3 C *** exit.c.orig Mon Oct 24 15:28:57 1988 --- exit.c Mon Oct 24 15:28:57 1988 *************** *** 0 --- 1 ----- + void exit_() { exit(0); } *** gdt.F.orig Mon Oct 24 15:28:58 1988 --- gdt.F Mon Oct 24 15:28:58 1988 *************** *** 102,108 GO TO 2000 C #ifdef NOCC ! 200 FORMAT('GDT>',$) #else NOCC 200 FORMAT(' GDT>',$) #endif NOCC --- 102,108 ----- GO TO 2000 C #ifdef NOCC ! 200 FORMAT('GDT>') #else NOCC 200 FORMAT(' GDT>',$) #endif NOCC *************** *** 115,123 230 FORMAT(2I6) 240 FORMAT(I6) #ifdef NOCC ! 225 FORMAT('Limits: ',$) ! 235 FORMAT('Entry: ',$) ! 245 FORMAT('Idx,Ary: ',$) #else NOCC 225 FORMAT(' Limits: ',$) 235 FORMAT(' Entry: ',$) --- 115,123 ----- 230 FORMAT(2I6) 240 FORMAT(I6) #ifdef NOCC ! 225 FORMAT('Limits: ') ! 235 FORMAT('Entry: ') ! 245 FORMAT('Idx,Ary: ') #else NOCC 225 FORMAT(' Limits: ',$) 235 FORMAT(' Entry: ',$) *************** *** 344,350 GO TO 2000 C #ifdef NOCC ! 480 FORMAT('Old=',L2,6X,'New= ',$) #else NOCC 480 FORMAT(' Old=',L2,6X,'New= ',$) #endif NOCC --- 344,350 ----- GO TO 2000 C #ifdef NOCC ! 480 FORMAT('Old=',L2,6X,'New= ') #else NOCC 480 FORMAT(' Old=',L2,6X,'New= ',$) #endif NOCC *************** *** 528,534 GO TO 2000 C #ifdef NOCC ! 590 FORMAT('Old= ',I6,6X,'New= ',$) #else NOCC 590 FORMAT(' Old= ',I6,6X,'New= ',$) #endif NOCC --- 528,534 ----- GO TO 2000 C #ifdef NOCC ! 590 FORMAT('Old= ',I6,6X,'New= ') #else NOCC 590 FORMAT(' Old= ',I6,6X,'New= ',$) #endif NOCC *************** *** 574,580 GO TO 2000 C #ifdef NOCC ! 610 FORMAT('Old= ',I6,6X,'New= ',$) #else NOCC 610 FORMAT(' Old= ',I6,6X,'New= ',$) #endif NOCC --- 574,580 ----- GO TO 2000 C #ifdef NOCC ! 610 FORMAT('Old= ',I6,6X,'New= ') #else NOCC 610 FORMAT(' Old= ',I6,6X,'New= ',$) #endif NOCC *** np.F.orig Mon Oct 24 15:28:58 1988 --- np.F Mon Oct 24 15:28:58 1988 *************** *** 25,31 10 WRITE(OUTCH,50) C !PROMPT FOR GAME. #ifdef NOCC ! 50 FORMAT('>',$) #else NOCC 50 FORMAT(' >',$) #endif NOCC --- 25,31 ----- 10 WRITE(OUTCH,50) C !PROMPT FOR GAME. #ifdef NOCC ! 50 FORMAT('>') #else NOCC 50 FORMAT(' >',$) #endif NOCC *************** *** 30,36 50 FORMAT(' >',$) #endif NOCC ! 90 READ(INPCH,100, END=210) BUFFER 100 FORMAT(78A1) DO 200 LENGTH=78,1,-1 --- 30,36 ----- 50 FORMAT(' >',$) #endif NOCC ! 90 READ(INPCH,100,END=210) (BUFFER(LENGTH),LENGTH=1,78) 100 FORMAT(78A1) DO 200 LENGTH=78,1,-1 *************** *** 38,44 200 CONTINUE GO TO 5 C !END OF FILE ! 210 STOP C !TRY AGAIN. C --- 38,44 ----- 200 CONTINUE GO TO 5 C !END OF FILE ! 210 CALL EXIT C !TRY AGAIN. C *************** *** 55,61 C CONVERT TO UPPER CASE 300 DO 400 I=1,LENGTH ! IF(and((BUFFER(I).GE.'a'),(BUFFER(I).LE.'z'))) & BUFFER(I)=char(ichar(BUFFER(I))-32) 400 CONTINUE #endif PDP --- 55,61 ----- C CONVERT TO UPPER CASE 300 DO 400 I=1,LENGTH ! IF(((BUFFER(I).GE.'a') .AND. (BUFFER(I).LE.'z'))) & BUFFER(I)=char(ichar(BUFFER(I))-32) 400 CONTINUE #endif PDP *************** *** 105,111 C !ECHO MODE, FORCE FAIL. IF(.NOT.SYNMCH(X)) GO TO 100 C !DO SYN MATCH. ! IF(and((PRSO.GT.0),(PRSO.LT.XMIN))) LASTIT=PRSO C C SUCCESSFUL PARSE OR SUCCESSFUL VALIDATION C --- 105,111 ----- C !ECHO MODE, FORCE FAIL. IF(.NOT.SYNMCH(X)) GO TO 100 C !DO SYN MATCH. ! IF(((PRSO.GT.0) .AND. (PRSO.LT.XMIN))) LASTIT=PRSO C C SUCCESSFUL PARSE OR SUCCESSFUL VALIDATION C *************** *** 207,213 C !SPACE? DO 500 I=1,9,3 C !SCH FOR CHAR. ! IF(and((J.GE.DLIMIT(I)),(J.LE.DLIMIT(I+1)))) & GO TO 4000 500 CONTINUE C --- 207,213 ----- C !SPACE? DO 500 I=1,9,3 C !SCH FOR CHAR. ! IF(((J.GE.DLIMIT(I)) .AND. (J.LE.DLIMIT(I+1)))) & GO TO 4000 500 CONTINUE C *************** *** 219,225 C 1000 IF(PRSCON.GT.INLNT) PRSCON=1 C !FORCE PARSE RESTART. ! IF(and((CP.EQ.0),(OP.EQ.1))) RETURN IF(CP.EQ.0) OP=OP-2 C !ANY LAST WORD? LEX=.TRUE. --- 219,225 ----- C 1000 IF(PRSCON.GT.INLNT) PRSCON=1 C !FORCE PARSE RESTART. ! IF(((CP.EQ.0) .AND. (OP.EQ.1))) RETURN IF(CP.EQ.0) OP=OP-2 C !ANY LAST WORD? LEX=.TRUE. *** sverbs.F.orig Mon Oct 24 15:28:59 1988 --- sverbs.F Mon Oct 24 15:28:58 1988 *************** *** 293,303 C !TELLL SCORE. IF(.NOT.YESNO(343,0,0)) RETURN C !ASK FOR Y/N DECISION. ! #ifdef PDP ! C close routine moved to exit for pdp version ! #else ! CLOSE (DBCH) ! #endif PDP CALL EXIT C !BYE. C SVERBS, PAGE 4 --- 293,299 ----- C !TELLL SCORE. IF(.NOT.YESNO(343,0,0)) RETURN C !ASK FOR Y/N DECISION. ! C don't close DBCH, just exit CALL EXIT C !BYE. C SVERBS, PAGE 4