File: RSTRGM.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 RSTRGM(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 LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM,SAY 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 C USR call - FORTRAN unit, filename, operation, error flag C Operation is 2, open input; 3 open output; 4 close output. C Calling "CLOSE" on an input file causes it to be deleted! C 0055 IF (.NOT. F1) GOTO 10 C C Attempt to restore saved database C 0056 CALL USR(7, SAVENM, 2, IERR) 0057 IF (IERR.NE.0) GOTO 60 0060 GOTO 20 C C Attempt to restore initial database C 0061 10 CALL USR(7, INDXNM, 2, IERR) 0062 IF (IERR.EQ.0) GOTO 20 0063 F2=-1 0064 RETURN C 0065 20 READ(7) I1,I2,I3 0066 IF((I1.NE.VMAJ).OR.(I2.NE.VMIN)) GO TO 50 0067 READ(7) RTEXT,KTAB,ATAB FORTRAN IV V50-A (A6) 24-JUL-20 0070 READ(7) ATLOC,LINK,PLACE,FIXED,HOLDNG 0071 READ(7) PTEXT,ABB,LINUSE,TRVS,CLSSES 0072 READ(7) OLDLOC,LOC,CVAL,NEWLOC,KEY 0073 READ(7) PLAC,FIXD,ACTSPK,COND,HINTS 0074 READ(7) HNTMAX,PROP,TALLY,TALLY2,HINTLC 0075 READ(7) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC 0076 READ(7) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM 0077 READ(7) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS 0100 READ(7) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED 0101 READ(7) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT 0102 READ(7) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC 0103 READ(7) ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK C C CLOSNG = 0 0104 IF(F1) CALL SIXOUT('R]ESTORED.@',5,0) 0105 F2=0 0106 RETURN 0107 50 IF(F1) CALL SIXOUT('F]ILE IS OBSOLETE, [RESTORE] FAILS.',18,0) 0110 F2=-1 0111 RETURN 0112 60 CALL SIXOUT('C]AN''T OPEN SAVE FILE, [RESTORE] FAILS.', 22, 0) 0113 F2=-1 0114 RETURN 0115 END