A large commit.
[pdp8.git] / sw / adventure / 0906 / SAVEGM.FT
diff --git a/sw/adventure/0906/SAVEGM.FT b/sw/adventure/0906/SAVEGM.FT
new file mode 100644 (file)
index 0000000..eae99e3
--- /dev/null
@@ -0,0 +1,135 @@
+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