X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fadventure%2FRSTRGM.FT;fp=sw%2Fadventure%2FRSTRGM.FT;h=831c31842f7866ec452e59b40e72d669c7e85540;hb=84b5715c66b026062d9c455da3509b814bc32b1b;hp=0000000000000000000000000000000000000000;hpb=9107854b0bc70913de9757805c976b7442d88178;p=pdp8.git diff --git a/sw/adventure/RSTRGM.FT b/sw/adventure/RSTRGM.FT new file mode 100644 index 0000000..831c318 --- /dev/null +++ b/sw/adventure/RSTRGM.FT @@ -0,0 +1,134 @@ +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 RSTRGM(F1,F2) + LOGICAL F1 + INTEGER F2 +C IMPLICIT INTEGER (A-Z) + LOGICAL LMWARN,CLOSNG,PANIC,HINTED, + 1 CLOSED,GAVEUP,SCORNG,DSEEN +C + COMMON /VERSN/ VMAJ, VMIN, VEDIT + INTEGER VMAJ, VMIN, VEDIT + COMMON /FILES/ INDXNM, TEXTNM, SAVENM + INTEGER INDXNM(3), TEXTNM(3), SAVENM(3) + COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA + COMMON /VOCCOM/ KTAB,ATAB,TABSIZ + COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG + COMMON /PTXCOM/ PTEXT + COMMON /ABBCOM/ ABB + 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 + 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 + 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 + 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 + COMMON /MISC3/ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE, + 1 STICK,WZDARK +C + 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. + INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ + INTEGER KTAB(300),ATAB(300),TABSIZ + INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150), + 1 ATLOC(150) + INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200), + 1 PTEXT(100),PROP(100),HOLDNG + INTEGER ACTSPK(35) + INTEGER RTEXT(205) + INTEGER CTEXT(12),CVAL(12) + INTEGER HINTLC(20),HINTS(20,4) + DIMENSION HINTED(20) + INTEGER TK(20),DLOC(6),ODLOC(6) + DIMENSION DSEEN(6) + INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC + INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG + INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE + INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE + INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM,EMRALD + INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE + INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN + INTEGER LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM,SAY + INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2 + INTEGER TROLL,TROLL2,STREAM,SPICES + INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ + INTEGER VERB,HNTLOC,KK + 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 + IF (.NOT. F1) GOTO 10 +C +C Attempt to restore saved database +C + CALL USR(7, SAVENM, 2, IERR) + IF (IERR.NE.0) GOTO 60 + GOTO 20 +C +C Attempt to restore initial database +C +10 CALL USR(7, INDXNM, 2, IERR) + IF (IERR.EQ.0) GOTO 20 + F2=-1 + RETURN +C +20 READ(7) I1,I2,I3 + IF((I1.NE.VMAJ).OR.(I2.NE.VMIN)) GO TO 50 + READ(7) RTEXT,KTAB,ATAB + READ(7) ATLOC,LINK,PLACE,FIXED,HOLDNG + READ(7) PTEXT,ABB,LINUSE,TRVS,CLSSES + READ(7) OLDLOC,LOC,CVAL,NEWLOC,KEY + READ(7) PLAC,FIXD,ACTSPK,COND,HINTS + READ(7) HNTMAX,PROP,TALLY,TALLY2,HINTLC + READ(7) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC + READ(7) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM + READ(7) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS + READ(7) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED + READ(7) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT + READ(7) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC + READ(7) ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK +C +C CLOSNG = 0 + IF(F1) CALL SIXOUT('R]ESTORED.@',5,0) + F2=0 + RETURN +50 IF(F1) CALL SIXOUT('F]ILE IS OBSOLETE, [RESTORE] FAILS.',18,0) + F2=-1 + RETURN +60 CALL SIXOUT('C]AN''T OPEN SAVE FILE, [RESTORE] FAILS.', 22, 0) + F2=-1 + RETURN + END