|
|
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