IMD 1.16: 31/05/2007 20:39:29 FOGCPM.147 --FOGCPM147DIRPATCHDOCDIRPATCHAZMK DIRPATCHHEXEXPROF DOCEXPROF NOTEXPROF ASMEXPROF RELEXPROF Z80EXTIME COMEXTIME DOC EXTIME Z80 !"FNK-KBD DOC#$FNKEYS ASMh%&'()*+,-./01KEYBD ASMe23456789:;<=>EXECDIALDOC*?@ABCDOP COMEFGHOP MQCmIJKLMNOPQRSTUVOPV COM WXOPV MQCKYZ[\]^_`abVDOP COM?cdefghijVDOP MQCklmnopqrstuvwxyzVDOP MQC{|}~VDOP MQCf-09-00 86 -CPM147 DOCBOLD CHR.FRENCHF ONT.REEDFONTEX1.This is the disk name.  use ron fowlers mload21.com to install dirpatch.hex into the cpm3 dir.com for the osborne executive and your dir.com will show remaining space. 1-11-85irpatch.hex into the cpm3 dir.com for the osborne executive and your dir.com will sho; Copyright 1984 by John M. Blalock ; ******************************** ; * * ; * DIRPATCH.AZM * ; * * ; * An extension to the * ; * Osborne Executive's * ; * CP/M Plus extended * ; * directory program. * ; * * ; * Written by: * ; * John M. Blalock * ; * Dec 10, 1984 * ; * * ; ******************************** ; The CP/M Plus operating system for the Osborne Executive ; computer has many nice features, including an extended ; directory function that gives useful information about the ; files on the disks. It's incomplete, however, since it ; does not tell you how much space is remaining on the disk. ; Normally, the program SHOW.COM must be used to get this ; information. Digital Research did leave a few bytes ; available in the beginning of DIR.COM for their copyright ; notice that can be overlaid with this patch. With it you ; will no longer have their copyright notice buried in the ; program, but the extended directory listing will tell ; you the space remaining on the disk. ; This patch was written in Z80 assembly language in order ; to take advantage of the Z80 op-codes that were used to ; keep the program short enough to fit in the available ; space. Unless you change to a non-Z80 machine they should ; cause no problems. ; To install this patch, assemble the source with ZASM.COM ; or extract and use the DIRPATCH.HEX file attached at the ; end of this source listing. A typical installation ; sequence follows: ; A>SID DIR.COM ; CP/M 3 SID - Version 3.0 ; NEXT MSZE PC END ; 3A00 3A00 0100 D7FF ; #RDIRPATCH.HEX ; NEXT MSZE PC END ; 041B 3A00 0100 D7FF ; #WDIR.COM,100,39FF ; 0072h record(s) written. ; #^C ; A> ; Now type DIR A: [A to see how your new extended directory ; program works! ; This program can be copied and used for non-commercial ; purposes only. Any other use violates the copyright of ; the author who wouldn't mind receiving payment for ; commercial usages. ; John M. Blalock, W7AAY, PO Box 39356, Phoenix, AZ 85069 BDOS EQU 0005 ORG 0106H ;START OF PATCH AREA PATCH: LD C,25 ;RETURN CURRENT DISK CALL BDOS ; IN REG A LD E,A ;PASS CURRENT DISK IN REG E LD C,46 ;GET DISK FREE SECTOR COUNT CALL BDOS ; -NOT K BYTES-IN (80) & (81) LD B,3 ;3 PASSES = DIVIDE BY 8 DIVLP: OR A ;CLEAR CARRY LD HL,0081H ;HIGH BYTE OF FREE SPACE RR (HL) ;DIVIDE BY TWO DEC HL ;LOW BYTE OF FREE SPACE RR (HL) ;DIVIDE BY TWO DEC B ;3 PASSES DONE ? JR NZ,DIVLP ;NO, THEN REPEAT LD B,'0' ;ASCII ZERO TO HUNDS LD C,B ; AND TENS REGISTERS LD A,(HL) ;GET FREE SPACE (<255K) HUND: SUB 100 ;ANY HUNDREDS? JR C,TENS ;NO, TRY TENS INC B ;YES, BUMP HUNDS DIGIT JR HUND ;AND LOOP TENS: ADD A,100 ;ADD BACK 100 TENLP: SUB 10 ;ANY TENS ? JR C,ONES ;NO, DO ONES DIGITS INC C ;YES, BUMP TENS DIGIT JR TENLP ;AND LOOP ONES: ADD A,10+'0' ;ADD TEN PLUS ASCII BIAS LD D,A ;PUT IN ONES DIGIT LD HL,NUMS ;POINT TO NUMBERS LD A,'0' ;STILL ZERO IF NONE ADDED CP B ;ANY HUNDREDS ? JR Z,NOHUND ;NO, SKIP IT LD (HL),B ;SAVE HUNDS IN MESSAGE NOHUND: INC HL ;POINT TO TENS POSITION CP C ;ANY TENS ? JR Z,NOTENS ;NO, SKIP IT LD (HL),C ;SAVE TENS IN MESSAGE NOTENS: INC HL ;POINT TO ONES POSITION LD (HL),D ;SAVE ONES IN MESSAGE LD DE,MSG ;POINT TO MESSAGE LD C,9 ;PRINT STRING FUNCTION CALL BDOS ;OUTPUT MESSAGE TO CONSOLE JP 0475H ;JUMP TO ORIGINAL EXIT POINT MSG DB 'Space Remaining = ' NUMS DB ' k',13,10,'$' LD C,D LD C,L LD B,D LAST EQU $ ;DON'T GO PAST 016FH ORG 0418H ;ORIGINAL JUMP TO EXIT JP PATCH ;JUMP TO OUR PATCH  END ; DIRPATCH.HEX: :100106000E19CD05005F0E2ECD05000603B7218121 :1001160000CB1E2BCB1E0520F40630487ED6643855 :10012600030418F9C664D60A38030C18F9C63A57F8 :100136002166013E30B828017023B9280171237267 :100146001151010E09CD0500C37504537061636535 :100156002052656D61696E696E67203D2020202002 :0A0166002020206B0D0A244A4D42B0 :03041800C3060117 :0000000000  1, answered, recent,, Return-Path: <@seismo.ARPA:noao!terak!jb@seismo.ARPA> Received: from seismo.ARPA by SIMTEL20.ARPA with TCP; Fri 14 Dec 84 22:27:46-MST Return-Path: Received: from noao.UUCP by seismo.ARPA with UUCP; Sat, 15 Dec 84 00:27:36 EST From: noao!terak!jb@seismo.ARPA Received: by noao.UUCP (4.12/4.7) id AA16599; Fri, 14 Dec 84 04:59:01 mst Date: Fri, 14 Dec 84 04:59:01 mst Message-Id: <8412141159.AA16599@noao.UUCP> To: noao!seismo!KPETERSEN@SIMTEL20.ARPA Subject: Bug in DIRPATCH.AZM *** EOOH *** Date: Friday, 14 December 1984 04:59-MST From: noao!terak!jb at seismo.ARPA To: noao!seismo!KPETERSEN at SIMTEL20.ARPA Re: Bug in DIRPATCH.AZM Keith, there was a minor bug in the version of DIRPATCH.AZM I sent you. Sorry... Here's the corrected version: ; Copyright 1984 by John M. Blalock ; ******************************** ; * * ; * DIRPATCH.AZM * ; * * ; * An extension to the * ; * Osborne Executive's * ; * CP/M Plus extended * ; * directory program. * ; * * ; * Written by: * ; * John M. Blalock * ; * Dec 10, 1984 * ; * * ; ******************************** ; The CP/M Plus operating system for the Osborne Executive ; computer has many nice features, including an extended ; directory function that gives useful information about the ; files on the disks. It's incomplete, however, since it ; does not tell you how much space is remaining on the disk. ; Normally, the program SHOW.COM must be used to get this ; information. Digital Research did leave a few bytes ; available in the beginning of DIR.COM for their copyright ; notice that can be overlaid with this patch. With it you ; will no longer have their copyright notice buried in the ; program, but the extended directory listing will tell ; you the space remaining on the disk. ; This patch was written in Z80 assembly language in order ; to take advantage of the Z80 op-codes that were used to ; keep the program short enough to fit in the available ; space. Unless you change to a non-Z80 machine they should ; cause no problems. ; To install this patch, assemble the source with ZASM.COM ; or extract and use the DIRPATCH.HEX file attached at the ; end of this source listing. A typical installation ; sequence follows: ; A>SID DIR.COM ; CP/M 3 SID - Version 3.0 ; NEXT MSZE PC END ; 3A00 3A00 0100 D7FF ; #RDIRPATCH.HEX ; NEXT MSZE PC END ; 041B 3A00 0100 D7FF ; #WDIR.COM,100,39FF ; 0072h record(s) written. ; #^C ; A> ; Now type DIR A: [A to see how your new extended directory ; program works! ; This program can be copied and used for non-commercial ; purposes only. Any other use violates the copyright of ; the author who wouldn't mind receiving payment for ; commercial usages. ; John M. Blalock, W7AAY, PO Box 39356, Phoenix, AZ 85069 ; Revised to fix bug that caused 100k Space Remaining to be ; displayed as 1 0k Space Remaining. JMB 12/15/84 BDOS EQU 0005 ORG 0106H ;START OF PATCH AREA PATCH: LD C,25 ;RETURN CURRENT DISK CALL BDOS ; IN REG A LD E,A ;PASS CURRENT DISK IN REG E LD C,46 ;GET DISK FREE SECTOR COUNT CALL BDOS ; -NOT K BYTES-IN (80) & (81) LD B,3 ;3 PASSES = DIVIDE BY 8 DIVLP: OR A ;CLEAR CARRY LD HL,0081H ;HIGH BYTE OF FREE SPACE RR (HL) ;DIVIDE BY TWO DEC HL ;LOW BYTE OF FREE SPACE RR (HL) ;DIVIDE BY TWO DEC B ;3 PASSES DONE ? JR NZ,DIVLP ;NO, THEN REPEAT LD B,'0' ;ASCII ZERO TO HUNDS LD C,B ; AND TENS REGISTERS LD A,(HL) ;GET FREE SPACE (<255K) HUND: SUB 100 ;ANY HUNDREDS? JR C,TENS ;NO, TRY TENS INC B ;YES, BUMP HUNDS DIGIT JR HUND ;AND LOOP TENS: ADD A,100 ;ADD BACK 100 TENLP: SUB 10 ;ANY TENS ? JR C,ONES ;NO, DO ONES DIGITS INC C ;YES, BUMP TENS DIGIT JR TENLP ;AND LOOP ONES: ADD A,10+'0' ;ADD TEN PLUS ASCII BIAS LD D,A ;PUT IN ONES DIGIT LD HL,NUMS ;POINT TO NUMBERS LD A,'0' ;STILL ZERO IF NONE ADDED CP B ;ANY HUNDREDS ? JR Z,NOHUND ;NO, SKIP IT LD (HL),B ;YES, SAVE HUNDS IN MESSAGE NOHUND: INC HL ;POINT TO TENS POSITION JR NZ,HUNDS ;SAVE TENS IF HAD HUNDS CP C ;ANY TENS ? JR Z,NOTENS ;NO, SKIP IT HUNDS: LD (HL),C ;SAVE TENS IN MESSAGE NOTENS: INC HL ;POINT TO ONES POSITION LD (HL),D ;SAVE ONES IN MESSAGE LD DE,MSG ;POINT TO MESSAGE LD C,9 ;PRINT STRING FUNCTION CALL BDOS ;OUTPUT MESSAGE TO CONSOLE JP 0475H ;JUMP TO ORIGINAL EXIT POINT MSG DB 'Space Remaining = ' NUMS DB ' k',10,'$' LD C,D LD B,D LAST EQU $ ;DON'T GO PAST 016FH ORG 0418H ;ORIGINAL JUMP TO EXIT JP PATCH ;JUMP TO OUR PATCH END  ;AND LOOP TENS: ADD A,100 ;ADD BACK 100 TENLP: SUB 10 ;ANY TENS ? JR C,ONES ;NO, DO ONES DIGITS INC C ;YES, BUMP TENS DIGIT JR TENLP ;AND LOOP ONES: ADD A,10+'0' ;ADD TEN PLUS ASCII BIAS LD D,A ;PUT IN ONES DIGIT LD HL,NUMS ;POINT TO NUMBERS LD A,'0' ;STILL ZERO IF NONE ADDED CP B ;ANY HUNDREDS ? JR Z,NOHUND ;NO, SKIP IT LD (HL),B ;YES, SAVE HUNDS IN MESSAGE NOHUND: INC HL ;POINT TO TENS POSITION JR NZ,HUNDS ;SAVE TENS IF HAD HUNDS CP C ;ANY TENS ? JR Z,NOTENS ;NO, SKIP IT HUNDS: LD (HL),C ;SAVE TENS IN MESSAGE NOTENS: INC HL ;POINT TO ONES POSITION LD (HL),D ;SAVE ONES IN MESSAGE :100106000E19CD05005F0E2ECD05000603B7218121 :1001160000CB1E2BCB1E0520F40630487ED6643855 :10012600030418F9C664D60A38030C18F9C63A57F8 :100136002168013E30B8280170232003B9280171D7 :1001460023721153010E09CD0500C3750453706166 :1001560063652052656D61696E696E67203D20207A :0A01660020202020206B0A244A42CA :03041800C3060117 :0000000000  W. vanRiper 17 June 1985 *** exprof *** This is a rudimentary profiler until a better one comes along. It was written in response to my frustration regarding the Software Toolworks c compiler, which is supplied with a profiler for systems with a RTC in memory, and the recent Dr. Dobbs article on a program monitor for CP/M 2.2. Neither can be easily adapted for use on the Exec. Calling exprof from either c or assembly language toggles a counter. A second call shuts it off, storing the time between calls internally. Supplying an optional parameter displays accumulated time to the console, along with a number that you pass to the function. Like this: from c: ------ main() { prof(); /* toggles counter on */ slowrout(); /* call the routine you want to time */ prof(0); /* toggles counter off */ prof(3,1); /* let's call this routine #3 and toggle display */ } slowrout() { int ii; for(ii=1;ii < 1000;ii++) { (lots of time consuming things); (more time consuming things); } } from assembly language: ---------------------- extrn prof ; ld hl,0 ;zero signifies toggle push hl call prof pop hl ;tidy stack . . (perform various time-consuming things) . . ld hl,0 ;all done with what we want timed push hl call prof ;so toggle timer off pop hl ; ld hl,3 ;now display how long it took for routine #3 push hl ld hl,1 ;1 toggles display and zeros out counter push hl call prof pop hl pop hl ; ret result: routine: 3 total time: 62 ************************* alternately, you could put the timer toggle in the subroutine: main() { slowrout(); /* call is toggled in slowrout() */ prof(3,1); /* display when slowrout() is done wasting CPU time */ } slowrout() { int ii; prof(0); for(ii=1;ii < 1000;ii++) { (do various time consuming things); (more time-consuming things); } prof(0); }  When first called, prof looks at the 0-255 counter (RTC overflow at port 1ah). A second call causes it to look again, and to store the interval between first and second calls. This can be displayed as above, or prof can be called two more times, in which case the stored time from the initial two calls is incremented by the time between the second two, and so on. Any even number of calls without toggling the display causes the internal counter to be incremented. As long as there is an even number of ON-OFF toggles everything is ok and when you send prof the 1 the cumulative time will be displayed. It's up to you to keep track of things. 255 clock ticks on the Exec are about 4.27 sec, so one tick is about .017 sec. If the routine takes less time than this it will display as zero. If you wait for more than 4.27 sec. between calls to prof you will miss 4.27 secs from the maximum time that can be stored in a 16-bit word which is about ffffh * .017 secs/tick = 1114 secs = 18 min. approximately. The advantage to prof is that it is simple so there is little processing overhead. The main problem is that successive calls to prof must be more than .017 secs and less than 4.27 seconds apart. For my own use this is not a limitation - less than .017 seconds - who cares! - more than 4.27 seconds - use a stopwatch!  For my own use this is not a limitation - less number of calls without toggling the display causes the internal counter to be incremented. As long as there is an even number of ON-OFF toggles everything is ok and when you send prof the 1 the cumulative time will be displayed. It's up to you to keep track of things. 255 clock ticks on the Exec are about 4.27 sec, so one tick is about .017 sec. If the routine takes less time than this it will display as zero. If you wait for more than 4.27 sec. between calls to prof you will miss 4.27 secs from the maximum time that can be stored in a 16-bit word which is about ffffh * .017 secs/tick = 1114 secs = 18 min. approxim These are two routines for the Osborne Executive, tested for bios vers. 1.1 and 1.11 files are: exprof.asm RMAC-compatible source for profiler exprof.rel relocatable object module exprof.z80 ZASM-compatible source (M80 with minor changes) time.obj set date and time time.z80 They are released to the public domain in the faith that they have utility but no commercial potential. 17 June 1985 W. vanRiper leased to the public domain in the faith t; ; EXPROF.ASM 06/17/85 W. van Riper ; ; This routine is for the Osborne Executive and provides rudimentary ; profiling capability. It avoids the problems caused by the bank- ; switching arrangement that makes fooling around with the bios ; jump table so difficult. It gets a count from the RTC overflow ; in port 1ah, which cycles from 1 to 255 in about 4.27 sec. ; The readout is in clock ticks, each tick being about .017 sec. ; ; Usage: from c - prof(0); turns on count ; prof(0); turns off count (count is maintained ; internally up to 0ffffh ticks, ; which is about 18 min.) ; prof(3,1); turns on display with label #3 ; ; from assembly - lxi h,0 toggles count ; push h ; call prof ; ; lxi h,2 turns on display of accumulated ; push h time with label #2 ; lxi h,1 ; push h ; call prof ; ; (remember to take care of the stack when passing parameters in this fashion) ; public prof ; ; called db 0 then ds 1 now ds 1 total dw 0 ; prof pop b pop h push h push b mov a,h ;if hl is 0 then just display total cpi 0 jnz about mov a,l cpi 1 jz showit ; about lda called ;get current status (0 or 1) xri 1 ; =1 if 0 in (called), =0 if 1 in called jz call2 ;jump if this is the second call sta called ;set flag if this is the first time through ; call1 in 1ah ;get number lda then ;and put in (then) for the next time ret ; call2 in 1ah ;get number sta now ;and put in (now) for safe keeping ; ; lda then ;get old time in a mov b,a ;stash old time in b lda now ;get current time in a cmp b ;new - old jp displ0 ;if new > old then go display result ; lda then ;put old in b mov b,a mvi a,255 ;get difference between 255 and old sub b mov b,a ;put it in b lda now ;add it to current time for displacement add b jmp displ1 ; displ0 sub b displ1 lhld total xchg mov l,a mvi h,0 ; dad d shld total ret ; ; showit call crlf call print db 'routine: ',0 pop b pop d pop h push h push d push b call prhl call crlf ; call print db 'total time: ',0 lhld total call prhl call crlf lxi h,0 shld total ret ; ; print pop h ;in-line print - see R. CONN's SYSLIB - he wrote mov a,m ; the book on doing this right... inx h ;move pointer push h ; ora a rz mov e,a ;send character to console mvi c,2 call 005 jmp print ; ; crlf push b push d push h push psw mvi c,2 mvi e,0dh call 005 mvi c,2 mvi e,0ah call 005 pop psw pop h pop d pop b ret ; ; prhl push psw push b push d push h mvi b,1 ; lxi d,10000 call prhl1 lxi d,1000 call prhl1 lxi d,100 call prhl1 lxi d,10 call prhl1 mov a,l adi '0' call chout pop h pop d pop b pop psw ret ; prhl1 mvi c,0 ;prints hl in decimal to console - based prhl2 mov a,l ;on Richard Conn's PHLFDC sub e mov l,a mov a,h sbb d mov h,a jc prhl3 inr c jmp prhl2 prhl3 mov a,l add e mov l,a mov a,h adc d mov h,a mov a,c ora a jnz prhl4 ora b rnz prhl4 mvi b,0 mov a,c adi '0' ; chout push b push d push h mvi c,2 mov e,a call 005 pop h pop d pop b ret vi b,0 mov a,c adi '0' ; chout push b push d push h mvi c,2 moight... inx h ;move pointer push h ; ora a rz mov e,a ;send character to console mvi c,2 call 005 jmp print ; ; crlf push b push d push h push psw mvi c,2 mvi e,0dh call 005 mvi c,2 mvi e,0ah call 005 pop psw pop h pop d pop b ret ; ; prhl push psw push b push d push h mvi b,1 ; lxi d,10000 call prhl1 lxi d,1000 call prhl1 lxi d,100 call prhl1 lxi d,10 call prhl1 mov a,l adi '0' call chout pop h pop d pop b pop psw ret ; prhl1 mvi c,0 ;prints hl in decimal to console - based prhl2 mov a,l ;on Richard Conn's PHLFDC sub e mov l,a movѠE$h(PROF@0rO _URPpITPKl42@GP ʢ|HTè x-0Ȋ2YtcFn2 EjYg@8o:MeͶ :!T ?ܫvA|f@ ;j^x )<\- %j@@Nͻ@ w@&@6A@m> h^,p7Fv0o>"畻 ,`0b\}8Z,L; ; EXPROF.Z80 06/17/85 W. van Riper ; ; This routine is for the Osborne Executive and provides rudimentary ; profiling capability. It avoids the problems caused by the bank- ; switching arrangement that makes fooling around with the bios ; jump table so difficult. It gets a count from the RTC overflow ; in port 1ah, which cycles from 1 to 255 in about 4.27 sec. ; The readout is in clock ticks, each tick being about .017 sec. ; ; Usage: from c - prof(0); turns on count ; prof(0); turns off count (count is maintained ; internally up to 0ffffh ticks, ; which is about 18 min.) ; prof(3,1); turns on display with label #3 ; ; from assembly - ld hl,0 toggles count ; push hl ; call prof ; ; ld hl,2 turns on display of accumulated ; push hl time with label #2 ; ld hl,1 ; push hl ; call prof ; ; (remember to take care of the stack when passing parameters in this fashion) ; public prof ; ; called db 0 then ds 1 now ds 1 total dw 0 ; prof pop bc pop hl push hl push bc ld a,h ;if hl is 0 then just display total cp 0 jp nz,about ld a,l cp 1 jp z,showit ; about ld a,(called) ;get current status (0 or 1) xor 1 ; =1 if 0 in (called), =0 if 1 in called jp z,call2 ;jump if this is the second call ld (called),a ;set flag if this is the first time through ; call1 in a,(1ah) ;get number ld (then),a ;and put in (then) for the next time ret ; call2 in a,(1ah) ;get number ld (now),a ;and put in (now) for safe keeping ; ; ; jp displ0 ; ; ld a,(then) ;get old time in a ld b,a ;stash old time in b ld a,(now) ;get current time in a cp b ;new - old jp p,displ0 ;if new > old then go display result ; ld a,(then) ;put old in b ld b,a ld a,255 ;get difference between 255 and old sub b ld b,a ;put it in b ld a,(now) ;add it to current time for displacement add b jp displ1 ; displ0 sub b displ1 ld l,a ld h,0 ; ld de,(total) add hl,de ld (total),hl ret ; ; showit call crlf call print db 'routine: ',0 pop bc pop de pop hl push hl push de push bc call prhl call crlf ; call print db 'total time: ',0 ld hl,(total) call prhl call crlf ld hl,0 ld (total),hl ret ; ; print pop hl ;in-line print - see R. CONN's SYSLIB - he wrote ld a,(hl) ; the book on doing this right... inc hl ;move pointer push hl ; or a ret z ld e,a ;send character to console ld c,2 call 005 jp print ; ; crlf push bc push de push hl push af ld c,2 ld e,0dh call 005 ld c,2 ld e,0ah call 005 pop af pop hl pop de pop bc ret ; ; ; prhl push af ;prints number in hl in decimal to con: push bc ;patterned after Richard Conn's PHLFDC push de push hl ld b,1 ld de,10000 call prhl1 ld de,1000 call prhl1 ld de,100 call prhl1 ld de,10 call prhl1 ld a,l add a,'0' call chout pop hl pop de pop bc pop af ret ; prhl1 ld c,0 prhl2 ld a,l sub e ld l,a ld a,h sbc a,d ld h,a jp c,prhl3 inc c jp prhl2 prhl3 ld a,l add a,e ld l,a ld a,h adc a,d ld h,a ld a,c or a jp nz,prhl4 or b ret nz prhl4 ld b,0 ld a,c add a,'0' ; ; ; chout push bc push de push hl ld c,2 ld e,a call 005 pop hl pop de pop bc ret  ld e,a ;send character to console ld c,2 call 005 jp print ; ; crlf push bc push de push hl push af ld c,2 ld e,0dh call 005 ld c,2 ld e,0ah call 005 pop af pop hl pop de pop bc ret ; ; ; prhl push af ;prints number in hl in decimal to con: push bc ;patterned after Richard Conn's PHLFDC push de push hl ld b,1 ld de,10000 call prhl1 ld de,1000 call prhl1 ld de,100 call prhl1 ld de,10 call prhl1 ld a,l add a,'0' call chout pop hl pg\ hour: ͪ2ͪ!o~!w\ minute: ͪ2ͪ!o~!w\\enter month: ͪG2ͪ!2o&"\ day: ͪG2ͪ!o&"!:G>_[ "~#X B i / 448   y  yG>GO> ͖N > ͖> ͖ Җʖʖʖ ʖ ʖ>^͖@͖O*. 0ڿ  ڿҿ>  W. vanRiper 17 June 1985 *** extime *** This is a short routine that allows you to set the date and time without adding punctuation characters. I constantly crash my system with crazed assembly routines and hate to go through the business of setting the time with the Osborne-supplied utility. This file is only 1k. I use it with George Peace's wonderful EXCLOCK. usage: extime displays: enter month: 06 <- you enter 2 digits day: 17 <- two more hour: 03 <- two more minute: 55 <- two more To reassemble you'll need Richard Conn's SYSLIB, either 2.X or 3.X. It is currently set up for 1985, and to change this you'll need to change the number of days since 1/1/78, which is the way DRI always calculates time. To patch the .COM file: locations 01EA,01EB currently contain FD,09 which is the offset to 1985 to get the offset to 1986: add 365 (016D) to this, giving 0B6A and change FD,09 to 6A,0B for 1986 to get the offset to 1987: add another 365 for 1987, etc. By the way, there is a default date in CPM3.SYS which is 01/01/82 for my system. You can change this with DU or a similar utility so that the new date is in the SCB when the system boots. There is no use for this unless you change it every day.... y so that the new date is in the SCB when the system boots. There is no use for this unlage: extime displays: enter month: 06 <- you enter 2 digits day: 17 <- two more hour: 03 <- two more minute: 55 <- two more To reassemble you'll need Richard Conn's SYSLIB, either 2.X or 3.X. It is currently set up for 1985, and to change this you'll need to change the number of days since 1/1/78, which is the way DRI always calculates time. To patch the .COM file: locations 01EA,01EB currently contain FD,09 which is the offset to 1985 to get the offset to 1986: add 365 (016D) to this, giving 0B6A and change FD,09 to 6A,0B for 1986 to get the offset to 1987: ; ;17 June 1985 W. vanRiper ; ;extime.z80 - sets time in SCB for Osborne Executive ;uses R. Conn's SYSLIB vers 2.X or 3.X for display routines ; extrn bin,print,crlf,cath ; months equ 0f8f4h hours equ 0f8f6h mins equ 0f8f7h temp ds 1 tempm ds 2 tempd ds 2 mcnt ds 1 ; call getday ; ; call crlf call print db ' hour: ',0 ; call bin ;get first ascii digit call cath ;convert it to hex ld (temp),a ;store it in (temp) call bin ;get second digit in a call cath ; ld hl,temp ;memory location for RLD swap rld ;memory now has packed BCD number ld a,(hl) ;put it in a ld hl,hours ld (hl),a ;set the hours ; call crlf call print db ' minute: ',0 ; call bin ;get first ascii digit call cath ;convert it to hex ld (temp),a ;store it in (temp) call bin ;get second digit in a call cath ; ld hl,temp ;memory location for RLD swap rld ;memory now has packed BCD number ld a,(hl) ;put it in a ld hl,mins ld (hl),a ;set the minutes call crlf ; ret ; ; ; getday call crlf call print db 'enter month: ',0 ; call bin ;get first ascii digit call cath ;convert it to hex rlca ;multiply by 10 ld b,a ;save 2*a in b temporarily rlca rlca add a,b ;add 8*a and 2*a = 10*a ld (mcnt),a ;store it in (mcnt) ; ; call bin ;get second digit in a call cath ; ld hl,mcnt ;add it to number in (mcnt) add a,(hl) ld (mcnt),a ;store result in (mcnt) ld l,a ;also store result in (tempm) ld h,0 ld (tempm),hl ; ; call crlf call print db ' day: ',0 ; call bin ;get first ascii digit call cath ;convert it to hex rlca ;multiply by 10 ld b,a ;2*a temporarily in b rlca rlca add a,b ld (temp),a ;store it in (temp) ; call bin ;get second digit in a call cath ld hl,temp ;add it to number in (temp) add a,(hl) ld l,a ;put result in (tempd) ld h,0 ld (tempd),hl ; ld hl,0 ;clear out hl ld de,table ;get start of table ld a,(mcnt) ;put month count in a ld b,a ; and then in b ld a,0 ;clear out a loop0 ld a,(de) ;get number of days push de ld e,a ;put number of days in de ld d,0 add hl,de ;add to total in hl pop de ;get back original address inc de ;move it along djnz loop0 ; ld de,(tempd) ;get day of month in de add hl,de ;add to day total from months ld de,9fdh ;offset to 1985 add hl,de ; ; ld (months),hl ret ; table db 0 db 31 db 28 db 31 db 30 db 31 db 30 db 31 db 31 db 30 db 31 db 30 db 31 ; ; hl ret ; table db 0 db 31 db 28 db 31 db 30 db 31 db 30 db 31 db 31 db 30 db 31 db 30 db 31 ; a ;multiply by 10 ld b,a ;2*a temporarily in b rlca rlca add a,b ld (temp),a ;store it in (temp) ; call bin ;get second digit in a call cath ld hl,temp ;add it to number in (temp) add a,(hl) ld l,a ;put result in (tempd) ld h,0 ld (tempd),hl ; ld hl,0 ;clear out hl ld de,table ;get start of table ld a,(mcnt) ;put month count in a ld b,a ; a  FNK-KBD.DOC ----------- Instructions for FNK-KBD.LBR E.Meyer - 6/86 FNK-KBD.LBR contains the Z80 source code for the latest releases of two popular utilities for the Osborne Executive computer: FNKEYS.ASM v2.1a KEYBD.ASM v2.0a See FNKEYS21.LBR and KEYBD20.LBR for the programs and instruction (COM and DOC files) themselves. I am keeping the source code separate, as I assume relatively few users will be interested in it. The two programs are extremely similar: they have the same command syntax, they modify and store information located in the same area of RAM (bank 8 addresses 2000-2FFF, the "ROM's RAM"). Essentially, only the code involved in displaying and editing the values differs. These programs are written in relatively standard Zilog mnemonics, and should assemble with relatively little modification with any Z80 assembler. (I used SLR's Z80ASM, which is *fast*, inexpensive, and highly recommended -- SLR Systems, 1622 N Main St, Butler PA 16001, (800) 833-3061.) This is the first time the source code for these programs has been released. I've tried to clean it up and document it reasonably, but my standards for this sort of thing aren't terribly high. I hope that other Executive owners will find this code instructive. There are a number of other useful settings that can be changed by manipulating bytes in Bank 8; see the Executive Technical Manual for details. ----- Eric Meyer, 427 N. Washington, Bloomington IN 47401 ----- ee the Executive Technical Manual for details. -----in the same area of RAM (bank 8 addresses 2000-2FFF, the "ROM's RAM"). Essentially, only the code involved in displaying and editing the values differs. These programs are written in relatively standard Zilog mnemonics, and should assemble with;*** FNKEYS.ASM Osborne Executive Function Key Utility ;*** Version 2.1a - E.Meyer 6/86 ;*** This code is for nonprofit use only. ; ;Should assemble with most Z80 assemblers (I use SLR Z80ASM) ; ;>>> If you create and circulate a modified version of this ;>>> program, give credit where it's due, but DO NOT call it ;>>> "FNKEYS 2.2" etc -- create your own name. ; ; Syntax: A>FNKEYS source [dest] (use * for RAM) ; See FNKEYS.DOC for further details ; ; NOTE: The tricky thing in this program is dealing with Bank 8 ; of RAM, where the function keys are stored in the ROM's RAM. ; Bank 8 has to be switched in; and it will overshadow the lower ; 16k of the TPA. Thus the code that does the bank switching, ; and the buffers that hold the data for the swap, have to be ; above address 4000H. ; The file format (.FNK) in which keys are stored by FNKEYS is ; exactly identical to the format in RAM. Only the key definition ; bytes are significant, however; all other bytes (which have other ; functions in RAM) are ignored. ; ; FBUF EQU 4000H ;start of safe data buffer FKOFF EQU 014DH ;offset of start of key table in FBUF FKLEN EQU 0200H ;length of keys in FBUF (note SETUP only uses 100H) FBUF2 EQU 4400H ;duplicate buffer, for copying HILDIR EQU 4800H ;place to put bank switch routine STRING EQU 4810H ;place to put new definition string ; FKRAM EQU 2155H ;address of fnkeys in bank 8 CTLESC EQU 2095H ;address of ctl-ESC in keyboard tables, bank 8 CTLCR EQU 209AH ;address of ctl-RET in tables CTLCOD EQU 08EH ;use this for ctl-RET (like SETUP) CTLCD2 EQU 08FH ;and this for ctl-ESC LEFTAR EQU 08DH ;left arrow code (for correction) ; ; ORG 0100H ; LD SP,STACK CALL MSG DB 'FNKEYS 2.1a (06/86) - Osborne Executive',CR,LF,0 LD HL,B8LDIR LD DE,HILDIR LD BC,B8BYTS LDIR ;move B8LDIR code up to HILDIR LD C,ERRM LD E,0FFH CALL BDOS ;set Error Mode to Return LD C,GDRV CALL BDOS LD (CURDSK),A ;save current disk LD A,(FCB2) OR A JR NZ,DODEF ;if no dest disk...  LD HL,FCB2+1 ;take care of absent dest LD A,(HL) CP ' ' JR NZ,DODEF LD B,8 ;turn " " into "*" LP1: LD (HL),'?' INC HL DJNZ LP1 DODEF: LD HL,FCB+9 LD A,(HL) ;default filetypes = FNK CP ' ' CALL Z,DEFTYP LD HL,FCB2+9 LD A,(HL) CP ' ' CALL Z,DEFTYP LD HL,FCB2 LD DE,ARG2 LD BC,12 ;copy "dest" filename.... LDIR XOR A ;... into a blank fcb LD B,24 DDFLP: LD (DE),A INC DE DJNZ DDFLP ; ;--- read in the desired function keys ; CALL MSG DB 'Reading...',0 LD A,(FCB+1) CP '?' JP Z,RRAM ;"*" is RAM source CP ' ' JP Z,RDISK ;no file? read sys trks. ; RFILE: LD DE,FCB ;read in from file LD C,FOPN CALL BDOS INC A JP Z,FBAD LD DE,FBUF LD B,8 RFLP: CALL RFSBR ;read 8 sectors LD HL,128 ADD HL,DE EX DE,HL DJNZ RFLP JP GOTIT RFSBR: PUSH DE ;subroutine to read record PUSH BC LD C,SDMA CALL BDOS LD DE,FCB LD C,RSEQ CALL BDOS POP BC POP DE OR A JP NZ,RBAD RET ; RDISK: LD A,(FCB) ;read from sys trks OR A JP  Z,OBAD CP 3 JP NC,OBAD ;A or B only. LD HL,FBUF CALL DOTRK2 ;read track 2 block 4 into FBUF JP GOTIT ; RRAM: LD HL,FKRAM ;read from RAM. LD DE,FBUF+FKOFF LD BC,FKLEN CALL HILDIR ; ;--- we now have the keys desired in the buffer ; GOTIT: CALL FREE ;quick check for data integrity LD A,B ;(cannot appear to have more than FKLEN free) CP HIGH(FKLEN) JP NC,DATERR LD HL,FCB ;decide whether to edit? LD DE,ARG2 LD B,12 GOTLP: LD A,(DE) ;just EDIT if source = dest INC DE CP (HL) INC HL JR NZ,GOTLPF DJNZ GOTLP JR EDITY GOTLPF: LD A,(FCB+1) ;just LOAD if source=disk, dest=* CP '?' JR Z,EDITQ ;(otherwise ASK if want to Edit) LD A,(ARG2+1) CP '?' JP Z,SAVE EDITQ: CALL MSG DB ' Edit keys? (Y/N): ',0 CALL INP CALL UCASE CALL ECHO CP 'N' JP Z,SAVE EDITY: LD HL,FBUF2 ;YES, want to edit LD (HL),CTLCOD LD DE,CTLCR LD BC,1 CALL HILDIR ;set up ctl-RET code LD (HL),CTLCD2 LD DE,CTLESC LD BC,1 CALL HILDIR ;and ctl-ESC CALL MSG DB CLS,ESC,'f' ;disable fnkeys DB 'FNKEYS Function/Arrow Key Utility',CR,LF DB ' v2.1a (c)1986 E.Meyer',CR,LF DB '---------------------------------',0 ; EDIT: CALL DISPLA EDIT0: CALL MSG DB CR,'Select <0-L>, ESC to clear, or RET to save to ',0 LD A,(ARG2+1) CP '?' JR NZ,EDIT1 CALL MSG ;say what the dest is. DB 'RAM',0 JR EDIT2 EDIT1: LD A,(ARG2) OR A JR NZ,EDIT1A LD A,(CURDSK) INC A EDIT1A: ADD 'A'-1 CALL TYP LD A,':' CALL TYP LD HL,ARG2+1 LD A,(HL) CP ' ' JR Z,EDIT2 LD B,8 CALL BMSG PUSH HL LD A,'.' CALL TYP POP HL LD B,3 CALL BMSG EDIT2: CALL MSG DB ': ',0 CALL INP CALL UCASE CP BRK JP Z,ABORT CP ESC JP Z,ZAP CP CR JP Z,EQUIT LD (GSCHR),A ;put char in input prompt CALL ENCODE JP C,BADKEY LD (KEYNUM),A ;code is 0-9 plus 10-13 for arrows CALL MSG DB CR,ESC,'T',ESC,')' DB '(^ESC quits, ^RET saves, <- corrects)',ESC,'(',CR,LF,0 CALL GETSTR CALL NC,CHANGE JP EDIT BADKEY: LD A,BEL ;oops. CALL TYP JP EDIT0 ; ZAP: LD DE,FBUF+FKOFF ;wipe it all out XOR A LD B,10 ZAPLP: LD (DE),A INC DE DJNZ ZAPLP LD HL,CPMARR ;but keep std CP/M arrows LD B,8 LDIR JP EDIT CPMARR: DB 1,'K'-40H,1,'L'-40H,1,LF,1,BS ; RESTOR: LD HL,FBUF2 ;restore ctl-RET,ctl-ESC LD (HL),CR LD DE,CTLCR LD BC,1 CALL HILDIR LD (HL),ESC LD DE,CTLESC LD BC,1 CALL HILDIR CALL MSG DB ESC,'e',0 ;reenable fnkeys RET ; EQUIT: CALL RESTOR LD A,CLS CALL TYP ; ;--- keys edited, if desired - now write them ; SAVE: CALL MSG DB ' Saving...',0 LD A,(ARG2+1) CP '?' JP Z,WRAM ;"*" = RAM dest CP ' ' JP Z,WDISK ;no file? to sys trks. ; WFILE: LD DE,ARG2 ;write out to file LD C,FDEL CALL BDOS LD DE,ARG2 LD C,FMAK CALL BDOS INC A JP Z,WBAD LD DE,FBUF LD B,8 WFLP: CALL WFSUB ;write 8 records LD HL,128 ADD HL,DE EX DE,HL DJNZ WFLP LD DE,ARG2 LD C,FCLO CALL BDOS INC A JP Z,WBAD JP DONE WFSUB: PUSH DE ;subroutine to write a record PUSH BC LD C,SDMA CALL BDOS LD DE,ARG2 LD C,WSEQ CALL BDOS POP BC POP DE OR A JP NZ,WBAD RET ; WDISK: LD A,(ARG2) ;to write to systrks, OR A JP Z,OBAD CP 3 JP NC,OBAD ;(A or B only) LD HL,FBUF2 CALL DOTRK2 ; first read existing ones, LD HL,FBUF+FKOFF LD DE,FBUF2+FKOFF LD BC,FKLEN LDIR ; move new tables into them, LD HL,WRITE LD (T2OP+1),HL ; and write them back. LD A,(ARG2) LD HL,FBUF2 CALL DOTRK2 JP DONE ; WRAM: LD HL,FBUF+FKOFF ;write to RAM LD DE,FKRAM LD BC,FKLEN CALL HILDIR ; ;--- all finished now ; DONE: EXIT: CALL MSG DB CR,LF,0 LD C,0 JP BDOS ; ; ;--- SUBROUTINES follow --- ; ;BIOS disk functions to read/write track 2 block 4 ; SELDSK: LD (CREG),A ;C = disk # XOR A LD (EREG),A ;E = 00 LD A,9 JR BIOS MULTIO: LD A,1 LD (CREG),A ;C = 1 block to read LD A,23 JR BIOS SETTRK: LD HL,2 LD (BCREG),HL ;BC = track 2 LD A,10 JR BIOS SETSEC: LD HL,4 LD (BCREG),HL ;BC = block 4 for sector 35-40 LD A,11 JR BIOS SETDMA: LD (BCREG),HL ;BC = DMA addr from HL LD A,12 JR BIOS SETBNK: LD A,1 LD (AREG),A ;A = bank 1 LD A,28 JR BIOS READ: LD A,13 JR BIOS WRITE: LD A,1 LD (CREG),A ;C = 1 (nondeferred write) LD A,14 ; BIOS: LD (BIOSFN),A ;call BIOS fn in A LD DE,BIOSPB LD C,50 JP BDOS ; BIOSPB: ;BIOS Parameter block BIOSFN: DB 0 AREG: DB 0 BCREG: DW 0 DEREG: DW 0 HLREG: DW 0 CREG EQU BCREG EREG EQU DEREG ; DOTRK2: DEC A ;takes drive in A, buff addr in HL PUSH HL CALL SELDSK CALL MULTIO CALL SETTRK CALL SETSEC POP HL CALL SETDMA CALL SETBNK T2OP: CALL READ ;<--- changes to WRITE if needed PUSH AF LD A,(CURDSK) CALL SELDSK ;restore original drive POP AF OR A JP NZ,BIOSER RET ; ; ; DISPLA: CALL MSG ;show the fnkeys DB ESC,'=',34,82,ESC,'Y',0 LD HL,FBUF+FKOFF LD B,14 DSPLP: LD A,14 SUB B PUSH BC PUSH HL CALL DECODE LD (DSCHR),A CALL MSG DB CR,LF,'<' DSCHR: DB '?>',0 ;<---- label goes here POP HL LD B,(HL) ;get count INC HL XOR A ADD B CAL L Z,EMPTY CALL BMSG ;show string POP BC DJNZ DSPLP CALL MSG DB CR,LF,'--------(',0 CALL FREE LD H,B LD L,C CALL DECNUM ;show free bytes CALL MSG DB ' bytes free)---------',CR,LF,LF,0 RET EMPTY: PUSH HL CALL MSG DB ESC,')','',ESC,'(',0 POP HL RET ; ; GETSTR: CALL MSG ;get new string DB '<' GSCHR: DB '?>',0 ;<---- label goes here LD HL,STRING+1 LD B,255 ;max length GSLP: PUSH BC PUSH HL CALL INP ;get char POP HL POP BC CP CTLCOD JR Z,GSCR ;ctl-CR ends CP CTLCD2 JR Z,GSESC ;ctl-ESC quits CP LEFTAR JR Z,GSBS ;left arrow corrects BIT 7,A JR NZ,GSLP ;ignore anything else over 80H PUSH BC PUSH HL CALL ECHO ;show it POP HL POP BC LD (HL),A ;add it INC HL DJNZ GSLP ;count it (fall thru to BS if full) GSBS: LD A,255-1 SUB B JR C,GSLP ;erase one? INC B DEC HL ;back up LD A,(HL) CP ' ' CALL C,GSWIPE ;wipe "^" if present CALL GSWIPE ;wipe out char JR GSLP GSCR: LD A,255 ;done, figure length SUB B LD HL,STRING ;point to result LD (HL),A RET GSESC: SCF ;return with Carry if ctl-ESC RET ; GSWIPE: PUSH BC ;wipe out a character PUSH HL CALL MSG DB BS,ESC,'T',0 POP HL POP BC RET ; ; CHANGE: LD HL,FBUF+FKOFF ;Replace the key LD A,(KEYNUM) OR A JR Z,CHGL1F CHGLP1: LD C,(HL) ;find key to delete LD B,0 ADD HL,BC INC HL DEC A JR NZ,CHGLP1 CHGL1F: LD A,(HL) ;old length PUSH HL OR A JR Z,CHG1 LD E,(HL) LD D,0 LD (HL),0 INC HL EX DE,HL ADD HL,DE LD B,H LD C,L PUSH HL LD HL,FBUF+FKOFF+FKLEN OR A SBC HL,BC ;bytes to move down LD B,H LD C,L POP HL LDIR ;move them CHG1: CALL FREE ;now, anything to add? INC BC POP HL LD A,(STRING) OR A JR Z,CHGRET CP C JR C,CHG1A ;will it fit? LD C,A XOR A ADD B JR Z,CHGRET LD A,C CHG1A: LD (HL),A INC HL LD C,A LD B,0 PUSH HL LD HL,FBUF+FKOFF+FKLEN-1 LD D,H LD E,L OR A SBC HL,BC ;from here POP BC PUSH HL SBC HL,BC LD B,H LD C,L INC BC ;bytes to move POP HL LDDR ;make room LD C,(HL) LD B,0 INC HL EX DE,HL LD HL,STRING+1 LDIR ;insert it CHGRET: RET ; ; ; FREE: LD HL,FBUF+FKOFF ;figure free bytes LD A,14 LD BC,FKLEN-14 LD D,0 FRELP: PUSH AF LD A,C LD E,(HL) SUB E LD C,A LD A,B SBC 0 LD B,A INC HL ADD HL,DE POP AF DEC A JR NZ,FRELP RET ;result in BC ; DECNUM: LD C,0 ;put decimal# 0-999 in HL to screen DALP3: LD A,H OR A ; (100 = 0064H) JR NZ,GT100 LD A,L CP 64H JR C,LT100 GT100: INC C LD DE,100 OR A SBC HL,DE JR DALP3 DBYTE: LD C,0 ;put decimal# 0-255 in A to screen DBLP: CP 100 JR C,LT100 INC C SUB 100 JR DBLP LT100: PUSH AF LD A,30H ADD C CALL TYP POP AF LD C,0 DBLP2: CP 10 JR C,LT10 INC C SUB 10 JR DBLP2 LT10: PUSH AF LD A,30H ADD C CALL TYP POP AF ADD 30H JP TYP ; ; DEFTYP: LD (HL),'F' ;make default type ".FNK" INC HL LD (HL),'N' INC HL LD (HL),'K' RET ; ; DECODE: ADD '0' ;turn #0-13 into key ID CP '9'+1 RET C SUB '9'+1 ;now arrow 0-3 LD E,A LD D,0 LD HL,ARROWS ADD HL,DE LD A,(HL) RET ENCODE: SUB '0' ;turn key into # (return C if illegal) RET C CP 9+1 CCF RET NC ADD '0' ;arrow LD HL,ARROWS LD BC,040AH ENCLP: CP (HL) JR Z,ENCLPF INC HL INC C DJNZ ENCLP SCF ENCLPF: LD A,C RET ARROWS: DB 'URDL' ; ; ECHO: CP 80H ;echo key IF not parity RET NC PUSH AF CALL TYPE POP AF RET ; TYPE: CP ' ' ;put char in A to screen, with "^" filter JR NC,TYP ADD 40H PUSH AF CALL MSG DB ESC,')',0 LD A,'^' CALL TYP POP AF CALL TYP CALL MSG DB ESC,'(',0 RET ; INP: LD A,0FDH ;CP/M Plus plain input TYP: LD E,A ;and output LD C,UCON JP BDOS MSG: EX (SP),HL ;put DB string ending in 0 to screen XOR A ADD (HL) INC HL EX (SP),HL RET Z CALL TYP ;no filtering JR MSG BMSG: XOR A ;put B bytes at (HL) to screen ADD B RET Z LD A,(HL) INC HL PUSH BC PUSH HL CALL TYPE ;with filtering POP HL POP BC DJNZ BMSG RET ; UCASE: CP 'a' ;uppercase A RET C CP 'z'+1 RET NC AND 5FH RET ; OBAD: CALL MSG DB ' ',0 JP EXIT FBAD: CALL MSG DB ' ',0 JP EXIT BIOSER: CALL MSG DB ' ',0 JP EXIT WBAD: RBAD: CALL MSG DB ' ',0 JP EXIT DATERR: CALL MSG DB ' ',0 JP EXIT ABORT: CALL MSG DB ' ',0 CALL RESTOR JP EXIT ; B8LDIR: LD A,10000001B ;do LDIR with bank 8 RAM DI ;(has to be above 4000H to work) OUT 0,A LDIR LD A,00000001B OUT 0,A EI RET B8BYTS EQU $-B8LDIR ; ;data ; CURDSK: DB 0 ; KEYNUM: DS 1 ARG2: DS 35 ; DS 64 STACK EQU $ ; CR EQU 0DH LF EQU 0AH BS EQU 08H ESC EQU 1BH BRK EQU 03H CLS EQU 1AH BEL EQU 07H ; BDOS EQU 0005H FCB EQU 005CH FCB2 EQU 006CH DMA EQU 0080H ; UCON EQU 6 FOPN EQU 15 FCLO EQU 16 FDEL EQU 19 RSEQ EQU 20 WSEQ EQU 21 FMAK EQU 22 GDRV EQU 25 SDMA EQU 26 ERRM EQU 45 ; END  ;*** KEYBD.ASM - Osborne Executive Keyboard Utility ;*** Version 2.0a - E.Meyer 6/86 ;*** This code is for nonprofit use only. ; ;Should assemble with most Z80 assemblers (I use SLR Z80ASM) ; ;>>> If you create and circulate a modified version of this ;>>> program, give credit where it's due, but DO NOT call it ;>>> "KEYBD 2.1" etc -- create your own name. ; ; Syntax: A>KEYBD source [dest] (use * for RAM) ; See KEYBD.DOC for further details ; ; NOTE: The tricky thing in this program is dealing with Bank 8 ; of RAM, where the keyboards are stored in the ROM's RAM. ; Bank 8 has to be switched in; and it will overshadow the lower ; 16k of the TPA. Thus the code that does the bank switching, ; and the buffers that hold the data for the swap, have to be ; above address 4000H. ; The file format (.KBD) in which data is stored by KEYBD is ; exactly identical to the format in RAM. Only the keyboard ; bytes are significant, however; all other bytes (which have other ; functions in RAM) are ignored. ; ; KBRAM EQU 2015H ;address of keyboards in bank 8 RAM KBLEN EQU 64 ;length of a keyboard KBRSIZ EQU 5*KBLEN ;total size of keyboad area (there are 5) ; KBUF EQU 4000H ;safe buffer to store data KBOFF EQU 13 ;offset of keyboard in KBUF KBUF2 EQU 4400H ;second buffer for copying HISTD EQU 4800H ;storage for KEYBD's keyboard ORIGKB EQU 4880H ;storage for original keyboard HILDIR EQU 4900H ;location for bankswitch routine ; CTLCR EQU 209AH ;addr of ctl-RET in bank 8 CTLCOD EQU 8EH ;use this for ctl-RET ; ; ORG 0100H ; LD SP,STACK CALL MSG DB 'KEYBD 2.0a (06/86) - Osborne Executive',CR,LF,0 LD HL,B0LDIR LD DE,HILDIR LD BC,B0BYTS LDIR ;move B0LDIR sub up to HILDIR LD E,0FFH LD C,ERRM ;set error mode to Return CALL BDOS LD C,GDRV CALL BDOS INC A LD (CURDSK),A ;save current disk LD A,(FCB2) OR A JR NZ,DODEF ;if no dest disk, LD HL,FCB2+1 ;turn blank dest into * LD A,(HL) CP ' ' JR NZ,DODEF LD B,8 LP0: LD (HL),'?' INC HL DJNZ LP0 DODEF: LD HL,FCB+9 LD A,(HL) ;default filetypes = KBD CP ' ' CALL Z,DEFTYP LD HL,FCB2+9 LD A,(HL) CP ' ' CALL Z,DEFTYP LD HL,FCB2 LD DE,ARG2 LD BC,12 ;copy "dest" filename.... LDIR XOR A ;... into a blank fcb LD B,24 LP1: LD (DE),A INC DE DJNZ LP1 ; ;--- read in the desired keyboard ; CALL MSG DB 'Reading...',0 LD A,(FCB+1) CP '?' JP Z,RRAM ;"*" is RAM source CP ' ' JP Z,RDISK ;no file? read sys trks. ; RFILE: LD DE,FCB ;read from disk file LD C,FOPN CALL BDOS OR A JP NZ,FBAD LD DE,KBUF CALL RFSBR ;read 3 sectors LD DE,KBUF+128 CALL RFSBR LD DE,KBUF+256 CALL RFSBR JP GOTIT RFSBR: LD C,SDMA ;subroutine to read a sector CALL BDOS LD DE,FCB LD C,RSEQ CALL BDOS OR A JP NZ,RBAD RET ; RDISK: LD A,(FCB) ;read from sys trks OR A JP Z,OBAD CP 3 JP NC,OBAD LD HL,KBUF CALL DOTRK2 ;read 3 sectors into KBUF JP GOTIT ; RRAM: LD HL,KBRAM ;read in from RAM LD DE,KBUF+KBOFF LD BC,KBRSIZ CALL HILDIR ; ;--- we now have the keyboards in the buffer ; GOTIT: LD HL,FCB ;decide whether to edit? LD DE,ARG2 LD B,12 GOTLP: LD A,(DE) ;just EDIT if source = dest INC DE CP (HL) INC HL JR NZ,GOTLPF DJNZ GOTLP JR EDIT GOTLPF: LD A,(FCB+1) ;just LOAD if source=disk, dest=* CP '?' JR Z,EDITQ ;(else ASK if want to Edit) LD A,(ARG2+1) CP '?' JP Z,SAVE EDITQ: CALL MSG DB ' Edit keyboard? (Y/N): ',0 CALL INP CALL UCASE CALL ECHO CP 'N' JP Z,SAVE ; EDIT: LD HL,KBRAM LD DE,ORIGKB LD BC,KBLEN CALL HILDIR ;save original keyboard LD HL,STDKB LD DE,HISTD LD BC,KBLEN LDIR ;move STDKB up to HISTD LD HL,HISTD LD DE,KBRAM LD BC,KBLEN CALL HILDIR ;and install STDKB for edit. LD HL,KBUF LD (HL),CTLCOD LD DE,CTLCR ;and ^RET code LD BC,1 CALL HILDIR CALL MSG DB CLS,ESC,'f' ;kill function keys DB ESC,'=',32,54,'KEYBD Keyboard Definition Utility' DB ESC,'=',33,54+5, 'v2.0a (c)1986 E.Meyer' DB ESC,'=',34,54,'---------------------------------',0 ; CHOOKB: CALL MSG ;which kb to edit? DB ESC,'=',35,32,ESC,'Y' DB ESC,'=',38,44 DB 'Keyboard to edit: (1) Normal (2) Shift (3) Control' DB ESC,'=',39,44+19,'(4) Caps-lock (5) Control-shift' DB ESC,'=',42,52,'Select (1-5), or RET to save to ',0 LD A,(ARG2+1) CP '?' ;say what dest is JR NZ,CHKB1 CALL MSG DB 'RAM',0 JR CHKB2 CHKB1: LD A,(ARG2) OR A JR NZ,CHKB1A LD A,(CURDSK) CHKB1A: ADD 'A'-1 CALL TYP LD A,':' CALL TYP LD HL,ARG2+1 LD A,(HL) CP ' ' JR Z,CHKB2 LD B,8 CALL BMSG PUSH HL LD A,'.' CALL TYP POP HL LD B,3 CALL BMSG CHKB2: CALL MSG DB ': ',0 IN1: CALL INP ;get choice CP BRK JP Z,ABORT CP CR JP Z,EDITED SUB 31H JR C,IN1B CP 5 JR C,IN1F IN1B: LD A,BEL ;oops CALL TYP JR IN1 IN1F: LD HL,KBUF+KBOFF LD BC,KNAMES LD DE,KBLEN ;compute addr of chosen kb OR A JR Z,SHOKB ;and its title ADLP: PUSH HL LD HL,9 ADD HL,BC LD B,H LD C,L POP HL ADD HL,DE DEC A JR NZ,ADLP SHOKB: LD (THISKB),HL ;HL=addr, BC=titleaddr LD H,B LD L,C LD DE,KBNAME LD BC,9 LDIR ;compose title ; ELOOP: CALL MSG DB ESC,'=',35,32,ESC,'Y' DB ESC,'=',37,61 KBNAME: DB '????????? Keyboard:',CR,LF,LF,0 ;<---- name here LD B,26 LD HL,KORDER CALL NAMES ;show 1st key row (a-z) CALL MSG DB CR,LF,0 LD B,26 LD DE,KORDER CALL VALUES ;... and their hex values CALL MSG DB CR,LF,LF,0 LD B,27 LD HL,KORDER+26 CALL NAMES ;show 2nd key row (misc) LD A,CR CALL TYP LD B,27 LD DE,KORDER+26 CALL VALUES ;... and their hex values IN2: CALL MSG DB ESC,'=',46,54,'Key: ' DB ' ',ESC,')','(^RET exits)',ESC,'(' DB ESC,'=',46,54+5,0 CALL INP ;Get key choice CP CTLCOD JP Z,CHOOKB CALL LCASE PUSH AF CALL CNTRL ;echo key NAME POP AF LD HL,STDKB LD BC,KBLEN CPIR ;FIND key in STDKB JR Z,IN2F IN2B: LD A,BEL ;oops CALL TYP JR IN2 IN2F: LD DE,STDKB SCF SBC HL,DE ;compute offset LD DE,(THISKB) ADD HL,DE ;add to get char posn to change LD (THISCH),HL IN3: CALL MSG  DB ESC,'=',46,64,'Value: ' DB ' ',ESC,')','(chr,RET or H,H)',ESC,'(' DB ESC,'=',46,64+7,0 CALL INP LD (TEMP),A CP 80H JR NC,IN3 CALL ECHO CALL INP LD (TEMP+1),A CP CR JR Z,CHRINP CALL ECHO ;HEX input LD HL,TEMP CALL HRBYTE ;translate digits into # in A NEWC: LD HL,(THISCH) LD (HL),A ;insert NEW value in keybd. JP ELOOP CHRINP: LD A,(TEMP) JR NEWC ;character input ; EDITED: CALL RESTOR LD A,CLS CALL TYP JP SAVE ; RESTOR: LD HL,ORIGKB ;restore original keyboard LD DE,KBRAM LD BC,KBLEN CALL HILDIR LD (HL),CR ;and ^RET LD DE,CTLCR LD BC,1 CALL HILDIR CALL MSG DB ESC,'e',0 ;and function keys RET ; ;--- editing finished, now write results ; SAVE: CALL MSG DB ' Saving...',0 LD A,(ARG2+1) CP '?' JP Z,WRAM CP ' ' JP Z,WDISK ; WFILE: LD DE,ARG2 ;write to disk file LD C,FDEL CALL BDOS LD DE,ARG2 LD C,FMAK CALL BDOS OR A JP NZ,WBAD LD DE,KBUF CALL WFSBR ;write 3 records LD DE,KBUF+128 CALL WFSBR LD DE,KBUF+256 CALL WFSBR LD DE,ARG2 LD C,FCLO CALL BDOS JP DONE WFSBR: LD C,SDMA ;subroutine to write a record CALL BDOS LD DE,ARG2 LD C,WSEQ CALL BDOS OR A JP NZ,WBAD RET ; WDISK: LD A,(ARG2) ;to write to systrks, OR A JP Z,OBAD CP 3 JP NC,OBAD ;(A or B only) LD HL,KBUF2 CALL DOTRK2 ; first READ existing ones. LD HL,KBUF+KBOFF LD DE,KBUF2+KBOFF LD BC,KBRSIZ LDIR ; move new tables into them, LD HL,WRITE LD (T2OP+1),HL ; and write them back. LD A,(ARG2) LD HL,KBUF2 CALL DOTRK2 JP DONE ; WRAM: LD HL,KBUF+KBOFF ;write to RAM LD DE,KBRAM LD BC,KBRSIZ CALL HILDIR ; ;--- all finished now ; DONE: EXIT: CALL MSG DB CR,LF,0 LD C,0 JP BDOS ; ; ; *** SUBROUTINES follow ; ;BIOS functions used: ; SELDSK: LD (CREG),A ;C = disk # XOR A LD (EREG),A ;E = 00 LD A,9 JR BIOS MULTIO: LD A,1 LD (CREG),A ;C = 1 block to read LD A,23 JR BIOS SETTRK: LD HL,2 LD (BCREG),HL ;BC = track 2 LD A,10 JR BIOS SETSEC: LD HL,4 LD (BCREG),HL ;BC = block 4 for sector 33-35 LD A,11 JR BIOS SETDMA: LD (BCREG),HL ;BC = DMA addr from HL LD A,12 JR BIOS SETBNK: LD A,1 LD (AREG),A ;A = bank 1 LD A,28 JR BIOS READ: LD A,13 JR BIOS WRITE: LD A,1 LD (CREG),A ;C = 1 (nondeferred write) LD A,14 ; BIOS: LD (BIOSFN),A ;call BIOS fn in A LD DE,BIOSPB LD C,50 JP BDOS BIOSER: CALL MSG DB '',0 JP DONE ; BIOSPB: ; *** BIOS Parameter block BIOSFN: DB 0 AREG: DB 0 BCREG: DW 0 DEREG: DW 0 HLREG: DW 0 CREG EQU BCREG EREG EQU DEREG ; ; DOTRK2: DEC A ;takes drive in A, buff addr in HL PUSH HL CALL SELDSK CALL MULTIO CALL SETTRK CALL SETSEC POP HL CALL SETDMA CALL SETBNK T2OP: CALL READ ; *** changes to WRITE if needed PUSH AF LD A,(CURDSK) DEC A CALL SELDSK ;restore original disk POP AF OR A JP NZ,BIOSER RET ; ; DEFTYP: LD (HL),'K' ;make default type ".KBD" INC HL LD (HL),'B' INC HL LD (HL),'D' RET ; NAMES: PUSH BC ;display B names starting at HL PUSH HL CALL MSG DB ESC,')',0 ;(in dim video) POP HL POP BC NEXTN: PUSH BC PUSH HL LD A,(HL) CALL CNTRL POP HL POP BC INC HL DJNZ NEXTN CALL MSG DB ESC,'(',0 RET CNTRL: CP 21H ;SHOW A KEY NAME JR C,NM0 CP 7FH JR C,NM1 NM0: CP 8AH JR Z,UP CP 8BH JR Z,RGT CP 8CH JR Z,DWN CP 8DH JR Z,LFT CP ' ' JR Z,SPC CP CR JR Z,NTR CP TAB JR Z,HTB CP ESC JR Z,SCP LD A,'?' JR NM1 DWN: LD A,'v' JR NM1 UP: LD A,'^' JR NM1 LFT: LD A,'<' JR NM1 RGT: LD A,'>' JR NM1 NM1: CALL TYP CALL MSG DB ' ',0 RET SCP: CALL MSG DB 'ES ',0 RET SPC: CALL MSG DB 'SP ',0 RET HTB: CALL MSG DB 'TB ',0 RET NTR: CALL MSG DB 'CR ',0 RET ; VALUES: PUSH BC ;display B values starting at DE PUSH DE LD A,(DE) LD HL,STDKB LD BC,KBLEN CPIR ;find key posn LD DE,STDKB SCF SBC HL,DE ;compute offset LD DE,(THISKB) ADD HL,DE ;compute value posn LD A,(HL) CP 7FH ;is it printable? JR NC,VL1 CALL ECHO ;yes, show it JR VL2 VL1: CALL HBYTE ;no, show HEX value VL2: LD A,' ' CALL TYP POP DE INC DE POP BC DJNZ VALUES RET ; ; HRDIG: LD A,(HL) ;converts hex digit at address HL AND 7FH ; to # 0-15 in A and E. JR Z,ERR CP 'A' JR C,HRD1 AND 5FH ;(letter A-F) SUB 7 HRD1: SUB 30H JP M,ERR CP 10H JR NC,ERR LD E,A RET ERR: POP HL ;kill pending return LD A,BEL CALL TYP JP IN3 HRBYTE: CALL HRDIG ;convertes two hex digits at address HL RLCA ; to # 0-255 in A and E. RLCA RLCA RLCA INC HL PUSH AF CALL HRDIG POP AF ADD E LD E,A RET ; HBYTE: PUSH AF ;put hex# 0-255 in A to screen AND 0F0H RRA RRA RRA RRA CALL HDIGIT POP AF AND 0FH HDIGIT: ADD 30H ;put hex# 0-F in A to screen CP 3AH JP C,TYP ADD 7 JP TYP ; INP: LD A,0FDH ;Plain BDOS console i/o TYP: LD E,A LD C,UCON JP BDOS MSG: EX (SP),HL ;put DB string ending in 0 to screen XOR A ADD (HL) INC HL EX (SP),HL RET Z CALL TYP JP MSG ; UCASE: CP 'a' ;uppercase A RET C CP 'z'+1 RET NC AND 5FH RET LCASE: CP 'A' ;lowercase A RET C CP 'Z'+1 RET NC OR 20H RET ; ECHO: CP 7FH ;echo input if nice RET NC PUSH AF CP 20H JR NC,ECHO1 LD A,'^' CALL TYP POP AF PUSH AF ADD 40H JR ECHO2 ECHO1: CALL TYP LD A,' ' ECHO2: CALL TYP POP AF RET ; BMSG: XOR A ;show B bytes at (HL) ADD B RET Z LD A,(HL) INC HL PUSH BC PUSH HL AND 7FH CALL TYP POP HL POP BC DJNZ BMSG RET ; ; OBAD: CALL MSG DB '',0 JP DONE FBAD: CALL MSG DB '',0 JP DONE WBAD: RBAD: CALL MSG DB '',0 JP DONE ABORT: CALL RESTOR CALL MSG DB '',0 JP DONE ; ; B0LDIR: LD A,10000001B ;bank 8 LDIR routine DI ;(must be above 4000H to work) OUT 0,A LDIR LD A,00000001B OUT 0,A EI RET B0BYTS EQU $-B0LDIR ; ;data ; STDKB: DB ESC,TAB,0FFH,0FFH,0FFH,CR,27H,'[' ;normal KBD DB '12345678' DB 'qwertyui' DB 'asdfghjk' DB 'zxcvbnm,' DB 8AH,8DH,'0 .po9' DB 8BH,8CH,'-/;\l=' DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ; KORDER: DB 'abcdefghijklmnopqrstuvwxyz' DB '0123456789[/\-='';,. ',ESC,TAB,CR,8AH,8BH,8CH,8DH ; KNAMES: DB ' Normal',' Shift',' Control' DB 'Caps-lock','Ctl-Shift' ; CURDSK: DS 1 THISKB: DS 2 THISCH: DS 2 TEMP: DS 2 ARG2: DS 36 ; DS 64 STACK EQU $ ; ; CR EQU 0DH LF EQU 0AH BS EQU 08H TAB EQU 09H ESC EQU 1BH CLS EQU 1AH BEL EQU 07H BRK EQU 03H ; BDOS EQU 0005H FCB EQU 005CH FCB2 EQU 006CH DMA EQU 0080H ; UCON EQU 6 FOPN EQU 15 FCLO EQU 16 FDEL EQU 19 RSEQ EQU 20 WSEQ EQU 21 FMAK EQU 22 GDRV EQU 25 SDMA EQU 26 ERRM EQU 45 ; END  DB '',0 JP DONE ; ; B0LDIR: LD A,10000001B ;bank 8 LDIR routine DI ;(must be above 4000H to work) OUT 0,A LDIR LD A,00000001B OUT 0,A EI RET B0BYTS EQU $-B0LDIR ; ;data ; STDKB: DB ESC,TAB,0FFH,0FFH,0FFH,CR,27H,'[' ;normal KBD DB '12345678' DB 'qwertyui' DB 'asdfghjk' DB 'zxcvbnm,' DB 8AH,8DH,'0 .po9' DB 8BH,8CH,'-/;\l=' DB 0FFH,0FF NOVEMBER 12, 1985 Ther ar tw program i thi library Th first OP i an adaptatiop o th Osborn On progra DIALER b Ji Schenkel I work onl o th Executive support windowing revers video etc O i configure fo Haye Smartmodem an wil loo u an dia fro lis o name an numbers Th basic ar describe i Ji Schenkel' DIALER2.DO i th Fo library, but the program is menu driven. Briefly th comman i type alone i whic cas th fil "BOOK" is loaded. eg. A>OP or a command line file can be added eg. A>OP DATA.FIL woul loa th fil DATA.FI an ente th LOOKU mode Onc loaded promp i see (-->) Th name o par o nam i type a th prompt eg. -->JONES or -->JON woul lis al th name containin JONE o JON Cap mus b used Typin ar inserte i th progra (later Typin "S o "M wil inser th prope cod befor th numbe t b dialed A "H wil brin u a hel scree (whic i incomplet a present bu ma b edited) Typin "Q return t th LOOKU mod fro whic ne numbe o number ca b found o th progra i exite b typin ES . hav include th cod i squeeze file Th Sprin o MC code ca b added a ca an Hel text o mode codes Thi progra assemble wit th Microsof M80 L8 combination Usin progra lik EDFILE th addition o change ca b mad directl t th CO file Yo wil hav t searc fo th addresses. a no a advance programmer an th cod coul probabl b muc cleaner Ther i on bu tha kno of th curso ca b move of th screen i whic cas th progra wil loc up I anyon know th erro routin t preven thi woul appreciat it hav ha th progra cras o severa occasions, but have never had any lost files from it. Refe t Ji Schenkel documentatio fo som o th detail (however the addresses are NOT similar). Th secon progra i thi librar i VDOP whic i combinatio o th abov DIALE program an recen versio o th V tex edito a revise b Eri Meyer wante t b abl t mak change t m phon list o ad note a wa o th phone Th basi progra work muc th sam a VDE-2 (se tha DO fil fo details) Pressin ES bring u th DIALE mod keepin th curren informatio o th scree NOT scrollin i don i th EDI mode NO th DIALE mode) ES wil brin u men a th botto o th screen Th arro key (star wit th U arrow mov th curso t th lin fro whic yo wil dial Th sam command a i O wil initiat callin i thi program. Agai th proble exist wit th curso goin of th screen, causing the keyboard to lock.. Thi progra wa bi mor difficul t conver sinc VD wa writte i 808 cod wit D statement fo Z8 instructions wherea DIALE wa writte originall i Z8 cod fo th Softwar Toolwork Z8 assembler ha t conver th 808 cod t Z8 code an th Z8 cod t Microsof compatibl cod fo th M80,L8 assembler Translat.co fro th FO librar wa use t conver VD t Z8 code bu th translatio wa onl abou 95 complete Th M8 assemble foun mos o th error whic the correcte manually Agai m apologie t th sophisticate programmmer wh ma fin m cod sloppy Fo m thi wa quit chore an bothere almos everyon i th publi domai t fin som o th solutions Th cod i included in this library. fin bot o thes program extremel useful fo makin on phon cal o dozens VDO i functiona VD a well s ca edi somethin an mak cal withou exiting hav ru bot program o tw Executives on wit G DSD upgrade an usin Tranto 1 me har disk an Westwin WE wit n problem s far hop th membershi find thes utilitie helpful trie t ge smal versio o th O progra t wor a a RSX t b availabl fro withi an program bu th logi o writtin a RS escape me I anyon ca hel m wit thi woul b grateful hav enclose th cod an CO fil (OPV which will dial from any file TYPEd on the console first. Any questions or answers are welcome at Joel Bluming 1070 Rosedale Road Valley Stream, New York 11581 Tel. 516-791-2323 Mon-Wed 9AM-8PM Thurs 9AM-4PM fin bot o thes program extremel useful fo makin on phon cal o dozens VDO i functiona VD a well s ca edi somethin an mak cal withou exiting hav ru bot program o tw Executives on wit G DSD upgrade an usin Tranto 1 me har disk an Westwin WE wit n problem s far hop th membershi find thes utilitie helpful trie t ge smal versio o th O progra t wor a a RSX t b availabl fro withi an program bu th logi o writtin a RS escape me I anyon ca hel m wit thi woul b grateful hav enclose th cod an CO fil (OPV which will dial from any file TYPEd on the console first. Any questions or answers are welcome !9" 1 -. gF :] !+] \(# R" ! #˾ x " v |F . : (2 : s: h: K ! ~a8ˮ#! K  (K (?( #͛ + R~( (  >-_$ # x~ F * >A*S" C >Av F >A* ͸ 2 !X" ͏ (a8˯QL^ ʖH *. F ͏ v LH̐ ͏ v LM(AS(=A(9N / C F    $ >A*S" ͸ >NY;éË(4(0(, (% (!( ( ((  (( |0g" ͸ é2 ! " P~08 8#ʩv : N(C >A: A F >A" !BT : (!RMT !cST * ~ͪ ( _k ͂ #!zT * : A(N(cF ͏ C ͚ ͛ F͂ x ͚ * Ö͚ !~T F ÷!~T h *** DIALER *** j) OSBORNE EXECUTIVE VERSION (C) JOEL BLUMING, JULY 26, 1985 OSBORNE 1 VERSION (C)JUNE 5,1985 JIM SCHENKEL, SEAMLESS WEB SOFTWARE k( $ +++Cannot find the data file+++ $ +++File overflow+++ Data file has been truncated $ j) ENTER NAME OR FOR DIALER - PRESS TO EXIT k($ j)--> k($ )==> ($ ARROWS/TAB=CURSOR | A=AUTO | N=NUMBER | H=HELP Q=QUIT TO LOOKUP | M=MCI | S=SPRINT | CTRL C TO END $ j) PRESS ANY KEY TO STOP DIALING k($ j) ==AUTO REDIAL ACTIVE==ANY KEY TO STOP== k($ Z j) NUMBER TO AUTO REDIAL (ANY KEY TO STOP)--> k($ T $ T$ T j) RETURNING TO LOOKUP k( $DP ATZ $X ATC0E0M2Q1DT $MCI CODE HERE $SPRINT CODE HERE$ATH $; $ ATZ $ ARROW KEYS MOVE THE CURSOR TAB KEY MOVES CURSOR NINE SPACES RIGHT. PLACE CURSOR ANYWHERE LEFT OF NUMBER TO BE DIALED AND PRESS: CR = DIAL THE NUMBER ONCE A = REPEAT DIAL UNTIL ANY KEY IS PRESSED N = NEW NUMBER TO DIAL - REPEATS UNTIL ANY KEY PRESSED CTRL C = TO END PROGRAM Q = RETURN TO LOOKUP j) ESC TO RETURN / H FOR MORE HELP k( $ THIS IS THE SECOND HELP SCREEN j) PRESS ESC TO RETURN TO LOOKUP k( $ $ .  F !tT * ~˾#ͪ  Z  x 0  s 0 ͭ  z 2 ! \  ! \   s 2 ͭ  z 2 ! \  !P \   s 2 ͭ  z 2 ! \  !P \   s 2  Z  x 5  z 3 ! \  !P \   s 3 ͭ      ~$_$ k >A͂ #͂ x !U+| ͛ (>A  ȷ~2 >w* : w! w#G͕0 ʶ1ʛ6â6"%@;:͞:! +| ͛ (>A  ȷ~2 >w* : w! w#G͕0 ʶ1ʛ6â6"%@;:͞:! j) PRESS ESC TO RETURN TO LOOKUP k( $ $ .  F !tT * ~˾#ͪ  Z  x 0  s 0 ͭ  z 2 ! \  ! \   s 2 ͭ  z 2 ! \  !P \   s 2 ͭ  z 2 ! \  !P \   s 2  Z  x 5  z 3 ! \  !P \   s 3 ͭ      ~$_$ k >A͂ #͂ x !U+| ͛ (>A  ȷ~2 >w* : w! w#G͕0 ʶ1ʛ6â6"%@;:͞:!v5OP.MAC]  !"#$%&'()*+,-./0123456789:;<=>?o@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\w>`Tř}߽翠wx6ݰGX(?|Ϧ?Y]RoR̾錉OtgL7DW/єxI>)F<} ^I54.oٙnOǵҝq,L?x?|o?t|?~cw^_W~L7 {D{)#JaO9,3o%íL7,}3t\9Q/>oLsJ̽nأP%d =;Z)t3ݾ_~H?Yx~~UhB,^Xd [=/穗<kYLÒa Kj) J.{,!?Yx&XjtlL,Lвbѱi^O~`z;^=|)xԥ7RB,5:h:?Y!)x^zL%k,<=cΉB,5:c;i\v' O_a ݱpN;w* dμ?Yx ʞҙMvOgzT' 6CS?Yxt dh’֤'rx' ϡa Kj~5OOTglzGyvBaIB!g.ޫx' ?h9ʮFGykz?Yxv35,<L?YxN͔d)7SLV߃?Y&7lg$2iS=oK",}OMS?,aVSn^<Cg' ݰU/ϥvp6\|$.N6= ۙ?:q|S/!\TrޓoO}۽'(0=Mk{OOޓowAi{Xd集<[Gw KjS􃯞i^,<V9S:G955K_["Q茉Mx<܀MŜ(DS鶻\8H}lýOp "dbMM8= x$r01|)\Bp|=]вYL&ntSJ%zTglAyqr6߸ЪLeO%lj=oL;O^|$ߘp%47J>M=y2K8xz2K]LM8oL{wl'\Bⱇ.!89)VSģĽ;6E/[3J;6`([.,=oL>N;|Fyc xXŞ+ﱘ%$O L\I)H l>R~{"/qM>a4gj}Ϯ24c/|$ߘҙMc; {#3el Hg0c> SX"\<؋g1K#yʞ|cJg6EH()%|}[p1?R/lj D)LH'Qޘ KHp G??`ӚJ2E=Kv'؋g1ŋ OA5Ҕ)\BؚeA5߳)Bv!)N5_L$S l)'(7tFaO'-I3YJl F:lk|cJg6EHxl)R܋ eT+S)eXbz\BsŞ\ҙMf x| :Gr1p15EN ͍Ħp yp܁-4oiB\ŝ44~q}0ŋu\sܱ5G3+Hw*n^3Ez)rM9X΂bOgw:־" 2Y(d7G@s#1uxSY<OL>kw\>UXB囩OiMQBGsՆbOwr\.L1B\ųP/>Lwo=a]ebO%9`;9i^<)+7>6^Y"~5:7E#qoL8|c⻰) kYL"(cݛ"dg8 T025\oפ3tS/sy^zL꫗)Bv^R3KH6.),9xSwoG!,reS(ESW|5>6Bb֜,re]|L^+֜,[,|c^zL+g 8־`O>ұ.vW,G!xT/6c/|YB꥗.!?Ş.ShYr, (>4S^qDC3Čz*Z$CD,tr}K{%BK/UهF{ڻTOe t [Iz;T9KhTr^?=0Wm8XB!YL0>~=O:L8\.ShYr,xئ{COW% 14c/|꥗.!?Ş2%b0q % YOL"x:FWtf)>[\{:'xQd`+q7܋齻@/͙"W\ѿ3ŋx%R>4S'?0M(L qb--$^.r^x(|^L)xI8DI[.L3Ɣ4c/rI*|4|c(pLkBv!##)^&(|^j'lGa:Pxۑ[Z2%bjCsV{{,#kYLc; ^J/ŝ, lq)d7G@s#1ea3eO1|Rz~b'Gai^<S<>6>Қ),9xxŸа:FҋI8DI%Ʈ2O.B\ų"Lp܁K/Q z:2M&=e YI/)?1ŋ [j+ґ[ڗbZSal\ŝ'xx 6߸ŞrPe0 .$=Q%UVM"(wS{3j [7k.G6ސ4Oe"d0%4xҋ"ߘCd^6:x o<"q2^.[;9.op yw:]+H,Q|Bw SeuW/؈KoL)LwS<>6.KB˒g1El\ŝCS( [.KB˒g1ŋpT#]\oƓ¦]iM%ё)Dy dbmJ/X$ \k!;{/)ޟ`ýϦp ͍60EҌxS:Gs`K H!LtK=;됸|/L{z4L|L=;:cZMSώa=q?%47>%5l{ Kz>),QŐ}.&,0V{aj g uTdqbg 9 [pszr)ıSxg x \k!;o=q.||v %5 唄k5E!, lsyjb KjjbO +Kl qwׇ-8B1._64g ڢxd(oM>~|a7T9ĒS8 Wi^< H Kjӭ2=27 Ls'`SвYL&Sh\L!W= %v/Z|k0q B(❅BlAŷI}_ lg~˴d+>&nL2:R,L|$5M&>L2:"L1{I,خH^ސzvv3ŋiýOp Gc7I9XxS_}sA!;}2ELsx^R3H)ĭL2Q^ij847M}w>"Lp x(W|g)e^GMMKlavL /Q򅭲(tnJz3%^Gʞv/ڣPҋ7%B)E:]U|SaVnwJ\< A)S;Hyzvxױ`+qPh’O.!;{/)?6"SV K*SZB˒gU %5 "d\/ lS9=QLNlTyzv9XxS.! Iwl9Qc; }XJLeOwS+Qԯӷɕv' )\ 6OBbK H{o!;G%5 HwO.S \L'%47>%5l{ Kz>),QŐ}.&,0V{aCXRBb[ KjSRmQ<zT^GhV|=2Q._[bb)q"( ~w2]p Ƿ):s`SE:>,1%L /qa)Ľ/qa)\Blү):s`S x3KL&nt3ŋu}Xb0qM"xg|%$>&j~Hua/qa)\BqOaK^(& "L/qa)Ľb8.!=mM¦kNS^߇%0E5M"xg|t;{&ߘ’ePhX$߇%"dJXRmҚZ< X(,QLSBs#17=Q\ XLhvxNaIB9%ZM&s8px0bAM9Q7aj2]eSDsxnF•=H5s!ɧ)\B )\MXa4L(S!;2SZ|c KjSL ].SO=%bjU|Q.|?YL+a qwׇM1Wmh.3w+#.OOr%US,Fsq9SnmTbVY'KZ`KSU3ŌGW, 3N4g ]-4oiByH©gg0q7S^G^>3E)^#/ߙⳟn!;[$|xC/)\B˛!;o>=wO{e.ojjCp0YhJ<7EΡruoԳ{gj9XjG|Dx(#Ms.M8p y`Ayy!;ս)\BscYŞfųeb%){W49\M2:Ra>tK Hip peO11iCXLKL=>&|}O{1Ea?5),9xZ%PXR%$<=8 4%ӛ"dbM2W__RGro45O%47zS*bIduon'ך/g/@:d}}}}}| qOgBo#ppx:&t@qX(?|Xc@/n\^{CoEft pQGDYj>/0}5~襟TCݠt\+wt3E:tƻod}ܾwd}ܾǿg?ᆭ_}Gߥ7_;߹ 4Hv#ppg?w7_o7|;d-}Gߥ7_}7_c}2>n_LH tMnh#s܈gO('a(zv,-µҟ_I/)$?nH69x:8{/nS9@tMnkonh㛣 a=7S@5q_mp yܾ@q-{ǗaIBe^>|Yy}M DdtF/?Yݓb|&/Љ@:OQ K2֜c9֜c9n_Lsy<n>k{kFSV 7#U']/00틛i^>>>cp z/~p #s/Sώr=e.o-!8nkOktōȴt pW 55q΃||$Գ|onkOkt48 2q\ގ5Xs7@:dp p/npz 2>q\tMnh۸_RzGr1]nh㛣wn#ȸ}q35BL\M;OsUOwo鉎7+},OoSӽҁ[nVwJ<1==s55&.x/g)3X.J\SrQ+56H [d}ܾn]~C,>VJz~`Z[@gS@f/A-O/ng3t 115&/nrJ&.x/bb8񆾸)ҁ[ҋSc/nrJ&.x/bb8񆾸\ҁ[6 7ӲN.tFqf*ճ<n_o#p}q35m@vS,T:{&ߘ’>2ntAo =W Kj*0ՙW~52nt6]LaIB7&ǻSYB>mn7E:p;Rώh zAM賟/)7΃b |AMe'gOgG(7P4ktAM ߩ`!)[$<9J(7mnn7E:p ^|I>DS%2ntFB>횷dx:&tm܈k I/)GjG3 Sc7669x:x67Sn{ 2nt[+T9ĒT0wd>FvS7mn7E:p6 "g}AMoFvS7mn7E:p6 "gqAM|orOG~ƍp5$\oפx:hhݷ2n_`J[]{jAL21%410EK'Sģ]=Sc7!;o aSӭrњK"PwZ%^zL7$^JyPs-\Bsr"dP$SDz΃*=SW|o|l)z h!;)^u)v%{5 N4S"%L 9C3%%޷)!;|h?7SBvqL'3fHl 8qS@؛{Ig?bqohUT{1%`pS aJ\9S.`J@!.).>ox|L 9C3% d{1%`ƉL q")3Nao{Idz%ÔjL 6$)sՆL 0M{yzz%૗Eq{/)M 9C3%%^nx|sˇfJKhnTL p ǻw͔M 64gJKL 9C3%`ƉĦ B!.fJKhn}fJ@N ͍ĦU3%%h0DbSBvqLɴK5[eO{i}򡙂.>ox|sˇf {/gP.B%ʙ9$L q9SfHlJG) MM{/)ޟL、xz0Wm8)sՆ0%`М){/O\|Rz(t%Ż)!;|h͔C\>4S\5SBvqL p ͍<).!xSBs#)sՆL p <)!;|h8D9C3L p ͍{y"S\x{~L )ؔjCs͔C\>4SfHlJ@!.)V^p <`iR=XC\>4S%͔C\>4S\5SBvqLCpr؂,T0%_RD9#U)3N4gJM q0fz%)sՆ#0WmH S ͙`xk^J/ŝx7% d͔{sˇfJKfJ@!.).QwdJKH<={nHlJ\9S\fJ@!.)3N$6BvqL7S\Bsc/^ޑ).gN<={nHlJ\9S\fJ@!.)3N$6% d͔L+{/p <SBvqLA{7SBvqL p <>L 9C3g?݂,T0%{ʔIGo/$S"%LC\>4S"%*7S" d͔k0% d͔{nx|U3% d͔'3%`ƉĦ8qKU`J\!1L 64gJi\|Rz(t%Ż)!;|h͔C\>4S\?o{L p ǻw͔M 64gJKL 9C3%`ƉĦ B!.fJKhndJKٟw)9%470WmhΔsˇfJM 9C3%\)!;|h Kϛ)!;|hL 9C3g?݂,T0%{ʔIGo/$S d{1%`ƉL q")3N75ˇ\BK)s8Rf {S-8B1 48K` P \(,9xSmJ/B˒g^HճN M6ݔ0Wm8)aڐؔ0Wmh.! fnJ9)VSŒ͙fHlJq'nJ۔^c.| :?V.Ap y|lҚ),9xS7`(TrI/)p <2=$|tSO=^R/#Ufoœtħ'&V$|n{؋)BvWlKG錉OSz^Ls.ށힻLX{,xT.\(wa^zLM7׫вYb~A>oLgL|^=sՆ#bڐsՆLӝLs8Rq9S83Nts\7z?%UpR)SK2.Y6ݴx!;` a(xQ]sq"[mQ<%v HgL|Rȅ2OZt#|G\~DC,iu\!輦64g xL4g G3E8S.ޟL1Dsq"[]{aRԅKa.ġE }U|wzoh tвYȿL/遐Ch'`{/De.o=qtK]8x\t|QeO}i\6$6\9SLH]zMs8R l=._3N4g'bƉ#B؛nqxK{(TynO^iwʞN)6 >&ntS9)=^M&EEzb aWS ;Q(wǦx5E6B>x6"߸Нo4sTy" 2L•=e aon5g.QhYr,K<SXRP,T0 }I9%ZM7R6#,9xZ%PXRP/] 4,)\B` 1ڇM(|KL>6adS{Sm.O% -KRtF!C= ihF!C= D_RhYr,JbF1]%,2Khn|<߄%L] )\>l aojjY7^Trn.K<3 zy%̟:.i?IK/9.op ͍\4 )Lw}^Y"e:x6E/۱I3YL^+wK"475ݪ/65EsxKY8VآKT}oi^<;8)tvt36N)Lw#t3DxJg{,盰t3^B<{(,Q($\'gl]~C{>iY@9} x&\Ys= Wv\V/^TrRcaSc; /sOl_P>ӱ K2/؄+{NGʎ7\O\^."Wj,ljz}gwi\6$6\9SLH]zMs8R l=._3N4g'bƉ#B؛nqxK{(TynO^iwʞN)6 >&ntS9)=^M&EEzb aWS ;Q(wǦx5E6B>x6"߸Нo4sTy" 2L•=e aon5g.QhYr,K<SXRP,T0 }I9%ZM7R6#,9xZ%PXRP/] 4,)\B` 1ڇM(|KL>6adS{Sm.O% -KRtF!C= ihF!C!9"1-(͖ͯ*>A*S" >A?>A*́2!X"X(a8˯Q M(AS(=A(9N /͉͝   >A*S"́>NY^(4(0(, (% (!( ( ((  ((͉|0g"́^2! "P~08 8#^?:N( >A:A >A"!:(!*M!;S͉*~s( _4K#!R*:A(N(jX c4dK x c*c4!V͉!V ARROWS/TAB=CURSOR | A=AUTO | N=NUMBER | H=HELP Q=QUIT TO LOOKUP | M=MCI | S=SPRINT | CTRL C TO END $ j) PRESS ANY KEY TO STOP DIALING k($ j) ==AUTO REDIAL ACTIVE==ANY KEY TO STOP== k($ Z j) NUMBER TO AUTO REDIAL (ANY KEY TO STOP)--> k($ T $ T$ ATZ $X ATC0E0M2Q1DT $MCI CODE HERE $SPRINT CODE HERE$ATH $; $ ATZ $ !L*~˾#s Zx0s0vz2! \! \s2vz2! \!P \s2vz2! \!P \s2Zx5z3! \!P \s3v͑    ~$_4>AK#K x !U+| d(>A  ȷ~2>w*:w!w#@=2@<#~^0:@^0:@^07 +| d(>A  ȷCURSOR | A=AUTO | N=NUMBER | H=HELP Q=QUIT TO LOOKUP | M=MCI | S=SPRINT | CTRL C TO END $ j) PRESS ANY KEY TO STOP DIALING k($ j) ==AUTO REDIAL ACTIVE==ANY KEY TO STOP== k($ Z j) NUMBER TO AUTO REDIAL (ANY KEY TO STOP)--> k($ T $ T$ ATZ $X ATC0E0M2Q1DT $MCI CODE HERE $SPRINT CODE HERE$ATH $; $ ATZ $ !L*~˾#s Zx0s0vz2! \! \s2vvOPV.MACY  !"#$%&'()*+,-./0123o456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX}~WYIe~3 WG?TVz7O؂P dxbp\1s1!񡲪~WY8 ga>qn>w'_qT}ʦr>kTO1p??o_~o,tO*+?ʉ(6P dxb1nL*+=ˏ /*+ʉFbc})#b J(>;?QL؃ʪw_䢲PKS~\uC.޷ KÚx"2{o;] qҗO G9%ǵEŇR7sȇRJ|;^Ƈ[vPj0V~AF V5oQ 4(Jn #4H>iyPn;~uQ"F9m?w/XD>iN%L.k\h*s/;8Tґ7sˏX+GJGVT ~D%qmKn*}NseoX}w58d王oX}w58r"ݩYT ~jXO#] |8\RU9U0l5)WSMqIS9>/M;s%5㞛 W~M%Tj?憵"9~bWFRt~qoX$rĮ2=A%rmQ":FdsOʑnFD.ury?w|ae+S %QFa#4.ﶆ2.(l4(gэrV9`=B݃+LwQXzw HQبz\T |w ن-8*|"] NE(ws/VN\JQ^qr4Fy?wҠRiOKSiO_.M(;Tr~?wܛʴry4\O-~_~oBa"oXݷ-eͷO;_V%}QTT#BӅˇ:ʈ#xcQٿԘ]-lS_ߗf*:UQ%/عU` \6nBNK4ͰPU8 idc\4"I$0 =s]|(E`nH\ptp*}+TNpUNp-jc _iQ";XBK38`u+y?UTTT֟}75l݅GaڂʪCR7VI# F0 T_-|w5wgs\"Շ ] ,G(*ǃ}i':KdGS(T^sd!L4\AmVoMFaSH)[$r93\(qd<:-WOoWڂ# 'vse<:ŷ 46 *p\ezW>';򹲊o ?q{qmI0sb OOC.^o  w*xx[Q;@=P F6Bxtx[j,VY>~ĭToK3ʑ6gڂ:(Q~o*GkH3mQ14O XFrQKdiQfbcH# ғ9`-a!ؿjpt'>Dl()>+ |6C/ H}oeQ/jpm1#m/OXcgG1PT|(EXBKK{6sL{6vaG*!2Ŗ#}ةg3)T`QiKp>ɇ+m.Tc.*^FgF>39>ȇ |6#L#`(2"q:3wEO#qEl໫c=s$ߝ>jpd8BQ%|8|wK35?1l]e`-3S [仫r+7`i rMfjpt'>D8rIUE'sWEg)l仫QNq*iW)9U/TN)6&] N@gSᏑ|.NEei|\qS7 ,f%`Llt\u\.4*=HCIU!L3L4SZ_Ǥ'߲>*(*}ޝFC/}HQبz\TQRUށuJ}R&߲>ͅwE]n:6]n*xtK JqcgGU'~gw` ]rS_KJX)6.4RҏJ W`fc Dv*Ho_4Rl*xx[|X7J0R(H+m;<:lu $T#-Pf8E߁5r䍳1#(LcSR~+q8m)!mVo4]8f$U4QT` yX}cJ[p{ 8l*|SCy[J=/ǠC.F0J +T` J?vvK35?10JdG1PPNq6*٩RY+D1U}+@1!R+,ْc,Z$1r#! |6Cةa;6g k-8zcTT.FJ#TS%4[?T'n X?H>m\;\*DCbXBN7JTFT. @K:(|HB]e\T(6#$>T*tg3⻫']ؑKh|(ٽcu\cpL3Q TPz\T*r%Cw`ÿRɷ첏T|W`+mDaҏ ޖ%qI*;(L#xzHszrI!`FvZ$Q>Z8kbF*ţ4( *T\tfKOl%S-3I1!kC3XBCw-?`L3LX}%Qh*a ,!/6;o_i rM~o*xtx[rE~Vn*xtx[rElj{r|'N?KH* > |6ÙcSh٣ |6QXqv4]8fTfhGTD^TTr C#o_i \TDy[ |6CpRAbݫ 8x<:%^TZ.U` ͖;wg4( 'Q;`=J#HGQQɻWlyDrITJH#:>'z(* *n#Ie}dG$v仫/<"Vo4]8fTfLUTWXBN>rIT8 }DUe=|檒F+ۖ}\8?y껫(=;;mmnTv3>)^?TFy$--}ΥϹ9>r榒+?\vxضļ/\RctpKrV^bä4r/5NO WnD^nTrኴû%}y_i4F_9N#e@5+~q:~Zew#rFRTqEb/_r[b~1_8~(=rF6@5M_~/77onû_vus.}MśQH;[e\^77ՇUEe=C©PȮd)sLidL>$رûŶmnm}sSY[~8v>TJ?_.*H'xX(+ /EeU1+ۖ[—"}sS9"~c"5D; B>$&.MN7J"FCbj֜=( $N?77c---on*\im---on*FvW--nwm훛 .8 WlxNT\'(vW(l(UV$хJyf*-WXBrVf\;XBC]nWXB^>4{WU0G3lUm饛 G4J ͝F׆*! 0{mh%ի>! ` |M@ GTKW!g3}S!x'MzMKӥB3L4SfH0{qTQ9r_ʕ*(*^vB!1T64SQO\^z|6C7,>5|6C7,OBf=BfN0D3fHB W!qTYOp߉(-#;:‰bKrmUNp߯*^vB!1T64S!@%v~xu(e3NpR!g3}S!x.7|6C7,O/MzMKhx~',!ry4rJh$V!`LK३B0Dbg3}SYUfVNB%T)ْXkC3,Bf=B U GTHr! l4 ` ˥SB% ׆f*X/MzM&>!ʪB%4[rTDxy\ 9%4[0{mhB%T GTa" >! TQ^^z|6C7xSS!g3}S!xT GT7Ύw̅rI]eJ=׳ $"xUzM^BlУo*X/\ >! w?i*lУo*X/4|6C7fhB UabPG()>]U6^kCb0{mhBJ4ʧ+,Xw>RF9S4J '|6C7,rS!g3}S!xB` ͖O|",!ry4rJh$V!`LK३B0Dbg3}SYUfVN|",?%^^./B@N ͖*^` 4|6C7fHBf=B*iOWX/\ >! ` |B` |T GT7Ύw̅rI]eJ=׳ $Kg3xsQTa 3L$V!`CpUTB]KKnM { XUQEeQlL;⍳xyXqvTc.[vGv**tD-#;GU]1{mț aڰ{! aL0yS!l=Ba a*&vBa"o*QEEenH njK"9Q(g%eH{6v*+DpEbaX).3#^QD5Q4 2{o;HL¾Бv;r|5CP9BF8;rvQn ,/Ӎ7l=KHU` ~qiۦͰPU88;4]8f$UVx ήRboxl[64J 4(j]:(2F9Sdw#'MŇ2]bڐ7^vkCb^2(qSfS*a fH&v&QEe\]]Kz\:*Kbw%XB^>4{9+I|.N~ X$ F9 Gׅj DZK%b &_G*1´gJP TrUy3U.b#$>T֧8khDwEe}(* 6jdK)z(* XOyDtjXx4ֽf%SC0i jtUTV5oe(+bc:BCF쮘6^׆*64S%%g3)T0L3L$V W㨢Z(gJlAe(+ힾR%9NU eCI*‰׆T ' {^]ѡ-‰kT yS㨢\Ė:B|.T` /Y:{`|.Ȏ_)G:wW# > 8"WȂq+]ؑҋ^Ilp`1WʎJٿ^N` _iQ";8H'\0)lt܃7rE:ոcQ1޷ʞ|E:wDJGFT Q|8F9G9%ǵq"pmTJ?vvW.r4;B9%ǵRبcgG1PT%߮H;ntZc.[vGvTcp*H;.XG=f›i+>ґolL+>{6vTg:ΉmK(g:z3BJ%v*+Ҏ#4.X96 2{(gqeĉ(سq9ǦR+gs7XG=Rn3WjXEe͟qyJ9fƎUT%'Ҏ VǕ'ڂcFJ`e; B>$&.MN7J"FCbj֜=( $Neۚ ,/i6l=r`f*a" fؽ G7G\J?vv*+WmT9(*~F7`ՙ=qě wJ΍|fr+*p?aV $ mX#T'bށw8xVظЉoicg296g8*ZSDe}dG$=Rjp UʊQfhF_)V¾UVg-#;%#] F`7]+T` y]!X}*>T` /Y:{`|.Ȏ_)G:wW# > 8"WȂq+]ؑҋ^Ilp`1WʎJٿ^N` _iQ";8H'\0)lt܃7rE:ոcQ1޷ʞ|E:wDJGFT*P VDE-2C EDITOR OSBORNE EXECUTIVEY-È1 T ͯ>2 j) FILE LINE 1 COL 1 ESC- M=MENU C=CALLk( =4o$>A!:\@w#6:#!]> !e6.#>6 #=>!TFNy>B ##>1B&4 ##NFy>>0}0B> 6 #=L'd !"^_ɯ2u!"h"j"k"|\H:|G:k!h4!"j"k"|\¡%\H!~%   ~ >>4#wz#á\> :#w2uN7] ? 00000 BYTES FREE>  _:t!\ !\!V\\!"h"j"k"|!D w#28\:8N! > |}1>w\N\>29=>29=BAK!>A*^>>A*^˾>{ &,w#>A Ҷ@>^*^w#"^*^w#"^>\>\+~*^+ +"^>A> *^w#"^> *^w#"^> *^w#"^>"^\}րÔ*; +6 *:Do%"? +"A :G#6 W*A #"6 BDM*; DM*= l*A *? DMl*= DM*? ++ly*? +*= "= #"? ̈́*= #*? "? +"= v*= ~ >7> ###7?#+́ S> *? 7?z$7*A +> ##>i*a+"a:5i=i:5*a#"a!iÕ:4=Õ:4=<Ç:4!<Õ:24_v*; T]g~# µ~>ìê"= ́*A T]g~+ ~>"? o͎#͙͎#>29} *= #w"= *; ͛5m!"a*A Ͳf͒vj> *= ja"aͬ҃:m͛+ڤOmò*A ͒~ ²Oò vo*= ~5>+"= *? ~~7?r4r+w"? ʒ r͒: ́͑*? ~"5>&#"? *= ;~;~4Ä#w"= z „Om> i h=W͌:4!*= ~ *2+"2>2:4! *2#"2È :5*2B"2È :5!*2 "2È::f3)0R3>)30R3=363D>3E>3 >0f3xG3x0:R3 f30O:f3>0f3y*{3w+"{36 *{32O ? FIND WHAT?: Yj 20 1 O!:0 j ́C !0 yO xC *? #:1  C p I xC D 5 p +~#=2i I :A  :B  >29++Ͳ5͒OS:i 2i RÌ>292 :0 =GD xŠ =z > \^4U :U H0ʄ4H=;: y4ɯ;:͞:!*#@*?!!44͍ 4:@¾4x4*?͔9͊02@*?r: ? NEW STRING: Y2 7  O!:0 j G& g ? ! ~I G#~&g T I >29à } ƒ >29&̈́͹ &zù vڰ *= ~ʰ ~4ö >&̈́! ~*? > & ! ~ 6! 6! >A/> INSERT ́ : ʊ> &Omͷ͌́*? ~9 5>7?#"? Q *A ~ #^ +*= ~ ^ #"? ͙*= #"6*6y| >29*6+"= ͒S ʯ  *^w#"^: =2 >P2 : O*^*^>  0"^é G: =0: =GH> *^w#"^ : 2 c>P2 >A> ͊  >c>P2 ~#>A͊ >( ( 鯹S ~#V O > yt AD ʣ ̥ b yO*^D ʞ ̬ 0>Aw>#x "^: ø : O"^:^O> >PG: OY x H*^*^>A>  (>"^+*^0 "^>  :5_"(5/:525Em2 <2`fͷ:4Ox2`^2 fx242 :c*:5=~_ :4=ʍG: OY *^"2>P!4<ʫG*? ÷ҷ*A #:5_:_ 2>A*a#:`o&*2>́:9-Y ? ABANDON FILE? (Y/N) _Y:9͙͎X*= w`>29{k>29{*= "= #͛Sï4͙́*? v:9*6yڷ*6vï>29ñ2=@ !!@Ns#!\ :t2!\ :2t ? FILE NAME: Yʫҫƀo&>6 #=!6#6  !::Z:AګS ګҫ<2!~.ʌ ʘal ګ:ڀAګ[ҫ>ʫ#Z>ګ#Z\! 2tͯ>29ͺ>A*S"v>Aͺy>A*2!X"(a8˯Qʁʁ H r!yH M(AS(=A(9N /vyy   h>A*S">NYp(4(0(, (% (!( ( ((  ((|0g"2! "P~08 8#ͺ:N(v>A:A Dy>A"!͇:(!Ṁ!Ṡ*~( _ͤͻ#!͇*:A(N(yv&{ͻ x &*&!͇y9yr<ó ARROWS/TAB=CURSOR | A=AUTO | N=NUMBER | H=HELP Q=QUIT TO EDITOR | M=MCI | S=SPRINT | $ j) PRESS ANY KEY TO STOP DIALING k($ j) ==AUTO REDIAL ACTIVE==ANY KEY TO STOP== k($ Z j) NUMBER TO AUTO REDIAL (ANY KEY TO STOP)--> k($ T $ T$ T j)RETURNING TO EDITk( $ ATC0E0M2Q1DT $MCI CODE HERE $SPRINT CODE HERE$ATH $; $ ATZ $ ARROW KEYS MOVE THE CURSOR TAB KEY MOVES CURSOR NINE SPACES RIGHT. PLACE CURSOR ANYWHERE LEFT OF NUMBER TO BE DIALED AND PRESS: CR = DIAL THE NUMBER ONCE A = REPEAT DIAL UNTIL ANY KEY IS PRESSED N = NEW NUMBER TO DIAL - REPEATS UNTIL ANY KEY PRESSED CTRL C = RETURN TO DIALER ESC = RETURN TO EDIT j) ESC TO RETURN / H FOR MORE HELP k( $ THIS IS THE SECOND HELP SCREEN j) PRESS ESC TO RETURN k( $ry!͇*~˾# `Z``x`0``s`0`9`z`2`! \``!P \```s`2`9`z`2`! \``!P \```s`2``Z``x`5``z`3`!P \``!P \```s`3`9 ~$_h>Aͤ>Aͻ#ͻ x !U+| (>A  ȷ~2>w*:w 4͙ ? PRINTER SETUP CODES: YAO!~j# 8́*? D Xj> jM*A {zM*? ~A[څA[nˮ Ì:`2:`ͭ2`G:<>_D xG>·yҷx+6 O͌÷:͠ЯGͷ &  x=RÌ:́͠ ʁ!` ~w4͛-ͷ P&   {'& g& ' ʊͷ ʠ & Éʌ ͷ̚ ͚ o'>29 ! ~26:2 *? *= ~> !!!~#.?!:; ! ~ ? MACRO: YO ? REPEAT COUNT (0-9,*): yr!6*ʇ0ڇ ҇Gx2!•!"20+128,' I/O WORKING... PLEASE WAIT',0 RET ; ; WAIT ABOUT A/2 SECONDS DELAY: LD B,A LD HL,(CMDPTR) ;NO DELAY IF MACR*~qi2:9?2!"q*~c:=2Z!"!"q~#"iqF#^#V##^#VÎ##‚>A!:!>MM ? C=CALL X=EXIT & SAVE | ^C PAGE FORWARD ^R PAGE BACK F=FIND Q=QUIT, DONE | ^A REPEAT FIND ^V INSERT T=TOP S=SAVE CHANGES | ^G DELETE CHAR ^Y DEL LINE E=END L=LOAD NEW LIST | >A!:> ff_{`T4EGF I8SWNMCP Bb Dm QXLmRZ>29>2\ !]6 #{4Èr7::] ŸÑC:u2t:9129*6MD*= #l_>A*2˾>{s   oPo   7  &  >  m !m:9ʳ ? ERROR::9o&~_#~W( ? [PRESS ESC TO CONTINUE]z͌óOUT OF MEMORYINVALID COMMANDI/O FAILURENOT FOUNDDISK FULL OR R/ONOT CHANGEDCANNOT REFORMAT ? I/O WORKING... PLEASE WAITG*~x1 ='  x4 ɀ  OT FOUNDDISK FULL OR R/ONOT CHANGEDCANNOT REFORMAT ? V##^#VÎ##‚>A!:!>MM ? C=CALL X=EXIT & SAVE | ^C PAGE FORWARvVDOP.MACO o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNo?^YKH\)+׏eXkX0,ZMӌvN\:xd礚2/! ):T _ _BU=C;> ;B넚uiKPbs#>Txwwaf|!k*x>9+ S^+N~BZ'\2!"H3k \ -ᕨuPX:;X }Z4J,HΕaN{-q}DGGz ϵt4ﱜj9 ~q99l)W-_\Nr饖Z'|X-12!eoX1Q@uFLh&GS99N\! J>.:aoq%~Yjt'D },i)eԂ _1,:K )cF 9+\ Œ5ڧODŽO2BJ1U3*X xD5㹪b̙U :?^?}:0ӧexTRN 5O\`S{tmX:RZBmYz 鈵99,t|K&\!W]ZNxwwxh-:+`yt@y>[_RW%Idxw+|?}?:Bo,+x7=B+"93 kHP,e@_xpG ӌ/5PBj9h $wqɄj_;s ?^}DoKT<`ӌ/5PB:="З?~:`e Ke@c,@Z n)@K T,JKm NpG&%oxБ#\bp{OZjg`,bm1̵p}4BK#*K@;:f T>Yi1DX?^;˺3Зa㢆p] `Yeן_;Z@_xI~,k}Y8k$vL@/ W?"ΒW"З^A E@_xǟ:@_xYG de׏:R!tZ}G/ s-w+};}Y[%e׏5΢!wO d,g%<38?J~,,<<7Ǐ}Y㵳<<^;`v2s-@_xΒ\}Ykg˹/ <ځ%۹o@_xYrЗ4,YZը0{GT0G89<;V }*bήW}.z#}/.'>Rf h9~'ඏj1j9YGUds9}8W%, qze p%O)"Z294ϟ,ȀS .h^>Q pG@S ɝ.pJ>:@sO\ eN1WxX мj-O,bZ.O|R|bOz 4ϸ}}b@ OKjɗ@ OQK&ghtRbe 4D'm=Z:X:@%мAeAO}Z95X мe?YDOO'm+x7(oӏ׿=0-iF%6,R_bS ɝXBnZ }Y:ŠCr'O@_xN1:Ő܉%VKF/ Wjɿ:Ő܉%F#З^jpS N1$wb Q@_xN1PS ɝX57hăN8kA넝b2X2\ @]\ܾ窄% Nٯ՗;8apX 9>1c5̍|+xh6k{ˁQ҄ZVcplj /%>Emْ#x c]-bX@ܺާnhKD#CW|ms9.>r|!9l#4u.n_\]6\08x hO?}(uL3U K<4@E\ wm5cw#˕M>r >BdF-USb&ms9p:4sr4?X}h ;nhhka%\5+UMl.>*TM]Y}q pzjЕy,РMھ`ds @i1pd2XO兜_k5,˱Z+Z_1S5\}+9-be>T.h>RߧjqE-bXKwW%hKpG/iTcY}|@t,h^pGLsrk}g@w4 #s&99T_Y@n83F,<nJѡ= ަ*gȫ_}e5ҁXACⶏS2LtbuZ=Gْ#3; P,`A3sX0b,z '@)ndXKC=UcY}q@WmyYEoOxhՇ|mϸ}g*N C+ bh0S5w4ue>XCK N([rX}0-c@jgw4A}}g@ ,h>+<gpGhfN1R1 ަ*4@^X@ݧ V} * N h[YX!ԕZjz4!~Qc%sU N}Xa! X /+(ඏ+9T -aH,buZ=Gْ#l#Dz4}z'ᕢùCW!C6>h XK{~^ |:=Nϯ3`)DW㪔T_]:At9 Z•pܩ`k9Eo2;’[4pۇ_b#*RVSaI/h^pۇ_bEIi-4pۇ_bEZe,Mg:ǏR-0[tiQa p-ԕ 2Œgr>a-j `i.-v]Y-C hKz4Em'2\f*4|T5-5X=  Ԡ+ 82`,e8ù*ҁ'vŖj9ziɸ>}f<{=s}e᪱\ѧ9ʹabft)8k<3Cr.OdNC*4aWSWٯ|O]Y@fݧ,M_}Ta4Os1pJ,*!e ^n8njR,m:r%pGI1\X@}Ta4\y&Oϱnd1G9Y\=_@6/D~qT  hu,t;|5_3"&tƒT|>1c5||r!C6D8JJ4\X@tfһuTa4wbXc%xun;:Vc uzᕢC넎a:Wٯn}ܧ,n_|~O]Y@fnhh84^c%`wCz7*>Rfu;ඏsha,:9L~C6j{x<ˑkI~iA hAWxhpJif,Gڞ/ 4pGKFC넳_Y@pۇ0ӗը,*!eH"ඏXK7 <4(oӑ+93/} Gm-b eɱ@K n8Ew"Cb,ඏZbTNY]}Т;a Q,G>.h>X}ȰF,h^p-s&99Ԁqʝ|J3Joxh6Rq# C*΀>jjD7 <4x\uHyB.s|dX;.1#zVc;m5c5MG {jX7x'm5c5[5]qGIFVc@j?mQb儹EO7 <4(oӑ?n_# cX ƒT4@^-X΀>NdXp}4b,GzZZt'2i) NbGo>bf-zb9r3;ඏZaN<>Cb,РMG>p:D Rˉڒ;teXgm'2,njWrJi@[r@>r|!Z %wOϯpۇה  4|T5-5-5 NޱopzeTuMG>p:)OWX]Y @,n]S-9Bޱk$,nGSDđ{:0]Y-CWm9UW \i˝M]}̎sveUavDn57XZjЕgm^):52 82`,GZjzhY 9xᕢY)@3nds,Ȁe̎( h@'QV|*,*xޱrS4,#.h^uG#z^Y@; <4e Rfplj 5N0|5+ h?Rg @SdUa )mJD٢-G#H"ඏ1i*%\ s| ަ#@>J0{w4p}jfN84@)4?>fR9Yg #Vc _π>|jX )44T,V?}c uZ4T,M=hh+x h?=>)aҀkY@Y@gă0y¹*Ynxqzᕢù*zbl}JX2X4@i+ h?=>)aҀsUbUa ) ##^M_Y@t^}x:Wٯn+ hWz>SWٯ|O]Y@fݧ,}RFo8W%~zQK; ඏj=a Q,R>Nd-:1G9X>2:T*',h>RߧpDR-0-ugr,GN>.*;ˑo4![>BX -u´X[ eɱ@yWmxKpN~g@jpG-A0-Öj1r, çZ'\XAy=#ڰθ.LK2U_(ާmVm@[r,M_Y@{qv|T5Adteb4@n9PC69͋*"_qNbm1$c N?X |㥾O,GNڞ/w>jj h8 #™(CI7q,mC*~C69i` 'e}N|*G#xhPަ#'m,xm5cJG## <4(oӑHVm!aB ަ#|m,Di04@ b} 4 9fr䔯M_Y@{qv5fUY 9,РMGNr5_@fk5e¹*Y`9rJE hr>Exhp5 #yQh8}g p@ݧ f+<2XˈS3j9ҁWz\Stc -9Zp]FCM>ZM~)r¹*a ZFwZ* Y6w u GR-:39mϧ|]YJ:rKq"C8G0{GT\3dඏ#XJ]}:awZb,RZX@tn|g@ඏkUE~q99xb,*+Ro,h>CS;Lc&S ,/,h^ඏ,h>)+ 2 pJ@y}xTBf@N;4pǿ5CoS 4ᔽ))+:lXKS@K n5:!8ʙZjplj eaK9)nȖuшjpǑ^rb(>nO\,Р)_)u4Ò bm11S| D>sIq}4bqf {bb#4>ucę%_)_n57hp}4b(- =2`9e.R,R>Nd.L[ȱ#:3a4o,m|,CWqun8h+rBG7 ,@h #ugrR-F4@[wܾf TX >诸4L\>n_.iFߣȱC|mNf>sI@ ]} 9qz'm}N,{Z }G#qz'mA,|O_\N^j Ԡ+ h[n)ߧ}2f TX!pۇ#s^s|2䰥Z <4|,唽@K @K @^Vx}tkiR9YgG,唽|TD) <4|,/.  ZZBTXzrY^+Yˑ^H/*/çF-^x][/w+ ;:Vrg  hJ_SWw4ueZueG,e^!#PF:92O<#|mx cp.F, , >2#O,m]gqhޱ@  cG,ھ|ZB  <4(~* '3 82`4@4@c urg|XAKSo@  ۤU~~pd훫q , <4(oS X hӍJ; Е4@c ߾o + + 'bgpd2X䰥\R 󲺴X-Yr gxh)@m:ⴖ; Е4/NkO]Y= Ԡ+ h8^ٝ|gxh6iy,@S /, h8^ٝڒ;te ui-wCW78>ue uZ(opzgteo^XheMr B΢) h 9Ol N,@S %q۝y,hX\4@n=vg@" $?Y⍥/tշ;K-.Жܡ+ hK3 whAWpdP< !CM1tW_@R|gC},Ȁe 5c^VЧc2t4G9Sܢ'\2{#!z*ƒc,h._GUZ{:c'GX3tZ^>z}(%T)_OඏhXg, hmqT%aX@I}ŰւXGUddch>-emӭplj #hG#@)n=b5m@-n;:Öj1r,ȃR {:# <4(oSo`@Vxh6k|mq@j?#ඏsX }:)`noxh6kQ҄QC*3~>jBt4G9S ަ|m>J$_ZNX!@n]>)OC@>-2 ϰV}:==b-pMQ҄٪*果!: h8=Hyj.G4’@rn50fhrEO,nS-9jhඏSBMkaC mxGôX[h{ඏSBMѰлk ;n0-Öj1r,n+~O]q ւ+~aQJ}t#GCopdY@tnTqPc6\X@nha5IYGUdpih#Ǣ?.tzq"Zb>OpGkX[E?q@nF kia Q,ȃ(,cmY Mڞy|mϯ3~Fm5c5LsX۔㶏&< aTN,h>Zf,n OGs3,mqGIBFX!@n]>Z:R9Yg@j?#ඏPVBnt ަ|mϞ4@?~nxlqSA( O,nS-9´X[ G#xhQ4ԔK@nT kiaK9xh?}8j 5ƒC+ඏbR-F4-G/1c/,pۇ#[\AK*92Xyq֌.0#9Bߣa>XMɐ9,HyLGKX7rUjX bd,EO_.t>r|!mpjbx s}#xhP97ܾrZoQ\)]qNcx᪱\3 nOa2F,nȹq:20͘[K.R>eK+ h8)Gْ#,Ȁe 5c^Viq}4Z0SF-lfɱ Z EO_}NsrR:Xg u4厈DsuٰEg,P>hR-F4}>%G>4>uEđ-9–j1r,Dm^):}tg'pd2X8 _\N-a ӌF2X, hmqTa4pRmGz!NXGU^}dC :[g uzf pZSWpd2X8 _\N-l{t9L3`YY:.N7*8Z0R ,*ඏ#Z'G,*^}dC Zgi)FGUXOඏ,*F4@)_ cJHGGq4@;5| XAy=XXAI%_Bhܧ,Ȁe qBZ襦%B-:d,K@D _qNG4=n(˱4w-\K`U; p)teOڞQalbG pۇ#[\:c4X@p9zAXGUNgcU!qB.%_.*lpǑ^rrh gpRmGz!\2FR,Ȁe qBKXPkOҹ\@GUp#֙|T\5mXa*1j->B4=n(˱4w-\K`U;W pۇa-ؕy QXB-pǑ^rrҹum٢3L3j- BpǑ^Fw)g9 82(o>:tDT Zɰ'W~tf [;ඏj̆ noxhPަ#m%MteUH/~q99 \X^n8 h1zrSl,e/.'h f07f#ZNLs2ƌ<#`Q>Bnm:VrGR-p}4•rr,tzѪX |f>Q07 <4x=ᶏ&|X^@ wm rp99ɱoms-'%\5oqzඏL˕)_ۇn_G-189|mj+ඏ5+Z'l#Kc p[i}ꊈ#[r0#K h-;"j1C =QK&g0bn <4(oSoj}%MxJka@j?mEO>foSoj$%3-zb [;ඏF,||pۇW}t0⺜XXwm'<T @-n]>h>C@n8 _\Nekv@nXbK9\ h[}dKp}4b p>uEıZ Wm1BMZHylc;m1wx YAy BcUU,*/>bxX_\N[j*,Ȁe qB~q99LZ'tԍezvU! ඏXѥtlYgU_ pGTG19m: 57,N8_8Z0z7\X@D G#4a3nOGs3-zboSgg D pz(,Чւ=om5c5lX@>)OTs,РM>udA4KggCWmGz!l#Kc p>uEđ a5Ȓ4@; =QK&g0bnoxhPަ|mߜ@ kඏLj*R-s~C)_7g,tzgwm5c5(G<{=fGo>)OZETXwm1%Y'EO,Р}:_\N 9훳 +ඏj1 G#)4>ue f-Ydq,x3VÈ>:WБ-fmwm%Md#XGUſCnaɆ~q99l)W Gz!c6t2XɅ h8=x nX2\q%Lxgۄxh6C*mr֔|Tw -5}C;Q\=ucęy,Ж!,РMgMywpۇ#[\XRy#Θ-FGR %w3 ^ì>ltjnY@t^*Y7u#7m+=S : 57,NfY@ŕn^Qi|d uewg@n=_\N[j*,n~qݧ,¬qz#a-ՒY+<L; ޱ#7mѐ^Qi|d }X\/(4>:ⲻ@-n=_\N[j*,n~qݧ, [eP8rUa&}e;pdP}d פtjnY@B,<#7mPk!|Ps1+# h/.; hO?^;ඏj1 j-3կ,n~qݧ, [eP8Q0o 82(o>J2k : 57,t{!gw]'2 wpd#j̆Z ]Qi|d uewg kR-лB,CY@ⲻO]YA0+`Gz!N)L} O4_@馵PuȰ,JӌZ eCPƿ4@酜nhhC?@^VunZ(/|!g>)+ h/Nk@ NX@ⴖԕ|T\5m-bhҹ@ ]}_13B>C?,,РMk2K Gz!H/ rrx|TKpG K6NcUAg,Ȁe qB~q99\b*-ex Nrvm'2ɡBY@t,C8ݺ}D_Z e4Eaze ui-wH"#O,h>C^}Ҳ*a^Vs +ඏl8'&WOi-+ l>Zz4-X4qZY 9,m*Xࡁ繲 |ms+^GU8w )_۷0| ۺp8'EOrwhKg+ h8ݺ}0 G#CW%Ϲ@^V>rFGG=e!t" ,mR`mqQ ~g@YAy}̕4@nT|g䠳C6i+KI6p Q SdG,eNK + Е|T#q-b:_\N|TKpG&CZ a*hum1<,/.'>B-pGH炩j->OK1:}dC,J4@nu9Y-CY=9,nu9ݧ-53 ,n;=ẜXࡁ0+Kn~]N42XZ9wq` p@ݧ X\Kz NY  X-Y-CWmϳX>‰C+ wqZYAyfX!ԕjy,РMڞg2{Gvte r ˉpNK rb, Wxe@s珟,XNtUk|T@y&獵Bgj9]izeUDnhulւ?^Y@|?es)@rY~m!'%j:4~zf `^Y@tY@CuH/ ZNX `q|?]@6; $Ms-c NpۇOK1b&|@[rճ@G-5X= <4'ryXYAy\4@S6R-0 Nwm>-:j=@rY4m_jXg, 1`"k\-Y]Y-CWquPKv-5-5X= <4'ryXYAy\i)e~".49w" 82`,%Gz7=ƌ5 o.*fGm'2{t9xhz2L2J2mNQi6L3XK= Of}*撢O~C?k{|珟>jjHC6k O Krj,ڞ hr>EܾZ^ր>G, |m_GU%;C <GuyQeU}/.'>Z2ඏl8'drG  b;+9pv 2j #Z\YK^GU%;cG|TkÒ wD[j*,k-e QK&g1 -uB0h/.'2Xjn_GUXO_qNG#JC?k{}4p%j,W]J_8)OR-Ѱ ϰVynaUcfoSY@D Cb,||fG|G, p# [R| c] }ZC|m5n8%\uB`\4@z#OpNS!-zbU pG[ a-hXgQ|TZ|qJXwtP1NcZK:Ւg'D-b k g'4aQ3VTXAyHy¨!b urGQ҄uBߣȱw,ܺ}Ԍ0wYඏG*j,Ѐ|pGIR2j,e 5c^V餔L0%`gRK5.^_;n%3eLagR-Nz u%O8Z0Z'5X |pGX SaoST}4-`5L4}zHyB[\j4@שO =ۉZ*kg uSal @[-Z a-A9X4T>|DX^j 82`,|*`@ OXK&g,| Wx}b,eԒFѹOlqeT.*nL ,Oջ1XZ ӭ?,Nfq0(gL3FҜ@-n8crf p>ueG,e r1FlYMӌ oKvr/Q1ÖreP.NN}'2TcUA}1m+a^aC|mp:Z OK1O)q` p@ݧq/x"`G,%_3 hӭ; Е4m/+"@JFFEK ZÒ rr,,e+np)4kFX`S!\0N#*8'OEXX>YFIFh=@|}Ԍ0w,mVHy|gX>|'99hrEO,РMھ|OඏVT:aӭD~q99l)W@ 4Smm1 TD],Ƞk4@5XQ T -4}#a5\%<` 8WULanS99%_sX/Ж!ඏ_j6rڒ;te [o)qlj ]J*͆B,}RFoECb,4@[wܾf T>4ŀ;-j5e%ZMo`; h-}bQr ƌ9-jwqz'm'2[1uBsf>Emla5~qa`KZMjpG-A0PZT0(gnT 5>-pNG#(G  <4x=ǰu-挫[pNU%%* h}=az!aQk!|m1z@SWm^e®K@ }, DGG!@) h[n)ߧ} awQr Ԡ+  <4Vm22`-%ϹnL g'}Ű,JӌrX ,t-; Y /+,h^?}qD8'f}ӭ,Cd N4Vm4@|OඏF-zT:a@ + <4(o}ôt#Gq(,0 fc p-Y`,+E -5Z eckVS4A9O5{wQnp/.' N}#tF:=B,pۇWl_YJh{ Nޱh>Rt B,C`m3n {RQa(->t6mkW -5q:`pۇLJd4SdG,ePs [(%\'vOrxqun8u¹l>@-n;: $pGX R YඏG:xR-,*>ඏVô @i1xhr#$,n #2XFi|DF^}zj4}9sF> ^]}0DGr#4>b5xhpzWȡѻ 2׌yY]ZYF넅 cEoKt$c ѩf#1:%S994z+Qѻ3:j?Yˉ_=9,xm51OjYT~C6k{> h8ݺ}Ȱлhx3~Fxh6k8naD(g >@,^p# mqfrT:a| -vA4cnSFK\]6XoϘf=\RrFp.۝esup}44c6Wˉe컻q"CZc n#L~C)_G,Жa>r|!->-X@q"| }Z+}Zh{>‰C)_sWÈޱo`qQ3VÈWQަ|m߂m'<0%A2 npOhЧ <4(oqGֆQ:hY@npXRZjzm'2=5+ h?Em%GR%_G4A{rKD;-j5m_GU8wm'2 "F,m>mR:w,X\}Ԍ0ŕ|T)_?g㵳@yW1ӫ>x%Lɡ78/</5Pg; Wxjn=T 0[,RX |Z|}g@Vm cmeKЧ 82`,ھ [}'2LjJd 3rxO~n兜a5~>2Z'\5+c '|q"Csu0bG,e b0[r:a`LiF넡km42X˰^3euiZCMcF(c謖F[;Yk=51_kCbX c  ƗX5J,\>-Ű\YKZ4@5Xq"Qs Y@Sd [,Yki|Tb,!k-QBݱ fi)㒍oH" <4x}e,qx1)zmVmnѩf#Y-CW~Z}RFoECb,4@[wܾf T>4ŀ;-j5e%ZMo`; h-}bQr ƌ9-jwxR->R%\cb-,O>Nd1 cFb39D4-}>b 4j Qr !ඏZalD` Q,ȃ;::j }ZFQ R!4ަmc9#sU:cIx$Gh mEO^ȡlfZ^jඏ5+ZBGQ=C+G/2aW%` τ>d p-s|!,n#*RVSatebe D*ӌZ }kz@nk -:4cwCX-CW][n)Y@~#nr"PO>Y ]ճ}-5`}} WG|GTq|X ;:j->-ȱC6%㶏+QS X`kƼ.-V ai|h0N#*h}-'NØP}4 > 9=2T0h/.'jNhnX3˨%T%`/,evgx a QΘf0͘#*,!Yh^pǬ0/9 G2p.JGh=Z'G!:j-127r-aTMgNf2ire`O}b$0%Z-JxkAF2XBn~  9)nh 9ZXGUNg10[tiFX@fߧ,Р)_sh}/.'/Qk> 3VCK }ƒ9 h8^}/.'-j5X e1j-٢BSd4Mπ>r0]FK8XGUNgcOھqrr,*lpGIf2շY=9,n%_kO+E%_kcZY@֓ow~,ⴲ)"']e9Vr,< <4Sᶏ(c5f p+Z}}'\2a5xhOh,ھv plj }.z#>-g\}OޓVq:RtX62J:ci|DFƒOhqf;-E)g,ɰ wH" <4(oS>t6m٢3{:[j*,NewD'2rш4@n/>NdCX  ަ|m?CmZ9f|f @Sq"CZ OK1QB֒}GNK]@֓ow!C)_ۏp9fIoY@V;n_lj wDL3j-4:Em'2ttZj9Eo2 h?n( 64=:l~#hhh.VF>BZ ඏPs C =2窊j L3Kv @3 ޹j>4+ɡw,Р)_k(pNK ,N7*,P,ڞ_4@n/ N7nZ(z!g,mX@}h-zXGUYKf,qi!aȱk{~xO" h[mxOq\*Fוqxb( rZp:ZŰK)r,N788NdhPk!,˱cUa rIq:rOg N78D>r,˱c Sd ЧWQV|*>rOgt3dඏ#XJ#2X#[\AKۿjs_j9 zvU! u¹*Ӎ9w8nj0]@rYAyQ҄!'/K5xheev*TG'pRO>|*9)aZ-}x0{GTXGUXC,>e2$#b @+ඏ@s\ԐK|T5O>eXGU8nR!2X|*suGUq+a^}~~" !7e@ MM=KHoZ4]Y ci>fbno3}*su2X1/KB(FKZ' 5_K,#G 5h5̍|+\:_\Neh>B/%>r|!Lp+ % N7 wWbɹX 9,Ƞ M1Tp#XGUGsplj ] f!z*r,*/c%ux%O Yn( ]Jo]J_8rOgr–j1Q\ G1uBwZXAy}hxXujxNJ%_۳ h8=Q Sd4KYh` }Ӏ %aׄ\r,49w"n_G& ɹpxbB*2X}pz@SW]J_8r|!Lj+~az@SWfܧ82:KԅX!ԕjpGKFùl>(pRmGz!NcU>Zj`R 'm%G8d,eFhܓU bh ,%p#XGU}d0Zjf h.P/çXaq}4,:l~#hh8W G#xhpඏFX b,e 5c^VQƈ-9`:ѻaZeXB~q\>YU 9xn0zٯ,*:x h8(swܾ_G$c #2XGU8ۑO,NN}'2r–j1QR F*9tq"C٢3X GNnX- a\`9 ]GU8xnp-9 gCL6e]%.çi49w" <48 a?XYO4gxf,9x\@tf4% _Y@~z`  h844zOJ<.NIWٯ,V?=4@nIì; h\f=ݧ X`{j qJXAh W%S99ÿB,йă.> !7e@ MMOsU>‰,䰖 <4xJ!}sa$-wmR9YgOs,C8x>ZŰlXA,t, N?yYAY=r pz }\㪱\3 + YAy=Z T EpۇW/e9Vr,P,n]>ᶏUcbZ x h@??: hOϯ>r0͸j,׌(P` ඏRh` hzsR-Ѱă0b-,Nሀ>Z0c ~m׹R` ۤq#Y /+<'xhR9 nDXgt)_s),>^;sF} T 9xhPT 9ǒ !ߧ>2W_4@GR-q6r\}!m\@D G# >}Ԍ0bH ަRB2 M=o<nPә)_G),>^;ඏ k(>C?BnS1oϧYࡁ}+} W=֌S|b~*cgxhPT 9ǒ[)@)nha5GN.UFG4P{rY@4>Eq8WYO,*d,ȀeB]@49w" 82`uXFQa^VpN_Bj,>XˈP#E%Ԩ.*k /5PXpN7Ɖ ɡ&v<ݧ0r|!,,/*F;9T0/k/ CM ^k!ᕢ b(>¹,MFF%O>O9c(t;0Ndx<_\NcrfU/.ha_N~q99LwDޓ0%,nS^):N8k<@[r,N^_`d2=9C9L+ hՃ} oqMS -5 0eKZZrr,#c p" D}.z#APRy2=pN)teyj:C3?a9ӕe>Eq+91 z <4xB*R -K`K˳C)B0 Z—W co\K #ZPoԟXAyJꤍ|Ts-!Y@:iBISiXDQNd|ʞM!`?C6_YGUx6UDXBHXXJĂm6kG,!,A,A3˃\ࡁ 5O0@-a|hX&ka6k<]A&5ѧ@C0 >8|2٬IJu` h 0fTsX7X3 <8xǂeAxp6/|s^3 <8x 0\=uTsX7pަ#űoO,m:ҋ_ MGzca h WO[Y7H/~q,,M`FH炩j-,m:ҋ_  <8x XB Kk,m:ҋ_opKcoӑ^X #Z'M;+!9ˑ^.>R2;. }.z#K /.'1:1N9:& N`ȰW\0Y7x`N1G9Tw0K(`LO0 I3@r_;@G -a h>E`I%{wd p;SW9:_\NcrfU/.;. XࡁSZ',n{t9pxXZ=ȱdY6>EhKЕ4@+X35-ɧ2 hՃ}-5,#_kÒʯGߣe@,){wOK1r7kiQak e9.,tz+. #]Fg OOS,JX7_5vxp9-%h V{,J`Z-a-zhAWqz _qNb |ަX`<).>X`:|TL:: \ae hJ,*T3QNd`c5Zb,,,*xWKG3Qz,j, Ԩ,,qqUk59cm3Q3 zqZY 9,࠼Mq>BT4@Vc%wq"Öj1r,`%FjO:c9UcoSQ?F 9W ]@t\6r0e2Nx@ J RRQ/}B_jT Kc4=.%C h@WᕢCͥ >|Ts-!?XGUεM\>O9bH%O>¹,*8d,@3Wb,㠜2KQ/Vnyyz§y?͑-Ce9Vr1KjT,˱.tƲ+9oGByǏ>y7錈,VxB\:~q99Dx}wnC'=eo Owڴ6-MO/VnyNL1=as3WzDK-5 5j-'|()[s2Q/O,qtwuNL1=: 5*Fo;G#Zl7>M9z(iuhz'DB+x7}OOWj9%P O>=}'獵yb>,,Ѭ\ ݤͿ9 OS  F 0  >ʸݤ3 p3drZ 3(OwΓ,VNk>=}gGKW_v҆Oڧ?k>}wӿY窊儏iAKhaqJiz^'鉲Gz>Y窊Gz!T4y7<aOb({|>Y窊9>aIFc H%`k*Ow,Vx^'鉲/Oڧ?k\UJL9T\cI{,'h 4y7< ,Vnҙ yӟاObs3>Mk>~)G}zBKW-!jڧO?/O,,#/KBHkp%3 h@S'm0N6dUҜ#c90iq)Rˉe@l.=fve鱜]@tz,'Q2@4@Vc%wgYʢqu ?[; + ӕi)#cZB:g\-Xڒ;bhKЕ4M= A=vU!-; "gAU!-; h~,*|gA @ӷ΂>BZwtehA k zHEqɔ1kaAgAڒ;teadZ^/hYGUH΂:  i1Y@ |T\ Ԡ+   `,XXƹ,ZB:?_X-Y-C `A]Y%|&`tr4㹖,*|gA @YGUH΂o|T,Nε<# h@kgAt @[r,h,*|gAbDQb ]kyFЀۿ>^?^; ڒ;teA @SgAU!-;    i1Y%ky aKZMXGUHh 4M>:  i1Y|T\ Ja`, 䎨F=-5ʂ-5Ă-5X=82r%Džڒ;ڒ;hKЕXZ>.hJZJ-'L3k ̂>BZw4|T,hYGUH΂\ 4}~v!@) %wʂ΂>BZwhA @U!-;`A u˹dA {㵳 @ NX-CW4uQb @K  Y2ٹ h({Qb"h~~,*|gA @ӷ΂>BZwؾf  LkדKK ,hYGUH΂ﱳ 4M=  i1Y@GgAU!-; h},*|gAteAbAX ˹.,Жa,Ж! @[r,h>&`tr4㹖,*|gA @YGUH΂o:  i1Y@tk,Mbu Ăm  ZjGUH2X@tr =Y ]@,Жܡ+ h:  i1YXGUH΂,\˷ h({Qb"h~~,*|gA @ӷo|T,}^):%r0'X|T\ Ԡ+   `XXb_4Bu5,>R,ex:ax.h0Rt#*{t9\-GZѩf#Ҝm̂Жa,m %wOhfAQ֐2 BK  BK VςR8 82ᕢÈͥj-2kZWrx.M^ckb' hÈ\-'4rG-(OSi.Ж!,Жa,Ж! %wOb3 kHZjЕZjZjzhAYL%Eo2Z#:K@K#*q;K]4@n]UťaDߣȱo/OJ4c6W7 82x'  h"8 %$ttdm1,n_=Sƕj9abh `*4Jjh wDJ59:,RZXGUȚasJ,Pc]-bXA MRZN,,Ck6=ւNh )5 %wX= %wmS\gdUa )@K @K @K Veh*' e@-m ƾ(XϘfɧX3 %w3KtlU!k:@ g ۔5) ,XXF9c+Qå [\b|*Β5/Ж!,Жܡ+ h?Yy Nemʚ,R,R8#cayY]ZBKTrRZb;{bp2.Ūb,xGlr2ޫ] {t9FD.*TrM,m:cIXK[^jT 82#oX5a-m1^o8kZMeW7PVSao=.%CRY@tnǣ_ܝ4@nIw)#c,#[rD,,ǣ_^aQ rrCp3Ճ^asKY^k#*Cp3r%ia'|#*{t9̖\<ˬ ^aYe (\y&>w%`6W %1@x@XJQcfsXrB/ ZbrS}X[ ZBb>qi#[\: ֌:2X.*Xj,*> !7e@ MMOb0- } /4p"X۔9aB,}:OK1]pDm-b 3X6w [;ඏF\XGUh.--0-xP/çZ'\2 82,N8_8Z0eT4^}RFo'΢ 'D}.z# ۔9ܾF|Tb>)Oka5qpG #j-3Q`|Tb>bm1Nhn,D <ඏt4G9Sܢ'xhP&mᶏGx%jR-'N ;:ݨ{#8!-bX!ԕ4@nj.zCMg\2 h8ȫ8umyYEohYApۇ԰x$Gh O atRB3a7r rr,ei][/wqun|ш| B5:cIJfX7xz{iiY7xO,Oo3 <4(~rԍei/h>Z餄>fb@ Wxxpmq5MX3dඏs̸Fn’Ψ>n>BawCaVmsrQi|d,#uBWOT FCQXK&s4@n~q>4>Epdt@ π>W2ysrbc,wWNѝja,_~ _OzGıdB5c*j}\;.*5cs|xNY@|Y@Sd #ӝjY /+,Ȁe G~qOk2n%]0k:b1fcƕ`H&/' 3f+4M|Tt6m٢3L3j- < hO,׌RÚ1jN*]:0fXҙ{mQNdplj # WxhP&Y@iaqankTH~npi)|-`" çZ'=:q Vxh'}h-j*'xO" {m>NdKNn:cnSf]Y-YGUP_ pۇOG+Z•f@K V-5 D$&3{xXY@ia=SF8xp@uOnTb]YGUſni)XGUf1' GhAW^uz`HЧZ'x pۇGX `hJsrbc,pv]@tGq>cg3g Y _5,ȠxxO"ඏݩOYgm ç2 %wX= J0oඏԱ$\WµC|&XGUyre|mV> ջcu `,ⴲ@ pG*yWwnHE1Ox˚wxh'7n8%+a-Bw`'G,͇ %b,On>9;+!|Tw K@J &7,N~q>) Wm׌FFe@ M` [; $?}K99>EípǺ }Ri)>n,*~u;ඏYAm,|T}j*OQf2W cor|TW-Wmxhj,WxhP&7,*n-z_ cUzY|>_GU|_R jZ2" ޱCඏ[0FP c=@G |>x@G |'>L wW5j@X7M! JnVUg\iN;Qf2W q;ᚔMn>>XGUyremr> <4p>n>cXGUpԍ|T[tpi]!do0+ඏۜ'tjn,*Rm>k-Z OQfcUF"qNRڒ;ę|TWOXGUjaę|T= 5},yyQe|TC7e .49w" 82`,h h-x"9^ hS-yxB1' k Sa [; hT˯Y@ܺާy,ȀQZ.tj|([rdrG VK5SdG,edEo0ޒÕ~q992~ urg@ n2^@tn+~ӭ|xmɅZ{4@n-zb,([T0XKͫ4@iիR-Ve5ecE/N-:[l ujKUYKF.Жܡ+ 3,R,5 ϰVyC6lٞq:!iF[7 wpd 3h@-CMK͖Aᕢ73T [>ߗ4sA%Zy,-:[1GUOU+‰,c #Bb,ڒ;|T;QBn>^z1=9j }Z?z>kv}dڒ;pG/b,Y 9>ʢ\-,mz4@)pǑ^kl h@[m hX!ԕ4}zaZ%VZjg; O p\O#tcoSHඏŚzg N>nX3vg /?zfO!b,)]@i5C_45Sd uz-hCK菐Y 9,РM!b,N/ױ5%$_ݧ,ȀeՖ] м]B#pwf3fඏj1r8'N~ k] м+GOK1rF ͿQKX8uBWzl.] o[m8W2X\4@Y@AqDcZNYtZ}>•㚜/ ee &g>)Ӎ9wg n ðZNxDoxh6V K\ 'p# 㚜aO7O4@5X@ԕ\mkWWz\c,or u#4sw4aR!]@t\3_ O7f>ueWz孶Z>.tzdsV }jЕ4O]G,hR-F +=OX@:plj %Y˕kp5@r}cƈGS}MWzpGI^jJZN,KsՆ-j,Ȁe afb֌K07եj!O.rBKhЧbT,c:aDG'`j-'e2p*e51H\l,ገ渨a^VX|g} +"e _.;k8#b^Vu#,,ї: Xc%iưk8ceO TҁyY]Ze-5 D+j)0ͨ5 huun8uBb,P>Z0[;ඏeшjЕ4@n]>Ndɧp}4bZn8%<@hݥ:l,%_ۇCWm% 6!8|m|@-n0O%hic@Vm>-:!s2 <4(ogq)uSGG0ͨ5 ;n0/X:hKpG  n]>N Cj,e 5c^VMbRq'˰NH٣I kF[\|"jn3Z'<,,.RZ}){9]N1P,V?4@)Fٳ4@שS d~^j |M!T 'xhPަ` 頲\GUᕢC;>BM}GNxPYX мw,h^ >{5/ +Mޱ@y'),tFX м@ b`@ OgX мg8j P\A,h^xb@B:,,h^?@ F% \-'4Z+<'4Zt<@ _j,h^gj,h^IX |Gٜ@y'3d2w@y'46,J,/ds X( h8}Q SdG,7o@nI3 82xctqWXAHWzqJzS#`,+E0bZ c -:Be8>Oeq+a^}~~" 82(o, +E~q\X@fW_Sd N_~~4u.>= + C69XGU}d0Zjf <4Pe kƚ:kLj*fNhnHZr, R1r:!jMhGj<:ŕ2 X Z'4z7"FG-9 h}"Z'G5iFͥI5^}ǐ(ub8'tta} 57h0N#*,'2NXp}4٥^qM@Fܫեj!-J*WU:alͥj4¼.-V }  .*k >LQ&è\m\>B6ඏlzY,[4@n_rqp.Ff,  pGX #˕BQ҄dqJ%>Bsnx< #U K<X >.*R#j8'bW]‰XGUC5m'2-sUb ۑ묧; h\f=ݧ N7 wWCK zbMڞ) G5va,ڞ)\=9,nȹq:RtH%%2Xnh/.'5%N4;90 C'Gh ckO]['Gw~RY@tn+~@-54m CgrTbqQ ֒]Feh^pǯ3z~noX |X м+ඏ΅g\X м3ඏ@ Kc@ }1:c@4mɅlY |WOX м?}_,h>l,h^>B:4!sa@ },gX W<]R9stghD3 Wx]R5+ V4O>rX |[,h^ 3T+ Wpۇw,h>C+<n0dε4Qk ,h^ඏ{_KN}D,h>+<pǿdrޱ@ ջ~n@JF{t,h> @ysHR2}g,h^;ඏ{_Hb@Hk!4^Z:LX |jtR4pǿ5TT%E@ ޴@ym/t4'wDc@,h^pǿBKgX3 W 탲_I @F,gE/ ˯Ng2XseL/QQhhX=SӍ9wg n\bog ,e bi|D+j)0hK9|T;QBn>^z1=s]o=^Y@FuȐK} kW!@"ඏU )+ h@9gqetӭplj 5q}44OCp,h,P,tzg ,*4rS4㯏W46G9#eЧb,=M, |ʞ>0+ඏ99O(4>CmX 9gq@ ӑOӑOӑOߦ#1}:tOr+<0xБr+<8b O+ˑO.h^k9V]=M,G>J2Rr Wx 5_q^T19tW#\ мSIr4|,%:;=M,lG>]GU{:9VÃr'99XGU) Wnnx_rĦ39V{^Y`X ɧ2K Y@tnq4>b%ѻ%wbYig0zNYl~@ ,T_ |Wl_,/ye1zNH_<,e-5 D+j)0ͨ5 huun8uBb,P>Z0gX3 W 탲_I @F,gE/ ˯Ng2XseL/QQhhX=SӍ9wg n\bog ,e bi|D+j)0hK9|T;QBn>^z1=s]o=^Y@FuȐK} kW!@"ඏU )+ h@9gqet:10000000FFC3C3C3C3C3C3C3C3FFFFFFFFFFFFFFE0 :10001000F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFF86 :100020000F0F0F0F0FF0F0F0F0F0FFFFFFFFFFFFDB :100030000F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFF80 :100040000F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFF20 :10005000FFFFFFFFFF0F0F0F0F0FFFFFFFFFFFFF60 :100060000000000000F0F0F0F0F0FFFFFFFFFFFFE6 :1000700000000000000F0F0F0F0FFFFFFFFFFFFF3B :1000800080C0E0F0F0F8F8FCFEFFFFFFFFFFFFFF8D :100090000000003F3F3F3F3C3C3CFFFFFFFFFFFFB6 :1000A0000103070F0F1F1F3F7FFFFFFFFFFFFFFF32 :1000B0003C3C3C3C3C3C3C3C3C3CFFFFFFFFFFFFEE :1000C0003C3C3CFFFFFFFF3C3C3CFFFFFFFFFFFFD2 :1000D00000003C7E7E7E7E3C0000FFFFFFFFFFFFB6 :1000E000F0F0F0F0F00F0F0F0F0FFFFFFFFFFFFF1B :1000F000000000FFFFFFFF3C3C3CFFFFFFFFFFFF56 :10010000000000FCFCFCFC3C3C3CFFFFFFFFFFFF51 :10011000FFFFFFFFFFF0F0F0F0F0FFFFFFFFFFFF3A :10012000F0F0F0F0F00000000000FFFFFFFFFFFF25 :10013000003C4299A1A199423C00FFFFFFFFFFFF55 :100140000F0F0F0F0F0000000000FFFFFFFFFFFF6A :10015000FF7F3F1F1F0F0F070301FFFFFFFFFFFF81 :10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F :10017000FFFFFFFFFF0000000000FFFFFFFFFFFF8A :100180000000000000FFFFFFFFFFFFFFFFFFFFFF7A :10019000FFFEFCF8F8F0F0E0C080FFFFFFFFFFFF7C :1001A000F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFAA :1001B000000000FFFFFFFF000000FFFFFFFFFFFF49 :1001C0003C3C3C3F3F3F3F000000FFFFFFFFFFFF85 :1001D000C0C6CCD8306EC306183FFFFFFFFFFFFF3D :1001E0003C3C3CFFFFFFFF000000FFFFFFFFFFFF65 :1001F0003C3C3CFCFCFCFC000000FFFFFFFFFFFF61 :1002000000000000000000000000FFFFFFFFFFFFF4 :1002100000181818181800180000FFFFFFFFFFFF54 :10022000006C6C6C000000000000FFFFFFFFFFFF90 :10023000006C6CFE6CFE6C6C0000FFFFFFFFFFFFAC :1002400000187ED83836FC300000FFFFFFFFFFFFAC :100250000076760C18306E6E0000FFFFFFFFFFFF88 :100260000070D8D870F6CC760000FFFFFFFFFFFFCC :1002700000181830000000000000FFFFFFFFFFFF24 :1002800000183060606030180000FFFFFFFFFFFFC4 :100290000030180C0C0C18300000FFFFFFFFFFFFB0 :1002A00000105438103854100000FFFFFFFFFFFF0C :1002B000000018187E1818000000FFFFFFFFFFFF66 :1002C00000000000001818300000FFFFFFFFFFFFD4 :1002D000000000007C7C00000000FFFFFFFFFFFF2C :1002E00000000000000018180000FFFFFFFFFFFFE4 :1002F0000000060C183060000000FFFFFFFFFFFF4A :10030000007CC6CED6E6C67C0000FFFFFFFFFFFFE5 :10031000001838181818183C0000FFFFFFFFFFFFF7 :10032000007CC6067CC0C0FE0000FFFFFFFFFFFF91 :1003300000FE060C1806C67C0000FFFFFFFFFFFF53 :10034000001C3C6CCCFE0C0C0000FFFFFFFFFFFF0D :1003500000FEC0FC0606C67C0000FFFFFFFFFFFF9B :10036000003E60C0FCC6C67C0000FFFFFFFFFFFF31 :10037000007E06060C1830600000FFFFFFFFFFFF45 :10038000007CC6C67CC6C67C0000FFFFFFFFFFFFE7 :10039000007CC6C67E060CF80000FFFFFFFFFFFFD3 :1003A00000000018000018000000FFFFFFFFFFFF23 :1003B00000000018000018183000FFFFFFFFFFFFCB :1003C000000C18306030180C0000FFFFFFFFFFFF2B :1003D000000000FE00FE00000000FFFFFFFFFFFF27 :1003E000006030180C1830600000FFFFFFFFFFFFB7 :1003F000007CC6061C1800180000FFFFFFFFFFFF6F :10040000007CC6D6DEDCC07E0000FFFFFFFFFFFFE2 :1004100000386CC6C6FEC6C60000FFFFFFFFFFFF28 :1004200000FCC6C6FCC6C6FC0000FFFFFFFFFFFFC6 :10043000003C66C0C0C0663C0000FFFFFFFFFFFF3E :1004400000F"CC6C6C6C6C6FC0000FFFFFFFFFFFFDC :1004500000FEC0C0FCC0C0FE0000FFFFFFFFFFFFAA :1004600000FEC0C0FCC0C0C00000FFFFFFFFFFFFD8 :10047000007CC6C0C0CEC67C0000FFFFFFFFFFFFB0 :1004800000C6C6C6FEC6C6C60000FFFFFFFFFFFFD0 :10049000003C18181818183C0000FFFFFFFFFFFF72 :1004A000000606060606C67C0000FFFFFFFFFFFFF2 :1004B00000C6CCD8F0D8CCC60000FFFFFFFFFFFF7E :1004C00000C0C0C0C0C0C0FE0000FFFFFFFFFFFFB4 :1004D00000C6EEFEFED6C6C60000FFFFFFFFFFFF10 :1004E00000C6C6E6FECEC6C60000FFFFFFFFFFFF48 :1004F000007CC6C6C6C6C67C0000FFFFFFFFFFFF2C :1005000000FCC6C6FCC0C0C00000FFFFFFFFFFFF2D :10051000007CC6C6C6D6EA740000FFFFFFFFFFFFDF :1005200000FCC6C6FCD8CCC60000FFFFFFFFFFFFE3 :10053000007CC660380CC67C0000FFFFFFFFFFFF99 :10054000007E5A18181818180000FFFFFFFFFFFF61 :1005500000C6C6C6C6C6C67C0000FFFFFFFFFFFF81 :1005600000C6C6C66C6C38100000FFFFFFFFFFFF1F :1005700000C6C6D6FEFEEEC60000FFFFFFFFFFFF6F :1005800000C6C66C386CC6C60000FFFFFFFFFFFF49 :100590000066667E3C1818180000FFFFFFFFFFFF93 :1005A000007E060C1830607E0000FFFFFFFFFFFF9B :1005B000007C60606060607C0000FFFFFFFFFFFF69 :1005C0000000C06030180C000000FFFFFFFFFFFFBD :1005D000007C0C0C0C0C0C7C0000FFFFFFFFFFFFED :1005E000000010386CC600000000FFFFFFFFFFFF97 :1005F000000000000000007E0000FFFFFFFFFFFF83 :1006000000303018000000000000FFFFFFFFFFFF78 :1006100000000076CEC6CE760000FFFFFFFFFFFF92 :1006200000C0C0DCE6C6E6DC0000FFFFFFFFFFFF06 :100630000000007CC0C0C07C0000FFFFFFFFFFFF88 :1006400000060676CEC6CE760000FFFFFFFFFFFF56 :100650000000007CC6FEC07E0000FFFFFFFFFFFF22 :1006600000386C60F86060600000FFFFFFFFFFFF74 :1006700000000076CEC6CE7606FCFFFFFFFFFFFF30 :1006800000C0C0DCE6C6C6C60000FFFFFFFFFFFFDC :1006900000001800181818180000FFFFFFFFFFFFE8 :1006A00000000C000C0C0C0CCC78FFFFFFFFFFFFD0 :1006B00000C0C0C6CCF8CCC60000FFFFFFFFFFFFA4 :1006C00000181818181818180000FFFFFFFFFFFF88 :1006D0000000006CFED6D6C60000FFFFFFFFFFFF44 :1006E000000000DCE6C6C6C60000FFFFFFFFFFFFFC :1006F0000000007CC6C6C67C0000FFFFFFFFFFFFB6 :10070000000000DCE6C6E6DCC0C0FFFFFFFFFFFF25 :1007100000000076CEC6CE760606FFFFFFFFFFFF85 :10072000000000DCE6C0C0C00000FFFFFFFFFFFFCD :100730000000007EC07C06FC0000FFFFFFFFFFFF03 :100740000018183C1818180E0000FFFFFFFFFFFFED :10075000000000C6C6C6CE760000FFFFFFFFFFFF09 :10076000000000C6C66C6C380000FFFFFFFFFFFFF3 :10077000000000C6D6D6FE7C0000FFFFFFFFFFFF93 :10078000000000C66C386CC60000FFFFFFFFFFFFD3 :10079000000000C6C6C6CE76067CFFFFFFFFFFFF47 :1007A0000000007E0C18307E0000FFFFFFFFFFFFFF :1007B000001C30307030301C0000FFFFFFFFFFFFD7 :1007C00018181818181818181818FFFFFFFFFFFF3F :1007D000007018181C1818700000FFFFFFFFFFFFC3 :1007E00000000070D61C00000000FFFFFFFFFFFFAD :1007F00000547CBAEEFEBAC67C00FFFFFFFFFF0686 :00000000 6C00000181818181818180000FFFFFFFFFFFF88 :1006D0000000006CFED6D6C60000FFFFFFFFFFFF44 :1006E000000000DCE6C6C6C60000FFFFFFFFFFFFFC :1006F0000000007CC6C6C67C0000FFFFFFFFFFFFB6 :10070000000000DCE6C6E6DCC0C0FFFFFFFFFFFF25 :1007100000000076CEC6CE760606FFFFFF:10000000FFC3C3C3C3C3C3C3C3FFFFFFFFFFFFFFE0 :10001000F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFF86 :100020000F0F0F0F0FF0F0F0F0F0FFFFFFFFFFFFDB :100030000F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFF80 :100040000F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFF20 :10005000FFFFFFFFFF0F0F0F0F0FFFFFFFFFFFFF60 :100060000000000000F0F0F0F0F0FFFFFFFFFFFFE6 :1000700000000000000F0F0F0F0FFFFFFFFFFFFF3B :1000800080C0E0F0F0F8F8FCFEFFFFFFFFFFFFFF8D :100090000000003F3F3F3F3C3C3CFFFFFFFFFFFFB6 :1000A0000103070F0F1F1F3F7FFFFFFFFFFFFFFF32 :1000B0003C3C3C3C3C3C3C3C3C3CFFFFFFFFFFFFEE :1000C0003C3C3CFFFFFFFF3C3C3CFFFFFFFFFFFFD2 :1000D00000003C7E7E7E7E3C0000FFFFFFFFFFFFB6 :1000E000F0F0F0F0F00F0F0F0F0FFFFFFFFFFFFF1B :1000F000000000FFFFFFFF3C3C3CFFFFFFFFFFFF56 :10010000000000FCFCFCFC3C3C3CFFFFFFFFFFFF51 :10011000FFFFFFFFFFF0F0F0F0F0FFFFFFFFFFFF3A :10012000F0F0F0F0F00000000000FFFFFFFFFFFF25 :10013000003C4299A1A199423C00FFFFFFFFFFFF55 :100140000F0F0F0F0F0000000000FFFFFFFFFFFF6A :10015000FF7F3F1F1F0F0F070301FFFFFFFFFFFF81 :10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F :10017000FFFFFFFFFF0000000000FFFFFFFFFFFF8A :100180000000000000FFFFFFFFFFFFFFFFFFFFFF7A :10019000FFFEFCF8F8F0F0E0C080FFFFFFFFFFFF7C :1001A000F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFAA :1001B000000000FFFFFFFF000000FFFFFFFFFFFF49 :1001C0003C3C3C3F3F3F3F000000FFFFFFFFFFFF85 :1001D000C0C6CCD8306EC306183FFFFFFFFFFFFF3D :1001E0003C3C3CFFFFFFFF000000FFFFFFFFFFFF65 :1001F0003C3C3CFCFCFCFC000000FFFFFFFFFFFF61 :1002000000000000000000000000FFFFFFFFFFFFF4 :1002100000101010101000100000FFFFFFFFFFFF84 :1002200000282828000000000000FFFFFFFFFFFF5C :10023000007C40487E4948480000FFFFFFFFFFFF69 :1002400000103C50381478100000FFFFFFFFFFFF44 :100250000060640810204C0C0000FFFFFFFFFFFF50 :1002600000205050205448340000FFFFFFFFFFFFE4 :1002700000101020000000000000FFFFFFFFFFFF44 :1002800000102040404020100000FFFFFFFFFFFF54 :1002900000100804040408100000FFFFFFFFFFFF28 :1002A00000105438103854100000FFFFFFFFFFFF0C :1002B000000010107C1010000000FFFFFFFFFFFF88 :1002C00000000000001010200000FFFFFFFFFFFFF4 :1002D000000000007C0000#000000FFFFFFFFFFFFA8 :1002E00000000000000000100000FFFFFFFFFFFF04 :1002F00000000408102040000000FFFFFFFFFFFF88 :100300000038444C546444380000FFFFFFFFFFFFF7 :1003100000103010101010380000FFFFFFFFFFFF2B :10032000003844043840407C0000FFFFFFFFFFFF1F :10033000007C0408180444380000FFFFFFFFFFFFA3 :1003400000081828487C08080000FFFFFFFFFFFF97 :10035000007C4078040444380000FFFFFFFFFFFFEB :10036000001C2040784444380000FFFFFFFFFFFFDF :10037000007C0404081020400000FFFFFFFFFFFF87 :1003800000384444384444380000FFFFFFFFFFFFBB :10039000003844443C0408700000FFFFFFFFFFFFEB :1003A00000000010000010000000FFFFFFFFFFFF33 :1003B00000000010000010102000FFFFFFFFFFFFF3 :1003C00070087040780000000000FFFFFFFFFFFF93 :1003D0000000007C007C00000000FFFFFFFFFFFF2B :1003E00078043804780000000000FFFFFFFFFFFFE3 :1003F00000384404181000100000FFFFFFFFFFFF4B :100400003018001C444444320000FFFFFFFFFFFF90 :1004100000102844447C44440000FFFFFFFFFFFF1E :1004200000784444784444780000FFFFFFFFFFFF5A :1004300000384440404044380000FFFFFFFFFFFF0A :1004400000784444444444780000FFFFFFFFFFFF6E :10045000007C40407840407C0000FFFFFFFFFFFF32 :10046000007C4040784040400000FFFFFFFFFFFF5E :1004700000384440404C443C0000FFFFFFFFFFFFBA :10048000004444447C4444440000FFFFFFFFFFFF5E :1004900000381010101010380000FFFFFFFFFFFFA2 :1004A00000040404040444380000FFFFFFFFFFFFC2 :1004B00000444850605048440000FFFFFFFFFFFF2A :1004C000004040404040407C0000FFFFFFFFFFFF36 :1004D00000446C54545444440000FFFFFFFFFFFFEE :1004E00000444464544C44440000FFFFFFFFFFFFFE :1004F00000384444444444380000FFFFFFFFFFFF3E :1005000000784444784040400000FFFFFFFFFFFFB9 :1005100000384444445448340000FFFFFFFFFFFF0D :1005200000784444785048440000FFFFFFFFFFFF7D :1005300000384440380444380000FFFFFFFFFFFF4D :10054000007C5410101010100000FFFFFFFFFFFF91 :1005500000444444444444380000FFFFFFFFFFFFD1 :1005600000444444282810100000FFFFFFFFFFFF55 :1005700000444444545454280000FFFFFFFFFFFF91 :1005800000444428102844440000FFFFFFFFFFFF01 :1005900000444428101010100000FFFFFFFFFFFF71 :1005A000007C04081020407C0000FFFFFFFFFFFFDD :1005B00038443800000000000000FFFFFFFFFFFF8D :1005C00000000038404038100810FFFFFFFFFFFF19 :1005D00000003C403C423C023C00FFFFFFFFFFFFAD :1005E00000000010284400000000FFFFFFFFFFFF95 :1005F000000000000000007C0000FFFFFFFFFFFF85 :10060000000010107C1010007C00FFFFFFFFFFFFB8 :100610000000001C444444320000FFFFFFFFFFFFC6 :1006200000404058444444580000FFFFFFFFFFFFD4 :1006300000000038404040380000FFFFFFFFFFFF90 :1006400000040434444444340000FFFFFFFFFFFF74 :10065000000000384478403C0000FFFFFFFFFFFF30 :1006600000182420702020200000FFFFFFFFFFFF64 :1006700000000034444444340478FFFFFFFFFFFFD0 :1006800000404058444444440000FFFFFFFFFFFF88 :1006900000001000101010100000FFFFFFFFFFFF10 :1006A00000000800080808084830FFFFFFFFFFFFB0 :1006B00000404044487048440000FFFFFFFFFFFF38 :1006C00000101010101010080000FFFFFFFFFFFFC8 :1006D00000000028545444440000FFFFFFFFFFFFC8 :1006E00000000058444444440000FFFFFFFFFFFFA8 :1006F00000000018444444300000FFFFFFFFFFFFEC :1007000000000058444444584040FFFFFFFFFFFFF3 :1007100000000034444444340404FFFFFFFFFFFFA3 :1007200000000058444040400000FFFFFFFFFFFF73 :100730000000003C403804780000FFFFFFFFFFFF8F :100740000010107C1010100C0000FFFFFFFFFFFFD7 :1007500000000044444444320000FFFFFFFFFFFF5D :1007600000000044444428100000FFFFFFFFFFFF8B :1007700000000044445454280000FFFFFFFFFFFF27 :1007800000000044281028440000FFFFFFFFFFFF87 :1007900000000044444434040478FFFFFFFFFFFFDF :1007A0000000007C0810207C0000FFFFFFFFFFFF1F :1007B0000618001C223C201C0000FFFFFFFFFFFF6B :1007C00030180044444444320000FFFFFFFFFFFFA5 :1007D000300C00384478403C0000FFFFFFFFFFFF73 :1007E00000240000000000000000FFFFFFFFFFFFEB :1007F000AA55AA55AA55AA55AA55FFFFFFFFFF06FD :00000000 6C00000101010101010080000FFFFFFFFFFFFC8 :1006D00000000028545444440000FFFFFFFFFFFFC8 :1006E00000000058444444440000FFFFFFFFFFFFA8 :1006F00000000018444444300000FFFFFFFFFFFFEC :1007000000000058444444584040FFFFFFFFFFFFF3 :1007100000000034444444340404FFFFFF:10000000FFC3C3C3C3C3C3C3C3FFFFFFFFFFFFFFE0 :10001000F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFF86 :100020000F0F0F0F0FF0F0F0F0F0FFFFFFFFFFFFDB :100030000F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFF80 :100040000F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFF20 :10005000FFFFFFFFFF0F0F0F0F0FFFFFFFFFFFFF60 :100060000000000000F0F0F0F0F0FFFFFFFFFFFFE6 :1000700000000000000F0F0F0F0FFFFFFFFFFFFF3B :1000800080C0E0F0F0F8F8FCFEFFFFFFFFFFFFFF8D :100090000000003F3F3F3F3C3C3CFFFFFFFFFFFFB6 :1000A0000103070F0F1F1F3F7FFFFFFFFFFFFFFF32 :1000B0003C3C3C3C3C3C3C3C3C3CFFFFFFFFFFFFEE :1000C0003C3C3CFFFFFFFF3C3C3CFFFFFFFFFFFFD2 :1000D00000003C7E7E7E7E3C0000FFFFFFFFFFFFB6 :1000E000F0F0F0F0F00F0F0F0F0FFFFFFFFFFFFF1B :1000F000000000FFFFFFFF3C3C3CFFFFFFFFFFFF56 :10010000000000FCFCFCFC3C3C3CFFFFFFFFFFFF51 :10011000FFFFFFFFFFF0F0F0F0F0FFFFFFFFFFFF3A :10012000F0F0F0F0F00000000000FFFFFFFFFFFF25 :10013000003C4299A1A199423C00FFFFFFFFFFFF55 :100140000F0F0F0F0F0000000000FFFFFFFFFFFF6A :10015000FF7F3F1F1F0F0F070301FFFFFFFFFFFF81 :10016000FFFFFFFFFFFFFFFFFFFFFFFFF$FFFFFFF9F :10017000FFFFFFFFFF0000000000FFFFFFFFFFFF8A :100180000000000000FFFFFFFFFFFFFFFFFFFFFF7A :10019000FFFEFCF8F8F0F0E0C080FFFFFFFFFFFF7C :1001A000F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFAA :1001B000000000FFFFFFFF000000FFFFFFFFFFFF49 :1001C0003C3C3C3F3F3F3F000000FFFFFFFFFFFF85 :1001D000C0C6CCD8306EC306183FFFFFFFFFFFFF3D :1001E0003C3C3CFFFFFFFF000000FFFFFFFFFFFF65 :1001F0003C3C3CFCFCFCFC000000FFFFFFFFFFFF61 :1002000000000000000000000000FFFFFFFFFFFFF4 :1002100000101010101000100000FFFFFFFFFFFF84 :1002200000282828000000000000FFFFFFFFFFFF5C :100230000028287C287C28280000FFFFFFFFFFFF04 :1002400000103C50381478100000FFFFFFFFFFFF44 :100250000060640810204C0C0000FFFFFFFFFFFF50 :1002600000205050205448340000FFFFFFFFFFFFE4 :1002700000101020000000000000FFFFFFFFFFFF44 :1002800000102040404020100000FFFFFFFFFFFF54 :1002900000100804040408100000FFFFFFFFFFFF28 :1002A00000105438103854100000FFFFFFFFFFFF0C :1002B000000010107C1010000000FFFFFFFFFFFF88 :1002C00000000000001010200000FFFFFFFFFFFFF4 :1002D000000000007C0000000000FFFFFFFFFFFFA8 :1002E00000000000000000100000FFFFFFFFFFFF04 :1002F00000000408102040000000FFFFFFFFFFFF88 :100300000038444C546444380000FFFFFFFFFFFFF7 :1003100000103010101010380000FFFFFFFFFFFF2B :10032000003844043840407C0000FFFFFFFFFFFF1F :10033000007C0408180444380000FFFFFFFFFFFFA3 :1003400000081828487C08080000FFFFFFFFFFFF97 :10035000007C4078040444380000FFFFFFFFFFFFEB :10036000001C2040784444380000FFFFFFFFFFFFDF :10037000007C0404081020400000FFFFFFFFFFFF87 :1003800000384444384444380000FFFFFFFFFFFFBB :10039000003844443C0408700000FFFFFFFFFFFFEB :1003A00000000010000010000000FFFFFFFFFFFF33 :1003B00000000010000010102000FFFFFFFFFFFFF3 :1003C00000081020402010080000FFFFFFFFFFFF83 :1003D0000000007C007C00000000FFFFFFFFFFFF2B :1003E00000201008040810200000FFFFFFFFFFFF9F :1003F00000384404181000100000FFFFFFFFFFFF4B :10040000003844545C58403C0000FFFFFFFFFFFFF2 :1004100000102844447C44440000FFFFFFFFFFFF1E :1004200000784444784444780000FFFFFFFFFFFF5A :1004300000384440404044380000FFFFFFFFFFFF0A :1004400000784444444444780000FFFFFFFFFFFF6E :10045000007C40407840407C0000FFFFFFFFFFFF32 :10046000007C4040784040400000FFFFFFFFFFFF5E :1004700000384440404C443C0000FFFFFFFFFFFFBA :10048000004444447C4444440000FFFFFFFFFFFF5E :1004900000381010101010380000FFFFFFFFFFFFA2 :1004A00000040404040444380000FFFFFFFFFFFFC2 :1004B00000444850605048440000FFFFFFFFFFFF2A :1004C000004040404040407C0000FFFFFFFFFFFF36 :1004D00000446C54545444440000FFFFFFFFFFFFEE :1004E00000444464544C44440000FFFFFFFFFFFFFE :1004F00000384444444444380000FFFFFFFFFFFF3E :1005000000784444784040400000FFFFFFFFFFFFB9 :1005100000384444445448340000FFFFFFFFFFFF0D :1005200000784444785048440000FFFFFFFFFFFF7D :1005300000384440380444380000FFFFFFFFFFFF4D :10054000007C5410101010100000FFFFFFFFFFFF91 :1005500000444444444444380000FFFFFFFFFFFFD1 :1005600000444444282810100000FFFFFFFFFFFF55 :1005700000444444545454280000FFFFFFFFFFFF91 :1005800000444428102844440000FFFFFFFFFFFF01 :1005900000444428101010100000FFFFFFFFFFFF71 :1005A000007C04081020407C0000FFFFFFFFFFFFDD :1005B000007C60606060607C0000FFFFFFFFFFFF69 :1005C00000004020100804000000FFFFFFFFFFFFB5 :1005D000007C0C0C0C0C0C7C0000FFFFFFFFFFFFED :1005E00000000010284400000000FFFFFFFFFFFF95 :1005F000000000000000007C0000FFFFFFFFFFFF85 :1006000000101008000000000000FFFFFFFFFFFFC8 :1006100000000014444444320000FFFFFFFFFFFFCE :1006200000404058444444580000FFFFFFFFFFFFD4 :1006300000000038404040380000FFFFFFFFFFFF90 :1006400000040434444444340000FFFFFFFFFFFF74 :1006500000000038447840380000FFFFFFFFFFFF34 :1006600000102820702020200000FFFFFFFFFFFF68 :1006700000000034444444340478FFFFFFFFFFFFD0 :1006800000404058444444440000FFFFFFFFFFFF88 :1006900000100010101010100000FFFFFFFFFFFF00 :1006A00000080008080808084830FFFFFFFFFFFFA8 :1006B00000404044487048440000FFFFFFFFFFFF38 :1006C00000101010101010100000FFFFFFFFFFFFC0 :1006D00000000028545444440000FFFFFFFFFFFFC8 :1006E00000000058444444440000FFFFFFFFFFFFA8 :1006F00000000018444444300000FFFFFFFFFFFFEC :1007000000000058444444584040FFFFFFFFFFFFF3 :1007100000000034444444340404FFFFFFFFFFFFA3 :1007200000000058444040400000FFFFFFFFFFFF73 :100730000000003C403804780000FFFFFFFFFFFF8F :1007400000101038101010080000FFFFFFFFFFFF1F :1007500000000044444444340000FFFFFFFFFFFF5B :1007600000000044442828100000FFFFFFFFFFFFA7 :1007700000000044445454280000FFFFFFFFFFFF27 :1007800000000044281028440000FFFFFFFFFFFF87 :1007900000000044444444340478FFFFFFFFFFFF9F :1007A0000000007C0810207C0000FFFFFFFFFFFF1F :1007B00000182020602020180000FFFFFFFFFFFF2F :1007C00010101010101010101010FFFFFFFFFFFF8F :1007D000003008080C0808300000FFFFFFFFFFFF93 :1007E00000000020540800000000FFFFFFFFFFFF93 :1007F000AA55AA55AA55AA55AA55FFFFFFFFFF06FD :00000000 6C00000101010101010100000FFFFFFFFFFFFC0 :1006D00000000028545444440000FFFFFFFFFFFFC8 :1006E00000000058444444440000FFFFFFFFFFFFA8 :1006F00000000018444444300000FFFFFFFFFFFFEC :1007000000000058444444584040FFFFFFFFFFFFF3 :1007100000000034444444340404FFFFFF% This is the release date of the disk. DIRPATCHAZM %DIRPATCHHEX EXPROF DOC  EXPROF NOT EXPROF ASM  EXPROF REL EXPROF Z80 EXTIME COM EXTIME DOC EXTIME Z80 FNK-KBD DOC #FNKEYS ASM %4KEYBD ASM 22EXECDIALDOC ?EXTIME .DOC 49 A4 1408 11 EXTIME .Z80 5A 38 2688 21 FNK-KBD .DOC 3C 79 1792 14 FNKEYS .ASM A0 86 13312 104 KEYBD .ASM 1A 89 12928 101 EXECDIAL.DOC D1 48 5376 42 OP .COM E3 D1 3200 25 OP .MQC B3 13 13952 109 OPV .COM 44 B0 1536 12 OPV .MQC 6F F3 9600 75 VDOP .COM E9 75 8064 63 VDOP .MQC 3C FA 45824 358 BOLD  Fog Library Disk FOG-CPM.147 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Osborne Executive Programs. Filename Description -09-00 .86 This is the release date of the disk. -CPM147 .DOC This is the description of the disk contents. DIRPATCH.DOC 569F 1K [DIR PATCH 1 of 3] Allows the DIR.COM command to show disk space remaining. DIRPATCH.AZM 194A 10K [DIR PATCH 2 of 3] DIRPATCH.HEX 8BBF 1K [DIR PATCH 3 of 3] EXPROF .DOC 3E83 4K [EXPROF 1 of 5] A profiling utility for CPM+ that times functions in C or Assembly language. EXPROF .NOT 53E1 1K [EXPROF 2 of 5] EXPROF .ASM 24ED 4K [EXPROF 3 of 5] EXPROF .REL 76C3 1K [EXPROF 4 of 5] EXPROF .Z80 D856 4K [EXPROF 5 of 5] EXTIME .COM 762B 1K [EXEC TIME 1 of 3] Sets the Executive Clock. EXTIME .DOC 49A4 2K [EXEC TIME 2 of 3] EXTIME .Z80 5A38 3K [EXEC TIME 3 of 3] FNK-KBD .DOC 3C79 2K [FNK-KBD 1 of 3] An introduction and ASseMbler source code to FNKEYS and KEYBD. Programs may be found on FOG-CPM.048. FNKEYS .ASM A086 13K [FNK-KBD 2 of 3] KEYBD .ASM 1A89 13K [FNK-KBD 3 of 3] EXECDIAL.DOC D148 6K [EXECUTIVE DIAL 1 of 9] These Programs Dial phone numbers from a list, or your screen on an Hayes compatible modem. Documentation and squeezed source code is included. OP .COM E3D1 4K [EXECUTIVE DIAL 2 of 9] OP .MQC B313 14K [EXECUTIVE DIAL 3 of 9] OPV .COM 44B0 2K [EXECUTIVE DIAL 4 of 9] OPV .MQC 6FF3 10K [EXECUTIVE DIAL 5 of 9] VDOP .COM E975 8K [EXECUTIVE DIAL 6 of 9] VDOP .MQC 3CFA 45K [EXECUTIVE DIAL 7 of 9] BOLD .CHR F460 6K [EXECUTIVE DIAL 8 of 9] FRENCHF .ONT B578 6K [EXECUTIVE DIAL 9 of 9] REEDFONT.EX1 F0AD 6K A new character font for the Executive  An introduction and ASseMbler source code to FNKEYS and KEYBD. Programs m&'