"(c) Copyright 1978, Massachusetts Institute of Technology. All rights reserved." "GUTS OF FROB: BASIC VERBS, COMMAND READER, PARSER, VOCABULARY HACKERS." (VERS DEV SNM SCRATCH-STR) STRING> "CFS;MADADV SAVE") (T "MADADV.SAVE")>) (START? T) "AUX" (MUDDLE ,MUDDLE) STV (ST )) #DECL ((START?) (FN) STRING (MUDDLE) FIX (STV) ) > > > > > > > ) ( )> > "SAVED"> > ,ZORK-HAND> T) (T ; "STARTER on 10x sets up tty correctly, setg's DEV to \"MDL\" if that device exists; if not, (sort of) returns directory save file came from. On its it returns # zorkers currently in existence." FIX>> > <=? ,XUNM "USERS2">>> )> > FIX> > <=? ,XUNM "SEC"> <=? ,XUNM "ELBOW"> >>) ( .STV>>>>>)> >) ( "ZORK">)> > )>> "Stuff for diverting gc's" > > > ;"Too much diversion ?" > ) (ELSE ;"Divert this request for storage" ;"First diversion ?" )> > ;"Get storage desired plus extra increment")>> > ,DIVERT-FCN>> >> > ,GC-FCN>> > <==? 32>> ) (T .X)>> >> ) CMA JR LFST LLST TLEN TSTR STR) #DECL ((STR TSTR UNAME) STRING (NM CMA JR) (TLEN LLST LFST) FIX) >> >> ) > >> >> >>) ( >>>)>) ()>> > >> > > > >>)> ) ( % >> > >) (ELSE )>> >> > >> >> ) (ELSE )>) (>)>> )) #DECL ((O) OBJECT (NSTR STR) STRING (LEN-I) FIX) >> > !\1> > ) (>)> >> 3>> >> " here.">> )) #DECL ((N) WORD) > FIX>> !\ > FIX>> !\, " 19" > FIX>> !\.>> ) (THEN ,INTIME)) #DECL ((NOW) WORD (THEN) ) <+ > FIX> > FIX>> > FIX> <* 24 7200>> > FIX>> 2>) (> FIX> > FIX>> 2>)> ,PLAYED-TIME>> (OUTCHAN) CHANNEL) > ) (T )> > 0> > > 60>> 0> > )> )> >> > ) ()> .TIME> (ZORK) (CH) ) > ,DBG> T> > > > ,MUD-HAND>> >) (,ERRFLG ) (T > <==? <1 .ZORK> CONTROL-G?!-ERRORS>> >) ( 3> <==? <1 .ZORK> FILE-SYSTEM-ERROR!-ERRORS> >> <==? 3> <=? <1 .ZF> "ILLEGAL CHR AFTER CNTRL P ON TTY DISPLAY">> ; "HACK FOR ILLEGAL CHR AFTER CTRL-P" ) ( > ) ( > .ZORK>)> > >)>)>> > (ERRFLG) > > >> > > ,HANDLE>> >> > )) #DECL ((ST RM) STRING (MUDDLE) FIX (XUNM) STRING (FN) ) > 2> <=? "___"> > >) (> > >)>)> ) ()> >> )> > )) ) ()> > ,NULL> >)> > > > ,ZORK-HAND>> )>> > > ) ) (">>> 1 (.CH)> 1 (.CH)> )>> >> >>> ) (UNM ,XUNM) (MUDDLE ,MUDDLE)) #DECL ((CH) (UNM) STRING (MUDDLE) FIX) >)> ) ( > <=? <10 .CH> .UNM> >> >> 1 (.CH)> 1 (.CH)> ) (T ZORK.SCRIPT">)>) (T )> )>> ) 1 ()> 1 ()> > >) (>)>> )) #DECL ((FNM) STRING (CH) (MUDDLE) FIX (UNM) STRING) ,RSEENBIT> ) (T )> ) (ELSE )> FIX>> > !\: .UNM ";ZORK SAVE">) (T ZORK." ,SAVNM>)>>> <=? <10 .CH> .UNM>>> >) (T !\: <10 .CH> !\; <7 .CH> !\ <8 .CH>>>)> ,POST-CRLF " " <2 .CH>>) (T )>)> > ,ZORK-HAND>)> )>> (STR) STRING (NOW MUDDLE) FIX (DR) ACTIVATION (XUNM) STRING) ,RSEENBIT> ) ( !\: .XUNM ";ZORK SAVE">>) (T ZORK." ,SAVNM>>)> )) #DECL ((FOO) (SNM) ) > FIX>> ) ()> ) (> ">ZORK.SAVE">> > ) ( ,POST-CRLF " " <1 .CH>>)>>> (T) ) > <2 .T>) ("DSK")>> "GET-ATOM TAKES A VALUE AND SEARCHES INITIAL FOR FIRST ATOM SETG'ED TO THAT." )) #DECL ((O) OBLIST (ACT) ACTIVATION (VAL) ANY) ) <==? ,.X .VAL>> )>> .X>> .O>> ; "ROOM-INFO -- PRINT SOMETHING ABOUT THIS PLACE 1. CHECK FOR LIGHT --> ELSE WARN LOSER 2. GIVE A DESCRIPTION OF THE ROOM 3. TELL WHAT'S ON THE FLOOR IN THE WAY OF OBJECTS 4. SIGNAL ENTRY INTO THE ROOM " > > > > > > > > > > > ) ()>> >> > )>> > ) "AUX" (AV ) (RM ,HERE) (PRSO <2 ,PRSVEC>) (WINOBJ ) (OUTCHAN ,OUTCHAN) RA (FULLQ <>) (FIRST? T)) #DECL ((RM) ROOM (WINOBJ) OBJECT (AV) (OUTCHAN) CHANNEL (PRSO) (FULL) (FULLQ FIRST?) ) > >)> > )> FIX>>>> > > ) (.PRSO ) ( ,LONG-TELL1>) ( ".">)> ) (> >)> > ,SUPER-BRIEF!-FLAG> > >>) (> >> > > >) ( ,LONG-TELL1>)> ".">>)> > ) ( > FIX>>>> > >> ) (T > > )>)> >) ( ) (,BRIEF!-FLAG <>) (T)>>)>)>> >)> > > > >)> T>> "Give a description of an object. Do short descriptions for the 'object' command. Otherwise, try odesco (if never touched), odesc1, or odesc2, based on the state of briefness." ) (FIRST? <>) "AUX" STR) #DECL ((FULLQ FIRST?) (OBJ) OBJECT (STR) (FULL) ) ,BRIEF!-FLAG>>> )> >) (> >>> >> ) (>>> ) ( " here.">)>) (T >> >) (>)> <>) ()>)>> 8>> ) (ALSO <>) (TOBJ <>)) #DECL ((AV) (OBJ WINOBJ) OBJECT (INDENT) STRING (CONT) (ALSO TOBJ) (PRINT-C) ACTIVATION (CASE?) ) > >> ) (ELSE ) >) ( > >> >)>) ()>> >)> > )> >) ( 1> <==? <1 .CONT> >>>> >) ()> >) ( >>> >)> >)>> >)>)>> "TRUE IF PARSER WON: OTHERWISE INHIBITS OBJECT ACTIONS, CLOCKS (BUT NOT THIEF)." (PARSE-CONT) >> > ) "AUX" VC RVEC (INPLEN 1) (INBUF ,INBUF) (WINNER ,WINNER) AV (OUTCHAN ,OUTCHAN) RANDOM-ACTION PC RV) #DECL ((RVEC PC) (INPLEN) FIX (INBUF) STRING (WINNER) ADV (AV) (OUTCHAN) CHANNEL (IVEC) (VC) (RV) ) > )> > >>)> (LIT?) (HERE) ROOM) > > ) ( > " <>>> <==? <1 .INBUF> !\;>> )> >>)> > > > >> VERB>>> >>) ( )> > > >>> > > <==? .HERE > > >)> > >)>)>) (.IVEC ) ()> )> >) (T >)> >) ( > )>> ,DEMONS>)> > > > > > >)>>> > 0> )>> > 0> )>> >) (> .NUM>> )>> ) (MS ,SCORE-MAX)) #DECL ((NUM MS) FIX) >>> >)>> > (SCOR SMAX) FIX (OUTCHAN) CHANNEL (PCT) FLOAT (EG) ) )> ) ()> >) (>>)> >> ) ()> >> "Dungeon Master") ( "Super Cheater") ( "Master Cheater") ( "Advanced Cheater") ("Cheater")>) ( "Cheater") ( "Wizard") ( "Master") ( "Winner") ( "Hacker") ( "Adventurer") ( "Junior Adventurer") ( "Novice Adventurer") ( "Amateur Adventurer") ( "Beginner") ("Incompetent")>)>> .SCOR> > (SCOR) FIX) LIST> >)> > >> > ) ()>> >> > "PRINT OUT DESCRIPTION OF LOSSAGE: WHEN PLAYED, SCORE, # MOVES, ETC. IF CALLED WITH CHANNEL, MUST BE FROM ERROR HANDLER--ERROR OCCURRED, GAME WILL GO AWAY WHEN FINISHES." > > > >> > ) "AUX" (DEATH? ) CT STR (CH <>)) #DECL ((STR) STRING (CH) > (FEECH?) (CT) FIX (DEATH?) ) ) (>>)> > >) (T )> >>> ) (T )> ,POST-CRLF " (terminate with altmode): "> > > ) (<0? .CT> ) ()>)>> ">> ) ()> ) (>> ) ( ) ()> )> ,MOVES ,DEATHS #FALSE (". Griping.") ,HERE> FIX>> > .CT>>> ) > ) ()>> ) ()> .CH> > > .ZORK> )> ,RESTORE-HAPPENED> )>)> ">)> ) ()>)>> >> >>> > ) (SNM ) (MUDDLE ,MUDDLE)) #DECL ((CH) > (MUDDLE FL CT) FIX (NAM STR DEV SNM) STRING) > > 1> > >)> >) ( ,10XERRS>> ; "Can't win--no write access" ) (T )> >> .CH) ( *4000000*>> <==? <3 .CH> *600130*>>> ;"on 10x, must get FILE BUSY to try again" ) (>) ( ,10XERRS>> ; "No write access" .CH) (.CH)>>> )) #DECL ((SCORE MOVES DEATHS) FIX (QUIT?) (LOC) ROOM (CH) FALSE>) >> > > >> >>> (LOC) ROOM (OUTCHAN) ) )> .CH> > ) ( )> ) (T )> ) (T )> .CH> ) ( ) ( .CH>)> > > (CH) CHANNEL) ) (VAL ,.X)) #DECL ((X) ATOM (Y) STRING) <0? .VAL>> > .VAL>> .CH> .CH>)>> .LST>> > FIX>) (A/P " AM") HR) #DECL ((WD) (TIM HR) FIX (A/P) STRING (CH) CHANNEL) > ) (T > FIX>> .CH> > FIX> .CH> > > )> )> 120>> )> )>> > > ) "AUX" (WINNER ,WINNER) (DEATHS ,DEATHS) (AOBJS ) (RANDOM-LIST ,RANDOM-LIST) (LAMP ) LAMP-LOCATION (VAL-LIST ()) LC C RO) #DECL ((DESC) STRING (DEATHS) FIX (AOBJS) (VAL-LIST RO) (LAMP-LOCATION) (WINNER) ADV (RANDOM-LIST) (C LAMP) OBJECT (LC) (PLAYER?) ) > > " has died."> > > )> > > > > >) ( >) (> > > ,OVISON> > > >> > >) (<==? .LAMP-LOCATION > >> >> ) (T )) #DECL ((Y) UVECTOR (X) ) > )>> ,CPOBJS>)>) (> )> ) ( )>)> ,TOUCHBIT> > > > > > >> >)> > > .RANDOM-LIST> > ) ( >>) (T 1>> >> )> (AOBJS) ) )> > <+ ,RENDGAME ,RAIRBIT ,RWATERBIT>>> .RM> >)> >> T)>> > ,MOVES ,DEATHS <> ,HERE> >>)>> )) #DECL ((CINTS) ) >)>> .CINTS>> ) (SNM ) (FILE1 "MADADV") (FILE2 "SAVE") SCOR STR C) #DECL ((DEV SNM FILE1 FILE2 STR) STRING (SCOR) FIX (C) ) > > .FILE1 !\. .FILE2>) ()>> > ) ( )>)>> > > > >> ) (SNM ) "AUX" (CH ) LEN (BUF ,INBUF) (BUFLEN ) ITER) #DECL ((BUF FILE1 FILE2 DEV SNM) STRING (CH) (ITER LEN BUFLEN) FIX) > > > >> >) (>)> > > > )> >> >)>>> >> )>>) ()>> ) (OUTCHAN ,OUTCHAN)) #DECL ((ANY) (OUTCHAN) CHANNEL (WIN) ADV) ) (> " is carrying:">)> >> > > >>) ( >)> )>> > >> (OUTCHAN) CHANNEL) ) >> 2> ) (<==? 2> )>> .OLST>> ;"WALK -- GIVEN A DIRECTION, WILL ATTEMPT TO WALK THERE" ) (ME ,WINNER) RANDOM-ACTION (RM <1 .ME>) (NL <>) (LOSSTR <>) (DARK <>)) #DECL ((WHERE) DIRECTION (ME) ADV (RM) ROOM (LOSSTR) (RANDOM-ACTION) (LEAVINGS) (NRM) [REST DIRECTION ]>> (NL) (DARK) ) >> > ) ( > >) (, )>> ) (ELSE > >)>) ( > >) ( ,OPENBIT> )>> ) (ELSE > >)>) (ELSE > >)>)> >> >>) ( >> > ) (T > )>)>) ( ) ( .WHERE>)>) (T ) (.NL > T) ()>)>> (DIR) DIRECTION) > >> .STR) (> > "There is no way up.") (<==? .DIR > "There is no way down.") ("There is a wall there.")>) ("You can't go that way.")>>> ) NOBJ (GETTER? <>) (FROM <3 ,PRSVEC>) (ROBJS ) (AOBJS ) (LOAD-MAX ,LOAD-MAX)) #DECL ((WIN) ADV (NOBJ) OBJECT (RM) ROOM (GETTER? TAKE?) (LOAD-MAX) FIX (ROBJS AOBJS) (FROM) ) ,NO-CHECK-BIT> >)> >>> >)> > >> )> >>> ) (<==? > >) ( ,TAKEBIT>> > >> >) ( .ROBJS>> >>>> >) ( >> >> .LOAD-MAX> >>)> >> > > > ) (T)>) (T)>) ( .AOBJS> )>>> ) (OCAN <>)) #DECL ((ROBJS) (CROCK CAN) OBJECT (OCAN) (OBJACT) (PV) VECTOR) ,NO-CHECK-BIT> >)> >> <0? >>>> >>)> ,OPENBIT> > ,VEHBIT>> > >) ( >)> > >) (<==? .CAN .CROCK> >) (<==? .CAN> " is already in the "> > )> <==? .CROCK>> .CAN>> >)>)> > > > > > ".">) ()> >)> > > > >> > > >> > >) (T)>) (> )> > > ) ( )>>> ) (AOBJS ) (GETTER? <>) (VEC ,PRSVEC) (RM ) NOBJ (VB )) #DECL ((VEC) > (WINNER) ADV (NOBJ) OBJECT (AV) (AOBJS) (RM) ROOM (GETTER?) (VB) VERB) .AV> >>) ( ,NO-CHECK-BIT> >)> > >> > )> .AOBJS>> >) ( " is closed."> )>) (>)> > > > ) ( .RM>)> ) (.AV) ( ) ( )>) ()>>> "STUFF FOR 'EVERYTHING' AND 'VALUABLES'" 20> OBJECT>> > >) (WINNER ,WINNER) (HERE ,HERE) (NONE? <>)) #DECL ((UV) (PRSVEC) (RA) RAPPLIC (WINNER) ADV (HERE) ROOM (NONE?) ) > )> > 0 ": "> > )>)>> .UV> >) ( <==? >> ) ( >> >> )> 0 ": "> > )>> .UV>)> T> ,PRSVEC>) (ALLBUT <>) "AUX" (PRSVEC ,PRSVEC) (SUV ,OBJ-UV) (TUV ) (LU ) (HERE ,HERE) (WINNER ,WINNER) (WRONG-VERB? <>) (ROOM-LIST >) ()>)) #DECL ((SUV TUV) (LU) FIX (HERE) ROOM (WINNER) ADV (EVERYTHING?) FALSE FIX ATOM> (WRONG-VERB?) (ROOM-LIST) (ALLBUT) >) ,PRSVEC> )> > > )> > )>> .ROOM-LIST>) ( > )>> >) ( >> )> > > )>> .ROOM-LIST> >> )> > )>> >>) ()> ) ( >) ()>> ; "If FLG is T or a VECTOR, this is EVERYTHING; If FLG is a FIX, this is POSSESSIONS; If FLG is a FALSE, this is VALUABLES; In any event, this is KLUDGY." (OBJ) OBJECT (BUT) >) >> >>>> >>>> ) ( ,CONTBIT>> > ".">) (> 0> ,OPENBIT> ) (T ,OPENBIT> >> ,TRANSBIT>> ) ( > " reveals "> >> )>)>) (> " cannot be opened.">)>> ) ( ,CONTBIT>> > ".">) (> 0> ,OPENBIT> ,OPENBIT> ) (T )>) ()>> ) (>> ", which is in the room." "There is a " " here."> ", which you are carrying." "You are carrying a " ".">)>> (STR1 STR2 STR3) STRING) > .STR3>) ( >> > .STR3> .STR1>)>> >)>> .OBJL>> ;"OBJECT-ACTION -- CALL OBJECT FUNCTIONS FOR DIRECT AND INDIRECT OBJECTS" >> > >)> >> >)>>> "WEIGHT: Get sum of OSIZEs of supplied list, recursing to the nth level." (VALUE) FIX) ,BIGFIX> 0) ()> >>> .OBJL>> )) #DECL ((RM) ROOM) > ) ( ,TAKEBIT> > " reveals nothing.">) (> ".">)>) (>> )>> )) #DECL ((ME) ADV (LAMPO) ACTIVATION (LIT?) ) ) ( ,LIGHTBIT> >>) (T )> ,ONBIT> ) ( ,ONBIT> > " is now on.">)>)>> ) ( ,LIGHTBIT> >>) ( )> ,ONBIT>> ) ( ,ONBIT> > " is now off."> >)>)>> > 0> > )>>> "RUNS ONLY IF PARSE WON, TO PREVENT SCREWS FROM TYPOS." ) (CINT )) #DECL ((HACK) HACK (FLG) (CA) ANY (CINT) VERB) )) #DECL ((EV) CEVENT (TICK) FIX) >) (<0? .TICK>) ( .CINT>) (>> .CINT>)>)>> >)> .FLG> ) (FLAG? <>) "AUX" (CLOCKER ,CLOCKER)) #DECL ((CEV) CEVENT (NUM) (CLOCKER) HACK (FLAG?) ) >> )>)> )> )>> > > >>> )) #DECL ((B) ACTIVATION (WIN) ADV (AV) ) ,VEHBIT> >> > " must be on the ground to be boarded.">) (.AV > ", cretin!">) (T ) (> "."> > > )>)>) (> ".">)> > T> )) #DECL ((WIN) ADV (AV) ) > ) ( > >) ( > T)>) ( > T)>> ) (HERE ,HERE) (LB )) #DECL ((HERE RM) ROOM (WIN) ADV (AV) (LB) ) >>>> .LB .AV ,RLANDBIT> >>>> ".">) (<0? FIX>> ) ()> <>) ( ,LONG-TELL1>) (T > .RM>)> )> > T)>> > > (V) VECTOR (WIN PLAY) ADV) 3>> 3>> ) () ( ,ACTORBIT> >> > > )>> > > >) ( ,VICBIT> > " pays no attention.">) ()>> "SELECT -- Fill TO with random elements from FROM" )) #DECL ((FROM TO) VECTOR (K1 K2) STRING) >> )()> >> .TO> >>>> )) #DECL ((V) VECTOR (V1) ) >) ( > ) (>)>)>> .TO> )>>> >>> .STR> .C>