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
	SUBROUTINE SAVEGM(F1,F2)
	IMPLICIT INTEGER (A-Z)
	LOGICAL F1
	LOGICAL LMWARN,CLOSNG,PANIC,HINTED,
	1       CLOSED,GAVEUP,SCORNG,DSEEN
C
	COMMON /VERSN/ VMAJ,VMIN,VEDIT
	COMMON /TXTCOM/ RTEXT,LINES,ASCVAR
	COMMON /ALPHAS/ BLANK,EOF,CYE,CY,CNO,CN,CPO,CUR,CWE,CST,
	1	CEN,CTE
	COMMON /VOCCOM/ KTAB,ATAB,A2TAB,TABSIZ
	COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG
	COMMON /PTXCOM/ PTEXT
	COMMON /ABBCOM/ ABB
	COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,
	1KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,
	2HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE,
	3CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,
	4CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,
	5PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,
	6BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM,
	7PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,
	8THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,
	9NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,
	1CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES
	COMMON /MISC2/ I,RTXSIZ,CLSMAX,MAGSIZ,LOCSIZ,CTEXT,STEXT,LTEXT,
	1SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,
	2MAXTRS,HINTED,HNTLOC,KK
C
	DIMENSION LINES(36)
	DIMENSION TRAVEL(750),TRVCON(750),TRVLOC(750)
	DIMENSION KTAB(300),ATAB(300),A2TAB(300)
	DIMENSION LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),
	1	ATLOC(150)
	DIMENSION PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),
	1	PTEXT(100),PROP(100)
	DIMENSION ACTSPK(35)
	DIMENSION RTEXT(205)
	DIMENSION CTEXT(12),CVAL(12)
	DIMENSION HINTLC(20),HINTED(20),HINTS(20,4)
	DIMENSION TK(20),DSEEN(6),DLOC(6),ODLOC(6)
C
	IF(F1) CALL ASSIGN(1,'ASAVE.DAT')
	IF(.NOT.F1) CALL ASSIGN(1,'AINDX.DAT')
C
	WRITE(1) VMAJ,VMIN,VEDIT
	WRITE(1) RTEXT,KTAB,ATAB,A2TAB
	WRITE(1) ATLOC,LINK,PLACE,FIXED,HOLDNG
	WRITE(1) PTEXT,ABB,LINUSE,TRVS,CLSSES
	WRITE(1) OLDLOC,LOC,CVAL,NEWLOC,KEY
	WRITE(1) PLAC,FIXD,ACTSPK,COND,HINTS
	WRITE(1) HNTMAX,PROP,TALLY,TALLY2,HINTLC
	WRITE(1) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC
	WRITE(1) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM
	WRITE(1) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS
	WRITE(1) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED
	WRITE(1) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT
	WRITE(1) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC
C
	IF(F1) TYPE 100
100	FORMAT(' Saved.')
	CALL CLOSE(1)
	F2=0
	RETURN
	END








C
	SUBROUTINE RSTRGM(F1,F2)
	IMPLICIT INTEGER (A-Z)
	LOGICAL F1
	LOGICAL LMWARN,CLOSNG,PANIC,HINTED,
	1       CLOSED,GAVEUP,SCORNG,DSEEN
C
	COMMON /VERSN/ VMAJ,VMIN,VEDIT
	COMMON /TXTCOM/ RTEXT,LINES,ASCVAR
	COMMON /ALPHAS/ BLANK,EOF,CYE,CY,CNO,CN,CPO,CUR,CWE,CST,
	1	CEN,CTE
	COMMON /VOCCOM/ KTAB,ATAB,A2TAB,TABSIZ
	COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG
	COMMON /PTXCOM/ PTEXT
	COMMON /ABBCOM/ ABB
	COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,
	1KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,
	2HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE,
	3CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,
	4CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,
	5PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,
	6BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM,
	7PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,
	8THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,
	9NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,
	1CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES
	COMMON /MISC2/ I,RTXSIZ,CLSMAX,MAGSIZ,LOCSIZ,CTEXT,STEXT,LTEXT,
	1SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,
	2MAXTRS,HINTED,HNTLOC,KK
C
	DIMENSION LINES(36)
	DIMENSION TRAVEL(750),TRVCON(750),TRVLOC(750)
	DIMENSION KTAB(300),ATAB(300),A2TAB(300)
	DIMENSION LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),
	1	ATLOC(150)
	DIMENSION PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),
	1	PTEXT(100),PROP(100)
	DIMENSION ACTSPK(35)
	DIMENSION RTEXT(205)
	DIMENSION CTEXT(12),CVAL(12)
	DIMENSION HINTLC(20),HINTED(20),HINTS(20,4)
	DIMENSION TK(20),DSEEN(6),DLOC(6),ODLOC(6)
C
	IF(F1) CALL ASSIGN(1,'ASAVE.DAT')
	IF(.NOT.F1) CALL ASSIGN(1,'AINDX.DAT')
C
	READ(1) I1,I2,I3
	IF((I1.NE.VMAJ).OR.(I2.NE.VMIN)) GO TO 50
C
	READ(1) RTEXT,KTAB,ATAB,A2TAB
	READ(1) ATLOC,LINK,PLACE,FIXED,HOLDNG
	READ(1) PTEXT,ABB,LINUSE,TRVS,CLSSES
	READ(1) OLDLOC,LOC,CVAL,NEWLOC,KEY
	READ(1) PLAC,FIXD,ACTSPK,COND,HINTS
	READ(1) HNTMAX,PROP,TALLY,TALLY2,HINTLC
	READ(1) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC
	READ(1) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM
	READ(1) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS
	READ(1) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED
	READ(1) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT
	READ(1) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC
C
	IF(F1) TYPE 100
100	FORMAT(' Restored.')
	CALL CLOSE(1)
	F2=0
	RETURN
C
50	IF(F1) TYPE 110
110	FORMAT(' File is obsolete, RESTORE fails.')
	CALL CLOSE(1)
	F2=-1
	RETURN
	END
