IMD 1.16: 31/05/2007 20:32:45 FOGCPM.141 ååååååååååååååå--FOGCPM141UPDATE COMUPDATE DOC!UPDATE AZM, TIMEON COMTIMEON AZMFTIMEOFF COMTIMEOFF AZML !"#LOGON COM$LOGON AZM2%&'()*+LOGOFF COM,LOGOFF AZM--./012OSNAKE COM>3456789:OSNAKE DOC;TDUCK COMu<=>?@ABCDEFGHIJTDUCK PASmKLMNOPQRSTUVWXJOURNEY COM€YZ[\]^_`abcdefghJOURNEY COM€ijklmnopqrstuvwxJOURNEY COM€yz{|}~€�‚ƒ„…†‡ˆ-09-00 86 ¨-CPM141 DOC©ª«JOURNEY DOC€‰Š‹Œ�Ž��‘’“”•–—˜JOURNEY DOCb™š›œ�žŸ ¡¢£¤¥JOURNEY INS¦JOURNEY SSS§åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååThis is the disk name. åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå!9"81Z:]þ Â*5"]\Í<ÊH íÍ\Í!€€^{þÊVÍÌ#Â9>õ ÖÍÃa>õ Í>P2~ ~Í:·ÊÇ:!€€#=·Ê‡Ã}6#‡ñ·Ê›\Í\Í<² Íÿ!|6\Í\Í*8ùÉåÅÍÁáÉ enter the date: $ date = $ new date = $ Not enough directory space$DA$ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååLOGONOF.DOC = "LOG ON / LOG OFF DOCUMENT" :::::::::::::::::: UPDATE AND LOGBOOK PROGRAMS :::::::::::::::::: Robert E. Daniels 124 Windsor Circle Chapel Hill, NC 27514 March 17, 1986 This submission consists of a series of small programs: UPDATE which creates an object file named DA LOGON which creates an object file named LOGBOOK LOGOFF TIMEON \ alternate versions of LOGON and LOGOFF TIMEOFF / All these programs are simple variants of the same underlying structure. They are not particularly elegant, but are functional and hopefully well enough documented to suggest improvements. I wrote these programs to keep track of dates on files and of overall computer use (inspired by the IRS). UPDATE and DA: Create a file containing the current date........................ UPDATE accepts the current date from keyboard input and stores that date in a data file called "DA". If DA does not yet exist on the disk in the logged drive, UPDATE creates a new file with that name. If DA exists, UPDATE overwrites it with the new entry. DA can be called up in WordStar files, etc. with a special function key. LOGON, LOGOFF, and LOGBOOK: Create a cumulative file of computer use......................... LOGON displays a prompt header and then reads in the date from DA. It assumes that a DA file exists on the logged drive. If not, it bails out with an error message. LOGON then checks for a data file named LOGBOOK. If none exists on the disk in the logged drive, it creates one. LOGON then accepts a four digit time of logging on (HHMM) from keyboard entry. As soon as the fourth digit is entered, LOGON writes the current date and time logged on to the first or next record in LOGBOOK. Any of the first 20 bytes following the date taken from DA are filled with blanks (20H), and then the rest of that record following the time logged on is filled with blanks (20H again). LOGOFF reads through the records in LOGBOOK and leave untouched those that have information following the LOGON date (i.e. time logged off and notes, if any). When LOGOFF finds the latest record (containing only the current date and time when logged on), it displays a prompt header, the current date and time logged on, and then accepts, from keyboard entry, a four digit time of logging off (HHMM), to be followed by two spaces and notes, if any. LOGOFF then writes this new information to the most recent file in LOGBOOK, adding carriage returns and line feeds later in the record to create a doublespaced ASCII text. TIMEON and TIMEOFF............................................... These are simply variants of LOGON and LOGOFF that take advantage of the clock function in my Micro Management OZROM (Version 1E, 1984). In these two programs the time is automatically entered by reading the current time in the OZROM memory (set with the utility TIME.COM), rather than requiring keyboard entry. Other versions of the OZROM may require changing the memory address in the equates table. As far as the creation of LOGBOOK is concerned, these programs are interchangeable with the LOGON/LOGOFF pair, i.e. TIMEON can be followed by LOGOFF and LOGON can be followed by TIMEOFF. LIMITATIONS...................................................... The notes should not exceed the 65th column of input, i.e. each LOGON + LOGOFF (or TIMEON + TIMEOFF) entry is restricted to a single line. LOGBOOK can be edited by WordStar, but once a heading is added, the altered LOGBOOK file will not function properly with LOGON or LOGOFF. A feature calculating the elapsed time is not currently implemented. NOTES ON ASSEMBLY LANGUAGE CODE................................. UPDATE was originally written in 8080 code, and translated into Z80 code. The others were written in Z80 code and compiled with the Z80 Macro Assembler "Z80MR.COM" from the FOG Library disk -FOG/CPM.017.  were written in Z80 code and compiled with the Z80 Macro Assembler "Z80MR.COM" from thquates table. As far as the creation of LOGBOOK is concerned, these programs are interchangeable with the LOGON/LOGOFF pair, i.e. TIMEON can be followed by LOGOFF and LOGON can be followed by TIMEOFF. LIMITATIONS...................................................... The notes should not exceed the 65th column of input, i.e. each LOGON + LOGOFF (or TIMEON + TIMEOFF) entry is restricted to a single line. LOGBOOK can be edited by WordStar, but once a heading is added, the altered LOGBOOK file will not function properly with LOGON or LOGOFF. A feature calculating the elapsed time is not currently implemented. NOTES ON ASSEMBLY LANGUAGE CODE................................. UPDATE was originally written in 8080 code, and translated into Z80 code. The others were written in Z80 code and compiled with the Z80 Macro Assembler "Z80MR.COM" from th;********************************************************* ; ; UPDATE.AZM ; ; CREATES AND MAINTAINS A TEXT FILE, ; NAMED DA, OR OTHER NAME IF SUPPLIED, ; IN WHICH TO STORE THE CURRENT DATE ; WHICH CAN THEN BE RECALLED IN WORDSTAR ; WITH A FUNCTION KEY = ^KRA:DA ; ; ROBERT E. DANIELS FEBRUARY 1, 1986 ;......................................................... ; ;EQUATES ; LF EQU 0AH ;LINEFEED CR EQU 0DH ;CARRIAGE RETURN ZAP EQU 1AH ;END OF FILE CHARACTER, ;USED AS FILLER = ^Z READS EQU 0AH ;READ CONSOLE BUFFER PRINTS EQU 9H ;PRINT STRING TO CONSOLE CONOUT EQU 2H ;CONSOLE OUTPUT ; MAKEF EQU 16H ;MAKE NEW FILE OPENF EQU 0FH ;OPEN EXISTING FILE DEFILE EQU 13H ;DELETE FILE CLOSEF EQU 10H ;CLOSE FILE ; READR EQU 14H ;READ SEQUENTIAL RECORD WRITER EQU 15H ;WRITE SEQUENTIAL RECORD ; FCB EQU 5CH ;FILE CONTROL BLOCK DMA EQU 80H ;DIRECT MEMORY ACCESS BUFFER ; BDOS EQU 5H ;BDOS ENTRY POINT ;..................................................... ; ORG 100H ; ;SET UP LOCAL STACK LD HL,0 ;CLEAR HL ADD HL,SP ;ADD STACK POINTER TO HL LD (OLDSP),HL ;SAVE IT TO MEMORY LD SP,STKTOP ;SET UP NEW PROGRAM STACK ; ;CHECK FOR COMMAND LINE FILE NAME LD A,(FCB+1) ;GET FIRST CHARACTER CP ' ' ;IF IT'S NOT A SPACE JP NZ,LETSGO ;THEN USE THAT NAME ; ;OTHERWISE MOVE THE DEFAULT FILE NAME INTO THE FCB LD HL,(FILNAM) ;POINT TO FILENAME LD (FCB+1),HL ;STORE TWO DIGIT NAME IN FCB ; ;TRY TO OPEN DATE FILE LETSGO LD C,OPENF LD DE,FCB CALL BDOS INC A ;CHECK TO SEE FILE EXISTS JP Z,FRSTFI ;IF NOT GO TO "FIRST FILE" ; ;FOR EXISTING FILE: DISPLAY CURRENT DATE MESSAGE LD C,PRINTS LD DE,CURRDA CALL BDOS ; ;READ RECORD LD C,READR LD DE,FCB CALL BDOS ; ;AND DISPLAY CURRENTLY STORED DATE LD HL,DMA ;GET STARTING ADDRESS OF DMA LD B,128D ;B IS BYTE-IN-RECORD COUNTER LOOP LD E,(HL) ;PUT FIRST/NEXT CHAR IN REG. E LD A,E ;ALSO PUT IT IN REGISTER A CP ZAP ;IS IT THE EOF FILLER CHAR? JP Z,INPUT ;IF SO, DISPLAY FINISHED CALL PCHAR ;OTHERWISE DISPLAY IT INC HL ;INCREMENT POINTER DEC B ;DECREMENT BYTE COUNTER JP NZ,LOOP ;GO GET NEXT CHARACTER ; ;FOR FIRST FILE: SET SIGNAL TO SKIP DELETE FRSTFI LD A,0 ;0 MEANS FILE DOES NOT YET EXIST PUSH AF ;PUT THIS ON STACK ; ;DISPLAY PROMPT FOR FIRST DATE LD C,PRINTS LD DE,FRSTDA CALL BDOS JP KEYB ;JUMP TO KEYBOARD INPUT ; ;FOR SUBSEQUENT ENTRIES: SET SIGNAL TO DO DELETE INPUT LD A,1 ;1 MEANS FILE ALREADY EXISTS PUSH AF ;PUT THIS ON STACK ; ;DISPLAY PROMPT FOR NEXT DATE LD C,PRINTS LD DE,NEXTDA CALL BDOS ; ;FOR ALL INPUT: READ CHARACTERS INTO BUFFER FROM KEYBOARD ;(STRING BUFFER STARTS 2 BYTES ;BEFORE DMA TO LEAVE ROOM FOR ;MAXIMUM COUNT AND ACTUAL COUNT) KEYB LD A,80D ;SET MAX. NUM. OF CHARACTERS ;IN INPUT TO SCREEN WIDTH LD (DMA-2),A ;PUT THIS AT START OF BUFFER LD C,READS ;CONSOLE BUFFER FUNCTION LD DE,DMA-2 ;LOAD STRING BUFFER ADDRESS  CALL BDOS ;READ STRING INTO BUFFER ; ;CHECK IF BUFFER IS EMPTY - I.E. NO CHANGE TO DATA FILE LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING OR A ;WAS IT 0? I.E. ONLY INPUT WAS CR JP Z,ALLDONE ;IF SO EXIT ; ;FILL THE REST OF THE RECORD WITH "ZAP" CHARACTER LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING LD HL,DMA ;GET STARTING ADDRESS OF DMA LD B,128D ;B IS BYTE-IN-RECORD COUNTER AGAIN INC HL ;GET ADDRESS OF NEXT BYTE DEC B ;DECREMENT BYTE-IN-RECORD COUNTER DEC A ;DECREMENT BYTES-USED COUNTER OR A ;HAVE WE COUNTED THEM ALL? JP Z,FILL ;IF SO GO TO FILL LOOP JP AGAIN ;IF NOT COUNT THE NEXT BYTE USED FILL LD (HL),ZAP ;PUT EOF CHARACTER IN UNUSED BYTE INC HL ;GET ADDRESS OF NEXT BYTE DEC B ;DECREMENT BYTE-IN-RECORD COUNTER JP NZ,FILL ;KEEP FILLING TO END OF RECORD ; ;CHECK THE DELETE/SKIP-DELETE SIGNAL POP AF ;RECALL DELETE SIGNAL FROM STACK OR A ;IF 0 (= FILE DOES NOT YET EXIST) JP Z,NEWF ;SKIP OVER FILE DELETE FUNCTION ; ;DELETE OLD FILE LD C,DEFILE LD DE,FCB CALL BDOS ; ;OPEN NEW FILE NEWF LD C,MAKEF LD DE,FCB CALL BDOS ; ;TEST IF DIRECTORY IS FULL,IF SO ERROR MESSAGE AND CLOSE OUT INC A ;IF ERROR, FFH -> 0 JP NZ,TODISK ;OTHERWISE SKIP TO WRITE TO DISK LD C,PRINTS ;DISPLAY ON SCREEN LD DE,DIRFUL ;DIRECTORY FULL ERROR MESSAGE CALL BDOS JP SHUT ;CLOSE FILE AND EXIT ; ;WRITE RECORD TO DISK TODISK LD HL,7CH ;PUT ADDRESS OF CR BYTE IN FCB LD (HL),0 ;SET IT TO ZERO EACH TIME SO THAT ;SEQUENTIAL WRITE FUNC. DOES NOT ;AUTOMATICALLY ADVANCE TO NEXT ;RECORD BUT OVERWRITES FIRST ;RECORD IN FCB LD C,WRITER LD DE,FCB ;CONTENTS OF FCB TO DISK FILE CALL BDOS ; ;CLOSE THE FILE SHUT LD C,CLOSEF LD DE,FCB CALL BDOS ; ;RESTORE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER FROM MEM LD SP,HL ;MAKE IT CURRENT STACK POINTER RET ;RETURN TO CP/M ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;MESSAGES FRSTDA DB CR,LF,LF,'enter the date: $' CURRDA DB ' date = $' NEXTDA DB CR,LF,LF,' new date = $' DIRFUL DB CR,LF,'Not enough directory space$' FILNAM DB 'DA$' ;NAME OF DATA FILE TO HOLD DATE ; ;PROGRAM STORAGE OLDSP DS 2 ;MEMORY SPACE FOR OLD STACK POINTER DS 32 ;NEW STACK SPACE STKTOP: ;NEW STACK STARTS HERE END T IT TO ZERO EACH TIME SO THAT ;SEQUENTIAL WRITE FUNC. DOES NOT ;AUTOMATICALLY ADVANCE TO NEXT ;RECORD BUT OVERWRITES FIRST ;RECORD IN FCB LD C,WRITER LD DE,FCB ;CONTENTS OF FCB TO DISK FILE CALL BDOS ; ;CLOSE THE FILE SHUT LD C,CLOSEF LD DE,FCB CALL BDOS ; ;RESTORE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER FROM MEM LD SP,HL ;MAKE IT CURRENT STACK POINTER RET ;RETURN TO CP/M ; ;SUBROUTINE - DISPLAY CHARAC!9"ø1 yÍ ·Í!â] í°\ͺ<Ê\Í!€~þ > w#õ!€€Íl\Í!í] í°\Í<†\ÍÕÛÕ\ÍÑÕ· Ê!€^ÍX#ù:fïÍ&2€ÍW:fïæÆ02�ÍW:gïÍ&2‚ÍW:gïæÆ02ƒÍW>!€€#=·(Ãà6 #û!€”Íl!€€Íl!|Ñs\Í\ÍÃ!Íb*øùÉþ00ÃUþ 01ÃUþ002ÃUþ@03ÃUþP04ÃU5xÉ_åÅÍÁáÉåÅ ÍÁáÉëå§íR§íBáëí°É )Date -On- ----------------- ---- ($ $ === CANNOT FIND DATE FILE: DA === $DA LOGBOOK åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå******************************************** ; ; TIMEON.AZM ; ; This program is for keeping a log of use ; of an Osborne 1 computer fitted with ; an OZROM. TIMEON.COM opens a new record for ; the start of each session. For the end of ; the session use the complementary program, ; TIMEOFF.COM. ; ; TIMEON ; a) reads in the current date from the data ; file "DA" which has previously been ; created/updated with UPDATE.COM ; b) reads in the current time in 4 digits ; (HHMM) from the OZROM clock ; c) creates/updates an ASCII file called ; "LOGBOOK" and writes this information, ; i.e. date and time of logging ON the ; computer, to LOGBOOK ; ; ROBERT E. DANIELS MARCH 15, 1986 ; 124 Windsor Circle ; Chapel Hill, NC 27514 ;......................................................... ; ;EQUATES ; LF EQU 0AH ;LINEFEED CR EQU 0DH ;CARRIAGE RETURN ZAP EQU 1AH ;END OF FILE CHARACTER = ^Z ;(USED AS FILLER IN "DA") BLNK EQU 20H ;CHARACTER FOR BLANK SPACE ; READS EQU 0AH ;READ CONSOLE BUFFER PRINTS EQU 9H ;PRINT STRING TO CONSOLE CONOUT EQU 2H ;CONSOLE OUTPUT (ONE CHAR) ; OPENF EQU 0FH ;OPEN EXISTING FILE MAKEF EQU 16H ;START A NEW FILE CLOSEF EQU 10H ;CLOSE FILE ; READR EQU 14H ;READ SEQUENTIAL RECORD WRITER EQU 15H ;WRITE SEQUENTIAL RECORD ; BDOS EQU 5H ;BDOS ENTRY POINT FCB EQU 5CH ;FILE CONTROL BLOCK DMA EQU 80H ;DIRECT MEMORY ACCESS BUFFER ; TIME EQU 0EF66H ;ADDR OF OZROM CLOCK TIME VALUE DEST EQU 1080H ;ADDR TO STORE DATE STRING DEST2 EQU 1094H ;ADDR TO STORE TIME-ON STRING LEN EQU 14H ;LENGTH OF DATE STRING ; ;..................................................... ; ORG 100H ; ;SET UP LOCAL STACK LD HL,0 ;CLEAR HL ADD HL,SP ;ADD STACK POINTER TO HL LD (OLDSP),HL ;SAVE IT TO MEMORY LD SP,STKTOP ;SET UP NEW PROGRAM STACK ; ;PRINT HEADER LD C,PRINTS LD DE,HEADER CALL BDOS ; ;INSERT CR & LF LD C,PRINTS LD DE,NEWLINE CALL BDOS ; ;MOVE THE FILE NAME "DA" INTO THE FCB  LD HL,DAFIL ;POINT TO FILENAME LD DE,FCB+1 ;POINT TO ADDR FOR FN IN FCB LD BC,11 ;NO. OF BYTES TO MOVE LDIR ;MOVE (HL) TO (DE) ;INC HL AND DE ;REPEAT UNTIL BC=0 ; ;TRY TO OPEN DATE FILE LD C,OPENF LD DE,FCB CALL BDOS LD DE,NOFILE ;ERROR MESSAGE INC A ;CHECK TO SEE FILE EXISTS JP Z,ERROR ;IF NOT GO TO "FIRST FILE" ; ;READ RECORD LD C,READR LD DE,FCB CALL BDOS ; ;CONVERT ZAPS IN "DA" TO BLANKS FOR "LOGBOOK" ;OTHERWISE "LOGBOOK" STOPS SHORT LD HL,DMA LD B,20D ;USE FIRST 20 BYTES IN "DA" CONV LD A,(HL) ;GET CHARACTER CP ZAP ;CHECK FOR EOF JR NZ,SKIP ;IF NOT, SKIP OVER NEXT LINE LD A,BLNK ;IF EOF, REPLACE WITH BLANK SKIP LD (HL),A ;PUT IT BACK IN STRING INC HL ;GET NEXT ADDRESS DJNZ CONV ;LOOP UNTIL B = 0 ; ;PUT THE DATE STRING IN HIGH MEMORY LD HL,DMA ;SOURCE ADDRESS LD DE,DEST ;DESTINATION ADDRESS LD BC,LEN ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;CLOSE THE FILE SHUT LD C,CLOSEF  LD DE,FCB CALL BDOS ; ;MOVE THE FILE NAME "LOGBOOK" INTO THE FCB LD HL,LOGFIL ;POINT TO FILENAME LD DE,FCB+1 ;POINT TO ADDR FOR FN IN FCB LD BC,11 ;NO. OF BYTES TO MOVE LDIR ;MOVE (HL) TO (DE) ;INC HL AND DE ;REPEAT UNTIL BC=0 ; ;OPEN LOGBOOK FILE LD C,OPENF LD DE,FCB CALL BDOS INC A ;IF NO FILE A -> 0 JP NZ,LETSGO ;IF LOGBOOK FILE EXISTS ;GO READ IT ; LD C,MAKEF ;IF NO FILE, LD DE,FCB ;START ONE NOW CALL BDOS LD DE,0 ;RECORD COUNTER SET TO 0 PUSH DE ;SAVE IT JP DISP ; LETSGO LD DE,0 ;RECORD COUNTER START AT 0 PUSH DE ;SAVE IT READ2 LD C,READR ;READ FIRST/NEXT RECORD LD DE,FCB CALL BDOS POP DE ;KEEP COUNT OF HOW INC E ;MANY RECORDS READ PUSH DE OR A ;WHEN EOF REACHED, READR FUNCTION JR NZ,DISP ;SETS A TO NON-ZERO. CHECK FOR IT JP READ2 ;OTHERWISE, READ NEXT RECORD ; ;DISPLAY CURRENTLY STORED DATE FROM HIGH MEMORY DISP LD HL,DEST ;GET STARTING ADDRESS OF HIGH MEM LD B,14H ;B IS BYTE-IN-RECORD COUNTER ;THIS PROGRAM ONLY USES FIRST 20 ;BYTES OF DATE STRING IN "DA" LOOP LD E,(HL) ;PUT FIRST/NEXT CHAR IN REG. E CALL PCHAR ;OTHERWISE DISPLAY IT INC HL ;INCREMENT ADDRESS POINTER DJNZ LOOP ;DECREMENT BYTE-IN-RECORD COUNTER ;KEEP LOOPING UNTIL B = 0 ; ;AUTOMATIC TIME ENTRY FROM OZROM CLOCK ; ;HOUR ; - FIRST DIGIT LD A,(TIME) ;GET BYTE REPRESENTING HOUR CALL TRY0 ;GOTO CONVERSION SUBROUTINE LD (DMA),A ;PUT RECODED VALUE IN FIRST ;BYTE OF DMA CALL DISTIME ;DISPLAY IT ; ; - SECOND DIGIT LD A,(TIME) ;GET BYTE REPRESENTING HOUR AND 0FH ;MASK OUT HIGH NIBBLE ADD A,'0' ;ADD 30H TO GET ASCII NUMERAL LD (DMA+1),A ;PUT THIS VALUE IN SECOND BYTE ;OF DMA CALL DISTIME ;DISPLAY IT ; ;MINUTES ; - FIRST DIGIT LD A,(TIME+1) ;GET BYTE REPRESENTING MINUTES CALL TRY0 ;GOTO CONVERSION SUBROUTINE LD (DMA+2),A ;PUT THIS VALUE IN THIRD BYTE ;OF DMA CALL DISTIME ;DISPLAY IT ; ; - SECOND DIGIT LD A,(TIME+1) ;GET BYTE REPRESENTING MINUTES AND 0FH ;MASK OUT HIGH NIBBLE ADD A,'0' ;ADD 30H TO GET ASCII NUMERAL LD (DMA+3),A ;PUT THIS VALUE IN FOURTH BYTE ;OF DMA CALL DISTIME ;DISPLAY IT ; ;FILL THE REST OF THE RECORD WITH "BLANK" CHARACTER LD A,4 ;GET NUMBER OF CHARACTERS ;IN THE AUTOMATIC TIME INPUT ;STRING LD HL,DMA ;GET STARTING ADDRESS OF DMA LD B,128D ;B IS BYTE IN RECORD COUNTER AGAIN INC HL ;GET ADDRESS OF NEXT BYTE DEC B ;DECREMENT BYTE IN RECORD COUNTER DEC A ;DECREMENT BYTES USED COUNTER OR A ;HAVE WE COUNTED THEM ALL? JR Z,FILL ;IF SO GO TO FILL LOOP JP AGAIN ;IF NOT COUNT THE NEXT BYTE USED FILL LD (HL),BLNK ;PUT BLANK CHAR IN UNUSED BYTE INC HL ;GET ADDRESS OF NEXT BYTE DJNZ FILL ;DECREMENT BYTE IN RECORD COUNTER ;KEEP FILLING TO END OF RECORD ; ;MOVE TIME-ON STRING TO END OF DATE STRING LD HL,DMA ;SOURCE ADDRESS LD DE,DEST2 ;DESTINATION ADDRESS LD BC,4 ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;BRING IT BACK TO DMA LD HL,DEST ;SOURCE ADDRESS LD DE,DMA ;DESTINATION ADDRESS LD BC,24 ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;WRITE RECORD TO DISK LD HL,7CH ;ADDR OF "CR BYTE" POP DE ;NO. OF RECORDS READ LD (HL),E ;ENTER THIS LD C,WRITER LD DE,FCB ;WRITE CONTENTS OF FCB CALL BDOS ;TO DISK FILE ; ;CLOSE IT LD C,CLOSEF LD DE,FCB CALL BDOS JP ALLDONE ; ERROR CALL PRINT ; ;RESTORE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER ;FROM MEMORY LD SP,HL ;MAKE IT THE CURRENT SP RET ;RETURN TO CP/M ; ;.................................................... ; ;SUBROUTINE - TAKING BYTE FROM OZROM MEMORY MAP (HOUR OR MINUTES ;OF CURRENT TIME), CONVERT IT FROM BINARY-CODED DECIMAL ;REPRESENTATION TO HEXIDECIMAL REPRESENTATION OF LEFT DIGIT IN A ;TWO DIGIT ASCII 'DECIMAL' DISPLAY, I.E. 45BCD -> 34H = 4 ASCII ; TRY0 CP 10H ;IS VALUE >= 10 ? JR NC,TRY1 LD B,'0' ;IF NOT RECODE AS ASCII '0' (30H) JP CONVRT ; TRY1 CP 20H ;IS VALUE >= 20 ? JR NC,TRY2 LD B,'1' ;IF NOT RECODE AS ASCII '1' (31H) JP CONVRT ; TRY2 CP 30H ;IS VALUE >= 30 ? JR NC,TRY3 LD B,'2' ;IF NOT RECODE AS ASCII '2' (32H) JP CONVRT ; TRY3 CP 40H ;IS VALUE >= 40 ? JR NC,TRY4 LD B,'3' ;IF NOT RECODE AS ASCII '3' (33H) JP CONVRT ; TRY4 CP 50H ;IS VALUE >= 50 ? JR NC,TRY5 LD B,'4' ;IF NOT RECODE AS ASCII '4' (34H) JP CONVRT ; TRY5 LD B,'5' ;OTHERWISE RECODE AS ASCII '5' ; ; = 35H CONVRT LD A,B ;SUBSTITUTE RECODED VALUE FOR RET ;ORIGINAL, AND RETURN ; ;SUBROUTINE - DISPLAY TIME DIGIT ON SCREEN DISTIME LD E,A ;LOAD VALUE IN E FOR BDOS CALL ; ;GO ON TO PCHAR ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRINTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - This is taken from pp. 199-200, ;Z80 ASSEMBLY LANGUAGE SUBROUTINES, by Lance Leventhal and ;Winthrop Saville, Osborne/McGraw-Hill, 1983 ; BLKMOV EX DE,HL PUSH HL AND A SBC HL,DE AND A SBC HL,BC POP HL EX DE,HL LDIR RET ; ;MESSAGES HEADER DB CR,LF,LF,1BH,29H DB 'Date -On- ',CR,LF DB '----------------- ---- ' DB 1BH,28H,'$' NEWLINE DB CR,LF,'$' NOFILE DB CR,LF,LF,'=== CANNOT FIND DATE FILE: DA ===' DB CR,LF,LF,'$' DAFIL DB 'DA ' ;NAME OF DATA FILE TO HOLD DATE LOGFIL DB 'LOGBOOK ' ;NAME OF DATA FILE TO HOLD TIME ON ; ;PROGRAM STORAGE OLDSP DS 2 ;MEMORY SPACE FOR OLD STACK POINTER DS 32 ;NEW STACK SPACE STKTOP: ;NEW STACK STARTS HERE END  PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRINTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - This is taken from p!9"Ø1ú lÍ ÊÍ!Í] í°\Í\ÍÑÕ· Ã-!€€Í_!€^ÍK#ù:fïÍ2€ÍJ:fïæÆ02�ÍJ:gïÍ2‚ÍJ:gïæÆ02ƒÍJ!„6 #û ÍK ÍK!€šÍ_>f2~ ~Í:·(X:!€€#=·(ÃÄ6 #û!¡6 #6 !Þ6 #6 !€ `Í_!€€€Í_!|Ñs\Í\ÍÃ*ØùÉþ00ÃHþ 01ÃHþ002ÃHþ@03ÃHþP04ÃH5xÉ_åÅÍÁáÉåÅ ÍÁáÉëå§íR§íBáëí°É )Date -On- Off- Notes ----------------- ---- ---- ---------------($ $LOGBOOK åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå******************************************* ; ; TIMEOFF.AZM ; ; This program is for keping a log of use ; of an Osborne 1 computer fitted with ; an OZROM. TIMEOFF.COM uses as its object ; file LOGBOOK which is created/updated by ; the complementary program TIMEON.COM. ; ; TIMEOFF ; a) reads in the current time in 4 digits ; (HHMM) from the OZROM clock ; b) accepts further notes from keyboard input ; (not to exceed column 65!) ; c) writes this information, i.e, time of ; logging OFF the computer and notes on ; the tasks worked on during the current ; session, to the most recent record in ; LOGBOOK. ; ; ROBERT E. DANIELS MARCH 16, 1986 ; 124 Windsor Circle ; Chapel Hill, NC 27514 ;......................................................... ; ;EQUATES ; LF EQU 0AH ;LINEFEED CR EQU 0DH ;CARRIAGE RETURN ZAP EQU 1AH ;END OF FILE CHARACTER = ^Z ;(USED AS FILLER IN "DA") BLNK EQU 20H ;CHARACTER FOR BLANK SPACE ; READS EQU 0AH ;READ CONSOLE BUFFER PRINTS EQU 9H ;PRINT STRING TO CONSOLE CONOUT EQU 2H ;CONSOLE OUTPUT ; OPENF EQU 0FH ;OPEN EXISTING FILE MAKEF EQU 16H ;START A NEW FILE CLOSEF EQU 10H ;CLOSE FILE ; READR EQU 14H ;READ SEQUENTIAL RECORD WRITER EQU 15H ;WRITE SEQUENTIAL RECORD ; BDOS EQU 5H ;BDOS ENTRY POINT FCB EQU 5CH ;FILE CONTROL BLOCK DMA EQU 80H ;DIRECT MEMORY ACCESS BUFFER ; TIME EQU 0EF66H ;ADDR OF OZROM CLOCK TIME VALUE DEST EQU 1080H ;ADDR TO STORE DATE AND TIME IN STRING DEST2 EQU 109AH ;ADDR TO STORE TIME OFF CLOCK READING DEST3 EQU 10A0H ;ADDR TO STORE NOTES STRING LEN EQU 14H ;LENGTH OF DATE STRING ENDL EQU 00A1H ;ADDR OF END OF ENTRY LINE IN DMA ENDR EQU 00DEH ;ADDR TWO BYTES BEFORE END OF DMA ; ;..................................................... ; ORG 100H ; ;SET UP LOCAL STACK LD HL,0 ;CLEAR HL ADD HL,SP ;ADD STACK POINTER TO HL LD (OLDSP),HL ;SAVE IT TO MEMORY LD SP,STKTOP ;SET UP NEW PROGRAM STACK ; ;PRINT HEADER LD C,PRINTS LD DE,HEADER CALL BDOS ; ;INSERT CR & LF LD C,PRINTS LD DE,NEWLINE CALL BDOS ; ;MOVE THE FILE NAME "LOGBOOK" INTO THE FCB LD HL,LOGFIL ;POINT TO FILENAME LD DE,FCB+1 ;POINT TO ADDR FOR FN IN FCB LD BC,11 ;NO. OF BYTES TO MOVE LDIR ;MOVE (HL) TO (DE) ;INC HL AND DE ;REPEAT UNTIL BC=0 ; ;OPEN LOGBOOK FILE LD C,OPENF LD DE,FCB CALL BDOS ; ; LD DE,0 ;RECORD COUNTER SET TO 0 ; PUSH DE ;SAVE IT ; READ2 LD C,READR LD DE,FCB CALL BDOS POP DE ;KEEP COUNT OF HOW INC E ;MANY RECORDS READ PUSH DE OR A ;WHEN EOF REACHED, READR FUNCTION JR NZ,SHIFT ;SETS A TO NON-ZERO. CHECK FOR IT JP READ2 ; ;PUT THE LOGON STRING IN HIGH MEMORY SHIFT LD HL,DMA ;SOURCE ADDRESS LD DE,DEST ;DESTINATION ADDRESS LD BC,26D ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;DISPLAY CURRENTLY STORED LOGON STRING FROM HIGH MEMORY LD HL,DEST ;GET STARTING ADDRESS OF HIGH MEM LD B,26D ;B IS BYTE-IN-RECORD COUNTER LOOP LD E,(HL) ;PUT FIRST/NEXT CHAR IN REG. E CALL PCHAR ;DISPLAY IT INC HL ;INCREMENT POINTER DJNZ LOOP ;DECREMENT BYTE-IN-RECORD COUNTER ;KEEP LOOPING UNTIL B = 0 ; ;AUTOMATIC TIME ENTRY FROM OZROM CLOCK ; ;HOUR ; - FIRST DIGIT LD A,(TIME) ;GET BYTE REPRESENTING HOUR CALL TRY0 ;GOTO CONVERSION SUBROUTINE LD (DMA),A ;PUT RECODED VALUE IN FIRST ;BYTE OF DMA CALL DISTIME ;DISPLAY IT ; ; - SECOND DIGIT LD A,(TIME) ;GET BYTE REPRESENTING HOUR AND 0FH ;MASK OUT HIGH NIBBLE ADD A,'0' ;ADD 30H TO GET ASCII NUMERAL LD (DMA+1),A ;PUT THIS VALUE IN SECOND BYTE ;OF DMA CALL DISTIME ;DISPLAY IT ; ;MINUTES ; - FIRST DIGIT LD A,(TIME+1) ;GET BYTE REPRESENTING MINUTES CALL TRY0 ;GOTO CONVERSION SUBROUTINE LD (DMA+2),A ;PUT THIS VALUE IN THIRD BYTE ;OF DMA CALL DISTIME ;DISPLAY IT ; ; - SECOND DIGIT LD A,(TIME+1) ;GET BYTE REPRESENTING MINUTES AND 0FH ;MA SK OUT HIGH NIBBLE ADD A,'0' ;ADD 30H TO GET ASCII NUMERAL LD (DMA+3),A ;PUT THIS VALUE IN FOURTH BYTE ;OF DMA CALL DISTIME ;DISPLAY IT ; ;INSERT TWO BLANKS LD BC,2 ;NO. OF BYTES LD HL,DMA+4 ;START AT FIFTH BYTE IN DMA TWOBL LD (HL),BLNK ;ENTER BLANK INC HL ;GET NEXT ADDRESS DJNZ TWOBL ;DO IT AGAIN LD E,BLNK ; CALL PCHAR ;DISPLAY BLANK ON SCREEN LD E,BLNK ; CALL PCHAR ;DISPLAY BLANK ON SCREEN ; ;MOVE TIME-OFF STRING TO END OF LOGON STRING LD HL,DMA ;SOURCE ADDRESS LD DE,DEST2 ;DESTINATION ADDRESS LD BC,6 ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;READ CHARACTERS INTO BUFFER FROM KEYBOARD - FOR "NOTES" ;(STRING BUFFER STARTS 2 BYTES ;BEFORE DMA TO LEAVE ROOM FOR ;MAXIMUM COUNT AND ACTUAL COUNT) LD A,102D ;SET MAX. NUM. OF CHARACTERS ;IN INPUT TO WHAT'S LEFT OF DMA LD (DMA-2),A ;PUT THIS AT START OF BUFFER LD C,READS ;CONSOLE BUFFER FUNCTION LD DE,DMA-2 ;LOAD STRING BUFFER ADDRESS CALL BDOS ;READ STRING INTO BUFFER ; ;CHECK IF BUFFER IS EMPTY - I.E. NO NOTES ADDED LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING OR A ;WAS IT 0? I.E. ONLY INPUT WAS CR JR Z,ALLDONE ;IF SO EXIT ; ;FILL THE REST OF THE RECORD WITH "BLANK" CHARACTER LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING LD HL,DMA ;GET STARTING ADDRESS OF DMA LD B,128D ;B IS BYTE-IN-RECORD COUNTER AGAIN INC HL ;GET ADDRESS OF NEXT BYTE DEC B ;DECREMENT BYTE-IN-RECORD COUNTER DEC A ;DECREMENT BYTES-USED COUNTER OR A ;HAVE WE COUNTED THEM ALL? JR Z,FILL ;IF SO GO TO FILL LOOP JP AGAIN ;IF NOT COUNT THE NEXT BYTE USED FILL LD (HL),BLNK ;PUT BLANK CHAR IN UNUSED BYTE INC HL ;GET ADDRESS OF NEXT BYTE DJNZ FILL ;KEEP FILLING TO END OF RECORD ;I.E. UNTIL EBYTE-IN-RECORD ;COUNTER = 0 ; ;INSERT CR & LF AT END OF NOTES FIELD ; THIS PRODUCES FIRST LINE IN LOGBOOK, 65 COLUMNS WIDE ; FOR DATA STORAGE: DATE, TIME-ON, TIME-OFF, NOTES ; LD HL,ENDL  ;ADDR OF END OF ENTRY LINE IN DMA LD (HL),CR ;INSERT CARRIAGE RETURN INC HL ;GO TO NEXT BYTE LD (HL),LF ;INSERT LINE FEED ; ;INSERT CR & LF AT END OF RECORD ; THIS PRODUCES SECOND LINE IN LOGBOOK, 65 COLUMNS WIDE ; NORMALLY LEFT BLANK, THUS MAKING A DOUBLE-SPACED TEXT ; LD HL,ENDR ;ADDR TWO BYTES BEFORE END OF DMA LD (HL),CR ;INSERT CARRIAGE RETURN INC HL ;GO TO NEXT BYTE LD (HL),LF ;INSERT LINE FEED ; ;MOVE NOTES STRING TO END OF TIME-OFF STRING LD HL,DMA ;SOURCE ADDRESS LD DE,DEST3 ;DESTINATION ADDRESS LD BC,96D ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;BRING IT ALL BACK TO DMA LD HL,DEST ;SOURCE ADDRESS LD DE,DMA ;DESTINATION ADDRESS LD BC,128D ;NUMBER OF BYTES TO MOVE CALL BLKMOV ;BLOCK MOVE SUBROUTINE ; ;WRITE RECORD TO DISK LD HL,7CH ;ADDR OF "CR BYTE" POP DE ;NO. OF RECORDS READ DEC E ;SUBTRACT ONE FROM RECORD COUNTER ;BECAUSE COMPUTER STARTS COUNT ;WITH 0 NOT 1 DEC E ;SUBTRACT ANOTHER TO GET BACK TO  ;RECORD CONTAINING MOST RECENT ;LOGON DATA RATHER THAN STARTING ;NEXT NEW RECORD LD (HL),E ;ENTER THIS LD C,WRITER LD DE,FCB ;WRITE CONTENTS OF FCB CALL BDOS ;TO DISK FILE ; ;CLOSE IT LD C,CLOSEF LD DE,FCB CALL BDOS JP ALLDONE ; ;RESTORE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER ;FROM MEMORY LD SP,HL ;MAKE IT THE CURRENT SP RET ;RETURN TO CP/M ; ;.................................................... ; ;SUBROUTINE - TAKING BYTE FROM OZROM MEMORY MAP (HOUR OR MINUTES ;OF CURRENT TIME), CONVERT IT FROM BINARY-CODED DECIMAL ;REPRESENTATION TO HEXIDECIMAL REPRESENTATION OF LEFT DIGIT IN A ;TWO DIGIT ASCII 'DECIMAL' DISPLAY, I.E. 45BCD -> 34H = 4 ASCII ; TRY0 CP 10H ;IS VALUE >= 10 ? JR NC,TRY1 LD B,'0' ;IF NOT RECODE AS ASCII '0' (30H) JP CONVRT ; TRY1 CP 20H ;IS VALUE >= 20 ? JR NC,TRY2 LD B,'1' ;IF NOT RECODE AS ASCII '1' (31H) JP CONVRT ; TRY2 CP 30H ;IS VALUE >= 30 ? JR NC,TRY3 LD B,'2' ;IF NOT RECODE AS ASCII '2' (32H) JP CONVRT ; TRY3 CP 40H ;IS VALUE >= 40 ? JR NC,TRY4 LD B,'3' ;IF NOT RECODE AS ASCII '3' (33H) JP CONVRT ; TRY4 CP 50H ;IS VALUE >= 50 ? JR NC,TRY5 LD B,'4' ;IF NOT RECODE AS ASCII '4' (34H) JP CONVRT ; TRY5 LD B,'5' ;OTHERWISE RECODE AS ASCII '5' ; ; = 35H CONVRT LD A,B ;SUBSTITUTE RECODED VALUE FOR RET ;ORIGINAL, AND RETURN ; ;SUBROUTINE - DISPLAY TIME DIGIT ON SCREEN DISTIME LD E,A ;LOAD VALUE IN E FOR BDOS CALL ; ;GO ON TO PCHAR ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRINTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - This is taken from pp. 199-200, ;Z80 ASSEMBLY LANGUAGE SUBROUTINES, by Lance Leventhal and ;Winthrop Saville, Osborne/McGraw-Hill, 1983 ; BLKMOV EX DE,HL PUSH HL AND A SBC HL,DE AND A SBC HL,B C POP HL EX DE,HL LDIR RET ; ;MESSAGES HEADER DB CR,LF,LF,1BH,29H DB 'Date -On- Off- Notes' DB CR,LF DB '----------------- ---- ---- ---------------' DB 1BH,28H,'$' NEWLINE DB CR,LF,'$' LOGFIL DB 'LOGBOOK ' ;NAME OF DATA FILE TO HOLD TIME ON ; ;PROGRAM STORAGE OLDSP DS 2 ;MEMORY SPACE FOR OLD STACK POINTER DS 32 ;NEW STACK SPACE STKTOP: ;NEW STACK STARTS HERE END  ; ;GO ON TO PCHAR ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRINTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - This is taken from pp. 199-200, ;Z80 ASSEMBLY LANGUAGE SUBROUTINES, by Lance Leventhal and ;Winthrop Saville, Osborne/McGraw-Hill, 1983 ; BLKMOV EX DE,HL PUSH HL AND A SBC HL,DE AND A SBC HL,B!9"¨1Ê )Í gÍ!’] í°\Íj<Ê\Í!€~þ > w#õ!€€Í\Í!�] í°\Í<†\ÍÕÛÕ\ÍÑÕ· Ê!€^Í#ù>2~ ~Í:·(I:!€€#=·(ÃÂ6 #û!€”Í!€€Í!|Ñs\Í\ÍÃÍ*¨ùÉåÅÍÁáÉåÅ ÍÁáÉëå§íR§íBáëí°É )Date -On- ----------------- ---- ($ $ === CANNOT FIND DATE FILE: DA === $DA LOGBOOK åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå************************************************* ; ; LOGON.AZM ; ; creates/updates a file called LOGBOOK ; by reading in the date from DA and ; accepting a 4 digit time (HHMM) indicating ; when I have logged on the computer ; ; ROBERT E. DANIELS MARCH 9, 1986 ;......................................................... ; ;EQUATES ; LF EQU 0AH ;LINEFEED CR EQU 0DH ;CARRIAGE RETURN ZAP EQU 1AH ;END OF FILE CHARACTER, ;USED AS FILLER = ^Z IN "DA" BLNK EQU 20H ;CHARACTER FOR BLANK SPACE READS EQU 0AH ;READ CONSOLE BUFFER PRINTS EQU 9H ;PRINT STRING TO CONSOLE CONOUT EQU 2H ;CONSOLE OUTPUT ; DEST EQU 1080H ;ADDR TO STORE DATE STRING DEST2 EQU 1094H ;ADDR TO STORE TIME IN STRING LEN EQU 14H ;LENGTH OF DATE STRING ; DELETF EQU 13H ;DELETE FILE OPENF EQU 0FH ;OPEN EXISTING FILE MAKEF EQU 16H ;START A NEW FILE CLOSEF EQU 10H ;CLOSE FILE ; READR EQU 14H ;READ SEQUENTIAL RECORD WRITER EQU 15H ;WRITE SEQUENTIAL RECORD ; FCB EQU 5CH ;FILE CONTROL BLOCK DMA EQU 80H ;DIRECT MEMORY ACCESS BUFFER ; BDOS EQU 5H ;BDOS ENTRY POINT ;..................................................... ; ORG 100H ; ;SET UP LOCAL STACK LD HL,0 ;CLEAR HL ADD HL,SP ;ADD STACK POINTER TO HL LD (OLDSP),HL ;SAVE IT TO MEMORY LD SP,STKTOP ;SET UP NEW PROGRAM STACK ; ;PRINT HEADER LD C,PRINTS LD DE,HEADER CALL BDOS ; ;INSERT CR & LF LD C,PRINTS LD DE,NEWLINE CALL BDOS ; ;MOVE THE FILE NAME "DA" INTO THE FCB LD HL,DAFIL ;POINT TO FILENAME LD DE,FCB+1 ;POINT TO ADDR FOR FN IN FCB LD BC,11 ;NO. OF BYTES TO MOVE LDIR ; ;TRY TO OPEN DATE FILE LD C,OPENF LD DE,FCB CALL BDOS LD DE,NOFILE ;ERROR MESSAGE INC A ;CHECK TO SEE FILE EXISTS JP Z,ERROR ;IF NOT GO TO "FIRST FILE" ; ;READ RECORD LD C,READR LD DE,FCB CALL BDOS ; ;CONVERT ZAPS IN "DA" TO BLANKS FOR "LOGBOOK" ;OTHERWISE "LOGBOOK" STOPS SHORT LD HL,DMA LD B,20D ;USE FIRST 20 BYTES IN "DA" CONV LD A,(HL) ;GET CHARACTER CP ZAP ;CHECK FOR EOF JR NZ,SKIP ;IF NOT, SKIP OVER NEXT LINE LD A,BLNK ;IF EOF, REPLACE WITH BLANK SKIP LD (HL),A ;PUT IT BACK IN STRING INC HL ;GET NEXT ADDRESS DJNZ CONV ;LOOP UNTIL B = 0 ; ;PUT THE DATE STRING IN HIGH MEMORY LD HL,DMA ;SOURCE ADDRESS LD DE,DEST ;DESTINATION ADDRESS LD BC,LEN ;NUMBER OF BYTES TO MOVE CALL BLKMOV ; ;CLOSE THE FILE SHUT LD C,CLOSEF LD DE,FCB CALL BDOS ; ;MOVE THE FILE NAME "LOGBOOK" INTO THE FCB LD HL,LOGFIL ;POINT TO FILENAME LD DE,FCB+1 ;POINT TO ADDR FOR FN IN FCB LD BC,11 LDIR ; ;OPEN LOGBOOK FILE LD C,OPENF LD DE,FCB CALL BDOS INC A ;IF NO FILE A -> 0 JP NZ,LETSGO ; LD C,MAKEF ;IF NO FILE, LD DE,FCB ;START ONE NOW CALL BDOS LD DE,0 ;RECORD COUNTER SET TO 0 PUSH DE ;SAVE IT JP DISP ; LETSGO LD DE,0 ;RECORD COUNTER START AT 0 PUSH DE ;SAVE IT READ2 LD C,READR LD DE,FCB CALL BDOS POP DE ;KEEP COUNT OF HOW INC E ;MANY RECORDS READ PUSH DE OR A ;WHEN EOF REACHE D, READR FUNCTION JR NZ,DISP ;SETS A TO NON-ZERO. CHECK FOR IT JP READ2 ; ;DISPLAY CURRENTLY STORED DATE FROM HIGH MEMORY DISP LD HL,DEST ;GET STARTING ADDRESS OF HIGH MEM LD B,14H ;B IS BYTE IN RECORD COUNTER LOOP LD E,(HL) ;PUT FIRST/NEXT CHAR IN REG. E CALL PCHAR ;OTHERWISE DISPLAY IT INC HL ;INCREMENT POINTER DJNZ LOOP ;DECREMENT BYTE COUNTER ; ;READ CHARACTERS INTO BUFFER FROM KEYBOARD ;(STRING BUFFER STARTS 2 BYTES ;BEFORE DMA TO LEAVE ROOM FOR ;MAXIMUM COUNT AND ACTUAL COUNT) SHOW LD A,4H ;SET MAX. NUM. OF CHARACTERS ;IN INPUT TO SCREEN WIDTH LD (DMA-2),A ;PUT THIS AT START OF BUFFER LD C,READS ;CONSOLE BUFFER FUNCTION LD DE,DMA-2 ;LOAD STRING BUFFER ADDRESS CALL BDOS ;READ STRING INTO BUFFER ; ;CHECK IF BUFFER IS EMPTY - I.E. NO CHANGE TO DATA FILE LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING OR A ;WAS IT 0? I.E. ONLY INPUT WAS CR JR Z,ALLDONE ;IF SO EXIT ; ;FILL THE REST OF THE RECORD WITH "BLANK" CHARACTER LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING LD HL,DMA ;GET STARTING ADDRESS OF DMA LD B,128D ;B IS BYTE IN RECORD COUNTER AGAIN INC HL ;GET ADDRESS OF NEXT BYTE DEC B ;DECREMENT BYTE IN RECORD COUNTER DEC A ;DECREMENT BYTES USED COUNTER OR A ;HAVE WE COUNTED THEM ALL? JR Z,FILL ;IF SO GO TO FILL LOOP JP AGAIN ;IF NOT COUNT THE NEXT BYTE USED FILL LD (HL),BLNK ;PUT BLANK CHAR IN UNUSED BYTE INC HL ;GET ADDRESS OF NEXT BYTE DJNZ FILL ;DECREMENT BYTE IN RECORD COUNTER ;KEEP FILLING TO END OF RECORD ; ;MOVE STRING TO END OF DATE STRING LD HL,DMA ;SOURCE ADDRESS LD DE,DEST2 ;DESTINATION ADDRESS LD BC,4 ;NUMBER OF BYTES TO MOVE CALL BLKMOV ; ;BRING IT BACK TO DMA LD HL,DEST ;SOURCE ADDRESS LD DE,DMA ;DESTINATION ADDRESS LD BC,24 ;NUMBER OF BYTES TO MOVE CALL BLKMOV ; ;WRITE RECORD TO DISK LD HL,7CH ;ADDR OF "CR BYTE" POP DE ;NO. OF RECORDS READ LD (HL),E ;ENTER THIS LD C,WRITER LD DE,FCB ;WRITE CONTENTS OF FCB CALL BDOS ;TO DISK FILE ; ;CLOSE IT LD C,CLOSEF LD DE,FCB CALL BDOS JP ALLDONE ; ERROR CALL PRINT ; ;RESTORE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER ;FROM MEMORY LD SP,HL ;MAKE IT THE CURRENT SP RET ;RETURN TO CP/M ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRINTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - PP 199-200, Z80 A.L. SUBROUTINES BLKMOV EX DE,HL PUSH HL AND A SBC HL,DE AND A SBC HL,BC POP HL EX DE,HL LDIR RET ; ;MESSAGES HEADER DB CR,LF,LF,1BH,29H DB 'Date -On- ',CR,LF DB '----------------- ---- ' DB 1BH,28H,'$' NEWLINE DB CR,LF,'$' NOFILE DB CR,LF,LF,'=== CANNOT FIND DATE FILE: DA ===' DB CR,LF,LF,'$' DAFIL DB 'DA ' ;NAME OF DATA FILE TO HOLD DATE LOGFIL DB 'LOGBOOK ' ;NAME OF DATA FILE TO HOLD TIME ON ; ;PROGRAM STORAGE OLDSP DS 2 ;MEMORY SPACE FOR OLD STACK POINTER DS 32 ;NEW STACK SPACE STKTOP: ;NEW STACK STARTS HERE END  SP,HL ;MAKE IT THE CURRENT SP RET ;RETURN TO CP/M ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRINTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - PP 199-200, Z80 A.L. SUBROUTINES BLKMOV EX DE,HL PUSH HL AND A SBC HL,DE AND A SBC HL,BC POP HL EX DE,HL LDIR RET ; ;MESSAGES HEADER DB CR,LF,LF,1BH,29H DB 'Date -On- ',CR,LF DB '----------------- ---- ' DB 1BH,28H,'$' NEWLINE DB CR,LF,'$' NOFILE DB CR,LF,LF,'=== CANNOT FIND DATE FILE: DA ===' DB CR,LF,LF,'$' DAFIL DB 'DA ' ;NAME OF DATA FILE TO!9"S1u çÍ EÍ!H] í°\Í\ÍÑÕ· Ã-!€€ÍÚ!€^ÍÆ#ù>l2~ ~Í:·(X:!€€#=·(Ãq6 #û!§6 #6 !ä6 #6 !€šfÍÚ!€€€ÍÚ!|Ñs\Í\ÍÃÁ*SùÉåÅÍÁáÉåÅ ÍÁáÉëå§íR§íBáëí°É )Date -On- Time Notes ----------------- ---- ---- ---------------($ $LOGBOOK åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå ************************************************* ; ; LOGOFF.AZM ; ; creates/updates a file called LOGBOOK ; by accepting a 4 digit time (HHMM) ; indicating when I have logged OFF the ; computer, CALCULATING THE ELAPSED TIME, ; and adding notes to LOGBOOK ; ; ROBERT E. DANIELS MARCH 10, 1986 ;......................................................... ; ;EQUATES ; LF EQU 0AH ;LINEFEED CR EQU 0DH ;CARRIAGE RETURN ZAP EQU 1AH ;END OF FILE CHARACTER, ;USED AS FILLER = ^Z IN "DA" BLNK EQU 20H ;CHARACTER FOR BLANK SPACE READS EQU 0AH ;READ CONSOLE BUFFER PRINTS EQU 9H ;PRINT STRING TO CONSOLE CONOUT EQU 2H ;CONSOLE OUTPUT ; DEST EQU 1080H ;ADDR TO STORE DATE STRING DEST2 EQU 109AH ;ADDR TO STORE TIME IN STRING LEN EQU 14H ;LENGTH OF DATE STRING ENDL EQU 00A7H ENDR EQU 00E4H ; DELETF EQU 13H ;DELETE FILE OPENF EQU 0FH ;OPEN EXISTING FILE MAKEF EQU 16H ;START A NEW FILE CLOSEF EQU 10H ;CLOSE FILE ; READR EQU 14H ;READ SEQUENTIAL RECORD WRITER EQU 15H ;WRITE SEQUENTIAL RECORD ; FCB EQU 5CH ;FILE CONTROL BLOCK DMA EQU 80H ;DIRECT MEMORY ACCESS BUFFER ; BDOS EQU 5H ;BDOS ENTRY POINT ;..................................................... ; ORG 100H ; ;SET UP LOCAL STACK LD HL,0 ;CLEAR HL ADD HL,SP ;ADD STACK POINTER TO HL LD (OLDSP),HL ;SAVE IT TO MEMORY LD SP,STKTOP ;SET UP NEW PROGRAM STACK ; ;PRINT HEADER LD C,PRINTS LD DE,HEADER CALL BDOS ; ;INSERT CR & LF LD C,PRINTS LD DE,NEWLINE CALL BDOS ; ;MOVE THE FILE NAME "LOGBOOK" INTO THE FCB LD HL,LOGFIL ;POINT TO FILENAME LD DE,FCB+1 ;POINT TO ADDR FOR FN IN FCB LD BC,11 LDIR ; ;OPEN LOGBOOK FILE LD C,OPENF LD DE,FCB CALL BDOS ; ; LD DE,0 ;RECORD COUNTER SET TO 0 ; PUSH DE ;SAVE IT ; READ2 LD C,READR LD DE,FCB CALL BDOS POP DE ;KEEP COUNT OF HOW INC E ;MANY RECORDS READ PUSH DE OR A ;WHEN EOF REACHED, READR FUNCTION JR NZ,SHIFT ;SETS A TO NON-ZERO. CHECK FOR IT JP READ2 ; ;PUT THE LOGON STRING IN HIGH MEMORY SHIFT LD HL,DMA ;SOURCE ADDRESS LD DE,DEST ;DESTINATION ADDRESS LD BC,26D ;NUMBER OF BYTES TO MOVE CALL BLKMOV ; ;DISPLAY CURRENTLY STORED LOGON STRING FROM HIGH MEMORY LD HL,DEST ;GET STARTING ADDRESS OF HIGH MEM LD B,26D ;B IS BYTE IN RECORD COUNTER LOOP LD E,(HL) ;PUT FIRST/NEXT CHAR IN REG. E CALL PCHAR ;OTHERWISE DISPLAY IT INC HL ;INCREMENT POINTER DJNZ LOOP ;DECREMENT BYTE COUNTER ; ;READ CHARACTERS INTO BUFFER FROM KEYBOARD ;(STRING BUFFER STARTS 2 BYTES ;BEFORE DMA TO LEAVE ROOM FOR ;MAXIMUM COUNT AND ACTUAL COUNT) LD A,108D ;SET MAX. NUM. OF CHARACTERS ;IN INPUT TO SCREEN WIDTH LD (DMA-2),A ;PUT THIS AT START OF BUFFER LD C,READS ;CONSOLE BUFFER FUNCTION LD DE,DMA-2 ;LOAD STRING BUFFER ADDRESS CALL BDOS ;READ STRING INTO BUFFER ; ;CHECK IF BUFFER IS EMPTY - I.E. NO CHANGE TO DATA FILE LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING OR A ;WAS IT 0? I.E. ONLY INPUT WAS CR JR Z,ALLDONE ;IF SO EXIT ; ;FILL THE REST OF THE RECORD WITH "BLANK" CHARACTER LD A,(DMA-1) ;GET NUMBER OF CHARACTERS ;IN THE INPUT STRING LD HL,DMA ;GET STARTING ADDRESS OF DMA LD B,128D ;B IS BYTE IN RECORD COUNTER AGAIN INC HL ;GET ADDRESS OF NEXT BYTE DEC B ;DECREMENT BYTE IN RECORD COUNTER DEC A ;DECREMENT BYTES USED COUNTER OR A ;HAVE WE COUNTED THEM ALL? JR Z,FILL ;IF SO GO TO FILL LOOP JP AGAIN ;IF NOT COUNT THE NEXT BYTE USED FILL LD (HL),BLNK ;PUT BLANK CHAR IN UNUSED BYTE INC HL ;GET ADDRESS OF NEXT BYTE DJNZ FILL ;DECREMENT BYTE IN RECORD COUNTER ;KEEP FILLING TO END OF RECORD ; ;INSERT CR & LF AT END OF NOTES FIELD LD HL,ENDL LD (HL),CR INC HL LD (HL),LF ; ;INSERT CR & LF AT END OF RECORD LD HL,ENDR LD (HL),CR INC HL LD (HL),LF ; ;MOVE STRING TO END OF DATE STRING LD HL,DMA ;SOURCE ADDRESS LD DE,DEST2 ;DESTINATION ADDRESS LD BC,102D ;NUMBER OF BYTES TO MOVE CALL BLKMOV ; ;BRING IT BACK TO DMA LD HL,DEST ;SOURCE ADDRESS LD DE,DMA ;DESTINATION ADDRESS LD BC,128D ;NUMBER OF BYTES TO MOVE CALL BLKMOV ; ;WRITE RECORD TO DISK LD HL,7CH ;ADDR OF "CR BYTE" POP DE ;NO. OF RECORDS READ DEC E ;SUBTRACT ONE FROM RECORD COUNTER ;BECAUSE COMPUTER STARTS COUNT ;WITH 0 NOT 1 DEC E ;SUBTRACT ANOTHER TO GET BACK TO ;RECORD CONTAINING MOST RECENT ;LOGON DATA RATHER THAN STARTING ;NEXT NEW RECORD LD (HL),E ;ENTER THIS LD C,WRITER LD DE,FCB ;WRITE CONTENTS OF FCB CALL BDOS ;TO DISK FILE ; ;CLOSE IT LD C,CLOSEF LD DE,FCB CALL BDOS JP ALLDONE ; ;RESTORE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER ;FROM MEMORY LD SP,HL ;MAKE IT THE CURRENT SP RET ;RETURN TO CP/M ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRI NTS CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - BLOCK MOVE - PP 199-200, Z80 A.L. SUBROUTINES BLKMOV EX DE,HL PUSH HL AND A SBC HL,DE AND A SBC HL,BC POP HL EX DE,HL LDIR RET ; ;MESSAGES HEADER DB CR,LF,LF,1BH,29H DB 'Date -On- Time Notes' DB CR,LF DB '----------------- ---- ---- ---------------' DB 1BH,28H,'$' NEWLINE DB CR,LF,'$' LOGFIL DB 'LOGBOOK ' ;NAME OF DATA FILE TO HOLD TIME ON ; ;PROGRAM STORAGE OLDSP DS 2 ;MEMORY SPACE FOR OLD STACK POINTER DS 32 ;NEW STACK SPACE STKTOP: ;NEW STACK STARTS HERE END RE OLD STACK AND RETURN TO CP/M ALLDONE LD HL,(OLDSP) ;GET OLD STACK POINTER ;FROM MEMORY LD SP,HL ;MAKE IT THE CURRENT SP RET ;RETURN TO CP/M ; ;SUBROUTINE - DISPLAY CHARACTER ON SCREEN PCHAR PUSH HL PUSH BC LD C,CONOUT CALL BDOS POP BC POP HL RET ; ;SUBROUTINE - DISPLAY A STRING ON SCREEN PRINT PUSH HL PUSH BC LD C,PRI*ùÍKÍžÃ+ŠžŠ³&Ã'Ã+ÃFÃŽÃrÃá^#V#å*~#foÉá^#å*~#foÉá^#V#å*nÉá^#å*nÉá^#V#åë ~#foÉá^#åë& ~#foÉ!È+É!È#É!Ø+É!Ø#É!ð+É!ø+ÉÈÉÈÉØÉØÉðÉøÉ}»À|ºÉëz¼À{½Éë|ºÀ}»Éë|ªòìz·ð7Éë|ªòó|·ð7ÉzõÍZëÍZëÍ)ñ·ð|/g}/o#É|µÈÕå͉ÑÍk|/g}/o#Ñɯ2qÍZëÍZÍk:qÐ|/g}/o#É|·ð/g}/o#:q<2qÉÅÍqÁÉDM!x±ÈxGyOÒƒë)ëÃv|µÈÅÍ”`iÁÉ|·ú )ÖëxõÍÝÚ·Õz/W{/_ѯzW{_ñ=ÈõyOxGæ¯2qÍZëÍZë͉ÃM|ºØÀ}»Éëȯ|g}oÃæëÈ)Ãô|/g}/o#Éz/W{/_É!9~#foÉ!à !à ! à ! à !à !à Ÿ!9Å~#ÂAÁÉá"s!`å*"³!è"µ!ÜY"—>Û2­>Ó2°>É2¯2²!Ì"�!"“!@"‘!"• ÍæÊžÍ!€ßF#x·Â±Ã~#±¯!ßb¯2r~#þ ÊÈ·Êþ"ÂÞ2rÃß+}|~#·ÊÅG:r·xÁÊþ"Âæ¯2r+w#þ Âæ+6#ÃÈÕ!×6#¯2w2x*sé!ÿÿÉ>õÍrÚ<o&åÍFáñ=þÂ-ÃÍ`Í ÍrÚ'~æÊhåÍÅÍëÍÁá6þÿ!À+ÉÍ`WÖØþ?ØÕ_!×~æ7ÑzÈ?ÉÍ`ÅÍ åþ:>ªÍÖ@w#ÍÆþ.¶ÍÆ66ÑÁÉÅþ*>?ÊéÍñÚçw#ÂÏÁÍñØÃÞ> w#ÂéÁÉÍþ.7Èþ:7Èþ7Èþ!ÉþaØþ{ÐÖ Éþ Ê þ Ê ÉÅÍ`·OÂE×!·æyÂ6ÁÉÕ$Ñ Â-7ÁÉÍrÚBÖo&))T])))ë!·yÁÉÕÅõå€ÍáñÁÑÉg!>ÕÍü3͹(>ÑÍü3>@2:;Ãu å*1;";áÆ.Í04:/;æþö2/;É";|·Â¶!}·Â§!=/Í04Éõñõ·Ê½!ª!ñ=0Í04Éñ>�GÈ>)Íü3ÃÂ!#Íá'͇&ñõÍÒ)ÍÞÍ*͹(Í 1þÊÊô!ÍÆ&,Í2ÑÉ#ÍÒ%Â"d/Í04ñÍb(õͨ&ÍÆ&ÍÒ)ñÍÞÍ*͹(Í}(É~þùÄÇ7#^#V#Í/"Í 1ÉÅåë)))S~õæþÄ+Ì2ñæ‡G~õæ`°24;ñæ29;#~æ23;~æ?>Êo"=2-;#^#V#Õ^#V#ë"5;ë^#Vë"7;Ñ:9;·Ê™"* ;ë!:4;æ@ʪ""7;áÁÉå*K;#w"K;áÉå*K;~þÿÊÆ"·ÂÑ"/+Í2Í5:áÉ+"K;áÉå*K;+"K;áÉå!>"K;6ÿ!/>"M;áÉå*K;~·áÈþÿÉåõ*3;ë*M;s#r#ë*5;ës#r#ë*7;ës#r#ë*/;ës#r#ë*1;ës#r#:9;w#"M;Í{#ñáÉåõ*>;ë*M;s#r#ë*@;ës#r#ë*B;ës#r#ë*:;ës#r#ë*<;ës#r#:D;w#"M;Í{#ñáÉ|þ?ØÂ†Ã¼ÃÓÃ$ÉÃÉÃ<Ã`ÃêÃþñÅ!åÍ¡Ñ*¯w#w*'6*(6!èÃêå!åͤÑÑ*6#6*�6*#sÕ*Ñs#rÕ*Ñs*%6Ík%&ÍùÒæÍk%}·ÊUÍk%}þÂrÍk%&å!åͧÑÑ*&6Ã{*&6*$6Ík$&2ÍùÒÛÍk&}·Ê¦!-åͪÑÍk%&2Í?åÍk$ѯgå*‘ÑåÍk&ëás*$4Ä*%4Ã0Ík'&#å*##ÑsÍk(å*###Ñs*%6Ík%åÍ\#ÑÍúÒ™ Ík%&å*ÑåÍk�ëásÍk(&åÍk'åÍk%ѯgWåͧÑÑÍk(&2Í?åÍk'ѯgåÍk%ѯgå*‘Ñ6!#åͪÑ*%4à Ík'åÍk%ѯgWå*ÑsÍk(å*Ñs*%6Ík%&ÍùÒŒ Ík%&å!åͧÑÑÍk%&2Í?å*‘Ñ6Ík%}·Ê Ík%}þÂ% !+åͪÑÃ- !|åͪÑÍk%&å!1åͧÑÑÍk%&#2Í?+å*‘Ñ6Ík%}·Ên Ík%}þÂy !+åͪÑÃ� !|åͪÑ*%4ÃË !å!åͧÑÑ!Ÿ é Snake 1.0å!åͤÑÑ!å!åͧÑÑ!Æ ÃÏ Length: å!åͤÑÑ!å!"åͧÑÑ!ì Ãô Score: å!åͤÑÑ!å!åͧÑÑ! à by Lewis Beanå!åͤÑÑ!å!åͧÑÑÍMå!B ÃV Highest Score: %05då!åͤÑÑÑ*%6Ík%&ÍùÒ­ Ík%&å*ÑåÍk%&å*Ñsás*%4Ãj *%6Ík%&ÍùÒ Ík%&å*Ñn}·Êþ Ík%&å*Ñ5n}·Âþ *#6*%4ö Ík#}·Âš Ík�&ÍùÒ) !Ã3 !nëÍËå*Ñs#rÍMnÍëÒš !åÍ­Ñ|µÊ] Ú ͰëÍå*!Ñs#rÍM!|µÂ‰ *#6Ú *^#Vr+sÃ? !åÍ­Ñ|µÊ! !åÍ­Ñ>8½Â» >¼Êî >2½ÂÇ >¼Êú >4½ÂÓ >¼Ê >6½Âß >¼Ê >½Âë >¼Ê Ã! *�6Ã! *�6Ã! *�6Ã! *�6Ã! ÇÍk#}þÂúÍk&ÍùÒú* 6Ík }·ÊF* 6Ͱ+ëÍå*'ÑsÍk'&#å*'ÑsͰëÍå*(ÑsÍk(&#å*(ÑsÍk'å*%ÑsÍk%åÍk'&ÑÍúÒCÍk(å*$ÑsÍk$åÍk(&##ÑÍúÒ8* ånåÍk$&2Í?åÍk%ѯgå*‘ÑnѯgW|²g}³oëás*$4ÃÜ *%4ó ÃE *%6Ík%&ÍùÒ„Ík%&å*Ñn}·ÂyÄ*%4ÃOÍk%&å*ÑåÍk'ëásÍk%&å*ÑåÍk(ëásÍk%&å*ÑåͰëÍ#Í?ëásͰ ëÍ#å*!Ñs#rÍk'å*%ÑsÍk%åÍk'&ÑÍúÒ‹Ík(å*$ÑsÍk$åÍk(&##ÑÍúÒ€Ík$&2Í?åÍk%ѯgå*‘ÑåÍM! Í?ëás*$4Ã-*%4ÃÍk(&åÍk'&åͧÑÑ!¦ì=====å!åͤÑÑÍk(&#åÍk'&åͧÑÑÍM!dÍ?å!ÞÃä=%3d=å!åͤÑÑÑ*4ÃÀÍk#}þÂÀÍk}·ÊÀ*$6*%6Ík%&ÍùÒÀÍk%&å*Ñn}·ÊµÍk%&å*Ñn}·ÂµÍk%&å*Ñnå*(ÑsÍk%&å*Ñnå*'ÑsÍk%&åÍk(&åÍk'&åͳÑÑÑ*%4Ã!*#6Íwå*'ÑsÍwå*(ÑsÍk�&åͶÑÍk(&2Í?åÍk'ѯgå*‘Ñnå*%ÑsÍk%}·ÊÍÍk(&åÍk'&åͧÑÑ!.åͪÑÍk%}þÂRÃ/Í\ÇÍÒ€*å~#foåÍk%& Í?Ñëás#r*å~#foåÍk%& Í?Ñëás#r!å!)åͧÑÑÍMå!ºÿ%05då!åͤÑÑÑÍk(&2Í?åÍk'ѯgå*‘ÑnåÍk%Ñ}»Â*(5ÃÊ*(4Ík(&2Í?åÍk'ѯgå*‘ÑnåÍk%Ñ}»ÂD*'5à *'4*%6Ík%&ÍùÒ¯Ík%&å*ÑnåÍk'Ñ}»Â¤Ík%&å*ÑnåÍk(Ñ}»Â¤ï*%4ÃUÍk%&åÍk(&åÍk'&åͳÑÑÑ*&4n& ëÍ|µÂ!å͹Ñ!å!åͧÑÑÍ\#å!à %3då!åͤÑÑÑÃ,!å͹Ñ!å!2åͧÑÑí ÍMåÍMÑÍóÒRÍMå*Ñs#r*¯w#wÍMå!nÍ?ÑÍìÒ„*^#Vr+sÃ]ÃÐÁÉÃ�ÃÉÅ!9ùDM!åÍŒÑ!=åÍŒÑ! n¯g åÍŒÑ! n¯g åÍŒÑÁÉÃÏÃ<Å!9ùDM! n&å!åÍÌÑÑÁÉÃóÉÃ$Å!ÿÿ9ùDM! n&å*Ñå! n&å*Ñsás! n&å! n&åÍíÑÑ!>ÃD å!åÍðÑÑ! n&#å! n&åÍíÑÑ!jÃp å!åÍðÑÑ! në! s! nå! n&ÑÍúÒí! në`is`inå! n&##ÑÍúÒå`in&2Í?å! nѯgå*‘Ñ6`i4è! 4Ã…*5ë!9ùëÁÉÅ!9ùDM! n}þÊ#þÊ.þÊ9þÊDÃO*(5ÃO*(4ÃO*'5ÃO*'4ÃOÍk(}þÿÂf*(6ÃÍk(&ÍùÚ*(6Ík'}þÿ–*'61ïÍk'&2ÍùÚ¯*'6ÁÉÃÀÈÉÃÉÃþÅ!9ùDMÍ�+|µÂÕÃrÍ\å*å*åÍ´ÑÑÑÍwå*'ÑsÍwå*(ÑsÍk(&åÍk'&åÍ·ÑÑ! åͺÑÍk(&2Í?åÍk'ѯgå*‘Ñ6Íw&åͽÑÍk'å*##ÑsÍk(å*###ÑsÍ\åÍ�Ñå*Ñs#rÍ\å*ÑåÍk�ëásÍwå*'ÑsÍwå*(ÑsÍk�&åͽÑÍk(&åÍk'&åÍ·ÑÑ!#åͺÑÍk(&2Í?åÍk'ѯgå*‘Ñ6Ík'å*ÑsÍk(å*ÑsÁÉÃ-Ã[áÅ!yÿ9ùDM!� å`iåÍ'ÑÑÍ�‹å`iåÍ*ÑÑÃRë!‡9ùëÁÉÃjà õÃäÃGÅ!iÿ9ùDM!� ^#Vr+së~#foë! s#rÍ��ë!• s#r! ^#Vr+sënë`is{·Ê’`in}þ%Â|! ë!� s#r!“ 6#6!� s!� sÍ�n}þ-Âõ! ^#Vr+s!� 4Í�n&åÍaÑ}·Ê! åÍdÑÃ!ë!‘ s#r! ^#Vr+sënë`is{þ.Â]! åÍdÑë!“ s#r!� 4! ^#Vr+sënë`is`in&åÍgÑ}þDʉþUÊÅþXÊÎþOÊ×þCÊþSÊNÃfÍ�•~#fo|·òÅ!� ^#Vr+së6-Í�•åÍ�•~#foÍúëás#r!‘ ^#Vr+s! 6 ÃÝ! 6ÃÝ! 6!‘ å~#foå! n&å!• ^#Vr+së~#foå!� åÍ^ÑÑÑѯgÍúëás#rÃÆ!� ^#Vr+sÕ!• ^#Vr+së~#foëás!‘ ^#Vr+sÃÆ!� n}·Âa!“ 6È#6!• ^#Vr+së~#foë! s#rÍ�n}·ÊÆÍ�“|µÊÆ!� ^#Vr+sÕ! ^#Vr+sënëás!“ ^#Vr+s!‘ ^#Vr+sÃ|Í��6! ë!� s#r!� n}·Â !‘ ^#Vr+s!ÍÒ !› ^#Vr+së6 ÃâÍ�›å!� ^#Vr+sënëás{·Ê2!› ^#Vr+sà !� n}·Êc!‘ ^#Vr+s!ÍÒc!› ^#Vr+së6 Ã<Ãy!› ^#Vr+sÕ`inëásÃ�!› ^#Vr+sÕ`inëásÙÍ�›6ë!—9ùëÁÉçÃÅ!ÿÿ9ùDM! ^#Vr+sënë`is{·Êü`in}þ ÂÝÍ�å! åͤÑÑÍ�å`in&åͤÑÑ#|µÂù!ÿÿÃï!Ãë!9ùëÁÉÃà Å!ÿÿ9ùDMÍ�åÍ� ÑÍìÒaÍ�^#Vr+sÕÍ� ÍëÒNÍ�0ÃVÍ�7ëás!&ìÍ� åÍ�åÍ� Ñ͉åÍ�åÍÑÑÑë`isÍ� åÍ�åÍ� ÑÍ)åÍ�åÍÑÑÑ`in&#&ìë!9ùëÁÉÅ!9ùDM! n&0ÍùͯÚà! n&9ÍͯÁÉÁÉÃêõÅ!þÿ9ùDM`i¯w#wÍ�~#fon&åÍçÑ}·Ê7Í� Í?åÍ�^#Vr+sënѯgÐÿë`is#rÃøÍ�Ã>ë!9ùëÁÉÃMäÅ!9ùDM! n&åÍJÑ|µÊt! n&àÿÃy! n&ÁÉÁÉËÃÙÃÃ"Å!9ùDMÍ�+|µÂ«! n&åÍ‚ÑÁÉÍ�++|µÂÉ! n&å!åÍ…ÑÑÁÉÍ�+++|µÂè! n&å!åÍ…ÑÑÁÉ! ~#fo##^#Vr+sz³Ê!! ~#fo^#Vr+sÕ! nëásë&ÁÉ!å! ~#foå! ~#fo~#foå͈ÑÑÑÍåÊS!ÿÿÁÉ! ~#fo##6ÿ#6! ~#foå! ~#foëás#r! ~#fo^#Vr+sÕ! nëásë&ÁÉÁÉÅ!9ùDM! n&aÍùͯÚÏ! n&zÍͯÁÉÁÉÍ |µÊâ"—"™ÉÅ Í!½½å Íá###æÊî"—"™ Í ÍÍÁÉWait a few seconds, and type a CR: $Í7Å*+++:ŸG‡€_å*¡DM![ãéo&ÁÉ*—ë>H£Ênên7*™|g}o"™zg{o"—|ægÉÍ7*£|µÈÅDM*¡ë*ŸÍÓÚ·><ê«í°ÁÉ~# x±Â«ÁÉ ë ë><êÇí¸ÁÉ~+ x±ÂÇÁÉ|ºÀ}»ÉÍ Åþ Âó Í ÍÃ÷_Í ÍæÂÁÉÍþÊÁÉÍ7Å:ŸO*¡ëÍo`ÁÉÍ7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u€Í*£|µ*uʈ*¡€€~#Â_"¡*sëÍ·*uˆ#"u*£+"£ÃLÁÉ£n&åÍçÑ}·Ê7Í� Í?åÍ�^#Vr+sënѯgÐÿë`is#rÃøÍ�Ã>ë!9ùëÁÉÃMäÅ!9ùDM! n&åÍJÑ|µÊt! n&àÿÃy! n&ÁÉÁÉËÃÙÃÃ"Å!9ùDMÍ�+|µÂ«! n&åÍ‚ÑÁÉÍ�++|µÂÉ! n&å!åÍ…ÑÑÁÉÍ�+++|µÂè! n&å!åÍ…ÑÑÁÉ! ~#fo##^#Vr+sz³Ê!! OSNAKE.DOC OSNAKE is a graphic assembly program for the Osborne 1 computer, which was put in the public domain as SNAKE on Capital Osborne Users Group disk OUG.021. It was written by Lewis Bean, who wants this game to get the widest distribution possible. However, he has not permitted the release of the source code. The object of the game is to have the snake eat as many points as possible without touching the border or "snaking back" on itself! That ends the game and a baby snake starts you immediately on a new one. The score of each game is displayed in the upper right corner - the highest score for a session is maintained in the lower right hand corner of the border. To control the movement of the snake, use the 2,4,6 and 8 keys as arrow keys. The ESC key will get you back to CP/M. Have fun! Gerhard Barth December 1983Ãv4Copyright (C) 1983 BORLAND Inc Osborne 1= ()TQRPœ<~·7È#õå~ÍÕáñ=ÈóÍø ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€ÜcÔ|æîÅÕåÝåÍ£}Ýå!Ûå!Õ" áãõÅÕ~#·(åÍÕáôÑÁñãÉ}´È:8‡‡‡ããããÅÒÁ= ô+èÍ¥Ø*ŠßõÅÕå!vÍ-!pÍ¥*|ÔáÑÁñÉõÅÕå!˜éõÅÕå!’àõ:�·(ÅÕå=2�!„Í-áÑÁñÉõ:�· ÷ÅÕå<2�!~åõÅÕå!ŒÛõÅÕååð!Yí°Ñ:jO:l‚ÕÍÓÑ:kO:mƒÍÓ!ðÍ¥*nÍáÑÁñÉ!ð ë!i45(É!+/ –0ü†õyþ0(ñíÉ d!9Ã-!IÃ-Í[æÍ[o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íçþ ÍçþÊrÁÑ*é"ÛÕx2áy·( >Ã28!ì"9!œ í°!´¸í°áí°>2Ú¯Ãßà ÃÃ0Ã&Ã+Ã!Ã0Ãÿ í[Ûþ (ú!eÍPÍWþA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍLÍ)þ. Í)!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(ÍWw#ßÉ>?> w#üÉþaØþ{ÐÖ É|Íe}õÍnñæÆ�'Î@'ý¯7Ë|À|·}È>ÿÉ"ÍíCßëÑùü "Ïë"Õéå*Ï·íB"Ïí[Í·íRëáÚöí°É*Ïí°"ÏÙÉ^#V#Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍM¶wÝéÝáÑ}“8÷�Ã"·íR·íB0 É>‘î·íRëêðøÉÕë·íRëáë·íR!È+ÉÍk õÍ= ð·íR!À+ÉÍk õÍ= ðÍÿ!Ð+ÉÍk õÍ= ðÍÿ!ÈØ+ÉÍk ôÍ= ïÍÿ!ÈØ#ÉÍk ôÍ= ïÍÿ!Ø+ÉÍk õÍ= ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍ ëÍ ëDM¯go>íjíB0 7?ËË= ðëñðHåÍË<ËÑëÍ¡ëËzÈ5ÍîÈ)ýÉÍîÈË<ËúÉëz· {þ0G·É¯goÉë|ª|ú ºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ÍoèÍodÍo Ío} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~ÍWÖ08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>Ã$ÝáÍyWáÍj _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ã$Í™ Ð>Ã"Í õÍ8Í# íÙ}·Ù>(èÍ� àÙËxÙ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍ ,= ù(Ùñæ€ Í 0%Í ·, 7 ÍR ?õ(8ÙÍ8 Ëx Í - öÍþ ñ8˸·ÙáÑÁÙÉÙËxÙ  Í Í  Ø,-Èxî€GÉÙ}·ÙÊþ }·ÈÙ…ÙÍÙ ÅÕåÝ9Íþ Ù.Ù>Ý#ÝnË0Í Í = ñÙ-Ù åÝnûËx Í ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ìþ É}·ÈÙ•Ù?ÍÙ åååÝ9Ù.Ù>ÍR 8Í8 ?Ë= ÝuÝ+Ù-Ù(>Í 0ßÍ8 ·áÍ 8ÍR ?áÑÁËx Í š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨òu xÉËx(Í È?É}Ù½ÙÀ·ÈÃR }Ö�Úþ <þ(ÐÙÅÕåÍþ 7Í = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGà ÙÅÕåÙÍ8Ù͉ ÙÍ ë}·ÈËx>Â"Í8}Æ€Ë/Æ€oÖõÙÅÕåÍ� Í™ -ÅÕåÍ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍ-Í ÙÍ,Ù}þlØÅ˸Ík Á8 Í� ÍÀ Í# Ëx(Í™ Ù-ÙÍk õ8Í Ù-ÙÍk 8Ù,Í }þl8;Ùª*ªª!ªÍ# ÝåÝ!“ >ÍÀÝáÍ8Í# Í# ÅÕåÙÍ8--Ù-Í™ ÙáÑÁÙÍ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->Ê"ËxÂ"ÙÍ$Ù}.�•õÍ� ÙÍÙÍ ÅÕåÙ,Í™ ÙáÑÁÍ� ÝåÝ! >ÍÀÝá,ÙÍ.-ÙÍ™ ñÅÕåo&0%Í”Ù,Í# ÙáÑÁÍ™ }þgÚþ É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍ.Ù·Ëxõ˸Í� }þˆ0GÅÕå,Í\åË<Ë}áõÍ”,-(-ÙñáÑÁõÍ ÝåÝ!œ >ÍÕÝáñ0 õÙÍ$ÙÍ# ñ…o8 ñÈÙÍÃ� á>Ã"m.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍÙ¯Ëx(<˸õÍk 8ÙÍ� ñËÿõÙÏŽé!~JÙÍk 0ͺOÝ!Z>ÙÝÍÿÙÍk 8 = ìÙ ÝÙÙÍúËøÍ™ ÅÕåÍÿÍ# ÙÍÍ™ ÙáÑÁÍ� ÝåͺÝáÙÍúÍ™ ñ0 õÙÍ-Í ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!–>ÅÕåõÍ8Í# ñÍÕÙáÑÁÃ# õÙÍúõÙÅÕåÍúÍ™ ÙáÑÁÙÍ# ñ= éÙÍÙ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍ(Ëø-Í™ ·Ë}(ËxËø>�½8(Í ,óÍ `iÈÃ!É>’Ã"|µÊþ Ë|Í >�)=Ë|(úDMboÀ˸ÉÍyë8þ8ÍyÙËxÙ(’0¯þ 8> ÕÍ ÑËx(>-ÍqË{(aËy(ÍoÍe òz·(>.Íq (Ío ÷ú=Íe÷Ë{È>EÍq>+Ë|(|íDg>-Íq|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯Ã Å˸}ÙÖ€oŸgM͇|þÙ <ýwíDÍÌ}þ�0Í?ý5Ëø>„•.(Í Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%Í Ë%Í ëãÑãíZëáãíJDMáË%Í = ÈñÁýáÉýåá_~6þ5Øú(+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|Í Í „gãíZëáãíJDMá0Í ,7È}Æo˸ÉÍ˾ #øyîO!@9ùi&ÝéÍË ë¶¾ â#÷ÚÍ˶w#ùëùÝéÍË/¦w#øïÍ˦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍM¦!"9ù!(#Ýé>¯2æýá*ÛÍu¯á"âýå|·>"Êß:æ·( ÍE *â6#wÉÍÊ*â6#6 ë!\$í°É!uÅåí[Ûþ (úÍW–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍ­Íã*â#~þ ÍuÍã*â:æ·> >w###6ÀÕþ þ #6++pÉ>¯2æíSäÍìÍãÍu:Ù·À*â6###ww#w$w#wÖÿ:æ· åͳá##N#F*ä·íBÈ>�Ãßå¯w#w#í[äs#ráò>¯2æÍÍãÍuÍã*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍž*â ë:æ·( ÕÍÑñÅÍÁ<ÀxÃß*â6#ûÉ"â#~+þ 2ËN(>ÍQ:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍ^*â-¯w#wÕÿw#ͲÍ^À"â~æÈ·ÍÖÀ ëÍ<À@ýá*ÛÍu¯áýåÍÖÀåÍÊáåë!\ í°á åëÍÑ<Êm!\$í°É>Ãß>¯2æÍÖÀ*ß|µ>! ë*â \$í°\Í<(Ï!¼€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍ�È> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍûáÉÝáÝå"âËF( #~þÀ#6Ã$>Îå!ÊÍáÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍçwþ (=þ(&þ("þ(þ :á·(ßÃûþ 8Øyº(Ô~#ͽÌú7+Íø (½ï6Éå*â#~þáÉÍ�ÈÍþÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íçõþ 8ͽþ ̶ñJ= ÍçB== ͯ}8= ͵}/Íl !*â###å~Æ-_~áþ(4ò6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍ‹Íþ ( þ (þ (þ Í•è!]Íþ (þ (þ (þ(w#(Í•ãÍ�Ì•6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7ÃßëÍ� ÍÕÍ•É>¯OÅÍ*ÁÍ{ÈÅåÍ„ÑÁÍ�ØÌës #rëÉÍ*Í{ÈÅåÍ/ÙáÁÍ�ØÙÌ ÙÃdåÍ‹Íþ Í•ôÍþ (þ( #w(Í•êÍ�Ì•áqÉ*â#~þʶÍþ (þÈÍ•ñÍ� Í•þ ÀÕ*â##~þÈ6ÉÅÕåÍ[áÑÁÉOÍã*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í`È>ðÃß*æ:è¾È4^qÉ}ÃQÁÑÅÝ*ÛË|(ÍëëË|( ÍÝ6-Ý#ÕÍSáÍyí[ÛÝåá·íRë“8 (G> ÍQùCÈ~ÍQ#÷ÁÑÙáÑÁÙÅÝ*ÛÕͳÇÁÑÅÍyËC!' Ç!+ÀTRUEFALSEÍy!9^#ÍçÑùÕÉá~#·(G~ÍQ#ùé> ÍQ> ÃQ "âËF!È͸(þÀ#ÉåÍë·íRá0ͳ*â4À#4É>™ÃßåÍ·íR *â4 #4(áͲÒ>òÜ>¯2çÍãë*âËV(/Ë–:ç·(#~+· x· y·úñÅÕ!ÍtÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍKí â<ò =<ÍK*â###æw ÅÕåÍ^áÑÁ Õ*Ñ4 #4x±Â»ëÉ>™>ðÃßõ:ç·(ëñÉ"âÍ^Èè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍÑ·íR8A*â N#F#s#rÍã 0}æ)ëíjëS\*â###w* N#Fë·íB ÈÕåÍ^Ñár+sÉ>‘ÃßÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍ·íR!À#ÉÍëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æʲx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>ÃßÁÑíSâÅåÍÑ·íRÚÞ*â s#r$ s#rÉëáãå*Íå"Íí[Ï·íRÑá0s#rÉ>ÿÃ"í[Íñ^#VíSÍÉ!9í[Ï·íR8ëí[Í·íRÉ>¯O"æ¯w2Ùx2è!—"âá"äá ͵Íÿ*äé>¯2ê"æ!—"âá"äá"è!\Íu¯*è:ê· Í­ÍÑ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%Ù}ÍWoÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍø^C User break1:Ù·ÈÝáõÍø I/OÝáÍø Run-timeÍø error ÍeÍø, PC=Ýåáí[Õ·íR"×Í`Íø Program aborted*ßé1!ÓϸÿÍ`!";nÏÍ…À:ýáá"²Ïá"´Ïýå!ë*´Ïs#r!ë*²Ïs#r!å! ÑÍøz³ÊÕ"¬Ï!ðå!)))))))Ñå!å*¬ÏÑ͇å!Ñë·íR+Ñn&å!ÑÍËEÊ*´Ï^#Vëå!Ñë*´Ïs#r*¬Ï#Ñÿ!å!ÑÍøz³Ê}Õ"¬Ï!ðå!)))))))Ñå!å*¬ÏÑ͇+Ñn&å!ÑÍËEÊt*²Ï^#Vëå!Ñë*²Ïs#r*¬Ï#ÑÃ(É!¥Ïå!£ÏåÍ”!}2«Ï*£Ïå!ÑÍrå*¥Ïå!ÑÍ7Ñ}£oËEÊÇ!}2ÃÏ!4"ÈÏ!}2«ÏÃ%*¥Ïå!ÑÍrå*£Ïå!ÑÍ7Ñ}£oËEÊþ!}2ÃÏ!"ÈÏ!}2«ÏÃ%*¥Ïå!ÑÍrå*£Ïå!ÑÍrÑ}£oËEÊ%!}2«Ï*«Ï&É!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå!€ëás!ðå!)))))))Ñå!+Ñå!€ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!€ëás!ðå!)))))))Ñå!+Ñå!€ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëásÉÍ6!2"ºÏ! "¶Ï*ÂÏ&ËEÊu#!å!ÍÌÍÍ@(Translated into Pascal by Charles HansenÍ!å!ÍÌÍÍ@#from the program by Peter H. KelleyÍ!å! ÍÌÍÍ@)in The Portable Companion(April/May,1983)Í!å! ÍÌÍÍ@Do you want directions(Y/N): Í!ËÏÍêÍšÍ*ËÏ&ÍÕå!YÑÍËEÊu#Í6!å!ÍÌÍÍ@$Ducks will fly back and forth acrossÍ!å!ÍÌÍÍ@&the screen at random heights. You canÍ!å!ÍÌÍÍ@*fire at the ducks by pressing number keys.Í!å! ÍÌÍÍ@'1 fires almost horizontally to the leftÍ!å! ÍÌÍÍ@'and 5 fires vertically. 9 fires almostÍ!å!ÍÌÍÍ@*horizontally to the right. Greater anglesÍ!å!ÍÌÍÍ@score more points.Í!å!ÍÌÍÍ@Press RETURN to continue.Í!ËÏÍêÍšÍÍ6!å! ÍÌÍÍ@ Enter a number to set DUCK speedÍ! å! ÍÌÍÍ@1 is slow - 5 is fastÍ! å!ÍÌÍÍ@***** Speed: Í!šÏÍêͬÍ*šÏ&åÍ!å!Í.ÍÛåÍâå!ÑÍÑ}£oËEÊM$!*å!å*šÏ&Ñ͇Ñë·íR"¸ÏÃS$!"¸ÏÍ6!å!ÍÌÍ+!å! ÑÍøz³Ê¯$Õ"¼Ï!ðå!)))))))Ñå!å*¼ÏÑ͇å!Ñë·íR+Ñå!ëás*¼Ï#ÑÃn$!å! ÑÍøz³Êû$Õ"¼Ï!ðå!)))))))Ñå!å*¼ÏÑ͇å!Ñë·íR+Ñå! ëás*¼Ï#Ñú$!å!ÑÍøz³Ê>%Õ"¼Ï!ðå!)))))))Ñå!å*¼ÏÑ͇+Ñå!ëás*¼Ï#ÑÃ%!å!ÑÍøz³Ê�%Õ"¼Ï!ðå!)))))))Ñå!å*¼ÏÑ͇+Ñå! ëás*¼Ï#ÑÃI%!å!4ÑÍøz³Ê¼%Õ"¼Ï!ðå!)))))))Ñå*¼Ï+Ñå!–ëás*¼Ï#ÑÃŒ%!}2ÊÏ!}2ÅÏ!d"ÌÏ!"ÈÏ!"¾Ï!}2ÄÏ!}2ÃÏ!}2ÁÏ!ÍÈ"ÆÏÉ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå! +Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!!+Ñå!ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå! +Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå! +Ñå!–ëás!ðå!)))))))Ñå!"+Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå!ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!!+Ñå!–ëás!ðå!)))))))Ñå!#+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå! +Ñå! ëás!ðå!)))))))Ñå!"+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!"+Ñå!–ëás!ðå!)))))))Ñå!$+Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!!+Ñå! ëás!ðå!)))))))Ñå!#+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå! +Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!"+Ñå! ëás!ðå!)))))))Ñå!#+Ñå!–ëás!ðå!)))))))Ñå!$+Ñå! ëás!ðå!)))))))Ñå!%+Ñå!ëás*ºÏÍ!ðå!)))))))Ñå! +Ñå! ëás!ðå!)))))))Ñå! +Ñå!ëás!ðå!)))))))Ñå!+Ñå! ëás!ðå!)))))))Ñå!+Ñå!–ëás!ðå!)))))))Ñå!#+Ñå! ëás!ðå!)))))))Ñå!#+Ñå!–ëás!ðå!)))))))Ñå!%+Ñå! ëás!ðå!)))))))Ñå!&+Ñå!ëás*ºÏÍ!ðå!)))))))Ñå! +Ñå!ëás!ðå!)))))))Ñå! +Ñå! ëás!ðå!)))))))Ñå!&+Ñå! ëás!ðå!)))))))Ñå!'+Ñå! ëás*ºÏÍ!ðå!)))))))Ñå! +Ñå!ëás!ðå!)))))))Ñå! +Ñå! ëás!ðå!)))))))Ñå!'+Ñå! ëás!ðå!)))))))Ñå!'+Ñå! ëásÉýáá}2”Ïá}2•Ïýå*•Ï&å!Ñ}2•Ï!}2�Ï*¶ÏÍ!ðå*•Ï&)))))))Ñå*”Ï&+Ñå! ëás*•Ï&å!Ñ}2•Ï!ðå*•Ï&)))))))Ñå*”Ï&+Ñå! ëás*•Ï&å!ÑÍËEÊg4*”Ï&å!ÑÍËEÊ>4Íû%!}2ÁÏ!}2ÄÏ!}2�ÏÃg4!ðå*•Ï&)))))))Ñå*”Ï&+Ñå! ëás!}2�Ï*�Ï&ËEʦ3Éýáá}2ŽÏýå!}2ƒÏ!}2‚Ï*ŽÏ&å*ÊÏ&ÑÍËEʯ4*ÅÏ&å!Ñ}2ÅÏÿ4!}2ÅÏ*ŽÏ&}2ÊÏ*ÅÏ&å!ÑÍJËEÊþ6*ÌÏå!Ñë·íR"ÌÏ!å!ÍÌÍ! ͱ*ÌÏå!͵Í@ SHOTS REMAINING Í!å*ŽÏ&Ñ͇å!Ñë·íR"„Ï!"†Ï!"ˆÏ*¶ÏÍ!ðå*†Ï)))))))Ñå*ˆÏ+Ñå! ëás*†Ïå!Ñë·íR"†Ï!å*„Ïå!å*†ÏÑë·íRÑ͇å! ÑÍ¡Ñ"ˆÏ*†Ïå!ÿÿÑÍ^å*ˆÏå!ÑÍ^Ñ}£oå*ˆÏå!5ÑÍrÑ}£oËEÊã5!ðå*†Ï)))))))Ñå*ˆÏ+Ñå!*ëásÃê5!}2‚Ï*†Ïå*ÆÏÑÍËEÊÅ6*ˆÏå*ÈÏÑÍËEÊÅ6*¾Ïå*ŽÏ&å!Ñë·íRÍ å! Ñ͇Ñå! Ñ"¾Ï!#å!ÍÌÍÍ@ SCORE: *¾Ïå!͵! ͱÍ!}2ƒÏ!ðå*†Ï)))))))Ñå*ˆÏ+Ñå! ëás!}2ÄÏ*ÃÏ&ËEÊ�6!4"ÈÏã6!"ÈÏÍ!ͱÍ*ÃÏ&}îo}2ÃÏ!ÍÈ"ÆÏ*ƒÏ&å*‚Ï&Ñ}³oËEÊ:5*‚Ï&å*ÆÏå!ÑÍrÑ}£oËEÊþ6*ÆÏå*ÈÏåÍ‚3É!"|Ï*¸ÏÍ!ðå*ÆÏ)))))))Ñå*ÈÏ+Ñå! ëás*ÃÏ&å*ÈÏå!4ÑÍ7Ñ}£oå*ÃÏ&}îoå*ÈÏå!ÑÍJÑ}£oÑ}³oËEÊ„7Í+!}2ÄÏ!ÍÈ"ÆÏ*ÃÏ&}îo}2ÃÏÃ78*ÃÏ&ËEÊ»7*ÈÏå!Ñ"ÈÏ!ðå*ÆÏ)))))))Ñå*ÈÏ+Ñå!ëásÃè7*ÈÏå!Ñë·íR"ÈÏ!ðå*ÆÏ)))))))Ñå*ÈÏ+Ñå! ëásÍ ËEÊ78!åÑÍÛo&å!0Ñë·íR"|Ï*|ÏåÍ!å! Í.ÍÛå*ÌÏå!ÑÍ^Ñ}£oËEÊ78*|ÏåÍr4É!}2wÏ*¸ÏÍ*ÈÏå!ÑÍËEÊ«8*ÆÏå!ÑÍËEÊr8Íû%!}2ÁÏè8!ÍÈ"ÆÏ*ÃÏ&ËEÊŽ8!4"ÈÏÔ8!"ÈÏ*ÃÏ&}îo}2ÃÏ!}2wÏî8Íÿ6*ÁÏ&å*wÏ&Ñ}³oËEÊ?8É!pÏå!nÏåÍ”!å! ÍÌ*¾Ïå!ÑÍ^ËEÊ´9ÍÍ@YOU HAD *pÏå*nÏÑå!͵Í@ TREES REMAINING WORTH ÍÍ*pÏå*nÏÑå!Ñ͇å!͵Í@ POINTSÍ!å!ÍÌÍÍ@***** YOUR TOTAL SCORE WAS *¾Ïå!å*pÏå*nÏÑÑ͇Ñå!͵Í@ *****Í!å!ÍÌÃú9ÍÍ@/***** SCORE ZERO - YOU BOMBED OUT !!! *****ÍOÍ!å!ÍÌ!}2ÂÏ!¸ ÍÍ6!å! ÍÌÍÍ@ *** PLAY ANOTHER GAME ??(Y/N): Í!rÏÍêÍšÍ*rÏ&å!YÑÍå*rÏ&å!yÑÍÑ}³oËEÊx:!}2ÎÏÃ:!}2ÎÏÉ*¥á&}2ÀÏ!}2¥áÍåä!}2ÂÏÍ” *ÌÏå!ÑÍ^å*ÁÏ&}îoÑ}£oËEÊ;!}2ÄÏ*ÆÏå!ÑÍ7ËEÊì:Í~ËEÊæ:!ÍÈ"ÆÏÃé:Í88Ã;*ÄÏ&}îoËEÊ;Íÿ6Ãì:Ã�:ÍÃ8*ÎÏ&ËEÊš:*ÀÏ&}2¥áÍåäÍ6ÃrÑÍ^å*ÁÏ&}îoÑ}£oËEÊ—k!}2ÄÏ*ÆÏå!ÑÍ7ËEÊRlÍ~ËEÊRl!ÍÈ"ÆÏÃØ:Í88ÃÐ:*ÄÏ&}îoËEÊ—kÍÿ6Ãì:ÏÃ78*ÃÏ&ËEÊ»7*ÈÏå!Ñ"ÈÏ!ðå*ÆÏ)))))))Ñå*ÈÏ+Ñå!ëásÃè7*ÈÏå!Ñë·íR"ÈÏ!ðå*ÆÏ)))))))Ñå*ÈÏ+Ñå! ëásÍ ËEÊ78!åÑÍÛo&å!0Ñë·íR"|Ï*|ÏåÍ!å! Í.ÍÛå*ÌÏå!ÑÍ^Ñ}£oËEÊ78*|ÏåÍr4É!}2wÏ*¸ÏÍ*ÈÏå!ÑÍËEÊ«8*ÆÏå!ÑÍËEÊr8Íû%!}2ÁÏè8!ÍÈ"ÆÏ*ÃÏ&ËEÊŽ8!4"ÈÏÔ8!"ÈÏ*ÃÏ&}îo}2ÃÏ!}2wÏî8Íÿ6*ÁÏ&å*wÏ&Ñ}³oËEÊ?8É!pÏå!nÏåÍ”!å! ÍÌ*¾Ïå!ÑÍ^ËEÊ´9ÍÍ@YOU HAD *pÏå*nÏÑ PROGRAM DUCK; CONST MAX_SHOTS = 4; (* MAXIMUM SHOTS IN ONE DIRECTION *) VAR SCREEN : ARRAY[0..31,1..128] OF CHAR ABSOLUTE $0F000; ALL_DONE : BOOLEAN; (* ALL DONE PLAYING *) B_COUNT : INTEGER; (* REMAINING SHOTS *) CONCHAR : CHAR; (* Y OR N FOR DIRECTIONS *) CUR_DIR : BYTE; (* CURRENT DIRECTION *) DUCK_COL : INTEGER; (* CURRENT DUCK COLUMN *) DUCK_ROW : INTEGER; (* CURRENT DUCK ROW *) DIR_CTR : BYTE; (* NUMBER OF SHOTS IN CURRENT DIRECTION *) DUCK_DONE : BOOLEAN; (* DONE WITH CURRENT DUCK *) FWD : BOOLEAN; (* DUCK MOVING FORWARD *) FIRST : BOOLEAN; (* FIRST GAME *) GAME_END : BOOLEAN; (* END OF GAME *) OLD_WIDTH : BYTE; (* 0=52,3=80,1=104 *) POINTS : INTEGER; (* CURRENT SCORE *) I : INTEGER; (* LOOP INDEX *) TIME1 : INTEGER; (* FOR EXPLOSION *) TIME2 : INTEGER; (* FOR DUCKS *) TIME3 : INTEGER; (* FOR BOMBS AND BULLETS *) WIDTH : BYTE ABSOLUTE $E1A5; PROCEDURE TREECOUNT(VAR TREECOUNT_L,TREECOUNT_R : INTEGER); VAR I : INTEGER; BEGIN (* TREECOUNT *) TREECOUNT_L := 0; TREECOUNT_R := 0; (* COUNT TREES ON LEFT *) FOR I := 1 TO 11 DO IF SCREEN[21,2*I-1] = CHAR(0) THEN TREECOUNT_L := TREECOUNT_L + 1; (* COUNT TREES ON RIGHT *) FOR I := 15 TO 26 DO IF SCREEN[21,2*I] = CHAR(0) THEN TREECOUNT_R := TREECOUNT_R + 1; END; (* TREECOUNT *) FUNCTION TREES : BOOLEAN; VAR COUNT_L : INTEGER; COUNT_R : INTEGER; BEGIN (* TREES *) TREECOUNT(COUNT_L,COUNT_R); TREES := TRUE; (* IF TREECOUNT LOW SET DIRECTION OF DIVEBOMBER *) IF (COUNT_R < 6) AND (COUNT_L >=6) THEN BEGIN FWD := FALSE; DUCK_COL := 52; TREES := FALSE END ELSE IF (COUNT_L < 6) AND (COUNT_R >= 6) THEN BEGIN FWD := TRUE; DUCK_COL := 1; TREES := FALSE END ELSE IF (COUNT_L < 6) AND (COUNT_R < 6) THEN TREES := FALSE END; (* TREES *) PROCEDURE BLIND; BEGIN (* BLIND *) SCREEN[20,24] := CHAR(10); SCREEN[20,25] := CHAR(150); SCREEN[20,26] := CHAR(150); SCREEN[20,27] := CHAR(8); SCREEN[21,25] := CHAR(128); SCREEN[21,26] := CHAR(128); SCREEN[22,25] := CHAR(150); SCREEN[22,26] := CHAR(150); SCREEN[21,24] := CHAR(128); SCREEN[21,27] := CHAR(128); SCREEN[22,24] := CHAR(150); SCREEN[22,27] := CHAR(150); END; (* BLIND *) PROCEDURE INIT; VAR SPEED : BYTE; (* FOR DUCK SPEED *) BEGIN CLRSCR; TIME1 := 50; TIME3 := 10; IF FIRST THEN BEGIN GOTOXY(6,6); WRITE('Translated into Pascal by Charles Hansen'); GOTOXY(6,8); WRITE('from the program by Peter H. Kelley'); GOTOXY(6,10); WRITE('in The Portable Companion(April/May,1983)'); GOTOXY(6,12); WRITE('Do you want directions(Y/N): '); READ(CONCHAR); IF UPCASE(CONCHAR)='Y' THEN BEGIN CLRSCR; GOTOXY(1,4); WRITE('Ducks will fly back and forth across'); GOTOXY(1,6); WRITE('the screen at random heights. You can'); GOTOXY(1,8); WRITE('fire at the ducks by pressing number keys.'); GOTOXY(1,10); WRITE('1 fires almost horizontally to the left'); GOTOXY(1,12); WRITE('and 5 fires vertically. 9 fires almost'); GOTOXY(1,14); WRITE('horizontally to the right. Greater angles'); GOTOXY(1,16); WRITE('score more points.'); GOTOXY(1,19); WRITE('Press RETURN to continue.'); READ(CONCHAR) END END; (* IF FIRST GAME *) CLRSCR; GOTOXY(5,10); WRITE('Enter a number to set DUCK speed'); GOTOXY(9,12); WRITE('1 is slow - 5 is fast'); GOTOXY(11,14); WRITE('***** Speed: '); {$I-} READLN(SPEED); {$I+} IF (SPEED IN [1..5]) AND (IORESULT=0) THEN TIME2 := 42 - 6*SPEED ELSE TIME2 := 30; CLRSCR; (* CLEAR SCREEN *) GOTOXY(1,25); (* MOVE CURSOR OFF SCREEN *) BLIND; (* BUILD TREES *) FOR I := 1 TO 11 DO SCREEN[21,2*I-1] := CHAR(0); FOR I := 1 TO 11 DO SCREEN[22,2*I-1] := CHAR(11); FOR I := 15 TO 26 DO SCREEN[21,2*I] := CHAR(0); FOR I := 15 TO 26 DO SCREEN[22,2*I] := CHAR(11); FOR I := 1 TO 52 DO SCREEN[23,I] := CHAR(150); CUR_DIR := 5; DIR_CTR := 0; B_COUNT := 100; DUCK_COL := 1; POINTS := 0; DUCK_DONE := FALSE; FWD := TRUE; GAME_END := FALSE; DUCK_ROW := RANDOM(19) END; PROCEDURE EXPLOSION; BEGIN SCREEN[20,24] := CHAR(10); SCREEN[21,25] := CHAR(150); SCREEN[21,26] := CHAR(150); SCREEN[20,27] := CHAR(8); SCREEN[23,25] := CHAR(32); SCREEN[23,26] := CHAR(32); SCREEN[22,24] := CHAR(32); SCREEN[22,27] := CHAR(32); SCREEN[23,27] := CHAR(10); SCREEN[23,24] := CHAR(8); DELAY(TIME1); SCREEN[19,23] := CHAR(10); SCREEN[20,24] := CHAR(150); SCREEN[20,27] := CHAR(150); SCREEN[19,28] := CHAR(8); SCREEN[22,25] := CHAR(32); SCREEN[22,26] := CHAR(32); DELAY(TIME1); SCREEN[18,22] := CHAR(10); SCREEN[19,23] := CHAR(150); SCREEN[19,28] := CHAR(150); SCREEN[18,29] := CHAR(8); SCREEN[21,25] := CHAR(32); SCREEN[21,26] := CHAR(32); SCREEN[21,24] := CHAR(32); SCREEN[21,27] := CHAR(32); DELAY(TIME1); SCREEN[16,20] := CHAR(10); SCREEN[18,22] := CHAR(150); SCREEN[16,30] := CHAR(8); SCREEN[18,28] := CHAR(150); SCREEN[19,27] := CHAR(150); SCREEN[20,24] := CHAR(32); SCREEN[20,27] := CHAR(32); SCREEN[19,28] := CHAR(32); SCREEN[18,29] := CHAR(32); DELAY(TIME1); SCREEN[14,18] := CHAR(10); SCREEN[16,20] := CHAR(150); SCREEN[16,30] := CHAR(150); SCREEN[14,32] := CHAR(8); SCREEN[19,23] := CHAR(32); SCREEN[19,27] := CHAR(32); SCREEN[20,25] := CHAR(32); DELAY(TIME1); SCREEN[15,17] := CHAR(21); SCREEN[17,19] := CHAR(150); SCREEN[19,21] := CHAR(150); SCREEN[15,33] := CHAR(25); SCREEN[17,31] := CHAR(150); SCREEN[19,29] := CHAR(150); SCREEN[14,18] := CHAR(32); SCREEN[16,20] := CHAR(32); SCREEN[18,22] := CHAR(32); SCREEN[18,28] := CHAR(32); SCREEN[16,30] := CHAR(32); SCREEN[14,32] := CHAR(32); DELAY(TIME1); SCREEN[16,16] := CHAR(25); SCREEN[18,18] := CHAR(150); SCREEN[20,20] := CHAR(150); SCREEN[20,30] := CHAR(150); SCREEN[18,32] := CHAR(150); SCREEN[16,34] := CHAR(21); SCREEN[15,17] := CHAR(32); SCREEN[17,19] := CHAR(32); SCREEN[19,21] := CHAR(32); SCREEN[15,33] := CHAR(32); SCREEN[17,31] := CHAR(32); SCREEN[19,29] := CHAR(32); DELAY(TIME1); SCREEN[17,15] := CHAR(8); SCREEN[19,17] := CHAR(150); SCREEN[21,19] := CHAR(150); SCREEN[21,31] := CHAR(150); SCREEN[19,33] := CHAR(150); SCREEN[17,35] := CHAR(10); SCREEN[16,16] := CHAR(32); SCREEN[18,18] := CHAR(32); SCREEN[20,20] := CHAR(32); SCREEN[20,30] := CHAR(32); SCREEN[18,32] := CHAR(32); SCREEN[16,34] := CHAR(32); DELAY(TIME1); SCREEN[18,14] := CHAR(10); SCREEN[22,18] := CHAR(150); SCREEN[20,16] := CHAR(150); SCREEN[22,31] := CHAR(150); SCREEN[20,34] := CHAR(150); SCREEN[18,36] := CHAR(8); SCREEN[17,15] := CHAR(32); SCREEN[19,17] := CHAR(32); SCREEN[21,19] := CHAR(32); SCREEN[21,31] := CHAR(32); SCREEN[19,33] := CHAR(32); SCREEN[17,35] := CHAR(32); DELAY(TIME1); SCREEN[18,14] := CHAR(32); SCREEN[19,13] := CHAR(21); SCREEN[20,16] := CHAR(32); SCREEN[21,15] := CHAR(150); SCREEN[22,18] := CHAR(32); SCREEN[20,34] := CHAR(32); SCREEN[21,35] := CHAR(150); SCREEN[18,36] := CHAR(32); SCREEN[19,37] := CHAR(25); DELAY(TIME1); SCREEN[19,13] := CHAR(32); SCREEN[20,12] := CHAR(25); SCREEN[21,15] := CHAR(32); SCREEN[22,14] := CHAR(150); SCREEN[21,35] := CHAR(32); SCREEN[22,35] := CHAR(150); SCREEN[19,37] := CHAR(32); SCREEN[20,38] := CHAR(21); DELAY(TIME1); SCREEN[21,12] := CHAR(8); SCREEN[20,12] := CHAR(32); SCREEN[20,38] := CHAR(32); SCREEN[21,39] := CHAR(10); DELAY(TIME1); SCREEN[22,12] := CHAR(8); SCREEN[21,12] := CHAR(32); SCREEN[22,39] := CHAR(10); SCREEN[21,39] := CHAR(32); END; (* EXPLOSION *) PROCEDURE BOMB(B_ROW, B_COL : BYTE); VAR BDONE : BOOLEAN; (* DONE WITH THIS BOMB *) BEGIN (* BOMB *) B_ROW := B_ROW + 1; BDONE := FALSE; REPEAT (* UNTIL BOMB HITS *) DELAY(TIME3); SCREEN[B_ROW,B_COL] := CHAR(32); B_ROW := B_ROW + 1; SCREEN[B_ROW,B_COL] := CHAR(13); IF B_ROW = 22 THEN (* BOMB HIT *) IF B_COL = 26 THEN (* AMMO HIT *) BEGIN EXPLOSION; GAME_END := TRUE; DUCK_DONE := TRUE; BDONE := TRUE; END (* AMMO HIT *) ELSE (* TREE HIT *) BEGIN SCREEN[B_ROW,B_COL] := CHAR(32); BDONE := TRUE; END; (* TREE HIT *) UNTIL BDONE; END; (* BOMB *) PROCEDURE FIRE(DIR : BYTE); VAR BLT_COL : INTEGER; (* BULLET COLUMN *) BLT_ROW : INTEGER; (* BULLET COLUMN *) FACTOR : INTEGER; (* ADJUSTMENT FACTOR FOR COLUMN DIRECTION *) HIT : BOOLEAN; (* DUCK WAS HIT WHEN TRUE *) MISS : BOOLEAN; (* BECOMES TRUE IN TOP ROW *) BEGIN (* FIRE *) HIT := FALSE; MISS := FALSE; IF DIR = CUR_DIR THEN (* COUNT REPEAT SHOT *) DIR_CTR := DIR_CTR + 1 ELSE BEGIN (* NEW DIRECTION *) DIR_CTR := 1; CUR_DIR := DIR END; IF DIR_CTR <= MAX_SHOTS THEN BEGIN B_COUNT := B_COUNT - 1; GOTOXY(1,24); WRITE(' ',B_COUNT,' SHOTS REMAINING '); FACTOR := 6 * DIR - 30; BLT_ROW := 19; BLT_COL := 26; REPEAT (* UNTIL HIT OR MISS *) (* MOVE BULLET *) DELAY(TIME3); SCREEN[BLT_ROW,BLT_COL] := CHAR(32); BLT_ROW := BLT_ROW - 1; BLT_COL := 26 + FACTOR*(19-BLT_ROW) DIV 10; IF (BLT_ROW > -1) AND (BLT_COL > 0) AND (BLT_COL < 53) THEN SCREEN[BLT_ROW,BLT_COL] := '*' ELSE MISS := TRUE; (* CHECK FOR HIT *) IF BLT_ROW = DUCK_ROW THEN BEGIN IF BLT_COL = DUCK_COL THEN BEGIN  (* COUNT HIT - GET NEW DUCK *) POINTS := POINTS + ABS(DIR - 5)*10 + 10; GOTOXY(35,24); WRITE(' SCORE: ',POINTS,' '); HIT := TRUE; SCREEN[BLT_ROW,BLT_COL] := CHAR(32); DUCK_DONE := TRUE; IF FWD THEN DUCK_COL := 52 ELSE DUCK_COL := 1; WRITE(CHAR(7)); FWD := NOT FWD; DUCK_ROW := RANDOM(22) END (* IF BLT_COL *) END (* IF BLT_ROW *) UNTIL (HIT OR MISS); IF (MISS) AND (DUCK_ROW < 20) THEN BOMB(DUCK_ROW,DUCK_COL); END; (* IF DIR_CTR *) END; (* FIRE *) PROCEDURE MOVEDUCK; VAR DIR : INTEGER; (* DIRECTION FOR PROCEDURE FIRE *) BEGIN (* MOVEDUCK *) DIR := 0; DELAY(TIME2); SCREEN[DUCK_ROW,DUCK_COL] := CHAR(32); IF ((FWD) AND (DUCK_COL >= 52)) OR ((NOT FWD) AND (DUCK_COL <= 1)) THEN BEGIN (* NEW DUCK *) BLIND; DUCK_DONE := TRUE; DUCK_ROW := RANDOM(22); FWD := NOT FWD END ELSE BEGIN (* MOVE THE DUCK *) IF FWD THEN BEGIN DUCK_COL := DUCK_COL + 1; SCREEN[DUCK_ROW,DUCK_COL] := CHAR(8) END ELSE BEGIN DUCK_COL := DUCK_COL - 1; SCREEN[DUCK_ROW,DUCK_COL] := CHAR(10) END; IF KEYPRESSED THEN BEGIN DIR := BIOS(2) - INTEGER('0'); IF (DIR IN [1..9]) AND (B_COUNT > 0) THEN FIRE(DIR) END END(* ELSE - MOVEDUCK *) END; (* PROCEDURE MOVEDUCK *) PROCEDURE DBOMBER; VAR DB_DONE : BOOLEAN; (* DONE WITH DIVE BOMBER *) BEGIN (* DBOMBER *) DB_DONE := FALSE; REPEAT (* UNTIL END OF GAME OR END OF DIVEBOMBER *) DELAY(TIME2); IF DUCK_COL = 26 THEN BEGIN IF DUCK_ROW = 21 THEN BEGIN EXPLOSION; GAME_END := TRUE END (* IF DUCK_ROW *) ELSE BEGIN DUCK_ROW := RANDOM (21); IF FWD THEN DUCK_COL := 52 ELSE DUCK_COL := 1; FWD := NOT FWD; DB_DONE := TRUE END (* ELSE *) END (* IF DUCK_COL *) ELSE MOVEDUCK UNTIL GAME_END OR DB_DONE; END; (* DBOMBER *) PROCEDURE FINISH; VAR ACHAR : CHAR; COUNT_L : INTEGER; COUNT_R : INTEGER; BEGIN TREECOUNT(COUNT_L,COUNT_R); GOTOXY(3,12); IF POINTS > 0 THEN BEGIN WRITE('YOU HAD ',COUNT_L+COUNT_R,' TREES REMAINING WORTH '); WRITE((COUNT_L+COUNT_R)*5,' POINTS'); GOTOXY(4,14); WRITE('***** YOUR TOTAL SCORE WAS ',POINTS+5*(COUNT_L+COUNT_R),' *****'); GOTOXY(1,25) END (* IF POINTS *) ELSE BEGIN WRITELN('***** SCORE ZERO - YOU BOMBED OUT !!! *****'); GOTOXY(1,25) END; FIRST := FALSE; DELAY(3000); CLRSCR; GOTOXY(2,12); WRITE(' *** PLAY ANOTHER GAME ??(Y/N): '); READ(ACHAR); IF (ACHAR = 'Y') OR (ACHAR = 'y') THEN ALL_DONE := FALSE ELSE ALL_DONE := TRUE END; (* FINISH *) BEGIN (*DUCK*) (* CHANGE TO 52 COLUMNS - SAVING OLD WIDTH *) OLD_WIDTH := WIDTH; WIDTH := 0; INLINE ($CD/$E4E5); (* CALL BIOS AT THIS ADDRESS *) FIRST := TRUE; REPEAT INIT; WHILE (B_COUNT > 0) AND (NOT GAME_END) DO BEGIN DUCK_DONE := FALSE; (* IF DIVEBOMBER *) IF (DUCK_ROW >= 20) THEN BEGIN IF TREES THEN (* TREES OK *) DUCK_ROW := RANDOM(22) ELSE (* LOW ON TREES *) DBOMBER END (* IF DUCK_ROW *) ELSE (* NOT DIVE BOMBER *) WHILE NOT DUCK_DONE DO MOVEDUCK END;(* WHILE *) FINISH; UNTIL ALL_DONE; (* CHANGE TO OLD WIDTH *) WIDTH := OLD_WIDTH; INLINE ($CD/$E4E5); (* CALL BIOS AT THIS ADDRESS *) CLRSCR; END.OUT !!! *****'); GOTOXY(1,25) END; FIRST := FALSE; DELAY(3000); CLRSCR; GOTOXY(2,12); WRITE(' *** PLAY ANOTHER GAME ??(Y/N): '); READ(ACHAR); IF (ACHAR = 'Y') OR (ACHAR = 'y') THEN ALL_DONE := FALSE ELSE ALL_DONE := TRUE END; (* FINISH *) BEGIN (*DUCK*) (* CHANGE TO 52 COLUMNS - SAVING OLD WIDTH *) OLD_WIDTH := WIDTH; WIDTH := 0; INLINE ($CD/*ùÍKÍžÃ+Áž¥À5ÐÃ'Ã+ÃFÃŽÃrÃÃû Í– þ8Ê{ æÄ‚w#w#wÑÁÉÍÆÃÞá^#V#å*~#foÉá^#å*~#foÉá^#V#å*nÉá^#å*nÉá^#V#åë ~#foÉá^#åë& ~#foÉ!È+É!È#É!Ø+É!Ø#É!ð+É!ø+ÉÈÉÈÉØÉØÉðÉøÉ}»À|ºÉëz¼À{½Éë|ºÀ}»Éë|ªòìz·ð7Éë|ªòó|·ð7ÉzõÍZëÍZëÍ)ñ·ð|/g}/o#É|µÈÕå͉ÑÍk|/g}/o#Ñɯ2qÍZëÍZÍk:qÐ|/g}/o#É|·ð/g}/o#:q<2qÉÅÍqÁÉDM!x±ÈxGyOÒƒë)ëÃv|µÈÅÍ”`iÁÉ|·ú )ÖëxõÍÝÚ·Õz/W{/_ѯzW{_ñ=ÈõyOxGæ¯2qÍZëÍZë͉ÃM|ºØÀ}»Éëȯ|g}oÃæëÈ)Ãô|/g}/o#Éz/W{/_É!9~#foÉ!à !à ! à ! à !à !à Ÿ!9Å~#ÂAÁÉá"s!`å*"³!è"µ!ÜY"—>Û2­>Ó2°>É2¯2²!Ì"�!"“!@"‘!"• ÍæÊžÍ!€ßF#x·Â±Ã~#±¯!ßb¯2r~#þ ÊÈ·Êþ"ÂÞ2rÃß+}|~#·ÊÅG:r·xÁÊþ"Âæ¯2r+w#þ Âæ+6#ÃÈÕ!×6#¯2w2x*sé!ÿÿÉ>õÍrÚ<o&åÍFáñ=þÂ-ÃÍ`Í ÍrÚ'~æÊhåÍÅÍëÍÁá6þÿ!À+ÉÍ`WÖØþ?ØÕ_!×~æ7ÑzÈ?ÉÍ`ÅÍ åþ:>ªÍÖ@w#ÍGþ.¶ÍƯww#Ã?Åþ*>?ÊéÍñÚçw#ÂÇÁÍñØÃÞ> w#ÂéÁÉÍþ.7Èþ:7Èþ7Èþ!ÉþaØþ{ÐÖ Éþ Ê þ Ê ÉÅÍ`·OÂE×!·æyÂ6ÁÉÕ$Ñ Â-7ÁÉÍrÚBÖo&))T])))ë!·yÁÉÕÅõå€ÍáñÁÑÉ|²g}³oëás! å~#foîÿëás#rÃ!*Ê&#ÍkGÉå*Ê&Ñë! s#r! nå*ÊѯgWÍú+ë! s! ~5o}·ÊFÍ�n&|¢g}£o|µÊÍ�ån&€|²g}³oëás! ånå! nѯgWÍúëásÃFÍ�ån&|²g}³oëás! å~#foëás#rÃÎ*Ê&ÍkGÉå*Ê&+Ñë! s#r*Ê&+å! nѯgÍúë`is`i~5o}·ÊåÍ�n&|¢g}£o|µÊÅÍ�ån&€|²g}³oëás! ånå`inѯgWëásÃå! ^#Vr+sëån&|²g}³oëásÃ}*Ê&ÍkGÉå*Ê&#Ñë! s#r! nå*ÊѯgWÍú+ë`is`i~5o}·Ê†Í�n&|¢g}£o|µÊfÍ�ån&€|²g}³oëás! ånå`inѯgWÍúëásÆ! ^#Vr+sëån&|²g}³oëásÃ*Ê&+ÍkGÅ!êÿ9ùDM! ë! s#rÍ�þÿ|ÚK! ^#Vr+sÍ�~#fon}þ-ÂÍ�~#fo#n}þSÂÍ�~#fo##n}·Â!åÍ€4ÑÍ�~#foåÍÿ½åÍû½åÍnÑÑÑ#|µÂ8Í�~#foå!& å͸ÑÑ!ÿÿå;ÑÍ�~#foå;ÑÍûÃQÍs Í3‡! 6Íö±|µÂž;¡!å;Ñ*æÈ þ|Ò›! ~4o&@|¢g}£o|µÊ˜!åÍ!"ÑÛͶ!ÃWͶ!Ͳ}2ìÈ*ìÈ}þ !å!åͲÑÑÍX²!å! å!7 åÍf²ÑÑÑ! åÍÿ½åÍû½åÍ,ÑÑÑ|µÂ÷Í�²!å;Ñ!N åÍ3Ñà ͟"ÃQë!9ùëÁÉ(C) 1982, Dan SundayCan't find "%s" File to save game in: Try using a new diskette in drive B:Å!ÿÿ9ùDM![�"Á!åÃå![�å!uå!ÿÿå;ÑÑÑÑ>2íÈ>2îÈ!"ÐÅ"ÒÅ!"ÜÈ"ÚÈ {2âÈ{2áÈ {2äÈ{2ãÈ{2åÈë&"ÞÈ!Ð"æÈ{25É{23É{24É{22É{21É{20É{2>É{2<É{2;É{2:É{29É{27É{2=É{26É{2?É{2FÉ{2EÉ{2DÉ{2CÉ{2BÉ{2AÉ{2@É>2ÌÈ>2ÅÈ!ß "óÎ!û "õÎ! "÷Î!3 "ùÎ!O "ûÎ!k "ýÎ!‡ "ÿÎ>Å2Ê>2Ê>2Ê>2ÊÍ�²Í�²!£ å! å!åÍ«²ÑÑÑÍͲ!Á å!å!åÍ«²ÑÑÑ!é å!å!åÍ«²ÑÑÑ! å!å!åÍ«²ÑÑÑ!9 å!å!åÍ«²ÑÑÑ!` å!å! åÍ«²ÑÑÑ!‡ å!å! åÍ«²ÑÑÑ!Ÿ å!å! åÍ«²ÑÑÑ!ª å!å! åÍ«²ÑÑÑ!Á å!å!åÍ«²ÑÑÑÍÛ²!Õ å!å!åÍ«²ÑÑÑ!å! å!åÍ«²ÑÑÑ! å! å!åÍ«²ÑÑÑÍé²>2ÍÈ!?å!å!åÍ«²ÑÑÑ*ÍÈ}·Â» Íö±|µÂ¦ ;¡Ã˜ !Uå! å!ÍÈåÍ÷²ÑÑÑÃ� Í�²!Kå!å! åÍm"ÑÑÑÍäÍ¥ë!9ùëÁÉ?BKJHSWZLGECRONMFTVAYQIXUPD?000010031001100Z2110000040?123456789:;<=>?@ADMZakpz~~?1223334345547666367489==???89;=ADGJLMaAPQRSEVWAKafm~z?23457897=8J9AKCMOPD7QazZ~~BCDEFGHIJKLMANPOLFPKHQRSPWT!! USER SUPPORTED SOFTWARE !!Please give free copies of this programto your friends. This program may notbe sold for profit without permission ofthe author. If you use and enjoy thisprogram, please send a donation to theprogramming efforts of:Dan Sunday7272 Candleshine CourtColumbia, MD 21045What name will you use in this adventure ?Copyright (C) 1982, Dan Sunday.All Rights Reserved Worldwide.Type Name: You are entering the lost city !!!Å!xÿ9ùDM!åÍ��åÍç¾ÑÑë`is#rz³Â–!ÿÿÃ#Í�Œë! s#r!å! åÍ�åÍ+¿ÑÑÑ+|µÊ¿Ã! 6€! ë! s#r! ~5o}·ÊÍ�åÍ�ŽÑÍóÒðÃ! ^#Vr+sÕ! ^#Vr+sënëásÃÑâÍ�åÍ¡¿Ñ!Ã#ë!ˆ9ùëÁÉÅ!üÿ9ùDMÍ� n}·ÂD!ÿÿÃÍÍ� åͤ¿Ñë`is#rÍ�ë! s#rÍ�åÍ� ÑÍìÒ¾!åÍ�åÍ�åÍÌ¿ÑÑÑ+|µÊ©!ÖåÍ3ÑÍ�åÍ¡¿ÑÍ� å;Ñ!ÿÿÃÍ! å~#fo€ëás#rÃ_Í�åÍ¡¿Ñ!ÃÍë!9ùëÁÉDiskette FullÅ!þÿ9ùDM!†"0Í`i6`in&ðÿ|Ò`in&)))))0Ë6`i4Ãö!•å!£å!´å!Áå!Ïå!äå!ìå!÷å!åÍ¡ë!9ùë!å! å!å!å!(å!/å!;å!Få!åÍ¡ë!9ùë!Oå!Wå!bå!lå!vå!}å!‹å!–å!åÍ¡ë!9ùë!žå!«å!¯å!Áå!Òå!àå!ðå!ÿå!åÍ¡ë!9ùë!å!å!å!&å!,å!1å!8å!<å!åÍ¡ë!9ùë!Då!Uå!`å!kå!vå!‚å!‡å!�å!åÍ¡ë!9ùë!•å!8ÃGtrap detectionå!NÃXdexterityå!_Ãesleepå!lÃvpolymorphå!}Èdrain lifeå!�×healingå!žçstrikingå! åÍ¡ë!9ùë!¼ÃÃbeaconå!ÊÃÑbeaconå!ØÃàlanternå!çÃïlanternå!öÃflashlightå!Ãtorchå!Ãflareå!"Ã)candleå! åÍ¡ë!9ùë!>ÃKregenerationå!RÃ^aggravationå!eÃssee invisibleå!zÉslow digestionå!�Ûprotectionå!¢êstealthå!±ÿteleportationå!ÆÃÌpowerå! åÍ¡ë!9ùë!áÃïeternal lightå!öÃgenocide monsterå!Ãsustain powerå!#Ã2trap detectionå!9ÃKprevent confusionå!RÃarepel monsterså!hÃwpreserve skillå!~Ã�eternal darknesså! åÍ¡ë!9ùë`i6`in&òÿ|Òò! 6! n&øÿ|Òì`in&)))))2Íå! n&))ѯw#w! 4ö`i4â!øÃÿpurpleå!à blackå!Ãwhiteå! Ã'orangeå!.Ã4greenå!;Ã?redå!FÃKblueå!RÃYyellowå!åͧë!9ùë!nÃvancientå!}Äsealedå!‹Ôcrumpledå!›äofficialå!«ópapyruså!ºÃÃegyptianå!ÊÃÒmanillaå!ÙÃâdead seaå!åͧë!9ùë!÷Ãýglasså!à copperå!Ãteakå!Ã'mahogenyå!.Ã5bronzeå!<ÃBmapleå!IÃOsteelå!VÃZoakå! åͧë!9ùë!oÃwdiamondå!~Æemeraldå!�Ösapphireå!�æplatinumå!­òjadeå!¹þgoldå!ÅÃÌsilverå!ÓÃÝturquoiseå! åͧë!9ùë!òÃûcrescentå!Ãstar shapedå!Ãdiamondå!$Ã.snowflakeå!5Ã:ovalå!AÃGroundå!NÃ[heart shapedå!bÃnpear shapedå! åͧë!9ùëë!9ùëÁÉ \$+"%&}^|*=!@a monster pita nerve gas trapa space warpa hammer trapa poison needle trapa chutea tax trapquicksanda steaka pizzaa hamburgera sandwicha tacoa milkshakean eggrollan appleamnesiagain skillconfusionquicknesspoisonrestore powergain powerhealingremove cursemapstrengthen weaponstrengthen armorteleportationmagic detectiongold detectionidentityplate mailtungstenmagnesiumsteelironbronzetinleathertwo-handed swordlong swordbattle axewar hammershort swordmacehand axeclubenchantmentÅ!9ùDM! n&)))))2Í##åÍ�ëás#r! n&)))))2Í##åÍ�ëás#r! n&)))))2Í##åÍ� ëás#r! n&)))))2Í ##åÍ� ëás#r! n&)))))2Í##åÍ�ëás#r! n&)))))2Í##åÍ�ëás#r! n&)))))2Í##åÍ�ëás#r! n&)))))2Í##åÍ�ëás#rÁÉÅ!ôÿ9ùDM`i6! 6! 6! 6! 6! 6! 6! 6! 6! ~5o}·Ên;¡ë! s! n&|¢g}£oë! s! n&Íå|¢g}£oë! s! n&ë`inë! s! n&ë`iå! n&ë`inëás! n&ë`iå! nëásÃã! n&)))))2Íå`in&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ�ëás#r! n&)))))2Íå! n&))ÑåÍ� ëás#rë! 9ùëÁÉÅ!úÿ9ùDM0Ê`is#r! 6@! ~5o}·ÊòÍ�åÍ�#åÍ�###sásás`i^#Vå!ëár+sûÊ! s#r! 6! ~5o}·Ê ! ^#Vr+së6Ã>2Ê!åÍZ•Ñ>2,Ê>2Ê>28Ê;¡|¢g}£oë! s! n}29Ê>2:Ê! n&##}2;Ê! n&##}2àÈ>2*Ê>2Ê>2<Ê;¡|¢g}£oë! s! n}2=Ê>2>Ê! n&##}2?Ê>2+Ê>2)Ê>2Ê> 2@Ê>2AÊ>2Bʦ{2Ê{2CÊ>2 Ê>2Ê{2/Ê{2.Ê{2-Êë!9ùëÁÉÅÍé²Í�²ÍÍðž!åÍ"¢ÑÁÉÅÍ�²!å!å!åÍ«²ÑÑÑ!å! å!åÍ«²ÑÑÑ!#å!å!åÍ«²ÑÑÑ!)å! å!åÍ«²ÑÑÑ!0å!(å!åÍ«²ÑÑÑ!6å!.å!åÍ«²ÑÑÑÍͲ!=å!å!åÍ«²ÑÑÑ*ÐÅü|Ú©!ç"ÐÅ! å!å*ÐÅåÍU´ÑÑÑÍMÍáÍÍIÍÀ*åÈ&›ÿ|ÚÝ>d2åÈ! å!å*åÈ&å!0å!åÍRµÑÑÑÑÑÍÛ²!Då!å!åÍm"ÑÑÑÍé²Í¶!ÁÉGOLDARMORPOWERENERGYSKILLWISDOMLevel Å*ÚÈðØ|Ún*ÜÈ#"ÜÈ*ÚÈðØ"ÚÈÃN*ÜÈ|µÊÃ*ÜÈïØ|Úˆ!'"ÜÈ! å!å*ÜÈå!å!åÍRµÑÑÑÑÑ!0å!å*ÚÈå!å!åÍRµÑÑÑÑÑÃß! å!å*ÚÈå!å!åÍRµÑÑÑÑÑÁÉÅ*àÈ&›ÿ|Úõ>d2àÈ! å!å*àÈ&å! å!åÍRµÑÑÑÑÑÁÉÅ*áÈ&›ÿ|Ú)>d2áÈ! å!å*áÈ&å!å!åÍRµÑÑÑÑÑÁÉÅ*ãÈ&ü|Ú]>ç2ãÈ! å!å*ãÈ&å!å!åÍRµÑÑÑÑÑ!/å!"å!åÍt¶ÑÑÑ*äÈ&ü|Ú >ç2äÈ! å!å*äÈ&å!#å!åÍRµÑÑÑÑÑÁÉÅ!ûÿ9ùDM*Þȃ|Úã!}"ÞÈ! 6 à ! 6*ÞÈÍåë`is#rÍ�|µÊ ! 4`iå~#foÍåëás#rÃø! å!å*ÞÈå!(å!åÍRµÑÑÑÑÑ! nå*åÈÑ}»ÂI Ã{!! n&# Í?å;¡|¢g}£oÑë! s#r! nå*åÈѯgWÍÒß !„!åÍ3Ñ*äÈåÍ�ùÿÑÍúÒ© Í�}2äÈÃÅ *äÈå;¡|¢g}£oÑ}2äÈ*ãÈå*äÈ&ÍåÑ}2ãÈÃ&!!Ÿ!åÍ3Ñ*äÈåÍ�ÑÍúÒ!Í�}2äÈÃ&!*äÈå;¡|¢g}£oÑÍú}2äÈ! n}2åÈ*åÈ&›ÿ|ÚB!>d2åÈ! å!å*åÈ&å!0å!åÍRµÑÑÑÑÑ*ãÈå*äÈѯgWÍÒx!*äÈ}2ãÈÍIë!9ùëÁÉYou are wiser than before.Your wisdom decreases.Å*æÈ7ÿ|ÒÎ!!"åÍ!"ÑÃ"*æÈ þ|Òå!!"åÍ!"ÑÃ"*æÈü|Òü!!"åÍ!"ÑÃ"!åÍ!"ÑÁÉFAINTINGSTARVING HUNGRY Å!þÿ9ùDMÍ�|µÊ?"Í�ë`is#rÃH"!d"ë`is#rÍ�å!å!åÍ­¶ÑÑÑë!9ùëÁÉ Å!9ùDMÍ�å! n&å! n&åÍ«²ÑÑÑ!å!åͲÑÑÁÉÅ!øÿ9ùDM!åÍ3Ñ! s! s! s`is*ìÈ&åÍ'¸Ñ}2ìÈ*ìÈ}þ7Ê-#þ8Ê:#þ Ê:#þ9ÊA#þ4ÊN#þÊN#þ6ÊW#þ ÊW#þ1Ê`#þ2Êo#þ Êo#þ3Êx#þ5ʇ#þ\Ê�#þ/Ê�#þÊ%þÊ7%Ã=%`i6! 6ÃC%`i6ÃC%`i6! 6ÃC%! 6ÃC%! 6ÃC%! 6! 6ÃC%! 6ÃC%! 6! 6ÃC%Íe)͘*Ø(*êÈ&3ÍkÁå*ëÈ&Ñnë! s! n&@|¢g}£o|µÊà#! n&?|¢g}£o))0Ên}þÊë#!¡(åÍ3ÑØ(*ìÈ}þ\Â$*ÐÅü|µÂ $!º(åÍ3ÑØ(*ÐÅ#"ÐÅÃ?$*ÌÈ}·Ê4$*ÐÅ+"ÐÅ|µÂ1$!åÍ€4ÑÃ?$!Ø(åÍ3ÑØ(*ÒÅå*ÐÅÑÍúÒS$*ÐÅ"ÒÅÍ�²*ìÈ}þ\Â¥$!þ(å!å! åÍ«²ÑÑÑ! )å!å!åÍ«²ÑÑÑ!)å!å!åÍ«²ÑÑÑ!å!åͲÑÑÃè$! )å!å! åÍ«²ÑÑÑ!.)å!å! åÍ«²ÑÑÑ!1)å!å!åÍ«²ÑÑÑ!å!åͲÑÑÍ3‡>2îÈ{20É{22É{21ÉØ(!@)å!å!åÍ«²ÑÑÑͲåÍY¸Ñ§ÿ|µÂ,%!åÍ€4Ñ!åÍ3ÑØ(ÍûØ(Íp-Ø(*3É}·Ê´%;¡|¢g}£oë`is;¡|¢g}£oë! s;¡|¢g}£oë! s;¡|¢g}£oë! s`inå! nÑ}»Â´%! nå! nÑ}»Â´%ÃC%*êÈå! nѯgWå`inѯgÍú3ÍkÁå*ëÈå! nѯgWå! nѯgÍúÑë! s#rÍ�n&@|¢g}£o|µÂ'&Í�n&|¢g}£o|µÂ]'`in}·Ês&*êÈ&+3ÍkÁå*ëÈ&Ñnë! s!@|¢g}£o|µÂs&! n&|¢g}£o|µÂ]'! n}·ÊÁ&*êÈ&#3ÍkÁå*ëÈ&Ñnë! s!@|¢g}£o|µÂÁ&! n&|¢g}£o|µÂ]'! n}·Ê'*êÈ&3ÍkÁå*ëÈ&+Ñnë! s!@|¢g}£o|µÂ'! n&|¢g}£o|µÂ]'! n}·Ên'*êÈ&3ÍkÁå*ëÈ&#Ñnë! s!@|¢g}£o|µÂn'! n&|¢g}£o|µÊn'*3É}·Êk'ÃC%Ãn'Ø(Íe)|µÊ|'͘*Ø(Í�n&@|¢g}£o|µÂÈ'Í�n& |¢g}£o|µÊÈ'Í�n&|¢g}£oåÍç�Ñ*éÈ}2èÈ͘*Ø(*0É}·ÊÛ'!T)åÍ3ÑØ(*êÈå! nå`inѯgWÍúÑ}2êÈ*ëÈå! nå! nѯgWÍúÑ}2ëÈÍ�n&@|¢g}£o|µÂr(Í�n& |¢g}£o|µÂr(Í�n&|¢g}£o|µÊr(Í�6!c)å*ëÈ&å*êÈ&åÍm"ÑÑÑ!åÍ"¢ÑÍ�n&@|¢g}£o|µÊ’(͘a͘*Ø(ë!9ùëÁÉThere are no stairs hereYou can't go down any furtherYou can't go upstairs without the ARKYou are goingdownthe stairs....You are goingupthe stairs....Really QUIT (Y/N) ?You can't move Å*3É}·Êr)!3É5*4É}·Ê~)!4É5*6É}·ÊŠ)!6É5*5É}·Ê´)!5É5*5É&þÿ|Ú±)!Z*åÍ3Ñ!ÁÉÃå)*æÈ8ÿ|Òå);¡|¢g}£o|µÂå);¡|¢g}£o}25É*1É}·Ê*!1É5!d*åÍ3Ñ*éÈ}2èÈ!ÁÉ*2É}·Ê%*!2É5!*åÍ3Ñ*éÈ}2èÈ!ÁÉ*7É}·ÊS*!8É5n}·ÂS*Íùf;¡|¢g}£o}28É!ÁÉ!ÁÉÁÉYou faintYou are stuck in quicksandYou are stuck in the GelÅ!úÿ9ùDM*òÎ}·Ê¯*!òÎ5à +Íz›|µÊ +*ÐÅéÿ|Í©ÒÓ**ÐÅ6ÍúÃÖ*!}2òÎ*òÎå;¡|¢g}£oÑ}2òÎ*.É7ÿ|Ú +*òÎ&ìÿ}2òÎ*.É#".É*>É}·Â)+*èÈ}·Ê)+!èÈ5ÃH+*éÈ}2èÈ*ãÈå*äÈѯgWÍúÒH+!ãÈ4ÍI*-Ê}·Ê¹+*-Ê&))0Ê#n}þ¹+*-Ê&))0Ê###n}·Ê‰+*-Ê&))0Ê###5ù+! -åÍ3Ñ>2BÉ!åÍ"¢Ñ*-Ê&))0Ê#6>2@É!åÍ"¢Ñ*+Ê}·Ê2,*.É|¢g}£o|µÂ2,!Ê5n}·Â2,>ÿ2Ê* Ê&þÿ|Ú,!#-åÍ3Ñ!åÍ"¢Ñ! Ê5*Ê&++}2Ê!åÍ"¢Ñ*+Ê&))0Ê###å* ʯgü+ëás*4É&|¢g}£o|µÂU,Í2r|µÊU,!åÍ"¢Ñ*5É}·Â¤,*æÈ|µÂm,!åÍ€4Ñ*;É}·Ê†,*.É|¢g}£o|µÊ�,*æÈ+"æÈ*>É}·Ê¤,*æÈ|µÊ¤,*æÈ+"æÈ*æÈ8ÿ|µÂÇ,!<-åÍ3Ñ>25É*æÈ+"æÈÃÿ,*æÈ þ|µÂå,!P-åÍ3Ñ*æÈ+"æÈÃÿ,*æÈü|µÂü,!a-åÍ3ÑÃÿ,Ã-Ͷ!ë!9ùëÁÉYour amulet turns blackYour lamp becomes dimmerYou are FAINTING !!You are STARVINGYou are HUNGRYÅ!ýÿ9ùDM*ìÈ}þ?ÊÀ-þaÊÆ-þcÊÑ-þdÊÝ-þeÊé-þlÊõ-þnÊ.þpÊ .þrÊ,.þtÊ8.þuÊ>.þwÊJ.þzÊP.Ã\.Í�.Ãw.!îÈåÍ3ÑÃw.Í8=ë! sÃg.ÍXTë! sÃg.ÍVSë! sÃg.!å!å!)åÍÒ]ÑÑÑ!Hå!åÍ·ÑÑÍ4Ãw.Í?HÃw.Íhë! sÃg.ÍÃWë! sÃg.ÍÓDÃw.͘>ë! sÃg.Íi?Ãw.ÍÏIë! sÃg.!€.åÍ3ÑÃw.! n}·Êw.Íe)͘*ë!9ùëÁÉInvalid CommandÅ!Ñÿ9ùDM!ç/ë! s#r! 0ë! s#r! 0ë! s#r!0ë! s#r!J0ë! s#r!s0ë! s#r!ž0ë! s#r!É0ë! s#r!õ0ë! s#r!1ë! s#r!"1ë! s#r!H1ë! s#r!l1ë! s#r!�1ë! s#r!´1ë! s#r!Ú1ë! s#r!2ë!! s#r!&2ë!# s#r!K2ë!% s#r!o2ë!' s#r!“2ë!) s#r!·2ë!+ s#r!Ý2ë!- s#r`i6`in&éÿ|ÒÎ/`in&)ë! ~#foå!Kå`in&åÍ­¶ÑÑÑ`i4Ù/!Hå!åÍ·ÑÑÍ4ë!/9ùëÁÉ COMMAND AND SYMBOL SUMMARYA = Again (message)C = Carry Lamp \ = Go downstairsD = Drink / = Go upstairsE = Eat ^Q = Quit the gameL = List Pack ^S = Save the gameN = Name ^R = Refresh screenP = Put downR = Read SYMBOLST = Take off \ stairsU = Use Weapon $ goldW = Wear + trapZ = Zap Wand " food % potion NUMERIC KEYPAD & scroll(move in direction) ^ weapon } armor 7 8 9 * lamp \ | / | wand 4 - 5 - 6 = ring / | \ ! amulet 1 2 3 @ the ARKÅ!üÿ9ùDMÍ�|µÊ•3ÍÀ3Í�å!å!åÍ«²ÑÑÑÍX²!å!åͲÑÑÍ�åÍ‹¸Ñ#}2íÈ`i6ø#6*`i^#Vr+sz³Êb3ÃP3îÈ! s#r! ^#Vr+sÕ! ^#Vr+sënëás{·Ê’3Ãl3ê3!å!åͲÑÑÍX²>2íÈ!å!åͲÑÑë!9ùëÁÉÅ!ÿÿ9ùDM*íÈ}·Ê4! 4å!(å!åÍ­¶ÑÑÑͲë`is`in}þ Ê4`in}þ Ê4`in}þ0Ââ3ë!9ùëÁÉ-> MORE....Å!C4åÍZ4Ñ!å!åͲÑÑͲóÿ|µÊ>4Ã/4ÍWaÁÉPress RETURN when doneÅ!9ùDMÍÛ²Í�å!Tå!åÍ«²ÑÑÑÍX²Íé²ÁÉÅ!òÿ9ùDMÍ�²! n}þ«4!"ÚÈ"ÜÈ! 6ÃI5ñ4! 6! n}þ¿4Í ;Í�²ÍÍÛ²!::ë`is#r! n}þÂè4!d:ë`is#rà 5! n}þÂÿ4!:ë`is#rà 5! n&åÍ�<Ñå!ˆ:å! :åÍ�åÍȸÑÑÑÑÍ�åÍ�åÍ‹¸Ñ4ÍúÍåå!åÍ«²ÑÑÑÍé²Í�²!§:å!å! n&åÍ«²ÑÑÑ! ån&##ëás!²:å!å! n&åÍ«²ÑÑÑ!·:å!å! n&åÍ«²ÑÑÑ!¼:å!å! n&åÍ«²ÑÑÑ!Ã:å!å! n&åÍ«²ÑÑÑ!É:å!#å! n&åÍ«²ÑÑÑÍͲ! 4! 6 ! ~5o}·Ê/6! n&ÍkcÏ å! n&ÍkcÏs#rás#rÃë5cÏ! s#r3Ð! s#r!Ó:åÍ�åÍ�åÍnÑÑÑ! 6! 6! n&öÿ|Ò¯9! n&ÍkcÏ"aÏ*ÜÈå*aÏ~#foÑÍÚÉ6*ÜÈå*aÏ~#foÑÍåÂm8*ÚÈå*aÏ ~#foÑÍÒm8! 6 ! nå! nѯgWÍÒÕ7! n&+ÍkcÏë! s#r! n&ÍkcÏë! s#rÍ� ë! s#rÍ� ë! s#r! ^#Vr+sÕ! ^#Vr+sënëás{·ÊU7Ã/7Í�  åÍ�  ~#foëás#rÍ� åÍ� ~#foëás#rÍ� åÍ� nëásÍ� åÍ� ~#foëás#rÍ� åÍ� nëás! 5ÃÏ6*aÏë! s#rÍÈ! s#r! ^#Vr+sÕ! ^#Vr+sënëás{·Ê8Ãê7*aÏ å*ÚÈëás#r*aÏå*ÜÈëás#r*aÏå*åÈëás*aÏå*ÒÅëás#r*aÏå! nëás! 6!"ÚÈ"ÜÈ*aÏ ~#fo|µÂ�8*aÏ~#fo|µÂ�8ï9! 4*aÏå!å! n&åÍ«²ÑÑÑ*aÏ~#fo|µÊ9! å!å*aÏ~#foå! å! n&åÍJ·ÑÑÑÑÑ!0å!å*aÏ ~#foå!å! n&åÍJ·ÑÑÑÑÑÃ69! å!å*aÏ ~#foå!å! n&åÍJ·ÑÑÑÑÑ! å!å*aÏn&å!å! n&åÍJ·ÑÑÑÑÑ! å!å*aÏ~#foå!å! n&åÍJ·ÑÑÑÑÑ*aÏn&åÍ�<Ñå!#å! n&åÍ«²ÑÑÑ! 4Ãc6! n}·Ê÷9cÏ! s#r3Ð! s#r!ß:åÍ�åÍ�åÍ,ÑÑÑ#|µÂ÷9!ë:åÍ3Ñ! ;åÍ3ÑÍÛ²! ;å!å!åÍ«²ÑÑÑÍé²!å!åͲÑÑͲåÿ|µÊ+:Ã:Í�²Í¾ë!9ùëÁÉ You are a TOTAL WINNER !!!You QUITYou were KILLED by the %s%s !TOP SCORESNAMEGOLDWISDOMLEVELKILLED BYjourney.sssjourney.sssCan't save scoreboard. Sorry.Press ESC when done.Å!ÿÿ9ùDMÍ�²Í�²!æ;å! å!åÍ«²ÑÑÑÍͲ!<å!å! åÍ«²ÑÑÑ!+<å!å! åÍ«²ÑÑÑ!R<å!å! åÍ«²ÑÑÑ!f<å!å!åÍ«²ÑÑÑ*ÜÈ#"ÜÈÍÍÛ²!„<å!å!åÍ«²ÑÑÑÍé²!å!åͲÑÑ`i6Ͳóÿ|µÊÚ;`i~4o}·Â×;Í{·Ã¾;Í�²ë!9ùëÁÉ!!! You are a TOTAL WINNER !!!To reward your successful escape fromthe lost city with all your treasures,you win a bonus of: 10,000 pieces of gold.Press RETURN to continueÅ!þÿ9ùDM! n}þÊÂ<þÊÎ<þÊÚ<þÊæ<Ãòå!h>å!eåͽPÑÑÑë`is#rÍ�#|µÂh=!ÃA>Í�Ênë! s! n&))0Ênë! s*+Ê}·Ê¼=*+Ê&))0Ê###å*Ê&ü|¢g}£oå* Êѯg+ëás! n}2+Ê*+Ê&))0Ê###n}2Ê!åÍ"¢Ñ*Ê&|¢g}£o#}2 Ê* Ê&)+}2Ê!åÍ"¢Ñ! n&))0Ê##ån&|²g}³oëás! n&å!ƒ>åÍšjÑÑåÍ3Ñ!ÃA>ë!9ùëÁÉCarry what ? (ESC to Cancel) You have no lamps to carryYou're now carrying Å!üÿ9ùDM!?å!!Ã?Í�Ênë! s! n&))0Ênë! s! n}2*Ê! n&å!W?åÍšjÑÑåÍ3Ñ!Ã?ë!9ùëÁÉUse which weapon ? (ESC to Cancel)You have no weapons to useYou're now using Å!Çÿ9ùDM!}Cå!šCå!gåͽPÑÑÑë`is#rÍ�#|µÂ™?!ÃtCÍe)͘*Í�Ênë! s! n&))0Ênë! s! n&))0Ê#në! s! n}þÂ6@*,Ê}·Êø?!³CåÍ3Ñ!ÃtC! n}2,Ê*,Ê&))0Ê###n}2àÈÍá! n&))0Ê##ån&|²g}³oëás! n}þ ÂgA*.Ê}·Ê_@*/Ê}·Ê_@!ØCåÍ3Ñ!ÃtC*.Ê}·Âs@! n}2.ÊÃ|@! n}2/Ê! n}þÊ­@þÊ¿@þÊÚ@þÊá@þÊè@þÊï@þÊAþÊ`AÃgA*áÈ&###}2áÈÍÃgA!7É4;¡|¢g}£o}28ÉÃgA!9É4ÃgA!:É4ÃgA!;É4ÃgA!<É4*<É}þÂA!åÍ"¢ÑÃgA!=É4! 6Ï!7 s#r! ~5o}·Ê]A!óÎ~#foåÍ�7n&Ñn}þFÊIAÍ�76!7 ^#Vå!ëár+sÃAÃgA!>É4ÃgA! n}þ ÂXC*-Ê}·ÊˆA!DåÍ3Ñ!ÃtC! n}2-Ê! n}þÊÂAþÊÚAþÊâAþÊêAþÊ÷AþÊBþÊBþÊ@CÃXC!åÍ"¢Ñ>2@É!åÍ"¢ÑÃXC>2AÉÃXC>2BÉÃXC>2CÉ>23ÉÃXC>2DÉ!åÍ"¢ÑÃXC>2EÉÃXC!*DåÍ3Ñ!DDåÍ3ÑͲåÍY¸Ñ}2FÉ*Fɯg¿ÿ|ÚJB*FÉ&¥ÿ|ÒJBÃMBÃB!åÍ3Ñ*FÉ&åÍmoÑå!sDå! åÍȸÑÑÑ! åÍ3Ñ! 6Ï!7 s#r!6 6! ~5o}·ÊC*FÉå!óÎ~#foåÍ�7n&ÑnÑ}»ÂïBÍ�76Í�7##n&3ÍkÁåÍ�7###n&ÑåÍ�7nëás!6 6!7 ^#Vå!ëár+sÃŽB!6 n}·ÊC!åÍ"¢Ñ!ŒDåÍ3Ñ>2-ÊÍ�åÍCjÑ! n&))0Ê6!ÃtC!åÍ"¢Ñ>2?É!åÍ"¢ÑÃXC! n&å!¿DåÍšjÑÑåÍ3Ñ!ÃtCë!99ùëÁÉWear what ? (ESC to Cancel) You have nothing to wearSorry! You're already wearing ArmorSorry! You're already wearing two RingsSorry! You're already wearing an AmuletThis is a genocide amuletWhich monster (A-Z) do you want to genocide ? The %s no longer exists!The genocide amulet disappears in a puff of smoke!You're now wearing Å!úÿ9ùDM!«Gå!ÊGå!håͽPÑÑÑë`is#rÍ�#|µÂE!âGÍe)͘*Í�Ênë! s! n&))0Ênë! s! n&))0Ê#në! s! n&))0Ê##n&€|¢g}£o|µÊoE!æGåÍ3Ñ!âG! 6! n}þ¸E*,Êå! nÑ}»Â¸E{2àÈ{2,Ê! n&å!HåÍšjÑÑåÍ3ÑÍá!âG! n}þ ¡F*.Êå! nÑ}»ÂÚE>2.ÊÃôE*/Êå! nÑ}»ÂñE>2/ÊÃôEÃcG! 6! n}þÊ+FþÊ[FþÊgFþÊnFþÊuFþÊ|FþÊ“FþÊšFáF*áÈ}·ÊXF*áÈ&ýÿ|ÒIF>2áÈÃUF*áÈ&+++}2áÈÍáF!7É5>28ÉáF!9É5áF!:É5áF!;É5áF!<É5*<É}·Â�F!åÍ"¢ÑáF!=É5áF!>É5áF! n}þ ÂcG*-Êå! nÑ}»ÂÃF>2-ÊÃÆFÃcG! 6! n}þÊýFþÊGþÊGþÊ%GþÊ-GþÊ=GþÊEGþÊKGÃcG!åÍ"¢Ñ>2@É!åÍ"¢ÑÃcG>2AÉÃcG>2BÉÃcG>2CÉÃcG>2DÉ!åÍ"¢ÑÃcG>2EÉÃcG!âG!åÍ"¢Ñ>2?É!åÍ"¢ÑÃcG! n}·Â†G! n&å!HåÍšjÑÑåÍ3ÑÜG! n&å!1HåÍšjÑÑåÍ3Ñ!âGë!9ùëÁÉTakeoff what ? (ESC to Cancel)You aren't wearing anythingThat's CURSED !! You can't take it off.You took off You aren't wearing You took off Å!øÿ9ùDM!kIå!ˆIå!iåͽPÑÑÑë`is#rÍ�#|µÂoH!ÃbIÍ�Ênë! s! n&))0Ênë! s! n&))0Ê#në! s! n}þ ÂÀH! në! sÃçH! n}þ ÂßH! n¯gë! sÃçH!¨IåÍ3Ñ! n&)))))0Ëë! s#r!ÅIå!å!åÍ«²ÑÑÑ!Aå! åÍ�åÍ÷²ÑÑÑÍ�n}·ÊTI! n&)))))2Íå! n&))ÑåÍ�ëás#r!åÍ3Ñ!ÃbIë!9ùëÁÉName what ? (ESC to Cancel) You don't have anything to nameSorry! You can't name that!Call it: Å!ñÿ9ùDM!­Oå!ÉOå! åͽPÑÑÑë`is#rÍ�#|µÂÿI!äOÍ�Ênë! s! n&))0Ênë! s! n&))0Ê#në! s! n&))0Ê###ë! s#rÍ� n}·ÂjJ!ïOåÍ3Ñ!äOÃoJÍ� 5! 6! n}þʦJþÊfKþÊ¢KþÊÒLþÊ NþÊ OþÊ6OþÊGOÃiO*êÈ&+ë! s! nå*êÈ&#ÑÍÚcK*ëÈ&+ë! s! nå*ëÈ&#ÑÍÚ[K! n&3ÍkÁå! n&Ñë! s#rÍ�n&@|¢g}£o|µÂ5KÍ�n& |¢g}£o|µÂ8KÃSKÍ�n&|¢g}£oåÍç�Ñ! 6! 4ÃÓJ! 4òJÃiO!äÈ4*äÈå;¡|¢g}£oÑ}2äÈ*äÈ}2ãÈÍI>23É! 6!PåÍ3ÑÃiO!PåÍ3Ñ*êÈ&+ë! s! nå*êÈ&#ÑÍÚ·L*ëÈ&+ë! s! nå*ëÈ&#ÑÍÚ¯L! n&3ÍkÁå! n&Ñë! s#rÍ�n&@|¢g}£o|µÂ9LÍ�n& |¢g}£o|µÂ25É!LAMP -------->ARMOR ------->RIGHT HAND -->LEFT HAND --->AMULET ------> %c.%sUSINGPACK LISTÅ!ÿÿ9ùDM!å!åÍ·ÑÑ`i6`i~5o}·Ê�a!Hå`in&åͲÑÑÍX²Ãpaë!9ùëÁÉÅ!ûÿ9ùDM*êÈ&3ÍkÁå*ëÈ&Ñë! s#rÍ�n&?|¢g}£oë`is`in&))0Ênë! s! n}þÂdb*ÚÈå`in&))0Ê###n&))))Ñ"ÚÈ*ÚÈðØ|Ú7b*ÜÈñØ|Ò-b*ÜÈ#"ÜÈ*ÚÈðØ"ÚÈÍMÍ�6`in&å!²cåÍšjÑÑåÍ3Ñ`in&))0Ê6éc! n}þ®b`in&å!½cåÍšjÑÑåÍ3ÑÍ�ån&€|²g}³oëás`in&))0Ê#n&åÍûcÑéc! n}þÂÐb`in&å!ÌcåÍšjÑÑåÍ3Ñéc*)Ê&ìÿ|Úéb!×cåÍ3Ñéc*)Êë! s! nå! n&Ên&))0ÊnѯgWÍúÒKc! n&ëÿ|ÒKc! n&#Êå! n&Ênëás! 5Ãòb! n&êÿ|Úec`in}2ÊÃxc! n&#Êå`inëás! n}þ ‹cÍ{·>2ÌÈ!)Ê4Í�6`in&å!ðcåÍšjÑÑåÍ3Ñë!9ùëÁÉYou found You fell into You found Sorry, your pack is fullYou found Å!üÿ9ùDMÍ�>½Âd>¼Êjd>½Âd>¼Ê�d>½Â+d>¼ÊÚd>½Â7d>¼Êe>½ÂCd>¼Ê4e>½ÂOd>¼Êhe>½Â[d>¼Êne>½Âgd>¼Ê³eÃ.f;¡|¢g}£o}21ÉÃ.f*ÜÈ|µÊšd*ÜÈ+"ÜÈ*ÚÈ'"ÚÈ*ÚÈå*ÚÈÍåÑÍú"ÚÈ*ÚÈðØ|ÚÌd*ÜÈ#"ÜÈ*ÚÈðØ"ÚÈ!7fåÍ3ÑÍMÃ.f*ÐÅ#"ÐÅÍ�²!Wfå! å!åÍ«²ÑÑÑ!åÍ3ÑÍ3‡Ã.f*EÉ}·Êe!yfåÍ3ÑÃ.f*áÈ}·Â"eÃ.f!áÈ5!�fåÍ3ÑÍÃ.f*ãÈ&Íå}2ãÈ*éÈ}2èÈ!©fåÍ3ÑÍI*ãÈ}·Âee!åÍ€4ÑÃ.fÍùfÃ.f*AÉ}·Ê�e!ÀfåÍ3ÑÃ.f*ÞÈ|µÊ�e*ÞÈ+"ÞÈ*ÞÈå*ÞÈÍåÑÍú"ÞÈ!ÔfåÍ3ÑÍÀÃ.f!å!åÍ•¡ÑÑë! s`i6`inå! nѯgWÍúÒ#f*êÈë! s*ëÈë! s! å! åÍgÑÑ|µÊfÍÌšå! n&å! n&åÍvœÑÑÑ`i4ÃÊe!åÍ"¢ÑÃ.fë!9ùëÁÉThe IRS takes some of your goldYou are falling down a chute.....but nothing happensThe poison makes you weakerYour energy is drainedbut nothing happensBrain damage makes you less skillfulÅ!åÍ"¢ÑÍ0¡{22É{21É{20É!åÍ"¢ÑÁÉÅ!ýÿ9ùDMÍ�në! sÍ� në! s`i6`in&ùÿ|ÒßgÍ�å! n&##å! n&+åÍ•¡ÑÑëásÍ� å! n&##å! n&+åÍ•¡ÑÑëásÍ�nå! nÑ}»Â²gÍ� nå! nÑ}»Â²gÃÙgÍ�n&3ÍkÁåÍ� n&Ñn}·ÂÙg!Ãÿg`i4Ã?gÍ�å! nëásÍ� å! nëás!Ãÿgë!9ùëÁÉÅ!ùÿ9ùDM*êÈ&3ÍkÁå*ëÈ&Ñë! s#rÍ�n}·ÊGh!iåÍ3Ñ!Ãi!>iå!^iå!)åͽPÑÑÑë! s#rÍ�#|µÂqh!ÃiÍ�Ênë! s! nå*,ÊÑ}»Ê¼h! nå*-ÊÑ}»Ê¼h! nå*.ÊÑ}»Ê¼h! nå*/ÊÑ}»ÂÊh!ƒiåÍ3Ñ!Ãi! n&å!«iåÍšjÑÑåÍ3Ñ! n&å͹iÑÍ�å! n¯g@|²g}³oëásÍ�åÍCjÑ!Ãië!9ùëÁÉSorry, something's there already.Put down what ? (ESC to Cancel)You don't have anything in you pack!Sorry! You have to take that off firstYou put down Å!9ùDM! n&))0Ên}þ ÊÝiþ Ê2+Ê!åÍ"¢Ñ{2Ê{2 Ê!åÍ"¢ÑÃAj>2ÌÈÁÉÅ!ÿÿ9ùDM! në`is`inå*)ÊѯgWÍúÒƒj`in&Êå`in&#Ênëás`i4ÃTj!)Ê~5o&Ê6ë!9ùëÁÉÅ!òÿ9ùDM!në! s#rÍ�))0Ênë! sÍ�))0Ê#në! sÍ�))0Ê###në! s#6! n}þ  k! å~#fo|¢g}£oëás#rÃ3k! n}þ Ê3k! å~#foå! n&#ÑÍúëás#rÍ� |ÒRk`i6-Í� Íúë! s#rÃVk`i6+!:në! s#r! n&)))))2Íå! n&))Ñ~#foë! s#r! 6Í�|µÂÈk! n&)))))2Íå! n&))Ñ##~#foë! s#r! 6!=në! s#r! n}þÊlþÊ6lþÊglþÊglþʈlþÊ–lþʤlþʺlþ Êàlþ Êãlþ Ê5mþ Êgmþ ÊumÃŽm!>në! s#r!Inë! s#rÙmÍ�))0Ê###n&))))åÍ�å!JnåÍ�åÍȸÑÑÑÑÍ�ÃÿmÍ�åÍ�å!_nåÍ�åÍȸÑÑÑÑÍ�Ãÿm!dnë! s#rÙm!knë! s#rÙm!rnë! s#r!xnë! s#rÍ�))0Ê##n&|¢g}£o|µÊÝlÃÆmÃàlÙmÃÆm! n}·Â'mÍ�ë! s#r!~në! s#rÍ�))0Ê##n&|¢g}£o|µÊ$mÃÆmÃ2m!†në! s#rÙm! n}·ÂYmÍ�ë! s#r!‹në! s#rÃdm!“në! s#rÙm!˜në! s#rÙm!Ÿnë! s#r!¤në! s#rÙm!¨në! s#rÍ�åÍ�åÍ�åÍ�å!¬nåÍ�åÍȸÑÑÑÑÑÑÍ�ÃÿmÍ�åÍ�åÍ� å`in&åÍ�åÍ�å!¶nåÍ�åÍȸë!9ùëÍ�Ãÿmë!9ùëÁÉ a the stairs%s%d pieces of GOLD!%s%spotionscrollsome armorwand ofwandring ofringamuletthe ARKBUG%s%s%s %s%s%s%c%d %s %sÅ!üÿ9ùDM!4oë! s#r!óÎ~#foå! n&ÍkÏn&Ñn&åÍmoÑë`is#rÍ� åÍ�åÍ�å!foåÍ�åÍȸÑÑÑÑÑÍ�Ã+oë!9ùëÁÉ %s%s%sÅ!þÿ9ùDM! n}þAÊpþBÊ pþCÊpþDÊ$pþEÊ0pþFÊ20É*àÈ&)ë! s!ýÎ~#foå! n&Ñn&Ðÿë! s! nå! nѯgWÍÍ©ÒÅz! n&ÃÊz! në! s! n&å! n&åÍ�†ÑÑë! s*àÈ&ïÿ|ͯÚ{!Ã{*àȯgÍúë! s! nå! nѯgWÍúÍ©Ò6{! n&Ã;{! në! s! n}þDÂm{! ånå;¡|¢g}£oÑëásÆ{*:É}·Ê†{! ån&Íåëás! n}·Âº{!ë€åÍ� n&|¢g}£oå!ó€åÍÅnÑÑÑåÍ3Ñ!Ãâ€*ÐÅ#ë! s!ÿÎ~#foå! n&Ñn&Àÿë! s! nå! nѯgWÍúÍ©Ò|! n&à |! në! s! nå! nѯgWÍúÍ©Ò1|! n&Ã6|! në! s!ø€åÍ� n&|¢g}£oå!�åÍÅnÑÑÑåÍ3Ñ! n}þRʺ|*ãÈå! nѯgWÍÚ¥|>2ãÈÍIÍÀ3!óÎ~#foå! n&Ñn&åÍ€4Ñú|*ãÈå! nѯgWÍú}2ãÈÍI! n}þAÊé|þGÊ:}þLÊu}þRÊ‘~þTÊó~þUʺþWÊ€ÃI€*AÉ}·Âù|*ÞÈ|µÂü|ÃI€Í¾¡|¢g}£o|µÊ}ÃI€*ÞÈ+"ÞÈ*ÞÈå*ÞÈÍåÑÍú"ÞÈ!�åÍ3ÑÍÀÃI€*2É}·ÊE}ÃI€Í¾¡|¢g}£o|µÊY}ÃI€!å!åÍ•¡ÑÑ}22É!�åÍ3ÑÃI€Í¾¡|¢g}£o|µÊ‰}ÃI€*)Ê&#å!åÍ•¡ÑÑë! s! n&Ênë! s! nå**ÊÑ}»Ê ~! nå*+ÊÑ}»Ê ~! nå*,ÊÑ}»Ê ~! nå*-ÊÑ}»Ê ~! nå*.ÊÑ}»Ê ~! nå*/ÊÑ}»Â~ÃI€! n&å!6�åÍšjÑÑåÍ3Ñ! n&å͹iÑ! n&åÍCjÑ! n&))0Ê6!A�åÍ3ÑÍ�!##n&3ÍkÁåÍ�!###n&ÑåÍ�!nëásÍ�!6!åÍ"¢ÑÃI€*,Ê}·Ê§~*àÈ&þÿ|Òª~ÃI€*,Ê&))0Ê#n}·Â¿~ÃI€*:É}·ÊÒ~!S�åÍ3ÑÃI€*,Ê&))0Ê###5!àÈ5!k�åÍ3ÑÍáÃI€*ÚÈ|µÊ ;¡|¢g}£o|µÊÃI€!ôå!2åÍ•¡ÑÑë! s! nå*ÚÈÍåÑÍúÍ©ÒG! n&ÃP*ÚÈÍåë! s*ÚÈå! nѯgÍú"ÚÈ!~�åÍ3ÑÍM!‘�åÍ3ÑÍ�!##n&3ÍkÁåÍ�!###n&ÑåÍ�!nëásÍ�!6!åÍ"¢ÑÃI€*CÉ}·ÂÛ*3É}·ÂÛ;¡|¢g}£o|µÊÞÃI€*3Éå!å!åÍ•¡ÑÑÑ}23É!£�åÍ3ÑÃI€Í¾¡|¢g}£o|µÂ!€*áÈ&üÿ|Ò$€ÃI€*EÉ}·Ê7€!¹�åÍ3ÑÃI€!áÈ5!Ñ�åÍ3ÑÍÃI€!Ãâ€! n}þFÂ`€!Ãâ€Í� në! sÍ� åÍ�!nëásÍ�!##å! nëásÍ�!###å! nëás! n&3ÍkÁå! n&Ñë! s#rÍ�!åÍ� nëásÍ� å! nëás!Ãâ€ë!9ùëÁÉ missedThe hit youThe You feel less skillfulYou are covered with GelHe steals and disappears...Your armor is protectedYour armor weakensHe takes some goldand disappears...His gaze confuses youThe sting has no effectThe sting weakens youÅ!òÿ9ùDMÍ�ÍkÏë`is#rÍ�në! s!óÎ~#foå! n&Ñnë! s!ùÎ~#foå! n&Ñn&Öÿë! s! në! s#6*áÈå*åÈѯgWë! s#r**Ê&))0Ê###në! s**Ê}·Ê›‚! å~#foå! nѯgëás#rÍ� åÍ� åÍ�†ÑÑë! s#r**Ê}·Âß‚Í�ýÿ|Í©ÒÑ‚Í�ÃÔ‚!ë! s#rÃÍ�|µÊƒÍ�å! nѯgÍͩ҃Í�à ƒ! n&ë! s#rÍ�n}·ÊJƒ! n}þFÊ7ƒÍ�6! n}þMÂJƒ!åÍ"¢Ñ! n}þFÂZƒ>20ÉÍ�|µÂ~ƒ!„åÍ�å!„åÍÅnÑÑÑåÍ3ÑÃûƒÍ�å*åÈѯgÍͩҙƒÍ�Þƒ*åÈ&ë! s#rÍ�#nåÍ�ÑÍúÒăÍ�#6ÃÚƒÍ�#ånåÍ�ÑÍúëás!„åÍ�å!„åÍÅnÑÑÑåÍ3ÑÍ�åÍ#„Ñë!9ùëÁÉYou missed the You hit the Å!÷ÿ9ùDMÍ� ÍkÏë`is#rÍ�në! s!óÎ~#foå! n&Ñnë! sÍ�#n}·Âs†Í�##në! sÍ�###në! s! n&3ÍkÁå! n&ÑåÍ�nëás! n}þFÂÀ„>20ÉÍÀ3>2íÈ!|†åÍ� å!}†åÍÅnÑÑÑåÍ3ÑÍ•ë! s{þ@ÊA†! n}þTÊ…þQÊ7…þLÊK…Ú…! n&åͳ•Ñ! n&))0Ê###å!@å!åÍ•¡ÑÑëásÃ�…;¡|¢g}£o|µÊK…ÃA†! n&åÍ)–Ñ! n&))0Ênë! s! n}þÊK…! n}þÊK…! n}þÊK…! n}þ ÊK…Ã�…ÃA†! 6! ~5o}·ÊA†Í�##në! sÍ�###në! s! n}·Êë…! å! åÍgÑÑ|µÂë…ã…! nå*êÈÑ}»Â †! nå*ëÈÑ}»Â †Ã£…! n&3ÍkÁå! n&Ñå! n¯g@|²g}³oëásÃA†Ã£…!åÍ"¢Ñ*ÞÈå!÷Î~#foå! n&Ñn&ÐÿÑ"ÞÈÍÀÍ�6ë! 9ùëÁÉYou killed the Å!þÿ9ùDM! nå! nѯgW####ë`is!å;Ñå`inѯgÍë! s! nå! n&#ÑÍúÒâ†!Ã*‡! ånå! nѯgWÍúëás! n&ìÿ|ͩ҇! n&#Ç!ë! s! n&Ã*‡ë!9ùëÁÉÅÍŒ‡Í¤ˆÍs‰Í?ŽÍ+šÍ0¡*åÈ&ùÿ|Òg‡*åȯg Íú}2éÈÃl‡>2éÈ*éÈ}2èÈ!".ÉÍö±|µÊ‡‡Í²Ãy‡ÍûÁÉÅ!ûÿ9ùDM{2ËÈ{2ÊÈ{2ÉÈ{2ÈÈ{2ÇÈ{2ÆÈ{2ÄÈ*ÅÈ}þ ÂÖ‡*ÐÅå;¡Ñ|¢g}£o|µÂÖ‡!ÅÈ5`i6É#6¡Á! s#r`i^#Vr+sz³Ê›ˆ*ÒÅþÿ|Ú‰ˆÍ�n&@|¢g}£o|µÊ2ˆÍ�n&?|¢g}£o))0Ê6ɈÍ�n& |¢g}£o|µÊ‰ˆÍ�n&|¢g}£oÍkÏnë! s{·Ê‰ˆ! n&?|¢g}£o))0Ê6! ^#Vr+së6Ãç‡ë!9ùëÁÉÅ!þÿ9ùDM`i6`in&éÿ|Òj‰! 6! n&Íÿ|Òd‰`in}þÊûˆ`in}þÊûˆ! n}·Êûˆ! n}þ2‰`in&3ÍkÁå! n&Ñ6�Ã\‰! n&|¢g}£o|µÊA‰`in&|¢g}£o|µÂ\‰`in&3ÍkÁå! n&Ñ6! 4ÃĈ`i4ðˆë!9ùëÁÉÅ!õÿ9ùDM>2ÂÈ!å!úå!ÔÅåÍ4ÀÑÑÑ;¡|¢g}£oå;¡|¢g}£o###åͺŠÑÑ*ÂÈ}·ÊMŠÍ¾¡å*ÂÈѯgÍ}2ÃÈ*ÃÈ&)ÎÆë! s#rÍ� në`isÍ� #në! s!ÂÈ5Í� å*ÂÈ&)ÎÆnëásÍ� #å*ÂÈ&)ÎÆ#nëás! n&å`in&åÍŒÑÑ! n&å`in&åͺŠÑÑø‰*ÐÅîÿ|Ú\ŠÃ±Š*ÐÅ))Íúë! s! ~5o}·Ê±ŠÍ¾¡ ëÍë! s;¡ëÍë! s! n&å! n&åÍŒÑÑÃmŠë! 9ùëÁÉÅ!þÿ9ùDM! n&ÍkÔÅå! n&Ñë`is#rÍ�ån&|²g}³oëás! n&èÿ|Ò)‹!åÍ�#å! n&#å! n&åÍ‹ÑÑÑÑ! n}·ÊX‹!åÍ�çÿå! n&å! n&+åÍ‹ÑÑÑÑ! n}·Ê„‹!åÍ�+å! n&+å! n&åÍ‹ÑÑÑÑ! n&÷ÿ|Ò¹‹!åÍ�å! n&å! n&#åÍ‹ÑÑÑÑë!9ùëÁÉÅ!9ùDMÍ�n}·Âÿ‹*ÂÈ&)ÎÆå! nëás*ÂÈ&)ÎÆ#å! nëás!ÂÈ4Í�ånå! nѯgW|²g}³oëásÁÉÅ!øÿ9ùDM;¡|¢g}£o|µÊ<Œ! 6ÃBŒ! 6! n&ÍkÔÅå! n&Ñnë`is! nå! nѯgW###ë! s! nå! nѯgW#ë! s;¡ë! s#rÍ�Íå|¢g}£oë! s*ÐÅàÿ|ͯÚËŒ!ÃÏŒ*ÐÅ+ë! s! nå! nѯgWÍúÚóŒ! 6ÃùŒ! 6Í�|¢g}£o>½Â�>¼Ê9�>½Â�>¼Êt�>½Â*�>¼Ê¯�>½Â6�>¼Êê�Ã(Ž`in&|¢g}£o|µÊt�! n&3ÍkÁå! n&#Ñå! nëásÃ(Ž`in&|¢g}£o|µÊ¯�! n&3ÍkÁå! n&+Ñå! nëásÃ(Ž`in&|¢g}£o|µÊê�! n&+3ÍkÁå! n&Ñå! nëásÃ(Ž`in&|¢g}£o|µÊ%Ž! n&#3ÍkÁå! n&Ñå! nëásÃ(ŽÃ9�! 5n}·Ê6ŽÃBŒë!9ùëÁÉÅ!õÿ9ùDM`i6`in&ïÿ|Ò®�! 6! n&×ÿ|Òž�;¡ë! s! n&|¢g}£oå! n&Íå|¢g}£oÑ|µÂ©ŽÃŒ�! n&|¢g}£oë! s! n¯gÍúå!åÍ•¡ÑÑ|²g}³oë! s! nå`inѯgW|²g}³oë! s! n&Íå|¢g}£oë! s! n¯gÍúå!åÍ•¡ÑÑ|²g}³oë! s! nå! nѯgW|²g}³oë! s! n&å! n&å! n&å! n&åÍN’ÑÑÑÑ! ån&ëásÃ_Ž`iån&ëásÃKŽ! å`iåÍ@¡ÑÑ`in&3ÍkÁå! n&Ñ6@>20Ê;¡|¢g}£o|µÊø�*æÈ þ|ÒW�Í•ë! s! n&Àÿ|ÒW�! å`iåÍ@¡ÑÑ`in&3ÍkÁå! n&Ñå! n¯g@|²g}³oëás! n&åÍZ•Ñ*ÐÅå*ÒÅÑÍúÒh�ÃE’*ÐÅçÿ|ÚÞ�*ÌÈ}·ÂÞ�Í•ë! s! n&Àÿ|ÒÞ�! å`iåÍ@¡ÑÑ`in&3ÍkÁå! n&Ñå! n¯g@|²g}³oëás! n&))0Ê6 ;¡|¢g}£o##ë! s! 6! nå! nѯgWÍúÒp‘Í•ë! s{þ@Â"‘!ÃE’! å`iåÍ@¡ÑÑ`in&3ÍkÁå! n&Ñå! n¯g@|²g}³oëás! n&åͳ•Ñ! 4Ãø�*ÐÅøÿ|Ò“‘;¡|¢g}£o##ë! sÃÇ‘*ÐÅðÿ|Òµ‘;¡|¢g}£o#ë! sÃǑ;¡|¢g}£oë! s! 6! nå! nѯgWÍúÒE’Í•ë! s{þ@Â÷‘!ÃE’! å`iåÍ@¡ÑÑ`in&3ÍkÁå! n&Ñå! n¯g@|²g}³oëás! n&åÍ)–Ñ! 4ÃÍ‘ë! 9ùëÁÉÅ!úÿ9ùDM! nå! nѯgWë! s! nå! nѯgWë! s! në! s! nå! nѯgWÍúÒä’!å! nå! nѯgWÍúå! n&3ÍkÁå! n&ÑåÍ4ÀÑÑÑ! 4Ã�’;¡|¢g}£o|µÊ!“!å! n&å! n&å! n&å! n&åÍ”ÑÑÑÑÑ*ÐÅå!åÍ•¡ÑÑå*ÐÅ###ÑÍÒl“!å! n&å! n&å! n&å! n&åÍ”ÑÑÑÑÑ*ÐÅ)å!åÍ•¡ÑÑå*ÐÅÑÍúÒµ“!å! n&å! n&å! n&å! n&åÍ”ÑÑÑÑÑ*ÐÅ))å!åÍ•¡ÑÑå*ÐÅÑÍúÒþ“!å! n&å! n&å! n&å! n&åÍ”ÑÑÑÑÑë!9ùëÁÉÅ!üÿ9ùDM*ÐÅå*ÒÅÑÍúÒ.”! n}þÊ.”!à •Í•ë! s{þ@ÂC”!à •! n&å! n&åÍ•¡ÑÑë! s! n&å! n&åÍ•¡ÑÑë`is! n&3ÍkÁå`in&Ñn}·Êœ”!à •! n&3ÍkÁå`in&Ñå! n¯g@|²g}³oëás! n}þÊÜ”þÊë”Ãú”! n&åͳ•ÑÕ! n&åÍø•ÑÕ! n&åÍ)–Ñ!à •ë!9ùëÁÉÅ!ÿÿ9ùDM`i6`in&Àÿ|ÒI•`in&))0Ên}·ÂC•ÃI•`i4Ã!•`in&ÃQ•ë!9ùëÁÉÅ!ÿÿ9ùDMÍ�))0Ê6Í�))0Ê#å;¡|¢g}£oëás`isÍ�))0Ê###å`in&))))dëásë!9ùëÁÉÅ!9ùDMÍ�))0Ê6Í�))0Ê#6Í�))0Ê###å*ÐÅå!åÍ•¡ÑÑëásÁÉÅ!9ùDMÍ�))0Ê6Í�))0Ê#å;¡|¢g}£oëásÁÉÅ!úÿ9ùDM*ÐÅ+Íåë! s;¡|¢g}£o|µÊ`–! n&Ãc–! ë! s! n&òÿ|Ú–! 6 !å;Ñå! n&ûÿÑÍë! s! 6! n}þÊΖþÊì–þ Ê —þ Ê(—þ ÊF—þ Êd——*ÆÈ&þÿ|Òã–!ÆÈ4Ãé–! 6—*ÇÈ&ÿÿ|Ò—!ÇÈ4×! 6—*ÈÈ&þÿ|Ò—!ÈÈ4Ã%—! 6—*ÉÈ&ÿÿ|Ò=—!ÉÈ4ÃC—! 6—*ÊÈ&ÿÿ|Ò[—!ÊÈ4Ãa—! 6—*ËÈ&ÿÿ|Òy—!ËÈ4×! 6—! n&÷ÿ|ÚÉ—! n}·ÂÉ—*ÄÈ&þÿ|Ò¸—*ÅÈ&óÿ|ÚÁ—! 6ÃÉ—!ÄÈ4!ÅÈ4! n}þÂù—!å;Ñ|¢g}£o|µÊó—! 6Ãù—! 6Í� ))0Êå! nëás!å;Ñ|¢g}£oë`is`in&ýÿ|Ò6˜`i6Ãz˜`in&úÿ|ÒK˜`i6Ãz˜`in&òÿ|Òm˜`in&++Íåë`isÃz˜`iån&øÿëás! n}þ ¯˜`in}þ¯˜*FÉ}·Êª˜!å!åÍ•¡ÑÑë`isï˜>2FÉÍ� ))0Ê#å`inëás! n}þ ÊÙ˜þ Ê1™þ ÊP™Ãi™`in&))))dü|¢g}£oë! s`in&üÿ|Ò™! ån&|²g}³oëásÃ.™! ån&|²g}³oëásÄ™`in¯g Íúå!åÍ•¡ÑÑë! sę;¡|¢g}£oÈë! sÄ™`in&å`in&åÍ•¡ÑÑë! sÍ� ))0Ê###å! nëás! 6! n}þʸ™þ ÊЙþ Êÿ™Ã š! nå`inÑ}»ÂÍ™! 6€Ã šÍ¾¡|¢g}£o|µÂä™Ã"š`in}þÊö™`in}þÂü™! 6€Ã š`in}·Â š! 6€Í� ))0Ê##å! nëásë!9ùëÁÉÅ!ûÿ9ùDM`i6Ï! s#r`i~5o}·ÊešÍ�6! ^#Vå!ëár+sÃAšÍ¾¡|¢g}£oë`is`i~5o}·Ê¯š! å! åÍ@¡ÑÑÍÌšå! n&å! n&åÍvœÑÑÑÃyšÍ¾¡|¢g}£o)}2òÎë!9ùëÁÉÅ!ûÿ9ùDM*ÐÅúÿ|Úðš*ÐÅ++++ë`is#rÃ÷š`i6#6Í�íÿ|Ú ›`i6#6*ÐÅ####ë! s#rÍ�äÿ|Ú0›! 6#6Í�åÍ�åÍ•¡ÑÑë! s!óÎ~#foå! n&Ñnå*FÉÑ}»Âd›Ãn›! n&Ãq›Ã0›ë!9ùëÁÉÅ!ûÿ9ùDM`i6`i~5o}·Â–›!Ãmœ! å! åÍ@¡ÑÑ! nå*êÈѯgWÍÍ©ÒÏ›! nå*êÈѯgWÍúÃà›*êÈå! nѯgWÍúë! s! nå*ëÈѯgWÍͩҜ! nå*ëÈѯgWÍúÃ!œ*ëÈå! nѯgWÍúë! s! nå* ÊѯgWÍÚMœ! nå*ÊѯgWÍÒ†›ÍÌšå! n&å! n&åÍvœÑÑÑ!Ãmœë!9ùëÁÉÅ!úÿ9ùDM! 6#6! ^#Vr+sz³Ê²œÍ�ÍkÏn}·Â¯œÃ²œÃ‡œÍ�|ÒÁœ!Ãçž!óÎ~#foåÍ�Ñnë! sÍ�ÍkÏë`is#rÍ�åÍ�ëásÍ�#å!ûÎ~#foåÍ�Ñn&Ðÿå*ÐÅÍåÑëásÍ�##å! nëásÍ�###å! nëás*=É}·Ê_�! n}þFÊ_�Í�6À�Í�å!õÎ~#foåÍ�Ñn&ÐÿëásÍ�n}þ§�Í�å;¡|¢g}£oëásÍ�å! n&3ÍkÁå! n&Ñnëás! n&3ÍkÁå! n&ÑåÍ� |²g}³oëás! n}þFÊžþPÊžþMʽžÃážÍ¾¡|¢g}£o|µÊ'žÃážÍ�n}·Ê8žÃážÍ•ë! s{þ@ÂJžÃáž! n&åÍ)–Ñ! n}þPÂpž! n&))0Ê6 ! n}þFžž! n&))0Ên}þ žž! n&))0Ê6Í�å! n¯g@|²g}³oëásÃážÍ�å!0Í~#foå! å!åÍ•¡ÑÑÑnëás!Ãçžë!9ùëÁÉÅ!üÿ9ùDMÍ‹·! 6! n&éÿ|Ò¡! 6! n&Íÿ|Ò ¡! n&3ÍkÁå! n&Ñnë`is!€|¢g}£o|µÊ ! n&å! n&åͲÑÑ`in&@|¢g}£o|µÊ®ŸÍé²!0Í~#foå`in&?|¢g}£o))0Ên&Ñn&åÍ™·Ñà`in& |¢g}£o|µÊôŸÍé²!óÎ~#foå`in&|¢g}£oÍkÏn&Ñn&åÍ™·Ñà`in&|¢g}£o|µÊ ÍÛ²!åÍ™·Ñá`in&@|¢g}£o|µÊ+ Ã¡`in& |¢g}£o|µÊÑ `in&|¢g}£oÍkÏnë! s! n&@|¢g}£o|µÊΠ! n&€|¢g}£o|µÊΠ! n&å! n&åͲÑÑÍé²!0Í~#foå! n&?|¢g}£o))0Ên&Ñn&åÍ™·Ñá`in&|¢g}£o|µÊ¡! n&å! n&åͲÑÑÍÛ²! åÍ™·Ñ! 4ß! 4ßʹ·Íé²!å!åͲÑÑë!9ùëÁÉÅ!ëÈå!êÈåÍ@¡ÑÑÁÉÅ!9ùDMÍ�å!å!åÍ•¡ÑÑëásÍ�å!1å!åÍ•¡ÑÑëásÍ�n&3ÍkÁåÍ�n&Ñn}·ÂH¡ÁÉÅ!9ùDM;¡åÍ�åÍ�ÑÍúÑÍåÍ�ÑÁÉÁÉÅ!þÿ9ùDM*Á|¢g}£o|µÊá¡`i6#6@Ãç¡`i¯w#w*ÁÍååÍ�å*ÁÑ|ªg}«o@|¢g}£oÑ|²g}³o"Á*Áâë!9ùëÁÉÅ!åÿ9ùDM*?É}·ÊA¢! 6! 6Ãj¢*@É}·ÊX¢! s! sÃj¢* Êë! s*Êë! s*êÈå! nѯgWÍú+ë! s*êÈå! nѯgW#ë! s*ëÈå! nѯgWÍú+ë! s*ëÈå! nѯgW#ë! s! n&þÿ|Úä¢! n&éÿ|Úê¢! 6! n&éÿ|Ú£! 6! n&Íÿ|Ú£! 6! n&Íÿ|Ú,£! 62! në! s! në! s! ånå*Êå*êÈѯgWÍúÑëás! ånå*Êå*êÈѯgWÍúÑëás! ånå*Êå*ëÈѯgWÍúÑëás! ånå*Êå*ëÈѯgWÍúÑëás! nå! nѯgWÍú#ë! s! nå! nѯgWÍú#ë! s! në! s! në! s! në! s! në! s! n&ÍkGÉå! n&Ñë! s#r! n&3ÍkÁå! n&Ñë! s#r! në! s! në! s! ~5o}·ÊÝ¥Í�ë! s#rÍ� ë! s#r! në`is`i~5o}·Ê¶¥Í�åÍ�n&ø|¢g}£oëásÍ�n&@|¢g}£o|µÊH¥Í�ån&À|¢g}£oëásÍ�n&?|¢g}£o))0Ênë! s! n}þÂ&¥Í�ån&|²g}³oëás! n}þÂE¥Í�ån&|²g}³oëásÃ�¥Í�n& |¢g}£o|µÊt¥Í�ån&à|¢g}£oëásÃ�¥Í�n&|¢g}£o|µÊ�¥Í�ån&|²g}³oëás! ^#Vr+s! ^#Vr+sߤ! å~#foëás#r! å~#fo3ëás#rÃr¤*Ê&ÍkGÉå*Ê&Ñån&|²g}³oëás*Ê&+ÍkGÉå*Ê&Ñë! s#r*Ê&+å! nѯgÍúë! s! ~5o}·Ê²¦Í�n&|¢g}£o|µÊ‰¦Í�ån&€|²g}³oëás! ånå! nѯgWëásò¦Í�ån&|²g}³oëás! å~#foîÿëás#rÃ=¦*Ê&#ÍkGÉå*Ê&Ñë! s#r! nå*ÊѯgWÍú+ë! s! ~5o}·Êb§Í�n&|¢g}£o|µÊ9§Í�ån&€|²g}³oëás! ånå! nѯgWÍúëásÃb§Í�ån&|²g}³oëás! å~#foëás#rÃê¦*Ê&ÍkGÉå*Ê&+Ñë! s#r*Ê&+å! nѯgÍúë`is`i~5o}·Ê¨Í�n&|¢g}£o|µÊá§Í�ån&€|²g}³oëás! ånå`inѯgWëásè! ^#Vr+sëån&|²g}³oëásÙ§*Ê&ÍkGÉå*Ê&#Ñë! s#r! nå*ÊѯgWÍú+ë`is`i~5o}·Ê¢¨Í�n&|¢g}£o|µÊ‚¨Í�ån&€|²g}³oëás! ånå`inѯgWÍúëásâ¨! ^#Vr+sëån&|²g}³oëásÃ7¨*Ê&+ÍkGÉå*Ê&+Ñë! s#r*Ê&+å! nѯgÍúë! s*Ê&+å! nѯgÍúë! s! ~5o}·ÊÌ©Í�ë! s#r! në`is`i~5o}·Ê·©Í�n&|¢g}£o|µÊf©Í�#n&|¢g}£o|µÊc©Í�ån&€|²g}³oëásé©Í�n&|¢g}£o|µÊ©©Í�#n&|¢g}£o|µÊ©©Í�ån&|²g}³oëás! ^#Vr+sé! å~#foîÿëás#rÃõ¨*Ê&+ÍkGÉå*Ê&#Ñë! s#r*Ê&+å! nѯgÍúë! s! nå*ÊѯgWÍú+ë! s! ~5o}·ÊõªÍ�ë! s#r! në`is`i~5o}·ÊàªÍ�n&|¢g}£o|µÊ�ªÍ�+n&|¢g}£o|µÊŒªÍ�ån&€|²g}³oëásÃÒªÍ�n&|¢g}£o|µÊÒªÍ�+n&|¢g}£o|µÊÒªÍ�ån&|²g}³oëás! ^#Vr+sÃ?ª! å~#foîÿëás#rê*Ê&#ÍkGÉå*Ê&+Ñë! s#r! nå*ÊѯgWÍú+ë! s*Ê&+å! nѯgÍúë! s! ~5o}·Ê¬Í�ë! s#r! në`is`i~5o}·Ê ¬Í�n&|¢g}£o|µÊ¸«Í�îÿ#n&|¢g}£o|µÊµ«Í�ån&€|²g}³oëásÃû«Í�îÿn&|¢g}£o|µÊû«Í�#n&|¢g}£o|µÊû«Í�ån&|²g}³oëás! ^#Vr+sÃh«! å~#foëás#rÃG«*Ê&#ÍkGÉå*Ê&#Ñë! s#r! nå*ÊѯgWÍú+ë! s! nå*ÊѯgWÍú+ë! s! ~5o}·ÊF­Í�ë! s#r! në`is`i~5o}·Ê1­Í�n&|¢g}£o|µÊà¬Í�îÿ+n&|¢g}£o|µÊݬÍ�ån&€|²g}³oëásÃ#­Í�îÿn&|¢g}£o|µÊ#­Í�+n&|¢g}£o|µÊ#­Í�ån&|²g}³oëás! ^#Vr+sÃ�¬! å~#foëás#rÃo¬! n&ÍkGÉå! n&Ñë! s#r! n&3ÍkÁå! n&Ñë! s#r! në! s! në! s! ~5o}·ÊN±Í�ë! s#rÍ� ë! s#r! në`is`i~5o}·Ê!±Í�në! sÍ�n&Á|¢g}£o|µÂk®Í�n& |¢g}£o|µÊk®! n&|¢g}£oÍkÏnë! s! n&€|¢g}£o|µÊk®Í�å! n&À|¢g}£oëás! në! sÍ�n&€|¢g}£o|µÊ)¯Í�n&@|¢g}£o|µÊÄ®Í�å!0Í~#foå! n&?|¢g}£o))0Ên&ÑnëásÃ&¯Í�n& |¢g}£o|µÊ ¯Í�å!óÎ~#foå! n&|¢g}£oÍkÏn&ÑnëásÃ&¯Í�ån&€|²g}³oëásÍ�6ñ! n}·Â<¯Í�6 ñÍ�n&|¢g}£o|µÊ±Í�n&|¢g}£o|µÊz¯Í�ån&€|²g}³oëásÍ�n&@|¢g}£o|µÊä¯Í�n&|¢g}£o|µÊ¬¯*DÉ}·ÊÛ¯Í�å!0Í~#foå! n&?|¢g}£o))0Ên&ÑnëásÃá¯Í�6Ãÿ°Í�n& |¢g}£o|µÊù°Í�å!óÎ~#foå! n&|¢g}£oÍkÏn&ÑnëásÍ�n}þI®°*<É}·Â«°! n&|¢g}£oÍkÏnë! s! n&@|¢g}£o|µÊ¥°Í�å!0Í~#foå! n&?|¢g}£o))0Ên&Ñnëásë°Í�6Ãö°Í�n}þMÂö°Í�å! n&|¢g}£oÍkÏnëásÍ�n&ïÿ|Òö°Í�6MÃÿ°Í�6ñÍ�6 ! ^#Vr+s! ^#Vr+sÃÏ­Í�6! å~#foëás#r! å~#fo3ëás#râ­! n}·Êq±*Ê&ÍkGÉå*Ê&Ñ6 ! n&ÍkGÉå! n&Ñë! s#r! 6! nå! nѯgWÍúÒí±Í� å! n&å! nå! nѯgWåÍ­¶ÑÑÑ! å~#foëás#r! 4Ú±ë!9ùëÁÉÅ!åÍQÀÑÁÉÁÉÅ!åÍQÀÑÁÉÁÉÅ!9ùDM!å!åÍQÀÑÑ!=å!åÍQÀÑÑÍ� å!åÍQÀÑÑÍ� å!åÍQÀÑÑÁÉÅ!c²åÍ·ÑÁÉTÅ!9ùDMÍ�åÍ·Ñ!UåÍ�åÍ�åÍ÷²ÑÑÑÁÉÅ!å!åÍQÀÑÑÁÉÅ!¨²åÍ·ÑÁÉlÅ!9ùDMÍ�åÍ�åͲÑÑÍ�åÍ·ÑÁÉÅ!زåÍ·ÑÁÉmÅ!æ²åÍ·ÑÁÉ)Å!ô²åÍ·ÑÁÉ(Å!þÿ9ùDM`i¯w#wÍ�²Í�åͲëás{þ Ê=´! n}þUÂ8³Í�åÍ�n&åÍY¸ÑëásÍ�n}þÂu³Í�|µÊc³`i^#Vr+s! ^#Vr+sÃC³Í�6ÍͲ!ÿÿÃL´Ã:´Í�n}þ­³Í�ÿÿ|Úª³`i^#Vr+s! ^#Vr+sÍͲÍó·Í�²Ã:´Í�n}þÂä³ÍͲÍ�|µÊÞ³`i^#Vr+s! ^#Vr+sÍó·Ã»³Í�²Ã:´Í�åÍ�+ÑÍúÒ:´Í�n¯gàÿ|Ú:´Í�n&�ÿ|Ò:´Í�n&å!åÍQÀÑÑ`i^#Vr+s! ^#Vr+sóÍ�6ÍͲ!ÃL´ë!9ùëÁÉÅ!ëÿ9ùDM`i¯w#wÍ�|µÊ¨´`i^#Vr+sëë! åÍ� ëÍ0ëás! å~#fo ëÍËëás#rÃc´Í�åÍ�ÑÍúÒµÍ�åÍ�ÑÍúë! s#rÍ�|µÂâ´! ^#Vr+s! ^#Vr+sz³Êµ! n&å!åÍQÀÑÑÃâ´Í�|µÊ<µ`i^#Vr+sz³Ê9µÍ�ë! n&å!åÍQÀÑÑõÃIµ!0å!åÍQÀÑÑë!9ùëÁÉÅ!òÿ9ùDM! ¯w#wÍ�ÍóåÍ�Ñðë`is#rÍ�|µÊĵ! ^#Vr+sëë! åÍ� ëÍ0ëás! å~#fo ëÍËëás#rÃ}µÍ�åÍ�ÑÍúÒ%¶Í�åÍ�ÑÍúë! s#rÍ�|µÂþµ! ^#Vr+s! ^#Vr+sz³Ê%¶`i^#Vr+sÕ! nëásÃþµÍ�|µÊ^¶! ^#Vr+sz³Ê[¶`i^#Vr+sÕÍ�ë! nëásÃ.¶Ãk¶`i^#Vr+së60ë!9ùëÁÉÅ!þÿ9ùDMÍ�ÍóåÍ�Ñðë`is#rÍ�å! nëásë!9ùëÁÉÅ!þÿ9ùDMÍ�ÍóåÍ�Ñðë`is#rÍ� n}·Êù¶`i^#Vr+sÕ! ^#Vr+sënëásÃжë!9ùëÁÉÅ!9ùDM!å!åÍQÀÑÑ!Så!åÍQÀÑÑÍ� å!åÍQÀÑÑÍ� å!åÍQÀÑÑÁÉÅ!9ùDMÍ�åÍ�åͲÑÑ! n&åÍ� åÍ�åÍU´ÑÑÑÁÉÅ!å!åÍQÀÑÑÁÉÅ!–·åÍ·ÑÁÉgÅ!9ùDM! n&å!åÍQÀÑÑÁÉÅ!¿·åÍ·ÑÁÉGÅ!9ùDMÍ�n}·Êñ·! ^#Vr+sën&å!åÍQÀÑÑÃÊ·ÁÉÅ!þ·åÍ·ÑÁÉ Å!yÿ9ùDM!‹ å`iåÍá¸ÑÑ`iåÍA¼Ñë!‡9ùëÁÉÅ!9ùDM! n&åÍm¼Ñ|µÊN¸! n& ÃS¸! n&ÁÉÁÉÅ!9ùDM! n&åÍœ¼Ñ|µÊ€¸! n&àÿÃ…¸! n&ÁÉÁÉÅ!þÿ9ùDM`i¯w#w! ^#Vr+sën}·Ê¸¸`i^#Vr+sÙ¸Í�ÿ¸ë!9ùëÁÉÅ!9ùDM! åÍ�åÍá¸ÑÑÁÉÅ!hÿ9ùDM!ž ^#Vr+së~#foë! s#rÍ�žë!– s#r! ^#Vr+sënë`is{·Ê2¼`in}þ%¼! ë!� s#r!” 6#6!‘ s!� s!� sÍ�n}þ-Âq¹! ^#Vr+s!� 4Í�n}þ0Â�¹!‘ 4Í�n&åÍo½Ñ}·Êž¹! åÍž½Ñá¹!ë!’ s#r! ^#Vr+sënë`is{þ.Âé¹! åÍž½Ñë!” s#r!� 4! ^#Vr+sënë`is`in&åÍY¸Ñ}þDʺþUÊQºþXÊZºþOÊcºþCÊ©ºþSÊںüÍ�–~#fo|·òQº!� ^#Vr+së6-Í�–åÍ�–~#foÍúëás#r!’ ^#Vr+s! 6 Ãiº! 6Ãiº! 6!’ å~#foå! n&å!– ^#Vr+së~#foå!� åÍ˼ÑÑÑѯgÍúëás#rÃR»!� ^#Vr+sÕ!– ^#Vr+së~#foëás!’ ^#Vr+sÃR»!� n}·Âíº!” 6È#6!– ^#Vr+së~#foë! s#rÍ�n}·ÊR»Í�”|µÊR»!� ^#Vr+sÕ! ^#Vr+sënëás!” ^#Vr+s!’ ^#Vr+sûÍ��6! ë!� s#r!� n}·Â©»!’ ^#Vr+s!ÍÒ©»!œ ^#Vr+sÕ!‘ n}·Ê »!0ã»! ëásÃn»Í�œå!� ^#Vr+sënëás{·ÊÒ»!œ ^#Vr+sé»!� n}·Ê¼!’ ^#Vr+s!ÍÒ¼!œ ^#Vr+së6 Ãܻü!œ ^#Vr+sÕ`inëásÃ/¼!œ ^#Vr+sÕ`inëásùÍ�œ6ë!˜9ùëÁÉÅ!9ùDMÍ�n}·Êk¼! ^#Vr+sën&åÍuÀÑÃI¼ÁÉÅ!9ùDM! n&AÍùͯÚ˜¼! n&ZÍͯÁÉÁÉÅ!9ùDM! n&aÍùͯÚǼ! n&zÍͯÁÉÁÉÅ!ÿÿ9ùDMÍ�åÍ� ÑÍìÒ½Í�^#Vr+sÕÍ� ÍëÒ½Í�0ýÍ�7ëás!&Ãf½Í� åÍ�åÍ� Ñ͉åÍ�åÍ˼ÑÑÑë`isÍ� åÍ�åÍ� ÑÍ)åÍ�åÍ˼ÑÑÑ`in&#&Ãf½ë!9ùëÁÉÅ!9ùDM! n&0ÍùͯÚš½! n&9ÍͯÁÉÁÉÅ!þÿ9ùDM`i¯w#wÍ�~#fon&åÍo½Ñ}·Êë½Í� Í?åÍ�^#Vr+sënѯgÐÿë`is#rì½Í�Ãò½ë!9ùëÁÉ*É*Éà Í Åë!\Í&Í!ÁÉÍ7*Ÿ|¥þÿÂ;¾*¡"Û¾*£"ݾ*¥"ß¾ÉÅ|µÂe¾*¡åÍA¼Ñ!—Zå Íá##æÊL¾"Û¾"ݾ"ß¾ÁÉ:Û¾ö2Û¾!á¾6#Âr¾!Ô¾ ~ÅW!ᾯ~w# ‹¾zÒ¬¾õ¯!á¾Û¾Žw# ¢¾ñ„¾Á Â|¾!Û¾ᾯ?/Îw#¿¾+~æg:ß¾oÁÉŇšàÍ7¯Í,Ú2që*ŸëÅÍ&ÍþÿÁÊ:qÍ):¡·Ê#¿=Ê#¿=Âr:qo&ÉÍ7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u*£|µÊ�¿*¡ëÍ*sëÕÍÑþÁÊÅþ†¿! ~þ€Â�¿6*uÁÉ*£+"£*¡€"¡*u#"uÃM¿Ã#Í7*ŸÅå;Ñ\ÍþÿÁÊ!å*ŸåÍç¾ÑÑÉÍ7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u€Í*£|µ*uÊ2À*¡€€~# À"¡*sëÍ·*uÂ2À#"u*£+"£Ãö¿ÁÉÍ7Å*¡ë*Ÿ:£Oz³ÂLÀÁÉq#ÃDÀÍ7Å*+++:ŸG‡€_å*¡DM!pÀãéo&ÁÉÍ Åþ ‰À Í> _Í Íæ™ÀÁÉÍþÊÁÉÑÁÉlÅ!9ùDMÍ�åÍ�åͲÑÑÍ�åÍ·ÑÁÉÅ!زåÍ·ÑÁÉmÅ!æ²åÍ·ÑÁÉ)Å!ô²åÍ·ÑÁÉ(Å!þÿ9ùDM`.OP  JOURNEY  a video fantasy  (Version 1.2) Daniel M. Sunday 7272 Candleshine Court Columbia, MD 21045 USA  .PA Š  COPYRIGHÔ NOTICE  Copyrighô  (C©  198² bù Daniaì M®  Sunday®  Alì  rightó  reserveä � worldwide® Nï parô oæ thió publicatioî maù bå reproduced¬ storeä � iî  á retrievaì system¬  oò transmitted¬  iî anù forí oò  bù  anù � means¬   electronic¬   mechanical¬  photocopying¬  recording¬  oò � otherwise¬  withouô  thå  prioò writteî permissioî oæ  Danieì  M® � Sunday¬ 727² Candleshinå CT.¬ Columbia¬ MÄ 2104µ USA. Thió  documenô ió beinç distributeä aó parô oæ á "Useò  Supporteä � Software¢ distribution® Aó such¬ permissioî ió giveî tï copù anä � distributeä  iô  providinç  thaô  thió ió noô  donå  foò  profit® � Further¬  permissioî  ió  explicitlù noô granteä tï  modifù  thió � documenô iî anù way¬ foò profiô oò otherwise.  DISCLAIMER  Danieì  M®  Sundaù  makeó nï representationó oò  warrantieó  witè � respecô  tï  thå contentó hereoæ anä specificallù  disclaimó  anù � implieä   warrantieó  oæ  merchantabilitù  oò  fitnesó  foò   anù � particulaò purpose® Further¬ Danieì M® Sundaù reserveó thå righô � tï reviså thió publicatioî anä tï makå changeó froí timå tï  timå � iî  thå contenô hereoæ withouô obligatioî tï notifù anù persoî oò � organizatioî oæ sucè revisioî oò changes. CP/M is a Trademark of Digital Research of Pacific Grove, CA. .PA Š  CONTENTS  TOPICS Page  Overview .................................. 1 Objective ................................. 2 Starting the Game ......................... 2 The Status Line ........................... 2 Moving Around ............................. 3 Messages .................................. 4 The Pack .................................. 4 Items ..................................... 5 Monsters .................................. 7 Fighting Monsters ......................... 7 Saving Games .............................. 8 The Scoreboard ............................ 8  APPENDICES  1. Journey Symbols .................. 9 2. Journey Commands ................. 10 3. Journey Items .................... 11 4. Journey Monsters ................. 13  .PA Š.HE Journey (Version 1.2) .PN 1  OVERVIEW  JOURNEY‚ ió á fulì screeî videï fantasù game® Iî JOURNEÙ yoõ � arå travelinç througè á losô citù burieä beneatè thå earth®  Eacè � leveì  oæ  thå  citù  ió mappeä ouô oî thå videï  screeî  aó  yoõ � explorå it® Whilå playing¬  youò currenô statuó ió displayeä oî thå  toð � twï  lineó oæ thå screen®  Messageó appeaò oî thå bottoí linå oæ � thå screen® Thå resô oæ thå screeî ió useä tï displaù thå MAP‚ oæ � thå  leveì  yoõ arå oî anä youò positioî iî thå  map®  Thió  mað � showó thå layouô oæ thå partó oæ thå citù thaô yoõ havå explored® � However¬ unlesó somå speciaì magiã haó beeî invoked¬ yoõ caî onlù � seå thingó (magiã itemó anä monsters© iî youò immediatå vicinity® � Ho÷  faò yoõ caî seå ió determineä bù thå strengtè oæ youò  LAMP® � Youò  lamð wilì gro÷ dimmeò witè timå (measureä bù thå numbeò  oæ � moveó yoõ make)®  Don'ô worrù though¬  yoõ wilì finä otheò lampó � aô deepeò leveló oæ thå city. Whilå movinç around¬  yoõ wilì discoveò GOLD‚ anä manù  typeó � oæ MAGIà ITEMS®  Bå carefuì though¬ therå arå alsï TRAPS‚ yoõ maù � falì  into®  Thå amounô oæ golä yoõ finä ió youò  score®  Magiã � itemó yoõ finä caî bå carrieä iî youò PACK® Theù caî theî bå useä � aô  anù  timå yoõ neeä them®  Thió  includesº  scrolls¬  potions¬ � weapons¬  armor¬ lanterns¬ wands¬ ringó anä amulets® Theså itemó � givå yoõ differenô poweró oò dï somethinç speciaì foò  you®  Thå � commanä  seô  oæ thå gamå letó yoõ reaä thå  scrolls¬  drinë  thå � potions¬ etc. Yoõ wilì alsï encounteò MONSTERS‚ thaô yoõ wilì havå tï fighô � anä  defeaô  tï continuå oî youò way®  Therå arå manù  kindó  oæ � monsteró  witè  differenô  abilitieó anä  speciaì  attacks®  Thå � outcomå oæ anù battlå witè onå oò morå monsteró ió determineä  bù � youò currenô power¬  wisdom¬ skill¬ armoò anä weapon® Also¬ somå � oæ  thå  magiã  itemó caî helð yoõ iî combat®  Iæ yoõ  defeaô  á � monster¬  youò skilì increaseó anä yoõ caî continuå oî youò  way® � Buô iæ á monsteò defeató anä killó you¬ thå gamå ends. Afteò  yoõ  havå completelù exploreä á leveì anä  founä  thå � STAIRS¬  yoõ  caî gï dowî tï thå nexô leveì oæ thå city®  Aó yoõ � traveì  tï deepeò leveló thå monsteró becomå morå  ferociouó  anä � hardeò  tï conquer®  However¬  thå magiã thaô yoõ wilì finä alsï � becomeó morå powerfuì anä yoõ wilì havå greateò skilì anä wisdom® � Somewherå deeð iî thå citù ió thå ARK®  Iæ yoõ caî finä thå  ARK¬ � iô  wilì  givå yoõ thå poweò tï traveì uð thå stairó aó  welì  aó � down¬ anä tï escapå froí thå underworlä witè youò treasures. .PA Š OBJECTIVE  Thå  maiî objectivå oæ JOURNEY‚ ió tï finä thå ARK‚ anä escapå � froí thå underworld®  Iæ yoõ caî dï thió yoõ arå á TOTAÌ  WINNER® � Thå  secondarù objectivå ió tï collecô aó mucè golä aó  possible® � Thå  amounô  oæ  golä yoõ finä ió youò scorå iî  thå  game®  Thå � longeò yoõ caî survive¬ thå morå golä yoõ wilì find.  STARTINÇ THÅ GAME  Thå  gamå ió starteä bù executinç thå  prograí  JOURNEY.COM® � So¬ witè thå JOURNEY‚ diskettå oî drivå A¬ iî responså tï thå CP/Í � prompô  "A>¢ typå "JOURNEY¢ anä theî presó RETURN®  Thå diskettå � wilì  whirì foò á whilå anä theî yoõ wilì bå presenteä  witè  thå � initiaì screeî welcominç yoõ tï thå game® Aô thió point¬ yoõ arå � askeä  tï identifù yourselæ bù typinç iî youò name®  Afteò doinç � thió  anä pressinç RETURN¬  thå firsô leveì oæ thå citù  wilì  bå � generateä anä JOURNEY‚ wilì begin. Thå  firsô  gamå screeî thaô yoõ wilì seå  showó  thå  outeò � walló oæ thå leveì oæ thå citù thaô yoõ havå jusô entered® Abovå � thió  arå  displayeä twï lineó oæ informatioî abouô youò  currenô � status®  Youò  positioî iî thå mað anä thå areá liô uð  bù  youò � lanterî  arå  alsï shown®  Yoõ arå no÷ readù tï starô  explorinç � thió level®  Yoõ caî geô á lisô oæ thå initiaì contentó oæ  youò � pack®  Thió  ió donå bù typinç 'L§ foò "List"®  Doinç thió wilì � eraså  thå  screeî anä theî displaù whaô yoõ havå iî  youò  pack® � Afteò  readinç thió list¬  pressinç RETURÎ wilì returî yoõ tï thå � game. Á  summarù  oæ  thå JOURNEY‚ commanä seô ió  alsï  available® � Thió caî bå gotteî bù typinç thå '?§ key®  Thå mað wilì theî  bå � replaceä  bù á helð summary®  Afteò examininç thió  information¬ � pressinç RETURÎ wilì returî yoõ tï thå game.  THE STATUS LINE  Durinç  thå game¬  thå STATUÓ LINE‚ aô thå toð oæ thå  screeî � giveó informatioî abouô thå followinç itemsº  Gold¬ Armor¬ Power¬ � Level¬ Energy¬ Skilì anä Wisdom® Aô thå beginninç oæ thå gamå iô � looks like this.  GOLD ARMOR POWER Level 1 ENERGY SKILL WISDOM 0 4 11 11/ 11 0 0  Aó thå gamå progresses¬  thå valueó displayeä wilì changå tï � reflecô youò currenô status® Notå carefullù thå valueó displayeä � foò ENERGY®  Thå firsô numbeò ió youò currenô energy® Wheî youò � ENERGÙ dropó tï ° yoõ arå DEAD® Thå seconä numbeò ió thå maximuí � energù  yoõ  caî  havå foò youò presenô leveì  oæ  wisdom®  Thió �Šmaximuí  wilì increaså aó youò skilì  anä wisdoí  increase®  Youò � currenô energù wilì naturallù increaså tï thå maximuí aó yoõ movå � around®  Iô  wilì  decreaså wheneveò á monsteò  hitó  you®  Thå � amounô  iô decreaseó dependó oî botè thå strengtè oæ thå  monsteò � yoõ arå fightinç aó welì aó thå armoò yoõ arå wearing. .CP 8  MOVING AROUND  Yoõ  caî  movå arounä iî thå mað bù usinç eitheò  thå  arro÷ � keyó oò thå numeriã keypaä aó á directionaì movemenô keypad® Thå � arro÷  keys¬   wheî  pressed¬  wilì  movå  yoõ  iî  thå  selecteä � directionº  up¬  down¬  lefô oò right®  Usinç thå numeriã keypaä � wilì  additionallù allo÷ yoõ tï movå diagonallù oò tï jusô  wait® � Thå centeò keù oæ thå keypaä ió thå numbeò '5'® Wheî presseä yoõ � makå á movå iî thå gamå buô youò positioî doeó noô change®  Thió � ió calleä WAITING‚ anä ió occasionallù useful® Pressinç anù otheò � keù  oî thå numeriã keypaä wilì movå yoõ iî thå directioî oæ thaô � keù relativå tï thå centraì '5§ key®  So¬ pressinç '7§ wilì movå � yoõ uð anä tï thå left® Thå movemenô keypaä lookó aó follows.  UP L 7 8 9 R E \ | / I F 4 - 5 - 6 G T / | \ H 1 2 3 T DOWN 5 = Wait  Aó yoõ movå around¬  youò LAMP‚ wilì lighô uð thå areá oæ thå � mað thaô yoõ caî see®  Lighô wilì noô gï througè walló oò arounä � corners®  Walló  thaô  arå  liô  uð wilì bå  displayeä  aó  halæ � intensitù blocks®  Oncå á walì haó beeî liô up¬  iô wilì  remaiî � lit® Thió createó á MAP‚ oæ wherå yoõ havå been. Somå  walló arå actuallù SECREÔ DOORS®  Á secreô dooò lookó � exactlù likå á walì untiì yoõ pusè oî it®  Yoõ dï thió bù movinç � intï thå wall®  Iæ iô ió á secreô door¬  thå walì wilì opeî  up® � Sometimeó  yoõ wilì seå walló completelù surroundinç á regioî  oæ � thå  map®  Therå  ió alwayó á secreô dooò thaô wilì leô yoõ  geô � through®  Iî sucè á case¬ yoõ havå tï gï arounä anä pusè againsô � walló untiì yoõ finä thå door. Whilå  movinç around¬  yoõ wilì sometimeó falì intï á  TRAP® � Foò example¬ yoõ maù geô caughô iî quicksanä oò falì intï á chutå � droppinç yoõ dowî tï thå nexô level® Trapó cannoô bå seeî beforå � yoõ  movå  intï theí (unlesó somå speciaì magiã ió  beinç  used)® � Afteò  fallinç intï á trað however¬  iô wilì bå displayeä iî  thå � mað aó á '+§ sign. Š Afteò á leveì haó beeî completelù explored¬  yoõ caî gï dowî � tï thå nexô leveì bù movinç oî toð oæ thå STAIRS‚ anä pressinç thå � '\§ character®  Thå stairó arå representeä iî thå mað bù thå '\§ � symbol®  Therå ió onå anä onlù onå stairwaù oî eacè  level®  Iæ � yoõ dï noô seå á '\§ displayeä iî thå map¬ yoõ havå noô yeô founä � thå stairs® Theù arå probablù dowî somå passagewaù oò arounä somå � corneò wherå yoõ havå noô yeô looked. Iæ yoõ havå founä anä no÷ possesó thå ARK¬  yoõ caî alsï  gï � uð  thå stairs®  Yoõ dï thió bù typinç '/§ whilå standinç oî toð � oæ thå stairs. .CP 8  MESSAGES  Thå lasô linå oæ thå screeî ió reserveä foò messages® Therå � arå  manù  eventó iî thå gamå thaô requirå á  messagå  explaininç � whaô happened® Foò example¬ wheî yoõ movå intï á trap¬ á messagå � wilì  telì  yoõ  whicè  trað iô waó anä  whaô  happeneä  tï  you® � Sometimes¬  á singlå movå wilì causå severaì eventó tï happeî anä � severaì messageó tï bå given®  Afteò eacè messagå ió given¬  thå � prompô  "-¾ More....¢ maù appeaò aô thå faò righô oæ thå  messagå � line®  Thió  meanó  thaô therå arå morå messageó waitinç  tï  bå � read® Afteò readinç thå currenô message¬ thå nexô messagå caî bå � gotteî  bù pressinç eitheò thå SPACE‚ bar¬  thå RETURN‚ keù oò  thå � numeriã  keù '0'®  Thå '0§ keù ió convenientlù locateä  foò  uså � witè thå numeriã movemenô keypad®  Wå finä iô comfortablå tï uså � thå thumâ foò pressinç thå '0§ whilå usinç thå index¬  middlå anä � rinç fingeró tï operatå thå movemenô keypad. Thå  lasô messagå displayeä remainó oî thå screeî untiì  yoõ � makå youò nexô move® Theî iô ió erased® Thå mosô recentlù giveî � messagå caî bå redisplayeä bù typinç 'A§ foò "Again". .CP 7  THÅ PACK  Yoõ  havå á pacë foò carryinç itemó thaô yoõ find®  Aô  anù � timå  thå contentó oæ thå pacë caî bå examineä bù typinç  aî  'L§ � foò  "List"®  Thå  PACË  LIST‚ wilì indicatå itemó thaô  yoõ  arå � currentlù  using®  Thaô  is¬  iô wilì sho÷ whicè ARMOR‚  yoõ  arå � wearing¬  whicè WEAPON‚ yoõ arå using¬ whicè LAMP‚ yoõ arå carryinç � anä whicè RINGS‚ anä AMULET‚ yoõ arå wearing® Thió ió showî bù thå � entrù  undeò  thå "USING¢ columî pointinç tï thå  item®  Aô  thå � starô oæ thå gamå thå PACË LIST‚ wilì looë aó follows. .CP 8  USING PACK LIST  A. a hamburger ARMOR ------------>! B. some +1 iron armor WEAPON -----------> C. a +1 mace LAMP -------------> D. a +2 lantern  ŠAfteò readinç thå pacë list¬  pressinç thå RETURÎ keù returnó yoõ � tï thå game. Thingó arå puô intï youò pacë wheî theù arå found®  Aî iteí � ió founä wheî yoõ movå intï itó positioî iî thå map® Iî á sense¬ � yoõ "capture¢ thå iteí anä iô ió puô intï youò pack. Youò  pacë  ió  limiteä iî sizå anä caî carrù 2±  thingó  aô � most®  Afteò thió limiô ió reached¬ yoõ wilì noô bå ablå tï picë � uð anythinç elså thaô yoõ find®  Rooí caî bå madå iî thå pacë  bù � eitheò usinç uð aî iteí oò bù puttinç dowî aî item® Itemó iî thå � pacë caî bå puô dowî bù typinç 'P§ anä theî selectinç thå desireä � iteí  froí thå lisô thaô appearó oî thå screen®  Afteò selectinç � aî item¬ yoõ arå returneä tï thå game. .CP 7  ITEMS  Itemó arå showî iî thå mað bù á symboì occupyinç á position® � Thå  itemó  whicè  arå useä iî thå gamå anä  theiò  correspondinç � symboló arå giveî iî thå followinç table. .CÐ 17  SYMBOÌ ITEM  ¤ Gold Ü Stairs + Trap " Food % Magic Potion & Magic Scroll } Armor ^ Weapon | Magic Wand * Lamp = Magic Ring ! Magic Amulet @ the ARK  Excepô  foò thå stairó anä golä anä traps¬  alì otheò  itemó � arå  pickeä uð anä puô iî youò pacë wheî yoõ movå oî toð oæ them® � Golä ió pickeä uð anä increaseó youò golä scorå buô doeó noô takå � uð  rooí  iî thå pack®  Thingó iî youò pacë caî bå useä  aô  anù � time®  Usinç aî iteí iî thå pacë takeó onå move® Tï uså aî item¬ � yoõ  presó  á singlå commanä keù foò whaô yoõ wanô  tï  do®  Thå � commanä seô ió aó follows. .CÐ 15 Š KEY COMMAND  C Carry a lantern D Drink a magic potion E Eat food L List contents of pack N Name a ring or amulet P Put down an item R Read a magic scroll T Take off armor, a ring or an amulet U Use a weapon W Wear armor, a ring or an amulet Z Zap a magic wand  Wheneveò onå oæ theså commandó ió giveî bù pressinç thå key¬ � á lisô oæ itemó thaô caî bå selecteä foò thå commanä ió displayeä � oî thå screen®  Foò example¬ afteò givinç thå 'R§ (Read© commanä � alì scrolló iî youò pacë wilì bå listed® Yoõ caî theî chooså thå � iteí thaô yoõ wanô tï uså froí thió list® Iæ yoõ decidå thaô yoõ � don'ô wanô tï dï anythinç afteò all¬ thå commanä caî bå cancelleä � bù pressinç thå ESC‚ oò thå RETURN‚ key®  Iæ thió ió done¬ nï movå � ió madå iî thå game. .CP 3 Yoõ  dï  noô alwayó kno÷ whaô á iteí wilì dï wheî yoõ  firsô � picë  iô up®  Iî particular¬  yoõ wilì noô kno÷ thå strengtè  oæ � armoò oò weaponó thaô yoõ find® Also¬ yoõ wilì noô kno÷ whaô thå � potions¬  scrolls¬ wands¬ ringó oò amuletó thaô yoõ finä arå gooä � for®  Thió  musô  bå discovereä bù usinç them®  Oncå  yoõ  havå � identifieä anù particulaò typå oæ item¬  anù otheò itemó oæ  thaô � typå  wilì alwayó bå identified®  Therå ió alsï somå magiã  thaô � wilì leô yoõ identifù items® Asidå froí usinç speciaì magic¬ thå � ruleó foò identifyinç items‚ are: (1© Potionó anä Scrolló arå identifieä wheî yoõ uså them. (2© Armoò strengtè ió identifieä wheî yoõ weaò it. (3© Weapoî strengtè caî onlù bå knowî througè magic. (4© Wandó arå identifieä iæ theù havå án effecô wheî used. (5© Ringó anä Amuletó caî onlù bå knowî througè magic. Ofteî  yoõ wilì bå ablå tï guesó whaô á rinç oò amuleô  doeó � wheî  yoõ weaò it®  Iæ so¬  yoõ caî givå á namå tï thå  rinç  oò � amuleô sï aó tï reminä yoõ oæ itó effect®  Thió ió donå witè thå � 'N§ (Name) command. Somå  itemó havå valueó associateä witè  them®  Thió  valuå � indicateó thå strengtè oæ thå item® Foò example¬ +² iroî armoò ió � ²  unitó  strongeò  thaî +° iroî armor®  Thió  alsï  applieó  tï � weaponó anä lamps®  Á +° lamð ió burneä ouô anä caî bå puô down® � Thå valuå oæ á wanä giveó thå numbeò oæ chargeó lefô oî it® Eacè � timå  á  wanä ió zapped¬  onå chargå ió useä up®  Á wanä witè  ° � chargeó ió useä uð anä caî bå puô down. .CÐ 8 Š MONSTERS  Whilå  yoõ  arå searchinç througè thå losô  city¬  yoõ  wilì � encounteò  manù kindó oæ monsteró roaminç  around®  Monsteró  arå � displayeä  iî thå mað bù thå letteró oæ thå alphabet¬  onå letteò � foò"  eacè monsteò type®  Foò example¬  aî 'H§ ió  aî  Hobgoblin® � Monsteró wilì chaså yoõ anä trù tï attacë anä kilì you® Yoõ musô � eitheò  evadå anä escapå froí them¬  oò elså facå theí iî combat¬ � fighô anä defeaô them® Iæ yoõ caî makå iô tï thå stairs¬ yoõ caî � gï  dowî  tï  thå nexô leveì anä nï  monsteró  wilì  follo÷  you® � Sometimeó  yoõ  caî ruî arounä á corneò oò dowî á passagewaù  anä � thå monsteró wilì loså tracë oæ you®  Otheò timeó yoõ wilì  havå � somå  speciaì magiã iteí thaô wilì helð yoõ tï escape®  Mosô  oæ � thå time¬ however¬ yoõ wilì havå tï stanä youò grounä anä fight. Somå  monsteró arå asleeð anä wilì noô chaså yoõ unlesó  yoõ � wakå  theí  up®  Somå  wilì wakå uð iæ yoõ geô  toï  neaò  them® � Otheró  wilì noô wakå uð unlesó yoõ hiô them®  Dependinç oî youò � circumstances¬  yoõ  maù  oò  maù noô wanô tï  fighô  á  sleepinç � monster®  Somå  sleepinç monsteró arå  guardinç  treasures¬  anä � defeatinç theí wilì wiî á magiã iteí oò somå golä foò you. Á  fe÷  monsteró  wilì attacë  yoõ  iî  speciaì  ways®  Foò � example¬  á  WASÐ maù stinç yoõ anä thió wilì causå youò poweò tï � decrease®  Parô  oæ  thå gamå ió tï discoveò whicè  monsteró  dï � what®  Also¬ somå magiã wilì onlù worë againsô certaiî monsters® � Again¬  learninç  whaô magiã itemó dï anä wheî iô ió besô tï  uså � theí ió parô oæ thå game. .CÐ 8  FIGHTINÇ MONSTERS  Yoõ  fighô monsteró bù hittinç theí witè thå weapoî yoõ  arå � using®  Yoõ dï thió bù movinç directlù aô thå monsteò wheî hå ió � immediatelù  besidå  you®  Thió ió thå samå aó takinç á blo÷  iî � thaô  direction®  So¬  iæ á 'D§ (Dragon© ió immediatelù tï  youò � left¬  anä yoõ movå lefô (presó '4')¬  theî yoõ wilì takå á swinç � aô thå Dragon® Yoõ maù hiô hií oò yoõ maù miss® Afteò yoõ takå � á swinç aô á monster¬ iô ió theî hió turî tï takå á swinç aô you® � Thå progresó oæ thå battlå ió giveî bù messageó aô thå bottoí  oæ � thå  screen®  Thå  outcomå  oæ thå battlå ió determineä  bù  thå � relativå strengthó oæ yoõ anä thå monster®  Yoõ arå protecteä bù � youò armor®  Youò abilitù tï wiî dependó oî youò  power¬  skill¬ � wisdoí anä thå weapoî yoõ arå using. Yoõ loså ENERGY‚ eacè timå á monsteò hitó you® Thå amounô oæ � energù yoõ havå lefô ió displayeä aô thå toð oæ thå screen® Wheî � youò energù dropó tï 0‚ yoõ arå dead® Iî combat¬ watcè youò energù � carefully. Manù magiã itemó caî helð yoõ iî combat®  Knowinç whaô youò � availablå  magiã  ió anä ho÷ tï uså iô wilì ofteî  determinå  thå � outcomå oæ á battle. Š.CP 7  SAVING GAMES  Iæ  yoõ  arå playinç JOURNEY‚ anä wanô tï stoð  anä  continuå � somå otheò time¬  youò gamå caî bå saveä iî á file® Yoõ caî theî � resumå thå saveä gamå wheneveò yoõ wish. Tï  savå aî ongoinç game¬  typå thå commanä '^S'®  Thaô is¬ � holä thå CTRL‚ (Control© keù dowî anä simultaneouslù typå thå 'S'® � Thå  prograí wilì no÷ asë yoõ (oî thå messagå line© foò thå  namå � oæ  á filå tï savå thå gamå in®  Typå iî á filå namå  anä  presó � RETURN® Youò gamå wilì bå saveä iî thaô file. Tï  resumå  á gamå thaô haó beeî saved¬  uså  thå  followinç � procedure® Afteò thå CP/Í prompô "A>"¬ typå "JOURNEY"¬ theî typå � á SPACE¬ theî typå thå namå oæ thå file‚ thå gamå waó saveä iî anä � theî presó thå RETURN‚ key®  Thaô is¬ typå "JOURNEÙ FILENAME¢ anä � presó RETURN®  Thå diskettå wilì whirì foò á whilå anä theî  yoõ � wilì  finä yourselæ bacë iî thå exacô situatioî yoõ werå wheî yoõ � saveä thå game. .CP 7  THE SCOREBOARD  Thå  TOР 10‚ scoreó arå recordeä oî  thå  scoreboard®  Youò � SCORE‚ ió thå amounô oæ golä thaô yoõ havå found®  Thå scoreboarä � ió showî aô thå enä oæ everù game® Iô includeó informatioî abouô � whï thå playeò was¬  ho÷ hå waó killed¬ whaô leveì hå goô dowî tï � anä ho÷ wiså hå was® Iæ  yoõ jusô wanô tï seå thå scoreboarä withouô playinç  thå � game¬  yoõ caî typå "JOURNEÙ -S¢ anä presó RETURN‚ iî responså  tï � thå CP/Í prompô ">". Thå scoreboarä ió storeä iî thå filå "JOURNEY.SSS"® Iæ thió � filå ió removed¬  thå currenô scoreboarä wilì bå lost®  Yoõ  maù � wanô  tï  dï thió tï starô competitionó witè á cleaî  scoreboard® � .PA Š APPENDIX 1  JOURNEY SYMBOLS  SYMBOL MEANING  $ Gold \ Stairs + Trap " Food % Magic Potion & Magic Scroll } Armor Þ Weapon | Magic Wand * Lamp = Magic Ring ! Magic Amulet @ the ARK .PA Š A#PPENDIX 2  JOURNEY COMMANDS  KEY COMMAND EFFECT  ¿  Helð  Displayó á commanä summary. A Again Redisplays the last message given. C Carry Carry a new lantern. D Drink Drink a magic potion. E Eat Eat some food. L List List the contents of the pack. N Name Name a magic ring or amulet. P Put Down Put down an item. R Read Read a magic scroll. Ô  Takå Ofæ  Takå ofæ armor¬ a rinç oò aî amulet. U Use Use a new weapon. W Wear Wear armor, a ring or an amulet. Z Zap Zap a magic wand. \ Down Go down the stairs. / Up Go up the stairs. ^Q Quit  Quit the game. ^R Refresh Refresh the screen display. ^S Save Game Save the game in a file. .PA Š APPENDIX 3  JOURNEY ITEMS  TYPE KINDS  Trap quicksand tax trap chute poison needle trap hammer trap space warp nerve gas trap monster pit Food apple (least filling) eggroll milkshake taco sandwich hamburger pizza steak (most filling) Potion healing gain power restore power poison quickness confusion  gain skill amnesia Scroll identification gold detection magic detection teleportation strengthen armor strengthen weapon map remove curse .CP 9 Armor leather 1 (weakest) tin 2 bronze 3 iron 4 steel 5 magnesium 6 tungsten 7 plate mail 8 (strongest) .CP 9 Š Weapon club (weakest) hand axe mace short sword war hammer battle axe long sword two-handed sword (strongest) .CP 9 Wand striking healing drain life polymorph sleep dexterity trap detection enchantment .CP 9 Lamp candle (weakest) flare torch flashlight lantern beacon (strongest) .CP 9 Ring power teleportation stealth protection slow digestion see invisible aggravation regeneration .CP 9 Amulet eternal light eternal darkness preserve skill repel monsters prevent confusion detect traps sustain power genocide monster .PA Š APPENDIX 4  JOURNEY MONSTERS  SYMBOL NAME  A Anhkheg B Bat C Centaur D Dragon E Elephant F Violet Fungus G Gelatinous Cube H Hobgoblin I Invisible Stalker J Jackal K Kobold L Leprechaun M Mimic N Nomad O Ogre P Purple Worm Q Quasit R Rust Monster S Snake T Thief U Umber Hulk $ V Vampire W Wasp X Xorn Y Yeti Z Zombie  D Dragon E Elephant F Violet Fungus G Gelatinous Cube H Hobgoblin I Invisible Stalker J Jackal K Kobold L Leprechaun M Mimic N Nomad O Ogre P Purple Worm Q Quasit R Rust Monster S Snake T Thief U Umber Hulk JOURNEY TO THE LOST CITY is supplied on a single density diskette for the OSBORNE 1. The program on the diskette is named "JOURNEY.COM". The user's manual for the game is in the file "JOURNEY.DOC" which is a Wordstar document file. The game itself has some built-in help which is given when a '?' is typed in play mode. Note that JOURNEY TO THE LOST CITY will only operate properly on an OSBORNE 1 with 52 columns, and auto-scroll turned OFF. This is "User Supported Software". Donations to support the author's programming efforts would be appreciated, but are not necessary. The author is: Daniel M. Sunday 7272 Candleshine Court Columbia, MD 21045 ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååELRIC OF ULM0ýË:ðÒ·È=!ïҾýËÍ^ÍÍTÏ!ÎÒ~þ Â�?#ˆÏÍKÏÚÐÑ{æ`O> ÍKÏÚÐÑ{õÂÌÏ͘ËÅÍÐÌÁÆAÍ’ËËÃÔÏÍ¢Ë>:Í’ËÍ¢Ëæþ ÂùÏñõþÂ÷Ï> Íþ ÊÐ> Í’Ëxþ ÒÐÏÍ¢ËÃÙÏñÍÀÌÂÐÍäËÆÒÍ‚Î#~þY‚Î#"ˆËÍTÏÍÒÍïË<ÌêÎÆÒALL (Y/N)?Í^Í ÍLOGON COM$LOGON AZM2%&'()*+LOGOFF COM,LOGOFF AZM--./012OSNAKE COM>3456789:OSNAKE DOC;TDUCK COMu<=>?@ABCDEFGHIJTDUCK PASmKLMNOPQRSTUVWXJOURNEY COM€YZ[\]^_`abcdefghJOURNEY COM€ijklmnopqrstuvwxJOURNEY COM€yz{|}~€�‚ƒ„…†‡ˆJOURNEY COMJOURNEY DOC€‰Š‹Œ�Ž��‘’“”•–—˜JOURNEY DOCb™š›œ�žŸ ¡¢£¤¥JOURNEY INS¦JOURNEY $$$åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå This is the release date of the disk. UPDATE DOC €€UPDATE AZM € TIMEON COM €TIMEON AZM €#TIMEOFF COM €TIMEOFF AZM €&LOGON COM €$LOGON AZM €%LOGOFF COM €,€LOGOFF AZM €-€OSNAKE COM €3OSNAKE DOC €;TDUCK COM €<€:TDUCK PAS €K€6LOGOFF .COM A6 5C 384 3 LOGOFF .AZM FE 8B 5760 45 OSNAKE .COM E4 F3 7936 62 OSNAKE .DOC 27 8D 1024 8 TDUCK .COM D8 46 14976 117 TDUCK .PAS E9 4C 13952 109 JOURNEY .COM ED 3D 49152 384 JOURNEY .DOC FB 6E 28928 226 JOURNEY .INS CC DC 768 6 JOURNEY .SSS C1 8E 256 2  Fog Library Disk FOG-CPM.141 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Osborne 1 Programs. Filename Description -09-00 .86 This is the release date of the disk. -CPM141 .DOC Th%is is the description of the disk contents. UPDATE .COM 96A5 1K [UPDATE 1 of 11] These programs form a system for keeping track of Computer usage (inspired by the IRS). Documentation and Assembler Source code (crunched) is included. UPDATE .DOC 678F 5K [UPDATE 2 of 11] UPDATE .AZM EA4B 6K [UPDATE 3 of 11] TIMEON .COM EA14 1K [UPDATE 4 of 11] TIMEON .AZM 38DE 9K [UPDATE 5 of 11] TIMEOFF .COM 7F57 1K [UPDATE 6 of 11] TIMEOFF .AZM 8EEB 10K [UPDATE 7 of 11] LOGON .COM 521E 1K [UPDATE 8 of 11] LOGON .AZM ACEC 7K [UPDATE 9 of 11] LOGOFF .COM A65C 1K [UPDATE 10 of 11] LOGOFF .AZM FE8B 6K [UPDATE 11 of 11] OSNAKE .COM E4F3 8K [OSNAKE 1 of 2] Graphics Program, eat points, not snakes. OSNAKE .DOC 278D 1K [OSNAKE 2 of 2] TDUCK .COM D846 15K  [TDUCK 1 of 2] Duck Shooting Graphics game (from Portable Companion). Pascal source code is included. TDUCK .PAS E94C 14K [TDUCK 2 of 2] JOURNEY .COM ED3D 48K [JOURNEY 1 of 4] A full screen graphic "adventure" game with D&D type characters for display. JOURNEY .DOC FB6E 29K [JOURNEY 2 of 4] JOURNEY .INS CCDC 1K [JOURNEY 3 of 4] JOURNEY .SSS C18E 1K [JOURNEY 4 of 4]  is the description of the disk contents. UPDATE .COM 96A5 1K [UPDATE 1 of 11] These programs form a system for keeping track of Computer usage (inspired by the IRS). Documentation and Assembler Source code (crunched) is included. UPDATE .DOC 678F 5K [UPDATE 2 of 11] UPDATE .AZM EA4B 6K [UPDATE 3 of 11] TIMEON .COM EA14 1K [UPDATE 4 of 11] TIMEON .AZM 38DE 9K [UPDATE 5 of 11] TIMååå&ååååå'ååååå