>> ADVENTURES IN PASCAL Barry C. Breen P.O. Box 1964 Bellevue, Washington 98009 28-OCT-80 Rev. 3-DEC-82 >> History -- This version of the "Adventures" game is written in OMSI PASCAL V1.2 running under RSX11M V3.2 BL26 on a PDP 11/23. It contains special display text files for the VT-100 which makes use of double width and double height characters for special effect. It was written as an exercise in learning PASCAL and RSX while developing software for the Sundstrand Data Control Digital Ground Proximity Warning Computer for the Boeing 767/757 series aircraft. Adapted from a FORTRAN-IV-PLUS version found in a cave, not from the latest DECUS version. The comments on the original read as follows: ADVENTURES MODIFIED BY KENT BLACKETT ENGINEERING SYSTEMS GROUP DIGITAL EQUIPMENT CORP. 15-JUL-77 ORIGINAL VERSION WAS FOR DECSYSTEM-10 THIS VERSION IS FOR FORTRAN IV-PLUS UNDER THE IAS OPERATING SYSTEM ON THE PDP-11/70 The FORTRAN version also had a notice in the text files (listed in the instructions at the beginning of the game) which credited the original authors as follows: THIS PROGRAM WAS ORIGINALLY DEVELOPED BY WILLIE CROWTHER. MOST OF THE FEATURES OF THE CURRENT PROGRAM WERE ADDED BY DON WOODS (DON @ SU-AI). CONTACT DON IF YOU HAVE ANY QUESTIONS, COMMENTS ETC. I have retained most of the data structures and algorithms as they were in the F4P version with the following changes: 1) The entire game is organized into separately compileable PASCAL modules which run overlaid when built into a task. The resulting task file is huge, but the task image runs in less than 12 Kwords of memory. Modules and procedures which correspond to subroutines in the F4P version have the same or similar names, as do the data variables and constants. Also the original comments were retained where applicable. These features should make it easy for someone familiar with the original to follow this version. 2) The travel array, vocabulary data, and "atloc" arrays make use of PASCAL pointer types and linked lists rather than the integer array linkage used in the F4P version. 3) The ASCII text and data file is split up into smaller files by a special "files initialization" task before installation; then these smaller files are used when running the game rather than re-initializing from the main database each time the game is run. The main data files (ADVENTURE.DAT and ADVENTURE.100) are organized similar to the original F4P database file (TEXT.TXT), which makes them easy to edit. The smaller files (ADVTXT.DTA (or .100), ADVDAT.DTA (or .100), KATAB.DTA, and ADVENT.DTA) are PASCAL structured file types. Refer to the comments in the initialization module (ADVINI) for a description of the database. Constants, variables and type structures are described in the comments in the global declarations module (ADVGBL). 4) Vocabulary searches are done on a letter by letter basis via a linked tree file structure rather than searching a vocabulary table for a word match. This results in much faster word recognition time. 5) Maintenence and wizardry routines which had only been partially implemented in the Blackett F4P version I worked from were restored and enhanced slightly: 1. All wizardry data and variables are saved in an external file of integers, ADVWIZ.DTA. 2. The "message of the day" works and allows wizards to put out a 10 line by 70 character message at the beginning of the game. 3. The test for wizards now requires knowledge of a magic word and number and a new algorithm for correct response. 4. The pause feature does not require saving a core image; player name and variables are written to ADVWIZ. 5. POOF (wizardry data initialization) was made into a separate task; it simply creates an initial ADVWIZ file. I also added a task named PEEK which allows the "Grand Wizard" (presumably the system manager) to cheat and list out the current contents of ADVWIZ. If you come across a copy of this program and have any questions or comments, write to me at the address at the start of this readme file. >> Contents of Distribution: 1 ** PASCAL Source Files Library ADV.ULB Besides containing the source files for each of the game modules (see list below), this file contains the source for PEEK, POOF, and the files initialization tasks, ADVFLS and 100FLS. It also includes the overlay description file for the main task, ADVBLD.ODL. You need to add an overlay description for the OMSI and RSX stuff, derived from their PAS.ODL, and rename it ADVPAS.ODL. It need only reference the SYSLIB tree (if no FCSRES) and the following OMSI PASLIB modules: $INIT,$IO,$INPUT,$OUTPT,$ERROR,$WRINT,$DYNMM,$GETF,$PUTF,$CLOSE, $RSIM,ERROR,$ARITH,$OPEN,$READI,$SEEK,$FTIME,$FPSIM,$CNVRT 2 ** Assembled Object Code Library ADV.OLB OMSI compiled and improved and MAC assembled version of all the game modules. The OMSI Improver was used to condense the code, some modules are reduced in size by as much as 12% from the compiler output. Compiler used was the EIS/FIS V1.2 but no floating math is used. Note that the modules recommended to include in the overlay description for the PASCAL runtime stuff has the floating math packages removed (except for the "time" function, which is used to seed the pseudo-random number generator and in DATIME). All modules were compiled with the following command to PAS: PAS =ADVGBL,/E except MAIN which is the main program block and doesn't use the "/E" switch. 3 ** Useful Command Files It is recommended that you read and modify to suit your installation before using. ADVEDT.CMD -- "Do-all" command file for extracting modules from the source library, editing, replacement, compilation, improvement, assembly, listing, task build, library compression, etc. You may want to edit this to suit your own needs. ADVPRT.CMD -- Prints source listings from ADV.ULB using the serial print spooler or QMG. ADVBLD.CMD -- Task building sub-set of ADVEDT. 4 ** Database Files ADVENTURE.DAT -- ASCII format data ADVENTURE.100 -- ASCII format data (VT100 version) ADVTXT.DTA -- Text Files from ADVENTURE.DAT KATAB.DTA -- Tree-structured version of vocabulary from ADVENTURE.DAT (or ADVENTURE.100) ADVDAT.DTA -- Arrays of record pointers into text and vocabulary files. ADVTXT.100 -- Text Files from ADVENTURE.100 ADVDAT.100 -- Record pointers into vocabulary and VT100 text files. ADVENT.DTA -- Remainder of data from ADVENTURE.DAT (same as ADVENTURE.100) >> General Instructons: You need at least EIS instructions to use the object library as is for task building. In this case, modify a copy of the OMSI supplied PAS.ODL to include only the modules in the above list (see ADV.ULB description). Use PIP to rename it ADVPAS.ODL and insert into ADV.ULB using LBR. Then invoke ADVBLD.CMD, it does the rest. If you wish to recompile everything first, examine and edit ADVEDT so that task names, devices, and UIC's correspond to your installation and then use it. All three command files may be used as a guide for doing it all by hand. I have supplied enough goodies so you can easily change the game at any level of the process. Note that the source files make heavy use of OMSI extentions to standard PASCAL so if you are using someone else's PASCAL watch out for the following: 1) Random files access using the OMSI "SEEK" procedure and non-standard REWRITE and RESET procedures. 2) ELSE clause in CASE statements. 3) EXIT statement. 4) TIME function. 5) EXTERNAL declarations, {$E+} imbedded switch, and handling of globals. 6) Imbedded MACRO code using the {$C} switch. Have fun!! >> Index to Source Modules -- Here is a list of what procedures are contained in each of the game modules. Only the global level procedures are listed. ADVINI -- INITIALIZE ASK -- ASK, ASKM, ASKR, WIZARD BACKUP -- BACKUP CALSCO -- CALSCORE, WRTSCORE DATIME -- DATIME DROPOB -- DROPOBJ DUMPWD -- DUMPWD1, DOWHAT, NOTHERE, SMALL, VERBHUH FILLIT -- FILLIT FINISH -- FINISH, WAKEDWARVES GETIN -- GETIN, CAPS GETIT -- GETIT HOURS -- HOURS, LIQLOC KILLIT -- KILLIT, KILLOBJ LOOP0 -- ALIVE, BLOCKED, DEATH, DWARFSTUFF, PITDEATH, WHATSHERE, WHEREAREWE LOOP1 -- CAVECLOSING, CLOSECAVE, CLSECLUE, ENDDEMO, HINTROUTINE, LAMPDIM, LAMP0, LAMP1, LAMP2, MAGICM -- MAINTINENCE, MOTD, NEWHRS MAGICW -- ECHO, FEEFOO, MAGIC MAIN -- MAIN PROGRAM BLOCK NOWAY -- NOWAY PARSE -- PARSE, DOOBJ, DOVERB PLOVER -- PLOVER PRIMET -- PRIMETIME RDWIZ -- RDWIZ, BIT RESPON -- RESPONSE SAVNAM -- SAVNAME SAVVAR -- SAVVAR SAYIT -- SAYIT SPEAK -- SPEAK, CSPEAK, MSPEAK, RSPEAK START -- START, UNSAVE SUBS0 -- BITSET, DARK, FORCED, HERE, PCT, RAN, TOTING SUBS1 -- AT, CARRY, DESTROY, DROP, JUGGLE, LIQ, MOVE, PSPEAK, VOCAB TAKE -- TAKEIT, GETOBJ THROWO -- THROWOBJ TRANSI -- TRANSITIVE TRAVEL -- TRAVEL, TRVTBL, SEARCH TROLLB -- TROLLBRIDGE VERBS0 -- BREAKIT, FINDIT, LAMPOFF, LAMPON, WAVEIT VERBS1 -- LOCKED, LOCKIT, READIT, READOBJ VERBS2 -- BLASTIT, DRINKIT, EATIT, EATOBJ, POURIT VERBS3 -- FEEDIT, SNARF, THROWAXE VERBS4 -- ASKSCORE, SAVE, WRWIZ, WRWIZB, WRWRD VERBS5 -- BRIEF, QUITGAME, TSTOBJ, WHATYOUGOT WIZMAG -- CHKMAG, GETMAG, WRTMAG WIZMAG -- CHKMAG, GETMAG, WRTMAG >> Final Notes and Novice Wizard's Disclaimer, 2-DEC-82: I have yet to run this on V4 RSX or the VAX AME, but if OMSI works there, so should this. It is currently up and running on a friend's 11/23 and another's 11/34A, both running V3.2. It will be re-written in VAX PASCAL when I find the time. Current work address: Barry C. Breen Senior Design Engineer Sundstrand Data Control Redmond, Wash. 98052