Annotation of 43BSDReno/games/dungeon/dsub.F, revision 1.1.1.1

1.1       root        1: C RESIDENT SUBROUTINES FOR DUNGEON
                      2: C
                      3: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
                      4: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
                      5: C WRITTEN BY R. M. SUPNIK
                      6: C
                      7: C RSPEAK-- OUTPUT RANDOM MESSAGE ROUTINE
                      8: C
                      9: C CALLED BY--
                     10: C
                     11: C      CALL RSPEAK(MSGNUM)
                     12: C
                     13:        SUBROUTINE RSPEAK(N)
                     14:        IMPLICIT INTEGER(A-Z)
                     15: C
                     16:        CALL RSPSB2(N,0,0)
                     17:        RETURN
                     18:        END
                     19: C RSPSUB-- OUTPUT RANDOM MESSAGE WITH SUBSTITUTABLE ARGUMENT
                     20: C
                     21: C CALLED BY--
                     22: C
                     23: C      CALL RSPSUB(MSGNUM,SUBNUM)
                     24: C
                     25:        SUBROUTINE RSPSUB(N,S1)
                     26:        IMPLICIT INTEGER(A-Z)
                     27: C
                     28:        CALL RSPSB2(N,S1,0)
                     29:        RETURN
                     30:        END
                     31: C RSPSB2-- OUTPUT RANDOM MESSAGE WITH UP TO TWO SUBSTITUTABLE ARGUMENTS
                     32: C
                     33: C CALLED BY--
                     34: C
                     35: C      CALL RSPSB2(MSGNUM,SUBNUM1,SUBNUM2)
                     36: C
                     37:        SUBROUTINE    RSPSB2(N,S1,S2)
                     38:        IMPLICIT      INTEGER(A-Z)
                     39: #ifndef PDP
                     40:        CHARACTER*74  B1,B2,B3
                     41:        INTEGER*2     OLDREC,NEWREC,JREC
                     42: #endif PDP
                     43: C
                     44: C DECLARATIONS
                     45: C
                     46: #include "gamestate.h"
                     47: C
                     48: #ifdef PDP
                     49:        TELFLG=.TRUE.
                     50: C
                     51: C      use C routine to access data base
                     52: C
                     53:        call    rspsb3(N,S1,S2)
                     54:        return
                     55: #else
                     56: #include "mindex.h"
                     57: #include "io.h"
                     58: C
                     59: C CONVERT ALL ARGUMENTS FROM DICTIONARY NUMBERS (IF POSITIVE)
                     60: C TO ABSOLUTE RECORD NUMBERS.
                     61: C
                     62:        X=N
                     63: C                                              !SET UP WORK VARIABLES.
                     64:        Y=S1
                     65:        Z=S2
                     66:        IF(X.GT.0) X=RTEXT(X)
                     67: C                                              !IF >0, LOOK UP IN RTEXT.
                     68:        IF(Y.GT.0) Y=RTEXT(Y)
                     69:        IF(Z.GT.0) Z=RTEXT(Z)
                     70:        X=IABS(X)
                     71: C                                              !TAKE ABS VALUE.
                     72:        Y=IABS(Y)
                     73:        Z=IABS(Z)
                     74:        IF(X.EQ.0) RETURN
                     75: C                                              !ANYTHING TO DO?
                     76:        TELFLG=.TRUE.
                     77: C                                              !SAID SOMETHING.
                     78: C
                     79:        READ(UNIT=DBCH,REC=X) OLDREC,B1
                     80: C
                     81: 100    DO 150 I=1,74
                     82:          X1=and(X,31)+I
                     83:          B1(I:I)=char(xor(ichar(B1(I:I)),X1))
                     84: 150    CONTINUE
                     85: C
                     86: 200    IF(Y.EQ.0) GO TO 400
                     87: C                                              !ANY SUBSTITUTABLE?
                     88:        DO 300 I=1,74
                     89: C                                              !YES, LOOK FOR #.
                     90:          IF(B1(I:I).EQ.'#') GO TO 1000
                     91: 300    CONTINUE
                     92: C
                     93: 400    DO 500 I=74,1,-1
                     94: C                                              !BACKSCAN FOR BLANKS.
                     95:          IF(B1(I:I).NE.' ') GO TO 600
                     96: 500    CONTINUE
                     97: C
                     98: 600    WRITE(OUTCH,650) (B1(J:J),J=1,I)
                     99: #ifdef NOCC
                    100: 650    FORMAT(74A1)
                    101: #else NOCC
                    102: 650    FORMAT(1X,74A1)
                    103: #endif NOCC
                    104:        X=X+1
                    105: C                                              !ON TO NEXT RECORD.
                    106:        READ(UNIT=DBCH,REC=X) NEWREC,B1
                    107:        IF(OLDREC.EQ.NEWREC) GO TO 100
                    108: C                                              !CONTINUATION?
                    109:        RETURN
                    110: C                                              !NO, EXIT.
                    111: C
                    112: C SUBSTITUTION WITH SUBSTITUTABLE AVAILABLE.
                    113: C I IS INDEX OF # IN B1.
                    114: C Y IS NUMBER OF RECORD TO SUBSTITUTE.
                    115: C
                    116: C PROCEDURE:
                    117: C   1) COPY REST OF B1 TO B2
                    118: C   2) READ SUBSTITUTABLE OVER B1
                    119: C   3) RESTORE TAIL OF ORIGINAL B1
                    120: C
                    121: C THE IMPLICIT ASSUMPTION HERE IS THAT THE SUBSTITUTABLE STRING
                    122: C IS VERY SHORT (i.e. MUCH LESS THAN ONE RECORD).
                    123: C
                    124: 1000   K2=1
                    125: C                                              !TO
                    126:        DO 1100 K1=I+1,74
                    127: C                                              !COPY REST OF B1.
                    128:          B2(K2:K2)=B1(K1:K1)
                    129:          K2=K2+1
                    130: 1100   CONTINUE
                    131: C
                    132: C   READ SUBSTITUTE STRING INTO B3, AND DECRYPT IT:
                    133: C
                    134:        READ(UNIT=DBCH,REC=Y) JREC,B3
                    135:        DO 1150 K1=1,74
                    136:          X1=and(Y,31)+K1
                    137:          B3(K1:K1)=char(xor(ICHAR(B3(K1:K1)),X1))
                    138: 1150   CONTINUE
                    139: C
                    140: C   FILL REMAINDER OF B1 WITH CHARACTERS FROM B3:
                    141: C
                    142:        K2=1
                    143:        DO 1180 K1=I,74
                    144:          B1(K1:K1)=B3(K2:K2)
                    145:          K2=K2+1
                    146: 1180   CONTINUE
                    147: C
                    148: C   FIND END OF SUBSTITUTE STRING IN B1:
                    149: C
                    150:        DO 1200 J=74,1,-1
                    151: C                                              !ELIM TRAILING BLANKS.
                    152:          IF(B1(J:J).NE.' ') GO TO 1300
                    153: 1200   CONTINUE
                    154: C
                    155: C   PUT TAIL END OF B1 (NOW IN B2) BACK INTO B1 AFTER SUBSTITUTE STRING:
                    156: C
                    157: 1300   K1=1
                    158: C                                              !FROM
                    159:        DO 1400 K2=J+1,74
                    160: C                                              !COPY REST OF B1 BACK.
                    161:          B1(K2:K2)=B2(K1:K1)
                    162:          K1=K1+1
                    163: 1400   CONTINUE
                    164: C
                    165:        Y=Z
                    166: C                                              !SET UP FOR NEXT
                    167:        Z=0
                    168: C                                              !SUBSTITUTION AND
                    169:        GO TO 200
                    170: C                                              !RECHECK LINE.
                    171: #endif PDP
                    172: C
                    173:        END
                    174: C OBJACT-- APPLY OBJECTS FROM PARSE VECTOR
                    175: C
                    176: C DECLARATIONS
                    177: C
                    178:        LOGICAL FUNCTION OBJACT(X)
                    179:        IMPLICIT INTEGER (A-Z)
                    180:        LOGICAL OAPPLI
                    181: #include "parser.h"
                    182: #include "objects.h"
                    183: C
                    184:        OBJACT=.TRUE.
                    185: C                                              !ASSUME WINS.
                    186:        IF(PRSI.EQ.0) GO TO 100
                    187: C                                              !IND OBJECT?
                    188:        IF(OAPPLI(OACTIO(PRSI),0)) RETURN
                    189: C                                              !YES, LET IT HANDLE.
                    190: C
                    191: 100    IF(PRSO.EQ.0) GO TO 200
                    192: C                                              !DIR OBJECT?
                    193:        IF(OAPPLI(OACTIO(PRSO),0)) RETURN
                    194: C                                              !YES, LET IT HANDLE.
                    195: C
                    196: 200    OBJACT=.FALSE.
                    197: C                                              !LOSES.
                    198:        RETURN
                    199:        END
                    200: #ifndef PDP
                    201: C BUG-- REPORT FATAL SYSTEM ERROR
                    202: C
                    203: C CALLED BY--
                    204: C
                    205: C      CALL BUG(NO,PAR)
                    206: C
                    207:        SUBROUTINE BUG(A,B)
                    208:        IMPLICIT INTEGER(A-Z)
                    209: #include "debug.h"
                    210: C
                    211:        PRINT 100,A,B
                    212:        IF(DBGFLG.NE.0) RETURN
                    213:        CALL EXIT
                    214: C
                    215: #ifdef NOCC
                    216: 100    FORMAT('PROGRAM ERROR ',I2,', PARAMETER=',I6)
                    217: #else NOCC
                    218: 100    FORMAT(' PROGRAM ERROR ',I2,', PARAMETER=',I6)
                    219: #endif NOCC
                    220:        END
                    221: #endif PDP
                    222: C NEWSTA-- SET NEW STATUS FOR OBJECT
                    223: C
                    224: C CALLED BY--
                    225: C
                    226: C      CALL NEWSTA(OBJECT,STRING,NEWROOM,NEWCON,NEWADV)
                    227: C
                    228:        SUBROUTINE NEWSTA(O,R,RM,CN,AD)
                    229:        IMPLICIT INTEGER(A-Z)
                    230: #include "objects.h"
                    231: C
                    232:        CALL RSPEAK(R)
                    233:        OROOM(O)=RM
                    234:        OCAN(O)=CN
                    235:        OADV(O)=AD
                    236:        RETURN
                    237:        END
                    238: C QHERE-- TEST FOR OBJECT IN ROOM
                    239: C
                    240: C DECLARATIONS
                    241: C
                    242:        LOGICAL FUNCTION QHERE(OBJ,RM)
                    243:        IMPLICIT INTEGER (A-Z)
                    244: #include "objects.h"
                    245: C
                    246:        QHERE=.TRUE.
                    247:        IF(OROOM(OBJ).EQ.RM) RETURN
                    248: C                                              !IN ROOM?
                    249:        DO 100 I=1,R2LNT
                    250: C                                              !NO, SCH ROOM2.
                    251:          IF((OROOM2(I).EQ.OBJ).AND.(RROOM2(I).EQ.RM)) RETURN
                    252: 100    CONTINUE
                    253:        QHERE=.FALSE.
                    254: C                                              !NOT PRESENT.
                    255:        RETURN
                    256:        END
                    257: C QEMPTY-- TEST FOR OBJECT EMPTY
                    258: C
                    259: C DECLARATIONS
                    260: C
                    261:        LOGICAL FUNCTION QEMPTY(OBJ)
                    262:        IMPLICIT INTEGER (A-Z)
                    263: #include "objects.h"
                    264: C
                    265:        QEMPTY=.FALSE.
                    266: C                                              !ASSUME LOSE.
                    267:        DO 100 I=1,OLNT
                    268:          IF(OCAN(I).EQ.OBJ) RETURN
                    269: C                                              !INSIDE TARGET?
                    270: 100    CONTINUE
                    271:        QEMPTY=.TRUE.
                    272:        RETURN
                    273:        END
                    274: C JIGSUP- YOU ARE DEAD
                    275: C
                    276: C DECLARATIONS
                    277: C
                    278:        SUBROUTINE JIGSUP(DESC)
                    279:        IMPLICIT INTEGER (A-Z)
                    280:        LOGICAL YESNO,MOVETO,QHERE,F
                    281:        INTEGER RLIST(9)
                    282: #include "parser.h"
                    283: #include "gamestate.h"
                    284: #include "state.h"
                    285: #include "io.h"
                    286: #include "debug.h"
                    287: #include "rooms.h"
                    288: #include "rflag.h"
                    289: #include "rindex.h"
                    290: #include "objects.h"
                    291: #include "oflags.h"
                    292: #include "oindex.h"
                    293: #include "advers.h"
                    294: #include "flags.h"
                    295: C
                    296: C FUNCTIONS AND DATA
                    297: C
                    298:        DATA RLIST/8,6,36,35,34,4,34,6,5/
                    299: C JIGSUP, PAGE 2
                    300: C
                    301:        CALL RSPEAK(DESC)
                    302: C                                              !DESCRIBE SAD STATE.
                    303:        PRSCON=1
                    304: C                                              !STOP PARSER.
                    305:        IF(DBGFLG.NE.0) RETURN
                    306: C                                              !IF DBG, EXIT.
                    307:        AVEHIC(WINNER)=0
                    308: C                                              !GET RID OF VEHICLE.
                    309:        IF(WINNER.EQ.PLAYER) GO TO 100
                    310: C                                              !HIMSELF?
                    311:        CALL RSPSUB(432,ODESC2(AOBJ(WINNER)))
                    312: C                                              !NO, SAY WHO DIED.
                    313:        CALL NEWSTA(AOBJ(WINNER),0,0,0,0)
                    314: C                                              !SEND TO HYPER SPACE.
                    315:        RETURN
                    316: C
                    317: 100    IF(ENDGMF) GO TO 900
                    318: C                                              !NO RECOVERY IN END GAME.
                    319:        IF(DEATHS.GE.2) GO TO 1000
                    320: C                                              !DEAD TWICE? KICK HIM OFF.
                    321:        IF(.NOT.YESNO(10,9,8)) GO TO 1100
                    322: C                                              !CONTINUE?
                    323: C
                    324:        DO 50 J=1,OLNT
                    325: C                                              !TURN OFF FIGHTING.
                    326:          IF(QHERE(J,HERE))   OFLAG2(J)=and(OFLAG2(J),not(FITEBT))
                    327: 50     CONTINUE
                    328: C
                    329:        DEATHS=DEATHS+1
                    330:        CALL SCRUPD(-10)
                    331: C                                              !CHARGE TEN POINTS.
                    332:        F=MOVETO(FORE1,WINNER)
                    333: C                                              !REPOSITION HIM.
                    334:        EGYPTF=.TRUE.
                    335: C                                              !RESTORE COFFIN.
                    336:        IF(OADV(COFFI).EQ.WINNER) CALL NEWSTA(COFFI,0,EGYPT,0,0)
                    337:        OFLAG2(DOOR)=and(OFLAG2(DOOR),not(TCHBT))
                    338:        OFLAG1(ROBOT)=and(or(OFLAG1(ROBOT),VISIBT),not(NDSCBT))
                    339:        IF((OROOM(LAMP).NE.0).OR.(OADV(LAMP).EQ.WINNER))
                    340: &              CALL NEWSTA(LAMP,0,LROOM,0,0)
                    341: C
                    342: C NOW REDISTRIBUTE HIS VALUABLES AND OTHER BELONGINGS.
                    343: C
                    344: C THE LAMP HAS BEEN PLACED IN THE LIVING ROOM.
                    345: C THE FIRST 8 NON-VALUABLES ARE PLACED IN LOCATIONS AROUND THE HOUSE.
                    346: C HIS VALUABLES ARE PLACED AT THE END OF THE MAZE.
                    347: C REMAINING NON-VALUABLES ARE PLACED AT THE END OF THE MAZE.
                    348: C
                    349:        I=1
                    350:        DO 200 J=1,OLNT
                    351: C                                              !LOOP THRU OBJECTS.
                    352:          IF((OADV(J).NE.WINNER).OR.(OTVAL(J).NE.0))
                    353: &              GO TO 200
                    354:          I=I+1
                    355:          IF(I.GT.9) GO TO 400
                    356: C                                              !MOVE TO RANDOM LOCATIONS.
                    357:          CALL NEWSTA(J,0,RLIST(I),0,0)
                    358: 200    CONTINUE
                    359: C
                    360: 400    I=RLNT+1
                    361: C                                              !NOW MOVE VALUABLES.
                    362:        NONOFL=RAIR+RWATER+RSACRD+REND
                    363: C                                              !DONT MOVE HERE.
                    364:        DO 300 J=1,OLNT
                    365:          IF((OADV(J).NE.WINNER).OR.(OTVAL(J).EQ.0))
                    366: &              GO TO 300
                    367: 250      I=I-1
                    368: C                                              !FIND NEXT ROOM.
                    369:          IF(and(RFLAG(I),NONOFL).NE.0) GO TO 250
                    370:          CALL NEWSTA(J,0,I,0,0)
                    371: C                                              !YES, MOVE.
                    372: 300    CONTINUE
                    373: C
                    374:        DO 500 J=1,OLNT
                    375: C                                              !NOW GET RID OF REMAINDER.
                    376:          IF(OADV(J).NE.WINNER) GO TO 500
                    377: 450      I=I-1
                    378: C                                              !FIND NEXT ROOM.
                    379:          IF(and(RFLAG(I),NONOFL).NE.0) GO TO 450
                    380:          CALL NEWSTA(J,0,I,0,0)
                    381: 500    CONTINUE
                    382:        RETURN
                    383: C
                    384: C CAN'T OR WON'T CONTINUE, CLEAN UP AND EXIT.
                    385: C
                    386: 900    CALL RSPEAK(625)
                    387: C                                              !IN ENDGAME, LOSE.
                    388:        GO TO 1100
                    389: C
                    390: 1000   CALL RSPEAK(7)
                    391: C                                              !INVOLUNTARY EXIT.
                    392: 1100   CALL SCORE(.FALSE.)
                    393: C                                              !TELL SCORE.
                    394: #ifdef PDP
                    395: C      file closed in exit routine
                    396: #else
                    397:        CLOSE(DBCH)
                    398: #endif PDP
                    399:        CALL EXIT
                    400: C
                    401:        END
                    402: C OACTOR-      GET ACTOR ASSOCIATED WITH OBJECT
                    403: C
                    404: C DECLARATIONS
                    405: C
                    406:        INTEGER FUNCTION OACTOR(OBJ)
                    407:        IMPLICIT INTEGER(A-Z)
                    408: #include "advers.h"
                    409: C
                    410:        DO 100 I=1,ALNT
                    411: C                                              !LOOP THRU ACTORS.
                    412:          OACTOR=I
                    413: C                                              !ASSUME FOUND.
                    414:          IF(AOBJ(I).EQ.OBJ) RETURN
                    415: C                                              !FOUND IT?
                    416: 100    CONTINUE
                    417:        CALL BUG(40,OBJ)
                    418: C                                              !NO, DIE.
                    419:        RETURN
                    420:        END
                    421: C PROB-                COMPUTE PROBABILITY
                    422: C
                    423: C DECLARATIONS
                    424: C
                    425:        LOGICAL FUNCTION PROB(G,B)
                    426:        IMPLICIT INTEGER(A-Z)
                    427: #include "flags.h"
                    428: C
                    429:        I=G
                    430: C                                              !ASSUME GOOD LUCK.
                    431:        IF(BADLKF) I=B
                    432: C                                              !IF BAD, TOO BAD.
                    433:        PROB=RND(100).LT.I
                    434: C                                              !COMPUTE.
                    435:        RETURN
                    436:        END
                    437: C RMDESC-- PRINT ROOM DESCRIPTION
                    438: C
                    439: C RMDESC PRINTS A DESCRIPTION OF THE CURRENT ROOM.
                    440: C IT IS ALSO THE PROCESSOR FOR VERBS 'LOOK' AND 'EXAMINE'.
                    441: C
                    442:        LOGICAL FUNCTION RMDESC(FULL)
                    443: C
                    444: C FULL=        0/1/2/3=        SHORT/OBJ/ROOM/FULL
                    445: C
                    446: C DECLARATIONS
                    447: C
                    448:        IMPLICIT INTEGER (A-Z)
                    449:        LOGICAL LIT,RAPPLI
                    450: C      LOGICAL PROB
                    451: #include "parser.h"
                    452: #include "gamestate.h"
                    453: #include "screen.h"
                    454: #include "rooms.h"
                    455: #include "rflag.h"
                    456: #include "xsrch.h"
                    457: #include "objects.h"
                    458: #include "advers.h"
                    459: #include "verbs.h"
                    460: #include "flags.h"
                    461: C RMDESC, PAGE 2
                    462: C
                    463:        RMDESC=.TRUE.
                    464: C                                              !ASSUME WINS.
                    465:        IF(PRSO.LT.XMIN) GO TO 50
                    466: C                                              !IF DIRECTION,
                    467:        FROMDR=PRSO
                    468: C                                              !SAVE AND
                    469:        PRSO=0
                    470: C                                              !CLEAR.
                    471: 50     IF(HERE.EQ.AROOM(PLAYER)) GO TO 100
                    472: C                                              !PLAYER JUST MOVE?
                    473:        CALL RSPEAK(2)
                    474: C                                              !NO, JUST SAY DONE.
                    475:        PRSA=WALKIW
                    476: C                                              !SET UP WALK IN ACTION.
                    477:        RETURN
                    478: C
                    479: 100    IF(LIT(HERE)) GO TO 300
                    480: C                                              !LIT?
                    481:        CALL RSPEAK(430)
                    482: C                                              !WARN OF GRUE.
                    483:        RMDESC=.FALSE.
                    484:        RETURN
                    485: C
                    486: 300    RA=RACTIO(HERE)
                    487: C                                              !GET ROOM ACTION.
                    488:        IF(FULL.EQ.1) GO TO 600
                    489: C                                              !OBJ ONLY?
                    490:        I=RDESC2-HERE
                    491: C                                              !ASSUME SHORT DESC.
                    492:        IF((FULL.EQ.0)
                    493: &              .AND.(SUPERF.OR.(((and(RFLAG(HERE),RSEEN)).NE.0)
                    494: C
                    495: C  The next line means that when you request VERBOSE mode, you
                    496: C  only get long room descriptions 20% of the time. I don't either
                    497: C  like or understand this, so the mod. ensures VERBOSE works
                    498: C  all the time.                       [email protected] 22/10/87
                    499: C
                    500: C&                     .AND.(BRIEFF.OR.PROB(80,80)))))       GO TO 400
                    501: &                      .AND.BRIEFF)))       GO TO 400
                    502:        I=RDESC1(HERE)
                    503: C                                              !USE LONG.
                    504:        IF((I.NE.0).OR.(RA.EQ.0)) GO TO 400
                    505: C                                              !IF GOT DESC, SKIP.
                    506:        PRSA=LOOKW
                    507: C                                              !PRETEND LOOK AROUND.
                    508:        IF(.NOT.RAPPLI(RA)) GO TO 100
                    509: C                                              !ROOM HANDLES, NEW DESC?
                    510:        PRSA=FOOW
                    511: C                                              !NOP PARSER.
                    512:        GO TO 500
                    513: C
                    514: 400    CALL RSPEAK(I)
                    515: C                                              !OUTPUT DESCRIPTION.
                    516: 500    IF(AVEHIC(WINNER).NE.0) CALL RSPSUB(431,ODESC2(AVEHIC(WINNER)))
                    517: C
                    518: 600    IF(FULL.NE.2) CALL PRINCR(FULL.NE.0,HERE)
                    519:        RFLAG(HERE)=or(RFLAG(HERE),RSEEN)
                    520:        IF((FULL.NE.0).OR.(RA.EQ.0)) RETURN
                    521: C                                              !ANYTHING MORE?
                    522:        PRSA=WALKIW
                    523: C                                              !GIVE HIM A SURPISE.
                    524:        IF(.NOT.RAPPLI(RA)) GO TO 100
                    525: C                                              !ROOM HANDLES, NEW DESC?
                    526:        PRSA=FOOW
                    527:        RETURN
                    528: C
                    529:        END
                    530: C RAPPLI-      ROUTING ROUTINE FOR ROOM APPLICABLES
                    531: C
                    532: C DECLARATIONS
                    533: C
                    534:        LOGICAL FUNCTION RAPPLI(RI)
                    535:        IMPLICIT INTEGER(A-Z)
                    536:        LOGICAL RAPPL1,RAPPL2
                    537:        DATA NEWRMS/38/
                    538: C
                    539:        RAPPLI=.TRUE.
                    540: C                                              !ASSUME WINS.
                    541:        IF(RI.EQ.0) RETURN
                    542: C                                              !IF ZERO, WIN.
                    543:        IF(RI.LT.NEWRMS) RAPPLI=RAPPL1(RI)
                    544: C                                              !IF OLD, PROCESSOR 1.
                    545:        IF(RI.GE.NEWRMS) RAPPLI=RAPPL2(RI)
                    546: C                                              !IF NEW, PROCESSOR 2.
                    547:        RETURN
                    548:        END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.