NNNNNN.[pŠų NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNõõõžO÷NNNNNNNNNNNNNNNNNNNNNNõõõūååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååålÄ÷’’’Oš’’’’   Ą ą š’`€ š’ą!š’’O%`'€) +š’-ą/1 3@5`7š’9 ;Ą=ą?A C@’’’’’’Iš’’’’’’’’’’’’’’’’’o’’’’’’’Ļ]ą_a c@e`g€iš’kĄmąoq s@u`w€’Æ{Ą}ą ƒ@…`‡€‰ ‹Ąą ‘ “@ •` —š’™  ›Ą ą ’ ’’’£@ „` §€ ©  «Ą ­ą Æ ± ’O µš’’ ¹  ’’’½ą æ Į Ć@ Å` Ē€ É  ĖĄ Ķą Ļ Ń Ó@ Õ` ׀ Ł  ŪĄ Żą ßį ć@å`ē€éš’ėĄ’ļļń ó@õ`÷€ł ūĄżą’!Ań’’ ń’ Į į’!ń’’’’ń’’Æ’Ļ’’’’’’’#A%a')”+Į-į/’’’3A5a7ń’’’’’’’’ļ’A!CAEaGń’I”’÷’’’Oš’’’’   Ą ą š’`€ š’ą!š’’O%`'€) +š’-ą/1 3@5`7š’9 ;Ą=ą?A C@’’’’’’Iš’’’’’’’’’’’’’’’’’o’’’’’’’Ļ]ą_a c@e`g€iš’kĄmąoq s@u`w€’Æ{Ą}ą ƒ@…`‡€‰ ‹Ąą ‘ “@ •` —š’™  ›Ą ą ’ ’’’£@ „` §€ ©  «Ą ­ą Æ ± ’O µš’’ ¹  ’’’½ą æ Į Ć@ Å` Ē€ É  ĖĄ Ķą Ļ Ń Ó@ Õ` ׀ Ł  ŪĄ Żą ßį ć@å`ē€éš’ėĄ’ļļń ó@õ`÷€ł ūĄżą’!Ań’’ ń’ Į į’!ń’’’’ń’’Æ’Ļ’’’’’’’#A%a')”+Į-į/’’’3A5a7ń’’’’’’’’ļ’A!CAEaGń’I”’ST_CLUB PDAAF /ŠS ARCE 7ŠS EXPLOSIV EŠS "PFBACKUP SŠS EPF_BAT bŠS KPORTPART …ŠS ZSLAVE  ŠS ”TBASIC «ŠS ¶TMXM2 ȊS UPDATE ֊S YANKEE įŠS ZENO13 õŠS !HEXBIN COM ‹S 9MI BAT ‹S :NEODESK DAT ‹S ;PDC TXT ‹S <QPFSERIALTXT ‹S =PF_TERM TXT ‹S ?$XTERM1 COM ‹S H . Š0 S.. Š0 SAAF BAT 1ŠS  AAF DOC 4ŠS Ē@echo off echo  echo  echo  echo  echo  echo  echo  echo Aus- b 8 20 echo tral- b 13 20 echo ians  b 8 20 echo all  b 5 20 echo let  b 8 20 echo us  b 13 30 echo re- b 13 10 echo joice, b 13 20 echo For  b 17 20 echo we  b 15 20 echo are  b 13 20 echo young  b 12 20 echo and  b 13 20 echo free, b 15 50 echo We've  b 8 20 echo gold- b 13 20 echo en  b 8 20 echo soil  b 5 20 echo and  b 1 20 echo wealth  b 8 30 echo for  b 8 10 echo toil, b 8 20 echo Our  b 17 20 echo home  b 15 20 echo is  b 13 20 echo girt  b 12 20 echo by  b 10 20 echo sea; b 8 50 echo  echo Our  b 8 20 echo land  b 10 30 echo a- b 12 10 echo bounds  b 13 20 echo in  b 10 20 echo na- b 8 30 echo ture's  b 5 10 echo gifts b 5 20 echo Of  b 8 20 echo beau- b 10 20 echo ty  b 13 20 echo rich  b 18 20 echo and  b 17 20 echo rare; b 15 50 echo In  b 8 20 echo his- b 10 30 echo t'ry's  b 12 10 echo page,  b 13 20 echo let  b 10 10 echo ev- b 8 30 echo 'ry  b 13 10 echo stage b 13 20 echo Ad- b 15 20 echo vance  b 17 30 echo Aus- b 13 10 echo tra- b 15 30 echo lia  b 12 10 echo fair, b 13 50 echo  echo In  b 17 20 echo joy- b 18 20 echo ful  b 17 20 echo strains  b 15 20 echo then  b 13 20 echo let  b 12 20 echo us  b 10 20 echo sing b 8 20 echo Ad- b 13 20 echo vance  b 17 30 echo Aus- b 13 10 echo tra- b 15 30 echo lia  b 12 10 echo fair. b 13 50 åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå Instructions for AAF.BAT In order to use this batch file you must have BEEP.COM by Bruce Coleman, and you must have an ANSI.SYS driver installed in your Portfolio. BEEP.COM, ANSI.SYS, and the instructions for using them can be found in the file YANKEE.ARC which is available in the Portfolio downloads. AAF.BAT will play the Austalian national anthem "Advance Australia Fair" while displaying the words to the first stanza. Note that using the Portfolio's tone generator draws extra power from your batteries, so it's best to play with this while using the AC adaptor. There is one change to note: for simplicity's sake I renamed my copy of BEEP.COM to B.COM, so the command to invoke the tone generator in AAF.BAT is simply "b". If you want to leave BEEP.COM under its full name, then use the editor to change all of the "b" commands in the batch file to "beep". Thanks to Bruce Coleman for BEEP.COM. Enjoy, Ira Adams ååååååååååååååååååååååååååååååååååååååååååååååååååååååååå. Š7 S.. Š7 SARCE DOC 9ŠS 0AREC COM <ŠS  ARCE208 COM AŠS  ARCE Command Version 4.0c ------------ Mar 3, 1989 Purpose: Use ARCE to extract files from an ARC archive file. Format: ARCE [d:][path]filename.ext [filespecs...] [d:outpath] [/R] [/Q] [/P] [/T] | [/5] [/Gpassword] Remarks: The drive and path names are optional. If omitted, the current drive and path name is used. The filename must be supplied. The extension defaults to ARC. All files matching the supplied filename are processed. The ARC filename may contain the * and ? wildcard characters. If no filespecs are supplied, all files are extracted. Otherwise, only those ARC members which match one of the up to 16 filespecs are extracted. The extracted files may be placed on another drive, and/or in another subdirectory by following the optional filespecs with a drive designator and/or path name. If the file being extracted already exists, you are asked whether or not you want to over-write it. You may use the | /R option to bypass this prompt. Use a Y followed by the | return key to over-write the file. Use the /Q option to suppress alarm sounds, beeps, and bells. Use the /P option to write the extracted files to the DOS standard output file. With /P, you may pipe or redirect the output. An initial line feed is added to the beginning of the output file. Use the /T option to test the archive's integrity. No files will be extracted. If the file was encrypted, use the /G option to supply the same password as was used to create the file, e.g. /GSECRET. | Use the /5 option to stop ARCE from creating the subdirectories | for files created with the ARC /Z subdirectory option. ARCE 4.0c, Copyright (c) 1986-89, Wayne Chin and Vernon D. Buerg. ALL RIGHTS RESERVED. ARCE Command Version 4.0c ------------ Mar 3, 1989 Examples -------- o Extract all file from TEST.ARC onto the current drive: ARCE TEST o Extract only file with an extension of .ASM from the archive SOURCE.ARC on drive B and in subdirectory SAVE: ARCE B:\SAVE\SOURCE *.ASM o Extract all files from all ARC files in the subdirectory called TEST on drive C: ARCE C:\TEST\* o Extract all files from PROGA.ARC and place the files in subdirectory OLD on drive B: ARCE PROGA.ARC B:\OLD o Extract all files with an extension of .COM and .EXE from the archive PROGS.ARC in directory NEW\WORK on drive B, and place the them in subdirectory SAVE\TEST on drive A; replace existing file: ARCE B:\NEW\WORK\PROGS *.COM *.EXE A:\SAVE\TEST /R o Extract the file READ.ME from the archive GIZMO.ARC and display it on the console instead of writing it to a file: ARCE GIZMO READ.ME /P o Same as above, except pass the extracted READ.ME file to the LIST file viewer: ARCE GIZMO READ.ME /P | LIST /S ARCE Command Version 4.0c ------------ Mar 3, 1989 Error Messages -------------- 'filename - premature EOF reading ' Data is missing from the archive file. The program is terminated. 'filename - unable to set file datestamp' The file datestamp is set to the current date and time, and the next archive member is processed. 'filename - WARNING: file CRC does not match!' The extracted member is left on the output disk, and the next archive member is processed. The file is probably invalid but is left on the disk for your examination. 'Invalid filespec(s)' The filespec syntax is incorrect. The filename part may be from 1 to eight characters, and may include the ? or * wildcard characters. The extension may be none to three characters, and may include wildcards. There is a maximum of 16 filespecs allowed. The program terminates. 'filename - file already exists. Overwrite it? (y/N) ' The member being extracted already exists. If you are using a data path utility, the file may not actually be in the subdirectory be used for output. Respond with the letter Y to over-write the existing file, or respond with the letter N to skip this member and continue to the next. 'Abort: Stack overflow' The member being extracted has invalid data. The program is terminated. 'filename - invalid decode tree count' The member being extracted has invalid data. The program is terminated. ARCE Command Version 4.0c ------------ Mar 3, 1989 Error Messages (cont'd) -------------- 'filename - new archive format 7 not yet supported' Format 7 is a special file compression method used internally by SEA, the authors of ARC. Processing continues with the next archive member. 'Unable to open archive > arcname' The specified ARC archive file was not found, or was inaccessible. The program terminates. 'CREATE failed > filename' There was insufficient directory space, or a failure accessing the output disk. The program terminates. 'Invalid archive format!' The archive file data is invalid. The program terminates. 'Incorrect DOS version' Version 2.0 or later of PC DOS must be used. The program terminates 'Not enough memory.' A minimum of 112k bytes of memory is required. The program terminates. 'I/O error reading from arcname' An incorrectable error occurred attempting to read data from the archive file. The program terminates. 'I/O error writing or disk full > filename' There was not enough disk space to write the complete archive member. The partially extracted file is scratched and the program terminates. ARCE Command Version 4.0c ------------ Mar 3, 1989 Error Messages (cont'd) -------------- 'No matching file(s) found' No archive files were found that matched the supplied filename specifications. The program terminates. 'filename - ERROR: invalid file codes' An error was detected while attempting to decode a crunched file. Either some data bytes are invalid, there are extra bytes, or there are bytes missing. The archive is invalid. ARCE Command Version 4.0c ------------ Mar 3, 1989 Version history --------------- 1.1 - 1/13/86 -initial release 2.00, 04/08/86 - fine tuning of I/O buffering 2.01-2.05, 4-20 thru 9/9/86 - improve unsq, correct disk full message 2.06, 9/17/86 - release from testing 2.07, from 9/19 - not released 2.08, 12/31/86 - added /P, /Q; fixed /R with redirection 2.09, 1/5/87 - correct closing of output if /P used; require return (enter key) for over-write prompt - add more validity checking of member headers 2.10, 1/6/87 - correct use out output file specification 2.11, 1/24/87 - some cosmetics, wrong banner version and date 3.0a, 3/16/87 - added /G for password encryption - added /T for integrity checking only - correct loop in command line parsing - internal optimization - make intergity checking more robust 3.0c, 3/23/87 - improve extracting with file selection - minor fixes and cosmetic changes 3.0d, 3/29/87 - correction to unsqueeze 3.0e, 4/02/87 - correct loop with invalid archives - insure errorlevel non-zero if any errors - correct loop in command line processing 3.0f, 5/31/87 - correct false 'disk full' error message when using /p (piping) option - correct failure to extract all files from a garbled (/g) archive 3.1a, 9/10/87 - cosmetic changes 3.1b, 9/16/87 - unsquashing version released 3.1c, 2/06/88 - lessen memory requirement to 50k | 4.0a, 2/06/89 - add subdirectory support via /Z option | 4.0b, 2/28/89 - change meaning of /Z to /5; | correct name used for /Z output directories | 4.0c, 3/03/89 - correct mkdir error without /5 ARCE Command Version 4.0c ------------ Mar 3, 1989 Notices ------- ARCE (c) Copyright 1986-1989 by Wayne Chin and Vernon D. Buerg ALL RIGHTS RESERVED. ARCE is free, but it is a copyrighted work and may be distributed only pursuant to this license. Permission is hereby granted to reproduce and disseminate ARCE so long as: (1) No remuneration of any kind is received in exchange; and (2) Distribution is without ANY modification to the contents of ARCE.COM and all accompanying documentation and/or support files, including the copyright notice and this license. No copy of ARCE may be distributed without including a copy of this license. Any other use is prohibited without express, written permission in advance. Vernon D. Buerg 139 White Oak Circle Petaluma, CA 94952 CompuServe: 70007,1212 Data/BBS: 707-778-8944 707-778-8841 For use by corporations, institutions, or for profit, contact System Enhancement Associates for licensing information. System Enhancement Associates 21 New Street Wayne, NJ 07470 ‰&éА’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ee”)   ī į ing > ’’ extract Extract un-PackunSqueezuncrunchunCrunchUncrunchUnCrunchUnSquash$- error writing file, or disk full (x). ’- unable to set file datestamp’- WARNING: file CRC does not match!’- ERROR: invalid file codes’ Invalid filespec(s)’ No matching file(s) found.’Insufficient memory.’Not enough memory.’- invalid decode tree count’ - okay’ - file already exists. Overwrite it? (y/N) ’ ’ ’@öu²“Ķ!ŗōėŒČŽŲ‹&čõŗŒČŽŲ‹&čēėŒČŽŲ‹&ė.‹&€>tŗ³čÉöu²“Ķ!ž“L Ķ!“0Ķ!¢<sŗ3ė®¾€+É uŗ"č‘ŗ©č‹Ęė©ŗ&č~čh€>uĒĶųĆ¾F¬< t< į÷ćČæŖ¬< t<,t < vŖāšėč‹÷‹Ļéż¬<\t <:t<.t āńüø.A«øRC«2ĄüŖčréĻŗ³é!’VWQ恰/ņ®uQćOĘE’ €}ž uĘEž ‹÷¬EWQ° ± óŖY_»¬< w< t+āõė'N¬< tl< vj<,tf€<:tv<\tr<*uQ‹Ė°?óŖ+ŪYė_[^YĆ<.tEƒĒ¬< t$< v"<,t<*u Q‹Ė°?óŖ+ŪYė >IN¬< t< tŖāō¾ņ€>ó:t¾ō€< v €}’\t°\Ŗ‰>@‰>B2ĄŖé`’ŗ@»”½Ś±Óė“JĶ!s źėŗŠé:ż‰€¼’¼‰&»ąöu» “HĶ!rśƒūr£„±Óćs»’’‰x‰†ėŗåéūüŗUčē č séż3Ą£š£œ£œ£ž£~£f£ Ē‚č sĖčž s č‡ žėĮ”~f)hĒ~Š"€ūt €ūt@€ūté’čW ė•ö uæŗču ė End of subdirectory file.’”B£@ė“ö uŒŗ;čB ė! Processing subdirectory file: ’‹>@‰>B¾#¹ ¬ ĄtŖāų°Ŗ‰>@čĀ ‹>čų é9’Š"æš¾#¹ ¬ ĄtŖāųėóŖ°’Ŗ¾š‹>@¹ ó¤čT sé‚2’ŃćÆdŃćŃć·¢æŒ¹ó„ŗŠč§ čØ sė]’Včžö u°‹4‹6‹ˆ“WĶ!sŗ>čy č_ ” ;8töu²“Ķ!ŗ]čY žėötŗčF 釾‹°‹®žƒŃœ°‹“BĶ!‰œ£œĒféZžčQ r!WÄ>‚;>†u čfs_ė 3’üŖ‰>‚_ėŚĆĘ1éŌś+ĄŠŲč r%<t"WÄ>‚;>†u č/s_ėk3’üŖ‰>‚_ėŌĆčó rś Ąt/QŠČžÉ*ķŠĆWÄ>‚;>†u čū s_ė73’üŖ‰>‚_āßY2Ąė›°WÄ>‚;>†u čÓ s_ė3’üŖ‰>‚_2Ąéu’Ę3é?ś‰& čˆ Šųčƒ †Ē†ü=vŗųéDś‹Čæ’čl Šųčg †Ē†ü€ü’uöŠ«čX ŠųčS †Ē†ü€ü’uöŠ«āÖ+Ņ+ĄÄ>‚čZ<tŖ;>†r‰>‚čN æsė9Ššėąč: Ąu°ėÜQ‹ČIŠĘŖ;>†r‰>‚č$ æsėāéYėµ‰>‚‹& ĆĘ4鏳+ŪžŹxŃéŃÓŃ拟’ Ūyī€’žtÕ+ĄĆĆčæ ŠČčŗ Šč²ėŚ’’’’?ĒĘ ’čČč–rn‹Ł‹éŃåéŃåÅ’ŠFč\ ŠŠč{rS‰‘ ‹éŃåéŃåÅ’€~tŠņ‹Ėʐ ‹éŃåéŃåÅ’č)€> u ʐ ŠÖŠĘč ƒ> tŠĀ腋‘ ėØƃ~’uŠVŠĀėU‹N‹éŃåéŃåÅ’ü’{v 茒]ŠFčŃ ĆŗÉ č“ ė Abort: Stack overflow’é¼ų¾ æ’ü¹ó„¾’¹ż/ó„Ē ¹2Ą»’’螥āłĆ’ PR*äƀĢ÷ą€ā$Ą Ā†ÄŃĄŃĄ‹ųZX‹ļŃåļŃåÅ’€~tĘFĒF’’‰^ˆFƋnƒż’t‹ż‹ļŃåļŃåÅ’ėč‹÷ƒĘeę’‹īŃåīŃåÅ’€~uFžtƒÅėī½’3öėēĘFĒF’’‰^ˆF‹ļŃåļŃåÅ’‰vĆP  <’tŠčč÷ r(ŠČĘ ’XĆčé rŠččā r¢ €& ŠČŃéŃéŃéŃéųXĆŗö č‡ė% archive format 7 not yet supported’łĆ3Ą££Čü¹æ’[ŖžĄāūø£¾° ¢Ēø’£Ä”Č:ąrNæŌ2ķŠĒ8.u ;~)~‹6zŃés¤ó„‰6z ĒŠČėč> rŖāų Ē*ČöŁtrŠįŠįŠį*ČžĮ‰Čµ2’ŠēŠÉŠĖŠėŠėŠė·Ō¬€įÓčŠĒÉ*ŻŁöŁĶ:Ż| 2öŠFÓā ĀĶ*Ż2öŠ"—ŹÓā Ā=uø£¾° ¢Ēø’£ÄéP’ėĆ¢Ę£ĄŒÅÄ>‚;>†u čĪ sŽÅėä3’Ŗ‰>‚ŽÅ”Č:ąrNæŌ2ķŠĒ8.u ;~)~‹6zŃés¤ó„‰6z ĒŠČėč`rŖāų Ē*ČöŁt”ŠįŠįŠį*ČžĮ‰Čµ2’ŠēŠÉŠĖŠėŠėŠė·Ō¬€įÓčŠĒÉ*ŻŁöŁĶ:Ż| 2öŠFÓā ĀĶ*Ż2öŠ"—ŹÓā Ā=uø£¾° ¢Ēø’£ÄéP’£Ā‹Ų¾’[撛‹ĻżĒ¼;¾r ĘŖ‹ĄŠŖ ’t<Ń拟’ŠŖ ’t/Ń拟’ŠŖ ’t"Ń拟’ŠŖ ’tŃ拟’’¼>¼rĄé“¢Ę‹÷Fü¬Š&ŒÅÄ>‚;>†u čˆsŽÅ非3’Ŗ‰>‚ŽÅ;ńvŲ”¾= s@‹Ų@£¾;Äv$ŠĒžĮ€ł |± ø ėøÓąHˆĒ£Ä3Ą£Č Ęˆ‡’[”ĄŃ扇’”Ā£Ąédž?’čÕséå< téß3Ą££Čü¹æ’[ŖžĄāūø£¾° ¢Ēø’£Ä”Č:ąrNæŌ2ķŠĒ8.u ;~)~‹6zŃés¤ó„‰6z ĒŠČėčkrŖāų Ē*ČöŁtrŠįŠįŠį*ČžĮ‰Čµ2’ŠēŠÉŠĖŠėŠėŠė·Ō¬€įÓčŠĒÉ*ŻŁöŁĶ:Ż| 2öŠFÓā ĀĶ*Ż2öŠ"—ŹÓā Ā=u5ø£¾° ¢Ēø’£ÄéP’ėĆüöu²“Ķ!ŗč—žXé¢öĆ¢Ę£Ąč¢”Č:ąrNæŌ2ķŠĒ8.u ;~)~‹6zŃés¤ó„‰6z ĒŠČėčŠrŖāų Ē*ČöŁtÆŠįŠįŠį*ČžĮ‰Čµ2’ŠēŠÉŠĖŠėŠėŠė·Ō¬€įÓčŠĒÉ*ŻŁöŁĶ:Ż| 2öŠFÓā ĀĶ*Ż2öŠ"—ŹÓā Ā=uø£¾° ¢Ēø’£ÄéP’£Ā‹Ų¾’[撛‹ĻżĒ¼;¾r ĘŖ‹ĄŠŖ ’tCŃ拟’ŠŖ ’t6Ń拟’ŠŖ ’t)Ń拟’ŠŖ ’tŃ拟’’¼>¼ārĄé½ž¢°ėj¢Ę‹÷Fü¬Š&€üuR ĄtäQŠČ*ķžÉ ‹>‚ł;>†wŒÅÄ>‚óŖ‰>‚ŽÅė!ŒÅÄ>‚;>†u č|sŽÅédž3’Ŗ‰>‚ŽÅā߈Yė&£<tŒÅÄ>‚;>†u čMsŽÅé5ž3’Ŗ‰>‚ŽÅ;ńwéw’”¾=s@‹Ų@£¾;Äv$ŠĒžĮ€ł |± øėøÓąHˆĒ£Ä3Ą£Č Ęˆ‡’[”ĄŃ扇’”Ā£Ąéüż €>DuĆü¾šæś° ¹ óŖæś¬<t<.t y¾€¹ ¬Ŗ<tāų°’ŖųĆSŗ°€>r @“=Ķ!r>£ötŗūč‚ė Testing: ’ėŗčlė Archive: ’ŗčWų[Ćŗ/čNė Unable to open archive > ’é-šS‹ƒūv“>Ķ!Ē[Ćö u ‹ˆƒūv“>Ķ!ĒˆĆSöuötĒˆ² “Ķ!² “Ķ!ĘĒ [ĆöuK‹>°€>r @“=Ķ!r6=v‹Ų“>Ķ!ŗč”ĘS° ŗQ“ Ķ!ŠS€śyt€śYtł[ĆŗNč|+ɉ ‹>“<Ķ!r £ˆĘ[Ćŗ!č\ė - CREATE failed.’éXļSöu&öuö u€>ņt‹>@ĒE’’“9‹>Ķ!‹>@ĒE’\ĘE’[ĆVSQŒČŽŲü‹ņ+ɬ<’tAėų»“@Ķ!Y[^ĆSQR€”€£0Ē2”~f)h+Ą£~¢¢čĢr ‹.~<t-ėńŗč|’ė === Invalid archive format!’łéŠč’rŠ¢"<tK<t< w² Ąt?¹ æ#čtr²Ŗāų¹ €>"t±æXč]r›Ŗāųæ0¾X¹ó¤€>"u¾0æ:„„ ¢¢‹œ‹š+fƒŁ+~ƒŁ‰œ‰ž¾"æ ¹ó„ųœ€&ļZY[ƃ>~~‹6z¬’~‰6z€>u Ćč!°säĆS*’ŠžĆ:r*Ūˆ2‡[ųĆSQR‹‹€ƒ>2|-u‹0 Ņt#;Źv‹ŹčLr Ąt£~‰z)0ƒ2ZY[ĆĒ~łėóŗIč4žė I/O error reading from ’éķ”¼ƒ>ft-;fv”fĒf‹hhųƋhh)f‹ĮųĆQŗ”¼‹€öt €>Dt¹@“?Ķ!£f‰h+É+Ņ°“BĶ!‰š£œYƒ>fułĆė‹PSQRVW‹ˆÅ‚ć+Ņ.öu#“@Ķ!r;Įt.öuėy_^ZY[XĒ‚Ć3öæ".‹ Ńés¬2ĀŠŲ2’ŠÖŠ÷Ńć.3ćC­2ĀŠŲ2’ŠÖŠ÷Ńć.32āŠÜ2’ŠÖŠ÷Ńć.3It!­2ĀŠŲ2’ŠÖŠ÷Ńć.32āŠÜ2’ŠÖŠ÷Ńć.3ā½.‰ ė‡.ĘFé×ė€>"tŠ&€üt&£<txŒÅÄ>‚;>†u č(’sŽÅė 3’Ŗ‰>‚ŽÅĆ Ąu ¢°čÕ’ĆQŠČ*ķžÉ ‹>‚ł;>†wŒÅÄ>‚óŖ‰>‚ŽÅė!ŒÅÄ>‚;>†u čÖžsŽÅé¾÷3’Ŗ‰>‚ŽÅā߈YƐĮĄĮ@ĆĄ€AĀĘĄ€AĒĮŁÄ@ĢĄ € AĶĮĻĪ@ ĮŹĖ@ ÉĄ €AČŲĄ€AŁĮŪŚ@ĮŽß@ŻĄ€AÜĮŌÕ@ץ€AÖŅĄ€AÓĮсŠ@šĄ0€1Ań3Įóņ@26Įö÷@7õĄ5€4Aō<Įüż@=’Ą?€>AžśĄ:€;Aū9Įłų@8(Įčé@)ėĄ+€*AźīĄ.€/Aļ-Įķģ@,äĄ$€%Aå'Įēę@&"Įāć@#įĄ!€ Aą Ą`€aA”cĮ£¢@bfĮ¦§@g„Ąe€dA¤lĮ¬­@mÆĄo€nA®ŖĄj€kA«iĮ©Ø@hxĮø¹@y»Ą{€zAŗ¾Ą~€Aæ}Į½¼@|“Ąt€uAµwĮ·¶@vrĮ²³@s±Ąq€pA°PĮ‘@Q“ĄS€RA’–ĄV€WA—UĮ•”@TœĄ\€]A_ĮŸž@^ZĮš›@[™ĄY€XA˜ˆĄH€IA‰KĮ‹Š@JNĮŽ@OĄM€LAŒDĮ„…@E‡ĄG€FA†‚ĄB€CAƒAĮ€@@ ARCE Copyright (c) 1986-89 by Wayne Chin and Vernon D. Buerg. Extract ARC files, Version 4.0c, 3/03/89. ALL RIGHTS RESERVED. ’ Please refer all inquiries to: System Enhancement Associates 21 New Street, Wayne NJ 07470 You may copy and distribute this program freely, provided that: 1) No fee is charged for such copying and distribution, and 2) It is distributed ONLY in its original, unmodified state. If you like this program and find it of use, then your contribution to SEA will be appreciated. If you are using this product in a commercial environment, then the contribution is not voluntary. Usage: arce d:path\filename.ext [filespecs...] [d:\outpath] [/R][/P][/Q][/T] [/Gpswd] d: drive and path are optional ext defaults to .ARC /R specifies reuse existing files /P extracts files to standard output /Q suppresses beeps and bells /T test archive integrity only /5 do not create subdirectories /G supplies encryption password, e.g. /Gpswd ’You must use DOS version 2.0 or higher. ’‰&bé±€>iu²“Ķ!ŗJėŒČŽŲ‹&bč,ŗpŒČŽŲ‹&bčė.‹&b€>ktŗćč €>iu²“Ķ!øLĶ!øLĶ!’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’((Ķ~ffg ŗ l ing > ’’ extract Extract un-PackunSqueezuncrunchunCrunchUncrunchUnCrunchUnSquash- error writing file, or disk full. ’- premature EOF reading ’- unable to set file datestamp’- WARNING: file CRC does not match!’ Invalid filespec(s)’ No matching file(s) found.’Shrink failed.’Not enough memory.’- invalid decode tree count’ - CREATE failed.’ - WARNING: Squash method not supported!’ - file already exists. Overwrite it? (y/N) ’ ’ ’“0Ķ!<sŗ$écż¾€+É uŗxč} ĘkéYżčU¾F¬< įūæpŖ¬< t<,t < vŖāšėč|‹÷‹Ļépż¬<\t <:t<.t āńüø.A«øRC«2ĄüŖčķ réŗćéōüVQ恰/ņ®u8ć6ĘE’ €}ž uĘEž ‹÷¬|WQ° ± óŖY_»¬< wāłéN¬< th< vf<,tb€<:tw<\ts<*u Q‹Ė°?óŖ+ŪYė<.t|ƒĒ¬< t$< v"<,t<*u Q‹Ė°?óŖ+ŪYė |‰>¼INó¤°\Ŗ‰>¾2ĄŖėŻ»ö±Óė“JĶ!r+¼äµ‰&b» “HĶ!rśƒūr£Ü±Óćs»’’‰Ņ‰Žėŗé«ūŗé„ūŗµčČ čĄsé¤ūĒŲĒŌóµčŠsĖčÅ sėŠt Ūuč ėĢæņ¾u¹ ¬ ĄtŖāųėóŖ°’Ŗ¾ņ‹>¾¹ ó¤čĀrd2’ŃćÆ¾ŃćŃć·śæä¹ó„ŗāčS čģrA’Vč~ ‹†‹ˆøW‹ąĶ!sŗ‰č/ čµ”f;Št€>iu²“Ķ!ŗØč é_’‹„‹‚+ŲƒŁøB‹nĶ!ĒŲĒŌóµé8’€>iu²“Ķ!ŗVčÓ‹‚‹„ Éu ŅuĆč r/WÄ>Ś;>Žu čä s_ė 3’üŖ‰>Ś_ƒéƒŚ ÉuŃ ŅuĶĆŗpé_śé:ś‹‚‹„+ĄŠŲ Éu ŅuĆč/ ƒéƒŚ<t)WÄ>Ś;>Žu čŠ s_ėw3’üŖ‰>Ś_ ÉuÄ ŅuĄĆčłƒéƒŚ Ąt0QŠČžÉ*ķŠĆWÄ>Ś;>Žu čK s_ė83’üŖ‰>Ś_āŽY2Ąė‚°WÄ>Ś;>Žu č" s_ė3’üŖ‰>Ś_2Ąė”鉳‰&d莊ąč‰†ą=vŗ"鑳‹ČæäčtŠąčo†ą€ü’uöŠ«čbŠąč]†ą€ü’uöŠ«āŚ+Ņ+ĄÄ>Śčc<tŖ;>Žr‰>ŚčØæsėGŠšėßčB Ąu°ėŪQ‹ČIŠĘŖ;>Žr‰>Śč}æsėāčYė³‰>Ś‹&d Ét’Ų’ŌĆéÖų+ŪžŹxŃéŃÓŃ拟ä Ūyī€’žtĪ+ĄĆĆčĀŠČč½Šč²ėŚ’’’’?ĒlĘ_’čÓč²rv‹ŁQŃį‹éŃįéÅäYŠFč.ŠŠč•rY‰ńQŃį‹éŃįéÅäY€~tŠņ‹ĖĘšQŃį‹éŃįéÅäYč*€>šu ĘšŠÖŠĘčąƒ>]tŠĀ舋ńė¢Ćƒ~’uŠVŠĀėU‹NQŃį‹éŃįéÅäYüätv čŲ’]ŠFč›Ćŗ, č)ė Abort: Stack overflow’éļ÷¾`æäü¹ó„¾ä¹ż/ó„Ē]¹2Ą»’’螥āłĆ’]PR2äĆ ÷ąŃčŃčāŃŹŃŹ ĀŃčŃčŃčŃč‹ųZXWŃē‹ļŃēļÅä_€~tĘFĒF’’‰^ˆFƋnƒż’t‹żWŃē‹ļŃēļÅä_ėę‹÷ƒĘeę’VŃę‹īŃęīÅä^€~uFžtƒÅėī½ä3öėēĘFĒF’’‰^ˆFWŃē‹ļŃēļÅä_‰vĆPSR€>_’tŠ._čÉr'ŠČĘ_’ėč»rŠčč“rP$¢_XŠČŃéŃéŃéŃéųZ[XĆŗp čåė& archive format 7 not yet supported’łĆ?’čFséō< téķ3Ą£l£¢ ü¹æś;ŖžĄāūø£˜ ° ¢” ø’£ž ”¢ :ąr_æ® 2ķŠ” ”‚‹„+ĮƒŚ|)‹Ų+Ł|!£‚‰„‰Ų‹6ŌŃés¤ó„‰6Ō ” ŠČėčĖrŖāų ” *ČöŁtpŠįŠįŠį*ČžĮ‰¢ µ2’Š£ ŠĖŠėŠėŠė·® 2䬀įÓ芔 £ *ŻŁöŁĶ:Ż| 2öŠFÓā ĀĶ*Ż2öŠ"—¤ Óā Ā=uø£˜ ° ¢” ø’£ž é?’Ć¢  £š č”¢ :ąr_æ® 2ķŠ” ”‚‹„+ĮƒŚ|)‹Ų+Ł|!£‚‰„‰Ų‹6ŌŃés¤ó„‰6Ō ” ŠČėčłrŖāų ” *ČöŁtžŠįŠįŠį*ČžĮ‰¢ µ2’Š£ ŠĖŠėŠėŠė·® 2䬀įÓ芔 £ *ŻŁöŁĶ:Ż| 2öŠFÓā ĀĶ*Ż2öŠ"—¤ Óā Ā=uø£˜ ° ¢” ø’£ž é?’£œ ‹Ų¾ś;æc‹Ļż;˜ r   Ŗ‹š ŠŖ ’t"Ń拟äŠŖ ’tŃ拟äŠŖ ’tŃ拟äė×¢  ‹÷Fü¬Š&l€üu= Ąu¢l°ė9QŠČ*ķžÉ mŒÅÄ>Ś;>Žu č†sŽÅé­ž3’Ŗ‰>ŚŽÅā߈lYė&£l<tŒÅÄ>Ś;>Žu čWsŽÅé~ž3’Ŗ‰>ŚŽÅ;ńv”˜ =s@‹Ų@£˜ ;ž v$Š” žĮ€ł |± øėøÓąHˆ” £ž 3Ą£¢    ˆ‡ś;”š Ń扇䔜 £š é*ž €>{uĆü¾ņæ– ° ¹ óŖæ– ¬<t<.t ¾Ņ¹ ¬Ŗ<tāų°’ŖųĆSŗpø=Ķ!r"£nŗˆčĶė Archive: ’ŗpč·ų[Ćŗ§č®ė Unable to open archive > ’éUņS‹n Ūt“>Ķ!Ēn[Ƌą Ūt“>Ķ!ĒąĆS€>jtĒą[ƀ>hu-‹¼ø=Ķ!r"‹Ų“>Ķ!ŗč6ø Ķ!é×ńVSQ‹ņ+ɬ<’tAėų“@»Ķ!Y[^Ć¹’’č¢r<t,ėõŗƒčŅ’ė  === Invalid archive format!’łĆčmrĻ¢t< wČ ĄtM¹ æučWr»Ŗāų¾u¹ ¬<t<.t< r—<`w“āķ¹ €>tt±æ‚č'r‰Ŗāų€>tu¾æ„„ųƃ>‚t%ƒ.‚ƒ„ƒ>Ųwčr‹6Ō¬’Ų‰6Ōųƃ>„uŌłĆPSQR‹n¹@ŗóµ“?Ķ!r Ąt£ŲĒŌóµZY[XĆłėųŗkčźžė I/O error reading from ’铹PSQRVW‹ąÅŚć3Ņ“@Ķ!r ;Įu3öč‡_^ZY[XĒŚĆéJš€>ttŠ&l€üt'£l<t]ŒÅÄ>Ś;>Žu č„’sŽÅė 3’Ŗ‰>ŚŽÅĆ Ąu ¢l°čŌ’ĆQŠČ*ķžÉ mŒÅÄ>Ś;>Žu čn’sŽÅė 3’Ŗ‰>ŚŽÅā߈lYĆĮĄĮ@ĆĄ€AĀĘĄ€AĒĮŁÄ@ĢĄ € AĶĮĻĪ@ ĮŹĖ@ ÉĄ €AČŲĄ€AŁĮŪŚ@ĮŽß@ŻĄ€AÜĮŌÕ@ץ€AÖŅĄ€AÓĮсŠ@šĄ0€1Ań3Įóņ@26Įö÷@7õĄ5€4Aō<Įüż@=’Ą?€>AžśĄ:€;Aū9Įłų@8(Įčé@)ėĄ+€*AźīĄ.€/Aļ-Įķģ@,äĄ$€%Aå'Įēę@&"Įāć@#įĄ!€ Aą Ą`€aA”cĮ£¢@bfĮ¦§@g„Ąe€dA¤lĮ¬­@mÆĄo€nA®ŖĄj€kA«iĮ©Ø@hxĮø¹@y»Ą{€zAŗ¾Ą~€Aæ}Į½¼@|“Ąt€uAµwĮ·¶@vrĮ²³@s±Ąq€pA°PĮ‘@Q“ĄS€RA’–ĄV€WA—UĮ•”@TœĄ\€]A_ĮŸž@^ZĮš›@[™ĄY€XA˜ˆĄH€IA‰KĮ‹Š@JNĮŽ@OĄM€LAŒDĮ„…@E‡ĄG€FA†‚ĄB€CAƒAĮ€@@æ2.‹fŃés¬2ĀŠŲ2’ŃćŠÖ2ö.3ć!­2ĀŠŲ2’ŃćŠÖ2ö.32āŠÜ2’ŃćŠÖ2ö.3āß.‰fƐ ARCE 2.08 - Extract ARC files - 12/31/86 (C) Copyright 1986 by Vernon D. Buerg and Wayne Chin; All rights reserved. Please refer all inquiries to: System Enhancement Associates 21 New Street, Wayne NJ 07470 You may copy and distribute this program freely, provided that: 1) No fee is charged for such copying and distribution, and 2) It is distributed ONLY in its original, unmodified state. If you like this program and find it of use, then your contribution to SEA will be appreciated. If you are using this product in a commercial environment, then the contribution is not voluntary. Usage: arce d:path\filename.ext [filespecs...] [d:\outpath] [/R][/P][/Q] d: drive and path are optional ext defaults to .ARC /R specifies reuse existing files /P extracts files to standard output /Q suppresses beeps and bells filename and filespecs may contain * and ? wildcards ’You must use DOS version 2.0 or higher. ’NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN. ŠE S".. ŠE SEXPLOSIVCOM FŠS #č#EXPLOSIVDOC KŠS ,y,EXPLS122ZIP OŠS 8€3čKčœ€>u učm€>u cu ¹É¾v ė>€>u hu ¹w¾?ė.€>u mu ¹¦¾¶ė€>u vu ¹ę¾\ė€>u du¹¦¾B!滘:Ēó¤ĘGĆøP’ć“ ŗcĶ!øLĶ!øĶ<uK€ūu ŗ;Ęu mĆ€ūu ŗmĘu vĆ€ū u ŗšĘu cĆ€ū u ŗÉĘu cĆ€ū u ŗüĘu cĆ“³Ķ€ūt'€’u ŗ*Ęu mĆ Ūu ŗUĘu mĆŗĘu vĆŗŌčsŗ“čwsŗ`Ęu ĆŗĒĘu cĆ²ŗģ$€Šą¹€ģ$€:ąįłć ŗūĘu hĆŗ5Ęu dĆø5Ķ!Œ‡‰…“%ŗ{Ķ!€>„łø%‹…Ž‡Ķ!Ćž„.’.…°īBģŠą°fī¹āžģ†ąī€üftłĆč®¾1č„sč¾,čysčĀ¾#čns½čč‚¾'č`s½ųčt¾čRsĘu h¾čDsĘu m¾č6sĘu v¾č(sĘu c¾čsĘu d¾4č sĘƒčHĆæ€VF¹¬A< uś^QWVó¦^_ć YG€=ušųĆYłĆ¾æ€¬< t the color ( 1 - 15 ) d the delay factor ( 1 - 255 ) e the number of explosions ( 1 - 15 ) m become a screen saver, wait n minutes ( 1 - 30 ) p number of text pages to save ( 1 - 4 ) Press Ctrl-Alt-Shift to turn screen saver on. $é•EXPLOSIV 1.2 0ö’ģ’ā’Ų’Ī’’6V’6{ŒĖ‹T ĄtæZŽ}¾P¹ó¤3öŽĆ‹śė¾ZŽ}æP¹ó¤3’ŽŪ‹ņYó¤ƃśĆ^ZĆRV‹Ś—9€Ö¾å­ ĄtźŠÜöā“öā±ÓčÓėRŠĖµPPŃčŃŪŃė‹Óā’?ŃėöåŲXöå]Pø€į€ńŅąŅĢY’åć’?&+Ś&'+Ł‹Ė÷Łį ć’÷Į ƒÉPŁ&'Ś&Zė5’’ć’?& +Ś& '+Ł‹Ė÷Łį ć’÷Į ƒÉPŁ& 'Ś& Zé[’¾ä` Ąh€>tQŠ.2Ƀ>Qƒ>QāōYƒ>QFæ‹ Ņu.ƒ<u¾­‰Eƒś2½÷č÷žƒś |ƒź ½'č鞃ś2|Ē’’’ƒĒ;>|æė’ĆöOĒ{øŽ}&ŠI€ū}5ˆS&Š>bˆ>z°č]žøĶøøŽĄčW’2ä SĶ2ĄčDž“ zĶė€ūuĒ{°ė¾öOƌȎŲ€>tč“’’6Q”€‹‚‹„‹†‹>ˆ‹6Š‹.ŒŽŽ’6–’6”’6’ŽĻ€>Pt žPĒQ’Qt ’Q.’.l£€‰‚‰„‰†‰>ˆ‰6Š‰.ŒŒŽ’”–’6–¹,QėæP.Ž} $< uä`<uĘ<0uĘėĘP’6QX.’.p€>O~’6Q.’.t’6Q.’.x’6Q.’.|˜Zż Ø 05Æ/é,ž .ń&€S+ąPWŠ0 T! n*×3Q.9*w?(44’ X1Č5ūd,H+ 165 Q6(ȍC2L&™,ļŌ-ĖŁ)é.ķ&.1&0&! !( ( !             !%)-0369;=?ACEFGHIJKLLMMNNNOOOOPPPPPPPPPPPPč~čŁø5Ķ!Œn‰l“%ŗrĶ!ø 5Ķ!Œr‰p“%ŗÕĶ!ø5Ķ!Œv‰t“%ŗĶ!ø5Ķ!Œz‰x“%ŗ-Ķ!ø5Ķ!Œ~‰|“%ŗ>Ķ!’6QĒø1‹XĶ!»`ŠO ˆO‹Oˆ‹O‰‹Oø÷į£Vø÷įZ£X‹OćčĆø<öń3ŪŠČ2ķŗ‹ś+ŁƒūÄ~ ‹Ć«ƒĒƒĀėī‰ƃ>tĆø 5Ķ!Œr‰pø %ŗÕĶ!ø5Ķ!Œv‰tĒĒTČĒV@čüø %‹pŽrĶ!øLĶ!égEXPLOSIV 1.2 0ö’ģ’ā’Ų’Ī’ƒśĆ^ZĆRV‹Ś— €Ö¾·­ ĄtźŠÜöā“öā±ÓčÓėRŠĖµZŃčPŃŪŃčŃŪ‹Óā’?ŃėöåŲXöå]Pø€į€ńŅąŅĢY’åć’&+Ś&'+Ł‹Ė÷Łį`ć’÷Į@ƒÉZŁ&'Ś&Zė5’’ć’& +Ś& '+Ł‹Ė÷Łį`ć’÷Į@ƒÉZŁ& 'Ś& ZéY’¾Qä` Ąh€>tQŠ.2Ƀ>ƒ>āōYƒ>Fæ‹ Ņu.ƒ<u¾Q­‰Eƒś2½®čõžƒś |ƒź ½Žčēžƒś2|Ē’’’ƒĒ;>|æė’ĆöŽ& I<u(“č(øøŽĄ3Ą¹@‹ųó«čh’“čŽ&‹`“ĶöĆŗæ°īŗø ät »€ ¹ ¾!ė » ¹ ¾9ŠĆī€ź­ļāü€ĀŠĆĒīƌȎŲ€>tč~’’6”R‹T‹V‹X‹>Z‹6\‹.^Ž`’6h’6f’6dŽbĻ€>t žĒ’t ’.’.>£R‰T‰V‰X‰>Z‰6\‰.^Œ`bdfh’6h¹ųQėæP.Ž $< uä`<uĘ<0uĘėĘ’6X.’.B€>~’6.’.F’6.’.J’6.’.N5-.[WW  aPR » B ¬‰Å Yƒ V YŹŲu”Ų»Ä T ‚ 9ė] XĶ/ į µGōņłKIbk „_€ ;­ « +48+ 6 + & &-. &     "    #$   !%)-0369;=?ACEFGHIJKLLMMNNNOOOOPPPPPPPPPPPPč}čĀø5Ķ!Œ@‰>“%ŗ>Ķ!ø 5Ķ!ŒD‰B“%ŗ”Ķ!ø5Ķ!ŒH‰F“%ŗįĶ!ø5Ķ!ŒL‰J“%ŗłĶ!ø5Ķ!ŒP‰N“%ŗ Ķ!’6Ēø1ŗWĶ!»`ŠO ˆ‹Oˆ‹O‰‹OćčĆø<öń3ŪŠČ2ķŗ‹ś+ŁƒūÄ~ ‹Ć«ƒĒƒĀėī‰ƃ>tĆø 5Ķ!ŒD‰Bø %ŗ”Ķ!ø5Ķ!ŒH‰FĒčüø %‹BŽDĶ!øLĶ!éjEXPLOSIV 1.2 0ö’ģ’ā’Ų’Ī’’6+’6PŒĖ‹) Ątæ/ŽR¾P¹ó¤3öŽĆ‹śė¾/ŽRæP¹ó¤3’ŽŪ‹ņYó¤ƃśĆ^ZĆRV‹Ś—€Ö¾ŗ­ ĄtźŠÜöā“öā±ÓčÓėR¹P÷įŠĖŃėŃė‹ÓŃėŲ]ŃąPø€į€ńŅąŅĢYS+ŁS+ŚSŁ‹ČŗĪ‹ÅļøļøļŠį°ļ&[&Šåļ[&[&Zė•¾Tä` Ąh€>tQŠ.2Ƀ>&ƒ>&āōYƒ>&Fæ‹ Ņu.ƒ<u¾T­‰Eƒś2‹.č0’ƒś |ƒź 3ķč#’ƒś2|Ē’’’ƒĒ;>|æė’ŗĪ3Ąļ@ļ°ļø’ļĆö$ĒPøŽR&ŠI€ū}5ˆ(&Š>bˆ>O°舞øĶø ŽĄčH’2ä (Ķ2Ąčož“ OĶė€ūuĒP°ė¾ö$ƌȎŲ€>tč“’’6&”U‹W‹Y‹[‹>]‹6_‹.aŽc’6k’6i’6gŽeĻ€>%t ž%Ē&’&t ’&.’.A£U‰W‰Y‰[‰>]‰6_‰.aŒcegik’6k¹QėæP.ŽR $< uä`<uĘ<0uĘėĘ%’6&X.’.E€>$~’6&.’.I’6&.’.M’6&.’.QmW])x.ĄH7-nQ@2] C( R°>×IĄ9ŠS‘44P±%^$ēD19#w8ß4F² (<8KŪ“*xBß&é:ŻNe”M¶č5M=ć?Ł+/A /kGé!y3ML&.2& 0 & " "() "    "    #$   !%)-0369;=?ACEFGHIJKLLMMNNNOOOOPPPPPPPPPPPPč~čįø5Ķ!ŒC‰A“%ŗGĶ!ø 5Ķ!ŒG‰E“%ŗŖĶ!ø5Ķ!ŒK‰I“%ŗźĶ!ø5Ķ!ŒO‰M“%ŗĶ!ø5Ķ!ŒS‰Q“%ŗĶ!’6&Ēø1‹-Ķ!»`ŠO ˆ$‹ć‰‹Oˆ‹O‰‹Oø÷į£+ø÷įW£-‹OćčĆø<öń3ŪŠČ2ķŗ‹ś+ŁƒūÄ~ ‹Ć«ƒĒƒĀėī‰ƃ>tĆø 5Ķ!ŒG‰Eø %ŗŖĶ!ø5Ķ!ŒK‰IĒĒ)„Ē+@čüø %‹EŽGĶ!øLĶ!é®EXPLOSIV 1.2 0ö’ģ’ā’Ų’Ī’>ŠF<|,>ˆFĆ’6`’6…ŒĖ‹^ ĄtædŽ‡¾P¹ó¤3öŽĆ‹śė¾dŽ‡æP¹ó¤3’ŽŪ‹ņYó¤ƃśĆ^ZĆRV‹Ś—C€Ö¾ļ­ ĄtźŠÜöā“öā±ÓčÓėR¹P÷įŠĖŃėŃė‹ÓŃėŲ]ŃąPø€į€ńŅąŅĢYS+ŁS+ŚSŁ‹ČŗĪ>Šf>YuöÜžĢ€ä2Ąļøļ”YļŠį°ļ&[&Šåļ[&[&Zė‚¾‰ä` Ąu€>tQŠ.2Ƀ>[ƒ>[āōYƒ>[Sæ½v‹ Ņu7ƒ<u¾‰­‰Eƒś2 ĒYč’ƒś |ƒź ĒYč’ƒś2|Ē’’蝾’ƒĒE;>|µė…ŗĪ3Ąļ@ļ°ļø’ļĆöWĒ…øŽ‡&ŠI€ū}5ˆ]&Š>bˆ>„°čhžøĶø ŽĄč;’2ä ]Ķ2ĄčOž“ „Ķė€ūuĒ…°ė¾öWƌȎŲ€>tč“’’6[”™‹›‹‹Ÿ‹>”‹6£‹.„Ž§’6Æ’6­’6«Ž©Ļ€>Xt žXĒ[’[t ’[.’.…£™‰›‰‰Ÿ‰>”‰6£‰.„Œ§©«­Æ’6ƹ4QėæP.Ž‡ $< uä`<uĘ<0uĘėĘX’6[X.’.‰€>W~’6[.’.’6[.’.‘’6[.’.•±\])x.ĄH7-nQ@2] C( R°>×IĄ9ŠS‘44P±%^$ēD19#w8ß4F² (<8KŪ“*xBß&é:ŻNe”M¶č5M=ć?Ł+/A /kGé!y3ML&.2& 0 & " "() "    "    #$   !%)-0369;=?ACEFGHIJKLLMMNNNOOOOPPPPPPPPPPPP č~čŻø5Ķ!Œ‡‰…“%ŗzĶ!ø 5Ķ!Œ‹‰‰“%ŗŻĶ!ø5Ķ!Œ‰“%ŗĶ!ø5Ķ!Œ“‰‘“%ŗ5Ķ!ø5Ķ!Œ—‰•“%ŗFĶ!’6[Ēø1‹bĶ!»`ŠO ˆW‹Oˆ‹O‰‹Oø÷į£`ø÷į\£b‹OćˆčĆø<öń3ŪŠČ2ķŗ‹ś+ŁƒūÄ~ ‹Ć«ƒĒƒĀėī‰ƃ>tĆø 5Ķ!Œ‹‰‰ø %ŗŻĶ!ø5Ķ!Œ‰ĒĒ^åĒ`@čüø %‹‰Ž‹Ķ!øLĶ!éØEXPLOSIV 1.2 ’6V’6{ŒĖ‹T ĄtæZŽ}¾P¹ó¤3öŽĆ‹śė¾ZŽ}æP¹ó¤3’ŽŪ‹ņYó¤Ć“2’Ķ‰N¹ “Ķä` Ą¹’’ƒ>Qƒ>Qāōƒ>Q~ä“‹NĶĆöMĒ{øŽ}&ŠI€ū}+ˆS&Š>bˆ>z°čU’2ä SĶč–’2ĄčF’“ zĶė€ūuĒ{°ėČöMƌȎŲ€>tč’’6Q”“‹•‹—‹™‹>›‹6‹.ŸŽ”’6©’6§’6„Ž£Ļ€>Pt žPĒQ’Qt ’Q.’.£“‰•‰—‰™‰>›‰6‰.ŸŒ”£„§©’6©¹*QėæP.Ž} $< uä`<uĘ<0uĘėĘP’6QX.’.ƒ€>M~’6Q.’.‡’6Q.’.‹’6Q.’.«;č~č£ø5Ķ!Œ‰“%ŗpĶ!ø 5Ķ!Œ…‰ƒ“%ŗÓĶ!ø5Ķ!Œ‰‰‡“%ŗĶ!ø5Ķ!Œ‰‹“%ŗ+Ķ!ø5Ķ!Œ‘‰“%ŗ<Ķ!’6QĒø1‹XĶ!»`ŠO ˆM‹O‰‹Oø÷į£Vø÷į;£Xƃ>tĆø 5Ķ!Œ…‰ƒø %ŗÓĶ!ø5Ķ!Œ‰‰‡ĒĒT„ĒV@čBżø %‹ƒŽ…Ķ!øLĶ!åååååååååååååååååååååååå EXPLOSIV.COM - GRAPHICS SCREEN SAVER - VERSION 1.22 Reidar Gresseth and Chris Hook Februray 20 1990 Explosiv copyright (c) Reidar Gresseth & Chris Hook 1989, 1990. This product may be distributed freely to users. It may not be sold or packaged, either individually, or as part of any other product without the express written consent of the authors. Any financial remunerations may be paid to the authors. This product may not be changed or altered and then distributed without the express written consent of the authors. DISCLAIMER: Explosiv is offered on an as-is-basis without any guarantee as to the correct functioning or fitness for specific purpose. The authors believe this program to work as described but you use the program entirely at your own risk. The authors will not be responsible for any hardware or software damage, loss of data, or incidental or consequential damage that may result from its use, whether or not such use is in accordance with the instructions. Any enquiries regarding this program should be sent to : Reidar Gresseth #207 - 2345 W. 5th Ave. Vancouver, B.C. Canada V6K 1S6 As this is shareware and not freeware, a payment of 5 dollars is expected if you find Explosiv to be at all useful. This amount would also encourage us to write improved versions of this program. Explosiv is a screen saving utility which prevents pixel burn-in on your computer video display. Rather than simply turning the screen off while the computer is running, Explosiv displays an always moving fireworks show. As a benefit, you never need wonder as to whether your computer is turned on or off (a typical problem with simple screen blankers), and you may even find the fireworks display to be somewhat enjoyable. This, of course, is a matter of personal taste. NOTE : Some features included in version 1.22 that were unavailable in version 1.2 are : - The maximum time until activation of EXPLOSIV.COM is now 30 minutes (i.e., the maximum value for the "m" parameter). - There is now a "novid" option which prevents explosiv from reseting the counter when a program is writing to the screen. This means that explosiv will NOT be affected by things such as resident clocks, etc.. - A bug with newer versions of mouse.sys and DOS 4.0x ansi.sys was fixed. Now the order in which explosiv is loaded in memory should be unimportant. FILES INCLUDED WITH THIS UTILITY : EXPLOSIV.COM 9192 the screen saver utility EXPLOSIV.DOC 11385 this document NOTE: This program will not become a memory resident screen saver until the m command line option is invoked. Without this option set, Explosiv will simply be an amusing, but temporary display of fireworks. It is suggested that you try out Explosiv in non-memory resident mode first so that you may see what configuration of Explosiv suits your tastes best (this is accomplished by trying out the other command line options, which are spelled out in detail below). USAGE : To invoke Explosiv, type the following in the DOS command line : To initially run or install Explosiv C > explosiv [] [c] [d] [e] [m] [p] [novid] To change characteristics of memory resident Explosiv C > explosiv new [c] [d] [e] [m] To turn Explosiv on or off type C > explosiv on|off To get help, type: C > explosiv ? Explosiv runs on many different video display adapters including MDA, CGA, EGA, VGA, MCGA, Hercules graphics card and Hercules graphics plus. Once memory resident, explosiv can be turned on immediately as a screen saver by pressing Ctrl-Alt-Shift. However, this should not be done during input/output operations in order to prevent possible I/O errors (such as during modem operations or when checking disk access time, etc.). When Explosiv is invoked as a screen saver it will halt the currently running program until a key is pressed. If this will be problematic then Explosiv can be deactivated by pressing Ctrl-Alt-E ( E for end ) and activated again by pressing Ctrl-Alt-B ( B for begin ). This feature is perhaps most useful when using Hercules graphics cards as there is no foolproof method of distinguishing graphics mode from text mode. OPTIONS : Explosiv can be used with the following options ( Note : Not all options can be used with all video cards ) d specifies a delay factor. n must be an integer in the range ( 1 - 255 ) where the default is n = 1. For example, C> explosiv d255 for slowest possible output e specifies number of simultaneous explosions. n must be an integer in the range ( 1 - 15 ) where the default is n = 6. For example, C> explosiv e1 for most possible explosions m specifies number of minutes of inactivity before Explosiv is invoked. n must be an integer in the range ( 1 - 30 ). If this parameter is not specified Explosiv will not become resident. For example, C> explosiv m1 becomes a 1 minute screen saver c specifies the colour to use for each explosion. n must be an integer in the range ( 1- 15 ) where the default is n = 15. This switch will ONLY work with the 'mono' option. For example, C> explosiv mono c4 displays red fireworks p specifies number of text pages to save in memory. n must be an integer in the range ( 1 - 4 ). Each additional page to be saved adds 4000 bytes to the amount of memory needed to run Explosiv. By default Explosiv saves one page in memory. THE DEFAULT SETTING HAS BEEN FOUND TO BE SUFFICIENT UNDER ALMOST ALL APPLICATIONS TESTED THUS FAR. This switch only works when used with the m option and does not work with the 'herc' option. For example, C> explosiv cga p4 m1 saves all text pages in memory on Turn the first deactivated Explosiv found in memory on. off Turn the first activated Explosiv found in memory off. new Change any of the following options on Explosiv once it is memory resident. novid This option causes explosiv to ignore other programs writing to the screen. This option can not be changed with the new command. By default, Explosiv will detect which card is present and will determine which option to use. Specifying one of the following options forces Explosiv to run in the indicated mode. mda Use 25 by 80 text mode ( assume that the video card has no graphics ability ). cga Use 640 by 200 two color graphics ( video mode 6 ). herc Use 720 by 348 two color graphics ( Hercules graphics mode ). mono Use 640 by 350 two color graphics ( EGA\VGA's video mode 16 ). This mode will display all explosions in the same colour. vga Use 640 by 350 sixteen colour graphics ( video mode 16 ) regardless of video system present. This mode will display each explosion as a different color ( one of the fifteen colors available to VGA/EGA color systems ). NOTES : - By default the hardware is tested to determine exactly which graphics card is in use. The switches should be used with care. However, if you are in doubt as to which graphics card are available to you, type C > explosiv ? This will inform you as to what graphics card has been found. If Explosiv cannot correctly determine the video system then you must specify one of each time you run the program. - CGA simulating utilities for Hercules cards will not affect Explosiv in detecting which graphics card is present, however, Explosiv cannot be invoked for Hercules cards until Video mode 7 is restored. - The CGA/EGA/MCGA/VGA adaptors uses the same memory area to store text and graphics. This is a problem when Explosiv is used as a screen saver where memory usage should be minimized. Explosiv reserves enough memory when it becomes resident to save from 1 to 4 text pages ( 25 by 80 characters ). This adds 4K for each page included. - Care should be taken when running a graphics program on a Hercules driver as Explosiv has no reliable means of determining what state the Hercules card is in. It is suggested that Explosiv be deactived before starting the graphics program and activated again once the program has completed. This can be done using batch files such as following C > copy con run.bat echo off explosiv off explosiv on ^Z - The mda option blanks the screen without the fireworks display. This is done by saving the screen in its own internal buffer and filling the screen in with spaces. There are two motivations for blanking the screen this way. First is safety, many screen savers directly access the video controller's write-only ports and this could lead to a damaged monitor ( particularly Hercules monitors ). Second, less hardware dependence means that Explosiv can be used on a wide variety of monitors ( MDA, Hercules, CGA, EGA, VGA, etc. ) Explosiv will not invoke with this option if it finds that the computer is in graphics mode. - Multiple versions of Explosiv can be installed in memory and run by using the 'on/off' feature of Explosiv. This is possible since 'explosiv on' only affects the first 'off' Explosiv TSR and 'explosiv off' only affects the first 'on' Explosiv TSR. To illustrate, if two versions of Explosiv are installed then the first can be enabled by typing C > rem the first TSR must be disabled to access the second C > explosiv off ( turn off first TSR ) C > explosiv off ( turn off second TSR ) C > explosiv on ( turn on first TSR ) and the second can by enabled by typing C > rem the first TSR must be enabled to access the second C > explosiv on ( turn on first TSR ) C > explosiv on ( turn on second TSR ) C > explosiv off ( turn off first TSR ) åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååPK q­©żī°•sč# EXPLOSIV.COMč–@Ē) uØ3]Ž©“ W²¾ģ(XēRDh(ęŗƒń„u.<"TŠF¤)Œ¶*¬ó 2”‘ę0rŁ°ĪAMdźhČej€/!!~° “Žcę‘2vDĄ0\K”üG+®1š…ĄŹD,V Ķ šŠPg  }źŚQĄ˜„m {‹@n›ŗwŲŃūV\M€%Ž·@īE»Š÷īc —_bcōŅ’0 BŚ·čœō/€\ ³Ō«`›Ü*©ē¦«Ql›zuQkųĄ ŗh5¼ć›‚.0TƒČ}ģ6f½²t±#Hø\§Ņ.\¾q tķsŽ&wäÉč5€ A ±Œ :ČC”h•ŠµG€Ųƒ:ąO>\J,²Pč€Gūa˜ü9ųĮÅ?a=p'„"p°ĢøĖµTœ?v†Ą¹ÄĻ ł†”sĄWŒčłn(€/PóLE'ĢźØn|腎:AVO@C¶>“F}!€*…¬j4|a€Jdpą¼¾&@µįŲęaPQXĘ|ŲT É¦•ćA!”C`Ų/@¬É%« <@ŌŃē%Ź+óLył2.A–#€zØß°,H}@»7t&šĆĒ=Ē#A°@ØZ‡«†åR Ą~ J\æ[CfAč…·ˆĢŠK tD4‰Ų‹ŒH›ĢśŠĖŒH”Ģ*Š Hv!\ōÄ."ī…KtÄĄ¢†Ą%:°č‚ĄźĀØAQ0Ģ ­œā€Ī źŌÓq®Nß$£³-QĘuֆY12#™,¬öŅ¹Ą ÄŖ“ė×°e†,’ödÓ§Q§V½Š3ėĪ®=Ēž š@oQµ4į–+Š 6h,a'M×7 ¤iĀ¬O³B)ƒ0ŠŁfÜ­œ=ĒcɊѦĖ¬Ž=;qmĘ·Õ}łķļßN”J„jųaŗ¶ń ERFĪ˜:lŹĢqFN8hŅŒ‰’{¾}üś A±N|ĀryÖf|[$‘¢—B•JÕ*šĆtmćšÄMĆ6pĀŠI#†ĶU;¦Ė¬žSGĢœgŒĒ2=‚~źā#€t•(‚ “'S’X”ėB†~jaP«ÖŽ?µģü'›`g‚ń.fÜŲńc¼žŁ°B€ņŒ–-²@…€`t6üŅBĄ‘‡>|A!ąą@.ꑶ0ƞ£a‹ō­ĖɗmGv’īąCńć¤ĢųēhŪ"yY6H_€?†yŃ2LŠ•EŚp)G@Öų*G Õ`tŌ)āfOܤ± LC7mEĖjA ]“mŃÖ-šHÜæ1ķ•€ ‹Ļ]@Į pÅ; œ4fYž• 4N§ VhózbE¶EĖīe ˆ­’>Ü ÷Ļ€AÉ  Č6v€ŲÆZÖ=ŖńļŸÜ&@€ ¢ģŁµmßĘ嚗/Ąƒ ˜ó-é¶üóõ‡90 €żAČĒ„čPˆ¢ČtÉłˆB@÷ļÄŃĖ"ü#æ0XTa“?źøÄ@ųśC U¢"é“ńĒ@Æ{ŠŻó—P ƒŌ)čuBŗtņ!p¬Ą?”#°Ć‡…|~­“4Ģž‡'% ģĖ‘>L(ņ„ }śŌ@äaŠQE>Ä@äCX»ųĆe@3ø†īŹ?ä@M­+£/“ €źZwHLŌApģ'xXė|åä9Œ2GŲłč&”“A!Ą#ßC*°Čƒ ā·`ØøDÅm(*ī‚Q”ŽNŚ°žRxIŪ=@*šĢƒƒ²”€§ĆĄŸƒł IÆżĻ@ßé0ųCąŸļ\üsĮ¦Ą(@ytŃ”‹ ]ōč¢ E]0*ĄČ€£ @Ši@RMJ5-…ļé ‹Q¬ūåŠ Gśu‰>š ˜”Nr`xHØSĄ˜µyĄØ怭Ūė@b;ę?ČüŽ„įC8AĀ½p£¬H€i-F¹äI`Üt&‡įāĄ^¼Ū!“ŃN‡ śVd“˜Ÿ‹†­tLĄ aÖ¹KdĮB€aƒ|@'1®切SĄņłjź'B°hG|Ą‘FMŽ¤B™‘OAw_g–›yČl“ķŅ! (LžLIbD 2@€Ē Ć$^{’Ō²[@Ü{lļ½~ßł }žę -ƤXY¤MĄ„YąėV €ŃQ§ˆ›=q“JĘ20 Ż“uR-«„%:(Ѷéō¹hZ q’~D[gÆÜlXšč" ®…;(Žią¤1ĖņÆ\ q’ž˜@p`…¶¶'Vd[“ģ^¶@į€AūļĆ½`€ü0(™–ŁäˆėVĖŗF5žżūĖÄŪø ęÖ½«—Æß“‚ Vü8²‰Ó”kŠ’®¬Æ(ȁQģ@>&˜¤C!Š"Še$ä£ÜæG/ łšŒüĀ“ĀiŌq1ˆ@ź š…@«DE Ņ'揁^® «ēļ”>©SŠĖ›Ås!ņ!p¬Ą?—#°Ć‡…|~­“4Ģž‡ ų@ĄØ$x؃‚–EpUul°\€,Ā7o:4’h@'@Ń£&9C@j3@‡Óõk¬ītį €»)ČÅ$_!¬[i¦SūŹA@Ń0w€Ō)|'Ž a¼‡ 8ęn#dŽ°ņ1Ą$čüø“A!€Ģļ”¤Xä |Vą[Ą߇ų6øĄ(Ą…—EĮųgĶAf’!čALg|äƒtųsšńc¾›üēą»Č?ž­$šĮÅ?> Œ’R ‘*BXj‹PZ„Śą"T`F Ź¬(S¢L‡2"\č >Q¬ūåŠ GŽ‚ŗ@€Äƒ<üÉP§90<$Ō)`ĢĄ“<`Ōqąr€u 9žhB d~Ē’s§9ś ĄŠ¢ožvadõĘŁ£qźt”¤÷‡ßµ…;)`»F€\ 8@`K®ø‚@@‚ ,P&R< ”€dŸ ‚ `°k¬($zPŒƒ Yp80čˆ Vd¹ ,6 u „ŗ€ĶĮ. ÄPQ h@€Įŗ ]8ˆ€„B3/„“`A-G,ŠC ÆB¾K$‰`A‚k”BšE ;(“J°ŹA  jX!€V$°Į`…L,°P @ZHpqĮĀ*4€ `Į @5y@Aą“1łxB–XDžpAŠ . C‡äŸ r f'—ńü?Z@żN¾Ī$Öź 8ę™$¬u¾4sĘ™#lD€n@zmPšČĄČPU ,ņp唃,-lyč£ĖC_ŗSĄ‘1®”i#ĶĶ3/=”)šĢƒƒK¤ĆĄŸ¤ SH`ī?#•ž!šOź’\)0Ŗa¢‰./ŗģč2¤Ė”.Y`³@B  y&Ģ™ŠfĶrÅĮŗ_ øpä!(Ø H<(ŹƒĮŸ u:ĆCBĘ ˜ĖF°eXwl¤ !,˜p$–Æa‹ jŌg~?謋$ыfWN ¹‹&ß?„ß6JĘmÜCø2—£ż]Rąq Ƀdhį& 2tŃjČ ¤Ąņq- °Š¦D¢AJ¬^Hœ# FŽwp|ć@ƈ,(xąX²ķ-x„|3‘NG7'e>„jbkŗMzŒūŃČB¶/b~,¶jŠ1ƒ„Xē.‘ † ņ!ņBĮÅ©T(Ó­QcRµZą®č½wS(P€»+‚ī?”%YPźČĆŃ ˜ÄĪE°@aņdJ+ bø„¼0öāµ÷O-»§Ä]ÅvÕŁÕ’bmūPd€š€ĄG‹>”ę! `“ ¢ €ŃŁš‹ ‰‡ų‚BĄĮ\Ģ#õa†=GĆé[—’/ŹŽ hžÕŁĮ‡Ń„I˜ńĻѶEņ²˜ž0l¾ ó¢e˜+‹“ ø4¤ k|½#ŠjduŠøŁ7©},ÓŠM['%§-‹¶Ī?@‹¦E[7Ū€.¢ƒ‚+@įŠw@8iĢ²LY‘ķ¤¶)²-B¦ĖŁŠĢä# ź°ĒĶ3@äČö.āƒw”†¾S‚w&Ų²ö€¢rļܲ„{@Ė:A¾ F°?uł˜°—…(Š\$–‘l-dę @½, =’™ņ C€^v ,Ŗ°@Śun ā ĪæZ%*"`>Ü:: ’–+ąƒa:Š‹"@wĄ:s>Žų÷]'’ :F Čš©µ®Ķ3“ä¬ļp!ų÷n˜=WÜ-ä—#‡˜Pä! @ūō©ČC—ŒŠ|ˆ!€Č!° CćĶ ąŹ0t;žÉ Ŗ%RNŸų£UTN¤ė@y ‰ža­óÕšį0FČaäcĄ^:ŠMś‡B€G8‡ŹT`‘‡M’t’lį“d”$Ū%ŁE©O@ųŠµVÆW„öŖĄ3>šÅā™€’1p—óŽ8 ’CąŸc\üsQØĄØȉ(ß¼|sóĶŠ7Iß<]€‘ÕŠs+ž­8¶b×­ 8ČEc@€¬ūåŠ Gu‰>š`š'C䥚P§€1öņ€QĒJ–Ö€¤øH)PĢĖ’\$*ą”"߇ü *Ō1£I1­Xu(Ö£."użšõjV• ŲŽÕ—½$ėāī’ `HÜČŠĀM 2"dč¢Ō (@IåćZ`9 M‰Dƒ”X%¼8G$@Œ#īąųʁ†Y PšĄ±dŪZ*šłf"ŽnNŹ|ÕÄÖt5šō÷£‘…l+^x Ō‹5GŅ…Č3£ µ`B€ 2˜Hƒ  ˆX@”@€" ā…",Lhą@‚"pxŠ  H ø[uļ]*JøūtBśńåyŚ‘»0ń PK +oŖ"’ÕKģy, EXPLOSIV.DOC  X &O¦$±ābȓ& Z€8"%$I†L1eˆ”"Eœp b„ˆ”ˆ JJQųDd 2d4P0sꡛ8sźŌ)„L2aäL”SfĪœ2tŠ€憌ĶP£ę‚FNš9 ¼y³ę©ŌÆQ”#§Žœ0y@Ȁ"FŽ0jŅTP6oꤱbĢ8y¬žACŠ1)@ōüthŃ£IA˜AÕ*V­\Ūꡑƒ…fø.fRAs9oČŌSø ZbŹ€ s•ŽU1uč”!Ā Ń2lŅŅy¢ĪQ9s\€HŅśµ›7…cĻœó† ļ7Bį„³&Ģ™Żž}&-#4MÓ½?ė„aÜ3ö„XµĖ)üĘĢR7i”£!?ótźÕ…ļ¤Iś&7ˆń ŹŲ%jÄ«tt»éūĘĶQ7ōķ €`¹”]r ßLf˜ĒŌi¬QmŌįyaŠ‘F…X¹–Vl¦…ńӁÄmŲį‡ŹVšŖ±6“ <lc ĮŌw× µžnDńĘoćMHŪ¶„›n¼ H ćĶ¤ąi9”„ZX† Ōwą~Kżˆ\hs‘DGL‘D&éB]w嵄Õgy»Å9!SšµpU b„”Vbzh SyĢt†zgaX†l–ņ8'“ŲÅZo.²6£ę§P%Ņńbƒf¼7e Xāż™G^eI'‡"pi”a‡lI ‰ŚgµaźŲ­ßlEqŪn3} BwŌ©¦M[m‚¦ATpKF®YqŽ1”ekKŖsĢ$ {IB·ģŠE k”—lȖ«”ųą¤dÜ”lŗÖG‡ÄDĶ†kßy†—Q3É aøWž(’ń&ÉlĢŚęQqŌ±rŠ-Å1“N6—ƒu°A‰ØY; VʕįŁū'Ō{J‚0ĒjJ(Vę-5†_Ÿ([¦3!h—e¹J#ž3‰˜Ö›1»Ū,VDmnČm|źnģ“¦Ö |aaƁ ƒ\<ł”PG0^Ż4ĀZ7 $Ć 4ŌĀŹÕYĻā©“'ų¬ž ѐrC0P‰d… K“5… rÕÜSß=1ʤ6pa¾Š»gaä˜G+ĒiŸädTĒFPTcufÆ`"jßLóöfo„~|hß8ĘøĄE›Ń³±„m\ œŲöl%Ō±ė—YŽÉfœ©žB([mų÷,oŸėE£ńsJūµ“=Wö†ņU¾ÓŽŽ:įaŲkq2²1`ZH§ŃdŗĪ®_x›YnH:a…ć(ĒL~åŸy €UFœ-Ż-Ź‘BŒö#”¤@J/łƒH8AĶ”o2ž}2˜0tN-„Ć ĖĆ6Į*nžA ^ųRĆåå+ZÄ¼‚6¼A‚q³Q°%‡5`eŗžd·”e½ØVž©Ž‹>—¤Q…©B*“Ņģˆƒ4¤ģ0…ō‚¢k'D9¼Č) @į{e˜ąŃ!pŠ Šü#†„Y+SNĆß]dcÄßLˆ“LYyꐹé®z62Ó³&T"Ż!ØDjĢVøųīņ ÄCš÷Ž¤†7ä! œ,„4÷Ųē}Č1ŚLčšĮPN¼BN…TD2.K.3qĀØPæqä— +CŒĢRD”Œ uPoŖÖæWµ&2˜“÷īĄØāø!‚:Z2SyŖ²ž/ĮēÄüøØHd4²q šWkɈxż¬ Õdd‡ÕSN9HBŅ‡Lm& ĄÉsī‚°„ ęy!VPĖ3ŠčD­ÅŃw*ģ=Axąˆą¤8‘ĻʐBžP*Żįż°¢R:Šą92Aœą #fpƒh’%œgķŁa :ńĶ/ ">ń|TrŠ~•®®«4P¬Īš“¾ńˆnPŽ2IS£tZ(Ÿ…9SY”€…“ ;źMĀ`†E±¦QbiāęFØm‹A?)ŽšĀf&ˆcpS¢Źź“/Ś§Pčł?9•±h.˜ĆÆŁ!!   `€‡ūč·c”VJB2Ö oX)‚°ČvĘUƒˆSX›ĄŚįåtŖńŹ(‡“¼±@yƑ‹B‰’aȀ31B˜P„$Į C`BˆP"L. T@‚21²‘*PA¾’ĶĀBē¢”(a>Ą 0«›9@X <ˆ¢†u ¤QC‘€äĄ-ų¼‰_Ké“Ā07Œ½ ‡ ā‘śv‰A f€É „vÉE‹÷M8¶‚Z&] čIʶ¬i±i!©ČX†ńī¬( …)Čā=ŗ(£ØP‰J”6øFw|‘V¹:”Ņ˜Ē\Łr®0 Mńm°j®'d°HÖō_-ūį]n”»„“H/W!ßØ<¬³w6W±a~ģsĖ2¬±ŹaŽI³{“§į;ŻÄRĪy GØ0Yu–5Õ|yŚŠÉCKQx ±į’ahW¾«żņ.WŁo0Kź(Ŗķß)Ģ~Ų‡…óźo Č×óvü`'D>öŠ\Tõ ™9-“”,£ą$Ć2ŠŅ]\ P¶ŖŹvŠžzE|@š@„ xfGhż `ļ+ĢMx}ģ‘@ž ' +„»±2†·Ż‡7»—CļŁ |į›ęÉ‘ĖPŃ«;ś³±¦CxO|SB‹„B!žˆG›'-„ ž–‘Į=†+-h2Ź‡`6“ >kĮHc:(G+ūüÜMļl^õķn`ÉK³j¬‚FóD‘/05@ą€!ƒMõ?U3]0Ō7`U<¦Č“/š "Ø”,(š4ķ¦Kf1A2×#kVuBAHŅ$½²“%Ś²c&e4¦…ZMÕDsqrwÜÕfnšf©d%_Ä@+Ę~04 ‹0Nā3čd$ø2 WEØēK†Q÷<©”ŅņqI !wög³IŌQcp*yÜG„8¢2Q·å§mļg8ņGö‡ä„ƒŅļń&¼‘·‡=Ž”#¦”żˆh4rP÷G- †žø0ĖrU3„‚U‹¢N3$äį$pP#yQįÓ3žr„Ę1Aȧ|æwĮGu}ń6_4;QU;ĻˆÕįVG ×a3±%27u€mÄ|¾(s½4¢ ­‘Ž43ńP``-±‡7v)éuaBgč’+' hō1ų‰Ļ„åTßÓ2ņ˜n,„Žņ£Ž‹%ĒyLŒ )787ļę+kCG*zfuŲ”•gKrķ¤ßq2č²W*ßń‰1ą85 9‰AHƒ *3‘=S„1!=`O )Fˆx°1¢Ä6Q“P1¦w[$'I„>‰ˆB1łV…сC1¹!©— ) ™%ĀNn@Q±1w Ō">Ɲ7?z76IBF90r”ęĮ‘S8!"’²aˆ%)1€’qÅO,Y.‰…1 3iš8©“ ƓŁu”:” Āxe ‰VļQFŃę”X–’BĒ¼āZɕÖd/µ•@&ā*dIĖ²0²y„Į–KgĶu–†–‘Ņ–eŠ‘Õ—NG’(ŃRXkx”““TÄW1)0W™•ŲĆxnųd½rNGy}+X7) b˜Ń4•`‘xAÉxm™Ü™PvNOX’£łBPøeRøBSyscf•‰•‰ ~ōŅ7R#Šé“A˜i‘hik›ŻĆf¢¢›G'rI’v‰—*ŁpÜŅ—?3 ;ń—3y—•ds &ä†-Į fi©reō'@„R±b… DŪ©˜Sń'w('Źt4™9±KcT%iTi¹”EŸ±œ¹•mŠ•¤xŠ”ń#H\v?•W}y µ¹,Gy›ś–č² t‰4œ±Jq:“±fš?ÄI8"…VBd€4t yPš}u,¶'VWe|“²¦’W‡aXBpy|É!XyRHy²”#Y5GŁjä$H@NūeAPLšXSPT``NpY! !FšUążE"ˆŖQF_C!AGŁŖūuAĄMõ«L"Ppāč1NS0NƊżš*:€ŖGY!šbi˜b‹łI8µ,ś(ŗ“ĻšĀƒ>H'Ń l¶”<äQĀd«-Ą­ļĒ^H«G;ļ“7 s:¦‚Ę?¼q¢ņ†(2Ņ{A/ģ­Ļ8!ėO¦8ŃŁ“&“Œ;ÜĀ+Mń&EK<ą}XĶė7q‡é~s% “ĘQV’–¼ēՆøzŗŌ¾ēz¶‡Ņ¶7ĀįqZŹ‘ŃžœÓÓ[Ǝ“CµXi“{EK!ż¼öimŠ¤„/ĶÕ ĢĄŻ/™¢CE[ī¬Óž5,o ³÷Ų.B¼·č²q”•¢©ČHqÜŲoķøyį ³×½½ń×\!ņź•žy¬ÖµV’ńŃNS {uq'Šņ8/źK!ób…²Čaó.Ÿó;?˜8ApˆĀIl@xļw®šČ‘nĘĘxĮLrģŃ(Y¢Žs|ōæxįoāŻ~Xw˜7Ō,ŠĒ"Fm:Wš‡Waö­~5—>JƞęQaĶ6NwaˆŒtBtwKpæóPŒćlw@oļv';IGl¼÷‰/~ļćr‚’v(dų…ał)@Ķ§~Ć{?öÄ[öČtö–”ö'ŽĄÕŒwn’ä‡/÷i‰#Ŗ/ń}cé RD{ŸāŒoć›’ųƒļ(5ÆLˆ?śŠŸxĮÆł8Ńł‘’@§/śĄæÆÜE²ż„?iˆNż«PK q­©żī°•sč# EXPLOSIV.COMPK +oŖ"’ÕKģy,  EXPLOSIV.DOCPKt³2åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå. ŠT SE.. ŠT SPFBACKUPBAT UŠS F–PFRESTORBAT XŠS GžREADME TXT ZŠS H›SIZE COM ]ŠS J€REM Atari Portfolio Backup Procedure - Mark Matlock REM requires FT.COM in C:\ as written @ECHO OFF @ECHO Backup procedure for Atari Portfolio COPY C:\ATARI\*.* C:\ATARI\BUP COPY C:\ATARI\SYSTEM\*.* C:\ATARI\BUP DEL C:\ATARI\*.* < YES.TXT DEL C:\ATARI\SYSTEM\*.* < YES.TXT @ECHO OFF C:\FT C:\*.* C:\ATARI /r IF ERRORLEVEL 2 GOTO FAILED IF ERRORLEVEL 1 GOTO HALF C:\FT C:\SYSTEM\*.* C:\ATARI\SYSTEM /r IF ERRORLEVEL 1 GOTO HALF IF ERRORLEVEL 2 GOTO FAILED @ECHO All Files Transferred Successfully GOTO QUIT :HALF @ECHO Warning: Not all Files were Transferred GOTO QUIT :FAILED @ECHO File Transfer Unsuccessful: No files transferred :QUIT ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååREM Atari Portfolio restore procedure - Mark Matlock REM requires FT.COM in C:\ as written @ECHO OFF @ECHO File Restoration procedure for Atari Portfolio C:\FT C:\ATARI\*.* C:\ /t IF NOT ERRORLEVEL 2 GOTO L0 @ECHO No Files were Transferred to C:\ GOTO L2 :L0 IF NOT ERRORLEVEL 1 GOTO L1 @ECHO Some Files were Transferred to C:\ GOTO L2 :L1 @ECHO All Files were Transferred to C:\ :L2 C:\FT C:\ATARI\SYSTEM C:\SYSTEM\ /t IF NOT ERRORLEVEL 2 GOTO L3 @ECHO No Files were Transferred to C:\SYSTEM GOTO L5 :L3 IF NOT ERRORLEVEL 1 GOTO L4 @ECHO Some Files were Transferred to C:\SYSTEM GOTO L5 :L4 @ECHO All Files were Transferred to C:\SYSTEM :L5 åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå In this download are three files that aid in the backup process for the Atari Portfolio. The first file is a batch file to be run on a MS-DOS PC with the C: disk including following directory structure. C:\--Atari--System L__Bup To use put the Portfolio in server mode and invoke PFBACKUP.BAT on the PC. It copies the previous backup of the Portfolio to C:\ATARI\BUP in case something goes wrong then clears the C:\ATARI and C:\ATARI\SYSTEM folders. Then it transfers all files in the Portfolio C:\ and C:\SYSTEM folders to the PC. I have used this with a Zenith Z-183 laptop for several weeks with no trouble. To automate a restoration of Portfolio files after a FDISK or other loss of files use PFRESTOR.BAT If the restore is only partial you will be prompted by FT.COM (the Atari supplied file transfer program) as to whether to overwrite the file on the Portfolio. The use of the BUP directory provides a place where one can find a previous version of a file, and since no delete operations are directed there it can serve as an archive as well. The last file is SIZE.COM which is a slightly modified version of ATSIZE.COM a public domain PC Magazine (Sept. 1985) utility by Art Merril. It will calculate the number of bytes occupied by a particular file spec. For example, SIZE *.WKS will display how many bytes are occupied by spreadsheet files. Also it computes the space required using 256 byte clusters for RAM Card storage, and using 2048 byte clusters for PC hard disk storage. Notes: 1. The .BAT procedures assumes FT.COM to be in C:\. 2. C:\ATARI and C:\ATARI\SYSTEM should not be used to store anything other than the Portfolio files. (put the .BAT files and FT.COM in C:\) 3. Modify the .BAT procedures to include any additional subdirectories you create on the Portfolio. Mark Matlock GEnie [M.MATLOCK] åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååé! SIZE Vers 1.0 $Sept. 1985 - by Art Merrill $:\*.* bytes in file(s) bytes required on RAM Card bytes required on fixed disk $ Invalid parameter(s) or file(s) not found $+ĄPŗ“ Ķ!æ2ŗ5“Ķ!AŖüæ8¾€¬<uč¾ėX<uF¬<\t馾2¹ó¤ė@<u"F¬ >€€ąąĄĄąąųų??ąą€€ĄĄšš~~ĄĄ??€€ąąüü€€üü’’’’ą’ą’ĄĄššĄĄąąššųų~~~~?’?’Ą|Ą|’’ĄĄų<ų<€?€?ĄĄų<ų<ššųųąą€€€ų€ų||€€€€€€ąąąą€€ĄĄššųų>>>>>>’’’’>>ĄĄ>>ąąššųų||>>ųų’’ĄĄųų€€||ĄĄąąąąųų||ąą??šš€€ųų€€ĄĄĄĄ>>ššųųĄĄ>>~~ąąšš€€€€||ąąšš€€||üüĄĄ>>ąą>>ųųĄĄąąųųųųĄĄüüĄĄ||>>šš€€ĄĄšššš€€šš€€ųų||>>ĄĄ€€>>ĄĄąą€€ĄĄššųų>>>>>>ĄĄ€?€?>>ąąššüü||>>üü??€€įųįų||üüąą‡‡ąąųų||‡‡ąą’’šš’€€žžš?š?ššžžüüžžžž’’’’’’’Ą’’’’’’’’’’’’’’ąą?’?’üü’’’’’’’’’’’’’’ąą’’’Ą’Ą€ŖŖŖŖŖŖ«ĄĄąąąąĄÕUUUUUW€€ĄĄąąąźŖŖŖŖŖÆ€€ąąpuUUUUU^??ąą<<8:ŖŖŖŖŖ¼~~ĄĄųų’’’’’ų8üü€€ųųüü’’šžšžąąąą’’’’’šųų~~š<š<’’žžąąē’ē’ĮšĮš’’šš’’’’’’’’’ų’šššųųĄ<Ą<||||ĄĄžž>>ųųććąą’’’’’’’’’ų’ųąąąą€|€|ųų€€ąąųųųųĄĄ’’’’’š’’’’ųųšš>>ššųų€€’’’’’’’’’ų’š’Ą’Ąššąą>>>>||’’’š’š<pįƇ<??’ą’ąĄĄ||||ųųĄĄ>>x0łó @ēĻŸ ~~??ĒĄĒĄ€€ųųųųšš€€||÷cßæ~ż>ąąąąĄĄ~~ššĄ€łółóēĻēĻŸŸĄ€šš€€>>||ĄĄĄĄ€€||ąą’€’’’’’’ąĄąą??üüųų€€€€||ĄĄ’’’’’’’’’’’’’’ąąĄĄ??ųųšš>>šš€€’’’’’’’’’’’’’’ąą?€?€?ż?żśśąąąą>>||?’?’€€’’’’’’’’’’’’’’ąĄ’š’šąąš?š?ššƒƒ’’žžüü’’€€ ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååĀś?’üĄ’’€š€’’Ąš>?€ąą9šž?€Ąąqą|Ąą šĄ<>€ą@ąx8€ąĄąxĄ€Ąšą€Ąš>Ą€ą>Ą€ą|€>Ą|€ų#€ąąĄ ąųü߁’Ą’Ąš€Ąšų’Ą<’Ąx<€Ąx<š|p?’€x<Ą?€Ąšxą€€x<€€€ąš€€šxąą€ĄšxĄ€€ąš8<8’’Ąąšx<x’ų<€<Ąąšx<š’Ą8€<Ąąąx<ąš€x€ĄĄšxĄš€x€ĄĄšxĄ>ąš€€<ąš€<>ąš€€<ąš€<|ĄąxĄąx|ĄąxĄąxų€<Ą<š€ĄšųĄ|Ą<š€Ąšš€š€x<Ą€Ąš€š€x<Ą€Ąąąšx<€<€ą€ĄšxĄ€ąš<<<Ą€ąš<<<€€<<Ąąšx<š€Ąx<äąąx<ą?€įąxųĄ‡€šx‡€Ą’€üšąžųüž’š|žĄ?ššüžš’’’’’’’€’’’’’’’Ą’’’’’’’Ą?’ü’’’’’’’Ą’’€’’’’’’’Ą’’Ą€ąą€Ąą€Ąą€€ąĄ€ąĄĄ ąąą>Ą8p8>Ąxp8|€š8p|€š’Ąą?’’’’’šųxxüžąžąwą’’’’’ąųš<?žąį’Įš’š00š|Ą<’üĄĒ’š’ą’’’’’ąšxĄ<||ĄĪųćą?’’’’’šąš€<xp€°<šƀ?’’’’’šąą€<x€ą8ųĄ?’’’’’šĄ€xš€šš€Ļ’’’Ļą’’xššų€00’ųšą<ąš’’’’’ą’Ąšą<’’š?’’’’’šąĄ<<x’’ą8pąĄ<<xĄpįƇ8>óĄ€xxš€<qóēĻŸ>8>ĆĄ€xxš€<ą@|>€ššąxēšĀ 0`ĮųąąąĄ>š€įƇš€<ĄĄ€|ąóēĻŸ>š€<ĄĄ€|ąóēĻŸ>€ą<x€€|Ą€ą<x€€| Ą’’’’’’’ĄĄ>ųš|€’’’’’’’ĄĄ?ųš~0€’’’’’’’Ą€?šą<Ą’’’’’’’Ą€?üņą <?’€’’’’’’’Ą?€?ńųĄĄ<x?ž’’’’’’’ĄĄąšą€~üü?’’’’’’’€’š€Ą?š’žĄ’€ åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå`r°čaŲAśžžOčN¹,F?<NNTAķ€a(œ4-€f*EłsŒp%aRd/ < OK aS r"_ta@ų+A€–a0^aeZarTaS†€šĀl*Ełs±p.aR&/ < OK aRĪr"_ta@ŗ+AVa0 aOˆN¹%²aSF"<a+>+@: -:~AķČahø -:~AķĀahŽ"-:p~AķŖah~"-:p~Aķ°ahn -:~Aķ¼ah`p"~Aķ¤ahT -:~AķĪahbHy!NNX+@€šp+@€ž(-€ž"m¤apųaqJR­€žx’Ų­€ž"m¤apāEłs‚p a:ŒgŠAķ¤aDREłŹaC"EłrķpaQ&ragX <€r4<Aķ€a%Fg:<|8<€vptraF†`:<¾8<€v ptraFpN¹lpa+@€¢p°­€¢f&EłsßpiaPž/ < OK aQFr"_ta?2+A€¦p °­€¢fPzx"mŖapagg8EłtHpaP^/Ełt`paPPr"_ta>š+ARp°­RfN¹D`N¹Dp °­€¢fN¹,p °­€¢fdzx"mŖao¬af²gBEłtnp-aOų/Ełt›paOźr"_ta>Š+A2p°­2f"paFŚpaFŌa-Ü`paFČpaFĀa-Źp°­€¢fN¹ęp°­€¢fN¹¦p°­€¢fN¹p°­€¢fN¹“p°­€¢fN¹ęp°­€¢fN¹%|N¹pN¹lNuEł&pabhpaSäEłt©pa8 Cķ€la?lHm€lp aOĀ"HAķ€r,a`ģAķ€raQ`ae¶g”pa:šAķ€rra0ŠN¹Rp+@€® -:a>F`ZB­€²R­€²paL:*-€²(-€®"mŖandaU**-€²(-€®"mŖanPaePgĢz(-€®"mŖanˆHm€lp aNŽ"HAķ€r,a`Aķ€raP|adŅgnpa9øAķ€rra/śp+@€® -€Īa=j`—Aķ€fpEa42— -jgp’.€Aķ€fpaa4—Aķ€fpAa4—Aķ€fpza4—Aķ€fpZa3ų€Ÿg’,Aķ€fpea3č/Aķ€fpEa3܀ŸgN¹¢Aķ€fppa3Č/Aķ€fpPa3¼€Ÿg N¹lS­€®Aķ€fpza3¤/Aķ€fpZa3˜€ŸgP­€® -€Ī°­€®lp+@€®Aķ€fpaa3v/Aķ€fpAa3j€ŸgQ­€® -€®l p’Š­€Ī+@€®Aķ€fp-a3H/p°­jWĄH€HĄ€ŸgU­€® -€®l p’Š­€Ī+@€®Aķ€fpda3/Aķ€fpDa3 €ŸgN¹ōaGāp°­jWĄH€HĄ/ -nnB—p°­nnB—pž°­rnB—pķ°­r]ĄH€HĄĄŸf* -€Īg$Aķ€fp*a2“fR­€® -€Ī°­€®lp+@€®`ż$pa@ŹaGtNuN¹¶aGhp+@€¾Ełu°p aIŅra` -šfF <€r4<Aķ€aģg:<,8<bvŠaE4NuB­vB­‚p+@bp°­€ĀWĄH€HĄ/p°­*WĄH€HĄĄŸgŠp°­‚gR­€ŹB­‚p’Š­€¾°­€Źlp+@€Źp°­€Źo p’Š­€¾+@€ŹB­€²pa2pa2„EłtįpEaC€(-€Ź mĪå„ 0HaC¼pa2Ha2\R­€²aC6aCfEłu'pDaFžaa(-€Ź mĪå„/0H*-€²("mŖaf€aa a`śp°­€²f pa1öa2 EłukpEaCpa1ąa1ō(-€Ź mĪå„/0H*-€²("mŖaf4a]4/p °­€²_ĄH€HĄ€Ÿg’fa_ž+An+Br+CjaEöCķ€fa6žAķ€fa]gN¹&Aķ€fp+a.ä/Aķ€fp-a.Ų—Aķ€fp*a.Ģ—Aķ€fppa.Ą—Aķ€fpPa.“—Aķ€fpea.؁—Aķ€fpEa.œ—Aķ€fpda.—Aķ€fpDa.„—Aķ€fpua.x—Aķ€fpUa.l— -jVĄH€HĄ€Ÿg’BAķ€fpda.P/Aķ€fpDa.D€Ÿg(-€Ź mĪå„/0Hz("mŖae&Ełvjpa.Ägģ -€¾&<€:<’aī&<€x:<’a^g*Ełvrp,aED/EłvžpaE6r"_ta3Ö+A€Ś`(EłvøpaE/EłvĶpaE r"_ta3¬+A€Śp°­€Śf^(-€Ź mĪå„/0H(-€Ź mĪå„/0Hz("mŖadp("mĀad(-€Ź mĪå„/0HEłvjpaDŖz("mŖad p+@vp°­€ŚfN¹%"p+@‚Aķ€fpUa-/Aķ€fpua-€Ÿg’(-€Ź mĪå„/0Hz("mŖacšEłvjpa-ˆgbEłvŻpaD4/EłvópaD&r"_ta2Ę+A€Śp°­€Śf2(-€Ź mĪå„/0H(-€Ź mĪå„/0H("mĀaczz("mŖacJp+@‚Aķ€fpEa,n/Aķ€fpea,b€Ÿg4(-€Ź mĪå„/0Hz("mŖacFEłvjpa,ägN¹ `S­€ŹAķ€fppa, /Aķ€fpPa,€Ÿg N¹ŚS­€ŹAķ€fp-a+ü/p°­jWĄH€HĄ€ŸgU­€Źp°­jWĄH€HĄ/ -nnB—p°­nnB—pž°­rnB—pķ°­r]ĄH€HĄĄŸfAķ€fp*a+¢fa@€`ūzp°­€ĀWĄH€HĄ/p°­*WĄH€HĄĄŸg?<NATJ€gŽa>ÖEłwpa?aHžaI’+@a@.B­.p+@€Źp’Š­€¾a1ś`–B­€²R­.R­€²a?Ž(-€Ź mĪå„/0H*-€²("mŖaba)x(-€Ź mĪå„/0H*-€²("mŖaačaXčg² -°­.n,Ełwp(aB*/EłwCp aBr"_ta0¼+AB­.p°­gR­€Ź -€Ź°«’śo’b]‹`(EłwOpaAā/EłtgpaAŌr"_ta0t+A€öp°­€ĀfĢpaFZEłt©pa*‚Cķ€la1āHm€lp aB8"HAķ€r,aSbAķ€raX0gŠpa-Aķ€rra#Vp+@€Źp’Š­€¾a0Ä`TB­€²R­€²pa>ø(-€Ź mĪå„/0H*-€²("mŖa`Öa(F(-€Ź mĪå„/0H*-€²("mŖa`¶aW¶g“R­€Ź -€Ź°«’śo¢]‹pa!–pa,Œa>rp°­vfN¹$ŗ/ < OK a?br"_ta-N+A€žNup+@€ī -€Īa-ō`bz(-€ī"mŖa^"(-€ī"m¼a]Ģ -€ī(-€ī mČå„!€Hp+@€Ŗ*-€Ŗ(-€ī"mŖa]ī*-€Ŗ(-€ī"m°a]ØR­€Ŗp°­€ŖlŌR­€ī -€ī°«’śo”]‹ -€ĪCķČAķ¼~taL4p+@€ī -€Īa-b`\(-€ī"m¼a]€z(-€ī"mŖa]Np+@€Ŗ(-€ī mČå„/0H*-€Ŗ("m°a]b*-€Ŗ(-€ī"mŖa]R­€Ŗp°­€ŖlČR­€ī -€ī°«’śoš]‹Nuaü²a;pŠ­€Ī+@Ełwup a=traS¦ -šfF <€r4<Aķ€aŽg:<,8<bvīaS>f4p°­ f pa'¶a'ŹEłw±pGa8Āpa' a'“R­ p °­ lŠz(-"mŖa[öa>¢aRņf R­a9Ę`’$pa3pa'`a'ta9®Nuzx"mŖa[¾a>jaRŗg2pr a,®pra,¦pra,žpra,–pra,Žpra,†`0pr a,|pra,tpra,lpra,dpra,\pra,TNuEłv2pa;¢/EłvMpa;”r"_ta*4+ANa9p°­Nf?<NATJ€gŹaśŠB­B­a7jEłwpa7œaA’aB&+@a8Āp+@€Ź -€Īa*”`|B­€²R­€²R­a8z*-€²(-€Ź"mŖaZ°a" *-€²(-€Ź"mŖaZœaQœgŹ -°­n,Ełwp(a:Ž/EłwCp a:Šr"_ta)p+AB­p°­gR­€Ź -€Ź°«’śo’z]‹`0EłwOpa:–/Ełtgpa:ˆr"_ta)(+A€ö`N¹Ōa7ņNupaa7ępa%öpa1,a7ÖN¹paO`élNuAķŖaXĘ"-:p~AķŖaPčNu?<NATJ€g8B­€²R­€²a7l*-€²(-€®"mŖaY¢a!*-€²(-€®"mŖaYŽaPŽgĪ`(EłwOpa9Ų/Ełtgpa9Źr"_ta(j+A€öNu?<NATJ€gPB­€²R­€²a6ž(-€Ź mĪå„/0H*-€²("mŖaY(a ˜(-€Ź mĪå„/0H*-€²("mŖaYaPg¶`(EłwOpa9R/Ełtgpa9Dr"_ta'ä+A€öNuAķ€fp+a!Š/Aķ€fp-a!ÄĮ—Aķ€fp*a!øĮ—Aķ€fpda!¬Į—Aķ€fpDa! Į—Aķ€fppa!”Į—Aķ€fpPa!ˆĮ—Aķ€fpea!|Į—Aķ€fpEa!pĮ—Aķ€fpaa!dĮ—Aķ€fpAa!XĮ—Aķ€fpza!LĮ—Aķ€fpZa!@ĄŸg&Ełwųpia8Š/ < OK a92r"_ta'+A>NuAķ€fp+a! /Aķ€fp-a žĮ—Aķ€fp*a ņĮ—Aķ€fppa ęĮ—Aķ€fpPa ŚĮ—Aķ€fpea ĪĮ—Aķ€fpEa ĀĮ—Aķ€fpda ¶Į—Aķ€fpDa ŖĮ—Aķ€fpua žĮ—Aķ€fpUa ’ĄŸg&Ełxap`a7Ü/ < OK a8„r"_ta&p+A>NuaöąAķ€fa7ŽB­jB­Jp+@Fp+@B -€Īa&ü`ģ -F°­JfNB­Ja3’pa"Ŗa"¾EłxĮpDa3¶aPŌ+@ja6šCķ€fa'˜Aķ€faMü/ -jVĄH€HĄ€ŸgŌa4ĄAķ€fpqaŅ/Aķ€fpQaʁ—p°­jWĄH€HĄ€Ÿfv -BāUĄH€J@f pa".a"B` pa""a"6a3 -Ba3†0<. a2ųa34Ełu'pDa6ĢaPÜz(-B"mŖaV\aPüaPÖR­JR­B -B°«’śo’ ]‹Aķ€fpqa8/Aķ€fpQa,Į—p°­jVĄH€HĄĄŸg@a2€pa!˜a!¬Ełyp;a2¤a5ęCķ€fa&ŽAķ€faLņ/aO¬J€VĄH€HĄ€ŸgŚpa!\a!pa3ŖNu <€r4<Aķ€a JgAķ€Zt2r2a"` Aķ€Ztr a!öNup+@’p+@–*-–(-€®"mŖaUx0(@Do(Eły@pTa5Ą/Eły”pa5²r"_ta$R+A’*-–(-€®"mŖaU60(@Dn R­–p°­–l˜p°­’WĄH€HĄ/p°­’WĄH€HĄ€Ÿgāp°­’f(Eły¢pa5J/Eły³p a5aKp°­€²f paa(EłukpEa- paža(-€Ź mĪå„/0H*-€²("mŖaPRaGR/p °­€²WĄH€HĄ€Ÿg’fB­€²praCĘa,šEłtįp:a,ĪR­€²(-€Ź mĪå„/0H*-€²("mŖaOžCķ€„a ”a,x(-€Ź mĪå„/0H*-€²("mŖaOÖrDa=zp°­€²]ĄH€HĄ/(-€Ź mĪå„/0H*-€²("mŖaO¦a2RaF¢Į—(-€Ź mĪå„/0HzŚ­€²("mŖaO~a2*aFzĮ—p °­€²]ĄH€HĄ€ŸfR(-€Ź mĪå„/0H*-€²("mŖaOFa1ņaFB/p°­€²fB—(-€Ź mĪå„/0HzŚ­€²("mŖaOa1ĄaFĄŸgTEłyČp(a/Z/EłvĶpa/Lr"_taģ+Afp°­ff$(-€Ź mĪå„/0HAķ€„*-€²("mŖaN‚`żp°­fgš(-€Ź mĪå„/0Hz("mŖaNa1p+@z -€Īa0`Fz(-z"mŖaM^Ełz?paög&p+@~a- *-~(-z"mŖaMR­~p°­~ląR­z -z°«’śo°]‹aģ˜Nup+@†p’Š­€¾aĘ`*(-† mĪå„/0HEłvjpa-Fz("mŖaL¦R­† -†°«’śoĢ]‹p*Aķ€fa-,p+@vNuEłzUpa- /Ełzqpa,žr"_taž+AŠp°­Šfaņ¤NuEłz€p a,Öa.R€WĄH€HĄ/ <€r4<’Aķ€aīĄŸg*Ełz€p a,¤raxp2<:¤aBlCķ€ZaĢpa $Ełz‹p a,zaŅR€WĄH€HĄ/ <€r4<Aķ€a’ĄŸg*Ełz‹p a,Hrap2<8ęaBCķ€Zappa ČaöNupa ¼pa²aõņaļźa@Ņ`Ū0Nua  24&8:ŗBgmpNu<ngö°ƒf²Ddīp’Nu¶€føAdāp’Nu 24&8:JBg°ƒf²Df “Efp’NuJEgųpNupēa J€kp’NupNua,ęAńHPB?HQ?<NNAP _ŸNuDExaž`bDEa–`ZaR11!Nua11!Nu 24&8:DE`6 24&8:DB`&a\&8:DE`DEx`aH` 24&8:HĀnghDBHÅngXDE~<œEn g6Ē@ÉAĖBDFœGcœGc¼Gb8(vHDģl`ÜGģ«8BCHC` ÜGHD8HDģ«ģ¬µ…k&ÓDуd āāQRB B’bJ‚jDBNu ĆDÅENupN֓D‘ƒjd»‚DA@€ €’’cŅAр[Ź’śSBoJ‚jDBNurptNuH@g0J€`Š€[Ź’ür”GoäJ‚jDBNu0ftNuŠ@[Ź’ürB oĘH@J‚jDBNu $HĀkB’k Bj*DBäØNupNuDBB’kōBjDBäØD€Nuf €€gōp`=a Ą0Į0ĀNur$o, €’’b4< J@k Š@[Ź’üH@NuH@RBNu4<Š€[Ź’üNuD€g8k2 €’’b4< J@k Š@[Ź’üH@DBNuH@RBDBNu4<Š€[Ź’üDBNu4<ūāNur4<į@ftNuHĄk’~r4<J@ftNuŠ@[Ź’üH@0Nuk(g.JBjDBŅAр[Ź’śSBDBjNutNuŅAр[Ź’śSBkšNuJ€lŅNu0gäH@rJBkB J€k䩀[Ź’ü`ŲDBŠ€[Ź’ü`ŗJ.;gPī:p’r’4<’Nup`0rĢĆĪÄHGÜGd†HG’G‘†dSWŅDуdų€Åi”?<>0rĢĆĪÄHGÜGd†HG’G‘†dSWŅDуdų€Åi ?<>0rĢĆĪÄHGÜGd†HG’G‘†dSWŅDуdų&2 H@kփÓAр[Ź’ųSBkփejRAd R€dāāQRBJ‚jDBNutNu?<’’,>žCEd…’G‘†H@0r`’x€ÅJCgz?<0rĢƐ†dSWŠƒdś€ÅiĄ?<0rĢƐ†dSWŠƒdś€Åid?<0ĢƐ†dSWŠƒdś&2 H@kփÓAр[Ź’ųSBkփejRAd R€dāāQRBJ‚jDBNutNu?<0r€Åi’R?0€Åi?`®?<’’`’Ć@$g\k“€dHĮ²‚fĀiHĄNufnpNupNu"lDaD€NuJ€nD€aD€Nuzx°eŅŲ„°dų`°eŠ„ā‰āŒfņ Nup`:"_Kłz˜Mł|lIł&’Oī:„HQ <€ŪĄŁĄ-H*,ü`Nł,üfF<üNł,ü- Mī’ņPīf$h ÕčÕčŌü Šˆ-@.HRHPBg?<JNAOļ  Hī2=| dad=|.,Hx’’?<HNA€@\rž’’’’°e ,/?<HNA\-@Š†-@&&<?</NM\?<f/NM\aAłr°Cķ€$I ęˆB™B™QČ’ś"JÕŲrp`"Ź)’’gQŅ`B’BŖŌĄg°fāfÜ$ ÄAfÖŠA`Ņ&n-K-K-n&"Aīt0<ēr’Xˆ0ĮQČ’śEłrę-JNu Hłˆf4Nu$H$& K-KCš³ī"e a%ˆ³ī"d ‚aAī"ךµČfś B &nNupNīHē>āˆd āˆd3 āˆd# āˆd# # āˆd# # # # āˆd Ač’ąLŠžHį āˆdAč’ĄLčž Hį LŠžHį āˆd Ač’€Lčž`Hį Lč|ž0Hį>LŠ|žHį>āˆd~# # # # Ač’`@AčžLčžąHį Lč|ž°Hį>Lč|ž€Hį>Lč|žPHį>Lč|ž Hį>Lč|žšHį>Lč|žĄHį>Lč|žHį>Lč|ž`Hį>Lč|ž0Hį>LŠ|žHį>QČ’ŽLß|žNu$H$&"BAń -KˆaXŠAī"—šµČfś B &nNuHē>āˆdŲāˆd2Ųāˆd"Ųāˆd"Ų"Ųāˆd"Ų"Ų"Ų"Ųāˆd LŲžHŃžCé āˆdLŲžHŃžLŲžHéž Cé@āˆd LŲžHŃžLŲ|žHé|ž LŲ|žHé|žPCé€āˆd~"Ų"Ų"Ų"ŲCéžš`:LŲžHŃžLŲ|žHé|ž LŲ|žHé|žPLŲ|žHé|ž€LŲ|žHé|ž°LŲ|žHé|žąLŲ|žHé|žLŲ|žHé|ž@LŲ|žHé|žpLŲ|žHé|ž LŲ|žHé|žŠCéQČ’ŽLß|žNu`Ha8Aī-Hhp ašpMa”=@F?<NNTT@Aī 0Ąr p0ĄQÉ’üŃ`pdr taŖ0.F=@”=@Aī Cīœp,2ŲQČ’üAī p 2ŲQČ’üa `a:`x`|peahp`(p?a(adajaęHz?< NA\?<LNAfCīR2ĄAś¼0Aś8ŠĄ2ĄrĀč2Ą2Įa"<2¦0<ČNBL®Nurt=@:=A@=B2::(   F..26"8@"PQ1!P1P!0PP`0  q#p"AśӘQČ’üNuAś Nu|^|¤Ģōˆ       R^Ü,T:    Hz(` N¹3Hz ?<&NN\Nu9¶šgø„Nuų„Wł¶šNuaśaa ā`b`hNuNuNupc?a0QČ’ųNurd°Ad6AīņŠĄg,B(dB(dH Ac<a(tgēBAī¼ŠĀp`TNuNu?<OAīń`d?<IAīš`Z0<€HēĄ€ Ia VLßtßÄ IgĢ OgŠ Ugč Agš Rg*afNup`a (p`2r0a.fīHRa >Eś”r$‚ßßß’“šWÉ’ügr ‚STD:gr ‚COM:g r ‚LPT:f2FA$_0€=@D~CīņĄüAī¼ŠĄ0< Bha~B™2Å"ĒpNu$_AīF Gže><žŁQĻ’üBAīFpNua’hgųzp=` a’\gģzpa’Ta’RF¾Bdö&8*Lß?aó|<ažöSF B’eō BgāˆāQRB`ņRAdR€ €Ÿ’’’e <rRF&é›0Ć€’’’xažĪCīÕ±ÉfŽüEv+0JFjDFv-ĆHʌüd0ĘBFHFŒü 0ĘHF0ĘAīĘNuprt|`šHQ2.d Aeg>r Cš 5e&!R 0c 9c¼0`ź<Rˆ"_`’V‚Cšü0 Efö"_NuažĘaŖ/ CīFr  gč’’ 00’VÉ’ųJAgB @ nN @’ūmHJ@jü0ü.4DBUBkü0QŹ’śŲSAg QČ’ųü.`šS@k ü0`öü0BAīF“Č "_NuŲü.ŲWAkŲQÉ’üAīÕŲŲ 0gĄŲŲ`Čprt|Pī;Qī:  gų +g -fĘ .g40  bž 0e 9b €’’’daż6`äRF`ą .f 0e 9b €’’’dażSF`ā Eg efX +g -fĘ 0e 9oSH†`00  b&H„z0  bČü ŲE Dčoę`ZJ†jDDÜDSˆ4<.ašnJFkSFk4aürQĪ’śašZ`&HēąaüžFFaüZQĪ’ś&8*Lß/ašĘ,HĀ܆jDBJ.:gt’Bn:Nu @$@Jfü‘ŹSˆ a„`ŚQČ’üNu$Aaf`ŁQÉ’üBNuHz aJ`HzaHHĮ `¦HPHQ0(Šikša: $I _a"āIUĀd4ŁāId4ŁāId$ŁāId `$Ł$Ł$Ł$ŁQÉ’ö _Jf,aņāId4ŁāId4ŁāId$ŁāId `$Ł$Ł$Ł$ŁQÉ’ö @NuSŠaÄāIdŁāIdŁŁāId`ŁŁŁŁŁŁŁŁQÉ’ī @Nup `+ā/ aŒ$I> _a‚²G`³ VÉ’üNuaāg`aÜf`ae `ac` acp’NuadųpNu/ aH$I> _a>4“Ae4v`µ VŹ’üf¾ANuHP0(R@kBa$ $I _a āIUĀd4ŁāId4ŁāId$ŁāId `$Ł$Ł$Ł$ŁQÉ’ö @JfßNuNup `+"aĪSAf°Nuaņg`aģf`ae `ac` acp’NuadųpNuašSAk°fJANuHē€ HPŠhkJaŒ $I _atāIUĀd4ŁāId4ŁāId$ŁāId `$Ł$Ł$Ł$ŁQÉ’ö @JgSŠLß`ŁQČ’üNup `*‚a.°Af`µ VČ’üNuaģg`aęf`ae `ac` acp’NuadųpNuaō4“@m4v`µ VŹ’üf’@Nu|H`|i`|lĶ@H®~|`õ&ze`z`zdĖ@H®>|`õth`tpa ".ōNutj`tÅ@H®|`ōšrk` rf`rg`r5=@|0`ōŲt)`t` tr`t2`tÅ@-AĢ=B|`ōøv8`v(`v-` v!`v `vĒ@-AĢH® |`ō’HAHBHCHDHEHFHG-HĢfAīD-HĢH@-@˜Hīž|p`ōdB® p'rtaō n2rt6(’ōSC0(’üS@aģpaŚB®\paČpaĘva0paHQ?<NNT"_HV n2MīF-@ į@6H® H®00(’ōLØ’ü=C=B&<RF<†>RG=G¶Yfx-IÖC=C=C$t¶Bft=B=B(tŌFčJÄĆ=BB®B®B®*ÜDo>ŽEo:ø@l6ŗAl2DDk =D™VBnDEk =E›nBnœ@cVo žAcŸno ,_NuÅAH§`/=@ ažÖ _ad]Akžś024Eśž˜$‰ Bbžę5B5A6CC’š5CčK5C:8Aī B˜0Ą0Į0Ä0ÅŠDkxŅEkt0Ą0ĮAī <:žd>:žbSFSGøFn\ŗGnXDDk0„BhDEk1EBh Fc‘h‘h ’Gc“h“h0°hb"0°hbpmrt-|>:H-|>NL`š¼Nu-HN¹5ģ?<NNT-@X¼DbĶD¾EbĻEB®b=ET=DV-|PB®LB®p n20(’ōLØ’ü=CJ?=B^ÖC=C\=Cj¾@dr¼AdnžEœD??RGRF=GF=FHtŌGčJÄĆ=Blt¶Bft=B`=BnGčOĪļĪĘpŠ‡Š‡ €žb na¬2ß2ß2ß-IfHVMīF ,_Nup `%T np`„??/ a¢, > _a˜4$FAīFpĄ_@[00Ą0ü][vx`* [g" ]gĄ |g QĢSˆx` xQĖSˆrQÉ’Ōü]ü[vx`* [g" ]gĄ |g QĢSˆx` xQĖSˆtQŹ’Ōü]BAīF0-H,=@Üp4aīä2HĮNuEėµī"eaNµī"ep`$8&Ą6ü’üNuEė µī"e a,µī"dŽ&Ą&Į6ü’ųNuEėµī"e aµī"dĄ6Ą6ü’žNuEėµī"e aņµī"d¤6Ą6Į6ü’üNuEėµī"e aŅµī"d„ĮĄ6ü’žNu <}a&$Ia `ģ€$XaĆH`ōaó@HR?<NNT @"_ <}Nuaų`ŚQČ’üNuĆH±Ég"³Īc³Ļc/ 0)aÖ _$PS@kāH2ŚQČ’üNu2(g$PRAA’ž4DBHĀ%‚$Y2PŃg Š1AHĮRAA’ž%ˆNuBhNuĆ@tāIÕB=BŽAAT@t n˜-H,g0Ač( f hgS@S@gŠüRB`ā=BÜ0`ķPS@gņNupLīžĮAīDał8H®TBnBLīü*āHd"aZāHd"aRāHd"aJāHd"aBāHdF n Dg"`.2.JWAŅARA0.L n˜.g hfRAŠüS@fī=AB"aNug//ANuŠ@k AīB00HĄNuX@g .˜NuAīD Nuz`zAī6Cī|āIdXˆCī |2Å:H‘<0`$6H®pAī2`Aī.p` Aī>`Aī*p4.‚ ŠgĀ=BNuAī*pB˜QČ’üBX".˜g pa÷ŽB®˜Nupra÷†H®P?<NNT~U@g~tļb3ĀDŗAł¶ņpr’0Ą Į0üB˜B˜B˜ ĀR@ @ÉfčAł¶ņ0Į0ü0ü0üPˆB˜0īTpļ`0Ą0ü0ü0ü0ü\ˆ0üXˆ0īTpļ`T@0Ą0ü0ü0ü0üPˆ0üBXpšŠnT0ĄrļaVA0Įp1| 1AŠüQČ’šBX0ü$HTH0üPˆ īP0īTpļ`0ĄNuHī(Fa$Lī(FNuSÆk [0NupNupaä` xp>`öHPažŠažą _&X Pfą/|~KłÉ²zaĄg @ ep 2tÄĘCł¶žÓĀ"Ķ2Åü S@HQCłŁRŲ»ÉRČ’ś"_d¾ü BTAēA3ApĄĒCł¶ņÓĄ4‡$I2Ēaž2Ē2Ē2üB™"ü’0@2ĄŚA\‰xva’@gF2#M 4Äśž43BS@ -fé HQCłŁRŲ»ÉRČ’ś"_d@BēAøAb8ŅüRGRC`“3R’čSG5GĘśżģ5C J1DŠü±ÉcōaRF Fe’ `žąRG GĒdōNuXAł¶ņSF1F41RüĢü1¼h4¼Īüšxń1EDgž¤"<¶ņp-A˜`õT n˜"g(t( f h fpHē`€aõLLߊüRB`ŚNuaė¢a ¦p-@-@(-@4-@@=|’’Lpraō²H®PāKāLŅCŌDH®XAłŁ¶0¼ 1PP1P 1PšAī L®?P<œ@>žA”F–GHĆŠü 0Ä0Į0Ā0ĒXˆ0Ą0Å0Ę0ĆXˆ0Ä0Å0Ā0ĆHSGī~2gtL«x0aō Öü QĻ’č&_NuSAkA>Āü AīŃĮ1@HØ<`Lp`ņH§Ąaō-_\NuĮBJAgīL®šPÜDŽE°Fbź“Gbę?H®Xa’L0S@kÄ@>Ąü AīŃĄĪüP‡Ł¶"G0(īJgRJ)@gĄ1@2fJ2HPL®<P0aór W1@’üAīÜ0Ą0ü Ēpiaēņ=|Ž®@ąpiaēŽ _CīŽ"Ų"Ųpe`,?4<6HPaó _2tLx0aó=n|Ü=| Žpiaē 0.Ü2paó H®\Pī`PīH®|SCSDÖAŲBH®„0`ōžS@k@Ąü Aī=pÜfØNupa papapaL®„a¦`żÜS@k*@Ąü AīŃĄ0g BPaņ“pgaēp aņ„J@f’npa’hQī`B®\L®„rt`’vNuHS&I. FVīa8.”:.–L®€4.ŒRBÄÄ“@cBnŒaL®€4.ŽRBÄÅ“AcJ‚ÅSA=AŽ`@pJ.afrJīk8 Eg,2.’Į pg  qfL=A’=A pjrtaęž`8a>`2 d. Vīg" gt gZ gn fPSnŒjBnŒ`D=@ 0.ŒĄÄŠn\=@ 0.ŽR@ĄÅS@Šn^=@¢prtaę4RnŒ0ĄīŒ°n€eBnŒa(QĻ’>‡j’4&_NuBnŒ`č?<HyNM\`ŲRnŽ<ĢīŽSFÜEœn‚eSnŽ`2NuS@kD@Ąü AīŃĄCīÜ0g.?a$=_Üp 2.ÜašāL®š¦6†Fgavp `ęp`p`šęNuB®ŒS@kl@Ąü AīŃĄ=PÜaż†=| Žphaå$L®š`4p-@Œ"<’’$&Hī Aś-HH-HLBn pmrt`å,Hz  ?<&NN\Nu n2Mī JFo`JGo\H–Ą 8N-@-@ p-@*-@-@ H®0H®00(’ōLØ’ü=B=B&=CÖC=C=C$t¶Bft=B=B( Nuaé€Hz ?<&NN\NuL®„ n2Mī (8N-D-D x-D*-D| J@jpJAjrRB“h’ōe4(’ōRC¶h’üe6(’ü”@ot–Aop=@=@<‚–E=C=AŅE=A4(’ž=B=B&6=C?ÖC=C=C$t¶Bft=B=B(*N ,M=_B®Bn 0.Šn=@=@=E NuaĀo a֊ؐNupNuačJFoöHPJhjaŲ?<?B§?<BNAOļ _*kBg?/(?<BNAOļ J€k NuNÖafo°azJBk°Af¤`aŒ|??/?<BNA.k \Hx’’?<BNAOļ [ĄH€HĄNux`x*0ao< 2fJ€jr`pNu~d°GdEīņŌĄH‡<Nup`&0Š@ŠFŠ@Aī¼ŠĄJhg PLNu`LJ€g(HPB˜Hh/??<@NAXLß²€f ŃØLNuJ€kp%`Źa’¢JBjaŗ!|’’ļö ??<>NAXOJ€kÜpNu0< aF`0< CīF2€p`¤p a0`p CīF€p`aCīF"€p`‚Hz’Ģa `Hz’Ä"J`pB.@=|’üDNuaņ.@FpĄAR@Cś`N @’HĄ` @’HĄHyNŖaŁŒačR"H`HyNŖ`īHyNŖ 24`ą@’HĄ` @’HĄHyNŖaŁTač"Ha’v`ąHyNŖ`źHyNŖ 24`Üa’X`$a’R@’AīpŠīDr°AeA`?ažš0J@g*?Cś’J€aŒp0čˆg?Cś’2paxSWfņTNuB.@=|’łDNuB.@až=GDgNup`8a’č`ažÖCīF"¼E p`4J€g$_aĄ:ęŒ šHNŅ$_a°:ęŒ °HNŅ$_a å„B°HNŅ$_a’Ų„BpHNŅ$_a„B0HNŅ$_axē„BpHNŅ$_alå„ŃÄNŅ$_abŲ„ŃÄNŅ$_aXŃÄNŅ$_aPē„ŃÄNŅ$_aFå„ 0HNŅ$_a:Ų„00HHĄNŅ$_a,p0HNŅ$_a ē„ŃÄ 24NŅ$_a:ęŒp 0Hgp’NŅ"X I"_(*UGk*<ĢÄ(Ų†QĻ’ōNŃp`p`p` p`pJPgź`$_aÄå„!€HNŅ$_aøŲ„1€HNŅ$_a¬€HNŅ$_a¢ē„ŃÄ Ą0Į0ĀNŅŃ.@<.DAīpŠĘ$I"t QÉ k"RG“eīf~`čSG * ’’gŽ *’’fÖSG`Ņ‡<.DjZ\FkBJn`g Fgd Fg^HS&I.aä&QĻ`p???<NM\QĻ’ī‡jä&_NuHQ/?<’ż?<@NAOļ Nu`P?.`Bn`a’L=_`Nu``÷ĢNuagfJfH@@’`HyNMXJ€g HyNMXJ€Nua Nu"H Y0³Īe$³Ļb PŃrŅ@A’žg$D!(±ī"fX‚Õ®"HĄNup`rap`ŚQČ’üNupa‚Nu4pa2‚Nu$pa"‚Nup2(g"P²@g2RAžŅĮDAHĮ""n"r2gZAž“Į³Ėe2 ‰1@#ˆü-I"Nu1@NuAīt2<ēXˆJX[É’śj]ˆ`¾p`(a."n"“Į³ĖdĀp`paĢŸNu?paĀ2ŸNu/paø"ŸNuHē’š n&$n""HµČgr k&@ S`šŃĄµČg^ kö#&@0+āHd3 āHd3 āHd# āHd# # āHd# # # # āHd`# Ač’äLŠžHį# Ač’äLŠžHįQČ’ā&‰µČf¢-I"Lß’Nua’t ."‹NuaJAfCśNu"X2±Īe±ĻbPŠ6gHĆRCž(Dƒ#ƒHNuaž@gžn` až4gžb0’`žž/°hd6ažÄ$ W PāHd2ŲāHd2ŲāHd"ŲāHd `"Ų"Ų"Ų"ŲQČ’ö _/a’„ _Nu/°hdōaž‚$ W2( PŠĮĄ"āId°āHdŲāHd `ŲŲŲŲQČ’ö`ŗr’Ć@/JAnr W4(”Ae4RB°Bc0?až0$2 W PAš’`®HP"Xp0g"r~ RA¾fS@nö _ažö`żŠ¾1žVČ’ś`® _NuAīFtŠ€v×ĆQŹ’öBNuAīFté˜0 9c^ĆQŹ’čBNuAīFt å˜0Ćē˜QŹ’šBNua `aÖ`a®CīF 0gśS‰ JfS€`ćŽĆ@a’ AcrĮ `źĆ@a¤ A cšr `ģĆ@a’\ A cąr `ÜN¹7Œ$H`üÄHēa>LßHP?.d=hdN¹7Œ=_d2 "@$Y4“Ad2ŌĀ`0QÉ’ś @NuHēĆ@&gī( ƒbāøƒbÜLßHēaąL×Cī 0$I’Ćr `ĮQĖ’ü"Jīr0XDĮQĢ’üD@CņžtE³Źe P’žA’’`³ŹfR‰Ų“fō`Į³Źeś"J²*c j’’|0²"cR’’Lß’ĆŅÄJ„gR‰ ŅĆ$I².f) 5e*¼0!².gų -g  g 9f ¼0³ĄbŽ`RB`āp¼1`ņp `8Ć@`r ??aūę"P02R@āH`2ĮQČ’ü Nu?AīFBHP?<GNAPAīF `ā r ?HQaüš _/ ?aü0 _4gSB²@c:“Ad,J@gB’@’BmŅĀS@,. RB6³VĖ’üg(R‡ F"GQÉ’ģpNufśJ@föRB`fšS@k³VČ’üfät0HĄNuaś”aJ‚jtNuaś†HPa ‘ßpJ‚k NuCš³Čg.BJ@gš  gś &g, $g %gN¹80ŸNut’NuRˆptž`2Rˆptž`Rˆptžr ae OgX Xgn HgSˆRB ae Fb$0k  c_  c €’’’b退`Źt’ŸSˆHĀkaŠ$‚NuRB0 bą €’’’bÖē€€`äRB0ā fĘрdš`¾aöp’`aö p`a÷p3ĄXŲB¹XŌNu>.D<jRGg>VGg:TGjp’` 0HPa0CīF$Ip’R@  fų _ałŽāHd2ŚāHd2Ś`"ŚQČ’üNu`ö<.DHSGīFaŽĄAīE·Čg fģ< &_Nua`ĻNu.dföa$B¹XŌ=n`r>.D<jRGg:VGg&TGjp’` œ<.DaŖAīFa$J‡kNup#` € z’ fa2aŖ` zžś f a"a’AīFaņ  f‘Č#ČXŌJ‡k’zNu0:žŅg0.D<jRGg(VGgTGjp’` <.Da&` zž˜ faĄa8` zžˆ f a°a AīF "g p’R@0 ,g  g  fčHp`:pR@0  gģ  gę "fčR@0 ,g  g  fŠHpRˆU@"_  f“É#ÉXŌ$H _a÷ģ`ŚQČ’üNup’R@0 ,g"  g  fča~ ¾(fRˆ~Nua ~ `īa~NuaüŅJ‚kHQ ! gśR‰³Čf _NuXX~’Nu0j \@??<NMXJ€k .dgp Nu` ģ<.DHSGīFaĪĄ ,g gAīE·Čfč< &_Nu ."Ffš +"’žgč ,gŌ`ąa$ZXŠNuHz’ųxlJj xo`xdJjxc, EśJDD`D‚D”D¤ Dz$X Pf-K&°ƒe "&J$IpSNup` DLś€4 āˆfd$R€$&–€k(*Ś„N‘dN–€jšR‚“oäāˆfŽNu.‡č#Ē\8Hł€\<æś’Ųe (*N‘dN$&R‚¶‚gp$(ŲāŒ*N‘e*(N‘dN(*R‚¶‚o2(N‘dōS‚(Sƒ¶‚o&*N‘dōÉB*RƒR„Nø‚f$ŗ‚f$S„ÅD`ĘS‚(°‚l//"a‚ R€"°m’xNupŠ‚°m’lNu2(g±Ļb±Īc  P"H`Nu/0HĄaõī2  _ PSAvjx Eś(¶WĢ’üf* ae zb ĆQÉ’Ö @Nu‚„…†‡‘”¤°±³“ĄšŽ¶€’™„·ø²µĮBnp`p’Bnp`p’=| p|=Fn@’=@b=n`ra>H®j=Ah~`:a JfBH@ RfF.f Kg" Mg sg tg Pg HfČ~`xSGjtRG¾Fcn>`jAīF gp gj g  g’r°f°fn°npe†¼nbfJ.fj6€pRG¾Fc$SG` J.fj€pRG¾FcRF` ¾Ff`’>¼ `?~’a¾p a0p a*0Nu|`’`CšpEš`bµÉfų`²¾Fg¶RGJGgžüSGSF¾Fg¦CšpEš`Y’žµÉfų`”Nua@Jf gņH@Ą fa(@ fza0 b Źü Ś@ Eeč0Nuaó(gśNu4.rf?HyaÖÄNM\Nu=|’’D`˜L®ja²z¾Efpadppa`AīF¼Eg0Paø¾EfaFRE`ܾEfp a@a8?¼nnnp a2RF`ņ<aR¼nnoS@f ²nhfSnl=Ah=FnNup` papq4.rf?HyaÖ*NM\Nu=|’üDHēaīģLßųNu|A’0"P2(²@e2<EīF`ŁQÉ’üHP=|’üDJ@g$ażbAīF$Hp’R@ 0 fö _aņ˜`ŚQČ’üNuHPp?a€p a’| _2<’|0`¶HP$ZXŠAī B˜6<’ÕĮŚQĖ’ś _NuHzū¢`HzūŚaŲ$_Hēaū:CśŅ`2Hzū†`Hzū¾a¼$_HēaūCś¶`2Eśūj`Eśū¢HēaūCśZAśų`EśūN`Eśū†HēaśŌCś>Aś *FMī <‚N•vž"+’üS [0gtŌ@ÄCė’ś!‰(QÉ’źjąLßxNu,.܆Ž‡Ü„Ž…܆Ž‡(sh*sx<3h>3x?¾Fc>Ų֦֞VSGk» VĻ’üf>¾FNuTNuHēĄpr,.܆Ž‡Ü„Ž…܆Ž‡(sh*sx<3h>3x?¾Fc>Ų֦֞VSGk6²6VĻ’ņf >¾FLßNuTLßNu,.܆Ž‡Ü„Ž…܆Ž‡*sh'³xh'x:sh7³xh7xNu,.å†å‡*rh%²xh%x܄Ž…Ü„Ž…*sh'³xh'x:sh7³xh7xNuCś&€pHQ/Hy@NAŽü NuCś pa:NuHQ/Hy?NAŽü Nu&g4 FgĀaėĀgŚJAgaÖč2<™ R@°AdSƒfņ0€Nu0€aė°p Ceź`ž&g4 Fg˜aėvJBjaėŽgP°Ae CbRaš R@Sƒfę0€Nu Fg’Raė>g JBjaėP°AeaŅJAg RP0 pNu`8 Fg’6aėgJAga @eaėRPƒ čNup NÖHēĄŃØB?<?/?<BNAOļ J€küLßLNu&8aźØJBjaźĄJAg Df*Śƒkŗd0…Nu Df–Ö€BHēĄ??/?<BNAOļ LßJ€k !@NuHēĄBHh Hx??<?NAOļ LßJ€o €ŃØLNuk:fģp`^kü: gō €ŃØNuBHPHQ/??<?NAOļ _J€oŌŃØ°ƒfĪNuBHPHQSƒ/??<@NAXLß²€fŃØNuJ€kp%`ąB9Ü6`$HēĄ EaļnAłÜ6 AerŁQÉ’üBLß@Ķ‰Hē€ IaųX"H _/ aųNaļ: _/ ?aļ0AīF-HĢ A–er•ŁQÉ’üB2"_Aī&-HŠ A e ` \gŁQÉ’öBa€9Ü6gaZe -|Ü6Ōp[`pZaĢDajAīF"H0.¦g "Hg \fö`ņAī&ŲfüS‰ !.gR‰ EīFŠ _aķp`ŚQČ’üNuHz?<&NN\ @Nu xņ NuAī@Bh`ŻAī@aŻ n@!|’’ƒ}Nup#ŹÜlfpĄÜWNup’`ōp`š•Ź#ŹÜhNu?a0` ?a2Ć@Ć@aé` a Nu4.`AīØf n2LØ’äR@RANu4.`g S@SAH®ŒNutŠŅ°bp’²br’??pał˜pYał’0ałŒ0`ł†z–pEĄÜ\½ü|lgPłÜ^`Lś’ŌJg&B.C`a8aD*9Ühfap-I,=|Üp4aŹJHz*9Ühg ENŠp’9Ü\`Ź _a &nOī:„NŠMł|lIł&’Kłz˜$<€ŁĀŪĀNu[1][Error +111][Return]Ełz– g ²g>Jfü`īAś’Ųr H€jr-D@ĮHĄ€üd0ĄH@HĄ€ü 0ĄH@0ĄCś’œNuAīF"H ü[1][ŚfüSˆEś’’ŚfüNuaN·īfų"_Oī:„NŃ"_Oī:„HQ`6 9f8g"9f4gJ9Ü^f·Ąga"AOī:„NŃp\B¹Üh`ž¦Gó0ü6#f&#-KNukī"c"£–Ć C gT‹6fģ`āP‹v6"cgŌRCC’ž(D„#„8`ÄD@v`v??NMXJ€NuJ@kč??<NM"UAf J@fH@€€’Nuaåģjśŗ0fp’Nu\@`ČaåŲ`]@><CīF Ipa<0HĄNuaå¼`]@><CīF Ipa Nu?|ü`?aåš0R@f|ü0aźˆHĄJFkHPaś _Nupo`ż“HSHP&I>g\†SG??<NMXĄJ€k QĻ’ī _t’&_Nu&_`ż„pt`ptĆ@S@kZ@H§ąaė8LŸ6ÖBĘüPAłŁ¶ŃĆĄü EīÕĄ=ZÜ=AŽ-Hą: DNexMŁQĢ’üBB*gJnÜfąNuaźÄJANuaög `ašf`aźp’NuaäpNuCų’ž`Cų’’`“É`Cų` Cų`CųJhfJ®fR€RR‚RƒR„R…R†HP? Ļ@CīFHŃ~8:åE#‡Pü&<’’2 `°ƒbÄ$“ƒb¼ĄĀYEfģ`"RAf rŠčˆŠ€`&Š€e "Š€eŠdp`ü`JAkŚfgR€ć ečr?åDŅDŠa‚AīaĆ¢8$HXˆ Ą:CīFåEŅÅ` įYEjśT"_$‰PŠ"Ź2ÄtråDŅDäˆd0Āāˆd Āāˆd Ā Āāˆd` Ā Ā Ā Ā Ā Ā Ā ĀQČ’ī€jäNu`ūĢaĘD€a D€Nu na^ K"n³Čg42 $`gök2&H–Į·Ņg Af ³Ņd±Ņeђ$`µÉeµČbѐĮXˆ³ČfĢ&nNu A’’gµÉeµČbѐAš`¬‘Ź`Ø-Kxž$ n&$n""HµČg8" &Ak ²‚cѐ S`źŃĮµČg"" kö#&A²‚cё2+SAāI3 QÉ’ü&‰µČfŽ-I"&nNu-Kxž$&ր n&$n""HµČgR" k&A²‚c ²ƒb S`‘ S`āŃĮµČg4" kö#&A²‚c²ƒbrŅkĀ‘ĮX‰`Ž‘‘2+SAāI3 QÉ’ü&‰µČfĢ-I"&nNuaP n2LØż¦6(ż¬’n\”n^HĮHĀHĆNua0 n20(ż¦n\HĄNua n20(żØn^HĄNua n20(ż¬HĄNuaÉž:ŠffNuarĄNua J[ĄH€HĄNu:nfa@ z^0NuJ€g6$:Pf,Hē€?<"NNT&@pץ/&¼lžra :,gśa &ŸLßr`r??Q@ĄlœHyNM\0Nu#Čl˜Nu-Hb=hzBnfNua`įš nbaē4Ņīfp0nfc`äˆNuaē/ ? nb"XŅīfRnfSnzkx _g !g &g. \g.aį²`ĢRnfSnzkN`ģ0"_fCłOpHĄ`ä(0"_`ōpR@RnfSnzk \fī2"_g°AcÖĆ@’@HĄ?aćų0`āTp?aįR0HĄ"_`ćāNup?aį@Līn`į¬Hīn nb"XŅīfRnfSnzkÖ _g,vxz| +g2 -g, *g $g& #g$aąź`øRnfSnzk˜`ģĘ` Ę`ĘRCSnzkœ _f Snzjč`’h #gÜ $gŅ *gĄ°.gĢ ^gH +g^ -gX°.fXx’RDSnzkL #gš ^g +g4 -g. _f.R‰SnzjŠ`’RESnzk ^gš +g -fĘR‰Snf nb“Š? JEf0ŠDHĄ2HĮgR@?=nxvjDnxLī8nĆ@aē:aå<z āNdz* I0`  fE’’QČ’ōāNdSˆ|$’’āNe Jnvj|-’ž nb XŠīfRnf0°nfc|°.g8 _g>°.g@ +gN -gR $f ,fHQ!aß^Rnf"_p$R‰HQaßN"_`žRnf`ī)’’  g *fŽp `ŚJnvjŌp-`ŠJnvkŹp `Ę=_fSnfRnzNuH§Līn=BvjDBN¹6TLŸxCī*äEń0ŌÄRˆJCfRCR@r2‚ĆHAARA²Cdü `ō Efr0SˆĮµÉbī Eg4 5e.!Aī*ä³Če0R 9c¼0`āR‰ü1R@ü0³Źcų JüEr+J@jr-D@ĮUEoJYEcü0SEnųHĄ€üčJEf0ĄSEH@HĄ€üdREf0ĄSEH@HĄ€ü € 0 0REfĄH@ĄCī*ä nb XŠīfRnf0°nfcJ°.g _g °.g +g -g HQaŻÖLß`¼Rnf`ģJnvjęp-`āJnvkÜp `Ų=_fSnfRnzNu"H YJQfNu YˆHē€€ałJL×Pˆ|žHēPGłr¶Cķ€&֛֛֛֛֛(HDÖDåCŅĆBg6ēCŅĆvĘŪŅĆ6åCÖ[RCĘFŅĆ8Ų[Ų[Ų[aL6ÖCÖ[RCĘFŅĆ8Ų[a:Głr¶FWfĀTLß Lß“®—Į-KAń ‰`½b$I\‰±ŅbfBj‘’QĢ’īNu$Y±ŅbfBj‘’QĢ’šNu˜®Ų„*Ų„Ų…CńH`ŠÖ˜®š®ŹéŲ…X‰`Ž$_  IaŽŚHR"H @`Ģ˜®Ų„*Ų„Ų…AńHNu˜®š®ŹéŲ…X‰`ą$_ IaŽ¦HR"H`Ņ n±üsŒd$HJfü-H‘ŹSˆ Nup"`óŠHPaŲ _aą>`ŚQČ’üNuaĘ JHē aåRLß0Nuaģ`µÖp`p-@NuŌ BDesk Portfolio Partner --------------------123456File Load Save Quit Function View Search Enter Sort Print Clear Last Item |Please switch to|medium resolution!Not enough memory!|Reboot without accessories!Porfolio Partner Version 1.9 | By David Becker | GEnie mail to D.Becker8 | Compuserve 73030,3562 Overwrite existing data? Load | Abort Quit? Are you sure?|Have you saved your data? Quit | Abort \*.adr View Data records in memory Begin at what record \..................................................................\ --------------------------------------<----------------------------- Search Data Search for Sublist contains records.|Do what with this data? record.|Do what with this data? Print | Disk | Abort Print to screen or printer? Screen | Printer No matches!DELETED! Delete this record | or complete sublist? Record | Abort | Sublist Delete this record? Delete | Abort Un-delete this record? Un-del | Abort How many lines per page Adjust paper then |click OK to continue OK | Abort Printer not responding!Sort completed! Enter Data Entry # < --------------------------------------<-------------------------------(+) Forward (-) Backward|(E) Edits (*) Quits|(P) Prints (D) Deletes|(A) FForward (Z) FReverse (+) Forward (-) Backward|(D) Deletes (U) Un-deletes |(P) Prints (*) Quits|(E) Edits Any key or left button continues...(Q) or right button quits Any key or mouse button continues.....Entries within this record|exceed screen width! Editing|will truncate these entries! Edit | Abort Edit this record? Yes | No Edit Data Delete all information|to end of record? This entry MUST | contain data! Standby...ZZZZZZZZZZZZZZZZZZZZZZThis will ERASE|ALL records! Erase | Abort partner.colpartner.mon >.² R @" LJŽ ® | R*:dŹ °zhŅ&&¢4FpŠ4b&BŽ&Ŗ:*ŠJvTHnpÖFp:&nxŗ®p ršh: *:NŚn<Jt: 4FZ$’<,.Lj:(2*2 ¢t\((@P\ˆ"č&Xb0~ęØJ$0ܐpŠŒ | – Š*†Xx$Š¦xVĀååååååååååååååååååååååååååååååååååååååååååååååååå PORTFOLIO PARTNER by David Becker NOTE: Atari has promised a file transfer program for the ST. Until it is available, ADDRESS.ADR files can be ported to the ST a few ways: 1. If you can find an IBM PC, transfer with Atari's PARALLEL INTERFACE to a 3.5 inch disk. This IBM disk can then be read directly by your ST. 2. Use the SERIAL INTERFACE with a null modem cable to transfer X-Modem between Portfolio and the ST. Shareware communication programs are available on Compuserve for Portfolio. I use Flash on the ST side and can transfer and recieve at 9600 baud with the Portfolio. WHY PORTFOLIO PARTNER? Typing a massive address file into Portfolio on that miniscule keyboard frightened me. I whipped together a quick and simple solution that enabled me to enter all my data using the ST and then throw it into Portfolio. What began as a limited hack has become more of a Frankenstein's monster with delete, edit, search, sort and print utilities. It was, however, written originally for my personal use and may have limitations for some: Entries are limited to 69 characters in length (Portfolio's screen only shows 36 characters but can be scrolled) and a total of 13 lines of information. Blank entries not allowed! Example... (- - - - - - -> 69 characters allowed this way!) 1 Becker David, 273-0252 [Home], 273-4005 [Office], No Fax --------------------------------------------------------- 2 211-7291 Moffatt Road 3 Richmond 4 British Columbia 5 Canada 6 V6Y1X9 7 Can't afford cellular phone. 8 Don't call past midnight. 9 Marital status: Single 10 Age: Unknown 11 Favorite food: Pizza 12 Favorite music: Vivaldi, The Four Seasons 13 Most recent book read: Contact, Carl Sagan More than enough space for me, but maybe not for an encyclopedia salesman or a real estate agent. Portfolio Partner will run in monochrome or medium resolution colour. Its use should be quite straightforward and intuitive. File length is limited only by available memory. I recommend you remove desk accessories and auto programs when used with a 520ST. (Average file length, 520ST-about 500 names/records, 1040ST about 900 names/records) ---------------------------------------------------------------- ENTER DATA Your first entry MUST contain data, this is the name and telephone number line that Portfolio uses to sort, search and dial numbers from. Data lines that follow may contain any type of information. A blank entry (Just hitting RETURN) completes data entry and moves you to the next record. Hit RETURN at any first entry prompt to exit. The '<' mark shows where Portfolio's screen display ends. ---------------------------------------------------------------- VIEW DATA You may begin viewing records at any number, left mouse button or "+" moves forward, right mouse button or "-" moves backwards. Exit by hitting the "*" key or clicking on the windows close box. Available options while in VIEW mode are: D ... delete E ... edit P ... prints single record A ... fast reverse Z ... fast forward ---------------------------------------------------------------- SEARCH Portfolio Partner searches on only the first data entry (the name and phone entry). The resulting sublist can be printed, saved to disk, viewed, edited, single records printed, single records deleted or the whole sublist can be deleted. As you pick and choose single record deletions rather than dispose of them right away I mark them as DELETED! and still leave the information line intact. You can UNDELETE these records by hitting the "U" key. Once you leave the SEARCH subroutine there is no recovery for these records! Also, there is no recovery when deleting the complete sublist! ---------------------------------------------------------------- PRINT Sends a full listing to the printer. You can choose lines per page but be careful, the program will not split a record and therefore may print one or two lines in excess! ---------------------------------------------------------------- SORT Sorts all records based on the first entry. Portfolio does this automatically when reading any new ADDRESS.ADR file. ---------------------------------------------------------------- CLEAR Does just that. It deletes everything so you can start fresh. Boom, gone! ---------------------------------------------------------------- You use this FREE program at your own risk. I have successfully used this program to create and alter .ADR files and send them back and forth between my Portfolio many times so there should'nt be any major bugs. I hope it saves your fingers! David Becker 211-7291 Moffatt Road Richmond, British Columbia Canada, V6Y1X9 604-273-0252 (voice) GEnie D.Becker8 Compuserve 73030,3562 ------------------------------------------------------------- Version 1.9 Notes Some Portfolio users have reported a bug within the Portfolio address program. It seems, at odd intervals, for no known reason, Portfolio will change random letters into carriage returns. This will not only cause your record entry to lose one character of data, but will also truncate this line of data and sometimes cause the line to be split. I have experienced this problem a couple of times and at this point I have not been able to re-create it with any known process. If you encounter the same problem, no damage done, just load your truncated .ADR file into Portfolio Partner and edit it, or simply make the changes on Portfolio itself. Again...this bug has been reported within Portfolio's built in address software, NOT within Portfolio Partner. åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååST Informer, 503-476-0071 909 NW Starlite Place Grants Pass, OR, 97526 Gribnif Software, 1-800-999-4742 PO Box 350 Hadley, MA, 01035 Berkley Microsystems, 415-547-2191 PO Box 20119 Oakland, CA, 94620 Current Notes, 703-450-4761 122 N Johnson Road Sterling, VA, 22170 Alpha Systems, 216-374-7469 1012 Skyland Macedonia, OH, 44056 Maxwell CPU, 303-665-4849 507 W Baseline Lafayette, CO, 80026 BRE Software, 209-432-3072 Dept.ST1, 352 W Bedford Ave Fresno, CA, 93711 Artisan Software, 209-239-1552 PO Box 849 Manteca, CA, 95336 SofTrek, 407-657-4611 PO Box 5257 Winter Park, FL, 32793 Codehead Software, 213-386-5735 PO Box 74090 Los Angeles, CA, 90004 Practical Solutions, 602-322-6100 1135 N Jones Blvd Tucson, AZ, 85716 Rio/Datel, 1-800-782-9110 3430 E Tropicana Ave, #67 Las Vegas, NV, 89121 Toad Computers, 301-544-6943 556 Baltimore Annapolis Blvd Severna Park, MD, 21146 Migraph, 206-838-4677 200 S 333rd St, Suite 220 Federal Way, WA, 98003 Fast Technology, 508-475-3810 PO Box 578 Andover, MA, 01810 Application and Design Software, 503-479-1825 120 NW E Street Grants Pass, OR, 97526 ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå. Š” S”.. Š” SSLAVE EXE ¢ŠS ¢CSLAVE TXT §ŠS ³4MZķ"’’s€LZ09…’’ųü’ŒŹ.‰Ö“’’0Ķ!‹.‹,ŽŚ£T?üŒT‰ü.3TĒ’’T’’čÄ>T‹Ē‹Ų¹’’’&=87u&‹U€ś=?u€ęß’Ł€žYuż’÷ņ®ćaC&8uրĶ€‡’÷Ł‰Ę¹ÓćƒĆCųƒćų¦žŚ+ź‹’!>:`’sæū‰ż’óĒ¬fr(>8`r"±<ÓļG;ļrƒētĄ!łźuÖüėw‹żėé‹ßŚˆ‡²+T/T”M?ü+ŲŽĄ“JW3_ÓēśŽ’šŅ‹ēū3Ą.ŽæNdš’¹„+ĻóŖ’@dč”艓ĶĆĆ!Dd’6ćų6 ü Tč¼PčFĒĆĆč[Ź’šBd‹ģ“LŠF¢¹’ŗĻSé‡ø5šüs‚ūSŒżSøó’|nóTøó“ńČ1óóó üćó%ŒŹŽŚŗ6µx@Ć½%ÅæōˆĄõõĮ8õõĆõłõÅÓtņĖĆ“@»B!Ć¹ū8vŻSYüé’øJJ’„ŽUTƒģVW3†ķĒUķ$%Y3ĄPø楒āłčŒPƒÄø †Vö čøėį’øōƒF‹^’7čńaTLį Ąu“¢e’āƒ>śu čōøųĒĶŁ$YėXøKö!ĘéĆRųįų„1„ęųųųŃ1ųKWųÉųžĘųĮųńų¹‡ųDXų±ų—cŒų©ųźų”1Œųōų¦øPƁsÓdō“?Yóž÷ "Y‹Ųʇõ>ēpxtźnĶčMAü?\éDč½/=tLŸõ9"‘Yé/ ćö¶ņńŸO2$’’’ˆFū€~ū?u ’uøcYē*‰“ų"1ųĘć ĻŠł˜ ~ķńčgššČĶuĶ~ OøĮøńö¤Óø¼ćxõėõĄß\t üĒ ˆ…UGėŒ1ōöę l„ÄŅ¾Ņ½ŅOĀ1¹šMĘāeøKZüōććJóŅ®ē=ģļ!Y=ßtB1ņø6·NŚż½ŚżQźRźż§Ē¶źż;øźVźż‘źż%ĆFÆó%eīB>Æń[į)ó{ ó÷&¾Ć;¶ø_ÉżįIč‹¹żšFŸaģżFµüuFVCüč±Élģ5Y‰jFžésĘ9eÖżĻ9žėzļP™ Ō9\ńP×­h׿Ķ-óI×üźlźżŻźż„¶Ń!ŃpėżOnų råĪģż“×ünnżƒ@sėnįnvÖżŠ­žnž¾jnż¾×­y׿aŪŠnų }źżKn’Ńyö¶ŪHnų ƒģż"nų nüĄnü»OĘևֿųH·ÖüCøīżm°üĒT)RĒ«ēæĶošÕż ø“īżNB¤żYs é’Ņ—¹żŸŅż± ßź›źż‰źütŻm‘¢īżžG‘żå‘ü¤£ż^»C‘’Øīżß‘ż+‘°½‘Ÿź¬¹ż0Ņż(ø±½Cīż„§üƒžébŸ„¤¶ŸĀ'œéRSü³{ĖŌżņGĀü=ø·īżgĀü!`ōˆ=Ņŗģśŗ>ŗż°±ņćčĻõBé’o¹ž­żHø6|¾īż­ų ĘĀ=~Ų!°ī °üb j¼„Ć½ĄÓč!ķˆ1[ˆų5ų 1ųé”å¢Wp»ńĄA¢’_īż¶F1w¢ų h¢¢¢ż“q½^½a²Ćˆ1ķØų»ųŁ†’ų³ųéC€>U:9:uĮ)Įké <„󘟒üģ!Ų@2ŚæÅźžŽżĶÓ½F|üņō.uæŪčäéōõó\×ü”×ų Ė×ā× ŚŽ×Ė×ü ׿k׿GøīżąE*ų ’Ē}é’Ų'· 'üŠCY½ÜĀ RāīÉó+ü6óé­ūø¹ż™¹üĒü‡6ė ‹^üʇĆa˜’ńƒ~$|ļĆ’Ü3Ģ;Ę~ƒž~_ZčX NʄéŅœ;FSĖ$rõ×ü)Ņ0D(ōS żé½žŃčIü¢3’Ęȉ\wؘżÓd˜ų ²ĪE9²Ķ¾'°²Č ÕĆĀpü5ā©å»łé™łß_^‹å]ƱĮV3öėpSŁšŠŁČ @ŠFüłė€8uą^Ճģæń>V’včŲ ń0Ųue4>Pńb6Ջšéįƒ“īĒó|pį Ģ¶õįÜ-4e’į€>Šeuø*ęFĀęQÕėø čįÓń’6‘eüe¤čŚĻ:4ŪłąŪ,ŪŅÕĆY» +ŲźāāŸ€ē9nŽósóø>…żf¢ó÷’ųƵMčŌ5;ńē÷Wāēņ#É’„ĒDķ„Ā’€~’uøpøAµčÓžY öoƒXį’øE¤ż”¤žµā’/ÆöƒģVW‹~Wč°Ų÷ģ&ó<5ŚóėlŪ÷WĆ=ŪņJ²ż¼ Ūń5enńa¬P$Pų §MMāPų ”ķPų ø^cüP#PPėŽønbŸżåQżć ńŽ;qŽĘ%ŁP|õšļøg. ĆężfüŌą6|ę÷YĀ@Ł~ ø€9±ż ę’éōīōø‚ēżóĶżžø{pģõL±öø‡ßĪźÉø_x‰Fųt²čOéĻ9ń˜|ø‰ćųčL$įĀ2āśøŒņččožŅÕøŽļż”¼‘ļFøņż†ņƒµ÷1“Ś÷żŚŚņ)üŚ÷nķˆ×3’ėĘ’pCžGƒ’|ö~8æĖä1ø’ėüYčXcSŁøžņŻņIüŠįu¾÷u ø†¬ēÄēė š>ś’Æį@’HŃYø²ĒęŖę³ōø¶ņųœ± øŁõ‘üĪõąķĘF’ėfų ŌEMøf’B’ĆļBu܃/ńtēøŻĮRĮ!ó`įėõ u€Ī{ö bżq·€ļFšP°ø[6’GPŁFņ÷fö3Ņ‰Vž+÷ņōõ‹Nž¬ŁčÕšėüƒāQņR9üčaʍ‡āąįūÓģŁ1@ųöšŃųĮšk³żś@ń³żś³ų‘<³P³ė³ų ųčÆ1³]Lń³żŒųFCš„³PžPųīī4ęę/łŚ<Wé·ÓъFś°Ņ˜ī…$¢ÄŅą’Ųdą0Óż…óÓ’ūljÓXÓų eą2ÓżX©©Óų ^-Õų :ā4‰ÖÕż-ó÷ŲśŸéCÉŲī`^8濚‹ų ż“’ńāŽMµų ļßIŅżā¦¦óŅ’üŅ“Ņų Įß65KŅż“Ņų ’Ņ†Ņų “5QßMŅż†ó÷1°Y‰ėR”ń%ōb“÷e÷÷›óķįĄ‚ć“Ś”‰Fę Ą} øoüĻŻÖ’Yé"ø€ƒĒā®*āšäøāSŪłYéŌłø—cĢńĢų±ųÄcéøįõŸSń„BÕ®ņżģ’é4ɬź8ź!žE<Óų-YĒFćōøó ‚ź?ō=t=ū :Įt’{=’’uįƒ~źuƒü øī „^šėčRB8²^ó7˜ézBŪÕ±>‘ ”õ0ŹķؓH2ąØīõ­õš‹ņś;ÄU‡cŪĆńģ@#ó;Ą>鹀Į‹÷‹ĘœÓŲčėĖĖöŅˆ„Sd‹ĒČöՋĆaųF’ą~čŅ|ŪļŪćŪś;ų…”r{ņ,ƒŒlVž”īłVø|Į¹ńęč¬|»ńĆpE|Eæčģø(ģņnÄéėĻē`uģuØ‹Øżņó‡ŖčžóėĀūųūøģź…!ģ žūuhņ׹ĒRĒž˜ņÅóģńį¶tśņ taŁųģšƒ0M¤¹ėu8ė}2„ąc¦m”—•ŠĒ²č=.: õø7`č÷ŃnˆųĘ(ńė>[ļō±īɄŚĻƒģ°ļ¢ę °źīvÕ©n¬Įé½āźŠņaéĒ@£ü&ø—š‹āmŒĖ„łüȵ¹”źu1X»ųmųµźöøėpŠźp¢ō=6ŗ tŠź ,Ł=<.i¹õńtĻč Ą-Ą[xĻé!c™_Ʌé4æ5ĹņWńÉVĻö¾zĘń :±ōŗFż|ć8ī诇Ėš7qˆøĄĘk(CCųŲöøģˆńš æ½nó ötFķ‚żŃźFžŁąé¤›ßŗė~½³7GWč2ū‹Ē÷ŲHäń(öŻśxŃĄŠÉXŁķA ö葼¦é“üąCqśč˜YņųŁčmtõŖįJ©t;ņu G0¬®ø=d"\Õē ńńń ńé’Żc˜ øJāāė3m gó„’ńųT ų³ øń=@ŽĖ| øhµąĖĻ7ɝÉ(ģņķ²“čmˆ{8Žļ|ęņõé•aßų¤Õ3Ąėč FāģėĘ(›fŖ ŽœÖīĶĄ č’vščä™ńĮŗŖäKŪČBŻs±æ׬ĻkĻų 3Ņø€Rß8Čżč:0éŅīč ·1¼µ¼ż„¼ž/Ä·w¼'ųÄųž/ÄžøĮ\ßģńŻųŪ/@£ e•’kČ Sóńūžū;ü ¢1ƒńƒVę‹FŗŠCų÷ā»;ņu°/;ēwļ¹| ZńüŻÉvø’’ė/+Ēī=m½¦W¼ĒŪķ%’™xčŪĆj„Š ˜‹š#6ī›ģd¢Ęh§ØĶq¤V›å®ü95³Ę„v™5“é¬Y ;+½–œƒš9æĶč“ąīĻĄøĻłń’óćĖV?ü‹v ö|ĀXv¾W’?‰6Ö_Š„Ų_˜–ė ÷Ž|ź#wźĒķ28…x£T*¾@’Ā?Äė ‹<`Ńć’—¤e”÷’üĘT±ė’2ō4üąś6üšéŽė÷©eT.’ž•.Œ—üŽrQ¾€2ä’æ&¬@ŒÅ‡Ö“‹6TƒĘų­Q€>TrŽT‹ž÷õ±2Ą†Qv€ńĀ±ųńƇ’Į%žpü+ųr`‹ēŒ’ĆĄŽŲŒŠŽĄQIó¤ÖŖ’’ŽŻ‡ņ‡Ł‹Ć‹ŠCčw‡’r@čłł< t< tū< učŚėäĄyBŖž !yC†ąļłć¬I,’"t"<\u€<"u>,ļ öĆéqCŹuYü‡N‰ TCŪ‹ō’’+ėrę‹å‰. Tć‰vƒ‡;Å6¬“ąśtU”‰F ż’&‹įIQčGżY‹©t$»‡š03öüYķ’6’ßTč)ƒÄ‹Ų£Tś{įėĄ¹’’‰?ƒĆ¼Æ •Jō‰mė><` “żĮÄɉō‰‡¤e’öXŃś’ėģ…š‹E£ęe;ĒuĒąųIé‹uĻ/õ‰w”śD_½ķ’ćŅF)‹5÷÷@?‰‰|”äƉ6~ųė‹ž~õuÅ\ʶżÉĘü}Ćą3Ņ%Wā nįłŽ傃ž’k«¾„šĶÜÆČ6¹šĀĆų¼Ćų TĻčĀĖĮüˆż’éOų ’tƒ’ōvÓZ‹’ĆĒ %ų’‹ųƒ>É’uWčœ’YėB‹68üʼnń1‹½×ƒĀ(;?@Ār WVčćā$€įģrņĢžż8Y’žż‹t;ĖuĻDż¾¾ž”ņŌźšżæs£%TķĀĒTõĮöćÜ’VāœŁü‹ČĮŅ÷ Ņu š;Ģs‡čĢųéāŸlؘ¾ž™öń²8åīż_æK‹v3’vŻ€Ł‹ŽFŠƒķ֙äģ™öĀį÷Ēū§TöņŠŁ”Ŗb!F\ż©€ŗķļ”ĖćłĪž ²ü—Ŗ0G÷Ž€:Ūļźė¼t Ļzčw°łé֔ńė>ģšŃŚĆjQ0ż}Žśé¶‰aRė ė’ójüč2įų —Įp¦”éW„ĀĒĖåŪā|"‚Å] tžZ”!q»„é ƒ€tļŃžøĮ °cŚÄŚ7Ųéė ć€ĀTńėż”®t\¤jå+ü =vø X¢ö|ÕÖé’wÖź‹×ā’ų Ā‹ŽŅ€bż{ņĪ` °‹N÷Į$Y °š?ųzY°‹V±š"¼±č Į“=nńKFƒ®$Įų aŗų Yńų?öÆ_Öl^‹7xšl÷G@£ńLū×č aßG€? u’ßĘNģéīUXĄę'óAĀ› ėĆæ ŚL uƒ<~’é•’™)vVd_>žĒRUD‰D  ķżŠįÅäzéāƒAVś’,ņø÷ńUų 1\ā™4™ŗŌKįŽ5Äü’1Y>¼ƒ ‹õįRzń’Ė…‹Ų‹ŹXZ+Ćёi†ē›äĆæ™ā>q%=żŠÜcĶŌY“į‹ĒOęŠCa¾7äčȋtąvø@P„ükņ‰ģŃß»qėć“#ėwu§žŠVėé³ŁįēŁ}Ō?»ćJ£ż’(vŃiš ßź |’™‹\ ŠG|éŌŠiwtNo•·żé¾¬€ƒ|°”Ųō¹O’āńē„ė; ½é š¬bu8øoĄ;Ęu1MüƔ"øįQ’żZŲ±ĘÄŻ&ė£žŠžVœ’ ż1 {Ź¼‚&šü/YņK%hė ų ŪkC«Ø”é«Ųó§{tõbŌ™ tŹś“D䁟N{pV4é ƒ~"æ¹Āėp!n?éĢõ^ĶDD,Łßē%€‚ø ćĖvÕŚuȇmvģóŖńń®Æ€ńńøPńņb¹ņ­` Ūō ŪōaņS”<Éßy Ņ¢VčżšńżĒ@Óy’tčŒY9‚£ó’ÉeFŃōĆźźt? ’v;¹2óW`6"EWčĀ÷ŹŁĶ*µHŻņĮė]įĢ]ØĘ|L”kńāÆŹ®oæ}Įæ©CŌ‹Ēėfó –`} h$šāz»čNbų īYÕĖ bō6²Bž©UĖQvźCŹ· żpĖéœŅt č)Ų£YAvĢ²˜° d£ƒž| ߂KƒMōė®ŚĒ®Łh4ØFč Ó“>ćLņßžČSŹĖĖ܋į?V¾aėSˆq\ā/‚āOuī“įįe-Zlāį’Dą¢ ģräļB¹ĢF@$1r ń—÷Ōj—?ź¢¹“y¬Ś„Ņµõ=鰁ŒYüÓų€;įöŁf‹NįŅ‹ž~Jü¬<t-^”Ŗā_JQāšS ī±>÷±[üGéŖ;ū(I•ė ü©ß¹‘÷ŁĄPQŻ¶<}Ėāšm[‹Ē+Ć\FŠ “?)ėŻĖĄ ’ņ¶ORc’t©ˆź«a·N§Q“@Ēų Ó2œżXÕŗ¹ŗžZÄĖZÉ.­3Ńwµ÷F ÷‘A,Ćó«ī”vŽ’§Nńż“B į¾Wų Vņ™ēÆ"VWž’—įÉń^ƒū$wX€ūrS‹į×F Ķ É}€ éy’’-G÷Ł÷ŲƒŁvŽć‘+Ņ÷󑿈Fć ėńBņõvŁõNŽž’×ĪüNŠ, s:ė’¶FŖāļ°ŖQ± ‘Ī oØø»~ uAńp8£~«½‚ń°P°øŁ\Ø łź„ šė rIä@äųRÉRžÆߣŁV–’…Ąt÷摳÷ęȖxżōŃ^Ėģ#:¾ģeßŖĘø°bŻŁ}Õ¹ÅzņŁŽTeżču’Õz“ß\“ŗõÕJ²Śµ.Ėƒ>źeŹį”/ŗ!Øń”ż!k¹ƒµvÓ(žŹķĀÕÅüøėAźÖĮgń5ņń»šƒ—üa™iń=Č×2<’ņ®‚Ž±æšõ÷Ń+ł‡÷žź-¤IŃ_éó„s¤­Ń—Ų Čü~ĀĘż‹Į÷ŠHćų ŒŲŽĄüć‚g¹Ų°‹÷Ūż¬šÆČį<ó¦ŠD’Š]’ģBX²ų Õų ¤óFÜų ĆP’vŚNoünü’ĒßųNŠFŠąü÷ĒC§Pć ŖA«ÓŖŲż•…ō'3A™¾Ąų ņß$;Fsż ņ>āɂæhŽ×ĀńNłO’Øż¤I+š+ųåóšų¤’]üŸ’¢Ŗ؟ų “CVŹŻéŁārņ‘sņ.ļćŗŗš’b’ŗæb¹“@»0Üą¹'õŗÄbģ¢kŚéŸŪ6ÜAŲ ^R+ĪļrAöĀ€GĮB3É3Ņ­>š1Äióż*Ł¹ZYrÄįŃBä;ņr nwūiür6ė ęģ”īsÕnŹ®·ŹŗĢ„ĖfæÉ|-˜ŃįĆŖYč ‹ÖƒĀĄĀUüu^“š’½°4‹|ī•“8!26;Ēs+¹Ķ¹ńżĶ»bńW™xÓ¹U|ł:ósé@·bė9ė0ń˜žˆ÷M©‚ż’7 „żĢ …÷…üÉć˜ †’&FdņV’¹»õbüŠĘŅč×ŖcNś"ÅśĀōĀ>ÜōŪģ˜ ĒFØ^¹{żF«P[ėAW½Ł~b÷ŃI_’’ƈGžN«~+SQRF¬1]+ųūP7’V )ŖĢ’ĢĆ~؍~¬?ZY[Ćüö‰¾j’‹ķļüvÖat<%t³ü’ļč°’ėźé|‰¶v’¬ÓēēÓ3ɉŽt’’üh’ˆŽs’Ē†nzć’śpśė¬2䋩‹Ų’’€ė €ū`sGŠŸc‹Ć=žvé$čŃć.’§’’+R+:+“+F+ø+Ā+,‡’,,yH,.,2,6,Ų’Ó,Š-+-K-õ."/že’Ē+o+é耿wųƒŒS:ė›ōģōė>ōą€¾x+tˆ–ĄįłS’ƒ¦ęßµFéröÜ ö ćśŁD÷†ĶéĆu!éµéQŅ~x¶ŅƒFŻs ‰ ń2µT7ĻuOįņ*žÅé)’Ēņsӵ钒,0˜Öwµ‡Ō‰ŅŃąŽ üžĀ§īéūžÄ„āX8Äā“āų īéŻžÅ£‚kÓžö•įQļšĆęŃųöė€š³ž·÷ė ·”‰·³éŚĘ†B€"ūmūāl@ÉI3Ņėßõ§ģģ’™GG‰vF8MŠń鍾yīįsu3i/ƒ¾yu†- óŽPćƒł’t‹ģ’Ļ%øį²0ė² ŠĀśč­żāłééżQRPW’ŠĒ˜PŠ–PSč÷ńŸ‹–!Ņéé!Ā‚Š™x¬^_¬’7CC‰Ź­ Ņ™šćńżĢč ż°:ŖųKżĘ5ü ūŽÉÓ/zĮĻ¬;Ń‹Ń@‘*Š±,’aņÉ;2»šä‰yIéßąų ˜üRŃ=žōŲ ’ė ÄōŒĄ‡ ĒuīæībčŃü;Ž”ĖŁś’‰”ų ż‡ļb±¹WQžœµSRQŁ#«Pėņ.z ZHy¹y`™Ö:ńĮŚń ńr9üĆY¢)Æ¢ ‹Xül²ńü’-ÜéŅ~čRü&€=-uĆ×I+э‰–t’Š1ń‘įō0étƒ®īƒž”éO&ˆč$³÷a_óžĮøs=7łuŠ¦M€üo»y¾>ĀÕĒ†ÉypøėxtūXu§łPņ@KKÆ}ßś’Pįķ ė° čŃūK;ŁÉöģńŃ °0čæūąo¤čøūNųŌN'+Ź+Ś&Š< ’c^Aų+u&¬č˜?>ūIK‡ŹćĪūāł<õ+ŁčŠŻč€ü1ėń Ū~ ‹Ėšk^ Žé§ū•ńZš Zöśx\ō`i*F«FØ&‰év¾–Ł°%č,ūųpŁuų€~«P}¦&ūƒÕÖ~ž7‘ŲĖŖØ®ÖŹ«īŹŻAƒ>ØAt¬B‹Š„CķŪAĆAŸCė ‰“I‰@é0ż“F²Ķ\‹uC›B‰‰>›A ļļżlž‰Śč5čYKœV!ܔ茎u’ėAĀčĒéūa£ń£ōėą;ŠŻAw÷“Bˆ"ĢĢ; ÜŽ’ŹõĀåÉė æƒŗõč†ö¦B6•"Ģ’ Įi‚ž|³Ł!uøtņ[oü‹÷ėõ‰’YĒBń÷Ž nQļ*ÕÕĮź` W‹i‘€”üĆ”š)»Ič<’ďøµÕVKYNŸ²€“ś®ŗq„bZ#>ŖbĆį÷Ē›X čß' °ś*Ē6`pSi£AūUļƒĶāMa Ēš ؗļb N` F^œ‚øR<±9°½-Š7¾PÄż±F&Š²‘œ÷:‡RŠ€?Š’į1²]ø0·’ś²’č ŠĀžĄĀŗĻ‰.śżeĶŠśį“čģšį’¢Y“Õčą˜’€äˆ&kcüjcĀ”³±<v<ž°¢lcŠ¼’:G÷t ņĪ®’Gxķ©’åĶnc€>€ųŃ łžūĪߖ¢ocĘmcźüŗĒõšøź’)wcśi„Ņ čdŽUłŠ’pø ’ļ°±ń9£scĒqcšń¢gc¢fc 0~•¢hØic]ĆĆĘFżoō j‰įÓFų) ±Óčōśąéēh¾ˆŻķ-ī³ w?‹Å|2Š2”2²2­„’üž£2“°čÖąžév –ŅŁ}Ÿq’Nųėgń¤ė]8Ą“śėX['7u.ƒ>ułt'ŠĪńŠ ¢kźŽ@3‘ś‡śūčÅą:ģėÜė’>ŠVųŠvś““ńsžŠĢ“ ņFŃčbž ؕQ (Šü žż‘ ėś}°DP’6ēügüšÕüę8‰čPš\śāiśĢjé ¤ ’•ų •%£×…=<ø=2Šz¢¦µö£ź.x¼~5 Ęł cÆ÷iĶ!ČģäüčŚ'éė …UčÓžCĒN_Œ}ņŻüS£ó£ ¼™¢¹m’a¦*X²Ųē*Ś\±‹~ öƒF× «Ś Ƌ=ģķ÷ƒ±‹v Ž²]§±\ƒż˜—’ĻR³y©|% ’’x2€½€”u+“ Ūx©€æōŪų ęé„ĆæņSńYY’NŚė±ü™­īīżéw醹t€)ŽRĘ{¬˜‰—„|HŠ¼{± AĆ=e²=Śķ¢4ŃžžĪ4Ō4Ś4³6"5ž’ž,5ó5ī4ś4ō45W6’’ń65'5€555éI’é’€N×ė„ƒļ0‡~Ž{„›÷ēė‘Ēęė‹śė…ś>Š™€f×ßkł`ņ ép€2+Ņ’ßāńtOéb’¾ė ¾ŖĀš¾ÓQ¾øĒĪÉn_æFÜæ™ŚŽéŽ%’“yķŸ+ń/n`‹Qƒ~Ü~žć“u’FŲ臾«ót’«é–ž|m‡{Vč¬ékŽš fŽ æ°ézR<:tżtOI ąų ZŒŪėąZ[¼óäRSāų [ZŽ č*éŲ•ó“é#śéćFžø‚ƒ™#CIų oIŲ?uQI8żóė*čŠżņĘøGø‘¹ õØĒõęń{rWč>ĖĀéÅżč91æś3Ÿę|œé“`”uĻč½)t)«ńķŖŹéõ{Éé; ÷pĄx “®ė“~9Ž×2rį*ü)Éļ’šié[żōüč7ż‹vŽ ö}­¾¾H‘Æų œżKéNęųßŃü~é żéå+Ąüļ±æ~ą¹ó«¬ńļ<^u’’.ń¬“ŠŠ‹ų±Óļ¹’"ŹŅåką¬u‘&<]t%<ü-uį:wŻ€óŲ¬*Ā’ųt劊Ń×ŪžČuoFōėÕéœ<± füZż‘üN|9ų |O–‹˜ĀŽšīšĖš„Ćją–“tĻśėœßų ĮÄŖėĮųš ”vF;¦}ćütÉŲļņJüė,āėīQ’čĢńŁÉüƒ~Ųƒ^}ŲžqŲé†Pą ~ˆš ą’/ÕĮ’įtųYėæ+ĆļŅ¹ÕNŽ|ERQĪų Yų’ZĢ5žÉ|1Šč€ķ0r*€ż rör ‡ćör ö rösß’€Å ŃāžüÕė¶+Ą€łßtsŸYé_’ņ¼‡ų’&HdüJüLdSį‡€ėÆ#€ū vūĆ!*wńėū'ż’ī :ŁsƒÄų·ė÷ś[łėś ĘFū ³‹æ? ’`RKŽf˜“öƀu?üöuę“0 |[<+Øt4ńžĘšK÷?Šų 6+ö×aN ćNƒł$w/„‡K<0ul÷S’ueŃ3Ńų £P¼P3Ō¹Wż«é»=Wų±ų ēGō"t‹ÉčŽßćÜAį’ rEjī>”EiŖ±šÜEüué|Ų_ģk ‰¹¹žfžšEq£3—ü(=F’\F+SRxŁ=ųė„",*ńĒĄ™°äĮżŃTÕĆĆųųž³éŪșĄ™’’‹ń‹ś»ą#Ś±Óėƒā’ļ¹ž#ĻŃé†ĶöĮudé’’vBŃ拟dŚK‰^ü€‡‡Į ‰N§Į@Ńčž/¼ŲømS鳥Ø÷ćß÷ŠqŅ–‹ŚPIŃčˆfś‰ŚIŅįč¹?†ĮöäĮ±<>üÖYƒįŃŠĮÖĘ’Ó.d0dƒ>2dA0#PR<śż)Iaļ¦é3AZ¾»ĮöWżZX+Ęé:ž*Q’ųüś3’ū’ŒČŽ99ŽŠ„QRøK憍ū•‘bA“A+ß?tŽ•ń‹„óüģ®ń‹… ŚŠ&‰įū,.ķįū’.½÷,C¹sBøLūż×ƒyŁģ VWø=¼Ū¦é’;s鵎T.Œ£‰&”Ążŗėōæ€Ģį¬‹Ö’?Ŗ3ɊČAó¤ø)‹ņæ\>Īw.¢u>ņælųōv>“J»’’õ€>Tæžsė€­é ĄŒŚuż™‹Ų ł)9ųėŽ üĀśÕRņüņ®&8?ōułIƒĒõI31Ų__w‰~öŒFų›į}ĮÓč·‘@)’·øŁv>%>¬Ŗ}yś’’łį‹Dū€Ģ æ”==.cu/ĄėaP,ē|XįĘéė?¹Ķńćb‡’rē½ųMZø u܋ż½…ēóńŠŌŠą2Ą*ź…åųa$Ņ”ŃźŃŲā“+…€ūĆėķ“©ņcX…łüńšė*)?9>Ņų Ś‰ŻĒ…÷ąŲö×Ģ“Bh‰PńüżōĀ‘üŻ£Ņ©,”`’aż“JŽĖąć“Éõ‹ńI’ņÓ’ƒė.‰ó>ŽĆ¹°¾ž’+3’ó„ŽFō‹Nść“Hńš‹Ł8ŽĄźÅvö öÉžįŒĮńń>»_^Pč^ÕCņ“N.ā7ßĶ<ÕĒĪŽč“V’Oäų 䞣{AŁ öt$WčĆ½ŽäY@rńÉWV莟aļÉ^Ęø‘š¾Ōįā(y‡Ż(z€|puP’N†Ž AŪń»pA.;tCCā÷ė!Sgž!Ę/:\ˆAž€µjü|¾i ‘{ŸĶMÖTƒXH’¬ĻīӉŁ9ē¬ōō ōœć ō ō ōė÷v®ė©L*€? tõ5ŹĘ撃Y‹ų‹Ē=P~æū ćõFvA=” -øp÷ļ3’Iż¾»(BJ;IIé¼·įgŽy*ųD?’BB×BDB”Buų ś ’u 8q°õž˜š÷aF$aNł— V‡Ä™P蟾˜éo^}8F°")éeÕtF8‚‰żÉtŌ#Ó^¹ŌAŌsŌNqėA³0GŻų i©v rŻÖŻPŻ€įŁŗɁ<:u ©§i€d žŹÓ&zė˜Ž˜%’ą€~Ƽüh±¼m9ÆX!¹ uu“ɬ‚Õžė“Gɹ įāč Óū’Ą Dņč—÷AˆF¼ĘF½0t:ü¾\³æ(‚čæ ai–6Bė¼īLāż±¾éä”ĒT"é+]3i¤ĀXÕ{¹ŚĀuć`:.ćĢVčeh0Ė „-ī*tŸĀmÕūWģü,ģųVd¦ §ńÆž°Š%šŁœŁp1t ‹>ąXTé`)u –,¤Ā€xÕ=ÕļŠ’ߋ¹é:ąu鋣€9=uāŅ æx‡ĖuŁG‹Ēäš č“xų†Š'‰‰T‰L Õü Ļńę³ćų1ZłÆ“6ć‹ū‰D‰<įüśæIt‹ č›ėń½ņ/€_+1|åėėøéLėę Ač;¾WfŃąF ™ ~ā‚c±’9Čų Ģ²ĢætųČČų“ d˜Ć3ɽė ėiė¹©¹U’’³ģ‹ł‹F ‹V ‹^‹N’ļ Éu Ņti Ūtem u°ņy S­ƒĻ ąüšņŁ÷ŪƒŁņ÷‹’žé¹ W3’3ö‘ŅŃÖŃ×;’’żr w;ór+óż@āēƒ[÷ƒAįʋ×ŃėŠōk  gŹ÷óšV™ß‹Ā 1ģ€®ŠńŲwj =ź‹‰F€iu Į^·źļõjm“ńčSõžķūēč9ēTČŚu””†TĢ ’ńõćü¼ ö×ŌŽŁŌŌüVčÓßQźYĻ#’2`WVaņÕVŅŁŌĮ6¹č3ā‚vŻ.ū· jė9Š ÉĻŻyoi²˜{¶óµū±öĮ +óŲĮ+F1°qCˆ +Ę÷ĕŽąśė\‰va ²”“;"Ń}Ļšśē‚ķ\‹~śė'ą=¶@ÄżĆ R=¢Wčŗź÷£üčYé¹ųŖŻž;ĒuĻõFżņ n÷¢9ā%ėÖĪ:1ų śĪ迊.÷Cjc± ³^‰ƒ u_ēIśYŌÉ~ģšĶģ T[×ļŁ8Q[Ō”.€~„qé„%žż żĘżėėC€ˆŠī“|śœ3 śśś‚÷č=ēüč­žVq†•‡`’Ü’Šų ŻØüŻJW Żżćü¹čB’Éų „ü“rÉų ĄÉŁyų ŽH­vvų Ńž$wų Gų Żų wų¹žMļÉų ¦ų7ÉėŠ>TQfž’ļAŠn ŠN ŠvŠVč­’®čÕ¢ $žjŁŃī‹ĘŠn’[c¶‹Ś3Ņ÷óˆFƒQž-qžģ÷ā‹Ö*ŠˆV’XŻ“é’¦Ō²<§Į‹¼Ń’Į;t ·“čR¤®Ń?|žĀŠĀ:ĆržĘ²ƒšR¹ķĪżŽ VW«Æč Šā{é{į;sc·GŠXé'é*éż č\’Ušö~éŻų ’)b÷Ź9×~ŻųėQ³+IIųbaśPčc’„ķrÄēQ …9&B‹7ƒFŚüŚčXŽöŚü=’ ÜNŁ|:Ó č—ēÕ &‰ī=Õ ųI’N»į„‹×o²&xēœ :øDõ]øDRüōX §ėģų’Åżźų9“‹Č młŠuį; Įw*źł#ņ¦#ö Āw|&Øł ņöžś’Ų2Ü ±ü¬äuč1!\ł\ūżōé ’ræµśēģT"2Š|Éfp 0ĖŪöYµ€~žZvæZR”ōŪ„‘˜į÷šŻøŻŪœńs©ļÓēŽåš•åĶ;Ē|ļŻĢeŠŪūŸ.ĒŠ±QŒŚėń±ææÓčĀ‰Fņ!ɉvōŒ^ö’K鉍~Ņ‰~ųŒFśFˆ‰!Xńāńüń™œŠż½ 鄉¹ü¬„öyŖāų’GQU^ņŽįŗžńäøK6’6.ū0’M.Œ,M.‰&*M”‰Žń€ō‹ō6åp?ūŪ]sbÉ\Čė“*ąŽš’P·)\žæ= ńė ¾.Mė¾õ>ė­Æš»š» ĶVčž÷†Ņ~żƆįVŌ“śĮóĀ¹“ų’Nō.ŠVé+ööĀ@u>’į‹Ę ‹šžNŌńu`ńńōu» ¾šėmĮ¾ĒėVšš@@š˜FńźčĆÅOī‘qĒFŌ?ĮŲš>!č+ɋŃņŁüŠü#ź˜«“+Ą«–«`Bˆśó«4ī_Łüš«‘«’ž’wµāķUŪÖ©£@5č=×K’£¹°¢­ßį­DéäŖ@ĮŠ:Ė™UėF*źdQŹ©/Ž}Ż§  WAHč|”’³—rß6—;vvщVbž4ć-Ż^žŽĘŽaĀ  WŒYyö’üŸŠ÷Įé‹Čć‹Ų2Ąņ®×’+Ł‹Ė‡IŒ¢ŠD’Š]’2äWŠü+Ć/Ø Ēų Š‹¹ŃĖo‡Ėó¤FóóŖŅų Ńz‹Öį®Ņž™Ōƒł’’žtOO‡÷ėŠ†ŖN;Æ.žrö‹ĀĻżžķć›Ó ģ»ø4ØŁ©óĒ‹¼écīĀ€ÕYeŁrY«ŃHö’†‡?` tMŠEó’@óžńó’3€}-tś+tŠ; ēēżtóų u<ōóó’/Ē2dt¬ļś0d.A¾aPFø7€Ł6‡S*dčR„Yø;ó,ˆUóEóé^ «‰®bŚ!ķŸÕŠńøļW÷0ŃÉg¹‹öĘGˆ’ģMYēčKéY3É»æčĢӉda£Ÿ ¬•¾āėd‰u€6ų U1ń™Ōäį­r"äߊGįų ļü&ę’Ąé+„Źq¹I€üö€)üė_­9Š9u•_Hš£ó‰(S™÷į(;r ;ńF©ĻužO3öėŠ`Y‡d;Ē’Žvóėƒžr Ü’t’ yųŽKŽüŌ¼žrxįtł wqujÅ<žŖ~ču ‹?€dƒĮėöŅ’ćéĆ²öĆtIóCaæŃūžŁZfĆw©ņyŅ»ˆ™+ŹXéæżį$Į½‚ rė ņrqu ņwEx QĀ*Äń'„’t5’‹=vxą~?±’Lz\ ˆ’’' "ėƒ<u‹Ę‰ńųD āˆDē ėū’ jŚUåH>¶qž«c&qJĀŃą‹s ā¾kcį ps¹fįQć[ÄįafÅ|ü;÷sŒĮHųžŠšųżŸ²uó„ė’’<ŗŚŒĄŒŪ;ĆtśģŠČńßrūūsū„ūāńė ļų ÷p­ū‹Ųńų ‹Ć«Žąü’ļ~Ī “·č"Ž‹Ā9čB\ń¶ÉTfT+Āń¹ų©ļą’±Óčėgėė’V¾Ø‰›ŃLĪYFƒž|õ/\õėŠfœ”#Ķ—Ģ’’’ų Turbo-C - Copy’’right (c) 1988 B’’orland Intl.Div?|ide erré Abnųšłmal pńgraĆ?m tēmination8éāpP'¬fžmHü’ų• ”Ē ż Ģa\ ’ųThe Slavśv1.1’{O (c) AtariÉémpu’’ńs 90 COM1:960’C0 bps, N-8-Š ų’“Initialisingń .’!Done!>„GEM ēnk acĄŻŸ. Pres’²ESC to quĒnæ’p+-’ųK+W4Xź| ’’ų 08é ėąäą ų19 ¾ų ś|­ų ŅüPortfoDP2PĶ©Ėįæžįüčń…raćĆnsfšFaciÖtÖpy­ų=’ųIZųP[ameŚ1: DóBaudCńąPAtõ8 a0Da5 bó+ń1ōKtopŪgńZųcUs’įe your sys\m Oas ifī wN„åu­ėęXŁS°dXOS¾éleŚ@ųåFpū'?' įfoĀHELP­ü»čRżü’üö+ķ<č whenQ’ dź ź8é AVAILļABLE ÓįMANDS:’ė DIR [*?], =˜įõ/WóčTYpčPŲėd:]ŃhaĆg¬drĶį)ķC‡?LOCKźdisplay iÓźD¹ķuctory!²aMī<ī’{šµRšų SEoųREw€CEIVwų Fęź0](Œac‘DELŻųHė[ ] = opräŹĪŹļį<į>œąįinBÄsa b¾Üų Hcd1Šż\ü üøņģķńmł€żęüõ öśrłżˆ ļōéļśēg /wų*.*ų¬4ü ėų ŌźńelśszÅłpx›„źthi funõbŁīŁ…īantęæāREMOTEdīOŁæóa¤Ļłń[Down-loaČxģüŻæIģPįXĆDŁ½ĮécoĆlĻüSy¤a¬x:¶ü°šŽRńe ńŗ_ų73ö\ų Up^ų frT8×\ų&ęčMó¬ck³eVć°õ@7źśŅŠ ’ž< é>‹#öģų Ņ^C”« ŹĢųć’‡é>ī·É4čKofß“)ŠōAx%cö.É’-- MPŁų¬ų Źf‡°±Cäan±ke“įo JņŖu=įžŁüÖTućot0éHék ūć:Š =bytĄŻRema(ĆÉaŪćų˜Ćd@ay'—śķ é=ńbžęCu r~Aņ:įē:¹ĮžĢF`ņn‹.ŁóundķWhĮ?CöCN'ęc¤ŠÅ°6ōŁŅīSįķ|öM†{xö80Ņ Chßksum~, BegPQ ĘéI–w ½ž®pšóCtrl-Xńņab/É7€ Ś R-«ü%-ƜY<ĻąeaģŹ+ģžĢ‹6Ę-ŽŲŽĄ1ŪśŽÖ‹ēū.’/CRC Error $åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå SLAVE (c) 1990 Atari Computers, Australia SLAVE was created for the single purpose of communicating with other computers with a minimum of effort. As a full-duplex serial communications program that supports the widely accepted X-Modem protocol, the only prerequisites are a serial interface for your Portfolio and a terminal program on your host computer. The communications parameters are preset at: 9600 Baud, No parity, 8 data bits, 1 stop bit. HOW TO USE SLAVE 1. Turn off Portfolio and plug in the serial interface. 2. Using a null modem adaptor and a serial cable, connect the interface to the serial port of your host computer. 3. Load a terminal program on your host computer and configure each of the communication parameters as outlined above. 4. At the DOS prompt of your Portfolio type SLAVE. 5. A message will appear on your host computer followed by the familiar DOS prompt. Your Portfolio can now be controlled directly from the host computer. COMMANDS SUPPORTED DIR or DIR/W (Wild cards are supported). TYPE C: (change drive) CLOCK (Display time ) CD MD RD Send (Sends a file from Portfolio) RECEIVE (Filename.ext> (Sends a file to Portfolio) FREE (displays free disk space of current drive) DEL (Deletes a file on Portfolio) SLAVE has been tested and found to work successfully on the following computers: Atari ST family Atari TT Atari Stacy Apple Macintosh Commodore Amiga MS-DOS family Microbee Epson CP/M laptop SLAVE remains the copyrighted material of Atari Australia. Distribution is authorised through existing Public Domain channels. Atari Computers Pty Ltd 376 Lane Cove Road, North Ryde, NSW 2113 AUSTRALIA Tel. (02) 805-0344 Fax. (02) 887-2231 Email GEnie: ATARI-OZ åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå. Š¬ S¶.. Š¬ SCODES TBI ­ŠS ·README 1ST °ŠS »NTBASIC ASM “ŠS ¼ą¶TBASIC COM ¼ŠS źė TBASIC DOC ĀŠS ķcdPRINT'US AREA CODE SEARCH / BY DAVID BECKER' xINPUT'ENTER 3 DIGIT AREA CODE'A ČIF A=205 PRINT'ALABAMA...ALL LOCATIONS' ŹIF A=907 PRINT'ALASKA...ALL LOCATIONS' ĢIF A=602 PRINT'ARIZONA...ALL LOCATIONS' ĪIF A=501 PRINT'ARKANSAS...ALL LOCATIONS' ŠIF A=415 PRINT'ALAMEDA...CALIFORNIA' ŅIF A=818 PRINT'ALHAMBRA...CALIFORNIA' ŌIF A=714 PRINT'ANAHEIM...CALIFORNIA' ÖIF A=707 PRINT'ARCATA...CALIFORNIA' ŲIF A=805 PRINT'BAKERSFIELD...CALIFORNIA' ŚIF A=415 PRINT'BERKELEY...CALIFORNIA' ÜIF A=818 PRINT'COVINA...CALIFORNIA' ŽIF A=707 PRINT'CRESENT CITY...CALIFORNA' ąIF A=213 PRINT'DOWNEY...CALIFORNIA' āIF A=619 PRINT'ESCONDIDO...CALIFORNIA' äIF A=707 PRINT'EUREKA...CALIFORNIA' ęIF A=209 PRINT'FRESNO...CALIFORNIA' čIF A=619 PRINT'LA JOLIA...CALIFORNIA' źIF A=213 PRINT'LONG BEACH...CALIFORNIA' ģIF A=213 PRINT'LOS ANGELES...CALIFORNIA' īIF A=209 PRINT'MADERA...CALIFORNIA' šIF A=209 PRINT'MODESTO...CALIFORNIA' ņIF A=408 PRINT'MONTEREY...CALIFORNIA' ōIF A=805 PRINT'NEWHALL...CALIFORNIA' öIF A=415 PRINT'OAKLAND...CALIFORNIA' ųIF A=619 PRINT'OCEANSIDE...CALIFORNIA' śIF A=619 PRINT'PALM SPRINGS...CALIFORNIA' üIF A=415 PRINT'PALO ALTO...CALIFORNIA' žIF A=916 PRINT'PARADISE...CALIFORNIA' IF A=818 PRINT'PASADENA...CALIFORNIA' IF A=916 PRINT'REDDING...CALIFORNIA' IF A=916 PRINT'SACRAMENTO...CALIFORNIA' IF A=408 PRINT'SALINAS...CALIFORNIA' IF A=805 PRINT'SANTA BARBARA...CALIFORNIA' IF A=408 PRINT'SANTA CRUZ...CALIFORNIA' IF A=707 PRINT'SANTA ROSA...CALIFORNIA' IF A=209 PRINT'STOCKTON...CALIFORNIA' IF A=805 PRINT'VENTURA...CALIFORNIA' IF A=719 PRINT'ALAMOSA...COLORADO' IF A=303 PRINT'BOULDER...COLORADO' IF A=719 PRINT'COLORADO SPRINGS...COLORADO' IF A=303 PRINT'DENVER...COLORADO' IF A=303 PRINT'DURANGO...COLORADO' IF A=719 PRINT'PUEBLO...COLORADO' IF A=203 PRINT'CONNECTICUT...ALL LOCATIONS' IF A=302 PRINT'DELEWARE...ALL LOCATIONS' "IF A=202 PRINT'WASHINGTON, D.C.' $IF A=904 PRINT'DAYTONA BEACH...FLORIDA' &IF A=305 PRINT'FORT LAUDERDALE...FLORIDA' (IF A=904 PRINT'JACKSONVILLE...FLORIDA' *IF A=305 PRINT'KEY WEST...FLORIDA' ,IF A=407 PRINT'ORLANDO...FLORIDA' .IF A=904 PRINT'PENSACOLA...FLORIDA' 0IF A=813 PRINT'ST.PETERSBURG...FLORIDA' 2IF A=904 PRINT'TALLAHASSEE...FLORIDA' 4IF A=813 PRINT'TAMPA...FLORIDA' 6IF A=912 PRINT'ALBANY...GEORGIA' 8IF A=404 PRINT'ATLANTA...GEORGIA' :IF A=404 PRINT'COLUMBUS...GEORGIA' <IF A=912 PRINT'MACON...GEORGIA' >IF A=912 PRINT'SAVANNAH...GEORGIA' @IF A=404 PRINT'WESTPOINT...GEORGIA' BIF A=808 PRINT'HAWAII...ALL LOCATIONS' DIF A=208 PRINT'IDAHO...ALL LOCATIONS' FIF A=815 PRINT'BELVIDERE...ILLINOIS' HIF A=309 PRINT'BLOOMINGTON...ILLINOIS' JIF A=312 PRINT'CHICAGO...ILLINOIS' LIF A=618 PRINT'COLLINSVILLE...ILLINOIS' NIF A=815 PRINT'DAKOTA...ILLINOIS' PIF A=217 PRINT'DANVILLE...ILLINOIS' RIF A=217 PRINT'DECATUR...ILLINOIS' TIF A=312 PRINT'EVANSTON...ILLINOIS' VIF A=815 PRINT'FREEPORT...ILLINOIS' XIF A=217 PRINT'JACKSONVILLE...ILLINOIS' ZIF A=815 PRINT'JOLIET...ILLINOIS' \IF A=217 PRINT'LINCOLN...ILLINOIS' ^IF A=309 PRINT'PEORIA...ILLINOIS' `IF A=815 PRINT'PONTIAC...ILLINOIS' bIF A=217 PRINT'SPRINGFIELD...ILLINOIS' dIF A=812 PRINT'BLOOMINGTON...INDIANA' fIF A=812 PRINT'COLUMBUS...INDIANA' hIF A=317 PRINT'DANVILLE...INDIANA' jIF A=219 PRINT'FORT WAYNE...INDIANA' lIF A=219 PRINT'GARY...INDIANA' nIF A=317 PRINT'INDIANAPOLIS...INDIANA' 'STOP &€=u čr°>čZė:&ŠG Ąt2:l;tčGėķ&ŠG»$: ĄtƒĆčĪ:t€?uńėŃW’W_ėĘĆŗ :éŅ°=ė°ė  k;ė j;ė i;WRæ!@Ŗŗ¼7č®Z_Ć“Ķ!h;čā’Ć2Ņ¾,?‹ž G>A“:« 8>Ŗ‡÷‰>@“GĶ!ŗ_4sŗŒ6čvĆčŗ,?‰@ŗ_4čååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååI have not been able to spend a whole lot of time yet with this version of Tiny Basic. I have uploaded it hoping other Portfolio users will enjoy a little experimentation. All that Portfolio needs is the one file TBASIC.COM All commands must be typed in UPPER case to be recognized by Tiny Basic. I have included a simple little telephone prefix search program I wrote using Tiny Basic (right on Portfolio!) One thing I have noticed...the RND(x) function does NOT work on Portfolio. Using PCDitto, this function returns random numbers between 1 and x. On Portfolio it only returns the number 1! There are no doubt other problems...so have fun! Source code is included (I am hoping someone will fix the RND(x) problem so I can upload my BLACKJACK program!) David Becker GEnie D.Becker8 Compuserve 73030,3562 åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå;*************************************************************** ;* ;* ;* TINY BASIC FOR INTEL 8086 ;* ;* ;* VERSION: 1.1 ;* ;* BY ;* ;* MICHAEL SULLIVAN ;* BASED ;* ON ;* LI-CHEN WANG'S ;* ;* 8080 TINY BASIC ;* ;* ;* 27 JUNE 1982 ;* ;* @COPYLEFT ;* ALL WRONGS RESERVED ;* ;* NOTE: ;* 8080 REGISTERS HAVE BEEN MAPPED AS FOLLOWS: ;* ;* 8080 8086 ;* ------------------------------------- ;* ;* BC <-> CX ;* DE <-> DX ;* HL <-> BX ;* ;* ;* VERS 1.1 - SUPPORT MS-DOS INTERUPT I/O ;* IMPROVE RND ACTION ;* SUPPORT TIME AND DATE FROM MS-DOS ;* ;************************************************************** ; ; ORG 100H ;STANDARD MS-DOS START ADDR. START: MOV SP,STACK ;SET UP STACK MOV DX,MSG1 ;GET SIGN-ON MSG CALL PRTSTG ;SEND IT MOV B,[BUFFER-2],80H ;INIT CMD LINE BUFFER ; ; MAIN ; ; THIS IS THE MAIN LOOP THAT COLLECTS THE TINY BASIC PROGRAM ; AND STORES IT IN MEMORY. ; ; AT START, IT PRINTS OUT "(CR)OK(LF)", AND INITIALIZES THE ; STACK AND SOME OTHER INTERNAL VARIABLES. THEN IT PROMPTS ; ">" AND READS A LINE. IF THE LINE STARTS WITH A NONZERO ; NUMBER, THIS NUMBER IS THE LINE NUMBER. THE LINE NUMBER ; (IN 16 BIT BINARY) AND THE REST OF THE LINE (INCLUDING ; ITS (CR))IS STORED IN MEMORY. IF A LINE WITH THE SAME ; LINE NUMBER IS ALREADY THERE, IT IS REPLACED BY THE NEW ; ONE. IF THE REST OF THE LINE CONSISTS OF A (CR) ONLY, IT ; IS STORED AND ANY EXISTING LINE WITH THE SAME LINE ; NUMBER IS DELETED. ; ; AFTER A LINE IS INSERTED, REPLACED, OR DELETED, THE ; PROGRAM LOOPS BACK AND ASKS FOR ANOTHER LINE. THIS LOOP ; WILL BE TERMINATED WHEN IT READS A LINE WITH ZERO OR NO ; LINE NUMBER: CONTROL IS THEN TRANSFERED TO "DIRECT". ; ; THE TINY BASIC PROGRAM SAVE AREA STARTS AT THE MEMORY ; LOCATION LABELED "TXTBGN" AND ENDS AT "TXTEND". WE ALWAYS ; FILL THIS AREA STARTING AT "TXTBGN", THE UNFILLED PORTION ; POINTED TO BY THE CONTENTS OF THE MEMORY LOCATION LABELED ; "TXTUNF". ; ; THE MEMORY LOCATION "CURRNT" POINTS TO THE LINE NUMBER ; THAT IS CURRENTLY BEING INTERPRETED. WHILE WE AR IN THIS ; LOOP OR WHILE WE ARE INTERPRETING A DIRECT COMMAND ; (SEE NEXT SECTION), "CURRNT" SHOULD POINT TO A 0. ; RSTART: MOV SP,STACK ;SET STACK POINTER ST1: CALL CRLF MOV DX,OK ;DE->STRING SUB AL,AL CALL PRTSTG ;PRINT PROMPT MOV W,[CURRNT],0 ;CURRENT LINE # = 0 ST2: MOV W,[LOPVAR],0 MOV W,[STKGOS],0 ST3: MOV AL,'>' ;PROMPT ">" NOW CALL GETLN ;READ A LINE PUSH DI ;DI -> END OF LINE ST3A: MOV DX,BUFFER ;DX -> BEGINNING OF LINE CALL TSTNUM ;TEST IF IT'S A NUMBER MOV AH,0 CALL IGNBLNK OR BX,BX ;BX:= VALUE OF # OR 0 IF NO # FOUND POP CX ;CX -> END OF LINE JNZ ST3B JMP DIRECT ST3B: DEC DX DEC DX MOV AX,BX ;GET LINE # MOV DI,DX STOW ;VALUE OF LINE # THERE PUSH CX PUSH DX ;BX,DX -> BEGIN,END MOV AX,CX SUB AX,DX PUSH AX ;AX:= # BYTES IN LINE CALL FNDLN ;FIND THIS LINE IN SAVE PUSH DX ;AREA, DX -> SAVE AREA JNZ ST4 ;NZ:NOT FOUND, INSERT PUSH DX ;Z:FOUND, DELERE IT CALL FNDNXT ;FIND NEXT LINE ;DE -> NEXT LIE POP CX ;CX -> LINE TO BE DELETED MOV BX,[TXTUNF] ;BX -> UNFILLED SAVE AREA CALL MVUP ;MOVE UP TO DELETE MOV BX,CX ;TXTUNF -> UNFILLED AREA MOV [TXTUNF],BX ;UPDATE ST4: POP CX ;GET READY TO INSERT MOV BX,[TXTUNF] ;BUT FIRST CHECK IF POP AX ;AX = # CHARS IN LINE PUSH BX ;IS 3 (LINE # AND CR) CMP AL,3 ;THEN DO NOT INSERT JZ RSTART ;MUST CLEAR THE STACK ADD AX,BX ;COMPUTE NEW TSTUNF MOV BX,AX ;BX -> NEW UNFILLED AREA ST4A: MOV DX,TXTEND ;CHECK TO SEE IF THERE CMP BX,DX ;IS ENOUGH SPACE JC ST4B ;SORRY, NO ROOM FOR IT JMP QSORRY ST4B: MOV [TXTUNF],BX ;OK, UPDATE TXTUNF POP DX ;DX -> OLD UNFILLED AREA CALL MVDOWN POP DX ;DX -> BEGIN, BX -> END POP BX CALL MVUP ;MOVE NEW LINE TO SAVE AREA JP ST3 TSTV: MOV AH,64 ;TEST VARIABLES CALL IGNBLNK JC RET TSTV1: JNZ TV1 ;NOT @ ARRAY CALL PARN ;@ SHOULD BE FOLLOWED ADD BX,BX JNC SS1B ;IS INDEX TOO BIG? JMP QHOW SS1B: PUSH DX ;WILL IT OVERWRITE XCHG DX,BX ;TEXT? CALL SIZE ;FIND SIZE OF FREE CMP BX,DX ;AND CHECK THAT JNC SS1A ;IFF SO, SAY "SORRY" JMP ASORRY SS1A: MOV BX,VARBGN ;IFF NOT, GET ADDRESS SUB BX,DX ;OF @(EXPR) AND PUT IT POP DX ;IN HL RET ;C FLAG IS CLEARED TV1: CMP AL,27 ;NOT @, IS IT A TO Z? CMC: ;IFF NOT, RETURN C FLAG JC RET ;IFF NOT, RETURN C FLAG INC DX TV1A: MOV BX,VARBGN ;COMPUTE ADDRESS OF MOV AH,0 ;CLEAR UPPER BYTE ADD AX,AX ;AX:=AX*2 (WORD STORAGE) ADD BX,AX ;BX:=VARBGN+2*AL RET ;USE CARRY AS ERROR INDICATOR ; ; TSTNUM - AT ENTRY DX -> BUFFER OF ASCII CHARACTERS ; TSTNUM: MOV BX,0 ;****TSTNUM**** MOV CH,BH ;TEST IFF THE TEXT IS MOV AH,0 ;FOR CMP IN IGNBLNK CALL IGNBLNK ;A NUMBER. TN1: CMP AL,'0' ;IFF NOT, RETURN 0 IN JC RET ;B AND HL CMP AL,':' ;IFF NUMBERS, CONVERT JNC RET ;TO BINARY IN BX AND MOV AL,0F0H ;SET AL TO # OF DIGITS AND AL,BH ;IFF BH>255, THERE IS NO JNZ QHOW ;ROOM FOR NEXT DIGIT INC CH ;CH COUNTS NUMBER OF DIGITS PUSH CX MOV AX,BX ;BX:=10*BX+(NEW DIGIT) MOV CX,10 PUSH DX ;SAVE DX MUL AX,CX MOV BX,AX ;PARTIAL RESULT NOW IN BX POP DX ;RESTORE MOV SI,DX LODB ;ASCII DIGIT IN AL NOW SUB AL,48 ;CONVERT TO BINARY MOV AH,0 ADD BX,AX ;FULL RESULT NOW IN BX POP CX LODB ;REPEAT FOR MORE DIGITS LAHF ;SAVE FLAGS INC DX SAHF ;RESTORE FLAGS JNS TN1 ;QUIT IF NO NUM OR OVERFLOW QHOW: PUSH DX ;****ERROR: "HOW?"**** AHOW: MOV DX,HOW JMP ERROR HOW: DB 'HOW?',0DH OK: DB 'OK',0DH WHAT: DB 'WHAT?',0DH SORRY: DB 'SORRY',0DH ; ;* ;********************************************************** ;* ;* *** TABLES *** DIRECT *** & EXEC *** ;* ;* THIS SECTION OF THE CODE TESTS A STRING AGAINST A TABLE. ;* WHEN A MATCH IS FOUND, CONTROL IS TRANSFERRED TO THE SECTION ;* OF CODE ACCORDING TO THE TABLE. ;* ;* AT 'EXEC' DX SHOULD POINT TO THE STRING AND BX SHOULD POINT ;* TO THE TABLE-1. AT 'DIRECT', DX SHOULD POINT TO THE STRING, ;* BX WILL BE SET UP TO POINT TO TAB1-1, WHICH IS THE TABLE OF ;* ALL DIRECT AND STATEMENT COMMANDS. ;* ;* A '.' IN THE STRING WILL TERMINATE THE TEST AND THE PARTIAL ;* MATCH WILL BE CONSIDERED AS A MATCH. E.G., 'PR.', ;* 'PRI.', 'PRIN.', OR 'PRINT' WILL ALL MATCH 'PRINT'. ;* ;* THE TABLE CONSISTS OF ANY NUMBER OF ITEMS. EACH ITEM ;* IS A STRING OF CHARACTERS WITH BIT 7 SET TO 1 IN LAST CHAR ;* A JUMP ADDRESS IS STORED FOLLOWING EACH CHARACTER ENTRY. ;* ;* END OF TABLE IS AN ITEM WITH A JUMP ADDRESS ONLY. IF THE ;* STRING DOES NOT MATCH ANY OF THE OTHER ITEMS, IT WILL ;* MATCH THIS NULL ITEM AS DEFAULT. THE DEFAULT IS INDICATED ;* BY FOLLOWING THE 80H DEFAULT INDICATOR. ;* TAB1: EQU $ ;DIRECT COMMANDS DM 'LIST' DW LIST ;EXECUTION ADDRESSES DM 'EDIT' DW EDIT DM 'E' DW EDIT ;HAVE SHORT FORM DEFINED ALSO DM 'RUN' DW RUN DM 'NEW' DW NEW DM 'LOAD' DW DLOAD DM 'SAVE' DW DSAVE DM 'BYE' ;GO BACK TO DOS (EXIT TBASIC) DW BYE TAB2: EQU $ ;DIRECT/STATEMENT DM 'NEXT' DW NEXT ;EXECUTION ADDRESSES DM 'LET' DW LET DM 'OUT' DW OUTCMD DM 'POKE' DW POKE DM 'WAIT' DW WAITCM DM 'IF' DW IFF DM 'GOTO' DW GOTO DM 'GOSUB' DW GOSUB DM 'RETURN' DW RETURN DM 'REM' DW REM DM 'FOR' DW FOR DM 'INPUT' DW INPUT DM 'PRINT' DW PRINT DM 'STOP' DW STOP DB 128 ;SIGNALS END ;REMEMBER TO MOVE DEFAULT DOWN. DW DEFLT ;LAST POSIBILITY TAB4: EQU $ ;FUNCTIONS DM 'RND' DW RND DM 'INP' DW INP DM 'PEEK' DW PEEK DM 'USR' DW USR DM 'ABS' DW ABS DM 'SIZE' DW SIZE DB 128 ;SIGNALS END ;YOU CAN ADD MORE FUNCTIONS BUT REMEMBER ;TO MOVE XP40 DOWN DW XP40 TAB5: EQU $ ;"TO" IN "FOR" DM 'TO' TAB5A: DW FR1 DB 128 DW QWHAT TAB6: EQU $ ;"STEP" IN "FOR" DM 'STEP' TAB6A: DW FR2 DB 128 DW FR3 TAB8: EQU $ ;RELATION OPERATORS DM '>=' DW XP11 ;EXECUTION ADDRESS DM '#' DW XP12 DM '>' DW XP13 DM '=' DW XP15 DM '<=' DW XP14 DM '<' DW XP16 DB 128 DW XP17 ; ; END OF PARSER ACTION TABLE ; ; ; AT ENTRY BX -> COMMAND TABLE (ABOVE) ; DX -> COMMAND LINE (I.E. "BUFFER") ; DIRECT: MOV BX,TAB1-1 ;***DIRECT*** ;* EXEC: EQU $ ;***EXEC*** EX0: MOV AH,0 CALL IGNBLNK ;IGNORE LEADING BLANKS PUSH DX ;SAVE POINTER MOV SI,DX EX1: LODB ;GET CHAR WHERE DX -> INC DX ;PRESERVE POINTER CMP AL,'.' ;WE DECLARE A MATCH JZ EX4 INC BX MOV AH,[BX] AND AH,127 ;STRIP BIT 7 CMP AL,AH ;COMPARISON NOW EASY JZ EX2 ; NO MATCH - CHECK NEXT ENTRY EX0A: CMP B,[BX],128 ;BYTE COMPARE JNC EX0B INC BX JP EX0A ; AT THIS POINT HAVE LAST LETTER EX0B: ADD BX,3 ;GET PAST EXECUTION ADDRESS CMP B,[BX],128 ;FOUND DEFAULT? JZ EX3A ;IF SO, EXECUTE DEFAULT DEC BX ;CORRECT FOR PRE-INCREMENT POP DX ;RESTORE POINTER JP EX0 ;LOOK SOME MORE FOR A MATCH EX4: INC BX CMP B,[BX],128 JC EX4 JP EX3 ; EX3A: DEC SI JP EX3 ;CORRECT SI FOR DEFAULT EXECUTION EX2: CMP B,[BX],128 ;END OF RESERVED WORD? JC EX1 ;NO - CHECK SOME MORE ; AT THIS POINT NEED TO GET EXECUTION ADDRESS EX3: INC BX ;BX -> EXECUTION ADDRESS POP AX ;CLEAR STACK MOV DX,SI ;RESET POINTER JMP [BX] ;DO IT ;* ; ; ; WHAT FOLLOWS IS THE CODE TO ECECUTE DIRECT AND STATEMENT COM- ; MANDS. CONTROL IS TRANSFERED TO THESE POINTS VIA THE COMMAND ; TABLE LOOKUP CODE OF 'DIRECT' AND 'EXEC' IN THE LAST SECTION. ; AFTER THE COMMAND IS EXECUTED, CONTROL IS TRANSFERRED TO ; OTHER SECTIONS AS FOLLOWS: ; ; FOR 'LIST','NEW', ANS 'STOP': GO BACK TO 'RSTART' ; ; FOR 'RUN',: GO EXECUTE THE FIRST STORED LINE IFF ANY; ELSE ; GO BACK TO RSTART. ; ; FOR 'GOTO' AND 'GOSUB': GO EXECUTE THE TARGET LINE. ; ; FOR 'RETURN' AND 'NEXT': GO BACK TO SAVED RETURN LINE. ; ; FOR ALL OTHERS: IFF 'CURRNT' -> 0, GO TO 'RSTART', ELSE ; GO EXECUTE NEXT COMMAND. (THIS IS DONE ; IN 'FINISH'.) ; ; ; ****NEW****STOP****RUN (& FRIENDS)****GOTO**** ; ; 'NEW(CR)' SETS 'TXTUNF' TO POINT TO 'TXTBGN' ; ; 'STOP(CR)' GOES BACK TO 'RSTART' ; ; 'RUN(CR)' FINDS THE FIRST STROED LINE, STORES ITS ADDRESS ; (IN 'CURRNT'), AND START TO EXECUTE IT. NOTE THAT ONLY ; THOSE COMMANDS IN TAB2 ARE LEGAL FOR STORED PROGRAMS. ; ; THERE ARE THREE MORE ENTRIES IN 'RUN': ; ; 'RUNNXL' FINDS NEXT LINE, STORES ITS ADDR AND EXEC IT. ; 'RUNTSL' STORES THE ADDRESS OF THIS LINE AND EXECUTES IT ; 'RUNSML' CONTINUES THE EXECUTION ON SAME LINE. ; ; 'GOTO(EXPR)' EVALUATES THE EXPRESSION, FINDS THE TARGET LINE, ; AND JUMPS TO 'RUNTSL' TO DO IT. ; ; 'DLOAD' LOADS A NAMES PROGRAM FROM DISK (ANYNAME.TBI) ; ; 'DSAVE' SAVES A NAMES PROGRAM ON DISK ; ; 'FCBSET' SETS UP THE MSDOS FILE CONTROL BLOCK FOR SUBSEQUENT ; DISK I/O. ; ; NEW: MOV W,[TXTUNF],TXTBGN ; STOP: CALL ENDCHK ;****STOP(CR)**** JMP RSTART ; RUN: CALL ENDCHK ;****RUN(CR)**** MOV DX,TXTBGN ;FIRST SAVED LINE ; RUNNXL: MOV BX,0 ;****RUNNXL**** CALL FNDLNP ;FIND WHATEVER LINE JNC RUNTSL ;C: PASSED TXTUNF, QUIT JMP RSTART ; RUNTSL: XCHG DX,BX ;****RUNTSL**** MOV [CURRNT],BX ;SET 'CURRNT"->LINE # XCHG DX,BX INC DX INC DX ; RUNSML: CALL CHKIO ;****RUNSML**** MOV BX,TAB2-1 ;FIND COMMAND IN TABLE 2 JMP EXEC ;AND EXECUTE IT ; GOTO: CALL EXP ;****GOTO(EXPR)**** PUSH DX ;SAVE FOR ERROR ROUTINE CALL ENDCHK ;MUST FIND A 0DH (CR) CALL FNDLN ;FIND THE TARGET LINE JZ GT1 ;NO SUCH LINE # JMP AHOW GT1: POP AX JP RUNTSL ;GO DO IT ; ; BDOS EQUATES (FOR MS-DOS) ; BYE: EQU 0 ;BDOS EXIT ADDRESS FCB: EQU 5CH SETDMA: EQU 26 OPEN: EQU 15 READD: EQU 20 WRITED: EQU 21 CLOSE: EQU 16 MAKE: EQU 22 BCONIN: EQU 10 ;BUFFERED CONSOLE INPUT DELETE: EQU 19 CONOUT: EQU 2 ;CONSOLE OUTPUT CONST: EQU 11 ;CONSOLE STATUS ; ; DLOAD: MOV AH,0 CALL IGNBLNK ;IGNORE BLANKS PUSH BX ;SAVE H CALL FCBSET ;SET UP FILE CONTROL BLOCK PUSH DX ;SAVE THE REST PUSH CX ;SAVE THE REST MOV DX,FCB ;GET FCB ADDR MOV AH,OPEN ;PREPARE TO OPEN FILE INT 33 ;CALL MS-DOS TO OPEN FILE CMP AL,0FFH ;IS IT THERE? JNZ DL1 ;NO, SEND ERROR JMP QHOW DL1: XOR AL,AL ;CLEAR A MOV [FCB+32],AL ;START AT RECORD 0 MOV DX,TXTBGN ;GET BEGINNING LOAD: PUSH DX ;SAVE DMA ADDRESS MOV AH,SETDMA INT 33 ;CALL MS-DOS TO SET DAM ADDR MOV AH,READD MOV DX,FCB INT 33 ;CALL MS-DOS TO READ SECTOR CMP AL,1 ;DONE? JC RDMORE ;NO, READ MORE JZ LL1 LOAD1: JMP QHOW ;BAD READ OR NO DELIMITER LL1: MOV AH,CLOSE MOV DX,FCB INT 33 ;CALL MS-DOS TO CLOSE FILE POP BP ;DMA ADDR IN BP SUB BP,100H ;BACKUP MOV CX,100H ;MAX LOOPS RDM1: INC BP ;PRE INC CMP W,[BP],0 ;FOUND DELIMITER? LOOPNZ RDM1 ;KEEP LOOKING CMP CL,0 ;MAC LOOPS EXECUTED? JZ LOAD1 ;GIVE ERROR IF SO MOV [TXTUNF],BP ;UPDATE POINTER POP CX ;GET OLD REG BACK POP DX ;GET OLD REG BACK POP BX ;GET OLD REG BACK CALL FINISH ;FINISH RDMORE: POP DX ;GET DMA ADDR MOV BX,80H ;GET 128 ADD BX,DX ;ADD IT TO DMA ADDR XCHG DX,BX ;BACK IN D JMP LOAD ;AND READ SOME MORE ; DSAVE: CMP W,[TXTUNF],TXTBGN ;SEE IF ANYTHING TO SAVE JNZ DS1A JMP QWHAT DS1A: MOV BP,[TXTUNF] MOV W,[BP],0 ;SET DELIMITER MOV AH,0 CALL IGNBLNK ;IGNORE BLANKS PUSH BX ;SAVE BX CALL FCBSET ;SETUP FCB PUSH DX PUSH CX ;SAVE OTHERS MOV DX,FCB MOV AH,DELETE INT 33 ;CALL MS-DOS TO ERASE FILE MOV DX,FCB MOV AH,MAKE INT 33 ;CALL MS-DOS TO MAKE A NEW ONE CMP AL,0FFH ;IS THERE SPACE? JNZ DS1 JMP QHOW ;NO, ERROR DS1: XOR AL,AL ;CLEAR A MOV [FCB+32],AL ;START AT RECORD 0 MOV DX,TXTBGN ;GET BEGINNING SAVE: PUSH DX ;SAVE DMA ADDR MOV AH,SETDMA INT 33 ;CALL MS-DOS TO SET DMA ADDR MOV AH,WRITED MOV DX,FCB INT 33 ;CALL MS-DOS TO WRITE SECTOR OR AL,AL ;SET FLAGS JZ SS1 ;IF NOT ZERO, ERROR JMP QHOW SS1: POP DX ;GET DMA ADDR BACK MOV AX,DX CMP AX,[TXTUNF] ;SEE IF DONE JZ SAVDON JNC SAVDON ;JUMP IF DONE WRITMOR: MOV BX,80H ADD BX,DX XCHG DX,BX ;GET IT TO D JP SAVE SAVDON: MOV AH,CLOSE MOV DX,FCB INT 33 ;CALL MS-DOS TO CLOSE FILE POP CX ;GET REGS BACK POP DX ;GET REGS BACK POP BX ;GET REGS BACK CALL FINISH ; FCBSET: MOV BX,FCB ;GET FCB ADDR MOV B,[BX],0 ;CLEAR ENTRY TYPE FNCLR: INC BX MOV B,[BX],' ' ;CLEAR TO SPACE MOV AX,FCB+8 CMP AX,BX ;DONE? JNZ FNCLR ;NO, DO IT AGAIN INC BX MOV B,[BX],'T' ;SET FILE TYPE TO 'TBI' INC BX MOV B,[BX],'B' INC BX MOV B,[BX],'I' EXRC: INC BX MOV B,[BX],0 MOV AX,FCB+15 CMP AX,BX JNZ EXRC ;NO, CONTINUE MOV BX,FCB+1 ;GET FILENAME START FN: MOV SI,DX LODB ;GET CHAR CMP AL,0DH ;IS IT A 'CR' JZ RET ;YES, DONE CMP AL,'!' ;LEGAL CHAR? JNC FN1 ;NO, SEND ERROR JMP QWHAT FN1: CMP AL,'[' ;AGAIN JC FN2 ;DITTO JMP QWHAT FN2: MOV [BX],AL ;SAVE IT IN FCB INC BX INC DX MOV AX,FCB+9 CMP AX,BX ;LAST? JNZ FN ;NO, CONTINUE RET ;TRUNCATE AT EIGHT CHARS ; ; ; ****LIST**** AND ****PRINT**** AND ****EDIT**** ; ; LIST HAS TWO FORMS: ; 'LIST(CR)' LISTS ALL SAVED LINES ; 'LIST #(CR)' START LIST AT THIS LINE # ; YOU CAN STOP LISTING BY CONTROL C KEY ; ; PRINT COMMAND IS 'PRINT ....;' OR 'PRINT ....(CR)' ; WHERE '....' IS A LIST OF EXPRESIONS, FORMATS, BACKARROWS, AND ; STRINGS. THESE ITEMS ARE SEPERATED BY COMMAS. ; ; A FORMAT IS A POUND SIGN FOLLOWED BY A NUMBER. IT CONTROLS THE ; NUMBER OF SPACES THE VALUE OF AN EXPRESSION IS TO BE PRINTED. ; TED. IT STAYS EFFECTIVE FOR THE REST OF THE PRINT, UNLESS ; CHANGED BY ANOTHER FORMAT. IF NO FORMAT SPEC, 6 POSITIONS ; WILL BE USED. ; ; A STRING IS QUOTED IN A PAIR OF SINGLE QUOTES OR DOUBLE ; QUOTES. ; ; A BACK-ARROW MEANS GENERATE A (CR) WITHOUT (LF). ; ; A (CRLF) IS GENERATED AFTER THE ENTIRE LIST HAS BEEN PRINT OR ; IF THE LIST IS A NULL LIST. HOWEVER IF THE LIST ENDED WITH A ; COMMA, NO (CR) IS GENERATED. ; ; LIST: CALL TSTNUM ;TEST IFF THERE IS A # CALL ENDCHK ;IFF NO # WE GET A 0 CALL FNDLN ;FIND THIS OR NEXT LINE LS1: JNC LS2 ;C: PASSED TXTUNF JMP RSTART LS2: CALL PRTLN ;PRINT THE LINE CALL CHKIO ;SEE IF ^X OR ^C CALL FNDLNP ;FIND NEXT LINE JP LS1 ;LOOP BACK ; ; EDIT: CALL TSTNUM ;TEST IF THERE IS A # CALL ENDCHK ;AT END? CALL FNDLN ;FIND SPEC LINE OR NEXT LINE PUSH DX ;SAVE LINE # JNC ED2 ;C: PASSED TXTUNF POP DX ;THROW AWAY LINE # ED1: JMP RSTART ED2: CALL PRTLN ;PRINT THE LINE POP DX ;GET LINE # BACK MOV B,[OCSW],0 ;DIRECT OUTPUT TO BUFFER MOV B,[BUFFER-1],0 ;CLEAR CHAR COUNT MOV B,[PRTLN1+1],4 ;PRINT ONE LESS SPACE MOV DI,BUFFER ;PREPARE TO MOVE CALL PRTLN MOV B,[OCSW],0FFH ;REDIRECT OUTPUT TO CONSOLE DEC [BUFFER-1] ;AVOID CR? MOV B,[PRTLN1+1],5 ;RESTORE PRTLN JMP ST3 ;PROMPT AND GETLINE ONLY PRINT: MOV CL,6 ;C:= # OF SPACES MOV AH,';' ;CHECK FOR ';' IN IGNBLNK CALL IGNBLNK ;IGNORE BLANKS JNZ PR2 ;JUMP IF ';' NOT FOUND CALL CRLF ;GIVE CR,LF AND JMP RUNSML ;CONTINUE SAME LINE PR2: MOV AH,0DH CALL IGNBLNK JNZ PR0 CALL CRLF ;ALSO GIVE CRLF AND JMP RUNNXL ;GOTO NEXT LINE PR0: MOV AH,'#' CALL IGNBLNK JNZ PR1 CALL EXP ;YES, EVALUATE EXPR MOV CL,BL ;AND SAVE IT IN C JP PR3 ;LOOK FOR MORE TO PRINT PR1: CALL QTSTG ;OR IS IT A STRING? JP PR8 ;IFF NOT, MUST BE EXPRESSION PR3: MOV AH,',' CALL IGNBLNK JNZ PR6 CALL FIN ;IN THE LIST JP PR0 ;LIST CONTINUES PR6: CALL CRLF ;LIST ENDS CALL FINISH PR8: CALL EXP ;EVAL THE EXPR PUSH CX CALL PRTNUM ;PRINT THE VALUE POP CX JP PR3 ;MORE TO PRINT? ; ; ; ****GOSUB**** AND ****RETURN**** ; ; 'GOSUB (EXPR);' OR 'GOSUB EXPR(CR)' IS LIKE THE 'GOTO' COMMAND ; EXCEPT THAT THE CURRENT TEXT POINTER, STACK POINTER ETC. ARE ; SAVED SO THAT EXECUTION CAN BE CONTINUED AFTER THE SUBROUTINE ; 'RETURN'. IN ORDER THAT 'GOSUB' CAN BE NESTED (AND EVEN RECUR- ; SIVE), THE SAVE AREA MUST BE STACKED. THE STACK POINTER IS ; SAVED IN 'STKGOS'. THE OLD 'STKGOS' IS SAVED IN THE STACK. IF ; WE ARE IN THE MAIN ROUTINE, 'STKGOS' IS ZERO (THIS WAS DONE BY ; THE "MAIN" SECTION OF THE CODE), BUT WE STILL SAVE IT AS ; A FLAG FOR NO FURTHER RETURNS. ; ; 'RETURN(CR)' UNDOES EVERYTHING THAT 'GOSUB' DID, AND THUS RE- ; TURNS THE EXECUTION TO THE COMMAND AFTER THE MOST RECENT 'GO- ; SUB'. IFF 'STKGOS' IS ZERO, IT INDICATES THAT WE NEVER HAD A ; 'GOSUB' AND IS THUS AN ERROR. ; ; GOSUB: CALL PUSHA ;SAVE THE CURRENT 'FOR' CALL EXP ;PARAMETERS PUSH DX CALL FNDLN ;FIND THE TARGET LINE JZ GS1 ;NOT THERE, SAY "HOW?" JMP AHOW GS1: MOV BX,[CURRNT] ;FOUND IT, SAVE OLD PUSH BX ;'CURRNT' OLD 'STKGOS' MOV BX,[STKGOS] PUSH BX MOV BX,0 ;AND LOAD NEW ONES MOV [LOPVAR],BX ADD BX,SP MOV [STKGOS],BX JMP RUNTSL ;THEN RUN THAT LINE RETURN: CALL ENDCHK ;THERE MUST BE A 0DH MOV BX,[STKGOS] ;OLD STACK POINTER OR BX,BX JNZ RET1 ;SO, WE SAY: "WHAT?" JMP QWHAT RET1: XCHG BX,SP ;ELSE RESTORE IT POP BX ;ELSE RESTORE IT MOV [STKGOS],BX ;AND THE OLD 'STKGOS' POP BX MOV [CURRNT],BX ;AND THE OLD 'CURRNT' POP DX ;OLD TEXT POINTER CALL POPA ;OLD "FOR" PARAMETERS CALL FINISH ;AND WE ARE BACK HOME ; ; ; ****FOR**** AND ****NEXT**** ; ; ; 'FOR' HAS TWO FORMS: ; 'FOR VAR=EXP1 TO EXP2 STEP EXP3' ; 'FOR VAR=EXP1 TO EXP2' ; THE SECOND FORM MEANS THE SAME AS THE FIRST FORM WITH EXP3=1. ; ; TBI WILL FIND THE VARIABLE VAR AND SET ITS VALUE TO THE CUR- ; RENT VALUE OF EXP1. IT ALSO EVALUATES EXP2 AND EXP3 AND ; SAVES ALL OF THESE TOGETHER WITH THE TEXT POINTER ETC IN ; THE 'FOR' SAVE AREA, WHICH CONSISTS OF 'LOPVAR', 'LOPINC', ; 'LOPLMT', 'LOPLN', AND 'LOPPT'. IFF THERE IS ALREADY SOME- ; THING IN THE SAVE AREA (THIS IS INDICATED BY A NON-ZERO ; 'LOPVAR'), THEN THE OLD SAVE AREA IS SAVED IN THE STACK BE- ; FORE THE NEW ONE OVERWRITES IT. ; ; TBI WILL THEN DIG IN THE STACK AND FIND OUT IFF THIS ; SAME VARIABLE WAS USED IN ANOTHER CURRENTLY ACTIVE FOR ; LOOP. IT THAT IS THE CASE THEN THE OLD 'FOR' LOOP IS DE- ; IVATED (PURGED FROM THE STACK). ; ; 'NEXT VAR' SERVES AS THE LOGICAL (NOT NECESSARILLY PHYSICAL) ; END OF THE 'FOR' LOOP. THE CONTROL VARIABLE VAR. IS CHECKED ; WITH THE 'LOPVAR'. IFF THEY ARE NOT THE SAME, TBI DIGGS IN ; THE STACK TO FIND THE RIGHT ONE AND PURGES ALL THOSE THAT ; DID NOT MATCH. EITHER WAY, TBI THEN ADDS THE 'STEP' TO THAT ; VARIABLE AND CHECKS THE RESULT WITH THE LIMIT. IFF IT IS ; WITHIN THE LIMIT, CONTROL LOOPS BACK TO THE COMMAND FOLLOW- ; ING THE 'FOR'. IFF OUTSIDE THE LIMIT, THE SAVE AREA IS PURG- ; ED AND EXECUTION CONTINUES. ; ; FOR: CALL PUSHA ;SAVE THE OLD SAVE AREA CALL SETVAL ;SET THE CONTROL VAR. DEC BX MOV [LOPVAR],BX ;SAVE TGAT MOV BX,TAB5-1 ;USE 'EXEC' TO LOOK JMP EXEC ;FOR THE WORD 'TO' FR1: CALL EXP ;EVALUATE THE LIMIT MOV [LOPLMT],BX ;SAVE THAT MOV BX,TAB6-1 ;USED 'EXEC' TO LOOK JMP EXEC ;FOR THE WORD 'STEP' FR2: CALL EXP ;FOUND IT, GET STEP JP FR4 ;FOUND IT, GET STEP FR3: MOV BX,1 ;NOT FOUND, SET TO ONE FR4: MOV [LOPINC],BX ;SAVE THAT TOO FR5: MOV BX,[CURRNT] ;SAVE CURRENT LINE # MOV [LOPLN],BX XCHG DX,BX ;AND TEXT POINTER MOV [LOPPT],BX MOV CX,10 ;DIG INTO STACK TO MOV BX,[LOPVAR] ;FIND 'LOPVAR' XCHG DX,BX MOV BX,CX ;BX:=10 NOW ADD BX,SP JP FR7A FR7: ADD BX,CX FR7A: MOV AX,[BX] ;GET THAT OLD 'LOPVAR' OR AX,AX JZ FR8 ;0 SAYS NO MORE IN IT CMP AX,DX ;SAME AS THIS ONE? JNZ FR7 XCHG DX,BX MOV BX,0 ;THE OTHER HALF? ADD BX,SP MOV CX,BX MOV BX,10 ADD BX,DX CALL MVDOWN ;AND PURGE 10 WORDS XCHG BX,SP ;IN THE STACK FR8: MOV BX,[LOPPT] ;JOB DONE, RESTORE DE XCHG DX,BX CALL FINISH ;AND CONTINUE ; NEXT: CALL TSTV ;GET ADDR OF VAR JNC NX4 ;NO VARIABLE, "WHAT?" JMP QWHAT NX4: MOV [VARNXT],BX ;YES, SAVE IT NX0: PUSH DX ;SAVE TEXT POINTER XCHG DX,BX MOV BX,[LOPVAR] ;GET VAR IN 'FOR' MOV AL,BH OR AL,BL ;0 SAY NEVER HAD ONE JNZ NX5 ;SO WE ASK: "WHAT?" JMP AWHAT NX5: CMP DX,BX ;ELSE WE CHECK THEM JZ NX3 ;OK, THEY AGREE POP DX ;NO, LET'S SEE CALL POPA ;PURGE CURRENT LOOP MOV BX,[VARNXT] ;AND POP ONE LEVEL JMP NX0 ;GO CHECK AGAIN NX3: MOV DL,[BX] ;COME HERE WHEN AGREED INC BX MOV DH,[BX] ;DE = VAL OF VAR MOV BX,[LOPINC] PUSH BX ADD BX,DX XCHG DX,BX ;ADD ONE STEP MOV BX,[LOPVAR] ;PUT IT BACK MOV [BX],DL INC BX MOV [BX],DH MOV BX,[LOPLMT] ;HL-> LIMIT POP AX XCHG AH,AL OR AX,AX JNS NX1 ;STEP > 0 XCHG DX,BX NX1: CALL CKHLDE ;COMPARE WITH LIMIT POP DX ;RESTORE TEXT POINTER JC NX2 ;OUTSIDE LIMIT MOV BX,[LOPLN] ;WITHIN LIMIT, GO MOV [CURRNT],BX ;BACK TO THE SAVED MOV BX,[LOPPT] ;'CURRNT' AND TEXT XCHG DX,BX ;POINTER CALL FINISH ;POINTER NX2: CALL POPA ;PURGE THIS LOOP CALL FINISH ; ; ; ****REM**** AND ****IF**** AND ****LET***** ; ; ; 'REM' CAN BE FOLLOWED BY ANYTHING AND IS IGNORED BY TBI. TBI ; TREATS IT LIKE AN 'IF' WITH A FALSE CONDITION. ; ; 'IF' IS FOLLOWED BY AN EXPR. AS A CONDITION AND ONE OR MORE ; COMMANDS (INCLUDING OTHER 'IF'S) SEPERATED BY SEMI-COLONS. ; NOTE THAT THE WORD 'THEN' IS NOT USED. TBI EVALUATES THE ; EXPR. IFF IT IS NON-ZERO, EXECUTION CONTINUES. IFF THE EXPR. ; IS ZERO, THE COMMANDS THAT FOLLOW ARE IGNORED AND EXECUTION ; CONTINUES AT THE NEXT LINE. ; ; 'IPUT' COMMANS IS LIKE THE 'PRINT' COMMAND, AND IS FOLLOWED ; BY A LIST OF ITEMS. IFF THE ITEM IS A STRING IN SINGLE OR ; DOUBLE QUOTES, OR IS A BACK-ARROW, IT HAS THE SAME EFFEDT AS ; PRINTED OUT FOLLOWED BY A COLON. THEN TBI WAITS FOR AN EXPR. ; TO BE TYPEN IN. THE VARIABLE IS THEN SET TO THE VALUE OF ; THIS EXPR. IFF THE VARIABLE IS PROCEDED BY A STRING PRINTED ; FOLLOWED BY A COLON. TBI THEN WAITS FOR INPUT EXPR. AND SETS ; THE VARIABLE TO THE VALUE OF THE EXPR. ; ; IFF THE INPUT EXPR. IS INVALID, TBI WILL PRINT "WHAT?" , ; "HOW?",OR "SORRY" AND REPRINT THE PROMPT AND REDO THE INPUT. ; THE EXECUTION WILL NOT TERMINATE UNLESS YOU TYPE CONTROL-C . ; THIS IS HANDLED IN 'INPERR'. ; ; 'LET' IS FOLLOWED BY A LIST OF ITEMS SEPERATED BY COMMAS . ; EACH ITEM CONSISTS OF A VARIABLE, AN EQUAL SIGN, AND AN ; EXPR. TBI EVALUATES THE EXPR. AND SETS THE VARIABLE TO THAT ; VALUE. TBI WILL ALSO HANDLE 'LET' COMMAND WITHOUT THE WORD ; 'LET'. THIS IS DONE BY 'DEFLT'. ; ; ; REM: MOV BX,0 ;****REM**** JP IFF1A ;JUMP AROUND EXPR ; IFF: CALL EXP ;****IF**** IFF1A: CMP BX,0 ;IS THE EXPR = 0? JZ IFF1 ;NO, CONTINUE JMP RUNSML IFF1: CALL FNDSKP ;YES, SIKP REST OF LINE JC IFF2 ;YES, SIKP REST OF LINE JMP RUNTSL IFF2: JMP RSTART ;YES, SIKP REST OF LINE ; INPERR: MOV BX,[STKINP] ;****INPERR**** XCHG BX,SP ;RESTORE OLD STACK POINTER POP BX ;AND OLD 'CURRNT' MOV [CURRNT],BX POP DX POP DX ;REDO INPUT ; INPUT: EQU $ ;****INPUT**** IP1: PUSH DX ;SAVE IN CASE OF ERROR CALL QTSTG ;IS NEXT ITEM A STRING? JP IP2 ;NO CALL TSTV ;YES, BUT FOLLOWED BY A JC IP4 ;VARIABLE? NO. JP IP3 ;YES. INPUT VAR. IP2: PUSH DX ;SAVE FOR 'PRTSTG' CALL TSTV ;MUST BE A VAR NOW JNC IP2A ;"WHAT" IT IS NOT! JMP QWHAT IP2A: MOV SI,DX LODB ;GET READY FOR 'RTSTG' MOV CL,AL SUB AL,AL MOV DI,DX STOB POP DX CALL PRTSTG ;PRINT STRING AS PROMPT MOV AL,CL DEC DX MOV DI,DX STOB IP3: PUSH DX XCHG DX,BX MOV BX,[CURRNT] ;ALSO SAVE 'CURRNT' PUSH BX MOV BX,IP1 MOV [CURRNT],BX ;NEG NUMBER AS FLAG MOV [STKINP],SP PUSH DX ;OLD HL MOV AL,':' ;PRINT THIS TOO CALL GETLN ;AND GET A LINE IP3A: MOV DX,BUFFER ; POINTS TO BUFFER CALL EXP ;EVALUATE INPUT NOP ;CAN BE 'CALL ENDCHK' NOP ;CAN BE 'CALL ENDCHK' NOP ;CAN BE 'CALL ENDCHK' POP DX ;OK,GET OLD HL XCHG DX,BX ;OK,GET OLD HL MOV [BX],DX POP BX ;GET OLD 'CURRNT' MOV [CURRNT],BX POP DX ;AND GET OLD TEXT POINTER IP4: POP AX MOV AH,',' CALL IGNBLNK JNZ IP5 JP IP1 ;YES, MORE ITEMS IP5: CALL FINISH ; DEFLT: MOV SI,DX LODB ;****DEFLT**** CMP AL,0DH ;EMPTY LINE IS OK JZ LT1 ;ELSE IT IS 'LET' ; LET: CALL SETVAL ;****LET**** MOV AH,',' CALL IGNBLNK JNZ LT1 JP LET ;ITEM BY ITEM LT1: CALL FINISH ;UNTIL FINISH ; ; ; ****EXPR**** ; ; 'EXPR' EVALUATES ARITHMETICAL OR LOGICAL EXPRESSIONS. ; ::= ; ; ; WHERE IS ONE OF THE OPERATORS IN TAB8 AND THE RE- ; SULT OF THESE OPERATIONS IS 1 IFF TRUE AND 0 IFF FALSE. ; ; ::=(+ OR -)(+ OR -(....) ; ; WHERE () ARE OPTIONAL AND (....) ARE OPTIONAL REPEATS. ; ; ::=(<* OR />)(....) ; ::= ; ; () ; ; IS RECURSIVE SO THAT VARIABLE '@' CAN HAVE AN EXPR ; AS INDEX, FUCTIONS CAN HAVE AN AS ARGUMENTS, AND ; CAN BE AN IN PARANTHESES. ; ; EXP: CALL EXPR2 PUSH BX EXPR1: MOV BX,TAB8-1 ;LOOKUP REL.OP JMP EXEC ;GO DO IT XP11: CALL XP18 JC RET ;NO RETURN HL=0 MOV BL,AL ;YES, RETURN HL=1 RET XP12: CALL XP18 JZ RET ;FALSE, RETURN HL=0 MOV BL,AL ;TRUE, RETURN HL=1 RET XP13: CALL XP18 ;REL.OP '>' JZ RET ;FALSE JC RET ;ALSO FALSE, HL=0 MOV BL,AL ;TRUE, HL=1 RET XP14: CALL XP18 ;REL OP '<=' MOV BL,AL ;SET HL=1 JZ RET ;REL. TRUE, RETURN JC RET ;REL. TRUE, RETURN MOV BL,BH ;ELSE SET HL=0 RET XP15: CALL XP18 ;REL OP '=' JNZ RET ;FALSE, RETURN HL=0 MOV BL,AL ;ELSE SET HL=1 RET XP16: CALL XP18 ;REL.OP '<' JNC RET ;FALSE, RETURN HL=0 MOV BL,AL ;ELSE SET HL=1 RET XP17: POP BX ;NOT REL OP RET ;RETURN HL= XP18: MOV AL,CL ;SUBROUTINE FOR ALL POP BX ;REL.OP'S POP CX ;REL.OP'S PUSH BX ;REVERSE TOP OF STACK PUSH CX ;REVERSE TOP OF STACK MOV CL,AL CALL EXPR2 ;GET 2ND EXPRESSION XCHG DX,BX ;VALUE IN DE NOW POP AX PUSH BX MOV BX,AX ;LAST 3 INSTR FOR XTHL INST! CALL CKHLDE ;COMPARE 1ST WITH SECOND POP DX MOV BX,0 ;SET HL=0, A=1 MOV AL,1 ;SET HL=0, A=1 RET ; EXPR2: MOV AH,'-' CALL IGNBLNK ;NEGATIVE SIGN? JNZ XP21 MOV BX,0 ;YES, FAKE '0-' JP XP26 ;TREAT LIKE SUBTRACT XP21: MOV AH,'+' ;POSITIVE SIGN? CALL IGNBLNK XP22: CALL EXPR3 ;1ST XP23: MOV AH,'+' CALL IGNBLNK ;ADD? JNZ XP25 ;NOTE OFFSET WHAS 21 BYTES IN 8080 VERSION PUSH BX ;YES, SAVE VALUE CALL EXPR3 ;GET 2ND XP24: XCHG DX,BX ;2ND IN DE POP AX ;THIS + NEXT 2 LINES FOR 8080 XTHL INST!! PUSH BX MOV BX,AX ;BX <-> [SP] NOW, [SP]->BUFFER,BX=OLD EXPR3 ADD BX,DX POP DX JNO XP23 ;CHECK FOR OVERFLOW XP24A: JMP QHOW ;ELSE WE HAVE OVERFLOW XP25: MOV AH,'-' CALL IGNBLNK ;SUBTRACT? JNZ RET XP26: PUSH BX ;YES, SAVE 1ST CALL EXPR3 ;GET 2ND CALL CHGSGN JP XP24 ; EXPR3: CALL EXPR4 ;GET 1ST XP31: MOV AH,'*' CALL IGNBLNK ;MULTIPLY? JNZ XP34 PUSH BX ;YES, SAVE 1ST CALL EXPR4 ;AND GET 2ND XCHG DX,BX ;2ND IN DE NOW POP AX ;SUBSITUTE FOR 8080 XTHL PUSH BX IMUL AX,DX ;AX:=AX*DX JO XP32 ;SEE INTEL BOOK ON OVERFLOW FLAG MOV BX,AX ;RESULT NOW IN BX JP XP35 ;LOOK FOR MORE XP34: MOV AH,'/' CALL IGNBLNK ;DIVIDE? JNZ RET PUSH BX ;YES, SAVE 1ST CALL EXPR4 ;AND GET SECOND ONE XCHG DX,BX ;PUT 2ND IN DE POP AX ;REPLACEMENT FOR XTHL PUSH BX MOV BX,AX OR DX,DX JNZ XP34A ;SAY "HOW?" XP32: JMP AHOW XP34A: CALL DIVIDE ;USE SUBROUTINE MOV BX,CX ;GET RESULT MOV CX,6 ;SIX SPACES XP35: POP DX ;AND TEXT POINTER JP XP31 ;LOOK FOR MORE TERMS ; EXPR4: MOV BX,TAB4-1 ;FIND FUCNTION IN TAB4 JMP EXEC ;AND GOT DO IT XP40: CALL TSTV ;NO, NOT A FUNCTION JC XP41 ;NOR A VARIABLE MOV AL,[BX] ;VARIABLE LAHF INC BX SAHF MOV BH,[BX] ;VALUE IN HL MOV BL,AL ;VALUE IN HL RET XP41: CALL TSTNUM ;OR IS IT A NUMBER? MOV AL,CH ;# OF DIGITS OR AL,AL JNZ RET ;OK PARN: MOV AH,'(' CALL IGNBLNK ;NO DIGIT, MUST BE JNZ PARN1 CALL EXP ;"(EXPR)" PARN1: MOV AH,')' CALL IGNBLNK ;"(EXPR)" JNZ XP43 ;******WHY CHECK THIS?****** XP42: RET XP43: JMP QWHAT ;ELSE SAY: "WHAT?" ; RND: CALL PARN ;****RND(EXPR)**** OR BX,BX JNS RND1 ;MUST BE POSITIVE JNZ RND1 ;AND NON-ZERO JMP QHOW RND1: PUSH CX PUSH DX MOV AH,2CH ;GET TIME INT 33 ;ASK MS-DOS MOV AX,327 MOV DH,0 MUL AX,DX ; 0<=AX<=32700 XCHG DX,BX MOV BX,AX CALL DIVIDE ;RND(N)=MOD(M,N)+1 POP DX POP CX INC BX RET ; ABS: CALL PARN ;****ABS(EXPR)**** CALL CHKSGN ;CHECK SIGN OR AX,BX JNS RET ;OK JMP QHOW ;SO SAY: "HOW?" SIZE: MOV BX,[TXTUNF] ;****SIZE**** PUSH DX ;GET THE NUMBER OF FREE XCHG DX,BX ;BYTES BETWEEN 'TXTUNF' SIZEA: MOV BX,VARBGN ;AND 'VARBGN' SUB BX,DX POP DX RET ; ; ; ****OUT**** AND ****INP**** AND ****WAIT**** AND ; ****POKE**** AND ****PEEK**** AND ****USR**** ; ; ; 'OUT I,J(,K,L)' ; ; OUTPUTS EXPRESSION 'J' TO PORT 'I', AND MAY BE REPEATED AS ; IN DATA 'L' TO PORT 'K' AS MANY TIMES AS NEEDED. THIS COM- ; MAND MODIFIES *, A SMALL SECTION OF CODE ABOVE ADDRESS 2K. ; ; 'INP (I)' ; ; THIS FUNCTION RETURNDS DATA READ FROM INPUT PORT 'I' AS ; ITS VALUE. IT ALSO MODIFIES CODE JUST ABOVE 2K. ; ; 'WAIT I,J,K' ; ; THIS COMMAND READS THE STATUS OF PORT 'I', EXCLUSIVE OR'S ; THE RESULT WITH 'K', IF THE RESULT IS ONE, OR IF NOT WITH ; ZERO, AND'S WITH 'J' AND RETURNS WHEN THE RESULT IS NON- ; ZERO. ITS MODIFIED CODE IS ALSO ABOVE 2K. ; ; 'POKE I,J(,K,L) ; ; THIS COMMAND WORKS LIKE OUT EXCEPT THAT IT PUTS DATA 'J' ; INTO MEMORY LOCATION 'I'. ; ; 'PEEK (I)' ; ; THIS FUNCTION WORKS LIKE INP EXCEPT THAT IT PUTS DATA 'J' ; FROM MEMORY LOCATION 'I'. ; ; 'USR(I(,J))' ; ; USR CALL A MACHINE LANGUAGE SUBROUTINE AT LOCATION 'I' IF ; THE OPTIONAL PARAMETER 'J' IS USED ITS VALUE IS PASSED IN ; HL. THE VALUE OF THE FUNCTION SHOULD BE RETURNED IN HL. ; ; OUTCMD: CALL EXP MOV AL,BL MOV [OUTIO+1],AL MOV AH,',' CALL IGNBLNK JZ OUT1 ;FOUND MORE TO WORK ON JMP QWHAT OUT1: CALL EXP MOV AL,BL CALL OUTIO MOV AH,',' CALL IGNBLNK JNZ OUTCMD1 JP OUTCMD OUTCMD1:CALL FINISH WAITCM: CALL EXP MOV AL,BL MOV [WAITIO+1],AL MOV AH,',' CALL IGNBLNK JZ WT1 JMP QWHAT WT1: CALL EXP PUSH BX MOV AH,',' CALL IGNBLNK JNZ WAIT1 CALL EXP MOV AL,BL POP BX MOV BL,AL JP WAIT2 WAIT1: MOV BH,0 WAIT2: JMP WAITIO INP: CALL PARN MOV AL,BL MOV [INPIO+1],AL MOV BX,0 JMP INPIO JP QWT POKE: CALL EXP PUSH BX MOV AH,',' CALL IGNBLNK JZ POK1 JMP QWHAT POK1: CALL EXP MOV AL,BL POP BX MOV [BX],AL MOV AH,',' CALL IGNBLNK JNZ POK2 JP POKE POK2: CALL FINISH PEEK: CALL PARN MOV BL,[BX] MOV BH,0 RET JMP QWHAT USR: PUSH CX MOV AH,'(' CALL IGNBLNK JNZ QWT CALL EXP ;EXPR MOV AH,')' CALL IGNBLNK ;EXPR JNZ PASPRM PUSH DX MOV DX,USRET PUSH DX PUSH BX RET ;CALL USR ROUTINE PASPRM: MOV AH,',' CALL IGNBLNK JNZ USRET1 PUSH BX CALL EXP MOV AH,')' CALL IGNBLNK JNZ USRET1 POP CX PUSH DX MOV DX,USRET PUSH DX PUSH CX RET ;CALL USR ROUTINE USRET: POP DX USRET1: POP CX RET QWT: JMP QWHAT ; ; ; ****DIVIDE**** AND ****CHKSGN**** ; ****CHKSGN**** AND ****CKHLDE**** ; ; ; 'DIVIDE DIVIDES BX BY DX, RESULT IN CX, REMAINDER IN BX ; ; 'CHKSGN' CHECKS SIGN OF BX. IFF +, NO CHANGE. IFF -, CHANGE ; SIGN AND FLIP SIGN OF C ; ; 'CHGSGN' CHANGES SIGN OF BX AND CL UNCONDITIONALLY. ; ; 'CKHLDE' CHECK SIGN OF BX AND DX. IFF DIFFERENT, BX AND DX ; ARE INTERCHANGED. IFF SAME SIGN, NOT INTERCHANGED. EITHER ; CASE, BX AND DX ARE THEN COMPARED TO SET THE FLAGS. ; ; DIVIDE: PUSH DX ;PRESERVE DX ACCROSS CALL PUSH DX XOR DX,DX POP CX MOV AX,BX IDIV AX,CX MOV CX,AX ;QUOTIENT MOV BX,DX ;REMAINDER POP DX ;DX RESTORED RET ; CHKSGN: OR BX,BX ;SET FLAGS TO CHECK SIGN JNS RET ;IFF -, CHANGE SIGN ; CHGSGN: NOT BX ;****CHGSGN**** INC BX XOR CH,128 RET ; CKHLDE: MOV AL,BH XOR AL,DH ;SAME SIGN? JNS CK1 ;YES, COMPARE XCHG DX,BX CK1: CMP BX,DX RET ; ; ; ****SETVAL**** AND ****FIN**** AND ****ENDCHK**** ; ****ERROR**** AND FRIENDS ; ; ; 'SETVAL' EXPECTS A VARIABLE, FOLLOWED BY AN EQUAL SIGN AND ; THEN AN EXPR. IT EVALUATES THE EXPR AND SETS THE VARIABLE ; TO THAT VALUE. ; ; 'FIN' CHECKS THE END OF A COMMAND. IFF IT ENDED WITH ";" , ; EXECUTION CONTINUES. IFF IT ENDED WITH A CR, IT FINDS THE ; NEXT LINE AND CONTINUES FROM THERE. ; ; 'ENDCHK' CHECKS IFF A COMMAND IS ENDED WITH A CR, THIS IS ; REQUIRED IN CERTAIN COMMANDS. (GOTO, RETURN, AND STOP,ETC) ; ; 'ERROR' PRINTS THE STRING POINTED BY DX (AND ENDS WITH A ; CR). IT THEN PRINTS THE LINE POINTED BY 'CURRNT' WITH A ?. ; INSERTED AT WHERE THE OLD TEXT POINTER (SHOULD BE ON TOP ; OF THE STACK) POINTS TO. EXECUTION OF TB IS STOPPED AND ; TBI IS RESTARTED. HOWEVER, IFF 'CURRNT' -> ZERO (INDICAT - ; ING A DIRECT COMMAND), THE DIRECT COMMAND IS NOT PRINTED , ; AND IFF 'CURRNT' -> NEGATIVE # (INDICATING 'INPUT' COMMAND ; THE INPUT LINE IS NOT PRINTED AND EXECUTION IS NOT TERMIN- ; ATED BUR CONTINUED AT 'INPERR'). ; ; RELATED TO 'ERROR' ARE THE FOLLOWING: ; ; 'QWHAT' SAVES TEXT POINTER IN STACK AND GETS MESSAGE ; "WHAT?" ; 'AWHAT' JUST GETS MESSAGE "WHAT?" AND JUMPS TO ERROR ; ; 'QSORRY' AND 'ASORRY' DO THE SAME KIND OF THING. ; ; 'QHOW' AND 'AHOW' IN THE ZERO PAGE SECTION ALSO DO ; THIS. ; ; SETVAL: CALL TSTV ;SEE IT IT'S A VARIABLE JC QWHAT ;"WHAT" NO VARIABLE PUSH BX ;SAVE ADDR OF VARIABLE MOV AH,'=' CALL IGNBLNK JNZ SV1 CALL EXP MOV CX,BX ;VALUE IN CX NOW POP BX ;GET ADDR MOV [BX],CL ;SAVE VALUE INC BX MOV [BX],CH ;SAVE VALUE RET SV1: JMP QWHAT ;NO '=' SIGN ; FIN: MOV AH,';' CALL IGNBLNK JNZ FI1 POP AX JMP RUNSML FI1: MOV AH,0DH CALL IGNBLNK JNZ RET POP AX JMP RUNNXL ;RUN NEXT LINE FI2: RET ;ELSE RETURN TO CALLER ; ENDCHK: MOV AH,0DH ;END WITH CR? CALL IGNBLNK JZ RET ;OK, ELSE SAY "WHAT?" ; QWHAT: PUSH DX ;****QWHAT**** AWHAT: MOV DX,WHAT ;****AWHAT**** ERROR: SUB AL,AL ;****ERROR**** CALL PRTSTG ;PRINT 'WHAT?','HOW?' POP DX MOV SI,DX LODB PUSH AX ;SAVE THE CHARACTER SUB AL,AL ;AND PUT A ZERO THERE MOV DI,DX STOB MOV BX,[CURRNT] ;GET CURRENT LINE # CMP W,[CURRNT],0 ;DIRECT COMMAND? JNZ ERR1 ;IFF ZERO, JUST RESTART JP ERR2 ;SAVE A BYTE ERR1: MOV AL,[BX] ;IFF NEGATIVE, OR AL,AL JNS ERR1A JMP INPERR ;REDO INPUT ERR1A: CALL PRTLN ;ELSE PRINT THE LINE DEC DX POP AX MOV DI,DX STOB ;RESTORE THE CHAR MOV AL,63 ;PRINT A '?' CALL CHROUT SUB AL,AL ;AND THE REST OF THE CALL PRTSTG ;LINE ERR2: JMP RSTART QSORRY: PUSH DX ;****QSORRY**** ASORRY: MOV DX,SORRY ;****ASORRY**** JP ERROR ; ; ; ****GETLN**** AND ****FNDLN**** ; ; ; 'GETLN' READS AN INPUT LINE INTO 'BUFFER'. IT FIRST PROMPTS ; THE CHARACTER IN A (GIVEN BY THE CALLER), THEN IT FILLS THE ; BUFFER AND ECHOS IT. IT USES BDOS PRIMITIVES TO ACCOMPLISH ; THIS. ONCE A FULL LINE IS READ IN, 'GETLN' RETURNS. ; ; 'FNDLN' FINDS A LINE WITH A GIVEN LINE #(IN BX) IN THE TEXT ; SAVE AREA. DX IS USED AS THE TEXT POINTER. IFF THE LINE IS ; FOUND, DX WILL POINT TO THE BEGINNING OF THAT LINE IFF THAT ; LINE (I.E. THE LOW BYTE OF THE LINE #), AND FLAGS ARE NC&Z. ; IFF THAT LINE IS NOT THERE AND A LINE WITH A HIGHER LINE # ; IS FOUND, DX POINTS TO THERE AND FLAGS ARE NC&NZ. IFF WE ; REACHED THE END OF TEXT SAVE AREA AND CANNOT FIND THE LINE, ; FLAGS ARE C&NZ. ; 'FNDLN' WILL INITIALIZE DX TO THE BEGINNING OF THE TEXT ; SAVE AREA TO START THE SEARCH. SOME OTHER ENTRIES OF THIS ; ROUTINE WILL NOT INITIALIZE DX AND DO THE SEARCH. ; ; 'FNDLNP' WILL START WITH DX AND SEARCH FOR THE LINE #. ; ; 'FNDNXT' WILL BUMP DX BY 2, FIND A 0DH AND THEN START THE ; SEARCH. ; 'FNDSKP' USES DX TO FIND A CR, AND THEN STARTS THE SEARCH. ; ; ; GETLN: CALL CHROUT ;****GETLN**** GL1: MOV DX,BUFFER-2 PUSH DX MOV AH,BCONIN ;BUFFERED CONSOLE INPUT INT 33 ;CALL MS-DOS POP DX ADD DL,[BUFFER-1] INC DX INC DX INC DX MOV DI,DX ;FOR CONSISTANCY PUSH DX CALL CRLF ;NEED CRLF POP DX RET ;WE'VE GOT A LINE ; ; AT ENTRY BX -> LINE # TO BE FOUND ; FNDLN: OR BX,BX ;CHECK SIGN OF BX JNS FND1 ;IT CAN'T BE - JMP QHOW ;ERROR FND1: MOV DX,TXTBGN ; FNDLNP: FL1: PUSH BX ;SAVE LINE # MOV BX,[TXTUNF] ;CHECK IFF WE PASSED END DEC BX CMP BX,DX ;SUBSTITUTE FOR CALL 4 POP BX ;GET LINE # BACK JC RET ;C, NZ PASSED END MOV SI,DX LODW CMP AX,BX JC FL2 RET ;NC,Z:FOUND;NC,NZ:NOT FOUND ; FNDNXT: ;****FNDNXT**** INC DX FL2: INC DX ; FNDSKP: MOV SI,DX LODB ;****FNDSKP**** CMP AL,0DH ;TRY TO FIND CR JNZ FL2 ;KEEP LOOKING INC DX JP FL1 ;CHECK IFF END OF TEXT ; ; ; **** PRTSTG **** QTSTG **** PRTNUM **** PRTLN **** ; ; ; 'PRTSTG PRINTS A STRING POINTED TO BY DX. IT STOPS PRINTING ; AND RETURNS TO CALLER WHEN EITHER A 0DH IS PRINTED OR WHEN ; THE NEXT BYTE IS THE SAMES AS WHAT WAS IN A ( GIVEN BY THE ; CALLER). OLD AL IS STORED IN CH, OLD CH IS LOST. ; ; 'QTSTG' LOOKS FOR A BACK-SLASH, SINGLE QUOTE, OR DOUBLE ; QUOTE. IFF NONE OF THESE, RETURN TO CALLER. IF BACK SLASH \ ; OUTPUT A ODH WITHOUT A LF. IFF SINGLE OR DOUBLE QUOTE,PRINT ; THE STRING IN THE QUOTE AND DEMANDS A MATCHING UNQUOTE. AF- ; TER THE PRINTING THE NEXT 3 BYTES OF THE CALLER IS SKIPPED ; OVER (USUALLY A JMP INSTRUCTION). ; ; 'PRTNUM' PRINTS THE NUMBER IN HL. LEADING BLANKS ARE ADDED ; IFF NEEDED TO PAD THE NUMBER OF SPACES TO THE NUMBER IN C. ; NOWEVER, IFF THE NUMBER OF DIGITS IS LARGER THAN THE NUMBER ; IN C, ALL DIGITS ARE PRINTED ANYWAY. NEGATIVE SIGN IS ALSO ; PRINTED AND COUNTED IN, POSITIVE SIGN IS NOT. ; ; 'PRTLN' PRINTS A SAVED TEXT LINE WITH LINE # AND ALL. ; ; ; PRTSTG: MOV CH,AL ;****PRTSTG**** PS1: MOV SI,DX LODB ;GET A CHAR LAHF ;PRESERVE FLAGS INC DX SAHF ;RESTORE FLAGS CMP AL,CH ;SAME AS OLD A? JNZ PS2 ;YES, RETURN RET PS2: CALL CHROUT ;ELSE, PRINT IT CMP AL,0DH ;WAS IT A CR? JNZ PS1 ;NO, NEXT RET ; QTSTG: MOV AH,'"' CALL IGNBLNK JNZ QT3 MOV AL,34 ;IT IS A '"' QT1: CALL PRTSTG ;PRINT UNTIL ANOTHER CMP AL,0DH ;WAS LAST ONE A CR? POP BX ;RETURN ADDRESS JNZ QT2 ;WAS CR, RUN NEXT LINE JMP RUNNXL QT2: INC BX ;SKIPS TWO BYTES ON RETURN!!!! INC BX JMP BX ;JUMP TO ADDRESS IN BX QT3: MOV AH,39 ;IS IT A SINGLE QUOTE (')? CALL IGNBLNK JNZ QT4 MOV AL,39 ;YES, DO SAME JP QT1 ;AS IN ' " ' QT4: MOV AH,'\' CALL IGNBLNK ;IS IT BACK-SLASH?('\') JNZ QT5 MOV AL,141 ;YES, 0DH WITHOUT LF! CALL CHROUT ;DO IT TWICE CALL CHROUT ;TO GIVE TTY ENOUGH TIME POP BX ;RETURN ADDRESS JP QT2 QT5: RET ;NONE OF THE ABOVE ; ; ON ENTRY BX = BINARY #,CL = # SPACES ; PRTNUM: PUSH DX ;****PRTNUM**** MOV DX,10 ;DECIMAL PUSH DX ;SAVE AS A FLAG MOV CH,DH ;CH=SIGN DEC CL ;CL=SPACES CALL CHKSGN ;CHECK SIGN JNS PN1 ;NO SIGN MOV CH,45 ;CH=SIGN DEC CL ;'-' TAKES SPACE PN1: PUSH CX ;SAVE SIGN % SPACE PN2: CALL DIVIDE ;DIVIDE BX BY 10 (IN DX) OR CX,CX ;CX HAS QUOTIENT JZ PN3 ;YES, WE GOT ALL POP AX ;GET SIGN AND SPACE COUNT PUSH BX ;SAVE REMAINDER DEC AL ;DEC SPACE COUNT PUSH AX ;SAVE NEW SIGN AND SPACE COUNT MOV BX,CX ;MOVE RESULT TO BX JP PN2 ;AND DIVIDE BY 10 PN3: POP CX ;WE GOT ALL DIGITS IN PN4: DEC CL ;THE STACK MOV AL,CL ;LOOK AT SPACE COUNT OR AL,AL JS PN5 ;NO LEADING BLANKS MOV AL,32 ;LEADING BLANKS CALL CHROUT JP PN4 PN5: MOV AL,CH ;PRINT SIGN CALL CHROUT ;MAYBE, OR NULL MOV DL,BL ;LAST REMAINDER IN E PN6: MOV AL,DL ;CHECK DIGIT IN E CMP AL,10 ;10 IS FLAG FOR NO MORE POP DX JZ RET ;IFF SO, RETURN ADD AL,48 ;ELSE CONVERT TO ASCII CALL CHROUT ;AND PRINT THE DIGIT JP PN6 ;GO BACK FOR MORE ; PRTLN: MOV SI,DX LODW MOV BX,AX INC DX INC DX ;MOVE POINTER PRTLN1: MOV CL,5 ;PRINT 5 DIGIT LINE # CALL PRTNUM MOV AL,32 ;FOLLOWED BY A BLANK CALL CHROUT SUB AL,AL ;AND THEN THE TEXT CALL PRTSTG RET ; ; ; ; **** MVUP **** MVDOWN **** POPA **** PUSHA **** ; ; 'MVUP' MOVES A BLOCK UP FROM WHERE DX -> WHERE CX -> UNTIL ; DX = BX ; ; 'MVDOWN' MOVES A BLOCK DOWN FROM WHERE DX -> TO WHERE BX-> ; UNTIL DX = CX. ; ; 'POPA' RESTORES THE 'FOR' LOOP VAR SAVE AREA FROM THE STACK. ; ; 'PUSHA' STACKS THE 'FOR' LOOP VARIABLE SAVE AREA IN THE STACK ; ; MVUP: CMP DX,BX ;***MVUP*** JZ RET ;DE = HL, RETURN MOV SI,DX LODB ;GET ONE BYTE MOV DI,CX STOB ;MOVE IT INC DX INC CX JP MVUP ;UNTIL DONE ; MVDOWN: CMP DX,CX JZ RET ;YES, RETURN MD1: LAHF DEC DX DEC BX MOV SI,DX LODB ;BOTH POINTERS AND MOV [BX],AL ;THEN DO IT JP MVDOWN ;LOOP BACK ; POPA: POP CX ;CX = RETURN ADDR POP BX ;RESTORE LOPVAR, BUT MOV [LOPVAR],BX ;=0 MEANS NO MORE OR BX,BX JZ PP1 ;YES, GO RETURN POP BX ;NO, RESTORE OTHERS MOV [LOPINC],BX POP BX MOV [LOPLMT],BX POP BX MOV [LOPLN],BX POP BX MOV [LOPPT],BX PP1: PUSH CX ;CX = RETURN ADDR RET ; PUSHA: MOV BX,STKLMT ;****PUSHA**** CALL CHGSGN POP CX ;CX=RET ADDR ADD BX,SP JC PUSHB ;YES, SORRY FOR THAT. JMP QSORRY PUSHB: MOV BX,[LOPVAR] ;ELSE SAVE LOOP VARS OR BX,BX ;THAT WILL BE ALL JZ PU1 MOV BX,[LOPPT] ;ELSE, MORE TO SAVE PUSH BX MOV BX,[LOPLN] ;ELSE, MORE TO SAVE PUSH BX MOV BX,[LOPLMT] PUSH BX MOV BX,[LOPINC] PUSH BX MOV BX,[LOPVAR] PU1: PUSH BX PUSH CX ;CX = RETURN ADDR RET ; ; ; **** OUTC **** CHKIO **** ; ; ; THESE ARE THE ONLY I/O ROUTINES IN TBI. ; ; ; 'CHKIO' CHECKS THE INPUT, IFF NO INPUT, IT WILL RETURN TO THE ; CALLER WITH THE Z FLAG SET. IFF THERE IS INPUT, THE Z FLAG IS ; CLEARED AND THE INPUT BYRE IS IN A. HOWEVER, IFF THE INPUT IS ; A CONTROL-O, THE 'OCSW' IS COMPLIMENTED, AND THE Z FLAG IS RE- ; TURNED. IFF A CONTROL-C IS READ, 'CHKIO' WILL RESTART TBI AND ; DOES NOT RETURN TO THE CALLER. ; CRLF: MOV AL,0DH ;****CRLF**** CHROUT: CMP [OCSW],0 JZ COUT1 ;SEE IF OUTPUT REDIRECTED PUSH CX ;SAVE CX ON STACK PUSH DX ;AND DX PUSH BX ;AND BX TOO MOV [OUTCAR],AL ;SAVE CHATACTER MOV DL,AL ;PUT CHAR IN E FOR CP/M MOV AH,CONOUT ;CONSOLE OUTPUT INT 33 ;CALL MS-DOS AND OUTPUT CHAR MOV AL,[OUTCAR] ;GET CHAR. BACK CMP AL,0DH ;WAS IT A 'CR'? JNZ DONE ;NO,DONE MOV DL,0AH ;GET LINEFEED MOV AH,CONOUT ;CONSOLE OUTPUT AGAIN INT 33 ;CALL MS-DOS DONE: MOV AL,[OUTCAR] ;GET CHAR BACK IDONE: POP BX ;GET H BACK POP DX ;AND D POP CX ;THEN H RET ;DONE AT LAST COUT1: CMP B,AL,0 ;IS IT NULL? JZ RET ;SKIP IT STOB ;STORE AL (CHAR) IN BUFFER INC [BUFFER-1] ;INCREMENT COUNTER RET ;DONE CHKIO: PUSH CX ;SAVE B ON STACK PUSH DX ;AND D PUSH BX ;THEN H MOV AH,CONST ;GET CONSOLE STATUS WORD INT 33 ;CALL MS-DOS OR AL,AL ;SET FLAGS JNZ CI1 ;IF READY, GET CHAR JP IDONE ;RESTORE AND RETURN CI1: MOV AH,1 ;CALL THE BDOS INT 33 ;CALL MS-DOS CI2: CMP AL,18H ;IS TI CONTROL-X? JNZ IDONE ;RETURN AND RESTORE IF NOT JMP RSTART ;YES, RESTART TBI LSTROM: EQU $ ;ALL ABOVE CAN BE ROM OUTIO: OUTB 0FFH RET WAITIO: INB 0FFH XOR AL,BH AND AL,BL JZ WAITIO CALL FINISH INPIO: INB 0FFH MOV BL,AL RET ; ; ; IGNBLNK ; ; DEBLANKS WHERE DX-> ; IF (DX)=AH THEN DX:=DX+1 ; IGNBLNK:MOV SI,DX IGN1: LODB ;GET CHAR IN AL CMP AL,32 ;IGNORE BLANKS JNZ IGN2 ;IN TEXT (WHERE DX ->) INC DX JP IGN1 IGN2: CMP AL,AH ;IS SEARCH CHARACTER FOUND AT (DX)? JNZ RET ;NO, RETURN, POINTER (DX) STAYS LAHF ;SAVE RESULTS OF COMPARISON INC DX ;INC POINTER IF CHARACTER MATCHES SAHF ;RETURN RESULT OF COMPARISON TO FLAGS RET ; FINISH: POP AX CALL FIN ;CHECK END OF COMMAND JMP QWHAT ;PRINT "WHAT?" IFF WRONG ; OUTCAR: DB 0 ;OUTPUT CHAR STORAGE OCSW: DB 0FFH ;OUTPUT SWITCH CURRNT: DW 0 ;POINTS TO CURRENT LINE STKGOS: DW 0 ;SAVES SP IN 'GOSUB' VARNXT: DW 0 ;TEMP STORAGE STKINP: DW 0 ;SAVES SP IN 'INPUT' LOPVAR: DW 0 ;'FOR' LOOP SAVE AREA LOPINC: DW 0 ;INCREMENT LOPLMT: DW 0 ;LIMIT LOPLN: DW 0 ;LINE NUMBER LOPPT: DW 0 ;TEST POINTER RANPNT: DW 0 ;RANDOM NUMBER POINTER TXTUNF: DW TXTBGN ;-> UNFILLED TEXT AREA TXTBGN: DS 1 MSG1: DB '8086 TINY BASIC V1.1 27 JUNE 82',0DH ORG 2000H ;MISC STORAGE, INCLUDING STACK TXTEND: EQU $ ;TEST AREA SAVE AREA ENDS VARBGN: DS 54 ;VARIABLE @(0) DB 80 ;MAX CHARS IN BUFFER DB 0 ;CHAR COUNT BUFFER: DS 80 ;BUFFER MUST BE AFTER TEXT AREA BUFEND: EQU $ DS 400 ;EXTRA BYTES FOR STACK STKLMT: DS 100 ;TOP LIMIT FOR STACK STACK: EQU $ ;STACK STARTS HERE END åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå¼|"ŗ“ čćĘ6 €¼|"čļ ŗ *ĄčŠĒ| Ē„ Ē~ °>čuWŗ8 č‘“č" ŪYuéŸJJ‹Ć‹ś«QR‹Į+ĀPčkRuRčY‹ č/ ‹Ł‰ Y‹ XS<t–ƋŲŗ ;Śr鉐 Zč Z[č ė™“@čĒ ručHŪséYR‡Śč;Śséī» +ŚZĆ<rūB» “ĄŲĆ»Šļ“čŒ <0rń<:sķ°š"ĒužÅQ‹Ć¹ R÷į‹ŲZ‹ņ¬,0“ŲY¬ŸBžyŌRŗé`HOW? OK WHAT? SORRY LISŌEDIŌØÅØRUĪ7NE×+LOAÄmSAVÅÓBYÅNEXŌęLEŌåOUŌ=POKşWAIŌcIĘWGOTĻ[GOSUĀ-RETURĪVREĶRFOŅwINPUŌzPRINŌāSTOŠ1€ŽRNÄžINŠPEEĖĮUSŅĢABÓ"SIZÅ/€ŃTĻˆ€d STEŠ•€š>½ž£¾½$<½¼,€4»“čsR‹ņ¬B<.tCŠ'€ä:Ät€?€sCėųƒĆ€?€t KZėŌC€?€rśėNė€?€rĢCX‹Ö’'Ē ’ č)é׿č#ŗ’ »čŠséĘż‡Ś‰| ‡ŚBBčį»E鎒č–Rčūč^t阞XėŪ“čļSčĶRQŗ\“Ķ!<’ué{ž2Ą¢|ŗ’ R“Ķ!“ŗ\Ķ!<r*té^ž“ŗ\Ķ!]ķ¹Eƒ~ął‚łtā‰. YZ[č«Z»€Ś‡Śé»’> ’ u醋. ĒF“čuSčSRQŗ\“Ķ!ŗ\“Ķ!<’uéśż2Ą¢|ŗ’ R“Ķ!“ŗ\Ķ! ĄtéßżZ‹Ā; t s »€Ś‡ŚėŁ“ŗ\Ķ!YZ[č0»\ĘCĘ ød;ĆuõCĘTCĘBCĘICĘøk;Ćuõ»]‹ņ¬< tčüčXč­K‰„ »¾éażči‰ˆ »ÅéTżč\ė»‰† ‹| ‰Š ‡Ś‰Œ ¹ ‹„ ‡Ś‹ŁÜėŁ‹ Ąt;Āuō‡Ś»܋Ė» ŚčÉ‡ć‹Œ ‡Śčč¬ūsév‰€ R‡Ś‹„ ŠĒ Ćuéc;Ót ZčØ‹€ éį’ŠCŠ7‹† SŚ‡Ś‹„ ˆCˆ7‹ˆ X†ą Ąy‡ŚčēZr‹Š ‰| ‹Œ ‡Śč'čcč!»ė蚃ūtéšüč}réŽü锜‹‚ ‡ć[‰| ZZRčƒėčūrLėRč ūséŌ‹ņ¬ŠČ*Ą‹śŖZčNŠĮJ‹śŖR‡Ś‹| S»z‰| ‰&‚ R°:čėŗ8 č1Z‡Ś‰[‰| ZX“,čŠuėŸč•‹ņ¬< t čB“,čtuėōččZS»Īéėūč5rŠŲĆč-tśŠŲĆč%tśrųŠŲĆčŠŲtųröŠßĆčuśŠŲĆčsśŠŲĆ[ƊĮ[YSQŠČ臌XS‹ŲčÕZ»°Ć“-č u»ė(“+č’č)“+č÷uS臌XS‹ŲŚZqźéƒś“-čŽuĖSččŒėāč:“*čĖuSč/‡ŚXS÷źp‹Ųė “/č“u”S臌XS‹Ų ŅuéBśčB‹Ł¹ZėĘ»›éūčĮłr ŠŸCžŠ?ŠŲĆččłŠÅ Ąuö“(čsuč’“)čiuĆéfčč’ Ūyué÷łQR“,Ķ!øG¶÷ā‡Ś‹ŲčēZYCĆčÄ’čģ ĆyõéŅł‹ R‡Ś» +ŚZĆč“žŠĆ¢O “,čtéč¢žŠĆč÷“,čuėŻč莾ŠĆ¢R “,čńtéļč|žS“,čću čqžŠĆ[ŠŲė·éĀčW’ŠĆ¢] »éæėcčRžS“,č¹té·čDžŠĆ[ˆ“,č§uėįč²č%’Š·Ćé˜Q“(ču.čž“)č…uRŗ’RSĆ“,čwuSčž“)člu YRŗ’RQĆZYĆé_RR3ŅY‹Ć÷ł‹Č‹ŚZĆ Ūyū÷ÓC€õ€ĆŠĒ2Ęy‡Ś;ŚĆčhųr5S“=č,u čŗż‹Ė[ˆCˆ/Ćé“;čuXéś“ č uźXéįłĆ“ č’tųRŗ*ĄčZ‹ņ¬P*Ą‹śŖ‹| ƒ>| uėŠ ĄyéąüčļJX‹śŖ°?čk*ĄčMél÷RŗėĄčZŗ6 R“ Ķ!Z7 BBB‹śRčBZĆ Ūyé7ųŗ’ S‹ K;Ś[rź‹ņ­;ĆrĆBB‹ņ¬< uųBėįŠč‹ņ¬ŸBž:ÅuĆč < uīĆ“"č[u°"čß’< [ué(łCC’ć“'čCu°'ėę“\č8u °čÕčŅ[ėßĆRŗ RŠīžÉčŃžyµ-žÉQčøž Ét XSžČP‹ŁėšYžÉŠĮ Ąx° čėńŠÅ薊ӊĀ< Zt¾0čˆėņ‹ņ­‹ŲBB±謒° ču*ĄčW’Ć;Ótū‹ņ¬‹łŖBAėņ;ŃtķŸJK‹ņ¬ˆėņY[‰„ Ūt[‰† [‰ˆ [‰Š [‰Œ QĆ»"č@žYÜréĀž‹„ Ūt‹Œ S‹Š S‹ˆ S‹† S‹„ SQĆ° ƒ>{ t QRS¢z ŠŠ“Ķ! z < u² “Ķ! z [ZYĆ<tūŖ’7 ĆQRS“ Ķ! Ąuėå“Ķ!<uŻéĄõę’Ćä’2Ē"Ćtųčä’ŠŲƋņ¬< uBėų:ÄuńŸBžĆXčĻżéźż’’ 8086 TINY BASIC V1.1 27 JUNE 82 Pååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå 8086 TINY BASIC USER'S GUIDE INTRODUCTION The TINY BASIC language originated in the pages of Dr. DOBB'S JOURNAL and PEOPLE'S COMPUTER COMPANY in late 1975 and early 1976. Fed by the enthusiasm of early computer hobbyists and by the challenges and oportunities created by the early microcomputer chips, the idea of a tiny basic interpreter quickly gained popularity and acceptance. The language was a stripped down version of the ever-popular Dartmouth BASIC with the proviso that it be "useful" with a minimum of then very expensive memory. Additionally, TINY BASIC had to be ROMable since mass storage at that time consisted of reels of teletype punch paper tape, often punched at the unbearably slow rate of ten characters per second. The TINY BASIC language supports a very limited subset of the Dartmouth BASIC language. It does not compare at all with the large floating point BASIC's that have been released for almost all eight bit microcomputer chips. It does not support strings. Then, why 8086 TINY BASIC? Well, the size is still small (2700 bytes), it is efficient and easy to learn, and it is still ROMable. All of this implies that the language is still useful in at least two important applications: education and dedicated control. The present version of TINY BASIC is based on Li-Chen Wang's Palo Alto 8080 TINY BASIC as published in the May 1976 issue of DR. DOBB'S JOURNAL. Dr. Wang's version of TINY BASIC was chosen for its remarkable resiliance and simplicity. It has been optimized for the 8086 and it takes advantage of the hardware multiply and divide that the 8086 affords. Other enhancements include the use of the host operating system's line editing facilities and the LOAD and SAVE facilities, which, in the 8080 version, are due to unknown authors. The 8086 implementation is due to Michael E. Sullivan of Financial Software, 54 Grove Street, Haddonfield, NJ, 08033. THE LANGUAGE Numbers In TINY BASIC, all number are integers and must be within the range of -32767 .. 32767. 1 Variables There are 26 scalar variables donoted by the letters A through Z. The one array variable is denoted by '@(I)'. Its dimension is limited by the size of the TINY BASIC program. See the description of the SIZE function. Functions There are five functions in TINY BASIC. ABS(X) - Returns the absolute vaulue of the variable X. INP(X) - Returns data read from input port X. (0<=X<=255) PEEK(X)- Returns the contents of memory location X. (-32767<=X<=32767) RND(X) - Returns a random number between 1 and X (inclusive). SIZE - Returns the number of bytes left unused by the program. Arithmetic and Comparison Operators The following operators are supported: / - integer divide (fractional results not returned) * - integer multiply - - subtract + - add > - compare if greater than < - compare if less than = - compare if equal to NOTE: multiple assignment statements are not supported, i.e., "LET A=B=O" is interpreted by TINY BASIC as meaning "set A to the result of comparing B with O". # - compare if not equal to >= - compare if greater than or equal to <= - compare if less than or equal to The +,-,*, and / operations return a value within the range -32767 .. 32767. TINY BASIC works exclusively with decimal numbers. In order to represent the full range of numbers between 0 and 0FFFFH the 2 properties of two's complement arithemtic should be understood. For example, in order to PEEK at memory location 0FFFFH, the parameter -0 should be used as the PEEK function argument. Notice that the PEEK operation (as well as other address referenced operations) are all relative to the current data segment, which should be the same as the code segment. All compare operations result in a 1 if the comparison is true and a 0 if it is false. Expressions Expressions are formed with numbers, variables, and functions with arithmetic and compare operators between them. + and - signs can also be used at the beginning of an expression. The value of an expression is evaluated from left to right, except that the * and / operators are always given precedence, with + and -, and then the compare operators following, in that order. Parentheses can be used to alter the order of evaluation in the standard algabraic sense. Statements A TINY BASIC statement consists of a statement number between 1 and 32767 followed by one or more commands (see Commands below). Commands in the same statement are seperated by a semi-colon ";".If the "GOTO", "STOP", and "RETURN" commands are used then they must be the last command in that statement. Program A TINY BASIC program consists of one or more statements. When the direct command (see Direct Commands below) "RUN" is issued, the statement with the lowest statement number is executed first, then the one with the next lowest statement number, etc. The "GOTO", "GOSUB", "STOP", and "RETURN" commands can alter this normal sequence. Within any statement the execution takes place from left to right. The "IF" command can cause remaining commands within the same statement to be skipped. Abbreviations and Blanks TINY BASIC statements and commands may use blanks freely, except that numbers, command key words, and function names may not have embedded blanks. All TINY BASIC command key words and function names may be abbreviated by following the abbreviation with a period. For example, "PR.", "PRI.", and "PRIN." all stand for "PRINT". The word "LET" in the LET command may be ommited. 3 Editor TINY BASIC contains a useful text editor for entering and correcting TINY BASIC programs. All of the line editing features of the host operating system are used. In order to correct an existing TINY BASIC statement, that statement must be re-entered. Statements may be deleted by simply typing their statement number, followed by a CR. Corrections may be verified by typing LIST nnnn and striking the control-X key to terminate the LIST process. ERROR MESSAGES There are only three error messages in TINY BASIC. When an error is encountered the error message itself is printed, followed by the statement causing the program error with a "?" inserted at the point where the error is detected. Control is then passed to the TINY BASIC monitor. A synopsis of the three error conditions follow. -- WHAT? WHAT? 210 P?TINT "THIS" WHAT? indicates that TINY BASIC did not understand the statement or command. In the example above, the command PRINT was mistyped on statement number 210. -- HOW? HOW? 260 LET A=32000+5000? HOW? indicates that TINY BASIC understands but cannot execute the statement or command. In the example above, the sum of the numbers exceeds 32767. -- SORRY SORRY SORRY indicates that TINY BASIC understand but cannot execute the statement or command due to insufficient memory. One cure is to rephrase the TINY BASIC program in acceptable abbreviations. 4 STATEMENT COMMANDS TINY BASIC statement commands are listed below with examples. Remember that commands can be concatenated with semi-colons. In order to store any given statement, you must precede that statement with a statement number between 1 and 32767. Statement numbers are NOT shown in the examples. LET command LET A=234-5*6;A=A/2;X=A-100;@(X+9)=A-1 The LET command assigns the value of an expression to the specified variable. In the example above, the variable "A" assumes the value of the expression "234-5*6", or "204". Then the variable "A" assumes the value "102". Next, the variable "X" is set to the value of the expression "A-100", or "2". The last command assigns the value "101" to the array variable "@(11)". The "LET" portion of the LET command is optional, i.e., the following examples are true: A=10 C=5*3/5;C=C*5 REM Command REM ANYTHING CAN BE WRITTEN AFTER "REM" The REM command is ignored by TINY BASIC. It is used by experienced programmers to comment BASIC programs. A program comment is used by programmers to remind themselves of the logic of a program section. All good programs are invariably commented. PRINT Command PRINT PRINT will cause a carriage-return (CR) and a line-feed (LF) on the output device. PRINT A*3+1,"ABC" This form of the PRINT command will print the value of the expression A*3+1 on the output device, followed by the string ABC on the same line. Note that single (') or double quotes (") may be used to denote character strings, but that pairs must be mached. PRINT A*3+1,"ABC", This form of the PRINT command will produce the same results as the previous example except that the normal CR-LF is inhibited by the trailing comma at the end of the statement. This allows other PRINT 5 commands to print on the same line. PRINT A,B,#3,C,D,E,#10,F,G This form of the PRINT command demonstrates format control. The format character # is used to indicate the number of leading spaces to be printed before a number. The default number is 6. Once the # format is invoked it is active for the remainder of the statement unless overridden by a subsequent format specifier, as in the example. PRINT 'ABC',\,'XXX' The back-slash (\) character is used to cause a CR without a LF. In this example, the string ABC is printed followed by the string XXX on top of the original ABC. INPUT Command INPUT A,B The INPUT statement is used to acquire input data during program execution. In the example above, TINY BASIC will print A: and wait for a number to be typed at the console terminal. Next, TINY BASIC will print B: and wait for another number to be typed at the console terminal. In this example the variables A and B will assume the values of the appropiate input values. The INPUT statement will accept expressions as well as numbers as input. INPUT 'WHAT IS THE WEIGHT'A,"AND SIZE"B In this example TINY BASIC will print the string WHAT IS THE WEIGHT: and wait for operator input. Next, the string AND SIZE: will be printed, on the same line, and TINY BASIC will wait for operator input. INPUT A,'STRING',\,"ANOTHER STRING",B TINY BASIC will react to the back-slash character (\) in this example in the same fashion as in the PRINT command. The second string will overwrite the first string STRING. IF Command IF A' prompt). All statement commands (those listed above) can be invoked while in command mode. Typing a control-C while in command or monitor mode will cause TINY BASIC to terminate. Control is then passed to the host operating system monitor. Recall that a statment consists of a statement number followed by one or more commands. If the statement number is missing, or if it is 0, the command will be executed immediatly after typing the 9 terminating CR. The following commands can be used as direct commands; they CANNOT be used as part of a TINY BASIC statement. RUN Command RUN The RUN command causes execution of the stored TINY BASIC program. Execution will commence at the lowest numbered statement and continue until there are either no more statements to execute or a STOP command is found. A long TINY BASIC program may be terminated by typing control-X at the console. This passes control the the TINY BASIC monitor. A control-C may be typed at any time also, then TINY BASIC is terminated and control is passed to the host operating system. LIST Command LIST The LIST command is used to display the current TINY BASIC program on the operator's console. The statements will be listed in numerical order. If LIST is followed by an expression (e.g. LIST 200) the listing will commence with statements following the specified statement, inclusive. NEW Command NEW The NEW command deletes the current program from TINY BASIC's memory. SAVE Command SAVE FILENAME The SAVE command saves the current TINY BASIC program on the logged in disk with the specified filename FILENAME. The default filetype is ".TBI". If there is insufficient room on the disk, the SAVE command responds with "HOW?". LOAD Command LOAD FILENAME The LOAD command loads the specified TINY BASIC program from the logged in disk into the program area. Any program residing within TINY BASIC prior to the LOAD operation is lost. If the specified program is not found on the disk, or if there is insufficient room for the 10 program, LOAD responds with "HOW?". The filetype is assumed to be ".TBI". BYE Command BYE The BYE command terminates TINY BASIC. Control is passed back to the host operating system. TINY BASIC OPERATION TINY BASIC is initiated from the host operating system's command mode like any other transient command. TINY BASIC will sign-on, announce 'OK', and then prompt '>' awaiting operator interaction. An example follows: A:TBASIC 8086 TINY BASIC V1.0 OK > In the example above the program 'TBASIC.COM' was found on the logged-in disk ('A' in the example). TINY BASIC then commenced execution by first announcing itself and then prompting '>' for operator input. TINY BASIC utilizes all of the host operating system's line editing facilities. For example, if an operator wished to cancel a line typed to TINY BASIC, he need only type a control-X, etc. If hard copy of a TINY BASIC session is desired, control-P and control-N will toggle the printer, if it exists. At present, saved TINY BASIC programs can be edited only with the internal TINY BASIC editor. Programs prepared by an external editor can not be read by TINY BASIC. 11 supported: / - iåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå. ŠÉ S.. ŠÉ STMXM2 COM ĖŠS € TMXM2 DOC ĪŠS €TMXM2 HEX ŅŠS “J»Ž ¹ÓėĶ!s “ ŗ\Ķ!øLĶ!¼ “ ŗxĶ!śSø 5Ķ!‰6Œ8[ŗzø %Ķ!ūčģčč7 ; ĄtčEĶ čjč¹ėųFailed To Allocate Memory $Portfolio Terminal version 2 F1=Quit, F2=Receive, F3=Send. SHIFT=Text $čv“Ķt÷“Ķ Ątƀü;t*€üĶ!Ķ RWP‹>4ŗ×ģØ tūXŗ×ī_ZĆPVRW3ĄŽŲ‹>‰>4č+č³čøø čfŗ×°īč‹×ģ_Z^XĆŗ.4°īĆŗ.4°īĆPRWŗ.4ģ.‹>] .ˆ.’] _ZXĻPSRčŃ’Ž8‹6ø %Ķ!°HčZ[XĆPSQRP±žĮ€ł tøŠłĶaś€uģXŠŲŠłŗ€øĶaė±žĮ€ł tøŠłĶaƒśuķėŁXŗ€īZY[XĆP±ŅčtŠČµÓéė¹‹4ƒĀ°€ī‹4ŠĮīBŠÅīX$‹4ƒĀīĆPSQR>] ]uZY[XƋ5 Ūt!“@ŗ]¹Ķ!s“>‹5 Ķ!“ ŗa Ķ!Ē5 čŲŠŠ“Ķ!ėæPSQRW»€“ŠŲCĘ»€<tKCčS€?-uBCŠ¢; CčDæć ŠˆCG Ąuö»ć Š Ąt" ; : véŒŗlč©r×<uėy<t<uéŗ7č’rį<uģėg»_ ŗ¶č€r®ˆCūā rļ»a ¹€čC:į u– _ 87 uöŠ:` u…°čbżž7 Ę: ².“Ķ!“@‹3 ŗa ¹€Ķ!r =€uéy’°č5ż“>‹3 Ķ!“ ŗa Ķ!čō_ZY[XĆPSQRW“ ŗP Ķ!čœ=u鹋Óø=Ķ!sé£3 Ę7 Ę: ¹„æ_ °üóŖ“?‹3 ¹€ŗb Ķ!séÆ=u駠7 ¢` öŠ¢a Ę_ »b ¹€čm¢ā ŗ"ėež7 Ę: ².“Ķ!¹„æ_ °üóŖ“?‹3 ¹€ŗb Ķ!rY=tT 7 ¢` öŠ¢a Ę_ »b ¹€č¢ā ž: €>: wH»_ ¹„čōŗlč&rä<t“<tÜ<uļŗ7črē<ućėž: €>: w°č üŗlčórč<uä“>‹3 Ķ!“ ŗa Ķ!č¾_ZY[XĆPSQR‹5 Ūt“>Ķ!“ ŗa Ķ!Ē5 ė“ ŗ< Ķ!čK=t¹‹Ó“<Ķ!r£5 ZY[XĆPSQR“ ŗP Ķ!č%=t9¹‹Óø=Ķ!r-£3 “?‹3 ¹€ŗ_ Ķ!r=t ‹Č»_ ččŠüėŽ“>‹3 Ķ!“ ŗa Ķ!č ZY[XĆPSQŠCčAūāųY[XĆQS°Cāū[YĆP“Ķt=;u“Ķ°čūčūčūXĆSR“Ķt=;t“Ķė°ųė2‹Ś“Ķ‰8 >] ]u“Ķt=;tŻ“Ķ+8 ;Ó~įłėčųZ[ĆRWø>] ]t æ]Šŗč_ZĆQRVW¹]Ź;] v‹] ź]śü‹] é]+Ź¾]ņæ]ó¤)] ū_^ZYĆR»ć “Ķtś“Ķ Ątņ<t< t&ˆCŠŠ“Ķ!ė߁ūć tŁK²“Ķ!² “Ķ!²“Ķ!ėIJ “Ķ!² “Ķ!Ę‹Ć»ć +ĆZĆSQR“=¹ŗh Ķ!rK‹ŲøB¹ŗÖĶ!r<=Öu7“?ŗć ¹Ķ!r+=u&“>Ķ! ć ±ŅąŠä ±Ņć Ɗę ±Ņć Ć å ė“>Ķ!°ƒZY[Ć] File to receive? $ File to send? $Done $C:\SYSTEM\PERMDATA.DATååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååTMXM2.COM - The second generation Terminal with XModem and Text File Transfer for the Atari/DIP Portfolio. by Jim Straus November 24, 1989 (c) 1989 by Jim Straus All rights reserved Certain portions of the code are (c) 1989 by Atari and DIP. If you are using this program and you find it to be of value, your contribution ($20 suggested) will be appreciated. Jim Straus 3826 Mumford Place Palo Alto, CA 94306 You are encouraged to copy and share this program and docu- mentation with other users, on the condition that they are not distributed in modified or incomplete form, that no fee or consideration is charged and that this notice is not bypassed or removed. No warranty is given or implied for this programming system. In no event shall the author of this work be liable for any direct, indirect, special, incidental, or consequential damages (including lost profit) whether based on warranty, contract, tort, or any other legal theory. Whew! This program will only work on the Atari/DIP Portfolio PalmTop computer. It is a simple terminal program for the Serial Interface. It allows files to be sent or received using the XModem protocol. It also allows files to be sent with no translation and files to be captured. To use the program, select serial port parameters from the built-in Setup program. The Initialize! command does not need to be given as the program will attempt to initialize the serial port itself. You may also want to set the External Display to Tracked (80x25). Then start the program by typing TMXM at the DIP-DOS prompt. You will see a greeting, and anything you type is sent out the serial port. F1 may be used to exit the program (Note that the Atari key also generates an F1 key code). During the session, F2 may be used to start receiving a file using the XModem protocol. You will be prompted for a file name, and then the program will wait for the file to be transferred. Each block successfully received will cause a period to be displayed. When the file is done, "Done" will be displayed and you will be back in the terminal portion. While the program is transferring, the F1 key may be used to abort the transfer. Sending a file is started with the F3 key and proceeds in a similar fashion. If the file was not found, you will just see "Done" displayed. Note that XModem always transfers files in 128 byte blocks, so files will tend to be rounded up to the nearest 128 byte length. When receiving text files, you may also see extra space on the end, depending on whether or not the sending end put in a Control-Z terminating character. TMXM does not put in such characters and just pads with zeros. The XModem time out values in this program have not been tested with a packet network (such as that used by Compuserve), but have been adjusted to Compuserve's suggested values. Capturing text is controlled with the SHIFT-F2 key. The first time it is pressed, you will be prompted for a file name. From then on anything received is also saved in the file. To stop capturing, use the SHIFT-F2 key again. It will tell you it is "Done". Text may be captured through XModem transfers and text sending, but only received text that is displayed will be saved in the capture file. SHIFT-F3 is used to send a text file. It prompts for a file name and the file is sent. When the file is done, you will again see "Done". As an experimental feature, TMXM2 will also take command line options. The two forms are: TMXM2 -r filename TMXM2 -s filename The -r option will enter the XModem receive state, and when it is done receiving the file, the program will exit. The -s option enters the XModem send state. The reason for putting these in, was to try and come up with a semi-automatic method to back up the Portfolio through the serial port. In my case, to a Macintosh running the Red Ryder (tm of FreeSoft Inc.) terminal program. On the Portfolio I have a BACKUP.BAT file that looks like: echo RECX filename.txt>aux tmxm2 -s filename.txt with the above lines repeated for each file to be backed up. Red Ryder is left in HOST mode, so the above sequence should automatically send FILENAME.TXT to the Macintosh. A similar process is used to restore the files: echo SENDX filename.txt>aux tmxm2 -r filename.txt The above sequences have not been thoroughly tested. There may still be some timing problems in them (I occasionally hang restoring. It can be alleviated by stopping the transfer on the Macintosh and sending two Control-Xs to cancel that file). This is not considered a final solution, but I thought people might be interested. Others might want to try build scripts to drive other host machine terminal programs too. The length of the file is 2431 bytes and the checksum (as determined by CHKSUM.COM) is FC6D. ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååB44ABB8E0CB90400D3EBCD21730CB409BA5C01CD21B8004CCD21BC7F0CB409BA7801CD21FA5306B80C35CD21891E36038C063803075BBA7A02B80C25CD21FBE8EC00E81D01E83702A03B0A0AC07405E84501CD20E86A00E8B900EBF84661696C656420546F20416C6C6F63617465204D656D6F72790D0A24506F7274666F6C696F205465726D696E616C2076657273696F6E20320D0A46313D517569742C2046323D526563656976652C2046333D53656E642E2053484946543D546578740D0A24E87601B401CD1674F7B400CD160AC07401C380FC3B742A80FC3C741180FC3D741180FC55741180FC567411EBD3E80C02EBCEE80003EBC9E83104EBC4E86E04EBBFE892008B1E350A0BDB7404B43ECD21CD205257508B3E3403BA050003D7ECA82074FB58BA000003D7EE5F5AC35056525733C01E8ED88B3E00041F893E3403E82B00E8B305E8B800B80C00E86600BA040003D7B003EEE808008BD7EC5F5A5E58C3BA01002E03163403B001EEC3BA01002E03163403B000EEC3505257BA00002E03163403EC2E8B3E5D092E88052EFF065D095F5A58CF505352E8D1FF1E8E1E38038B163603B80C25CD211FB048E804005A5B58C35053515250B103FEC180F90B741DB8011C8AF9CD6181FA7F8075EC588AD88AF9BA7F80B8001CCD61EB1D90B103FEC180F90B740EB8011C8AF9CD6183FA0075EDEBD958BA7F80EE5A595B58C350B105D2E874088AC8B506D3E9EB03B917048B16340383C203B080EE8B1634038AC1EE428AC5EE58241F8B16340383C203EEC300000000000050535152813E5D095D0875055A595B58C38B1E350A0BDB7421B440BA5D08B90100CD217315B43E8B1E350ACD21B409BA610ACD21C706350A0000E8D8038AD0B402CD21EBBF5053515257BB8000B4008A0703D843C60700BB80003C00744B43E85300803F2D7542438A07A23B0A43E84400BFE3098A07880543470AC075F6BBE3098A070AC07422A03B0A3C72740F3C52740B3C7374103C53740CEB0D90BA2400E82403EB3590E92A01C6063B0A00905F5A595B58C3803F007408803F20770343EBF3C35053515257B409BA3C0ACD21E895033D00007503E9D200B900008BD3B43CCD217303E9C400A3330AC606370A0190C6063A0A0090BA1200E8CA0272063C18741DEBF2B015E8CFFDFE063A0A803E3A0A0A7603E98C00BA6C01E8A90272D73C047503EB79903C0174133C1875E9BA3700E8920272E13C1875ECEB6790BB5F09BAB600E8800272AE88074381FBE20972EFBB6109B98000E843023A06E1097596A05F093806370A758DF6D03A0660097585B006E862FDFE06370AC6063A0A0090B22EB406CD21B4408B1E330ABA6109B98000CD21720D3D80007508E979FFB006E835FDB43E8B1E330ACD21B409BA610ACD21E8F4015F5A595B58C35053515257B409BA500ACD21E89C023D00007503E90F01B900008BD3B8003DCD217303E90001A3330AC606370A0190C6063A0A0090B98400BF5F09B000FCF3AAB43F8B1E330AB98000BA6209CD217303E9AF003D00007503E9A700A0370AA26009F6D0A26109C6065F090190BB6209B98000E86D01A2E209BA2202EB6590FE06370AC6063A0A0090B22EB406CD21B98400BF5F09B000FCF3AAB43F8B1E330AB98000BA6209CD2172593D00007454A0370AA26009F6D0A26109C6065F090190BB6209B98000E81A01A2E209FE063A0A803E3A0A0A7748BB5F09B98400E8F400BA6C01E8260172E43C0674933C1574DC3C1875EFBA3700E8120172E73C1875E3EB1D90FE063A0A803E3A0A0A7711B004E80BFCBA6C01E8F30072E83C0675E4B43E8B1E330ACD21B409BA610ACD21E8BE005F5A595B58C3505351528B1E350A0BDB7414B43ECD21B409BA610ACD21C706350A0000EB1E90B409BA3C0ACD21E84B013D0000740EB900008BD3B43CCD217203A3350A5A595B58C350535152B409BA500ACD21E825013D00007439B900008BD3B8003DCD21722DA3330AB43F8B1E330AB98000BA5F09CD2172123D0000740D8BC8BB5F09E81C00E88AFCEBDEB43E8B1E330ACD21B409BA610ACD21E820005A595B58C35053518A0743E841FBE2F8595B58C35153B000020743E2FB5B59C350B401CD1674143D003B750FB400CD16B018E81AFBE817FBE814FB58C35352B401CD1674123D003B7407B400CD16EB0790B018F8EB32908BDAB400CD1A8916380A813E5D095D08751BB401CD1674053D003B74DDB400CD1A2B16380A3BD37EE1F9EB0590E80400F85A5BC35257B80000813E5D095D08740BBF5D088A05BA0100E803005F5AC351525657B95D0803CA3B0E5D0976088B165D0981EA5D08FAFC8B0E5D0981E95D082BCABE5D0803F2BF5D08F3A429165D09FB5F5E5A59C352BBE309B401CD1674FAB400CD160AC074F23C08740F3C0D74268807438AD0B402CD21EBDF81FBE30974D94BB208B402CD21B220B402CD21B208B402CD21EBC4B20DB402CD21B20AB402CD21C607008BC3BBE3092BC35AC3535152B43DB90000BA680ACD21724B8BD8B80042B90000BAD602CD21723C3DD6027537B43FBAE309B90400CD21722B3D04007526B43ECD21A0E309B105D2E08A1EE409B103D2E30AC38A1EE609B102D2E30AC30A06E509EB0790B43ECD21B0835A595BC3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0A46696C6520746F20726563656976653F20240D0A46696C6520746F2073656E643F2024446F6E650D0A24433A5C53595354454D5C5045524D444154412E44415400. ŠÖ S.. ŠÖ SREADME TXT ŲŠS ×UPDATE COM ŪŠS € UPDATE.COM This is the latest update (version 1.07) for the Atari Portfolio Size is 1664 bytes, checksum is 55fa. Included are all the bug fixes in previous UPDATE.COM versions and it is compatible with earlier versions of the system. Fixes include: 1. Copy CON: 10 character limit. 2. Printers losing or replacing characters: 3. No power down while executing a .RUN: 4. Card removal while executing a .RUN: 5. The byte at 0:8030 being lost on power down: 6. "Space-Return" bug in the editor which is apparent only in versions 1.070 of the system and above. 7. Alarm divide by zero. 8. Int 24 C0 mapped out. 9. DOS error on drve B: 10. Print screen. 11. Diary alarm problems. 12. Empty text file. The latest available UPDT107.COM should be invoked from the user's AUTOEXEC.BAT. Atari assumes no responsibility for the incorrect usage of system software or any damages which are the result of that usage. åååååååååååååååååååååååååååååååååååååååååéŲSUaDIP DS.’.----éb----é~----é----é€----é²----é½----éå----éč----é----éŸ----éŁ----éõ----éH----é±----éĆ äuQ¹PR“œ.’öĀZXuāķYœ.’Ļč.’.č.’.$€ü-uč.’.+S3ŪŽŪ»0€Š.ˆŅ[Ć4PSR3ŪŽŪ»0€. ŅˆZ[XĖU‹ģ€~ ?u½æĘF’]ĻPSR3ĄŽŲ»%ö`t»(Š$ļŗP€īŒŠ=@ė@Z[Xt.’.9Ļœ.’@č Ļœ.’GčĻPSR3ĄŽŲ»%ŗQ€ģö@uö t  ī»(ŠŗP€$ļī īZ[XĆūPøŽŲ€>uėdĘSQR2’“ĶQR3Ņ“ĶŠĢ€üPtµėµč@“Ķ“Ķ< s° R3Ņ2äĶZžĀ:Ń|äč!žĘ2Ņ:õ|Ł2Ąė°’¢Z“ĶY“ĶZY[XĻR3Ņ° 2äĶ° 2äĶZĆĻ€ü&t.’.Uœ.’UPSQV&‹Dč &‰D&‰\^Y[XĻŒĆ+Ć=’vø’-» +Ų±ÓąĆPŒŠ=@tX.’.\R6 (ŗP€$ļī īZXĻP3ĄŽĄŒČ&>­u&9t&‡.£]ø­&‡.£[Xœ.’cP3ĄŽĄ.”[&£.”]&£XĻR™2ķ÷ń‹ĀŠąZĻ€ü?t.’.jœ.’jsŹPSQRVWUø²’Ķ`<]_^ZY[Xu>;Įt:łu Ąu @S‹ŚĘ[ė&S‹ŚŲƒė=r? uHė=r K? u-[ųŹR3Ņø$ĶaRœ.’qZPø$ĶaXZĻU‹ģ~’u ~ĻuĘF œ.’x]Ź  $\. !.$(.„/$Ø6T= D$K$R8„YT`8(g8„nBu$L|č™téÄčŸčŌséÅčhthø 2ŅĶa3öŽŽĒx€ĒJP3Ū¹Sæū.‹;čs.‹u.‹U‹Śƒėč©.ž€[rIƒĆāցż.s»Õ.‹Óø2Ķa.ž€.€€u°éę3öŽŽ¾æ„„čł½č‡°éĶƒé÷Łć#3ĄŽĄæƒėū.‹;čs ‹u‹}ƒīčPāć½čQ°é“č£uƒī č7ø ²Ķa3ĄŽĄ»Z¹ƒėSæū.‹;čs.‹}&Å5».”9uLƒīčž.ž€[āŠ.€u2Ąė<ĒÓŒŪŽĆ“PĶ!“IĶ!r ”,ŽĄ“IĶ!œ[“PĶ!r ½čĘ°ė ½č»°“LĶ!ŗź±Óź“1Ķ!”3’ŽĒæ„&Å59DņĆ¾„»ŗč_Ćæš’ŽĒæī&=PCĆ“,ĶaŒŽƒž@u¾ąŽŽ‹ó³ 2ö3ķ¬<.tū<$tŠŠ€ź0‹ÅöćĀ‹čėč.‰.~Ć¾€¬ Ąt F¬ć3ÉĶ3Ņ.‰įĆčžž †<t “Ķ3Ą£įė€&ążĆ€ąĆčy’*įžĄ˜‹Č‹ćø ĶĆ’÷’ł€’’pų赞¾…‹ČŠć¬<v!<v1<%r(<(r)äĶ.‰įX< u2ŅėU< učżė4<u ŅtDžŹė@<u 2’øĶė8č—’.”ÜžĀ:Šv&.öątŠŠė2ŅžĘ:ōvŠōR‹Šø.Š>ć3ÉĶZ.‰įėz.€ąé‹.€>„u<[tét’<"u.€6ą.öąu3Wüæå¹ņ®_u".Š„2’Ć„.ĘG» +ŁŃć.’—*ė.€>„Ąs/.ž„.Š„2’Ć„.ˆė.Ę„.€&ąž“.Š>ä.‹įĶZYĆV‹Lć Åt¬čŹžāś3Ąėø€^ ‰DĆPSč³ž[XĻøĆ.Ę„.€&ąžøĆ(C) DIPVWøšŽĄæę’¾¹¹üó¦_^ĆABCDHfsuJKhlmpååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååėŒČŽŠ¼h ŽŲøw ±Óč‹Ų“JĶ!čČ“LĶ!»‘f0123456789:);<=>,?%/č’t°ėe¾#č$æ"č;¾+æzøčøÉPø+PčrƒÄ=t =t°ė1øĖPøzPčVƒÄ Ą~ź É<rć<wß»ĶžČ׊Š‹Ėć“Ķa2ĄĆ° čÄ° čæø‹6čĶ‹šč‘°’é«žĆ(C) DIPVWøšŽĄæę’¾t¹üó¦_^ĆU‹ģƒģŠŠ2ö‰vž‰~üü¾¬ ĄtM< t÷< tó‹ŽK¬ Ąt< t< uó öt€ž6öĀt1‹~üėöĀt'‹~žN‹Ī+ĖƒłO|¹NV‹óó¤^2ĄŖžĘė®°ŠĪŅą„Šu ø€čŪéE’ŠĘ˜‹å]Ć.‰6čZ’t. ėø(ĶaŠĘ¢5Ćü3ŅW2Ą¹’’ņ®÷щ4_¾€Š2’Fʬ Ątl /? from 1 (low) to 25 (high) is multiple of 10 ms(c) DIP, 19895­Switch not understood: ĮNombre d'arguments incorrectTapez une touche quand prˆt ...ŻśActiver la sonnerie Syntaxe: BEEP /? de 1 (bas) … 25 (haut) est multiple de 10 ms Option non valable: •Falsche ParameteranzahlWenn bereit, beliebige Taste drcken®ĘAktiviert der Summer Syntax: BEEP /? ist 1 (min) bis 25 (hoch) ist mehrfach von 10 msńOption nicht gltig: jU‹ģVW‹v3Ū3Ņ3’Š2ķSRQč?YZ[ Ąt-SRQč2YZ[ Ątƒé0° ÷ār‹ŠŃrC2ķŠGė܋v‰‹Ēė3Ąėø’’_^]ĆU‹ģø€~0r €~9wø]Ć t.€> t.€> t€ütEė.€üt.€ütW€ü t9€ü t"€üt €üt!€üt€üt=žžt.’.éģéˆé¢é¹éŹéĻé<.:>uŽƒłuŁW.Ä>üŖ_Ļ.:>uÅPQRW.ƒ.Ä> &ž&9t‹Ā&‰‹ČŠÄ.ö&2ķŃįĮ.£.‹Ńé“.‹ŠÄīBŠÅīJŠÄžĄīBŠĮī_ZYXĻél’.:>uöƒłuńPWŠć.Ä>ü«_XĻ.:>uŁW.Ä> &‹.‹_ĻP.¢2äŃąP.£ Xé!’.‰é’.¢ .Ēé ’.:>u•< r..>žs%PQRW.Ä>üŖ.Ä> &‹žĀ€śOwé’²žĘé’œ.’PS.Ä &‹‹ŲŠÄ.ö&2’ŃćĆ.£[XĻŒČŽŲŽĄø%ÅĶ!“IĶ!»,.Ž“IĶ!é“ Ķ!Ļ ZENO Removed $Ē°Ē“Ķ%0=0t ĒøĒŌ¾€.Š Ąt%<u.|/kt.|/KuøžžĶĶ ’“ Ķ!Ķ Ä> &ŠEI¢ &‹E`£&ŠEb¢2äŃąP£ Œø5Ķ!‰Œø%Ķ!Ā“ Ķ!>°tä“ Ķ!ü“ Ķ!ś/±Óč‹Ų‹Š“JĶ!ø1Ķ! ZENO 1.3 successfully Installed$; May cause some snow.$ $ No Action: Invalid Command Line $åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååAuthor's Documentation: ZENO.COM: M. Lazarus, June 11, 1986 ZENO is a small, fast, core-resident program that speeds up certain screen writes. The actual increase in speed is almost three-fold, but the increase you see on the screen depends on the application program in use. An example: with BCOMM operating at 9600 bps, the increase is approximately 20-30 percent. Only certain programs take advantage of ZENO; but those that don't (including PC-Write) are usually fast enough without it. ZENO reduces available memory by about 900 bytes. ZENO operates with all screens. On some color screens, however, it may cause snow -- harmless but annoying. If that happens, remove ZENO with the instructions below. Important: Do not change back and forth between monochrome and color displays while ZENO is installed. Users of monochrome graphics boards: this includes you. To load: At the DOS prompt, type ZENO. A message will appear. To remove: At the DOS prompt, type ZENO/K (use no spaces; must be capital K). A message will appear. Important: First remove all core-resident programs loaded after ZENO. Additional Comments: (1) ZENO, like many other fast screen programs, eliminates the wait for the retrace. But ZENO also trys to speed up the BIOS routines in other ways as well. For details, see the ASM listing. Roughly speaking, ZENO assumes that the underlying program is trying to use the BIOS call in the most likely manner; it tests for that, and if the assumption is right, uses a faster method. If ZENO's assumptions are wrong, the test of the assumption slows down ZENO's performance in comparison to a program that only eliminates the retrace delay. Therefore, if the underlying program's use of INT 10 is extremely unusual, there may well be faster screen speedup programs faster than ZENO. But that is likely to be true only of very rare programs. (2) TEST.COM does nothing but a series of BIOS screen writes, counting timer interrupts. It then writes out the number of timer interrupts that have elapsed. Useful for comparing fast screen programs, although, obviously, it does not test them under all conditions. (3) Comments and suggestions are best addressed to me, David Seidman, on Bob Blacher's bulletin board, 202-547-2008. CHANGES by Ron Tansky: Fixes: ZENO would hang the computer if 40-character mode was used. I modified the program to bypass the speed-up in 40-character mode. I also modified the program to accept /k or /K on the command line to kill ZENO. Also changed message to say 'may cause snow', as the other message ('may cause interference') really worried some users. Second set of changes by Ron Tansky: The first set of changes fixed the hang if 40-character mode turned on, but I later discovered that the ZENO speed-improvement was permanently turned off afterwards ('til next boot). I also found out that the same was true for graphics mode with the original ZENO; i.e. if you ever go into graphics mode, ZENO won't come back to speed afterwards. This set of changes fixes both of these problems. ZENO goes to sleep during modes that it can't handle, but wakes back up and again speeds up 'normal' screen output. I put a version number into the startup message (version 1.1), so that you can recognize this latest fix. P.S. I've tried to send the changed ZENO back to David Seidman, on Bob Blacher's bulletin board, 202-547-2008. I've never been able to get anything but a busy signal. If anyone knows another way to get these fixes back to the original author, we'd both appreciate it. Changes by Chris Blum - CompuServe 76625,1041 1/28/87 Added code to support TTY mode output ( AH = 0EH ). Needed because some clone BIOSs ( mine is DTK/ERSO ), do not update cursor position through BIOS call in this mode. Without the changes, ZENO loses its place in the display memory and the display goes out to lunch with some BIOS configurations. I tried to follow the technique and spirit of the existing code as much as possible. Updated version number ( now 1.2 ). Changes by Lynn Ransdell 5/29/87 As written, ZENO versions 1.1 & 1.2 worked with all my software except KEDIT 3.51 (Mansfield Software Group, Storrs, CT). I managed to circumvent the problem by changing the values loaded/tested in the AX register. Former values were 00F0h,,, replacement values were FEFEh. I made the assumption that KEDIT was sending the former values (for reasons unknown to me) and that ZENO was misinterpreting them as its signal to KILL itself. I further assumed that the AX values might have been arrbitrarily chosen, and thus could be arbitrarily changed. So far, this has proven (with the software that I use) to be satis- factory, but may conflict with someone else's software. I have labeled this version as 1.3 in order to distinguish it from the prior versions. I have not seen any other versions later that ver. 1.2. The program, ZENOTEST.COM, is included in the archive for comparing screen I/O speed before/after installing ZENO. It is also useful for benchmarking different "ansi"-type video drivers. The best combo I've found is NANSI286.SYS with ZENO13. åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååø5Ķ!‰Œø%ŖĶ!Ēø3ÉŗO·Ķʐ3Ņ‰2’“ĶŠ€ć±Ņć€Ć¾æOø* 2’¹Ķž‹2’“ĶOuåžĘ‹2’“ĶNuĖžuØø%ÅĶ!”ŗ>č“ Ķ!Ķ .’.’.PSQ ¹Ę   Ņy÷ŚĘ 0;rƒĆā÷÷ŁƒĮ+Ńv‡ŹP  üóŖX‹Ź ÉuĘE’0ėƒė3Ņ÷70Ŗ‹ĀāńY[XĆ dč'$$$$$$$$$$åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååø €€žĄ‹Ųøˆ“=ŗ‚°Ķ!£”“<ŗœ¹Ķ!£–“?‹”¹ŗ˜Ķ!r©’’t»˜č$¢›“@‹–¹ŗ›Ķ!ėŅ“>‹”Ķ!“>‹–Ķ!ĆøQPŠ,0x< v,<w¹ŠČXѹѹѹѹĮCėÜXYĆRESULT.OUT@echo off beep 22 10 beep 19 10 beep 13 80 beep 22 10 beep 19 10 beep 12 80 beep 22 10 beep 19 10 beep 11 80 beep 10 10 beep 11 10 beep 19 30 beep 19 30 beep 22 20 beep 25 29 beep 19 30 beep 19 30 beep 17 20 beep 18 20 beep 8 10 beep 5 10 beep 18 80 beep 8 10 beep 5 10 beep 17 80 beep 8 10 beep 5 10 beep 15 80 beep 14 10 beep 13 10 beep 14 10 beep 11 10 beep 5 80 beep 14 10 beep 11 10 beep 4 80 beep 14 10 beep 11 10 beep 3 80 beep 1 10 beep 3 10 beep 8 10 beep 5 10 beep 18 80 beep 8 10 beep 5 10 beep 17 80 beep 8 10 beep 5 10 beep 15 80 beep 14 10 beep 13 10 beep 7 30 beep 9 20 beep 11 20 beep 7 20 beep 17 20 beep 19 100 echo This will self destruct in 10 seconds Portfolio Utilityååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå This is one of many Public Domain and Shareware disks available from: Public Domain Corporation (PDC) 4320 - 196th SW, Suite 140 Lynnwood, WA 98036 (800) 255-8220 for orders (206) 745-5980 for Customer Service If you have problems/questions in regards to our products, just call our Customer Service number. ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå 12 - 1 - 89 Errors in the cable diagram of the manual for the serial port are shown corrected below. Portfolio serial cable for Modem . Signal DB9 line DB25 line . CD 1 ------- 8 * RD 2 ------- 3 * TD 3 ------- 2 . DTR 4 ------- 20 . GND 5 ------- 7 . DSR 6 ------- 6 . RTS 7 ------- 4 . CTS 8 ------- 5 . RI 9 ------- 22 Portfolio Serial Cable for IBM PC/XT . Signal DB9 line DB25 line . CD 1 NC 1 NC * RD 2 ------- 2 * TD 3 ------- 3 . DTR -- 4 4 -- | | . GND | 5 -- 5 -- | \ . DSR -- 6 \ 6 -- \ | * RTS -- 7 -- 7 | | | * CTS -- 8 8 -- | . RI 9 NC 20 --  THE PORTFOLIO CONNECTION: The Software ACKNOWLEGEMENT: The following programs have been thoughtfully provided by Mr. Jim Strauss and uploaded to the major computer services as ShareWare. Thanks Jim; check's in the mail. //////////PART ONE: THE PROBLEM So, you are the proud new owner of the latest Atari _wunderkind_ PORTFOLIO. You're going to use it as your portable terminal... work on that major report during lunch, or figure out why the heck the Widgies Division has lost money for the fourth straight quarter while stuck in traffic... so you decide to get the RS232 Serial Interface... you really don't need the Parallel Interface because all the printers you have at work and home use the serial interface. You get the machine home, break out the docs,... and find out that the Serial Interface has _NO_ software for file transfer, and worse, the file transfer program in the SETUP section uses... the parallel interface? Someone seemed to be unclear on the concept out there in Atariland... //////////PART TWO: THE SOLUTION No, don't send nasty mail to the Mayor of Atariland... he never reads the stuff anyway. For those of you with 8-bit Ataris (the vererable 800, 800XL, or the XE machines), I've left another file in the 8-bit section of this service; to access it, just go to the File Transfer option of the 8-bit section and use the keywords MIO, 850, or PORTFOLIO; this little file details how to make a null modem cable for the 8-bit computers to "talk" with the PORTFOLIO. Other computer users may find this file useful, as it has the pinouts and correct wire connections for the PFSI (Portfolio Serial Interface); just adapt the 850 end for your own make of computer (IBMers, all you guys need is a regular AT null modem cable with a DB25-DB9 adaptor). THAT was the easy part; getting software in to the PF through the PFSI is the REAL bear. So be warned: this project requires a great deal of patience... a GREAT deal of patience. Those who fish as a hobby will feel right at home with this project; those with CLASS A-1 volcanic tempers with nanosecond attention levels had better skip this project altogether and pick up the Parallel Interface. For those of you still with us... into the abyss. //////////PART THREE: SOFTWARE NEEDED You will need the following software, available on this or any major computer service or User Group. A. A terminal software program for your "host" computer that allows text file transfers without CRC or return checksum bytes from the receiving computer. 8-bitters; EXPRESS or BOBTERM work equally well for this. B. CHKSUM.COM: a program for the PF that gives you a checksum of the bytes from a PF program. THIS PROGRAM IS NECESSARY FOR THE RETENTION OF YOUR SANITY. C. HEXBIN.COM: a program that converts hexadecimal text into binary bytes - REQUIRED. D. TXMM2.HEX: a PF terminal ShareWare program supporting Xmodem and Text Transfers, written in hexadecimal text. NOTE: DO NOT D/L TXMM2.COM unless you are going to D/L the program into your PF via a Parallel Interface (PFPI); the reasons are given in the text below. NOTE: Be sure to capture the description header for these programs, as these headers provide the CHKSUM number for each program. 1. Enter the CHKSUM.COM program into the PF: A. Type COPY AUX CHKSUM.COM into the PF. DO _NOT_ PRESS ! B. Set your Host computer to Send Text. NOTE: Do not set your terminal program for ASCII translation. Use the setting for communication between two "like" computer types; IBM-IBM, C64-C64, MAC-MAC. Otherwise the file will be corrupted (and the last thing we need around here is a corrupt file). C. Press on your PF before your host computer starts sending the file. D. After the file has been sent, press ^Z (Ctrl and Z together) on the PF, signalling the end of a file. This oddball transmission procedure is necessary because the TXMM2 program (in binary format) contains several ^Z bytes... which will cut your PF file copy procedure short (NOTE FOR THE NON-IBMers: ^Z is the IBM standard for closing a batch file using the COPY CON command. See what you learn on these files?) 2. Check the checksum for the CHKSUM program by typing CHKSUM CHKSUM.COM If the computer locks up, use the WARMSTART procedure (Ctrl-Alt-Del); if it does not reboot, then use the RESET switch on the bottom of the PF, DEL CHKSUM.COM, and go back to Step 1. If you get a number that does not jibe with the number given in the header description, you have two options; use the program, or DEL it and go back to Step 1. The former is considerably riskier, though. 3. Now that you have a working CHKSUM program, perform Steps 1 & 2 with the HEXBIN.COM program. 4. By now you should have two working programs; CHKSUM.COM and HEXBIN.COM. Perform Steps 1 & 2 again with the TXMM2.HEX program. 5. Type the command: HEXBIN TXMM2.HEX into the Portfolio. If the PF locks up, (that is, if you cannot type on the PF after about 10 minutes), reboot and DEL the TXMM2.HEX program as outlined in Step 2 and go back to Step 4. 6. If the PF has not locked up, you should see the c> prompt. Type the command HEXBIN RESULT.OUT into the Portfolio. If the checksum is that of TXMM2.COM, then type REN RESULT.OUT TXMM2.COM and congratulate yourself; you now have a palmtop terminal with Xmodem and Text Capture capabilities! //////////PART FOUR: Conclusion Congratulations; you have performed a task that would have driven the ancient philosophers nuts. Go have a nice warm bath, pamper yourself... you deserve it. After you have finished pampering yourself, make sure you copy all three .COM programs to your RAM card (save for it if you don't have one; it's as important as your host's floppy disks and a heck of a lot sturdier). You can DELete the TXMM2.HEX program from the PF c> drive. NOTE: make a back-up copy of the programs CHKSUM.COM, HEXBIN.COM, and TXMM2.HEX on your host computer's floppy disks; you never know when your PF may have a memory lapse or when a miscreant program may write over your PF programs, or when you may pass through a memory-scrambling EMI field (like a university experiment or when your 5-year-old decides to use the Bulk Tape Eraser on "daddy's new toy". With this new program, you can successfully U/L or D/L between your computers using Xmodem instead of T/E (Trial & Error). NEXT ISSUE: How I Broke Into NORAD Using My Portfolio; or, Tales From Folsom Prison. //////////APPENDIX: CHKSUM VALUES The following are the CHKSUM values for the three .COM programs: CHKSUM.COM 309A HEXBIN.COM 4080 TXMM2.COM FC6D ENDIT “J»Ō ¹ÓėĶ!s “ ŗ\Ķ!øLĶ!¼Å “ ŗxĶ!śSø 5Ķ!‰cŒe[ŗ§ø %Ķ!ūččJčd  ĄtčrĶ ččęėųFailed To Allocate Memory $XTerm 1.0 (c) 1989 Jim Straus F1=Quit F2=Receive F3=Send SHIFT+ F1=Help F2=Capture F3=Text Send $耓Ķt÷“Ķ Ątƀü;t4€üĶ!Ķ RWP‹>aŗ×ģØ tūXŗ×ī_ZĆPVRW3ĄŽŲ‹>‰>ač+čččøø čfŗ×°īč‹×ģ_Z^XĆŗ.a°īĆŗ.a°īĆPRWŗ.aģ.‹>æ .ˆ.’æ _ZXĻPSRčŃ’Že‹cø %Ķ!°HčZ[XĆPSQRP±žĮ€ł tøŠłĶaś€uģXŠŲŠłŗ€øĶaė±žĮ€ł tøŠłĶaƒśuķėŁXŗ€īZY[XĆP±ŅčtŠČµÓéė¹‹aƒĀ°€ī‹aŠĮīBŠÅīX$‹aƒĀīĆPSQR>æ æuZY[XƋ— Ūt!“@ŗæ¹Ķ!s“>‹— Ķ!“ ŗĆ Ķ!Ē— č ŠŠ“Ķ!ėæPSQRW»€“ŠŲCĘ»€<tYCča€?-uPCŠ¢ CčRæE ŠˆCG Ąuö  œ véŒŗlčŠr×<uėy<t<uéŗ7č¹rį<uģėg»Į ŗ¶č§r®ˆCūD rļ»Ć ¹€čj:C u– Į 8™ uöŠ:Ā u…°čTżž™ Ęœ ².“Ķ!“@‹• ŗĆ ¹€Ķ!r =€uéy’°č'ż“>‹• Ķ!“ ŗĆ Ķ!č_ZY[XĆPSQRW“ ŗ² Ķ!čĆ=u鹋Óø=Ķ!s飕 Ę™ Ęœ ¹„æĮ °üóŖ“?‹• ¹€ŗÄ Ķ!séÆ=u駠™ ¢Ā öŠ¢Ć ĘĮ »Ä ¹€č”¢D ŗ"ėež™ Ęœ ².“Ķ!¹„æĮ °üóŖ“?‹• ¹€ŗÄ Ķ!rY=tT ™ ¢Ā öŠ¢Ć ĘĮ »Ä ¹€čA¢D žœ €>œ wH»Į ¹„čŗlčMrä<t“<tÜ<uļŗ7č9rē<ućėžœ €>œ w°čżūŗlčrč<uä“>‹• Ķ!“ ŗĆ Ķ!čå_ZY[XĆPSQR‹— Ūt“>Ķ!“ ŗĆ Ķ!Ē— ė“ ŗž Ķ!čr=t¹‹Ó“<Ķ!r£— ZY[XĆPSQR“ ŗ² Ķ!čL=t9¹‹Óø=Ķ!r-£• “?‹• ¹€ŗĮ Ķ!r=t ‹Č»Į čCč|üėŽ“>‹• Ķ!“ ŗĆ Ķ!čGZY[XĆPR“ ŗĀ Ķ!“ ŗxĶ!“ ŗ, Ķ!ZXĆ“ ŗį Ķ!_ZY[XĆPSQŠCč ūāųY[XĆQS°Cāū[YĆP“Ķt=;u“Ķ°čåśčāśčßśXĆSR“Ķt=;t“Ķė°ųė2‹Ś“Ķ‰š >æ æu“Ķt=;tŻ“Ķ+š ;Ó~įłėčųZ[ĆRWø>æ æt ææŠŗč_ZĆQRVW¹æŹ;æ v‹æ źæśü‹æ éæ+Ź¾æņææó¤)æ ū_^ZYĆR»E “Ķtś“Ķ Ątņ<t< t&ˆCŠŠ“Ķ!ė߁ūE tŁK²“Ķ!² “Ķ!²“Ķ!ėIJ “Ķ!² “Ķ!Ę‹Ć»E +ĆZĆSQR“=¹ŗŹ Ķ!rK‹ŲøB¹ŗÖĶ!r<=Öu7“?ŗE ¹Ķ!r+=u&“>Ķ! E ±ŅąŠF ±Ņć ƊH ±Ņć Ć G ė“>Ķ!°ƒZY[Ćæ File to receive? $ File to send? $Done $C:\SYSTEM\PERMDATA.DATCommand line: -r XModem Receive -s XModem Send$Copyright 1989 by Jim Straus Portions copyright by DIP & Atari Corp. Program in public domain. Not for sale Use "-h" on the command line for help. $öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö