File: SAVEGM.LS of Disk: V50/Source/Source-Listing-FORTRAN-2
(Source file text) 

        FORTRAN IV  V50-A (A6)  24-JUL-20 

	C  SAVE/RESTORE PROCESSOR
	C
	C WRITTEN BY	BOB SUPNIK
	C       	DISK ENGINEERING
	C       	25-AUG-78
	C
	C  CURRENT LIMITS:
	C       750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).
	C       300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).
	C       150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).
	C       100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).
	C        35 "ACTION" VERBS (ACTSPK, VRBSIZ).
	C       205 RANDOM MESSAGES (RTEXT, RTXSIZ).
	C        12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).
	C        20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).
	C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF
	C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,
	C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:
	C       1000 NON-SYNONYMOUS VOCABULARY WORDS
	C       300 LOCATIONS
	C       100 OBJECTS
	C
0002	        SUBROUTINE SAVEGM(F1,F2)
0003	        LOGICAL F1
0004	        INTEGER F2
	C       IMPLICIT INTEGER (A-Z)
0005	        LOGICAL LMWARN,CLOSNG,PANIC,HINTED,
	     1		CLOSED,GAVEUP,SCORNG,DSEEN
	C
0006	        COMMON /VERSN/ VMAJ, VMIN, VEDIT
0007	        INTEGER	VMAJ, VMIN, VEDIT
0010	        COMMON /FILES/ INDXNM, TEXTNM, SAVENM
0011	        INTEGER INDXNM(3), TEXTNM(3), SAVENM(3)
0012	        COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA
0013	        COMMON /VOCCOM/ KTAB,ATAB,TABSIZ
0014	        COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG
0015	        COMMON /PTXCOM/ PTEXT
0016	        COMMON /ABBCOM/ ABB
0017	        COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,
	     1	KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,
	     2	HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE
0020	        COMMON /MISCOM/
	     3	CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,
	     4	CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,
	     5	PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,
	     6	BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM
0021	        COMMON /MISCOM/
	     7	PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,
	     8	THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,
	     9	NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,
	     1	CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES
0022	        COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,
	     1	SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,
	     2	MAXTRS,HINTED,HNTLOC,KK
0023	        COMMON/MISC3/ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,
        FORTRAN IV  V50-A (A6)  24-JUL-20 

	     1  STICK,WZDARK
	C
0024	        INTEGER LINES(12),DATA(78)
	C       The TRAVEL, TRVCON, and TRVLOC arrays are
	C       Packed with words 0,1,2 holding the data. Saves lots
	C       of wasted space at the expense of some complexity.
0025	        INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ
0026	        INTEGER KTAB(300),ATAB(300),TABSIZ
0027	        INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),
	     1	ATLOC(150)
0030	        INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),
	     1	PTEXT(100),PROP(100),HOLDNG
0031	        INTEGER ACTSPK(35)
0032	        INTEGER RTEXT(205)
0033	        INTEGER CTEXT(12),CVAL(12)
0034	        INTEGER HINTLC(20),HINTS(20,4)
0035	        DIMENSION HINTED(20)
0036	        INTEGER TK(20),DLOC(6),ODLOC(6)
0037	        DIMENSION DSEEN(6)
0040	        INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC
0041	        INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG
0042	        INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE
0043	        INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE
0044	        INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM,EMRALD
0045	        INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE
0046	        INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN
0047	        INTEGER SAY,LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM
0050	        INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2
0051	        INTEGER	TROLL,TROLL2,STREAM,SPICES
0052	        INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ
0053	        INTEGER VERB,HNTLOC,KK
0054	        INTEGER ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK
	C
0055	        IF (F1) GOTO 10
	C
	C       Normal setup, open AINDX.DA for output
	C
0056	        CALL USR(7,INDXNM,3,IERR)
0057	        IF (IERR .EQ. 0) GO TO 20
0060	        CALL SIXOUT('C]AN''T OPEN ',6,2)
0061	        CALL SIXOUT(INDXNM, 9, 3)
0062	        CALL SIXOUT(' ]FOR OUTPUT',6,1)
0063	        F2 = -1
0064	        RETURN
	C
	C       Saving game
	C
0065	10      CALL USR(7,SAVENM,3,IERR)
0066	        IF (IERR.EQ.0) GOTO 20
0067	        CALL SIXOUT('C]AN''T OPEN ',6,2)
0070	        CALL SIXOUT(SAVENM,9,3)
0071	        CALL SIXOUT(' ]FOR OUTPUT',6,1)
0072	        F2 = -1
0073	        RETURN
	C
        FORTRAN IV  V50-A (A6)  24-JUL-20 

0074	20      WRITE(7) VMAJ,VMIN,VEDIT
0075	        WRITE(7) RTEXT,KTAB,ATAB
0076	        WRITE(7) ATLOC,LINK,PLACE,FIXED,HOLDNG
0077	        WRITE(7) PTEXT,ABB,LINUSE,TRVS,CLSSES
0100	        WRITE(7) OLDLOC,LOC,CVAL,NEWLOC,KEY
0101	        WRITE(7) PLAC,FIXD,ACTSPK,COND,HINTS
0102	        WRITE(7) HNTMAX,PROP,TALLY,TALLY2,HINTLC
0103	        WRITE(7) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC
0104	        WRITE(7) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM
0105	        WRITE(7) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS
0106	        WRITE(7) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED
0107	        WRITE(7) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT
0110	        WRITE(7) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC
0111	        WRITE(7) ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK
	C
0112	        IF(F1) CALL SIXOUT('S]AVED.',3, 0)
	C
	C Close the output file
	C
0113	        IF(F1) CALL USR(7,SAVENM, 4, IERR)
0114	        IF(.NOT.F1) CALL USR(7, INDXNM, 4, IERR)
0115	        F2=0
0116	        RETURN
0117	        END