home *** CD-ROM | disk | FTP | other *** search
- little red reader vERSION 1.00 [mARCH 7, 1993]
-
- ms-dos FILE READER/WRITER FOR THE c128 AND 1571/81.
-
- BY cRAIG bRUCE (CSBRUCE@NEUMANN.UWATERLOO.CA)
-
- 1. introduction
-
- tHIS ARTICLE PRESENTS A PROGRAM THAT READS AND WRITES ms-dos FILES AND THE
- ROOT DIRECTORY OF ms-dos DISKS. tHE PROGRAM COPIES ONLY FROM DRIVE TO DRIVE
- WITHOUT BUFFERING FILE DATA INTERNALLY. tHIS IS SIMPLER AND IMPOSES NO LIMITS
- ON THE SIZE OF THE FILES TRANSFERRED, ALTHOUGH IT REQUIRES THE USE OF TWO DISK
- DRIVES (OR A LOGICAL DRIVE). tHE USER-INTERFACE CODE IS WRITTEN IN basic AND
- PRESENTS A FULL-SCREEN FILE SELECTION MENU. tHE GRUNT-WORK CODE IS WRITTEN IN
- ASSEMBLY LANGUAGE AND OPERATES AT MAXIMUM VELOSITY.
-
- tHE PROGRAM ALSO ALLOWS ms-dos FILES TO BE DELETED AND TO ALLOWS THE COPYING OF
- cOMMODORE-dos FILES BETWEEN cbm-dos DISKS (THIS MAKES IT MORE CONVENIENT TO
- USE THE PROGRAM WITH A TEMPORARY LOGICAL DRIVE LIKE ramdos). aLSO, SINCE i
- HAVE RECENTLY ACQUIRED A cmd fd-4000 FLOPPY DISK DRIVE, i KNOW THAT THIS
- PROGRAM WORKS WITH ms-dos DISKS WITH THIS DRIVE (BUT ONLY FOR THE 720k
- FORMAT).
-
- tHE bURST cOMMAND iNSTRUCTION sET OF THE 1571/81 IS USED TO READ THE ms-dos
- DISK BLOCKS AND THE STANDARD KERNEL ROUTINES ARE USED FOR OUTPUTTING THE
- DATA. (i AM AN OPERATING SYSTEMS SPECIALIST, SO i CALL IT A KERNeL!) tHUS,
- THE ms-dos FILES MUST BE READ FROM A 1571 OR 1581 DISK DRIVE, BUT THE OUTPUT
- DEVICE MAY BE ANY DISK DRIVE TYPE, THE SCREEN OR A PRINTER, OR A VIRTUAL DRIVE
- TYPE SUCH AS ramlINK, ramdRIVE, OR ramdos (FOR THE reu). iT IS INTERESTING TO
- NOTE THAT THE DATA CAN BE READ IN FROM AN ms-dos DISK FASTER THAN IT CAN BE
- WRITTEN OUT TO A 1571, 1581, OR EVEN A ramdos FILE. a ramlINK CAN SWALLOW THE
- DATA ONLY SLIGHTLY FASTER THAN IT CAN BE READ.
-
- lITTLE rED rEADER (lrr) SUPPORTS DOUBLE DENSITY 3.5" DISKS FORMATTED WITH 80
- TRACKS, 9 SECTORS PER TRACK, AND 2 SIDES WITH A 1581 AND 5.25" DOUBLE DENSITY
- DISKS FORMATTED WITH 40 TRACKS, 9 SECTORS PER TRACK, AND 2 SIDES WITH A 1571.
- a LIMIT OF 128 DIRECTORY ENTRIES AND 3 fILE aLLOCATION tABLE (fat) SECTORS IS
- IMPOSED. tHERE MUST BE 2 COPIES OF THE fat AND THE CLUSTER SIZE MAY BE 1 OR 2
- SECTORS. tHE SECTOR SIZE MUST BE 512 BYTES.
-
- tHE PROGRAM RUNS ON EITHER THE 40 OR 80-COLUMN SCREENS, BUT YOU WILL GET
- MUCH BETTER PERFORMANCE FROM THE basic PORTION OF THE PROGRAM BY BEING
- IN 80-COLUMN MODE AND fast MODE. a MODIFICATION THAT SOMEONE MIGHT WANT
- TO MAKE WOULD BE TO SPREAD-OUT THE DISPLAY FOR THE 80-COLUMN SCREEN AND ADD
- COLOR TO THE RATHER BLAND DISPLAY.
-
- oH, ABOUT THE NAME. iT IS A PLAY ON THE NAME OF ANOTHER ms-dos FILE COPIER
- AVAILABLE FOR THE c-128. "lITTLE" MEANS THAT IT IS SMALLER IN SCOPE THAN THE
- OTHER PROGRAM, AND "rED" IS A DIFFERENT PRIMARY COLOR TO AVOID ANY LEGAL
- COMPLICATIONS. iT IS ALSO THE NON-WHITE COLOR OF THE FLAG OF THE COUNTRY OF
- ORIGIN OF THIS PROGRAM (NO, i AM NOT jAPANESE). aLSO, THIS PROGRAM IS pUBLIC
- dOMAIN sOFTWARE, AS IS ALL SOFTWARE i DEVELOP FOR 8-BIT cOMMODORE cOMPUTERS.
- fEEL FREE TO e-MAIL ME IF YOU HAVE QUESTIONS OR COMMENTS ABOUT THIS ARTICLE.
-
- 2. user guide
-
- load AND run THE "LRR.128" basic PROGRAM FILE. wHEN THE PROGRAM IS FIRST RUN,
- IT WILL DISPLAY AN "INITIALIZING" MESSAGE AND WILL LOAD IN THE BINARY MACHINE
- LANGUAGE PACKAGE FROM THE "CURRENT" cOMMODORE dos DRIVE (THE CURRENT DRIVE IS
- OBTAINED FROM peek(186) - THE LAST DEVICE ACCESSED). tHE BINARY PACKAGE IS
- LOADED ONLY ON THE FIRST RUN AND IS NOT RELOADED ON SUBSEQUENT RUNS IF THE
- PACKAGE id FIELD IS IN PLACE.
-
- tHE SYSTEM IS DESIGNED TO HAVE TWO FILE SELECTION MENUS: ONE FOR THE ms-dos
- DISK DRIVE, AND ONE FOR THE cOMMODORE-dos DISK DRIVE (WHICH MAY BE A LOGICAL
- DISK DRIVE). tHE IDEA FOR COPYING IS THAT YOU SELECT THE FILES IN ONE OF
- THESE MENUS, AND THEN PROGRAM KNOWS TO COPY THEM TO THE DISK FOR THE OTHER
- MENU.
-
- 2.1. ms-dos menu
-
- tHE MAIN SCREEN OF THE PROGRAM IS THEN DISPLAYED. tHE MAIN SCREEN OF THE
- PROGRAM WILL LOOK SOMETHING LIKE THIS:
-
- ms-dev=9 ms-type=1581 cbm-dev=8
-
- num s trn typ filename ext length
- --- - --- --- -------- --- ------
- 1 * asc seq hack4 txt 120732
- 2 bin prg ramdos sfx 34923
-
- d=directory m=ms-dev f=cbm-dev q=quit
- t=toggle-column, c=copy-files, +/- page
-
- EXCEPT THAT IMMEDIATELY AFTER STARTING UP, "<DIRECTORY NOT LOADED>" WILL BE
- DISPLAYED RATHER THAN FILENAMES. tHE "ms-dev" AND "ms-type" FIELDS GIVE THE
- DEVICE NUMBER AND TYPE OF THE DRIVE CONTAINING THE ms-dos DISK TO COPY FROM,
- AND THE "cbm-dev" GIVES THE DEVICE NUMBER OF THE DRIVE/VIRTUAL DRIVE/CHARACTER
- DEVICE TO COPY FILE DATA TO. tHE NUMBER OF BYTES FREE ON THE DRIVE ARE ALSO
- DISPLAYED (WHICH IS USEFUL TO KNOW WHEN WRITING FILES) AND THERE ARE SOME MORE
- COMMANDS.
-
- iNFORMATION ABOUT ALL ms-dos FILES IN THE ROOT DIRECTORY OF THE ms-dos DISK IS
- DISPLAYED IN COLUMNS BELOW THE DRIVE INFORMATION. "num" GIVES THE NUMBER OF
- THE ms-dos FILE IN THE DIRECTORY LISTING, AND "s" INDICATES WHETHER THE FILE
- IS "SELECTED" OR NOT. iF THE FILE IS SELECTED, AN ASTERISK (*) IS DISPLAYED;
- OTHERWISE, A BLANK IS DISPLAYED. wHEN YOU LATER ENTER cOPY mODE, ONLY THE
- FILES THAT HAVE BEEN "SELECTED" ARE COPIED.
-
- tHE "trn" FIELD INDICATES THE CHARACTER TRANSLATION SCHEME TO BE USED WHEN THE
- FILE IS COPIED. a VALUE OF "bin" (BINARY) MEANS NO TRANSLATION AND A VALUE OF
- "asc" (ASCII) MEANS THE FILE CHARACTERS ARE TO BE TRANSLATED FROM ms-dos ascii
- (OR "ascii-cRlF") TO petscii. tHE "typ" FIELD INDICATES THE TYPE OF
- cOMMODORE-dos FILE TO CREATE FOR WRITING THE ms-dos FILE CONTENTS INTO. tHE
- POSSIBLE VALUES ARE "seq" (SEQUENTIAL) AND "prg" (PROGRAM). tHE VALUES OF THE
- trn AND typ FILEDS ARE SET INDEPENDENTLY, SO YOU CAN COPY BINARY DATA TO seq
- FILES AND ASCII DATA TO prg FILES IF YOU WISH.
-
- tHE "filename" AND "ext" FIELDS GIVE THE FILENAME AND EXTENSION TYPE OF THE
- ms-dos FILES AND "length" GIVES THE EXACT LENGTH OF THE FILES IN BYTES. nOTE
- THAT IF YOU PERFORM "asc" TRANSLATION ON A FILE, ITS petscii VERSION WILL HAVE
- A SHORTER LENGTH.
-
- 2.2. user commands
-
- tHE BOTTOM OF THE SCREEN GIVES THE COMMAND SUMMARY. aFTER STARTING THE
- PROGRAM, YOU WILL WANT TO SETUP THE ms-dos AND cbm-dos DRIVES WITH THE "m" AND
- "f" COMMANDS. sIMPLY PRESS THE (LETTER) KEY CORRESPONDING TO THE COMMAND
- NAME TO ACTIVATE THE COMMAND. pRESSING m WILL PROMPT YOU FOR THE ms-dos dRIVE
- nUMBER AND THE ms-dos dRIVE tYPE. iN BOTH CASES, TYPE THE NUMBER AND PRESS
- return. (sORRY FOR INSULTING ALL NON-NOVICES OUT THERE, BUT i WANT TO BE
- COMPLETE). tHE ms-dos DRIVE NUMBER CANNOT BE THE SAME AS THE cbm-dos DRIVE
- NUMBER (SINCE THE PROGRAM COPIES FROM DRIVE-TO-DRIVE WITHOUT INTERNAL
- BUFFERING). fOR THE DRIVE TYPE, ENTER AN "8", "81", OR "1581" FOR A 1581
- DRIVE OR ANYTHING ELSE FOR A 1571 DRIVE.
-
- pRESSING f WILL PROMPT YOU FOR THE cbm-dos DEVICE NUMBER. yOU MAY ENTER A
- NUMBER FROM 0 TO 30, EXCEPT THAT IT MUST NOT BE THE ms-dos DRIVE NUMBER.
- eNTER A "1" FOR cASSETTE dRIVE (gOD FORBID!), A "3" FOR THE SCREEN, A "4" FOR
- THE PRINTER (WITH AN AUTOMATIC SECONDARY ADDRESS OF 7 (LOWERCASE)), ANY NUMBER
- ABOVE 7 FOR A cOMMODORE DISK DRIVE OR SPECIAL VIRTUAL DRIVE, OR A VALUE OF "0"
- FOR THE SPECIAL "NULL" DRIVE. a cbm-dev VALUE OF 0 WILL CASE THE PROGRAM TO
- READ ms-dos FILES AND DO NOTHING WITH THE OUTPUT. yOU CAN USE THIS FEATURE TO
- CHECK OUT THE RAW READING SPEED OF THE PROGRAM.
-
- aFTER SETTING UP THE DRIVES, PRESS d TO READ IN THE ROOT DIRECTORY OFF THE
- ms-dos DISK. tHE DATA WILL COME BLAZING IN FROM THE DISK BUT basic WILL TAKE
- ITS GOOD OLE TIME SIFTING THROUGH IT. fILENAMES ARE DISPLAYED ON THE SCREEN
- AS THEY ARE SCANNED IN. tHE PROGRAM WILL (EVENTUALLY) RETURN TO THE MAIN
- SCREEN AND DISPLAY THE FORMATTED FILE INFORMATION. oNE NOTE: THE PROCESS OF
- LOGGING IN A 1581 ms-dos DISK TAKES ABOUT 12 SECONDS (ON MY 1581, ANYWAY), SO
- BE PATIENT. aN ms-dos DISK WILL HAVE TO BE "LOGGED IN" EVERY TIME YOU CHANGE
- ms-dos DISKS. (dISKS ARE LOGGED IN AUTOMATICALLY).
-
- a COUPLE OF NOTES ABOUT ACCESSING ms-dos DISKS: DON'T TRY TO ACCESS A DEVICE
- THAT IS NOT PRESENT BECAUSE THE MACHINE LANGUAGE ROUTINES CANNOT HANDLE THIS
- ERROR FOR SOME REASON AND WILL LOCK UP, REQUIRING A stop+restore. aLSO, MAKE
- SURE THAT AN ACTUAL ms-dos DISK IS LOADED INTO THE DRIVE. iF YOU ACCIDENTALLY
- PLACE cOMMODORE-dos DISK INTO THE ms-dos DRIVE, THE 1581 WILL REPORT AN
- INVALID BOOT PARAMETERS ERROR (#60), BUT A 1571 WILL LOCK UP (SINCE i DON'T
- CHECK THE SECTOR SIZE AND MY BURST ROUTINES ARE EXPECTING 512 BYTES TO COME
- OUT OF A SECTOR WHEREAS cOMMODORE DISKS HAVE ONLY 256 BYTES PER SECTOR).
-
- nOW YOU ARE READY TO PICK WHAT FILES YOU WANT COPIED AND HOW YOU WANT THEM
- COPIED. yOU WILL NOTICE THAT A "CURSOR" APPEARS IN THE "s" COLUMN OF THE
- FIRST FILE. yOU MAY MOVE THE CURSOR AROUND WITH THE CURSOR KEYS: up, down,
- left, right, home, AND clr. clr (shift-home) WILL MOVE THE CURSOR BACK TO THE
- FIRST FILE ON THE FIRST SCREEN. yOU CAN MOVE THE CURSOR AMONG THE SELECT,
- TRANSLATION, AND FILE-TYPE COLUMNS OF ALL THE FILES. pRESSING A space OR A
- return WILL TOGGLE THE VALUE OF THE FIELD THAT THE CURSOR IS ON. tO TOGGLE
- ALL OF THE VALUES OF THE "CURSOR" COLUMN (INCLUDING FILES ON ALL OTHER
- SCREENS), PRESS t. yOU WILL NOTICE THAT MOVING THE CURSOR AROUND AND TOGGLING
- FIELDS IS A BIT SLUGGISH, ESPECIALLY IF YOU ARE IN sLOW MODE ON THE 40-COLUMN
- SCREEN. dID i MENTION THAT THIS PROGRAM WILL RUN ON EITHER THE 40 OR
- 80-COLUMN SCREEN? tOGGLING AN ENTIRE COLUMN CAN TAKE A COUPLE OF SECONDS.
-
- iF THERE ARE MORE THAN 18 ms-dos FILES, YOU CAN PRESS THE "+" AND "-" KEYS TO
- MOVE AMONG ALL OF THE SCREENS OF FILES. tHE CURSOR MOVEMENT KEYS WILL WRAP
- AROUND ON THE CURRENT SCREEN. "+" IS PAGE FORWARD, AND "-" IS PAGE BACKWARD.
- tHE SCREENS WRAP AROUND TOO.
-
- aFTER YOU HAVE SELECTED ALL OF THE FILES YOU WANT TO COPY AND THEIR TRANSLATION
- AND FILE-TYPE FIELDS HAVE BEEN SET, PRESS THE c KEY TO GO INTO cOPY mODE (NEXT
- SECTION). aFTER COPYING, YOU ARE RETURNED TO THE MAIN SCREEN WITH ALL OF THE
- FIELD SETTINGS STILL INTACT. tO EXIT FROM THE PROGRAM, PRESS q.
-
- aDDITIONAL COMMANDS ARE: "r" (REMOVE == DELETE), "/" (CHANGE MENU), AND "x"
- (COPY cbm FILES == "xEROX").
- tHE REMOVE COMMAND IS USED TO DELETE SELECTED FILES FROM THE ms-dos DISK.
- aFTER SELECTING THIS OPTION, YOU WILL GET AN ANNOYING "ARE YOU SURE" QUESTION
- AND THE THE SELECTED FILES WILL QUICKLY DISAPPEAR AND THE CHANGES WILL FINALLY
- BE WRITTEN TO DISK. dELETING A BATCH OF ms-dos FILES IS MUCH QUICKER THAN
- DELETING cOMMODORE-dos FILES SINCE ms-dos DISKS USE A fILE aLLOCATION tABLE
- RATHER THAN THE LINKED LIST OF BLOCKS ORGANIZATION THAT cbm USES. iN ORDER TO
- MAKE THE basic PROGRAM EXECUTE QUICKER, AFTER DELETING, THE ORIGINAL ORDER OF
- THE FILENAMES IN THE DIRECTORY LISTING WILL BE CHANGED. bE FOREWARNED THAT
- THE DELETE OPERATION IS NON-RECOVERABLE.
-
- tHE CHANGE MENU COMMAND IS USED TO MOVE BACK AND FORTH BETWEEN THE cOMMODORE-
- dos AND ms-dos MENUS.
-
- 2.3. copying ms-dos to cbm-dos
-
- wHEN YOU ENTER COPY MODE, THE SCREEN WILL CLEAR AND THE NAME OF EACH SELECTED
- FILE IS DISPLAYED AS IT IS BEING COPIED. iF AN ERROR IS ENCOUNTERED ON EITHER
- THE ms-dos OR cbm-dos DRIVE DURING COPYING, AN ERROR MESSAGE WILL BE DISPLAYED
- AND COPYING WILL CONTINUE (AFTER YOU PRESS A KEY FOR ms-dos ERRORS).
-
- tO GENERATE A cbm-dos FILENAME FROM AN ms-dos FILENAME, THE EIGHT FILENAME
- CHARACTERS ARE TAKEN (INCLUDING SPACES) AND A DOT (.) AND THE THREE CHARACTERS
- OF THE EXTENSION ARE APPENDED. tHEN, ALL SPACES ARE REMOVED, AND IF THE NAME
- ENDS WITH A DOT (.) CHARACTER, THEN THAT DOT CHARACTER IS REMOVED AS WELL. i
- THINK THIS IS FAIRLY REASONABLE.
-
- iF THERE ALREADY IS A FILE WITH THE SAME FILENAME ON THE cbm-dos DISK, THEN
- YOU WILL BE PROMPTED IF YOU WANT TO OVERWRITE THE FILE OR NOT. eNTERING AN
- "N" WILL ABORT THE COPYING OF THAT FILE AND GO ON TO THE NEXT FILE, AND
- ENTERING A "Y" (OR ANYTHING ELSE) WILL CAUSE THE cbm-dos FILE TO BE
- "SCRATCHED" AND THEN RE-WRITTEN.
-
- tHE PHYSICAL COPYING OF THE FILE IS DONE COMPLETELY IN MACHINE LANGUAGE AND
- NOTHING IS DISPLAYED ON THE SCREEN WHILE THIS IS HAPPENING, BUT YOU CAN FOLLOW
- THINGS BY LOOKING AT DAS BLINKIN LICHTES AND LISTENING FOR CLICKS AND GRINDS.
- yOU WILL PROBABLY BE SURPRISED BY THE ms-dos FILE READING SPEED (i MEAN IN A
- GOOD WAY). tHE DISK DATA IS READ IN WHOLE TRACKS AND CACHED IN MEMORY AND THE
- DIRECTORY INFORMATION AND THE fat ARE RETAINED IN MEMORY AS WELL. tHE RESULT
- IS THAT MINIMAL TIME IS SPENT READING DISK DATA, AND NO COSTLY SEEKS ARE
- REQUIRED FOR OPENING A NEW ms-dos FILE. a RESULT IS THAT SMALL FILES ARE
- COPIED ONE AFTER ANOTHER VERY QUICKLY. yOU WILL HAVE TO WAIT, HOWEVER, ON THE
- RELATIVELY SLOW STANDARD KERNEL/cOMMODORE-dos FILE WRITING.
-
- a FEW CHANGES HAD TO BE MADE TO THE PROGRAM TO ACCOMODATE THE ramdos PROGRAM.
- ramdos USES MEMORY FROM $2300 TO $3fff OF ram0, WHICH IS NOT REALLY A GOOD
- PLACE FOR A DEVICE DRIVER, AND IT USES SOME OF THE ZERO-PAGE LOCATIONS THAT i
- WANTED TO USE. bUT, DIFFICULTIES WERE OVERCOME. tHE IMPORTANCE OF ramdos
- COMPATIBILITY IS THAT IF YOU ONLY HAVE ONE DISK DRIVE BUT YOU HAVE AN reu, YOU
- CAN USE ramdos TO STORE THE ms-dos FILES TEMPORARILY. iF YOU ONLY HAVE ONE
- DISK DRIVE AND NO reu, YOU ARE sol (oUT OF lUCK) UNLESS YOU CAN GET A
- rAMdISK-TYPE PROGRAM FOR AN UNEXPANDED 128. tHE ramdos PROGRAM IS AVAILABLE
- FROM ftp SITE "CCOSUN.CALTECH.EDU" IN FILE "/PUB/RKNOP/UTIL128/RAMDOSII.SFX".
- oNE NOTE i FOUND OUT ABOUT ramdos: YOU CANNOT USE A
-
- dopen#1,(cf$),u(cd),w
-
- WITH IT LIKE YOU ARE SUPPOSED TO BE ABLE TO; YOU HAVE TO USE A
-
- dopen#1,(cf$+",w"),u(cd)
-
- hERE IS A TABLE OF COPYING SPEEDS FOR COPYING FROM 1571S AND 1581S WITH asc
- AND bin TRANSLATION MODES. aLL FIGURES ARE IN BYTES/SECOND. tHESE RESULTS
- WERE OBTAINED FROM COPYING A 127,280 BYTE TEXT FILE (THE TEXT OF c= hACKING
- iSSUE #3).
-
- from \ to: "NULL" ramlINK ramdos jd1581 jd1571
- -------+ ------ ------- ------ ------ ------
- 81-BIN {$7c} 5772 3441 2146 N/A 644
- 81-ASC {$7c} 5772 3434 2164 N/A 661
- 71-BIN {$7c} 4323 2991 1949 1821 N/A
- 71-ASC {$7c} 4323 2982 1962 1847 N/A
-
- tHE "NULL" DEVICE IS THAT "0" cbm-dos DEVICE NUMBER, AND A COUPLE OF ENTRIES
- ARE "N/A" SINCE i ONLY HAVE ONE 1571 AND ONE 1581. nOTE THAT MY 71 AND 81 ARE
- jIFFYdos-IFIED, SO THE PERFORMANCE OF A STOCK 71/81 WILL BE POORER. jIFFYdos
- GIVES ABOUT A 2X PERFORMANCE IMPROVEMENT FOR THE STANDARD FILE ACCESSING CALLS
- (OPEN, CLOSE, CHRIN, CHROUT). ramdos DOESN'T SEEM TO BE AS SNAPPY AS YOU
- MIGHT THINK.
-
- tHE "NULL" FIGURES ARE QUITE IMPRESSIVE, BUT THE RAW SECTOR READING SPEED
- WITHOUT THE OVERHEAD OF MUCKING AROUND WITH FILE ORGANIZATION IS 6700
- BYTES/SEC FOR A 1581 AND 4600 b/S FOR A 71. tHE REASON THAT THE 1571 OPERATES
- SO QUICKLY IS THAT i USE A SECTOR INTERLEAVE OF 4 (WHICH IS OPTIMAL) FOR
- READING THE TRACKS. i THINK THAT OTHER ms-dos FILE COPIER PROGRAM USES AN
- INTERLEAVE OF 1 (WHICH IS NOT OPTIMAL). i LOSE SOME OF THE RAW PERFORMANCE
- BECAUSE i COPY THE FILE DATA INTERNALLY ONCE BEFORE OUTPUTTING IT (TO SIMPLIFY
- SOME OF THE CODE).
-
- iN A COUPLE OF PLACES YOU WILL NOTICE THAT asc TRANSLATION GIVES SLIGHTLY
- BETTER OR SLIGHTLY WORSE PERFORMANCE THAN bin. tHIS IS BECAUSE ALTHOUGH
- SLIGHTLY MORE WORK IS REQUIRED TO TRANSLATE THE CHARACTERS, SLIGHTLY FEWER
- CHARACTERS WILL HAVE TO BE WRITTEN TO THE cbm-dos FILE, SINCE petscii USES
- ONLY cr WHERE ms-dos ascii USES cr AND lf TO REPRESENT END-OF-LINE.
- tRANSLATION IS DONE BY USING A TABLE (THAT YOU CAN CHANGE IF YOU WISH). mANY
- ENTRIES IN THIS TABLE CONTAIN A VALUE OF ZERO, WHICH MEANS THAT NO CHARACTER
- WILL BE OUTPUT ON TRANSLATION. mOST OF THE CONTROL CHARACTERS AND ALL OF THE
- CHARACTERS OF VALUE 128 (0X80) OR GREATER ARE THROWN AWAY ON BEING
- TRANSLATED. tHE TABLE IS SET UP SO THAT cr CHARACTERS ARE THROWN AWAY AND THE
- lf CHARACTER IS TRANSLATED TO A cbm-dos cr CHARACTER. tHUS, BOTH ms-dos ascii
- FILES AND unix ascii FILES CAN BE TRANSLATED CORRECTLY.
-
- 2.4. commodore-dos menu
-
- tHE cOMMODORE-dos MENU, WHICH DISPLAYS THE NAMES OF THE cOMMODORE FILES
- SELECTED FOR VARIOUS OPERATIONS, LOOKS AND WORKS PRETTY MUCH THE SAME AS
- THE ms-dos MENU:
-
- cbmdos ms=10:1581 cbm=8 free=3211476
-
- num s trn filename t length
- --- - --- ---------------- - ------
- 1 * bin lrr-128 p 9876
- 2 asc com-hacking-005 s 175412
-
- d=dir m=msdev f=cbmdev c=copy q=quit
- t=toggle r=remove x=cbmcpy /=menu +-=pg
-
- yOU'LL NOTICE, HOWEVER, THAT THE FILETYPE FIELD ("t" HERE) IS MOVED AND IS
- UNCHANGABLE. aLSO, THE FILE LENGTHS ARE NOT EXACT; THEY ARE REPORTED AS THE
- BLOCK COUNT OF THE FILE MULTIPLIED BY 254. tHIS MENU IS NOT MAINTAINED FOR
- FILES BEING COPIED TO THE cbm-dos DISK FROM AN ms-dos DISK. yOU'LL
- HAVE TO RE-EXECUTE THE dIRECTORY INSTRUCTION TO GET AN UPDATED LISTING.
-
- tHE "d" (DIRECTORY) COMMAND HAS LOCAL EFFECT WHEN IN THIS MENU. tHE
- cOMMODORE-dos DIRECTORY WILL BE LOADED FROM THE CURRENT cbm DEVICE NUMBER.
- nOTE THAT IN ORDER FOR THIS TO WORK, THE cbm DEVICE MUST BE NUMBER EIGHT
- OR GREATER (A DISK DRIVE). oRIGINALLY, THE SUBROUTINE FOR THIS COMMAND WAS
- WRITTEN USING ONLY get#'S FROM THE DISK AND WAS VERY SLOW. iT WAS MODIFIED,
- HOWEVER, TO CALL A MACHINE LANGUAGE SUBROUTINE TO READ THE INFORMATION FOR
- A DIRECTORY ENTRY FROM THE DIRECTORY LISTING, AND HENCE THE SUBROUTINE NOW
- OPERATES AT A TOLERABLE SPEED.
-
- tHE "c" (COPY) COMMAND ALSO HAS A DIFFERENT MEANING WHEN IN THIS MENU. iT
- MEANS TO COPY THE SELECTED cbm FILES TO THE ms-dos DISK. sEE DETAILS BELOW.
-
- tHE COPY cbm FILES ("x") COMMAND IS USED TO COPY THE FILES IN THE cbm-dos MENU
- TO ANOTHER cbm-dos DISK UNIT. sELECT THE FILES YOU WANT TO COPY AND THEN
- PRESS x. yOU WILL THEN BE ASKED WHAT DEVICE NUMBER YOU WANT TO COPY THE FILES
- TO. tHE DEVICE CAN BE ANOTHER DISK DRIVE OR ANY OTHER DEVICE (EXCEPT THE
- KEYBOARD). uSING DEVICE NUMBER 0 DOES NOT MEAN THE "NULL" DEVICE AS IT DOES
- WITH COPYING ms-dos TO cbm. iF YOU ARE COPYING TO A DISK DEVICE AND THE FILE
- ALREADY EXISTS, THEN YOU WILL BE ASKED IF YOU WISH TO OVERWRITE THE FILE. yOU
- CANNOT COPY TO THE SAME DISK UNIT. aLSO, ALL FILES ARE COPIED IN BINARY MODE
- (REGARDLESS OF WHAT TRANSLATION YOU HAVE SELECTED FOR A FILE).
-
- tHE COPY cbm FILES COMMAND WAS INCLUDED SINCE ALL OF THE LOW-LEVEL GEAR
- NEEDED TO IMPLEMENT IT (SPECIFICALLY "COMMIEiN" AND "COMMIEoUT" BELOW) WAS
- ALSO REQUIRED BY OTHER FUNCTIONS. tHIS COMMAND CAN BE VERY CONVENIENT WHEN
- WORKING WITH ramdos. fOR EXAMPLE, IF YOU ONLY HAD A 1571 AS DEVICE 8 BUT YOU
- HAVE A ram EXPANDER AND HAVE INSTALLED ramdos AS DEVICE 9, THEN YOU WOULD
- COPY ms-dos FILES TO ramdos USING THE ms-dos MENU, AND THEN YOU WOULD GO TO
- THE cOMMODORE-dos MENU ("/"), READ THE DIRECTORY, SELECT ALL FILES, INSERT AN
- cOMMODORE-dos DISKETTE INTO YOUR 1571, AND THEN USE "x" TO COPY FROM THE
- ramdos DEVICE TO THE 1571.
-
- tHE REMOVE COMMAND ("r") DOES NOT WORK FOR THIS DIRECTORY. yOU CAN scratch
- YOUR cbm-dos FILES YOUR DAMN SELF.
-
- 2.5. copy cbm-dos to ms-dos
-
- bEFORE YOU CAN COPY SELECTED cbm-dos FILES TO AN ms-dos DISK, THE ms-dos DISK
- DIRECTORY MUST BE ALREADY LOADED (FROM THE ms-dos MENU). tHIS IS REQUIRED
- SINCE THE DIRECTORY AND fat INFORMATION ARE KEPT IN MEMORY AT ALL TIMES DURING
- THE EXECUTION OF THIS PROGRAM.
-
- wHEN YOU ENTER COPY MODE, THE SCREEN WILL CLEAR AND THE NAME OF EACH SELECTED
- FILE IS DISPLAYED AS IT IS BEING COPIED. iF AN ERROR IS ENCOUNTERED ON EITHER
- THE ms-dos OR cbm-dos DRIVE DURING COPYING, AN ERROR MESSAGE WILL BE DISPLAYED
- AND COPYING WILL CONTINUE (AFTER YOU PRESS A KEY FOR ms-dos ERRORS). pLEASE
- NOTE THAT NOT A WHOLE LOT OF EFFORT WAS PUT INTO ERROR RECOVERY.
-
- tO GENERATE AN ms-dos FILENAME FROM AN cbm-dos FILENAME, THE FOLLOWING
- ALGORITHM IS USED. tHE FILENAME IS SEARCHED FROM RIGHT TO LEFT FOR THE LAST
- "." CHARACTER. iF THERE IS NO "." CHARACTER, THEN THE ENTIRE FILENAME, UP TO
- 11 CHARACTERS, IS USED AS THE ms-dos FILENAME. cHARACTERS 9 TO 11 WILL BE
- USED AS THE EXTENSION. iF THERE IS A "." CHARACTER, THE ALL CHARACTERS BEFORE
- IT, UP TO EIGHT, WILL BE USED AS THE ms-dos FILENAME AND ALL CHARACTERS AFTER
- THE FINAL ".", UP TO THREE, WILL BE USED AS THE ms-dos EXTENSION.
-
- tHEN, THE NEWLY GENERATED ms-dos FILENAME IS SCANNED FOR ANY EXTRA "."
- CHARACTERS OR EMBEDDED SPACES. iF ANY ARE FOUND, THEY ARE REPLACED BY THE
- UNDERSCORE CHARACTER ("_", WHICH IS THE BACKARROW CHARACTER ON A cOMMODORE
- DISPLAY). fINALLY, ALL TRAILING UNDERSCORES ARE REMOVED FROM THE END OF BOTH
- THE FILENAME AND EXTENSION PORTIONS OF THE ms-dos FILENAME. aLSO, ALL
- CHARACTERS ARE CONVERTED TO LOWERCASE petscii (WHICH IS UPPERCASE ascii) WHEN
- THEY ARE COPIED INTO THE ms-dos FILENAME. nOTE THAT IF THE cOMMODORE FILENAME
- IS NOT IN THE 8/3 FORMAT OF ms-dos, THEN SOMETHING IN THE NAME MAY BE LOST.
- sOME EXAMPLES OF FILENAME CONVERSION FOLLOW:
-
- cbm-dos filename ms-dos filename
- ---------------- ---------------
- "LRR.BIN" "LRR.BIN"
- "LRR.128.BIN" "LRR_128.BIN"
- "HELLO THERE.TEXT" "HELLO_TH.TEX"
- "LONG_FILENAME" "LONG_FIL.ENA"
- "FILE 1..3.S__5" "FILE_1.S"
-
- iT WOULD HAVE BEEN TIME-CONSUMING TO HAVE THE PROGRAM SCAN THE ms-dos
- DIRECTORY FOR A FILENAME ALREADY EXISTING ON THE DISK, SO lrr WILL PUT
- MULTIPLE FILES ON A DISK WITH THE SAME FILENAME WITHOUT COMPLAINING. tHIS
- ALSO GETS RID OF THE PROBLEM OF ASKING YOU IF YOU WANT TO OVERWRITE THE OLD
- FILE OR GENERATE A NEW NAME. hOWEVER, IN ORDER TO RETRIEVE THE FILE FROM
- DISK ON AN ms-dos MACHINE, YOU WILL PROBABLY HAVE TO USE THE rename COMMAND TO
- RENAME THE FIRST VERSIONS OF THE FILE ON THE DISK TO SOMETHING ELSE SO ms-dos
- WILL SCAN FURTHER IN THE DIRECTORY FOR THE LAST VERSION OF THE FILE WITH THE
- SAME FILENAME. tHERE IS NO RENAME COMMAND IN lrr BECAUSE i NEVER THOUGHT OF
- IT IN TIME. iT WOULD HAVE BEEN FAIRLY EASY TO PUT IN.
-
- tHE DATE GENERATED FOR A NEW ms-dos FILE WILL BE ALL ZEROS. sOME SYSTEMS
- INTERPRET THIS AS 12:00 AM, 01-jAN-80 AND OTHERS DON'T DISPLAY A DATE AT ALL
- FOR THIS VALUE.
-
- tHE PHYSICAL COPYING OF THE FILE IS DONE COMPLETELY IN MACHINE LANGUAGE AND
- NOTHING IS DISPLAYED ON THE SCREEN WHILE THIS IS HAPPENING, BUT YOU CAN FOLLOW
- THINGS BY LOOKING AT THE BLINKING LIGHTS AND LISTENING FOR CLICKS AND GRINDS.
-
- sINCE THE fat AND DIRECTORY ARE MAINTAINED IN ram DURING THE ENTIRE COPYING
- PROCESS AND ARE ONLY FLUSHED TO DISK AFTER THE ENTIRE BATCH OF FILES ARE
- COPIED, COPYING IS MADE MORE EFFICIENT, SINCE THERE WILL BE NO COSTLY SEEK
- BACK TO TRACK 0 AFTER WRITING EACH FILE (LIKE ms-dos DOES). iF YOU HAVE A
- NUMBER OF SMALL FILES TO COPY, THEN THEY WILL BE KNOCKED OFF IN QUICK
- SUCCESSION, FASTER THAN MANY ms-dos MACHINES WILL COPY THEM.
-
- tO SIMPLIFY THE IMPLEMENTATION, THE CURRENT TRACK OF DISK BLOCKS FOR WRITING
- IS NOT MAINTAINED LIKE IT IS FOR READING. aLSO, A WRITING INTERLEAVE OF 1:1
- IS USED FOR A 1571, WHICH IS NOT OPTIMAL. hOWEVER, SINCE WRITING IS SUCH A
- SLOW OPERATION ANYWAY, AND SINCE THE 1571 IS PARTICULARLY BAD BY INSISTING ON
- VERIFYING BLOCKS, NOT MUCH MORE OVERHEAD IS INTRODUCED THAN IS ALREADY
- PRESENT.
-
- aN INTERESTING NOTE ABOUT WRITING ms-dos DISKS IS THAT YOU CAN TERMINATE lrr
- IN THE MIDDLE OF A COPY (WITH stop+restore) OR IN THE MIDDLE OF COPYING A
- BATCH OF FILES, AND THE ms-dos DISK WILL REMAIN IN A PERFECTLY CONSISTENT
- STATE AFTERWARDS. tHE STATE WILL BE AS IF NONE OF THE FILES WERE COPIED. tHE
- REASON IS THAT THE CONTROL INFORMATION (THE fat AND DIRECTORY) IS MAINTAINED
- INTERNALLY AND IS FLUSHED ONLY AFTER COPYING IS ALL COMPLETED. bUT DON'T
- TERMINATE lrr WHILE IT IS FLUSHING THE CONTROL INFORMATION.
-
- hERE IS A TABLE OF COPYING SPEEDS FOR COPYING TO 1571, 1581, AND cmd fd-4000
- DISK UNITS WITH asc AND bin TRANSLATION MODES. aLL FIGURES ARE IN BYTES/
- SECOND, WHICH INCLUDES BOTH READING THE BYTE FROM A c= DISK AND WRITING IT TO
- THE ms-dos DISK. tHE AVERAGE SPEED FOR EITHER THE READ OR WRITE OPERATION
- INDIVIDUALLY WILL BE TWICE THE SPEED GIVEN BELOW. tHESE RESULTS WERE OBTAINED
- FROM COPYING A 156,273 BYTE TEXT FILE (THE TEXT OF c= hACKING iSSUE #4).
-
- from \ to: fd-BIN fd-ASC 81-BIN 81-ASC 71-BIN 71-ASC
- --------+ ------ ------ ------ ------ ------ ------
- ramlINK {$7c} 2,332 2,200 2,332 2,200 1,594 1,559
- ramdos {$7c} 1,070 1,053 1,604 1,600 1,561 1,510
- fd4000 {$7c} - - 1,645 1,597 1,499 1,464
- jd1581 {$7c} 1,662 1,619 - - 1,474 1,440
- jd1571 {$7c} 1,050 1,024 953 933 - -
-
- tHESE FIGURES ARE FOR TRANSFER SPEED ONLY, NOT COUNTING THE COUPLE OF SECONDS
- OF OPENING FILES AND FLUSHING THE DIRECTORY. nOTE THAT ALL MY PHYSICAL DRIVES
- ARE jIFFYdos-IFIED, SO YOUR PERFORMANCE MAY BE SLOWER. i AM AT A LOSS TO
- EXPLAIN WHY AN fd-4000 IS SO MUCH SLOWER THAN A 1581 FOR COPYING FROM A
- ramdos FILE, BUT THE SAME SPEED OR BETTER FOR COPYING FROM ANYTHING ELSE.
-
- 3. uuencoded files
-
- hERE ARE THE BINARY EXECUTABLES IN UUENCODED FORM. tHE crc32S OF THE TWO
- FILES ARE AS FOLLOWS:
-
- CRC32 = 3896271974 FOR "LRR-128"
- CRC32 = 2918283051 FOR "LRR.BIN"
-
- tHE "LRR.128" FILE IS THE MAIN basic PROGRAM AND THE "LRR.BIN" FILE CONTAINS
- THE MACHINE LANUGAGE DISK-ACCESSING ROUTINES.
-
- BEGIN 640 LRR-128
- m{$60}1ps'{$60}h{$60}f2#'*#$t-rd[(dq)5%1,12!2140@4d5!1$52(#$r."!615)324].
- m(#$n,#{$60}b{$60}&d<"p"9(#h@f2)"62!#4d%)1r!"4e5#12{$60}p.2u&14(m.3,@1d]2
- m($,]2$%#2te.1r(@.b"9{$60}&\<#{$60}{$60}z{$60}*l<%{$60}!#1++"*#$x-bdzbr!#1+,x(*<@
- m0t2r."{$60}z((\@*bh@1$5&055,5"!#0dtm1$]3($12259%("hj{$60}.8<&0!$5k(y
- m.d14lc{$60}@.b{$60}@cr{$60}j*b!-4ru$3u,@1%))5d4l(%194$4@*#{$60}],34w,2pr-34]
- m,34x,2d{$60}'!t:{$60}(l@1%:r0t0@ir!$5k(x.d14lc{$60}@.b"/("hj($%,5$523d%4
- m12!-4ru$3u,@1%))5d4{$60}(at;{$60}#h{$60}/at>{$60})d@(de.251)04q)6de.1rxn+b(@
- m.b"9{$60}&{$60}=*{$60}#^{$60}c{$60}@.b!02[+1*"(x,#{$60}p(bd@.b!05k)02zhs,{$60}")'3({$60}br#"
- m*%!6jc{$60}ilm$h(d-"(bd@kr#"*%!6jc$ilc$s,b"g(#8p{$60},d=-p"9(dq/041)
- m3d<@34%#2$e.12!,04y'54%'12!23u5424y%4rxn+b(@.b#^$2),4e(n0de.
- m(bq5*$-$*0#j'3p{$60}er!05jhs+$16(#h@er!05jht+$14(#h@gb!02p{$60}.'d8{$60}
- mab!4+%(l0bq)+$$d+$,l1%0d+$9,)"q)3"0l6"q8){$60}!('d<{$60}0ttdlb)$3494
- m0rlm42{$60}bjl<h,3,ijl<h,30u*:k'*#$w*:k'*#$u-rfjqr@r.2fjqr@q.2d{$60}
- m:!y({$60}$--)+)#322jqr@q-#<ijb(o4dy8(jk'*#dr*0"/'dl{$60}1$rrjs$@.b!#
- m1k*k,2{$60}z($u%lc{$60}@.b!#0;(p(#h@34&r,{$60}#!'e{$60}{$60}ab!$220h,2ps,#{$60}i+$-,
- m*#$r."dl4uhh,3(x*2q$4"@q,c@i+$-.)"@s,#{$60}i{$60}.d>6@"+($14lc(u-2"g
- m($14)+(b,34x,2(@.m4@1%0dlb(q-3<q(@{$60}/'v0{$60}1dpdll<h,3dijl<h,3<i
- mjl<h,3<ijl<h,3<ijl<h,3<i{$60}#,?;@!)3"2r1dpd.h%)lc&d,3dz24pdlde,
- m)*k'*#$w*3j"{$60}#t?>{$60}")(#4p,{$60}!#'x({$60}.@!e'x,{$60}cr{$60}j*b!,3t%$($u3+41/
- m4r!$25)%0u1/4ed@*bh{$60}c!^,{$60})db3$]!1$e.1r!-4ru$3u,@1$e214-43u)9
- m+bxn(b{$60}z()d{$60}ga^6{$60})x@4$l@.b">(%!+jc,{$60}iq^@{$60}$1,lc{$60}{$60}q1^j{$60}/x)($),
- m+$1#+$)(+%,@.b!%ll(h4%:j,bd{$60}yq^t{$60}(l@*%,@kr{$60}q*2"g((t@,s@p(#h@
- m1$rrjs$@.b".{$60}{$60}\@o@"9(e-#04y.24y'($u3+41/4r!$25)%0u1/4edn+bxb
- m(#h@f0{$60}@(,@{$60}1$*r0drj,c4vk$)({$60}%{$60}@s0">(%!+jc(q(#h@_@d@0dpl6"q"
- m2"{$60}z($u!ld),jd)(k#(u-ji8k#8u-3,v{$60}&$@t@"+($1#lc{$60}@ir{$60}s-c{$60}{$60}@2#<
- m{$60}($@1%"r1$(@i"!$0jhs,jph1$.k,2d@j2{$60}s,@"a(.8{$60}br#"*$10*;(p(+{$60}@
- mpba$4"fr,c(y(*<@,s4p{$60}+l@\{$60}"+(,(h1%"j,3$i(*\@,c0@ir{$60}s-3{$60}{$60}qr#z
- m{$60}$1,ld1,jc${$60}"r$${$60}40dlldh(b{$60}bjl0h1$pi+#,ijb(@("{$60}@($%30r{$60}@4t51
- m("{$60}b(#h@cr{$60}j*b!$149!54q4(%-%3"]44b]&5"{$60}j*@{$60}v(0x!022r(b(@.b"!
- m2;(pi#$p(#h@022r022jqrc"*$10jddi*2{$60}z((({$60}4b$8{$60}4$dll@h020l."fj
- m(b{$60}@(jk)*$$d+#,i{$60}%\a(@&9($1,.r!!){$60}!q(2p!1"2r1"2j022j(b{$60}@(@"2
- m(38!0tph1$pill(h1%"j,c8ijc(u-js"*$10jc(w*0"^(4{$60}!4ujrpba$4*hr
- m."fj,c4vk,(h1%"j,cdijc8u-3,vk,(h1%"j,s{$60}i{$60}.$a2@%$220h,"q$3"fr
- m1"2jr2@b("{$60}@("*jq"a36bdl-bd{$60}[r%/{$60}410*$1,*;)$4{$60}#](50!4uhh1$pi
- mle-:{$60}{$60}8b7@&"($10{$60}{$60}pb:{$60}&.{$60}!(b<@$z{$60}#<b<p&/("hj(%)%4$]25"!-4ru$
- m3u,@1$e32r!%4e)/4b{$60}j*@!d(gp!f2#'*#$x*3lb35,m1$]3($1)4tl@15)2
- m3u(@(r([rbc$*$4i+#(i.p"1(h8!f2{$60}b("@d(co**-(h12dl,rd[(bdl(%!2
- m15-3($m%62xb.\<h,30v*0"?(i{$60}!h?d@020@.b".{$60}*4bf@$z{$60},{$60}bfp&/("hj
- m(%-#4d5%3b!(14%$24y'("hj{$60}-0bi{$60}&9(,<h,30w*3o'*#$x*3l{$60}{$60}r.e{$60}8l@
- m346r,""g()db35,m1$]3(clz6+)-03k5()db0t)-1$]3(clz6+)#00{$60}l(z8!
- mf2#'*#$t-bd[(b{$60}@35,](co**,0h1%8i+#(i.r(z(cm$5"0[{$60}%dck@&9(b{$60}@
- m0t)-/2([rbc$*$-$*2pr*3lb("!&4d5%/2([rbc$*%@i+#(i{$60}&,cn{$60}&9(#h@
- mc@!i(\(!.@"$(\,!cr{$60}j*b!30u)%14x@1d]/5$e.1r{$60}j*@"x(\p!f2!)3"0[
- m(d0]1$e2($t]35-$158@1cu#0du$158@0su#3u!9(%$]455)5"{$60}@("({$60}[2/6
- m{$60}9d@("{$60}@(")4/51/1t=,12!2/5)%34]612!8/4-"34-062{$60}o/4u%3e4@*rt]
- m4$<b.p#s(^{$60}!c@#y(^h!.@{$60}2).l!cr{$60}j*b!-04e.(%)/551)3d4@*bh{$60}("3t
- m{$60}52r,2{$60}z($.r,{$60}{$60}h)/4!4k(p{$60}$\d_@&+($u%lc{$60}@ir!-1k)$3#i-0[(r(#h@
- mu2!-1k)#1ci-0[(q{$60}%dd"{$60}*-(#0r,{$60}!k){$60}d"br!-1;.q,""g(#4t,@";)!("
- mf2{$60}b3e5-("!3("!44dx@(%194"{$60}@1de,14y!344@($585"{$60}@3$5.1u1((@#+
- m)!p"f2{$60}b+2tm("{$60}m("{$60}m+2t@("tm+2{$60}@+2tm+2tm+2t@("tm+2{$60}@+2tm+2tm
- m(@#5)!t"b2{$60}u-3{$60}{$60}!24>{$60}id@(dy532{$60}@4r{$60}@5%).("!&24q%3d%-12{$60}@("{$60}@
- m("{$60}@(%0@($q%3d=42"({$60}-24?{$60}id@(btm+2{$60}@+2{$60}@+2tm("{$60}m+2tm+2tm+2tm
- m+2tm+2tm("t@("tm+2tm+2({$60}/r4f{$60}ht@-#8p{$60}%he,{$60})"le2j,3<@.b"+($*q
- m348@ir!"ldu&{$60}',e.@*9($9,)#lz((l@5+%-1b"g(#4y,{$60}"3)40"@2!)le0@
- mi"!"(#h@f2!$220h344l22d@.b""{$60},@e3@*+($u&ls{$60}@ir"9(,<h,3@i.r(\
- m1$e214-43u)9($y/5"!,3t%$140^(co'*#$t-bd{$60}\25/{$60}hl@34:r,""g()d@
- mqr@q."d[(cq.3r!&24q%4sxb.\<h,30v*0{$60}#)e@"br!-1k.r,""g(#8v,{$60}{$60};
- m)f("f2#(*$e,)"q2jc4i.\<h,3@i.p{$60}s)fp"d2!#jc$@b2{$60}v,s{$60}l-c0p+#8u
- m,{$60}!8)g8"f2"f-"d[rba$220h344l5*i2*2pu+#,i(#h@b2{$60}v-c{$60}{$60}?2:{$60}{$60}id@
- mic<i.\hh1$dd*$u%+%2j4bdl."pu*2{$60}z((d@-c8p{$60}*0fb@*9(*8q,bd[rba$
- m220h344l5*i2*2pq,rpu*2{$60}z((d@-c8p{$60}*xfe{$60}*a^2!!){$60}"^)ix"2;+4*$--
- m)"q!)"d{$60}y":h{$60}hl@34:q,""g()d@r"a)3"0l4jhu*3m$220h344l5*i2*0#t
- m)k("br!)lc{$60}@ir{$60}v,#{$60}{$60}/r>\{$60}i$@22")(#<v,"pq,#4p+#$q,3{$60}l.34p+#$q
- m-3{$60}l,3{$60}p,"pq,#(p+#<s,"px-c{$60}l.#8p+#<w,"pw.3{$60}l.#$p+#@s,"px-3{$60}{$60}
- m9b?!{$60}i$@2:lq-2")(#4p,"pw,3,l,30p,"pw,3,l,34p,"pw,3,{$60};"?&{$60}i{$60}{$60}
- m<b?'{$60}ch{$60}dr?({$60}h\@*bh@5d%224]54r!-14y5($]05$e/3e,@*bh{$60}hb?){$60}du%
- mljlh346r,"d{$60}jr?*{$60}hdu,#{$60}{$60}ub?:{$60}id@qr@q-#<i.r)(059%($%.($%715-/
- m344@1$%9+b(@.b#^{$60}c$u{$60}-pgy{$60}*{$60}{$60}{$60}{$60}h^{$60}*+($u%lc$@ir"-(#0r,"{$60}z((t@
- m,c4p,"{$60}z((d@-3{$60}p{$60}!hh_0*-(#0r,"{$60}z((t@,30p(#h@b2{$60}u,#{$60}{$60}-"@"{$60}u*r
- m4jlq(#h@br!2ls{$60}@ir!2ld*k5{$60}{$60}^*{$60}p#b2{$60}v,#{$60}{$60}6"@6{$60}u*r4jhq(#h@br!4
- mje*q0b"g(%*r,{$60}!b*"{$60}#b2{$60}v,#{$60}{$60}>r@j{$60}t.r0zlq(#h@br!#ls{$60}@ir!#ldu#
- m{$60}(4h-{$60}.)(#8p,{$60}">*#x#0[)#jc$@.b"+($.q34,@ir!#lc{$60}{$60}j"a({$60}xd@-c{$60}p
- m{$60}+xh4@-2lc{$60}@.b!#lc{$60}@.b")(#8p,{$60}#0*%p#br!-1k.r,""g(#8p,{$60}#p*&8#
- m6+)4je(@.b"1($.j,2"-(#@y,"py,3{$60}l.3,p{$60}!,i<{$60}.9(,@h24pd+%*j-2d[
- m1$dd*$u%+%@i(#h@b2{$60}v,#{$60}{$60}02ez{$60}xl@rba$220h344l6"dl-bpq*;(b("(@
- mir!8)+(b*b(@.m4@6"2r(b{$60}b{$60}%tia{$60}/**$1))"a-12q8*2pv+#$ile@d(#h@
- mc@"/*8x#br#**$1))"a-12q8*2py+#$ilb)!(b"g(%@dlb)"24xb(#k5(%@d
- mlb)!4t,b{$60}*lif{$60}/**$1))"a-12q8*2py+#,ile@d(#h@c@#>*:(#br#**$1)
- m)"a-12q8*2pq-"pq*;(b4r(@ir!8)+(b4%)'(b{$60}zu2!8)+(b4t51(@#[*:p#
- mrba$220h344l6"dl,30l,rfr6"0@.b".{$60}{$60}tjm@.+($u&l[(p(*<@-c{$60}p{$60}!pj
- mp{$60}.!(%br,2"d($u&{$60}#0jr@.1($.j,2"-(#@y,"py,3{$60}l.3,p{$60}#pju{$60}."(%@{$60}
- m1bk>{$60}xd@-3(p{$60}&,jz{$60}-2lc{$60}zbr!"ldu&(*<@5+(q(#h@b2{$60}u,3{$60}{$60}=bkr{$60}u2r
- m5*hq."{$60}z((d@-3$p{$60}(@j_{$60}.+($u&l[(p(*<@-c8p{$60},{$60}j{$60}012lc{$60}zbr!4lc$@
- mir!4ldu&jra-1jnu*$u&k3$x*:pq."fj,2{$60}z((l@5+.r348@ir{$60}u,3{$60}{$60}v2h&
- m!%2r5*lq."{$60}z((l@5+,q(*<@5+(q{$60}.,j${$60}2)(#4q,{$60}#x*ah$f2!)3"0[qr@r
- m-rd[(d{$60}b.p{$60}>*r0$a2)-4ru$3u,@1$5624-%($y534)%4b{$60}h."ts,"db.t16
- m{$60}&(k)02+($-$ld16(*>9(du3+41/4r!!3d0@0t)-+41/4r!$159)0t53($u5
- m4u0@0d4@1$e&1d5214y4(2(zb3$p-c{$60}{$60}cbln!%br-s$@.b"%(du3+41/4r!$
- m159)0t4@5%e012{$60}@*#<q+s@q*2([6{$60}#/*s@$br!8lc@@l"!8lc@q(+{$60}@6+(q
- m-3@q(*<@1%2r,c4u.d14)+(b,34x,2(@.m4@1%2r,#i$5"2r(c$u-s$b{$60}/\k
- m0@27(%!6jc,l1%8@.b"7(%!6jc0l1%0@.b">(%!+(#h@1$rrjs$@.b!-0;(p
- m{$60}{$60}dl3{$60}2)(#4p,{$60}{$60}>+%8$f2!)3"0[qr@r-rd[(d{$60}b.p!&+&{$60}$a2{$60}b0t)-+41/
- m4r!$159)0t4@3e5-0d52("@p+3,p*2([0t0{$60}bbqj!(l@0t2r1%8@iydb35,m
- m1$]3($%.1"!#0dtm1$]3($1%5de#15,@35535"!"12!$249&15)%3e0a(cj)
- m,3$r,{$60}"c+'0$0t:rjs$@.b!#0;(p(#h@b2{$60}u,#{$60}{$60}j2qu!#h{$60}p"qv!(\@*bh@
- m0t]062!&24q%4r{$60}j*@#2+'x$br!-1;(q(*<@,c{$60}p,{$60}#\+'\$f2#'*#$t-rd[
- m(d-/4%d@35,m1$]3("t^($-"32u$3u,b.idzf0{$60}8+8@$br!$3+.r,""g($9#
- mlc{$60}@.b")(#$q.3{$60}{$60}3rv2!$9#lc{$60}@.b"!($:r,2"d($1,(#h@br#**$1))"@p
- m+$8i+#8l,2fr(bhb(*<@c2{$60}q,c{$60}p{$60}%<mg{$60}2"($8{$60}@rvf!)d@.b"9(d9)3$53
- m($-/4$e%1"{$60}](cm&0slb("t@4%)%4u,@2t59(@"5+:<$h?d@020@.b")(#4r
- m,{$60}"a+;{$60}$1d.r1d.j,0#.+;h$6"2rrba$220h,"q&*2pq.2px*:hb+b*jrba$
- m220h,"q&*2pr.2ps*0{$60})+l0$0t8dlb(b.h%)lc&dpra8)"dzbr#**%@d+$dl
- m,2fsl2(@(b"g($-&)+)#1b2jrba8)"q)+#$i{$60}{$60}\ns@2"{$60}#@nsp2+(,dh0t8d
- m+#$ilb(n(b"g($-&)++(*$-&)"s#*$-&)"fk,2d{$60}62[0!$-&)+)#1b2j(bpb
- mjlhh1$dd*#{$60}l1bdl,30l,2d{$60}c2[8!)d@q"a&0rd[(bx@(co'*#,t*3m#1b0[
- mqr@s-"d[hs(p*3m36ba&*2)"651%4r([{$60}*@nw029(*,s-2d[rba$220h,"q&
- m*2py+#,i{$60}-<nx@1#3+)#3"a&*2{$60}z($q"le-:*$8i(*l@m2a36ba&*:tv-34s
- m-bfl-c4u,s8{$60}$2_l!(l@0t2qlc@@ir#^#2,q+"a#1b2j(bq7(bdl52a#1"d@
- m.m4@br!#1+.q,""g()\@,2q#1"pw{$60}",o\02+($-$ls@@ir{$60}q,c@x{$60}#<o]@2+
- m($13l[$v,r"g(#$r.#@{$60}:b_[!%@dlb)9(b{$60}z()d@(d-"32!&24q%($5825-4
- m4sl@3u9%4e=2251%("a9+txi(cl{$60}db\{$60}!:{$60}@,2{$60}z((4@6"0@.b"+(%@dlb).
- m(b"g($9#ld9#js$@.b".{$60}*,o!07r*$-&)"dl52a#1"d{$60}o2\&!?x-(s$l*$-&
- m)*hb+%<b*2q5*$-$*0#/+p@%br!#1+,x(*<@,3,r,{$60}#b+q0%br!$4[,r,""g
- m(#$s,c{$60}{$60}{$60}>!9d@qr@q."fj(d-"32!$25-+($524d]2.b{$60}bjd13)"{$60}z($9#
- mld9#js$@.b"@,2{$60}z((x{$60}0c{$60}h!9<@4%:j-bq#3*tr-38@.b"7(%!6jc4l0trk
- mpba05jhv*:pr-38{$60};#{$60}r!9<@4%:j."q,0jtr-38@.b"7(%!6jc<l3$*kpba0
- m5jhx*:pr-38{$60}ec{$60}\!512lc{$60}@.b"+(,hh1$dd*#{$60}l1bdl.2pq*;(b02(@ir!4
- m4k(r-34{$60}k3!"!5br,2{$60}z((l@0t2r,""g(%br,{$60}"],$8%gb!02zhv+%12+%@{$60}
- mv#!+!?x)(%@l6"q8+%,@.b!%ll(h4%:j,bd{$60}^#!,!8l@*%,@kr{$60}q*2"g((t@
- m,s@p(#h@1d.r1d.k,0{$60}0,5{$60}%br!#1+.q,""o($-$ls@@ir"@,0{$60}u,5h%br!#
- m1+&r.""g(/x/(s$@.b"+($13l;(r,""g(#$s,3{$60}{$60}.s%d!8x{$60}03%v!3h{$60}8#%w
- m!8\@*bh@4d5-3u9%($u3+41/4r!&24q%("hj{$60})@q>{$60}69(,<h,30w*3lb4d5-
- m3u9%("a$14q%5$4i(%-%3$5#5$5$($u3+41/4r!&24q%4shb.id{$60}ss%y!8l@
- m346sl3{$60}@ir"9(du3+41/4r!-14y5($u54u0@0d4@4t5,14-4140a(b{$60}z((dr
- m,#,p{$60}{$60},r>@5!)+(b62(za2)!4d4@64]5($q)2t4@4u5212!!0d]55"!42$e3
- m("a9+txi(cm!){$60}{$60}:,gl%f3j+($$dlb).(b"g((d@-3(p{$60}#8r@@6+($1,l[(p
- m(*<@1d.r,"{$60}z((d@,30t,{$60}!%,hp%1d.r,"{$60}z($:r,0!z,i$%br#**$1))"@p
- m+$8i+#8l,2fr(bhb(*<@c2{$60}q-#<p(#h@1d.r1d.j,2{$60}z($:r1jlq{$60})4re@5&
- mld:j,2{$60}z((l@1k.r1$p@ir{$60}q-#(u{$60}*@rf@69(d9,55-(24y'+bxn(@"t,il%
- mgb!02zhq,@#a,j{$60}%f2{$60}z()db1de,15,@4d5-3u9%1"{$60}](cm&0slb("t@4%)%
- m4u,@2t59(@{$60}-,z4%gb!02zhr,2{$60}z(/x)($$l6"q9(#h@34&r0:i9k#(u-ji8
- mk#8u-3,v{$60}!\sj@6a^2!!)"{$60}z((d@-3{$60}p{$60}$xso@69(e)%34]624y'("([qr@s
- m-"d[rba$220h,"q&*2pq.2pq,rd[qr@s-"d{$60}@#/2!9<@4%:j,3{$60}l1%{$60}h1bfm
- m,c4v(#h@er!05jhy+$10*$8ij\(h4%:j,3{$60}ik#(u-@",,]0%gb!02zhq-0#*
- m,]8%1$dd*#{$60}l1bfr1$dd*#{$60}l1$pi.e-:*$8ile-:*$1,*3i$4"a&*;)$4"a$
- m3"dz0tph1bfr0tph1$pi{$60}-8sup5$3+)$3*lq{$60}-psv{$60}6.{$60}.(sv@4z{$60}/tsvp6/
- m("hj($-/4%d@0t)-($9)3$53("hj{$60}"<tw{$60}69(,<h,30w*3lb0t]062!#0dtm
- m1$]3(%1/($-"32u$3u,z(cj9{$60}&{$60}tw06+($-&l[(p(*<@f2)#3tu-3t1/4d4@
- m1$e214-43u)9($y/5"!,3t%$140b(#h@b2{$60}r,#,p{$60}(ptw@58lc{$60}@.b"%(d1%
- m5de#12!.54u"15(@5$\@0t]062!43r([6"{$60}z()d{$60}p#3?!8l@6+.r,""p(%bq
- mlc8t(*<@f2)"040@1$5624-%($y534)%4b$b(#h@b2{$60}r,#,p{$60}/0tx{$60}6+(%br
- m0t0@ir"9(d-!3dy/5"!#3u!9(%1/(%-!344@1$5624-%(b{$60}z((d@,c{$60}s,{$60}{$60}c
- m->$%@2!&lc$@i"!#1b{$60}z((l@rba$220h,2q&*2pv+#$il[$b*b(@ir{$60}q-3<p
- m{$60}$@ux@69($1))"@q+$8i(#h@gs$l0t0l,bq#3b0h1bfj(bq2(@!d->,%br!8
- mls@@ir"?(#(l6"pw(#h@b3$u-3{$60}{$60}c37d!4-&)+)#3b0h1bfj(bpbjlhh1$dd
- m*#$l1bdl,s$l,2fj(bq7(@"<->4%gs(l6"ps+$-&){$60}"p->8%br!$4[.q-c,@
- mir{$60}q-3,p{$60}+<uyp6@,@#w->@%6"2r(edb.h4b1de,12!%6$e35%,z($]615)7
- m4de412{$60}h62].*2([6"0@.b"+(%@dlb).(b"g(#$u-c{$60}{$60}"c;p!?(h0txd*$8i
- m*2q5*%@i{$60}!dv]06?,bq8+#,l0t8d{$60}$tv^@6+($13l3(p(*<@f2#'*#$x*3lb
- m0t)-($1/4r!%4e)/4ch@(cm$4r0@.b"),34v,{$60}!=-@x&gb!02zhr-"pq+#({$60}
- m:388!j{$60}q(#h@h#({$60}<38b!h(@1@"b-bp&f2{$60}z()db1de.25-(140@+2!04d53
- m4r!!($m%62(@.b"a^2!!)"{$60}z((du,3{$60}{$60}j#;.!sh{$60}rs;/!x\@*bh@0t]062!#
- m0dtm1$]3(%1/($u3+41/4r{$60}j*@#z-m{$60}'f2#'*#$t-rd[(d-/4%d@0t)-+41/
- m4r!43r!-4ru$3u,z(b{$60}z()d@.b"9{$60}{$60}twv@>+($1,l;(p(*<@,c{$60}s-0{$60}z-^0'
- mf2)-4ru$3u,@1$e214-43u)9($u54u0@0d4@3$]!1$5$($9)4e-4(@!c-^x'
- mf2{$60}z()db4%)%4u,@04y9($m%62(@.b"a^2!!)"{$60}z((d@-3$p{$60}&pw\p=&0[(p
- m{$60})lw]{$60}>!($:r,2"d($-&(#h@br#**$1))"@q+$8i+#8l,2fsl2(j(b"g(#(p
- m-#4{$60}ls?x!t9#ld9#jc$@.b!#)+)#3b0h1bd{$60}[3?y!yg**,0h1d,i+#(i.r(@
- m(co**$1))"@q+$8i+#$t+#$v*3o**$1))"@q+$8i+#,t*3lb.b([{$60}{$60}\x^@>-
- m,c{$60}u,"{$60}z()d@r"a-)"px*3lb+b([r2a-)"ps*0{$60}y./l'5%*r,"{$60}z((l@rba$
- m220h,2q&*2py+#$ilb)!(b"g(%12lc(u-0!#./p'c3(q,#{$60}{$60}23c]!x({$60}9cc^
- m!ydb1dq54ta)3d<n+bxb(#h@gb!02zhq,@"2./\'gb!02zhr,2{$60}z(/x)($$l
- m6"q9(#h@34&r0:i9k#(u-ji8k#8u-3,v{$60}+8x{$60}{$60}b9.b"9(d9)3$53($-/4$e%
- m1"{$60}](cm&0r{$60}z((dr,#,p{$60}+px{$60}0@z{$60}/(x{$60}@a8lm0h0r0l(bxb*2{$60}z((l@6+(p
- m(*<@322r0r2j(b{$60}@("{$60}@("{$60}@("{$60}@(b{$60}z((dr,#dp{$60}"{$60}y!pa8ll,h0r0ijc$@
- m.b#k(#h@6+)8js$@.b#l(/p@rba#)"q8+#$ilb(n(@!!.0p(322rr"c(*$,d
- m+%bk,2fj(b{$60}@("{$60}@("{$60}@(bpx*0!8.18(6"2rrba#)"q8jc$ijb(@("{$60}b{$60}&4y
- m({$60}a-)+)-)*i8){$60}!u.2h(322rr"a-)"pq,2d{$60}l3dk"(%)lc&d,3$z6"2rqrc&
- m*,hh320l22pq*2fo,3(w*3j+(%@dlb(n(k!8)+(b("(@ir!8)+(b7r({$60}r#dl
- m",hh320l22pq*;)8)"{$60}z(((@20{$60}&.bt(2;(x(#h@zr#]($fq,2"o(,hh320l
- m22pq*;(b7r(@.b#**$td+$dl,2fr(b{$60}b(#h@2;))js$@.b#l{$60}$4z+@a)lc$q
- m(#h@zr#]($fq.""o(,hh320l22pq*;(b7r(@.b#**$td+$dl,2fr(b{$60}b(#h@
- m2;))js$@.b#l{$60}$lz,@b.{$60}%$z,p@z{$60}%pz-{$60}b!2;(pi#{$60}{$60}?#hy"($@1%"r1$(@
- mi"!$0jhs,jph1$.k,2d@j2{$60}s,@"=.cx(br#"*$10*;(p(+{$60}@pba$4"fr,c(y
- m(*<@,c$t,{$60}"f.d@(@b!$4{$60}#2.e((f2).3r!&4d5%($u3+41/4r!$25)%0u1/
- m4ed@14y425)%4r(@.b".{$60}-hz7{$60}b"($d{$60}!cmp"(%)lc&dpra-)"dzet10jdfk
- m,2s&*,hh320l22pq*2d@kr{$60}q,c<z@@{$60}>.wh(@4fr,3&d,s$zer!$4*i)+#{$60}z
- m@@{$60}w.x0(et10jc(v+#(u-3j71%"j,c<l,34{$60}83n.")<@4%:j,3{$60}l1%"m,c4v
- m.i<@4%:j.2q$4*o"*%!6jc$p*:pr-38{$60}<#n8")\q+$-$+#(l0r0{$60}c3o\")x@
- m4$nj.2q44bpq(#h@_@d@6"q8+%@l4p"4._t(h#${$60}msl!"8l@4r"o(#$@ir!%
- mll(h4%:j,bd@.b"-,s@p(#h@c@#n.p8)6"2r(b{$60}@("{$60}@05-#("!315$@("(z
- mbr!44k(p(*<@6"2r(b{$60}@("{$60}@0de.("!04d<@("({$60}$3p0"41,ld1,jc$@.b!$
- m)++)*"(@(jk$*$1,*2ps*:i8){$60}{$60}p/!h)1"2r1"2jr"a-)"px*:hb("{$60}bjldh
- m320l,rd{$60}43pd"4-,*$1,*;+"*$10jc(v*:hr-3:lpba$4*hr-rd{$60}?3pn"5-:
- mll(h1%"j,c@ijc(u-js"*$10jc(y*:hv-34s-js"*$10jc,p*0"d/#@)1$dd
- m*#{$60}l1$pild0djldh(b{$60}@("{$60}@("{$60}@(jk$*%-:*2px*0"r/$()1%{$60}h1$pild10
- m{$60},{$60}\3{$60}e36ba$3"fr4uh{$60}qcq;"8x{$60}s#s""3h{$60}]3s#"8\@*bh@3$]!1"!#3tu-
- m3t1/4d4@1$]3($1)4d5#5$]262{$60}j*@{$60}c/<0)f2),3t%$24y'($-/34u/1$]2
- m12!$3u,@1$e214-43u)9+bxn(b{$60}z()d{$60}5sw%"8l@0t2s.""g()db0t)-1$]3
- m($1%5de#12!-55-4($)%(#x](#@a(b{$60}z((dr,#,p{$60}(4]r0f?,2q#1"pp+"(d
- m,"(zh2,q+$$d+$$d(#h@0t:rjs$@.b!1)++'*#,t*0"+/<h)zp#$/<l)gb!0
- m2zhr-rpq(#h@0k+"*%!6jc$q*:hr-3:lpba05jhq,bd@.b!4)++'*,(h4%:j
- m,3,i*0#3/<x)6++"*%!6jc$t*0#a/=@)br!8lc{$60}@ir#m{$60}!<^x@e8)+(b(b{$60}z
- m(($@2;)05jhq-2"d(%!6jc$ujebk,2{$60}z(%@dle@djl<hpba)*2d@.b""{$60}",^
- m#pi#1k)#1jhq{$60}$l^'@j+($-&lc{$60}@ir"9(d1)4tl](e$d6"11)"{$60}z()d@.b")
- m,c8u,{$60}!:/b@*0txd*$-&*;)8){$60}"9/c(*022rr"a8)*hb("{$60}@("{$60}@("{$60}@("{$60}@
- m("{$60}@("{$60}b+#$w*:i4)*k)*"(@("{$60}@("{$60}@(jk$*$*l,c4t*2px*0#'/cp*1$dd
- m*#$l0t8illdh(b{$60}@(jk$*$-&*2ps*:hb("{$60}@("!!4t,@("*j020{$60}[cy!"hl@
- m5"2sl2)3(b"g(,hh1$dd*#$l0t8i+#dl,rfr(d))3b({$60}_cy&"id@1$dd*#$l
- b0t8i{$60}{$60}0_6@kl{$60}!h_;@i#0;)"k#(u-b{$60}z(*{$60}q(#h@c@{$60}{$60}{$60}{$60}{$60}{$60}
- {$60}
- END
- BEGIN 640 LRR.BIN
- m{$60}(!,#(),7(-,a89,\x=,,(5,z(1,/8!,hx5,2xa,@(c+a{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}2*d{$60}a9"m(8{$60}@l?^i;r"3_ze5(*c_)){$60}p#zdp(*c_:""h_r20,{$60}(88*d%
- mc2"{$60}.&"m{$60}-u)$(t{$60}w6"i""p-w/#[8""3@*x,w""*@(i@j1h@6x"0{$60}6{$60}@ko\d
- md##.&"!'_rp-w""*@"";@(t@@"d/r0*p):{$60}{$60}()n{$60}f56{$60}r,{$60}&d/48j0@@6x"0
- m{$60}6"i{$60}2pb@#{$60}"j00@j/\@ko]@2(hi{$60}0h*"@hl(h{$60}0{$60}dd0(%n{$60}:){$60}!8""h_zd!
- m(*c_j0d@j/\@ko]x&"!'_rp-w""*@*gvh(j%{$60}h0#j0"%!"pb@#{$60}#($:!(%z!
- ml{$60}gf!*4$r0f0zqa88*gva0*f!!bibgu5@84#8{$60}{$60}(${$60}8.!{$60}p""b";@(t@@"d/
- mr0*0{$60}6"b{$60}j{$60}{$60}j0@l#=sp^zt{$60}w4d0c0#=k0s<d0+(t.gf{$60}\k0y&!(a{$60}2**0$*
- m"@h*"0(l(h{$60}0{$60}dd0(%n{$60}:){$60}!8""h_z4$(*c_j0$@j/\@ko]xj4"%!3@@1_]x
- m+{$60}w<h@*@{$60}*t{$60}w<t{$60}w=#x104i0/#rl0*-#-re!4e{$60}a06i""p-w/#[r-#=y@/*
- mt-@8($?_+{$60}w<((j{$60}().{$60}k@s<((j{$60}bht@@"d/r0)88*d.c0#_j?^-2h"-2x"b
- m!yu-@,h0^hu,@!a@s4j{$60}t!#l2x#0"xb8"aaibjbi]aa@c4j{$60}cdn{$60}a{$60}4@\8"0
- m&:t@@"d/r0op{$60}ca@(*:{$60}k4j{$60}kdn{$60}i{$60}60vv"m2h"n2x"d!4pf@j+_z#ci$k#z
- mb!#w&&d2r*b*8"!l@j({$60}p{$60}f0"$b8z0fh:*(!r&"&"r!^@h4(a@f$"j4(i@fd
- m"b{$60}f@i{$60}!8(4,a{$60}vb{$60}j{$60}{$60}l0r1!lbq#)$&r-#ty@wf!\k0[>8*i0k)"i{$60}2j0&%
- m"n8)i0g){$60}i{$60}&j0"%">8(q@o0nqa@..d"l{$60}&(kcz{$60}x{$60}'p!pj$!r8'i{$60}<8;42{$60}
- md{$60}'(8"#c@j+va@:bg(8'kcz{$60}3)&"('z"s4j{$60}t{$60}_l2x#0"dbi_xu*@(u+@&@@
- mc(%@{$60}{$60}{$60}@xx*b]h8"hir&{$60}xtk@xpl@r{$60}0@y{$60}!8*t^@,d"l{$60}%@k2n#k"r#&&d!
- md{$60}'((!"#8*d.c0#_j0"@{$60}"!^@b{$60}f@i{$60}!8(4"a{$60}.@#;$"c3z{$60}r0.0!zd\c2"{$60}
- m.&"@$+$"r0+0\:{$60}6l0*-/x#)!+#fh!&q{$60}hu!@,f!l-m*2di*c4"{$60}h!.q{$60}hu"
- m@,bq{$60}hu#@*{$60}8l0+)"="_h!jq{$60}ld"t+>@#k$"r0'0kzt_@{$60}h8:0&-18{$60}8;4"{$60}
- mc42{$60}k4*{$60}k$.{$60}..u$@+{$60}!b(u&@(q'@*t^@,d"t{$60}9.1x!n1h{$60}8k4:{$60}:0*-2("m
- m1x!i{$60}(u)@*gvh*"%!h0'j0&@{$60}*x_@""1@i{$60}!8*gvh*:%!h0'k46{$60}h{$60}"n0({$60}@
- md8*0{$60}6"i]j"fkd&{$60}&&"%!80#1@-ja02f{$60}phf{$60}qae!(4"bf4#a0,8i0)i]h4"
- mi0-ih(4#h{$60}*q{$60}id&{$60}(@0^&{$60}@1(2e!2d!t{$60}be!rd/j*4&8*4'h@1&"&k*t/jd
- m"&{$60}@1(2e"bd/a0je!2d!t{$60}^e"84&i0<i\{$60}4*a0=,q82b!{$60}8))@k*t/fe"h4(
- mi0<i#p4)a0>@{$60}kd&{$60})$"b!#xc$r{$60}8#bm)x#i]jth@.ff2bd'jjg_g4v{$60}8*{$60}.
- mc{$60}#_k2>{$60}k"b{$60}a0*${$60}zgeh{$60}"1{$60}j{$60}:l0*%#lbq{$60}h4/i0_)!9{$60}#3-.$j*4.('2$
- m2)a(j0"%"84*i0zd#r"2a&b%#vb%#dp(a:d.c0#_k4r{$60}\"zi{$60}(u,@*d"a6&i
- m{$60}84.k3^{$60}a6"i]j"@a0*${$60}z4.h{$60}{$60}@$(.0{$60}6#f#l9@t/#&8=#?k46{$60}a0zm0("%
- m8*d{$60}a6&i]j"fa0*${$60}z9ao4v{$60}\!"i{$60})u-@*4.h{$60}{$60}@$(/&{$60}\8#y@[f8>8#y@/&
- m8-#=&&"@#hp{$60}_zd"h{$60}"%#h0/a&"$8:4.i{$60}\@=(2${$60}@4"t{$60};f8-{$60}"yf'f#m{$60}"
- my@^e#lu(@*4/[4f{$60}d-nn/h{$60}&8"9arm#yj0"d8*9a8*5di&4@_x*0{$60}6"i]j"<
- ma6"$8:d{$60}a6*m/h{$60}*a6.e9*1e('2$a62$9<{$60}%d!rm)8"%8jd!kcz{$60}x{$60}'p{$60}jd#
- m+2:{$60}t{$60}6n)8#p{$60}h5c(#6&8*8/t{$60}(88"#)_y{$60}$c2"{$60}8*g_if/0{$60}j5ba6:@{$60}+%@
- m){$60}x0!jj]]hcp{$60}r#2_\c$9m#l&*5@96:%8){$60}"yf$xi6+e9h5bl{$60}+&8z5b!6/0
- mq"#,_qa@h{$60}z,{$60}/^%#h8/k2.{$60}k"2{$60}a62$94raab#ja9{$60}!8*5er060]!a@a0z&
- m4*d{$60}a5&%5(558*d{$60}a6*%8z94\{$60}2i{$60}!a@ie{$60}@qo^0!(t@@&"i_z93t{$60}*e4h5f
- mh{$60}{$60}@((>0{$60}6#p!y%@r,1ft/&$9abe8&5fa6"0{$60}n9a&*5b96:%8i{$60}"yf,xi5+e
- m9h52l{$60}+&4z54t{$60}:e4@53t+@@s/^e8@5c&&"e5/{$60}!{$60}*51\{$60}bi{$60}(51j0h88*55
- m*4#p"*g_a52i{$60}!a@(,__ii"&59{$60}'c2"{$60}(,s_8"0.${$60}rjo?:)\,?)#={$60}"a5&b
- m_qa@i5k-2("e6^u)@){$60}!8*5:i%l@=(2${$60}@4"t{$60}:e6j1;&f6m#<yem,8x<@
- m8x>0{$60}6"%"80*i60%9?{$60}2i62d9:8)af2f"h9e()*$3,>'k2>{$60}k"b{$60}a0*${$60}z{$60}:
- mi0f1{$60}h5dr*4*d0*%9:g_h{$60}^%"80*i62d92"2a*5di&4@+8.0{$60}6{$60}8i5qe8h5<
- mi5ue8x5=d{$60}+f7aa@h{$60}z,{$60}/\@j8:i{$60}(5da66%6x5<a5v%7jd"a5ji]j"<a6"$
- m8:t^@{$60}jhj0"%4h13(+:&d{$60}%@\{$60}8@c(>0x&"m)x"l*("%{$60}h0#h@"@'+5<d0+(
- mz.{$60}#d/8@tx088*{$60}.c{$60}#_a@^jj0{$60}@j8:i]j"<a6"$8:d{$60}h{$60}2%4h13(+:&l!+p
- m$*gvh)r%8(1a(#6&l{$60}-,6(a@h{$60}z,{$60}/^j(,;_d{$60}ri{$60}(tl@(ti@(tj@&{$60}@y(@@
- my(@@y(b-*8{$60}@y(b-*h"i{$60}(tl@"#db,db\{$60}c)0m#u(,s_8*{$60}{$60}(.2(r2+p!idm
- m@,c0\xpl@"#db,d@\/f-*x{$60}@y(c){$60}-#y(,s_8"#/_[{$60}%))!p{$60}6!h:"#,_tr+
- mb{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}%{$60}d-{$60}),{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}("$b(r0e)b<h*2hk
- m+"tn+s{$60}q,c,t-38w.#dz.sp]/c]{$60}p<+#q,7&q\c)rlo,s<[/t-'2t]35um?8
- mv=i;7%u>7\!!0d-$149'2$e*2tq-3d]045)35%565ua96mo<w=[?{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}){$60}{$60}{$60}{$60}
- m#0{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}@{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}"{$60}a(b,d)28g*"dj*rpm+b\p,3(s-#4v-s@y
- m.cl\/3x_0&%b8v1e9f=h:6ik;&un;w!q<g-t=79w>'ez6uq=7e\{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- m{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}!@
- m04)#1$5&1ta)2dm,34y/4%%24u155e=865i[?'u^?p{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}
- 2{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}{$60}!^{$60}{$60}{$60}{$60}
- {$60}
- END
- -----------------------------------------eND-OF-LRR100.UUA---
-