DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: S T

⟦071d8897f⟧ TextFile

    Length: 26146 (0x6622)
    Types: TextFile
    Names: »SysVR3.pch«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Zork/SysVR3.pch« 

TextFile

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