--- /dev/null
+C SAVE/RESTORE PROCESSOR\r
+C\r
+C WRITTEN BY BOB SUPNIK\r
+C DISK ENGINEERING\r
+C 25-AUG-78\r
+C\r
+C CURRENT LIMITS:\r
+C 750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).\r
+C 300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).\r
+C 150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).\r
+C 100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).\r
+C 35 "ACTION" VERBS (ACTSPK, VRBSIZ).\r
+C 205 RANDOM MESSAGES (RTEXT, RTXSIZ).\r
+C 12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).\r
+C 20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).\r
+C THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF\r
+C THE DATABASE. (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,\r
+C SO THERE CAN'T BE MORE THAN 1000 WORDS.) THESE UPPER LIMITS ARE:\r
+C 1000 NON-SYNONYMOUS VOCABULARY WORDS\r
+C 300 LOCATIONS\r
+C 100 OBJECTS\r
+C\r
+ SUBROUTINE SAVEGM(F1,F2)\r
+ LOGICAL F1\r
+ INTEGER F2\r
+C IMPLICIT INTEGER (A-Z)\r
+ LOGICAL LMWARN,CLOSNG,PANIC,HINTED,\r
+ 1 CLOSED,GAVEUP,SCORNG,DSEEN\r
+C\r
+ COMMON /VERSN/ VMAJ, VMIN, VEDIT\r
+ INTEGER VMAJ, VMIN, VEDIT\r
+ COMMON /FILES/ INDXNM, TEXTNM, SAVENM\r
+ INTEGER INDXNM(3), TEXTNM(3), SAVENM(3)\r
+ COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+ COMMON /VOCCOM/ KTAB,ATAB,TABSIZ\r
+ COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+ COMMON /PTXCOM/ PTEXT\r
+ COMMON /ABBCOM/ ABB\r
+ COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,\r
+ 1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,\r
+ 2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE\r
+ COMMON /MISCOM/\r
+ 3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,\r
+ 4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,\r
+ 5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,\r
+ 6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM\r
+ COMMON /MISCOM/\r
+ 7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,\r
+ 8 THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,\r
+ 9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,\r
+ 1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES\r
+ COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,\r
+ 1 SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,\r
+ 2 MAXTRS,HINTED,HNTLOC,KK\r
+ COMMON/MISC3/ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,\r
+ 1 STICK,WZDARK\r
+C\r
+ INTEGER LINES(12),DATA(78)\r
+C The TRAVEL, TRVCON, and TRVLOC arrays are\r
+C Packed with words 0,1,2 holding the data. Saves lots\r
+C of wasted space at the expense of some complexity.\r
+ INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ\r
+ INTEGER KTAB(300),ATAB(300),TABSIZ\r
+ INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),\r
+ 1 ATLOC(150)\r
+ INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),\r
+ 1 PTEXT(100),PROP(100),HOLDNG\r
+ INTEGER ACTSPK(35)\r
+ INTEGER RTEXT(205)\r
+ INTEGER CTEXT(12),CVAL(12)\r
+ INTEGER HINTLC(20),HINTS(20,4)\r
+ DIMENSION HINTED(20)\r
+ INTEGER TK(20),DLOC(6),ODLOC(6)\r
+ DIMENSION DSEEN(6)\r
+ INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC\r
+ INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG\r
+ INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE\r
+ INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE\r
+ INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM,EMRALD\r
+ INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE\r
+ INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN\r
+ INTEGER SAY,LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM\r
+ INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2\r
+ INTEGER TROLL,TROLL2,STREAM,SPICES\r
+ INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ\r
+ INTEGER VERB,HNTLOC,KK\r
+ INTEGER ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK\r
+C\r
+ IF (F1) GOTO 10\r
+C\r
+C Normal setup, open AINDX.DA for output\r
+C\r
+ CALL USR(7,INDXNM,3,IERR)\r
+ IF (IERR .EQ. 0) GO TO 20\r
+ CALL SIXOUT('C]AN''T OPEN ',6,2)\r
+ CALL SIXOUT(INDXNM, 9, 3)\r
+ CALL SIXOUT(' ]FOR OUTPUT',6,1)\r
+ F2 = -1\r
+ RETURN\r
+C\r
+C Saving game\r
+C\r
+10 CALL USR(7,SAVENM,3,IERR)\r
+ IF (IERR.EQ.0) GOTO 20\r
+ CALL SIXOUT('C]AN''T OPEN ',6,2)\r
+ CALL SIXOUT(SAVENM,9,3)\r
+ CALL SIXOUT(' ]FOR OUTPUT',6,1)\r
+ F2 = -1\r
+ RETURN\r
+C\r
+20 WRITE(7) VMAJ,VMIN,VEDIT\r
+ WRITE(7) RTEXT,KTAB,ATAB\r
+ WRITE(7) ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+ WRITE(7) PTEXT,ABB,LINUSE,TRVS,CLSSES\r
+ WRITE(7) OLDLOC,LOC,CVAL,NEWLOC,KEY\r
+ WRITE(7) PLAC,FIXD,ACTSPK,COND,HINTS\r
+ WRITE(7) HNTMAX,PROP,TALLY,TALLY2,HINTLC\r
+ WRITE(7) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC\r
+ WRITE(7) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM\r
+ WRITE(7) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS\r
+ WRITE(7) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED\r
+ WRITE(7) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT\r
+ WRITE(7) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC\r
+ WRITE(7) ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK\r
+C\r
+ IF(F1) CALL SIXOUT('S]AVED.',3, 0)\r
+C\r
+C Close the output file\r
+C\r
+ IF(F1) CALL USR(7,SAVENM, 4, IERR)\r
+ IF(.NOT.F1) CALL USR(7, INDXNM, 4, IERR)\r
+ F2=0\r
+ RETURN\r
+ END\r
+\f\r