%SUSPEND COM ^SUSPEND MAC zSYSTAT DOC GSYSTAT MAC#TCHECK MAC@^TERMINALCFGH /TIME A SQoTIMECL A Z GTIMECL DOCd6TIMECL MACg <TIMECL O rTIMECL1 MACt iTIMEDIF AQ n'TIMEDIF ASM"2TLOGOFF COMTLOGOFF MQCTTLOGON COM#TLOGON DO ,TLOGON MQCT\TLRS COMUTLRS MACZ #TSHELL ANNd3Q'TSHELL DEFhTSHELL DO TSHELL FCNUTSHELL IDSըTSHELL MQCH TSHELL SCRMTYPEL MQCWoAUNDATE RELkKUSRSTAT DOCo<USRSTAT MQCs#WHO MAC(WILDEX MAC WSPAT ASM -DISK#2 OF2В-READ ME  tRTDS14 LBRRTDS15UPLBRM-!w).Pʯ2͒ Current time:  P}͒ Suspend till: !]k!mkW"S}):oP͒ 2!j͘z͡>:V{͡>:Vx 0>0V͒ ERROR: tShell not installed "iNX|"iX>>2^x!q@*i]>O"i <G*i|3/GO> VÝd 0V _y{y0V{ VVVV V V>^V@VO*. e00/00/00 at .tShell. title "suspend slave program" ; ; (c) 1985 S. Kluger. All Rights Reserved. ; ; Suspends slave ; cr equ 0dh lf equ 0ah tfunc equ 50h jconv equ 10958 ; .z80 .request syslib ; dseg ; @dcfld::db '00/00/00 at ',0 id: db '.tShell.' offset: db 0 ; ; cseg ; start: ld de,80h ld hl,id ld bc,8 ldir ld bc,41 ld l,0 call tfunc or a jp z,fatal ld (offset),a call print## cr,lf 'Current time: ',0 ld c,10 call tfunc push hl call time call print## cr,lf 'Suspend till: ',0 ld hl,5dh call eval10## push af ld hl,6dh call eval10## pop af ld d,a pop hl ld bc,0 ld (80h),hl ld (82h),de call time ld bc,41 ld a,(offset) add a,17 ld l,a call tfunc call print## cr,lf,lf,7,0 rst 0 ; time: push bc push de ld de,-jconv add hl,de call @dcvrt## ld hl,@dcfld call pstr## pop de ld a,d call ..10 ld a,':' call cout## ld a,e call ..10 ld a,':' call cout## pop bc ld a,b ..10: cp 10 jr nc,..10. push af ld a,'0' call cout## pop af ..10.: jp pafdc## ; fatal: call print## cr,lf,lf,7 'ERROR: tShell not installed',cr,lf,lf,0 rst 0 end nv equ 10958 ; .z80 .request syslib ; dseg ; @dcfld::db '00/00/00 at ',0 id: db '.tShell.' offset: dbSYSTAT version 1.00 by ESKAY TurboDOS system statistics display. SYSTAT displays the following system statistics: - version - serial number - privilege level - bank/nonbank system - current circuit/node - CP/M version - free memory - current drive block size, free blocks and type - accessible (ready) drives in system - number of buffers and size - printer assignments The following is a sample run: [19:13 A] 2A}systat SYSTAT v1.00 by ESKAY TurboDOS Version 1.4, TurboDOS Serial Number 24/1, Privileged logon. Banked system (current bank = 1) on circuit 0, node 1. CP/M version 3.0 Memory free in current bank: 64253 bytes (top of TPA = FBFCH). Default drive is fixed, block size = 2k. Disk has 18226 free blocks. Accessible drives are : AD Number of buffers: 6. Buffer size: 1024 bytes. Current printing set to SPOOLER ON DRIVE A System printer assignments : Printer A: Queue A [19:13 A] 2A} Source is provided for reference. Anyone may alter this program to their needs, in the true hacker spirit. Anyone may use this program, for their own use or commercially or whatever. Give me credit for writing it (ie don't alter the "by" message) or else lightning may strike you. ion - free memory - curren; SYSTAT ver 1.00 by ESKAY ; Created (big bang) 13 Jul 85 ; cr equ 0dh lf equ 0ah cfunc equ 5 tfunc equ 50h ; .z80 .request syslib ; start: ld sp,stack call print## cr,lf,lf 'SYSTAT v1.00 by ESKAY',cr,lf,lf 'TurboDOS Version ',0 ld c,12 call tfunc ld a,c and 0f0h rra rra rra rra or 30h call cout## ld a,'.' call cout## ld a,c and 0fh or 30h call cout## call print## ', TurboDOS Serial Number ',0 call phlfdc## ld a,'/' call cout## ex de,hl call phlfdc## call print## ', ',0 ld a,b or a jr nz,..pri call print## 'Non-',0 ..pri: call print## 'Privileged logon.',cr,lf,0 ld c,43 ld e,0ffh call tfunc ; get current bank push af ; save it ld c,43 ld e,1 call tfunc ; set to bank 1 ld c,43 ld e,0ffh call tfunc ; check bank or a ; bank 1 active? jr nz,..bnk call print## 'Non-',0 ..bnk: call print## 'Banked system (current bank = ',0 pop af ; get original bank call pafdc## ld e,a ld c,43 call tfunc ; if changed, set back call print## ') on circuit ',0 ld c,12 call cfunc ld a,d call pafdc## call print## ', node ',0 ld a,e call pafdc## call print## '. CP/M version ',0 ld a,l and 0f0h rra rra rra rra or 30h call cout## ld a,'.' call cout## ld a,l and 0fh or 30h call cout## call print## cr,lf 'Memory free in current bank: ',0 ld hl,(6) dec h call phlfdc## call print## ' bytes (top of TPA = ',0 inc h dec hl call phl4hc## call print## 'H).',cr,lf,'Default drive is ',0 ld c,25 call cfunc ld e,a ld c,19 call tfunc bit 7,a jr z,..rem call print## 'fixed',0 jr ..rfd ; ..rem: call print## 'removable',0 ..rfd: and 7 ld b,a ld a,1 dec b dec b cbls: dec b jr z,cble add a,a jr cbls ; cble: call print## ', block size = ',0 call pafdc## ld b,a ; save block size call print## 'k. Disk has ',0 ex de,hl call phlfdc## call print## ' free blocks.',cr,lf 'Accessible drives are : ',0 ld c,24 call cfunc ld a,'A' ld b,8 call ..rh ld l,h ld b,8 call ..rh call print## cr,lf 'Number of buffers: ',0 ld c,24 call tfunc ld a,h call pafdc## call print## '. Buffer size: ',0 ld b,l ld hl,64 inc b ..bfs: add hl,hl djnz ..bfs call phlfdc## call print## ' bytes.',cr,lf 'Current printing set to ',0 ld c,27 ld de,0ffffh ld b,d call tfunc inc l dec l jr z,prdir dec l jr z,prspl call print## 'CONSOLE',cr,lf,0 jr prend ; prdir: call print## 'DIRECT TO PRINTER ',0 ld a,h add a,'@' call cout## call crlf## jr prend ; prspl: call print## 'SPOOLER ON DRIVE ',0 add a,'A' call cout## ld a,h or a jr z,pren0 call print## ' TO QUEUE ',0 add a,'@' call cout## pren0: call crlf## prend: call print## 'System printer assignments : ',cr,lf,0 ld b,0 syspl: push bc ld de,0ffffh ld c,29 call tfunc inc a ; valid? jr z,invp1 call print## 9,9,'Printer ',0 pop bc push bc ld a,'A' add a,b call cout## dec l ; check mode jp z,sstop ; stopped ld a,h ; get queue assignment or a ; check offline jp z,soffl call print## ': Queue ',0 add a,'@' call cout## call crlf## jr invp1 ; soffl: call print## ': Offline',cr,lf,0 jr invp1 ; sstop: call print## ': Stopped',cr,lf,0 invp1: pop bc ; get printer inc b ld a,b cp 16 jp nz,syspl ; continue till done call crlf## rst 0 ; ..rh: rr l call c,cout## inc a djnz ..rh ret ; dseg ; ds 100 stack equ $ end T TO PRINTER ',0 ld a,h add a,'@' call cout## call crlf## jr prend ; prspl: call print## title "tShell check utility" ; ; (c) 1985 S. Kluger. All Rights Reserved. ; ; This program displays the contents of TSHELL.LOG ; .z80 .request syslib ; cr equ 0dh lf equ 0ah cfunc equ 5 tfunc equ 50h ; dseg ; include TSHELL.DEF ; logfcb: db 1,'TSHELL LOG',0,0,0,0 ds 100 stack equ $ ; cseg ; start: ld sp,stack ld c,26 ld de,LCLID call cfunc ld bc,41 ld h,0 call tfunc ld a,(LCLLV) ; get access level cp 12h ; sysadmin, full? jr z,admin ; yes, skip call print## cr,lf 'Cannot execute',cr,lf,7,0 rst 0 ; admin: ld c,32 ld e,31 call cfunc ; log into 31: ld de,80h ld c,26 call cfunc ld de,logfcb call f$open## ; open log jp nz,nolog ; failed to open log rdlp: call f$read## ; read a block jr nz,endlog ; quit if done ld hl,80h dsplp: ld a,(hl) ; get tag byte cp 1ah ; tag? jr nz,endlog ; no, must be done endlog: nolog: end ٬mz=`,G6 ]V-5lz:Z_{m^3͹Nc_q}=a6a=oϾ܄yf3; Terminal Configuration block for tShell ; ; (c) 1985 S. Kluger, All Rights Reserved ; Initially defined: 12/13/85, a Friday... ; TCFBLK: ; TCFNME: db 'TTY ' ; terminal name 8 TCFCLS: db 0,0,0,0,0 ; clear screen 13 TCFCPL: db 0,0,0,0,0 ; cursor positioning lead-in 18 TCFCPS: db 0 ; 0=rc, ff=cr 19 TCFCXO: db 0 ; x offset 20 TCFCYO: db 0 ; y offset 21 TCFCBA: db 0 ; 0=binary, ff=ascii 22 TCFRCS: db 0 ; row/col separator 23 TCFWID: db 80 ; width in columns 24 TCFHGT: db 24 ; height in lines 25 TCFRV1: db 0,0,0,0,0 ; reverse on 30 TCFRV0: db 0,0,0,0,0 ; reverse off 35 TCFKBL: db 0,0,0,0,0 ; keyboard lock 40 TCFKBU: db 0,0,0,0,0 ; keyboard unlock 45 TCFCU1: db 0,0,0,0,0 ; cursor on 50 TCFCU0: db 0,0,0,0,0 ; cursor off 55 TCFHI1: db 0,0,0,0,0 ; half intensity or hilite on 60 TCFHI0: db 0,0,0,0,0 ; half intensity or hilite off 65 TCFST1: db 0,0,0,0,0 ; leadin to status line 70 TCFST0: db 0,0,0,0,0 ; exit from status line 75 TCFCUP: db 0,0,0,0,0 ; cursor up 80 TCFCUD: db 0,0,0,0,0 ; cursor down 85 TCFUPK: db 0,0,0 ; cursor up key sequence 88 TCFCDK: db 0,0,0 ; cursor down key sequence 91 ds 128-($-TCFBLK) ; reserve remainder ; ; end of terminal definition file ng lead-in 18 TCFCPS: db 0 ; 0=rc, ff=cr 19 TCFCXO: db 0 ; x offset 20 TCFCYO: db 0 ; y off #TITLE "CONTINUOUS TIME DISPLAY" #PAGE 132,66 MODULE "CTIME" ; LOC Data# ; TIME: BYTE "\r " HOUR: BYTE "00:" MIN: BYTE "00:" SEC: BYTE "00$" CSEC: BYTE 0 ; MESS1: BYTE "\r\n\n\n$" ; ALIGN RES 100 STACK == . ; LOC Code# ; START: MOV AX,DS MOV SS,AX MOV SP,&STACK MOV DX,&MESS1 CALL PRINTM LOOP: MOV CL,=10 INT 0XDF CMP CSEC,CH JNZ CVRT MOV CL,=11 INT 0XE0 OR AL,AL JZ LOOP MOV DX,&MESS1 CALL PRINTM MOV CL,=0 INT 0XE0 ; CVRT: MOV AL,DH CALL DEC MOV WORD HOUR,AX MOV AL,DL CALL DEC MOV WORD MIN,AX MOV AL,CH MOV CSEC,AL CALL DEC MOV WORD SEC,AX MOV DX,&TIME CALL PRINTM JMPS LOOP ; DEC: AAM XCHG AH,AL OR AX,=0X3030 RET ; PRINTM: MOV CL,=9 INT 0XE0 RET ; END ; TIMECL - time addition to command line in TurboDOS ; This is version 1.1 ; ; Written : 08-23-84 by S. Kluger ; Updated : 08-25-84 (added station display, made version independent) ; Updated : 01-31-85 (translated for TurboDOS 1.41 8086) ; Updated : 07-04-85 (shrunk) ; ; unserialized for general distribution ; MODULE "TIMECL" ; ; The following effect is achieved by integrating TIMECL ; into the SYS file: ; ; Before: ; 0A} ; After: ; [17:23 A] 0A} ; ^station number ; ^current time ; use CMDINT + 0X0C = [TIMECL] in .PAR file ; LOC Code# ; TIMECL:: MOV AL,CLBLEN#+5 OR AL,AL ;IF PROMPT INHIBIT... JNZ SKIP ;...THEN DON'T DISPLAY TIME MOV CL,=10 ;TIME CALL CALL OTNTRY# MOV BX,=TIMST+1 MOV AL,DH ;GET HOURS CALL BYTOUT ;OUTPUT HOURS INC BX MOV AL,DL ;GET MINUTES CALL BYTOUT ;OUTPUT MINUTES MOV CL,=12 CALL OCNTRY# MOV AL,DL ADD AL,=0X40 MOV STA,AL MOV CL,=9 MOV DX,&TIMST CALL OCNTRY# SKIP: MOV CL,=32 ;GET USER CODE MOV DL,=0X0FF JMP OCNTRY# ;CONTINUE ; BYTOUT: XOR AH,AH AAM XCHG AH,AL OR AX,=0X3030 MOV [BX],AX INC BX INC BX RET ; TIME: BYTE 0,0,0,0,0 TIMST: BYTE "[00:00 " STA: BYTE "A] $" END DOCUMENTATION FOR TIMECL.O TIMECL.O is a TurboDOS 16-bit module for version 1.41 and works exactly like TIMECL.REL for the 8-bit version. Before: 0A} After: [11:55 A] 0A} (current time and station letter displayed in command prompt) To install include: TIMECL in the GEN file, and CMDINT + 0x0C = [TIMECL] in the PAR file. That's all! 9999A:MBPATI.5; TIMECL - time addition to command line in TurboDOS ; This is version 1.2 ; ; Written : 08-23-84 by S. Kluger ; Updated : 08-25-84 (added station display, made version independent) ; .z80 ; ; unserialized for general distribution ; ; The following effect is achieved by integrating TIMECL ; into the SYS file: ; ; Before: ; 0A} ; After: ; [17:23 A] 0A} ; ^station number ; use CMDINT + 0C = TIMECL in .PAR file ; cseg ; extrn ocntry ;C-funtion entry point extrn otntry ;T-function entry point extrn clblen ;a pointer public timecl ; timecl: ld c,12 ;TD version call call otntry ld a,c cp 14h ;if not 1.4... jr nz,dotime ;...then do it no matter what ld a,(clblen+9) or a ;if prompt inhibit... jr nz,skip ;...then don't display time dotime: ld c,105 ;time call ld de,time ;work area call ocntry ld hl,timst+1 ld a,(time+2) ;get hours call bytout ;output hours inc hl ld a,(time+3) ;get minutes call bytout ;output minutes ld c,12 call ocntry ld a,e add a,'@' ld (sta),a ld c,9 ld de,timst call ocntry skip: ld c,32 ;get user code ld e,0ffh jp ocntry ;continue ; bytout: push af rra rra rra rra call nybout pop af nybout: and 0fh add a,'0' ld (hl),a inc hl ret ; dseg ; time: db 0,0,0,0,0 timst: db '[00:00 ' sta: db 'A] $' end  ; 0A} ; After: ; [17:23 A] 0A} ; ^station nTIMECLaCodeCLBLENOCNTRYTIMECL`u,i`Q`W`S "C`T  @`] `V P X$0C[00:00 A] $(9'^9d!^!> t; TIMECL - time addition to command line in TurboDOS ; This is version 1.2 ; ; Written : 08-23-84 by S. Kluger ; Updated : 08-25-84 (added station display, made version independent) ; .z80 ; ; unserialized for general distribution ; ; The following effect is achieved by integrating TIMECL ; into the SYS file: ; ; Before: ; 0A} ; After: ; [17:23 A] 0A} ; ^station number ; use CMDINT + 0C = TIMECL in .PAR file ; cseg ; extrn cintry ;C-funtion entry point extrn otntry ;T-function entry point extrn clblen ;a pointer public timecl ; timecl: ld c,12 ;TD version call call otntry ld a,c cp 14h ;if not 1.4... jr nz,dotime ;...then do it no matter what ld a,(clblen+9) or a ;if prompt inhibit... jr nz,skip ;...then don't display time dotime: ld c,105 ;time call ld de,time ;work area call cfcn ld hl,timst+1 ld a,(time+2) ;get hours call bytout ;output hours inc hl ld a,(time+3) ;get minutes call bytout ;output minutes ld c,12 call cfcn ld a,e add a,'@' ld (sta),a ld c,9 ld de,timst call cfcn skip: ld c,32 ;get user code ld e,0ffh cfcn: ld a,0ffh jp cintry ; bytout: push af rra rra rra rra call nybout pop af nybout: and 0fh add a,'0' ld (hl),a inc hl ret ; dseg ; time: db 0,0,0,0,0 timst: db '[00:00 ' sta: db 'A] $' end  ; 0A} ; After: ; [17:23 A] 0A} ; ^station nvچTIMEDIF.AS  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRol<߾}h/^ry޾ş 0xlJky}_5\u W^=TN{m{\G~tYKm_6~9\/M?t֟LGGls˥6]s[z~=_]K]=UNqzy>XVe;o#lŧiӏ:mnS{\ѿhstӦuZtZǮ/ǛO?S}sz}sԗ͗~sоksۏ7w]O7gO=n6:i_5\KކRk]x8RvKmo^uqx?F+!5\UO:޼ܜκN:mTots_ص6ڜt:=z:ڏ_lQ3?Ώ]=~uכ٣ofg曧kls}9m=ұ>]oZozhsOG=yηooo WRC~>2j)m-*!mގu\v\V¼WP,֝o:a,>n'.lJ}au;we;<<ܦwYwY=0>|KV=^OZIuޅYiپm.a^C]okVQq]oa^ Yp r3%g㺎vj´st/yj~eS{\ԥk-Zsy60s&2-\U7w]_޼|Zozs:{f?u\0s&eowPe~k06A]ړ~k0ܕ_vܝ4.~.][f'۷ڍEq]oa^pr;-Ϸ¼<5|8\ݲ͜A}xxiIsu幞Y- C{Z7;d <Ӧ;˳}Y\¼9.Ϸ}ݨ0,ßp Wuɢ06]~ C{sExy2O_]Ω=.u)ʩ=^\vfnRƵkѣ}?v}!\ WRC~ލEKik 3i]v]}!0>MP$ݍ%0>au;we;Wl]0s&eowPe~k0uVh?!̫9PrCWc>nf><<䴤㺎\w5<߽eyMwPgy5s8\A}lx[Fuy5k]hsՖyտ^M?W?ˢ%L۝Ӧˏ/^.e>V[V۷K0MP$UrWt&Ky~6g-6]S¼*̫1ó)\Ç-MP$UrfWP]Ql-Ka|B.~B}Ev۲istՋP6ʚ +a9msTfz}s|skzs<}~|?k]߲ tc,z.ܦP络<Ц0v3a,>e_A}E806]_ 3i,e&̫9Z5Kvv7xʨ/ a mfnP络.¼0kp [Ua|B.~B}h3ib~EWaf 0߲ tc,:i;lKa1mC̄y7y5K[Ua|B.~B}E_,Zm3̫a,>nffЦctËa^f0kp Wctaa&̚%\2i/>y9¬Y5|8\2iCy f pղ9v]|G.ՖyZM8{5qm ˏ>\Ƿlw3]ٞ6]~|l_6pٮl'uy5w! 6S! S"+*(e~#ʹ ʣ ͽ ʐ ʕʕʙjj jyj jyG>GO> ¯j   >^@O*. ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPTSHELL LOGvgTLOGOFF.MACK  !"#$%&'()*+,-./0123456789:;<=>?@ABoCDEFGHIJPw-e}ݖ6l?B{ҏzr%7iM}TytDz}xy>v#O۫bw=oO_=U*>{|⷗؇Ce߈^xhJo/_텯c; _NJC%cץ?۷ᏕJ-ߟiw?7ۿa}XևJוSZnϕ;өrܞi;>ヵ|cUN}Lliq~Sx1rxx|ye?ߧY/??|_VN}3m5pݶ|c_i;|5XI8>Nq:i}N<*Lit G2{gڝJλ}L QyqycTlL|i1 8x$Ƕ-ϳJJhNeIb̗cD>DppWL'h۷ӱYcIb̗cD뷿|VF__>Ir{ S%j5>b6>Ib,\I$|9JԸc%jXTZq+|cGOǾW'[e+Ę/^}}5b}p-/{l*D/^f}>5u%j汒>Ir앨q/pcvnb8JԸ]%j5|6Ir앨b꣍Ib꣍_^\[TF__bx8/J$˱WƋ}\[TecDS/ cXmgϚn_+D/^ucmQu2͕ucV/>zR%}W-7yϳhqGZn^SHb}S%jh}]I$n1yOc{%jK%jXTI$|9J?VF|Oc{%}n+۪y\ɏZnh^?oUPɶ*Ok⩏`-Ctj=FUmw8c[%jWϟ>Ir,S%[ Ϸ㲅ex^.V}}|Oc;p-48Jx1Jx1/_-*Q+D/|}L+Q>^-*Qy*Qㅖyr= nѷxu9Glbr>I,85O5ZN{ ۩5ϕIϗcDIbk{t-fM},[%j{8u9Gl[noJh~8ar9ʧ*⤗QI0'8*i} 8{%SkDiU%T驿 ccn8cP'/~͛*Qㅖyr=5NZ=Ǵ /ye?qRӧ?=Ƌ^||slU}i}4J˕*xzzFԇ[%;Z'Uƽo^y{1Z%j5U{ϳؼ̾_9J֧XOb_:_+QI/ׇy>vh1v^U>rzFIG~Gx{lbr5J_؁=<wQyiڢytdj1N,/NzY/NzN{ iYӭe?Ѣ5>Ir\+-*QJ8imQ/Nz>TlLl1<>>.\X88,Wc:.=ߝW*bjGpGl~'_G˶ʭџ铄W{t`-c*^-*Qoo1J$˱WlL{ Ƕ-gMJo[с-{lʃoGpGl~'_G˶ůsW*o{g$8XK=XJD }5 p<>Ir,pñmYӭPyE_-Y=XCrE%~b+Q_T'>_re+bT*__-Y=XCW{gD }|UF_ƈa-U%}+.WZTү_E-*ijb_eVNel1*I\qmռj^o7?Bq>1I~}[5ׇJ}Py$wyj#p5N{]98ECopyright (c) 1985 S. Kluger. All Rights Reserved. 10P!).P2!).P2 P).P#*"]ѷ! tShell (c) 1985 S. Kluger, All Rights Reserved. 8-bit Station  zA3>-3{] !6# Enter User ID >!K5 Enter Password >!T1!K*]|ʳ+",³2*|  ERROR: invalid logon !T>2͆:_=2_ *** SECURITY ACCESS VIOLATION *** WAIT: [:`=2`(͖ ]<P).P"W!K͡ !T͡ :! P"S S [8! :2:2*"*"*"!>2:2*"0:2Z:_:WS>2͆: >_P<ʔ ).P”:<·<· Please enter: Date : [MM/DD/YY]!hͿ  8*> 2r Time : [HH:MM]!aͿ  !c # W P Logged on  P_*|(: . Last on [_ on terminal *>A3>-3}] Privilege level :03 (!w0( !=(! ) Drive access: ). P!~<(>A3 [P:´(Pø ERROR: munched password file? Call sysadmin. >2P<ʔ).P” ( (3 ͊!0(-() >B3w# ( (>(+6 B  6 #G( TurboDOSô tShellP !6# x ERROR: Cannot log on! Error source: >3~G#~3!>w! 6K! K"+*(!!2H!jzx>:3{ 0>03]# P"S S*+",! ~(} *#"!6,  }(68:o:o)P:o)P2 ERROR: tShell not installed "NWg|g"M>q>2x!qͲ*>O" <څG*|¥/ <2 !y# m =  " !k~͊ G+~͊ ?ط> @  &o DM * = ] _P " !n~͊ G+~͊ ?O  ʀ x _* 0:?Hͪ º # x­ ʾ ?~0 bk)))_zW# { 5 ~ " ? l ̀    B f f h j k !* Ò ^#Vbk$w#’ *. ͦ *2 ͒ *4 !͒ *0 ͬ >** ~ >Û *. ͐ x ͍  >Û Ͳ  >Û *2 *6 s#r*: 6** 6*, ~O >Û *0 ͐ x ͥ e >Û *4 *8 s#r*< 6*, 6** ~Ž >Û *6 ͈ | ~2> #*6 s#r*: 5 *2 *6 s#r*: 6Ͳ *6 6#6:> >Û 2> *, ~ >Û *8 ͈ :> w#*8 s#r*< 5 *4 *8 s#r*< 6 >› :> ** 62> > *< ~Z J *, 6*0 ͠ p >Û :> w OG  >á G  G  Ú 2 "  * #~#o|g6: ~ ͂w# +~#~#Y C  0 559   y  yG>GO> 3O du u03 w_yŒʌ{y03{ãdͶ Ͷ03 ø_y> 3{y03{> 3> 3 3333 3 3>^3@33"Â*. /O*. BHXWyHnWyr# xya{_ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPTSHELL IDSTSHELL LOGTSHELL CRTTSHELL SCRTSHELL BUL <00:0000/00/00 at nonprivilegedrestrictedfull access .tShell.UNLOGGEDABCDEFGHIJKLMNOP0a: m80 =tlogon link tlogon,date,undate copy tlogon.com 31a:warmstrt.aut;ne db 1,'TSHELL BUL',0,0,0,0 ; bulletin file ds vTLOGON.MAC\  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOoPQRSTUVWXYZ[}wSrtԳCbZNW_%%6^7%\~imOǒ_|?1j^wQmQPMğ\SIoğ\Sɶw?y׈?۶>>XOX?t>/U^nݪNCğڝ/1iٴF[vuU_TcN}ZPuɫ)|k}z)y(y_(y?>e75Z/;~珒5nJJ~}>{w?<׭]^Iy0_|ADZj;JRW>~,fk;/wһ|=_4ZrSc6]^I_?0_|AmjnߜNQcI,[Q/~y߽0_|A^nm{GIǏ%/gorGb~?|~N߿{zَi;JRW>~,y(9y_wڣ82Ւ_5ADZj;_k%/KJNѧw } 4E^-]d w Ǿ<.JR/\<ﮯJJwvGX]^.y(j\ꅇ߯5ewG[via︉0__~G0ڧ}Qپ^xζFkuC8z翚_\/>/4|mԕ/y(9ZrsWz8u8h/F5&kzwԕ?IuQr;G i];k i}_eTm7zz?sz=QW>Iu5$]Fqe]I48/i~1NqmoTP~zGp t?)jK =sC}^xOa_=\m~Gp]~˶Q/\<<6-+~m1iji{4V˲+yX5ax_uzCU5zdr~w/zNm;v4_oi޶|mzN%~_>z/a~1(I]y/O/5y{XczQ=֒ԕ?]}7ZEɵ[PQV[j7ݪSL\QPMCɵvj}ӼoGռ-5JJؚ;ꅏi~0_pPmcZ+rߜڳ^J盘֧ͩkL^yÕ8}7p]磼a}7%q͏Akt2uZXגRcepq{O)I6};ZI\1?^JĕKK⺟JʥzQW<_ w$<-۶Fe%Y&FIy5om+iߴ[O[W.mߟZktMFW߇;ݏTWj%quIڰyJڗm{GIڰb%q/ՖRZWbO%iæo]++6p-ۦvI\1_oN%qǒas}6ࠛ:z>jٶ5zIڰyJJy_vn82Um{GIDou*w]IڰiyJӾn۷g8&(+O_|2}/q9R8&ve7%Y&FIٽkl^n8Ͳ}?-箱{Qr\ck^89ƴ)bW6l[wIڰ9N]-Ifo%yOa=?A|iO[7S1}zPye_vzKJ_|]F)ֵ$mشk%qe̵$V$mشooKʘP6lr%qeQ6lc$mشmI\1fڥ$mlcw{ -i[&]^ Ws]Y࠺_/f~Ӷw$Ԙ}_5P_tzC==JJ?$mشk%rÕѺ/JeWp$]ԷW\*I6i뷷AF2ƴ%i$w=&Ƥ߿Ha.+'ӟ$mDQ}ѣiLkIڰ9N]-57ږIDZM<|c]_/SտK뒴asqt]GӘVrvZJ}-+5ĕKK⺟u!ˍEI\1.%if9n-cXT%qi_xnk;(+c>d0p~~am{UIy54y~bt|uGA5TWuk߾='Aktm{~c*+5}:.]W_%ifk4)F/SIٽcA5qvee*I6pP^/t^cDZĕ}ǷopMtTW|*2a2Jvbj ꪟb'/˱$Ԙuk8(5%q/X6lv޵as~{[6*Oӝ*/7anm.+'ӟKJy~9ĕKK⺟u!tUDZĕ1_o۩$<֯_<Z26a3G/7Ax]U_FQW4E^>Fcĕ)y%y{djW/˱$mޖM[I~o/w?VM[I{K^]hTeXGri󋏏%qO%q\c,I6m;p]~ĕ6.I6};pMt{GI\y]ۏw?_d8hGI\y]ۏw?_~}_pڗ)QW#pMt7nQ6lv޵TcO~??y}B^6lbצGص屗ĕnR6l^Ok4Ӿh}tMI\i?ĕnR6lv5eo"ݍ겋Y4vqYCuA5&ч.^]Zv%%q?$Ԙ}}ricI\SI\ӻ璸wy%qeO<ĕw_|O.+'O璸_|O.+'OKӻ~}䒸r/$Ԙ}}˗ri?u?ĕ1_o۩$<<2˧\W}}<ϣ$$O?sI\yzy%qeOn:1ĕpܵEQW˗OpMtwV$yĕz=?5u|w?Ky)+c~FײqSWF/Qy=Q$m،MIˑ%qeO>᠛%ʷ#7mg$o'v櫫vI$Te"JJ̣nÕ6SIڰyJ5p/7N˛=jrs$Y1M.+5w_Zޏ,I6m;ZI\1_oNp]k/KʥzQW<(I67їm+I6};p=])lyYv%Y&FIٽ\4-ӿ.+c~_>Akc뱪b^1J|uu?7p2YSMIڰbA5ԧ-K5FIٽ$mޖM[I1PzLwsfouɫ:z\цqmI4?|=t//_q~q~$ -[I%i&> -q92RQr䒸rKJ$mk%if;ڰ9N]-Ifo<[nnja.+m~q]6lv޵aQWN|_sI\$˄CLD$o'^W$Y$mޖJһv-;=%q_o||.I6}%i8w$Zv1wzKӻO%qe?J2jȩaӖs-+c~CIڰi˹ޖĕ1$mVmɫ]|6l~ooKҦ$8?7!LJ뒸2ww%ʷZCIڰi˹ޖ ے7e1ĕ7ߵ)cKe~Gࠋ-]/+mj:?DɫNWw2槓nk%8h~?sINڛݸ-źĕ1?|oBu9z$VJ҆M[88w]^ٍ;FCds uE+v}zYvNWAcWe9me%iæMnoKJO88w=&m%q2_o 8.-]4v7,V$_ w$3t]XWZ<^7\GvoI/c^It1Rc/[8w]}Q[Ǯ]ĕ1?xw$cO%y;jZߴ+8HzXW$mk%7ꎷGv:pPzzLkS/y(yPmӴLrOUi9jbiu9璇1M^nh8w$m*OӝϻvXTr~z4{%qe߮KS͏oǛe]-PP8Ͳutdş,Rc~>9>$mk%8ӴL%y{*Rc]t\6-,I6m;p]~ĕK8ˍKJzu*+_ ˶ w$(#WJ҆MޖdZ;%%Zϗi9.֒zx)/7d]Yhf7oo᠛QWU]˦Z&}h駘ӴL%_m'࠵Oc%iG^pP,?ī 8HzkIڑNAcSLz=^/Ųī 8HzkIڰi˹zxvh=7 p4vU^cCɫ;ڰyYj^жwewLKJt]GӘF1%%o?p/JvM;\uɫǫ;ڰy|e]ĕFMm9zɫGцM8&iLfq(I;/)7B$ǺĮW7IeV[v};GIڑGhohO%y;jy%iGj;px5_<^֒#m?|u$Y1MTWFh7%iG.%{_j]=]sɫǘh&iJv%%nw˾s=W5BMN]Iڰy5ooK(~8$W7K^u-UцqmISuCɃ}}?>؍<|=wJv"~o~1ݯ}L]u<ܽwump/ 8>k}J҆MλV6l~ooKҦm.+'Ͽ/p%P_tؽQ}hL1Jʥk_~}_J^]\}+O'?%'FJʘ/%Y&ZIN^WWdZ;A۾/uYKJzi ےi6{+OӝnreyIrZa.ӴLw2ZvIi˹ޖ<dst|]ebd+m~nyXۀkrԺߵЛZޡmAS5Z_&E1tFkLjoKCɩh˛5pFkL%95JJ}bԒaӶdAkt4-6ئXmSh}JJz/zO:Y5Z_Y5fk5mxyFh֗$zp:>v)+m'ӾGIڰiyJL 5bIMCɃ)B好)I6m;ZIˑ%iG7Q5<Ũ/$o'^^ެ e,ǒLKJTM/]5&]7%%kWN}_J2E/y(yPUcgw]SCصWNklV)zCɾ;DRc۶>dsaj0ےrj\K҆qmIˑ%qe̵$m\].+c~{(I6m9ے2(yuvuIN|u$zbl%qe%iæ-~{[rdl%^\_qlޖ< w 8&>~ٕĕڟ%q.?}{.I%q.?}{Oj)c׵:.]$ԘlR6lc6;1E-+5p]5z?JJ?$mشk%qfka35pcZe*+'Ϗ'ࠓw=&E56QWjOA5rWWMWt3pMt]^(I;rm'1x5_mqu$$VNkĕ1$(ۉݫꪽ A}z]>,+'O^nvsI%q.?}{O.+'Ϗ'5>em1x^O\hWwt|m'8{yb*~pIN^WF*q9rrɫ-pjyK^]7;\A7uy٣$8w=&m%q2_o 8.-]4v7,V$_ w$3t]XWZ<^7\!e).P)oP̀ Last system reset occurred on ͒̀ Last slave reset occurred on ).P)oP͒̀ 2!X͆zͶ>:D{Ͷ>:Dx 0>0D̀ ERROR: tShell not installed "~Nm | "~m>>2sx!_U*~r>O"~ <(G*~|H/GO> DËd 0D _y  {y0D{ DDDD D D>^D@DO*. S00/00/00 at .tShell. title "Last System Reset Display" ; ; (c) 1985 S. Kluger. All Rights Reserved. ; ; Displays date/time of last system reset ; cr equ 0dh lf equ 0ah tfunc equ 50h jconv equ 10958 ; .z80 .request syslib ; dseg ; @dcfld:: db '00/00/00 at ',0 id: db '.tShell.' offset: db 0 ; ; cseg ; start: ld de,80h ld hl,id ld bc,8 ldir ld bc,0fe29h ld de,0 ld l,0 call tfunc or a jp z,fatal ld bc,0fe29h ld de,0 add a,14 ld l,a call tfunc call print## cr,lf,lf 'Last system reset occurred on ',0 call time call print## cr,lf 'Last slave reset occurred on ',0 ld bc,41 ld l,0 call tfunc or a jp z,fatal ld bc,41 add a,14 ld l,a call tfunc call time call print## cr,lf,lf,0 rst 0 ; time: push bc push de ld de,-jconv add hl,de call @dcvrt## ld hl,@dcfld call pstr## pop de ld a,d call ..10 ld a,':' call cout## ld a,e call ..10 ld a,':' call cout## pop bc ld a,b ..10: cp 10 jr nc,..10. push af ld a,'0' call cout## pop af ..10.: jp pafdc## ; fatal: call print## cr,lf,lf,7 'ERROR: tShell not installed',cr,lf,lf,0 rst 0 end u 0dh lf equ 0ah tfunc equ 50h jconv equ 10958 ; .z80 .request syslib ; dseg ; @dcfld:: db '00/00/00 at ',0 ESKAY Software Service 30 Dec 85 7120 Skillman #2104 Dallas TX 75231 ANNOUNCING tShell A multifeature logon security/electronic mail/menu system for TurboDOS version 1.41 and up. The following is a preliminary list of features of tShell: - secure login with scrambled password files - three privilege levels - activity log - configurable drive access and assignments * optional menu shell with individually configurable options * electronic mail capability with forwarding, return receipt, reply, on- or off-line message composition, dated and encrypted messages * mixed-brand terminals supported via terminal configuration file keyed on node address * fullscreen operations on login, mail, talk, menu and admin functions - 100% Z80 assembly language (* = available in release 2) Preliminary list of commands: LOGIN (renamed WARMSTRT.AUT in 31A:) BYE logoff command, also warns of mail TSHELL (renamed 0A:WARMSTRT.AUT - menu program) TMAIL electronic mail utility TWIX flash message send utility SYSTAT display system user activities and local parameters TCONFIG system setup utility RESET remote reset module (may not work with certain hardware) TTERM terminal configuration utility PASSWORD user password maintenance utility MASTER master processor attach/detach with lockout If tShell runs the menu, certain system functions (such as DIR, PRINT) are available on-screen at all times. All data subject to change without notice. Requirements: Any TurboDOS Z80 system with version 1.41 or 1.42. USRSUP must be included. tShell will take approx. 1/2k in the master, 2-3k in slaves (banked slaves preferred). Availability: BETA copies available in February 1986, Release 1 expected in April, Release 2 (full release) in June. 8086 versions will probably be released in September. Some comparisons: NOTE: data given on available packages may have changed, data on tShell subject to change without notice FUNCTION TurboPlus SystemManager tShell -------------------+----------------+-----------------+-------------- Secure logon (9) NO NO YES Encrypted passwords NO NO YES Network security (A) NO NO YES Menu-driven install YES NO partially MAIL YES YES YES With offline compose NO YES YES With forwarding NO YES YES With return receipt NO NO YES Secure mail NO NO YES Status display YES YES (1) YES Multi-circuit oper. NO YES YES Theoretical limit as to terminals 16 (2) unlimited (3) unlimited (4) User menu included NO NO YES User can change his own password NO YES YES MASTER interlocks YES NO YES Fullscreen operations NO YES (5) YES All assembler (speed!!) ?? (6) NO YES Language written in PASM (6) Pascal/M80 M80 Price $395 (7) $250 (7) $150 (8) (1) does not display printer status or user processes (2) Limited to 16 terminals A..P (3) Status kept in file, slowdown logging on/off or status display due to file access if many terminals used (4) Status kept in slave RAM, slowdown due to network dispatches in large systems, stations must be consecutive (5) user editor only (6) some programs' abnormal size suggests use of high-level language (7) prices may be obsolete (8) price per serial number used (9) tShell verifies USERID and PASSWORD *AFTER* accepting them, leaving trial-and-error breakers not knowing if userid exists. The other packages return errors after invalid USERID. (A) tShell assures certain resident functions (logon/off etc) can only be accessed from the local processor. ------------------------------------------------------------------------------- tShell ordering, pricing: Note that ESKAY Software is a fly-by-nite, evening/weekend project and anticipated income greatly influences motivation to work on tShell... So, the more advance copies sold, the faster the development. Therefore, the following competitive price schedule: 1. Prepaid BETA orders received by FEBRUARY 1, 1986: price: $100.00, free and automatic semimonthly update service for 1986. Estimated product shipping date: 15 Feb 86 2. Prepaid orders received by APRIL 1, 1986: price: $125.00, free and automatic semimonthly update service for 1986. Estimated product shipping date: 15 Feb 86 or within 10 days of receipt of order after 15 Feb. 3. Prepaid orders received after APRIL 1, 1986: price: $150.00, updates available semimonthly for $5.00 plus diskette. Estimated product shipping date: within 10 days of receipt of order. 4. Volume orders 10% Discount for 2-5 copies 25% Discount for 6-25 copies 50% Discount for 26 copies and up 5. Payment Currently, I can only handle payment by CHECK (any kind, but CC/MO preferred). What you get: Before 1 April: All tShell files currently available and debugged with users- and installation guide both printed and on disk. After 1 April: All tShell files required to implement the full system with users- and installation guide printed (binder included). Updates/bug fixes: Depending on bug reports and upgrades done, bug fixes are sent every other month IF tShell was bought before 1 April. Bug fixes solely in the form of new files, replacing old files. Updates in the form of new files with integration instructions. How you get it: 8"SSSD only. Sorry, no 5 1/4" formats available. How to order: On a sheet of paper (or your company's standard form) please list the following: - your name, address, phone number - your version of TurboDOS (ie 1.42A or 1.41) - your serial number (eg 24/623) (if you are ordering multiple copies, please be sure to list all serial numbers required) NOTE: Please make check payable to "S. Kluger" Send to: S. Kluger, ESKAY Software 7120 Skillman #2104 Dallas TX 75231 When delivered, tShell will include a registration form. Please be sure to return the registration form in order to receive product updates and bug fixes. No "free, automatic" updates will be sent without registration. ------------------------------------------------------------------------------- TurboPlus, SystemManager, TurboDOS, tShell are (c) and/or (r) trademarks of Microserve, Lodden Tech, Software 2000, S. Kluger, respectively. All comparisons done without guarantee of accuracy. ; tShell definition file v0.10 ; (c) Copyright 1985, S. Kluger ; All Rights Reserved ; ; This file contains the definition for the unscrambled ; userfile entry and for the resident user configuration block. ; ; version control: ; 0.01 11/09/85 initially defined ; 0.02 11/20/85 made level also indicate entry deleted ; 0.10 12/22/85 added TIMECL-inhibit ; ; ; +----------------------+ ; | userfile entry block | ; +----------------------+ ; USERID: ds 8 ; userid (8 char max, blank fill) 8 PASSWD: ds 8 ; password (8 char max, blank fill) 16 LEVEL: db 0e5h ; privilege level 17 ; 0 = nonprivileged, single user area ; 1 = nonprivileged, restricted user areas ; 2 = fully privileged, no user restriction ; bit 7 set = use menu ; bit 6 set = disallow exit from menu ; bit 5 set = execute mail if message waiting ; bit 4 set = system administrator ; bit 3 set = execute .COM only ; if E5 = entry deleted from user file USRCOD: db 0 ; user code (FF=sysadmin) 19 DRVACC: dw 0 ; drive access vector 20 USRACC: dw 0,0 ; user area access vector 24 DREDEF: db 'ABCDEFGHIJKLMNOP' ; drive redefinition block 40 INITUS: db 0 ; logon user area 41 INITDR: db 0 ; logon drive (0=A) 42 SHRDRV: db 0ffh ; search drive 43 SCREEN: db 80h ; screen preference byte; bit definitions: 44 ; bit 0 set: cursor steady, else blink ; bit 1 set: cursor underline, else block ; bit 2 set: normal video, else reverse ; bit 3 set: 80 col, else 132 ; bit 6 set: no TIMECL ; bit 7 set: do not customize screen LASTON: ds 5 ; date and time of last logon 49 LASTPR: dw 0 ; ckt/node of last processor used 51 ERRCNT: db 0 ; logon error count 52 DEFPRM: db 1 ; default print mode 54 DEFPRT: db 1 ; default printer or queue 53 CMDLN: ds 40 ; 40-char command line if no menu 94 RESERV: ds 128-($-USERID) ; RESERVED, UNUSED ; ; ; +--------------------------+ ; | user configuration block | ; +--------------------------+ ; LCLID: ds 8 ; userid 8 LCLLV: db 0 ; privilege level (see above) 9 LCLDRA: dw 0 ; drive access vector 11 LCLUSA: dw 0,0 ; user access vector 15 LCLLGD: db 0 ; logged flag 16 LCLSHD: db 0 ; search drive 17 LCLUSC: db 0 ; user code 18 LCLRDD: db 'ABCDEFGHIJKLMNOP' ; drive redef table 34 LCLDPM: db 1 ; default print mode 35 LCLDPR: db 1 ; default printer/queue 36 LCLPRC: ds 41 ; currently executing process 77 LCLSCM: db 0 ; screen mode 78 LCLRES: ds 128-($-LCLID) ; RESERVED, UNUSED ; ; end of definition file data 9 LASTPR: dw 0 ; ckt/node of last processor used 51 ERRCNT: db 0 ; logon error count m80 =tshell copy tshell.rel b1:;ne b1: gen osslave.sys a0:;kfc00 gen osmaster.sys a0: change *;n dcon a100 di hlt . g100 inal DSKASTflag31: db 0 ; user 31 access flagsrhsav: db 0 ; search drive saveinitc: db 0 ; init complete flag;fcnttShell (c) 1986, S. Kluger, All Rights Reserved List of tShell functions as of 01/01/86: Functions are called with the following registers: C = 29H B = 00H if local function B = FEH if remote function DE= network address if remote function L = tShell function FUNCTION 0 - GET USER BLOCK ENTRY: L = 00H RETURN: (DMA) = USER BLOCK FUNCTION 1 - SET USER BLOCK AND LOGON ENTRY: L = 01H DE = 0FFFFH (DMA) = VALID USER BLOCK RETURN: A=FF = UNABLE TO LOG ON A=00 = OK FUNCTION 2 - LOG OFF ENTRY: L = 02H DE = 0FFFFH RETURN: NONE (PB IS CLEARED) FUNCTION 3 - SEND CONSOLE MESSAGE ENTRY: L = 03H (DMA) = COUNT, FOLLOWED BY UP TO 127 BYTES OF TEXT RETURN: NONE (MESSAGE DISPLAYED AT RECEIVING STATION) FUNCTION 4 - USER 31 ACCESS ENTRY: L = 04H DE = 0FFFFH RETURN: A=00 = USER 31 ACCESS OFF A=FF = USER 31 ACCESS ON FUNCTION 5 - SPY ON USER (ATTACH) NOT YET IMPLEMENTED FUNCTION 6 - RESET STATION ENTRY: L = 06H RETURN: NONE (RECEIVING STATION IS RESET WITHIN 10 SECONDS) FUNCTION 7 - ABORT CURRENT PROCESS ENTRY: L = 07H RETURN: NONE (RECEIVING STATION ABORTS CURRENT TPA PROGRAM) FUNCTION 8 - GET TERMINAL CONFIG BLOCK ENTRY: L = 08H DE = 0FFFFH RETURN: (DMA) = TERMINAL CONFIG BLOCK FUNCTION 9 - SET TERMINAL CONFIGURATION ENTRY: L = 09H DE = 0FFFFH (DMA) = TERMINAL CONFIG BLOCK FUNCTION 10 - RETURN DSKAST ENTRY: L = 0AH DE = 0FFFFH RETURN: (DMA) = DISK ASSIGNMENT TABLE FOR LOCAL STATION FUNCTION 11 - SET DSKAST ENTRY: L = 0BH DE = 0FFFFH (DMA) = DISK ASSIGNMENT TABLE RETURN: NONE (DSKAST IS REPLACED) FUNCTION 12 - LOCK ATTACH ENTRY: L = 0CH RETURN: A=00 = ERROR, STATION ALREADY LOCKED A=FF = SUCCESSFULLY LOCKED FUNCTION 13 - UNLOCK ATTACH ENTRY: L = 0DH FUNCTION 14 - RETURN LAST RESET TIME ENTRY: L = 0EH RETURN: HL = JULIAN DATE OF LAST RESET D = HOURS E = MINUTES B = SECONDS C = TICK COUNT FUNCTION 15 - SET RESET DATE/TIME ENTRY: L = 0FH RETURN: NONE (DATE/TIME SET AND FUNCTION DISABLED) FUNCTION 16 - RETURN MASTER NODE ENTRY: L = 10H RETURN: HL = DEFDID FUNCTION 17 - SUSPEND ENTRY: L = 11H (DMA) = JULIAN DATE (DMA+2) = HOUR (DMA+3) = MINUTE RETURN: NONE (RETURNS AT SPECIFIED TIME) FUNCTION 18 - EXECUTE COMMAND LINE ENTRY: L = 12H (DMA) = LENGTH OF COMMAND LINE (DMA+1) = CR-TERMINATED COMMAND LINE RETURN: NONE (RECEIVING STATION ABORTS CURRENT PROGRAM, EXECUTES COMMAND) FUNCTION 19 - RETURN SERIAL NUMBER ENTRY: L = 13H RETURN: HL = tShell SERIAL NUMBER DE = tShell VERSION # BC = TURBODOS UNIT # A = TURBODOS ORIGIN # KAST IS REPLACED) FUNCTION 12 - LOCK ATTACH ENTRY: L = 0CH RETURN: A=00SIGI ELSINOREABCDEFGHIJKLMNOP26, \TLRSSIGI ELSINOREABCDEFGHIJKLMNOP\6,\TLRSvBTSHELL.MAC_  !"#$%&'()*+,-./012345o6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^]ۓk?Cҿ[FS=q9uܛoO燌/_3swwzh.猅OL[meUdzϟ~XyG/Xg,ܼvn>xح挅~[5mͺ>팅v}.7V\muغZ߽ 7?|i?W7gwMc٫mߊǿ?Y֜pͷO_0mo7euњT2kј&ϳԷyvuغ:LXњnUӶvZcmyִ5g,ܼtO_pqӼ]UqkMuݭ:{=v!c`s߭ӹ֢YpO_0ZsSw9Um~=qn[3nzFkn]c.:שuњbmzp`\|Em*{p\ֽFkn_~|gM[ʦgcqO|??oLیǛO7t뭛[~whMi/oo$cO_ayxQnTt:c>}s߮[uVۓWQu+]2EO9cѵxXu57X2Z3-az|E.:>]u]u-azEΣ{w]mzA{râj;4Uc.\.,6M:oպ<[grQSͣhL90=EU(eL'uo\.X=v}<[Ϡr9LEzEӱwEM [.ݺQ5maw{50= ,]Tw먚=QvۚA{rnaQw9Um~=A{rnn`6sɠr9L7aQݦߊ5J)0|EǵnkuoA{rn~˱c.?]F񧲻w-afu.jS;0˱sq׺5gr86ײjS;0|Ex:ܷ>3ho\͟roOUnTk0Ϗg[aTvΨ}3-H*uFݦnϴkaQݦn:q1v#,:qi\oh:ܷ=3GX=hLe:qQ^v#,*owX:n3Ly=ֺ>x:g5Ob_< _d,ܽ׻%iV>[wOKq=?gP2=i}^b=s1OXsE.r?g0,mj>c-wovշn|_W܏W,ڦu+:2?o2`yOAm'N5q>ќ82F\.Gy;Ӝy;sWXtqn[3άׇianU{g_]W,>zܷôfPcx82.Kq{}LmTp\V`ƩO5q> jΠ6i-5oE[ˬ0usLs1On8 j:Շ jG<,ӱX:ݶf, w/.cu*mգ^t]u^C˻X2.Lm5,Xs٭UO~:3˟=E͇qE[?? jϏ>~{vѮdPcϿ}`ѭX}oӹz,]+?}oXtnuѧZ߽q4So^z.ZVGNj}LVȇwonݕݶfP{YeӹoYnrq6syEQ.?}OnXt1Mg?wLV6_()ڸEd}͠6Og1Mg{u/LV6_ep:.^Pm%cɸ|LXu+ڭe4zδ ͯwgno2S}?'Iue:l[q53uT3حn8UXtvkQٴR3h/\]mEgZvU_gmu%cX{y2>p\V׋vpЇw.cɸ\gQ+ZVa8w_Fmt/Ʃ?/~Ϣzt3WWu;\=SO`Nj2Sݷ\WueV_dP6sy*ڸ7oԶ\Ƞ6u~y.v1Mgv8dPc4<<{vѧZ߽q4So^z؏ Kƒp]Tv۪oziyֽyZ2^޽X2.832}y{>2ikz1)x*o/zt%c?e,|Ne^tFcp\VF/[/{-:mp\V}Ջn]Tw먚=Qv۪ w/20=~}f2oZnf]Xu۫ڶF_â<:n[3 'X$ֲzʠ6Nuǟ,cT3n3kXtqƒp.cu*m՟EnUӶv>n[!c]ƒq?yf2oZnf]Xu۫ڶi 7ּ j'X$ֲT3߳hvQvۚ|EkW22^]Tv۪G6sчwpd\.iʴUXTiTM_3._`n{]~Ƞ6ooQvۚAmx?ePo1W2޹K˻Xqn[us.j1}X{ywKrnnFLk[EuF4j5Ivݺ3E.y Z{7kâñ X$^uΠ6NkXt'gPu?eP6sy*ڸ7oԶ\΀EWm3.K˻Xqn[u^/Z[F)c:C˻X2.tMXt뢺Mt6:1`Q\+trvmzAmpʸǵ^=SOu^=6Πd, w/.cu*m7mzX1!c_e,ae wqWK˻:שU7Ӌ˱c.?]Tvևw/wKrn~LmXt:EmgPrvt[sq=jӶYcm*鵦 Kƒp]Tv۪zEm*{C˻WwKrn~? j?3<쯧 jc?9ePOahv׻̠d, w/.cu*m/zQw9Uc.Zf}X{ywKrn~y6Nu|hC%cX{yw t8Smn~鸖]Շwpd\.7Ϝ ,⮲] jcs>'v38og ۙ _EWj AmLFG`lӶ Q+[YKUrn~d,ܽ:שU7_"_<5mcmp20|}6N j jyAmө>duF݅/LVnuq{_< jOfPcAmh޿#fO Q+[YKUӨK,F򥸯{vɸOϴ]QKƒqUڟ*o/zn]T.:qnLV絕X4{m*ow*'wgLO,kSݶsƒ1?Em9eu _E=]}͠6#:qWWsy{y|O\OS͠6i1W2Ԇ3itLVmm}zy;s3SuT3h/\]%cX2^]G/>\4mp_2E7W]tݵݵ[sX2~ܭitz};,N^8kL9:ukwP\n*nr~Hrl:Zt%c+v.j\G>\2TuݟgOjwM]{d,z۱Y?5j޺iKM-cAϺv7Yw%c:>6n'`xm=^]28AmO?gp+ft3<2C݅/ȗ]Z[ 3n`qv׷usq5~vs"i֣n~1q>qƩu~ayۭEeqv׷izX2֫o7WϜ)q>qƴho??z.n:#?}?Xtn֘&ϳ߸f07Xt?S`:M'O;pUc<OXt]T||_W3׻vc9m}-WXqo~͠6Nu?{g_]M27kuT3ޙWW뫫 37z-:q|LUuT3WWόXt?^[WWɠ6ֲiڎkq`N\â]qEc.?,uј&ϳweθ^׫gzu+Fߎkˠ}_pu5WH:eWwmvv~OE]{zL3֫vTaQ\njuzʠd,_ͯ\te:u{cu4v5cѻ_7XvqvXg۽notغ9cn>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`o|:y* @݋K=22@Z~7z/^mKǾx$Wzk=I՛3?}jmE&Ͼ雌?z)|a>koW+<2_i7GUߴhK߽x.ZZ*Ww}kVTfm^MM=zl}>kd=nmrڏre[-jI/Wxwᢗ_||.}vQK潖<6_T=Zo۴j?+뛗C\d- c{~opSʘU}O}꧟~=^o{^K?t~=?YW qw>y*wSO?Ѫ6wuVw瓧yWT'ɧzj'k[4ydOo~OwjڞnUuӝ~e>UT2<}'޷s-ZGq>?w}O>?;}ǟ|wz>h'MZZ^޽ǢiU;T*;gZ=[Owk΋iVs|>{~^mWۃԪZS;Y}g ݿ|Ϗj^^|ڵ-WmuG:oZPfZouެ>ix+/ūpS߫>ww^3'Uvg/>{1kFѼ׋_|NeVuV nӡ>\4+4u_e|7~S~o꯿|_|>^>񳾽\_g@۬}ݘ'}˕X=ݕ+{v_e|7~S~^̫Ufmџ2kk:?7^/3ͧ~?mKi_ryi~gOEe־ߪi7C)˕O޴Uw|x;/x>Y}ڝK~gG߼/>~rF[sѯyz(ZJr |G߼/>~P[rՆs޿̗?w8勏̧]~xg/x-WmxOk/x]~g~}3Ǘ_|'{u~g~~5Ǘ_|Zm޿̇/^AK- O~/^A^]G~g7_s|?hkrSdg~o޽k/x oe};ע޿̋7_s|?wZG~/^Aѧ1K^/_|Sѿſgg~߾_~mZ瓆ۚ5Ǘ_|yLZGq޿7/ㇶjWgg~曏??Uz2o>%C}//~q+m{G}/y=:{yiS}/ysP]~'}O3/>~|x~Cw|xK>|o^x8ڟkկvOnj__.V=[vun^:onje__2}hn¿ڭ~uV3N'_v'oyh[=ojkwuF݊'p|1h[;T_4m[v6OOc4k{شEnzq8jxެ2 v/ 7/>cC끛n?{џ\~_e`=p_?Z^qd=pǷ7plcڇ2 7~ <{|.:Un.G7/xya+>i߫3Xwum祷Ztj٫Z廷/:zŏuӾWg T~Ϳ`=pgn[/˯R^}N^~eU^3X7~?otUv2s-Oζl-7wҪҖ V+ѧz߽{ǟ^j޽˟|7?egPo;Wpq7:{ N# UZTTf2]=.C^=ɠO\epiSˮr˳м+}S/^]e.\epiS}*e׹ ]y+ZCMڦ ^Mi2X[28=vN{8Gkޕ>O閫 twsʬ628͏)e׹|Ͽ]srL-e׹yq5m.4|.S{v4Z[immpIvק ߶qD]u+2Gejz&4|.'V+s9pڣzεo2r89.iw.Πv.~y_;pCkߞ5 N#rVeލv`i2\+\TO#H,̣2xi4?ru9dp%7i<ɠu~˕gY^m ]F7^:ndXƥ/7}N`+Owjp}rKS`=K_r<-WoWζl-:|[5㘱ڧ'8'8ڭy'oZk[im2Jn&6N hzͩnˠqVkwV4OV\I4_|x]qǭ=Z|:iU퓵+#>rrY}U{u} w.|[\AOq7:t~9dZOd8جOM m_jeyn+/jC;A\]N>dZYA\]~\ʬfpz.7/n2-W;͇ tUr&zY/jey vEeּ}ij8NsQӋo܎F`+ >yY|ʬ mri~OEeɧ,VnyrYUa V+mڇ2ZoZt8^3VA\]yܧ2k=zYwsʬPeZYv |ڵ ^Mzp"j^|V N#r`+ڇ2m3V'!W=Sʬ/eZzY/jefjzX=FrD.__ePo;WpgPo;~9dZYv)Wi`m+ V+n?e5<mje ^f?52XZ,fPǖA-4> N#Kˠ`98djzGeZٍ> ˸}끛tоWkyZ'Vk^<n.˸>W-nj~1U:tоWkj'O*W֋?8f>Qo;Wme`wޮܧ<4^2-Wp}**閫 N#r㝋閫 8~{rI^9Wεzݬe>jSy\ThuRy}}5wsut_^Z^e[GNAnʠO%WkNu鱳\~pA]eލv`9]Kyѧy2OS2xuڱ|[2wsbir8ϵf÷%qo*Wnp=4s/~q8Z؝+2؝+ vCvn6z۹}Ἧ'N#r`u޴ ^÷%e׹x2xݘ2NWJ^ V+sYFˮSz:eZYi\ê c3xy8͓U<|ݬy`unWp{zo ˕'Է+,˛~Ǿ4 ^M ʓfE3XZ,}g?솷-e׹_e5-:)qo*W/^Ac>>YmdMc2Ok؝+2؝+ vCr N_ V+u2Gew2; v K1s8=v~ZT<2JCummmpsѩݪɛvږaỌ2xi޵;8n}4kӼ:6n`]-4ni޵ V+ѧzO?\q`i)e׹_e5-,VvO%o.˸gPƩݖVueL=qz=V:/{B0UN'MC^O^^\q 7U:o~XeVmjYyh{؊O7qK_3xuےq؍y)TFi8޹h9ᩨ[=;ีGk9dЦWpyZN*jۊZ Oٚ|[TA[wʶsѶk3eJֶk7:ɷEy5.4J;qkۢʼi&qwOEMۮ-8fl\؝+v۷;r V+sYFyn6q̸鉺6J;OSΠOVx}}]A|G>r>-'OE~ܧA]eލv㝋ʼӼh ӎ+8Emz}}5x}}]Ya V+aW-nj+/*;kk~U^_oԪӯ3s=;oW28=v7ZЩf,Wv9eЧ[2Xv8zZ5ﵟ~ה&u2x5fz.o2; cQ˕g{jEvv8껗w_t+ S}Pk~8f]q(vŚ]qAi.;8>YJ;TgyUvUS8TUʬe>pFYz5y4^V{vkn~urSˮs8ӡߝ ^,?ヷ`985:\]__gjzMYuTfM-*P-OeWey~q8jx+V<6ip9IUfq(ݼ*ݼc`78d0\2G-iW[ԦU0_Ӫ>C3ey'V+ѧz``=pennjgpz.?(K}4?. tUKe%u2x5,5ndѾWeg÷%qrY}ͽڦC/6/x}u1c{ؖ'v+8n m>GnqA:?`i4{5wӪi.*W8fG \Y'o[q赮'V+ѧz``=pt<4yZ2.uioK1cndXƥ3X|+{Ikߞo.˸>W-nje؝+2؝+ vC+orF[ǖjeOCy!ݼc`7`d3v: vC%10XZFJe\>͋oASQtwsYƥ/:m8fLɧ'V+ѧz``=pyɧZS;YKw7e\rӎoZ8fLZ==Zٍ> ˸}끛tоWoi7e\rߖcX=KS`=KgM\4V{eg÷%1O,VvO%2.u2Xܼ{GoC-mfIcӽڴo沌K_3[>1txbi}*q 7gӡߝ}NjzsYƥ/^je7T2X,Rnݻzo.7 z~t/psYƥ3Xܼm]tsYƥ3Xr޽ЏJ? ߖ7|:xh߫'沌Kg߽{^ɟX?aM~B/?yWy*E m;iVƝ^|x{sYƥ3XܴiU+ŧ]Tf[|:x\\q ܼN }|.j|T6ʦ>h7qYKxOkU{N4}Ufme]dXƥ/umybirr^8yX\&6>kh ^MoWOpqtOxۭOw7ݍ+^3|.OḯNyh>'pvOEyhӼ:yL{8.1<7U:i=pƛ2X7_]>YmSU`dTD5eI@C$Z#Z'x5GL:( {Tx2eT` B XtEp2@ ~fV~f?l-cW6L7HX[*=AEŇ\WC$@mlgml?< Faٰ|,\ ݒ6áadÁ|<:QՕ# 5 f:8PQ#`9= 2:bS#@9=1B:VQӑc` V:S#5=9;6P`5U1=.;ZPӕSc5=9Q";pёP@eN3ѓ'USRSTAT is a spinoff of EMPTY. I was asked, "what if I want to find a user area that's either empty or hase just a couple of files in it?" and so here is USRSTAT... It displays all 32 user areas, three across, versus the total number of DIRECTORY ENTRIES used in each user area, and at the end shows the total number of directory entries on disk, used and free. Point of interest... a hashed disrectory should never be more than half full. # call print##,0lp2: add hl,de dec c jr nz,lp2 ex de,hvEUSRSTAT.MACF  !"#$%&'()*+,-./0123456789o:;<=>?@ABCDEwǷ?ɋ6~/_wcws<.N&yݽW[Gky?vK<.|7|zVGۗQN۪b~>\8 O3,a]P^ 3m].|ǹnl/6ۮͻkTvm{Ii;Ls"xo?'/Ƨǿ~eNs"uVQN۪8.m>rV-uλΗ9ͩ0QNsvŨ|۸jmZVo/UmuNx= $$.׺?ǣkT(5/'a&quaﳜ5 /aTXWۼQ~fju B˛orfju B˛omI* -oNϿ/a&q_0OgGp95SX~fSEx|z/~?>=~x|?^~/sSa.{pӜF'p7:oo¨(y B:k&^jIi;\q}=z-F7nܨPfm~bQRsQIt8)5YEaTX76L+EYjnvm. WY+9'J B˛rzvԉFrzv-ә<ϥ:!xe0Ogl R4pB7aT)gc}<ߣy 35u>wCiN].\=F9uڝwnje\aT0SxF)F-$^% {/%L-V rQR'Z3>\FEZ_]JaQԉ)ә}j}>\D 35uE0SX~w8q=L}N($Ee:LMbOr\fsia'0SX]p35u>wCq1z{=$YCywjWQe ^m "$a.ǸfZya<=0*a&1vCx|ЯY+"ӕ]p߅|uʹ%ә}: -߼ j0*a֫maQV 0eaTy6i?( %o݆9'J ͢,aJXFEYìEa ߅)[} ӳkބw5zbzrMyB˯?eٳ)^Wۼ]S~gϞ={ٳgϞ={Ô_ٳgϞ={ٳgϞ={aCmצS^5Lݗc\ftxx.嚩IL.0*|Frzv-|*2,{(  ++Reloc Ignored++$vAUTHORIZ.MACJ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI}y~ͯ?i9iܾm$<`bB&[5jDw“M@7Z O¡2tS텳zCS`Vz,𬡱4k0vAqH^R mL[Q0kUz:n*kU 0Y4gCzR29t*\Q7C7*~&YkSU[n*kU%R?fV'M9|iX߂OXW)&" |,-mll$|n'9XUC p>RWoޝp}en1:cs70ޘжH%Rxz CLz_lBg\oӬft\DXW 86jpz_MƱeTCk|ƱArqS ATZƱAj lHX+lOjraIvUon{ZA5VۢW_LͻѸd^aP>,BeaP uY0yZC p>RT1zyΤTYn6WH%9g/,? #HEݪ1clA5zU[DhrpR1clA5lWYvpR0'X4gCzR2pxƦi6JY͍m6f0%ºҐTƱeLgaP =(cSY0/86H.0lі^Tc_YGhT- m/0FzaPZ>Y!]F5EC p>RT1Ӝ I<=}e?1p-cS AxN 8K)HE9ِ̗׻ o!\Y"4~HAG*Jls@+< `C@7Za׭p}n*' M?ڮ~9 qM'%s1Va]iH* 2n!Y"?!͝ ufile$="USER"+CHR$(ASC("S")+128)+".SYS" open ufile$ recl 128 as 1 for i%=1 to 250 read #1, i%; ufn$,uln$,uct$,uac$,udt$,utm$,upw$,udl$ if udt$=date$ then print ufn$;" ";uln$;" at ";utm$ next i% end  "PvCOMMAND.MACZ  !"#$%&'()*+,-./0123456789:;o<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY;{xzu:wvqdJn;ඥOoCnV=4Veum|O> RVIx6ջһ4x7q*w[W:Cj3W{ix5J;1L`o0ifJT7x3L3O|lT E &[*tmt5E&)6&i"Z"Z6 E 4J"]2HA>X E |if)ĴX9tNq5}P b0&L]ؤ"%X&hA2A,|1A,&32A,q70Aތ"8>229Z:&( bkp1LMItKG`>0\6Z ֛0`J$Kw.NL dKkBb2#b0o& DlL}-bqL"2!XAL`Vvˈ` " DЅ*"eB "вILn &_fh$&E0;`е)H{L i|擓Lo&0A,V*mf&#tL&E0kfBL8>5ĄˈF~_kaXIUALh Lp0Ȇ 9@U\vk?XL0E_S%0i)eBL `tx}Ŭ.b bJ7k&ĬTƯ ]4 b袱L k73z Lhj54@L/` bf "HT&;`NM-;ɵM_ ehW%<4 b1 DlLA.}+m\*Nbm<z3qf][5MHmi 7\*!m0/3P|rk6G&7cL ɖX=6M`Xyg>9g D0R amzqJΆ+ P0A0A,VvXkileX4Ҹk0A,&3 q`$[*bMfI%bRifX^ b1I5:1A,V] baz jvonA- b*fBLL+aXJ5:}߽Y3m seXJ5:}߽^3A;1"&hL젦0L\AL bj5Cv ' yf-.D!V&FmAZĄL ꐘAZĄL 2A, ' ^AZĄL 덊mAZĄL 41A, ' }(L -nbB &F DeML>hz1A, ' x&hE71!zEL -nbB &FehYtO80A,7Zm "в&&Dp`XXotS#4@ˢ} ba 4@ˢpq0 b1Y_3A4J "(=4)2A6 vBv͝"45%lF#p١S'i-A]lFz#=q/"mۜ9-Ehlu!zV$ޭj Ѻwߤ}l4LO??l4限ϟ>ݺӯ5yWl4限?]U ܥZu6LȷO+F'N71&}XgHτ[>D\_[l4限?ܿs_Wih[ZÙ_gHτ|{}NbOmTu6 ֝{e5ĕ&F$l4限'Wέt͙wkjKF ;}Mk-bU-:Fz&w'*=[Dw-bqF#=?s+Bs]j}[5NYi\>8tF#=OW_nU5[8BaF#=_nOsJtѫoy׷h4限NМzWylpۓݫFHτ|bYtաƉKlH&F$څ7.Zg^L6L^BWu]x|xXX}\h7қ j 11Lf ĬTƯAgh DA]l;!~殛gAZbF#p١mҤvnS 1&c`B DMjЕg&Kb&kL3.;h$ 3)Ilϫ.L_0&_^t/3Fs{0&?^;2Fs'۟Ws y463a47M^N_f&hs ~`Զq|{}Nf&!-?]̤:KOWs\fҾo_O\LZ.'W.3v|{}N_f&MO%ûw23EY"̤:MKOef_"?pNf&]"oo2קɯ̤%wefMKۋ/8b||9fbv ;auZV|fJ5:-a+^`Ojv ;!o?l]m.nhF3ьf4hF3Ɇ.o12 .a'LYN%섑Im-F&,a'Lhbcdxj  XPDh,~`B13ᲃMb`?cR? ! #TITLE "TURBODOS OPERATING SYSTEM NULL CONSOLE DRIVER" #SUBTTL "COPYRIGHT 1984, SOFTWARE 2000, INC." #PAGE 132,66 ; ; COPYRIGHT 1984, SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "CONSK" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; CONBR:: BYTE 0x8E ;CONSOLE BAUD RATE CODE (9600 BAUD) FFCHR:: BYTE AFF ;FORM FEED CHARACTER INITC: BYTE 0 ;INITIALIZATION COMPLETE FLAG ; LOC Code# ;LOCATE IN CODE SEGMENT ; CONDR_::MOV AL,INITC ;GET INIT COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __CDRV ;IF SO, CONTINUE CALL __INIT ;ELSE, INITIALIZE CONSOLE CHANNEL __CDRV: CALL NOTECK# MOV AL,DL ;GET FUNCTION NUMBER SUB AL,=8 ;FUNCTION NUMBER=8? JZ CONSO ;IF SO, ERROR SHIFT OUT DEC AL ;FUNCTION NUMBER=9? JZ CONSI ;IF SO, ERROR SHIFT IN JMP SERIAL# ;ELSE, CONTINUE ; __INIT: MOV INITC,=0xFF ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,CONBR ;GET CONSOLE BAUD RATE CODE MOV DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE MOV AL,FFCHR ;GET FORM FEED CHARACTER TEST AL,AL ;FORM FEED CHARACTER=0? JZ __NITX ;IF SO, CONTINUE POP CX ;ELSE, RESTORE CHANNEL NUMBER PUSH CX ;SAVE CHANNEL NUMBER MOV CL,AL ;FORM FEED CHARACTER TO C-REG MOV DL,=2 ;SET FUNCTION NUMBER=2 CALL SERIAL# ;OUTPUT FORM FEED __NITX: POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX ;RESTORE FUNCTION NUMBER RET ;DONE ; CONSO: CONSI: CALL DMS# ;POSITION TO NEXT LINE BYTE ACR,ALF,0 RET ;DONE ; END  FLAG SET? JNZ __CDRV ;IF SO, CONTINUE CALL __INIT ;ELSEvCONSK.A:  !"#$%&'()*+,-./0123456789x(=:k%!q>S}qLjK[HG)ymC~ r,l?K΀_ޖKn%72ݟ7ϯ/:䗐.BVrRu+]>?._>^JIMmҹG J9[3ڜDiZ5ؠJƨzՂ9$P,%MyM+Oxr>S d:Bk%a[^q}0i0m!H%;'`sv9+GùV2F5-r&y[ɦ<:!..F BAF Q C LAF g %+?ds: 8w(-Ĉ 6rvȔF 3ĒO'qE 1"t+'=0e 4:2qVH%c+_&Lܧd|}FSU]RDu!]J C6:2qVH%3rul>B&!uڱBo VXȔŹCɭ劓bD N{1Kƽ l5@+iT2nhj8l B-`d@)AȔF5R JIrl}Z!ݿb Ca d[`Hk3 P2Nz`%vi0m!H%@ q 4ɶ d|}Ӊ] 8w(wAP*l B*^7l5@f}Z!hq 4ɶ $%+d9.7lFgW& V2Z+$M]hhh%Np]wl h-0C$ ö ql hM\O+1 YJn%rkɦ\by7lVW&QbxP2O,-!R2&6+CɭdKF g %+?ds: 8w(-Ĉ 6ivMyvDCONSK.MACN  !"#$%&'o()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM7ʮu;-ן<ǽW)aЉ=Y%al:Y abޘ`5.><ϕtJ:%dSpʔt0 4 '1j\|*Յ*%4:ּ'S K#` .r7^F/Mih8 hFKdG,q%|C$}Ś+5P(锄~u3/xF/D8/)MhV) }7gM~  M~BZ'tJBA BzqAךX(|| =|>RK%>JN!0>^t}N$J:%!nn>y#sаt]kƂ5P)MϛS;dнlF 4l] 2pyZaa4#WpyZ`6#¿' ;U&1AUx7WK^$Nl[ڰ k~иO!~lF ,+hF5Y|_lu;$0<3%\j RVcvؾX-1AU-am%[|+%c6ДXA0\NILgRA-B[°̔zMVI<-ag\kJBBo6#RK%>(4fᝒе0[fpX f^ŷx$dŰW، ^bm%RIHKuY}$AI8WAIHK+ i oSxT)M}?o.`38Tm 3SB5ُap.R!%,+hF5Y%a;ltJBA0a<[}Fo+̦tZ8tqMJ a|201H_U|}( Vа' ωa JIV]17،Y?<<6d>ͅNa))锄SւaQ(1?Ua4#Wx`38,+hF5Y|wo[x/&fphJ,tDV[\ J(锄v`،ˊ0zMWJ·3ϱ k|:yphJd-" X5>Օ0LJ:%_'V]xlFg]a4S`2LJ.js:A=|uw.1yc<1yc$lNl UA{8YF(42 ڜN!o1_]yc<1yc+ aSK%fSpʔW Y ،Kmk,v ȢИowJBoaA4 b袱L k73z LDATECodeDCFLDDataDCVRT` N uJs t `  qu`Ȼ` E` `` Crڈ` uJJӊ؈‰` ɈS` [ػ` Q< r, 00KYÈ$8 rpr;%r3~D+ډK xsà! ts72gFË"ڋD D"U`dD5e%I@TZ"`bs6Ro ZT|eQ0(6*R>q@C$Ud6 {Ed!1jVLaUl4/VL xrd Z' 1@)^#1s`+;Y'3pp.' q8\N:Ք#1==B:Sce=9:RQP㧠51==B:SQӑc 9i:Tc MQ2:Q L#@ -1B;UPc  ;&SQc- 1pvkDAYTIM.CSMT  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMoNOPQRSh1Zz Q`-ߒ_K;|')eaDZ30lhkЕ"iГy:حdc2Zoo!s" t%LΏOGzl-Hv#et1Jࣰ#kZN LKp`-Rm64 9-F 1sǏ_Doic"bs> >S iLycMt%]yH%|QYqGy[>-F ?D^ZϗF n?~٘h𻁝тM':_V:O+٘V٩nVn`g9 0/-'1ыieF|cZŇ0``3X741G‰ -]gy=Dz*;FQW?4j-w7ooޝ_?x>/}vmiCOg:-Fc[v‰$--2Mz߮hCB[[G+Lr :ۅeq>2H>noOO׬h!2H2wl-mh>w7oo-pv|<<>-nn< .z}!ԔɒƔЧO-5+gz}6f9(F I c!.S;/g7,1 ML>ҋ_4\r6Zn`ߘljd`ǔ0D L|>H|c H(gh绛BM,eq>@20eۘ3 LS8 h<&d`(,d#񖣜~Dr,+=|41-VNte 9s"G0L6&j>™lL$}lc]ZibꕭDW^?hvGOwgY 숣 Žzb}D6w-e L?Zѕ&;1nJ/>r:-@w7ooѕbLo^eQ=FB?bݐ LwY:ۅ] LYL1.tΙ٘/9-G 3;r6Lbʣc@_)s1eZy1ZϔY UL;J*#|>CMnw4zHgH6!e> I=Ĕ)uBoKVX&cG6Fi@v(1HFQ`QԓGZ?E ({)D8oKÌd֊#Pv,4h(փ=Pg )8hvgyIb#_N(\2(h ΅+ZM@iDF< Ejuk'n&$Ì,1LX^q4nkEb@20eۘBKp|b$CMnw4zHQ$|3eNU^49HFmرL>eBm-jiѺQc5 '^E (Q8D8oQaF2nkŎe(;|nc>:0PB1Mpu>>~A(2p|l>:$gɦDSp.\q#͗S;ж%S WT#Ǚ(8!%8(cG K?_(s(Rw`ds(lJL-$7/yQԡ&X6zH/H6!%KpL\9Qq􊫝}(0#E"Kph1Z蝏J;] 0|6Z5(C], "KVX&c nFi@v˔:!.Eju@2qL/Zc|ʎ& P BSp.\g_/,Gʗ~>FC|暙lJ4'i8 (y.Fq;4f @Sp.\M/~kf)ы_4er^P`(|U\=;mؔЍ"u(E [LJ[&ᘍG! 4F/(Z® (;l6z(6&qlq)aMd`(b }t=<=QLLVJ~%͎3F ٘hkO^6gh-la >E=.FQ(zFQx`-la 3}2nkE<fQn>0eB=-ڌ ҍ/F P࣐:3E [صE_~J_'p(|G(q%8ۅ{RgQ|)8&(^27<.@i͍QE[Q~`ma׋Qؔ0E [c1Zߞx͏gXj<QG_/Z1-Fa(Xdm2zֺ,(NfLFXuYiOw?F6&\/ֽQ<<}b~{~d7bLFQOiOV(sQؑJV43q5zHk2 ʎi\vFQp0P>XQt[+R$j70H 4. ;VnH|c7i\vFQOÚLゲcdiQ59̘±-F c"]<'+CܲLҧgh1Z;|v^{7o|zdS,.l8)$der,dSrQԓGZ7(͙qYؑZXZjiIF1P"ٔLhFQ& P (FqQt[+ (=-;! fQG[/(-l|$Ky<`J[9(쌢5aB(;j!@ql;h[aKƩ2U;"4{4̴7H6Vsдkha ^Q$"لd j(*MqFlB29H@qÖGag1@w2PX-E4i?{(-lZ2(qg>9(h$Pm=zA@ia#Yʳl>0EM [ m:V$Pz[vB(qVo3N@I!Qv?c]?_/Qvhſ^' F&a/Ӏv逶h]N(qQ8%Fbл1v!EʳvA=-;diꉆ0Rq+٘(s1e@onFєgzVm oLӸ,쌢<:eXhpQdOH@ٱFPlࣰؙ3nkS(=-;!.{om֋P|,C (|(| ;VL=QCܲj>™${h[^.cf'C (|rkzi-F'y1o@lfڰuJV& 7zuo/&x>K$deeaGsQѫ%8Vؽ4f8Blfڰu#MFBH20ڰuX'> M6-I㎒dZ\hFG}tPF]',,}>:Qh@BKpTδa댢:L@6E> 6gVqJ z 63ZFq7P QL>R]ڸ8]|QlmQ:hlL-DHTࣰ3 (;JvG꣋B-D-x@ٱlgdh[Z)1P8]⾣-a (|B5%1,B-D(|t2m& $B(0#ű8[ $S9(P$"Z2}Ѣ uzFѶ10cW@镭,_E (?QزCb>:L@i(8V-Zc!ؑU/ÌJ|ds1q4. ;(Zآ (Ye [g>0E [u< e iQx`-lؑϔQ8hQ|!FIqgPbZ\h4T1Qf]6ZqJ|@ [ص6´x(8[6x!6,/-j-:e4m"OP^u܆zdQŰZKd`ֹ -"8 [6+e HCQ8y΢% L_hvG!PeoY:8KpL20u(bة2Z2dZ# c%-~F&S= M>(6m O /( OF&\z}\@iֽQ ^z_(c}-Fb& ŷ^z_qޯz^e Oֽݭyq.ab4Y4HoJ4h1*Mr@p~Q7i\vF͆; enZ22F7nHG}F0|@8m>RhHGhi\v4ۜ9)|Fѐqq_FQ<<}Qxx~k~if$8Vڰu#%Ì(6V+EzUS `dUd @Ԝaj?M*HrbHdRpPe8W ɎdUd ;fnet - return elapsed time ; .z80 ; extrn timdif public sttime,entime,elaptm ; fnet:: pop hl ex (sp),hl ld a,h or l ret z inc hl inc hl ld de,targ ld bc,16 ldir call timdif ld c,9 ld de,elaptm jp 5 ; targ: sttime: db '00:00:00' entime: db '00:00:00' elaptm: db '00:00:00',0dh,0ah,'$' end " then goto try.agn goto exit barf: print : pvFNHALT.MACJ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIo=NPd:߽tco~8_ϯԘ Ԙ{;05/7 Li,KZW&"gˡxqV RA3A16z?{\G&B-L^IkQp|9?*+DaāELE0M{ -ƒeZD&‡̄Apۡ\daޖk% DÛ@ӮK.ꔖb.bִg(,LcB"HZ{&t} 2\>w{0%:޿t>ΜR\Z.sc.>9_({$L%e淏މ0ajLc(󜙮eه K&v(:a(y@-9Y߻TyQ3&B-_g&" hK.N]g%\ ыD;0Y`}Q˲g/13A< ˲gR"mKI.U0A>왰,LE1 ؝ !mpdL| -sZ_On{w13/dX! vYLn,LXJQ@2>uK98+ʄp:/Z !2!x>f&v(ס!SBˊgEmq<pۡ\Qd`(@d/ KֹE ϙ ֞15_nμtRS4+Dtd(rx~L^IkQd 3D|{&BgBg15:?8.9]35ӰLE g&B-t A3uʊScj}$s}rp~Ru}i,ŘXӺ2a0>` !3v&tpQXxϏWvͫy~bB" vbB" vYLXJD&x3D3AvYLRb 5&,%" DaaeτE0L)2aԘQL uZ&Q3о=XΊ:?؞ ы`Rd(,~8Lb}d)ƄE0L)2AN>?^k޼'aJq0Y |b(4֞ C %0usvq415 SwXW&"7OL ы iP;x&tpQDafB"HZ{&0uU1%ү+D53&,LE3:KL%I]瓹X՘X6?2A193Af]K1aB"HZ{&QHLE3:KLR\G4m2Aj!n[sY!g&D/gB'L)n[B7pϗoOafjLRuSoy4Ia]  7 ջwn޿:2cŻWboq/q?_{܅|B_TԻ]һ=D}L]KVz&b7}LZp!Ԙ&iJ+ti>1M pzvbn8ݭ'&XQea/13A<Daae$+PcR"0AvO'zNܑx#"xo~ 3FV#A.z7_9z'7dV;FREE.MAC - CALCULATE FREE SPACE ON A: THRU D: ; cr equ 0dh lf equ 0ah ; .request syslib extrn crlf,print,cout ; .z80 ; start: ld sp,stack call print cr,lf,lf 'Free space display:',cr,lf 'DRIVE k free k used',cr,lf '-----------------------',cr,lf,0 ld a,0 ld (drive),a loop: ld a,(drive) inc a ld (drive),a cp 16 jp z,done dec a push af ld c,21 ld e,a ld d,0ffh call 50h pop af inc l jr nz,loop ld e,a ld c,19 call 50h and 0fh push af call cvhlk pop af push hl ex de,hl call cvhlk ld a,(drive) add a,40h call cout call print ': ',0 ld a,3 call phldc## call print db ' ',0 ex de,hl pop hl or a sbc hl,de ld a,3 call phldc## call crlf jr loop ; done: call print cr,lf,lf,0 rst 0 ; cvhlk: dec a dec a ..ca: dec a ret z add hl,hl jr ..ca ; drive: db 0 ds 80 stack equ $ end esult ld de,(detmp) push iy ;get IY into BC pop bc etmp) push iy ;get IY into BC pop bc push h;FREESP - return free space on current disk ; ; updated: 09/18/84 (fixed bug that kept it from working with ; anything but 2k allocation block size) ; ; entry: none ; return: hl= k free ; cr equ 0dh lf equ 0ah ; galv equ 27 gdpb equ 31 ; extrn bdos,print,phldc public freesp ; freesp: mvi c,25 call bdos mvi c,19 mov e,a call 50h ani 0fh xchg done: dcr a dcr a ;1=1k, 2=2k, 3=4k, 4=8k, 5=16k dlp: dcr a jz dxit dad h jmp dlp ; dxit: call print db cr,lf db 'Free upload space :',0 call phldc call print db 'k',cr,lf,0 ret end G^#V# 8 |Ƚ{0g͈*;help ; cr equ 0dh lf equ 0ah ; .request syslib extrn fi0$open,f0$get extrn cin,cout,condin,print,crlf ; start: lxi sp,stack lxi d,fcb call fi0$open jnz error lxi h,row mvi m,23 loop: call f0$get jnz done cpi 1ah jz done call cout cpi lf cz nextln call condin cnz check jmp loop ; nextln: dcr m rnz mvi m,23 call print cr 'Hit any key to continue',0 call cin call crlf ; check: cpi 'S'-40h jz ctls cpi 'C'-40h rnz done: call crlf rst 0 ; ctls: call cin jmp check ; error: call print cr,lf,lf 'yell for help on CBBS - missing help files!',cr,lf,lf,0 rst 0 ; row: db 23 fcb: db 0,'HELP HLP',0,0,0,0 ds 80 stack equ $ end \#̀\X:͓X:Y:͓XỲ\> #WGSͫX üX:X:; INLINE PRINT ROUTINE ; MODULE "ILPRT" ; LOC Code# ; ILPRT:: PUSH BX MOV BP,SP MOV BX,2[BP] PUSH BP CALL __L0A POP BP MOV 2[BP],BX POP BX RET ; __L0A: PUSHF PUSH AX __L0C: CS MOV AL,[BX] INC BX TEST AL,AL JZ __L19 CALL __L49 JMPS __L0C ; __L19: POP AX POPF RET ; __L49: PUSH AX PUSH BX PUSH CX PUSH DX AND AL,=0X7F MOV DL,AL MOV CL,=2 INT 224 POP DX POP CX POP BX POP AX RET cb80 login[n] lk80 login,fnhalt set login.com;g delete login.rel login.sym ; :\ if ucn>1 then print "s." else print "vkLOGOFF.BASQ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPJmiL&mI%^_xy>Xɻ(XQExA;![ 5ƚ**#h'Z(AC<֚Xh$E!qwXQEeigNHB#)*XS;k C=*Co5U]#yyߺ.OS9]^=U.fk騢i罧*y|,K9.cYQݸbH'US!qWŚЫcA5#ʪI\Ky&XU턔BPj1lǐ/77'kchM% h'xkck*qg5UTȴ3h'xkc4bM%&p彺q+y*ETyHٚkޗ/ϯrXRO ?4^3 .&(5n7+TkyI^K͐ O& O< m3dK5!^ )XP>?*UAYyΫԶ wOք0$ɓ5((we^o}yW [⟬ Wǂ:/Ʊpss:eɚzu,X04ޣpu& OU4&R.9@$^ c95\5ZЫc^5WǂDLk\ T" As&XPwm$2s&XPʧ"UoM:RkBTQV*p PVW?@ABCDoEFGHIJKLMNOPQRSTUVWXYZ[\]^_`C=N.v %Fg8e87ffKk2Y1Ϛ: U35~;ٗ/SDZ'{ܠw8eOX.-Һ`섟{5ts~Poo0kì,uS'Gӳd7Aənt;ٗ/SDZ''ǬҌhl21nJ%oo('t Sst=Mg6Olzx4a%ooưK|ޜ uheZ( x}7 ]8^HcZ6$FWJ;̛cfJ+fq6}X,J7heZMwj:l:&3!J[̳uX}+%gk|/_q63s]"qWk9RU`;$ NܐM.df皚IIRg`kBənt_q??Xzܠl6}&cRr1ξ|KOo%lo4条FjtwTǦw Ϛqdouf-,f*.KuQRZXL$k4f-6ZdŦ3VcZ7)BtsU5H3VcZ<(dVj_1V6$|bPRⲄBtUAїXd̗(TGLe 誂k]'`1_v̔ouѓJheZsϤcF_bZ(duQRZ@]iFjk!!Y Ԇzq6}X,J*ckf jCd2ΦBI%{lj;ĸ8LaX7(`(PR/uwyVyKsZ0vՂx̔9#uO+wX3>,;%)y:ΦBI%%ɛoK}=UڛK x??l[%%nޙJ[GI7 51Vc5&4@?( Ce)1#m5֬~PoVcZgKY pǬ,Ҡ7O%#uH[5k7AIz!dMX$AIo\duNf-oo5Q}R!苤$L*h9NvgwII%OY5kz4IIx$x>g7QIkQfCLJȋt2#mˌtLJ^kSz$FIzs*tn:&%tZI7BER; Vj"ҚҶTt1* FICi͔Qr$Qn7C{l9ݵ1) ߷SIIx$׍kxzs^7kyRyy%%; WL** I3ecRÀIUͩl;⩍?0ޜLE</WQIwx.7U/4f+jm95ULJ@WTLǤ$p!!*m'6ݼ3Ǹ֛&cjyLJ@WTLcRސ TL¶g[t[t2#$U&wޜ6SmˌtLJwUTn3 ɘnnn^fcRtZI$.4ݼHzsdLM7IIj"֕1) _Y v $0qILl*[ޜMl =>C?( yf\`?l*[ޜZPL01g &~+nm9-.˘>~8~P̸@U$֓ζ+nm9m2CAI`3UX-m֛S'*&z:[C?( yf\`rwbUOax]L08YNAI`3UXOmWek?՛ӆ`qAI`3UXO{ۮ~7 SbrwJs*zܽvUS9m*}y =N~P̸@U$֓mWek?՛ӆbr<3.PU0dͶiTobrq?( yf\`rͶiTw1dvJT g1) ZIx$M0h2% & =41fh%e'JLBS- '%m&7I7J7IIȷ|Wo.)wqq4&&ڏGǛ1.29,2No3gd?7<3t֦NI(;%ፒ]ML"!-K,2No0fO[9&%NI7J@9>) 0жo1) /z]ML"!-"cD</1) PvJQrIIIV췘x[h W}>.u$II`!ULJ^kSz$w\L"`l&&♸lyڗE>&%5^n}1&Ǥk%AILe0E剱.:|A^3fڐAI&Q?j:c1_vH[mP{b%( $L7EMo.)$JW?鸘'1) Oz7|I$QI)cDy1) fOJx$BZo췘>.u$7EM1)yM青abyUol9-.x$t51ۋ?k>&%@hIJV @U$lg+Io?ۻۘjbIؓJkjYhbRCkjYho\4.cRDh_-]\f<W_:>&%a=`Wfuk%Aki6ƝF_֬E*m]Ɉ_S|?t'܍gS%DY 07_/>|#>O}0~P2fzU:?y:Lp1N AIo\`q_o&#@?(FIf-29) :$L@d~;9'_o3E|Y绤w0Xy\* 6@*N绤6wJ* y' h2hz6>( \o &a۫dqqWW5YcRD`>&%! `ʨf<\ӝ #m5ҘwBژ0\լSF5G%Zh2c%)S;xޜNg胒$.Mkb׺a$FI.7UhH j+>NoƧ,&%D`sLJx$Bڢrm7gdw+&%`h\Ǥ$@.1) \`aFU-:M똔;!tNx;*DLJ˭ot;!tN1)yM青hz6>( L"/B1_߿|[׺a$WeIkmJK]CLJ* y`v:.7?cRސ TLb[kJ0<~Pސ TLb4mW*ohgObǧߎ.7UX?v/[^7C_&JrIxj_VZPL01\`맏le =>}p $p!!*z2vŭmy '1\`믳mWڢrAIBxC.PU0d;lILC.7UXOmW'/ekObz,w~Pސ TLb=Ym:y)[{d?% @U$֓Ŷ'1 =N~Pސ TLb=Y>vuR$&r.7UXOl:y)[{d.7UXOo]= `q};%RIp骰q1{%t\i7"Mfq6}X,mLJY)t\iO,骰<3. .ٸ8UOMڔ) 3I WޜVٹRU0T\'*@U$t\Lo~Ƥ$p!!*mGl\lm9sŤ$̄'-t\iORU0&?K% -t\i7֦NIțupeLJ+]q6}X,1&%aq6N.>ٯϳxqgeij_#>y:ΰ|W5k\iMVi[zsZe禋IIja0͞ǘ|6wJuQRZں2*$GZ@_'%!peR:Q  &abz3&% @U$֏KۮT1AIBxC.PU0o]qki͔QLCOC?( \o &~2j_n\3 `AIBxC.PU0O]B `c% @U$O?vŭ7eJrI'mWzsdLM7 `q2C?( \o &:[vŭ7NtULC_gc% @U$֓Ķax]L08YNAIBxC.PU0dvuRޜ6LCnJrI'ݽmW'/ekiT`q\`rbKzs0U<.&z,w/$p!!*z}lm9m*.&z,wAIBxC.PU0dͶaxw1d.7UXOo]7 SCq?( 3I Wzs*tn:TL"&%_+9J6ݼf-B';Mpq43a:.7?R<҆*;i뽥`v:Q  &Np\`l+n-qIIBxC.PU0uN{T1) C7L(tżљ@j|55v7] AIUNQI׉J&%)Sc\xzs*tn$p!!*m՘ y4Zlm~3IIjbIؗ&GӳQIWB09}1lv1Jx+cx88]̢;-Dh1a.tF'GӳdƤ$NTB灪I鸘IIoJ}ͩlmxuq6E%̸PoNMe[LViۘ1) a$QI]p&7II1Y'IIx$p!!*mWlWlWww[LViۘҶeF.ט΃+[ &7ʘ֦NJ SZ08h2gf2#ƿ|$xC+m甔| :;ӛJ+]dMEiƛ9NYi0D%A:'VcR̸ tn8̎qUS\`]fjCǸ*[[e9Ť$t51@U$>&%A:szo>&%; }:_G:_/QI.7Uq7+FV|:_:BݰV @U$lbD\qkέ>&%; }:_O>''eTI &a1) <}BxQIx$Y)t\izo>&%ސ TL¶+F]ݬWZV|oV _cRI &a1) ] ~Ǩ$xLhmJw(_J< Fc9Wڽ-Ǥ$hCZT<+mmٞ͞ǘx$@.?$; LOGOP - log in the sysop ; this should be a coldstart file for the slave the sysop ; uses as his local console IF it is to be autologged. ; ; LOC Code# ; ; put info away (store login time in DRI format and acl) ; entered with HL=access level ; LOGOP: MOV SP,&STACK MOV DX,&0X80 ;SET DMA ADDRESS TO 80H MOV CL,=26 INT 224 MOV DX,&0X82 MOV CL,=105 ;GET CURRENT TIME INT 224 MOV 0X86,AL MOV AL,=9 ;SYSOP GETS ACL=9 MOV 0X80,AL MOV AL,=0X77 ;FLAG BYTE MOV 0X81,AL MOV CX,=16 ;SIZE OF NAME FIELD MOV DX,=0X90 ;DEST MOV BX,&SNAME ;ORIG CLD ;MOVE MOV SI,BX MOV DI,DX PUSH ES PUSH DS POP ES REP MOVS BYTE POP ES MOV BX,SI MOV DX,DI XOR AL,AL MOV 0X100-65,AL ;RESET TWIX FLAG MOV CX,=41 ;EXECUTE SAVE PARAMETER CALL MOV BH,=0X90 INT 223 MOV CL,=0 INT 224 ; RES 80 STACK == . ; LOC Data# SNAME: BYTE "SYSOP",0,0,0,0,0,0,0,0,0,0,0 END t:<t3V..DV^@t+Ƌ* _t¿ ȫ ȫþ; LOGOP - log in the sysop ; this should be a coldstart file for the slave the sysop ; uses as his local console IF it is to be autologged. ; .z80 ; tdos equ 50h ; cseg ; ; put info away (store login time in DRI format and acl) ; entered with HL=access level ; logop: ld sp,stack ld de,80h ;set DMA address to 80H ld c,26 call 5 ld de,82h ld c,105 ;get current time call 5 ld (86h),a ld a,9 ;sysop gets ACL=9 ld (80h),a ld a,77h ;flag byte ld (81h),a ld bc,16 ;size of name field ld de,90h ;dest ld hl,sname ;orig ldir ;move xor a ld (100h-65),a ;reset twix flag ld bc,41 ;execute save parameter call ld h,90h call tdos rst 0 ; sname: 'SYSOP',0,0,0,0,0,0,0,0,0,0,0 ds 80 stack equ $ end =; MAFDC - CONVERT BYTE IN AL TO ASCII DECIMAL AND ; STORE IT AT [DX]. SUPPRESS LEADING ZEROES. ; MODULE "MAFDC" ; LOC Code# ; MAFDC:: PUSH AX PUSH CX PUSH BX XCHG DX,BX MOV DH,=1 MOV CH,=0X64 CALL A011A MOV CH,=10 CALL A011A ADD AL,='0' CALL A0138 XCHG DX,BX POP BX POP CX POP AX SAHF RET ; A011A: MOV CL,=0 A011C: SUB AL,CH JNC __X JMP A0124 __X: INC CL JMP A011C ; A0124: ADD AL,CH MOV DL,AL MOV AL,CL OR AL,AL JZ __X JMP A012E __X: OR AL,DH MOV AL,DL JZ A012E RET A012E: MOV DH,=0 MOV AL,CL ADD AL,='0' CALL A0138 MOV AL,DL RET ; A0138: MOV [BX],AL INC BX RET END m80 =mlog link mlog,timedif delete mlog.sym mlog.rel copy mlog.com 31a:warmstrt.aut;ne ll revon ;reverse video on ld vX3MLOG.MACT  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSo}xˋo`p7wCSs!YCۈ4]ؘ/œ17k )+kr~V3I_^ s]a|5nW>W/ ! 'M]ZHiJh+Iicßp5Wu>A_63I }) :@i ]V՘z&?} ~Υ&& }C|}[&׮C_L\4r>kkJ)L rAS0m>kk ӐO}C~' ) .ޭIðNZ3Ae`z媃 anbꙠ.+r}p`\1uŅ}p`̭y&KYOͨ RA'/͠L t Rou R =晠.$-SτqvZ\kTɣۙ.ne^\~?fs ŋL=zߘA3 .'A  |`|FiQZ&؄_U oDL 緿z/w ?}||% b\\}i b0sݮ9|Iuu2gs2g$=5蓞4 Ni1v5&,qp > i[Oz4h8uMhږ >(  up5a75) bbe = S|1HLY]g7A D'Og&# ] b,ϙGԶpLF$d&.3Ġ13g |3g7; FL=Ӡ7qf„qf2A >z1XLY]gM>lL,Uic&!Ǚ M0P. c3b&$uL=o|oY)&eh|ve17ٙzm𦝙G,_us~f1\Ҹ bvw!ϙGanw]չ]\[2A YE&,qp b0*лèU|kh;Q&,wN 8 ;ܬaZEue`"p b| \4 b]AS bX)RwҐ\ք18\Hs1x1F0gv- ipL=M6؄_3F >`L]qL >Ei`&C apnkɓhpM"54}FiceuL8una)u1 ue,V&,׮3!UpL(qqLC\ y΄&!3p1xLY]gr|&yps& 20 p6͈Y06#L1L6A`gaLw;Đ1<hq鰅Y۠ L~^no3snC3|h ma> ]0er&,3A 9.1<3}3a1810z)OMr|`|2&7|JBiՂkB7|7ѧ(mLHzAd`Ϲ0A >zÄ׮3L}Hz4h8uMh SϔԔ b0&Ni3!IӠԙ6i[)i b0ԴLδ cqķL=S?3 _}1XL %HsEڵx&aX 0A 9Lh DŽrg&W1A +ĠL8pZS3jaBRr ֔Ņ&CS)5i`r >OpL(bL#yf12X >7c"M0pal ?bL8&\Fw1X~X>]י DŽc1&L8&c+LY+L8& Sc mW42LA/]z5g<}ML=SZHipy~ߕSbm;Řz&' 6[j S^M﵆)0՘`uaʫ1&Զk2LԔ 6M\O S:5p&.ק&ql՛dLl՛맅6؄$1I\ɯl wԺպq>Eicer.dML=Ӭ"|^n 6auu5_~~aRɣ7؄֭֭֏K)J+SFɇv*3yjl݅.ipuMXjjjDQXz{OlB˯x]Xrpu4iMqoۅ 6 6Ce\7З+z&h1?!Ǚ M0P.1 6auu5_~~aRɣ7؄֭֭֏K)J+SFɇv*3yjl݅.ipuMXjjjDQXz{OlB˯x]Xrpu4iMqoۅ 6 6Ce\7З+z&h1?!Ǚ M0P.1;&be4^י ]gUD]W:3vg]}jF-LHI5P' ; sample OSSLAVE.GEN file for SENECA RTDS on ICM's CPS-B6A ; STDSLAVE ; Standard Networking Slave timedsp ; time display package (TIMEPR,TIMEDF4,EVAL10) ;timecl bnkmgr bnkreq remusr PATCH ; Patch area module netfwd NETSVC ; Network service module if DE-Spooling on slave ;DSPOOL ; If DE-Spooling with Slave printers CPMSUP ; CP/M Function Support Module MPMSUP NITCPS ; Hardware initialization dualio ; dual i/o console driver rtccps spicps ; Serial/parallel drivers (interrupt driven) RESCPS ; Reset detection module SCDCPS ; CPS Slave circuit driver BNKCPS  the correct baud rate is set, the files BULLETIvo)OSSLAVE.PARV  !"#$%&'()*+,-./0123456789:o;<=>?@ABCDEFGHIJKLMNOPQRSTU O"yNʇ:.;d6"d׮D->jqy)9So;XBa~#ƽ&hq`وHMH""2`2|,7l9kWCi EbL LqenK s=bʙ, %~J` Ϭl:.;d6"X_ GL"8Sn>=bЛeːkkp7%կ5--drC!\(̭MY,): DGkXx Œat}:qPOwXR<,VZLafk@h?%ngV}w2~~gG , FmGRhMsƳC'Z(Q$,Ieb"ӣ5~|L-Vt͙U{*5馫'&dRbn__S0oDH9&blm GA4_FASQȚ#DIHG ihX/gHa@4g4sDg37vkPnV g37ߗmtT~J@IeD d 0bI9SMeA? S) ؄$5n,& cY 4ZFC^lB d7rK0 g&~*2$S$>xA IkЎwnn9ӣ$b,B!Fˈ y MH2Xvsv˙lh_mKZmͶMSmͶPL@$SA?jAp8 n>R (8>2>D64IDªibb|pdxWv3ĠM(Z@BF҇"ơ>HX5MLO"n9S)L7 Z ! ' a3<>ra üS™7!B/ܤJ\[s%عY(dz||DL$3řrVv&Su*SQ 2E\[s͐F2=">)(j)cAXFyHhgn/1.{\8{U1ΣҊPQ3پ7bЦ@yYL+Цm*Цm*m*Pl_]ybPTa_]y?@oK?/Ә|1>3Y·|1k3-LZ&0iB?0-qc̴ 'Q/ĴgZ&.ig&D]aT&hw_v,vp m{b-ZvpL4#E|׽ĄxǶ0-eF{ m{f-Z8L<#E|׽ m{e-ZL3L:#E|׽n&ܢŐcڶ?̈bhu.&8L `7DLКM(qC)i C).T̩cZx;v2a1L9`*d;b`'s&X0!„+LSDŽ+J?'aB{c __wu0eB໺2Lj! V-aϴ0-!. nřpqCZ %!OP fNo7N@%a`^\КP+rקf>~>LcBPDŽ1!Eܽ|z ;n6V&D]&i:#ibB/&琎&5RZ?g QWLqИub~a`BSqk?4&XHd;2!„+L?'aBcB{3eB໺2Lp%8ɪ>Ci*L <#ʄyi 6x ufV`'s@ d;0&D]aj;&D]Qj_:&8L (]_*]o*Zb3-Ľ+Ƅ:& QW1!ܽ3!tם uLӶ)Znwlۅ uLŶ5&D]QZݙ3-Lvu[k> QW_raϴ0-!iXB8ċ Nw5#”bqb )Z_r Շ0qƐȄ%bP4Tτ-!O/ `NLݱm v2rDŽ+/ uL&D]s2Ƅ+ֿ uLӶ)Z&6gPDŽ1HИpضcڶ4# n"RGm^+´m̰j;` Eè N<´!:MbL0'˴0 ٺuLȧ0'iaZ¨^B:$bZF~3]9PDŽ|z o{g펢z&Iȧw&8L SQ:& v2J;cB/L@1! KwZ V-J'iaBӄia2 v!i26#^ ,abdaB> & O/x~aߘjig ~|&o~gʃ`gZ`7DBn~1-LuLӐ<#^3MM|z4yF>`~~g&f vuF>`g|zL2dLeLiiT/:s>`g<ÉW&XpM"54}FiceuL8una)u1 ue,V&,׮3!UpL(qqLvRTDS.DOC[  !"#$%&'()*+,-./012345678o9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ+=zt|OSxgXR`#^Mw->5X9_0 A {x:.c Ԓ@5!ekS [7=9?=eA=ώ?\F0U6~Je B!)eo{b:+X.%򙬲\:F*.ŚP-XНg<4:BZ,J,Z譴!^9Ă=$=Rwk7Z& Y3 kɣ'[U#,/Ȫxn)p0Z?dYB+\GR*l-?0j7# T`SS3 tT!C&LeTgFTR`A^$RIgea+4v3K2hax_**JXxRn)pV]s.pEilj4cMa+ZXR-L*(YCi:+S Ȥf A =Yb!-*,ʮeu蠳2`<ĢK)ܑ㛥ZL{,JS ցdኂTq4w3qDb9: fTgFz<7)8VB#!lCZԒ@<ƣRQf]`(iFfxa ._*SV˗/uzbӧۮ;8o߼ھ9fu)؝6춛-} 5xH . ͋==;mԵy-W8[Jq*ij3J&QdkRȤfx,JSXdLqP)Y. ΒQ;.JRpIpvj7);4f$oظ xVFCiѺ gXъO/ a┍ƏPT֒g %ϒ<6KE&)S$b-2cQ(\ZHq}u>cӽ|ys؝}xTJΒïO,!탛)%y8 ]!(m 6S^RQ1e8Qg+FymZ`l&7njvMP k3g%&Zr)(H,(Ȳ3Β'О p J:`SS$l;&’w5e.wݰIqJ%W`^22LY*#S6cx¢@)Xb9X%R-L(\dS;NfR^T`,3vih]G-ٴ2Z0\bZVIqJ8U#~©RQTpX`+p~Pٵ]S!u_1YɪOͯ8Q$ۤ᰼fݤ8mѽ/P g(  + RE#6)NX0#45%[65BJSC{* 9@#)ĂAd)8}lz~ͫvիK1իrhvLqZU.jUCi* VpI%SE鼧du])iwj +Ohbs\;U<<8/Wl,ss4Fab .Y(68~lW . Ceײ:tȎ;Rl+R%6m 6Gbo?lCnRW.Qj{+ WT^r#8/؈WXXXxVr|xsyÛëI1ŷm7)N[/؈Ga<·7WX͠z 65bӯmwfu)8VB#ZH,x&)kB!uoe, \??HVx|l0\%as+.χ7Rd4ѺV_+Zp>Hִ w5;ՅؼGƏ(M Ӣv5e0Ģw FQUMTPTVbQI̩V#6k2a%Y* Yx XdqvYj}3LTH g gqTg+FymZ`zS<^ uۥ8 %!(mh]`IZ5l#YӚ±Ӣp!Mq*&U7b ?xlRY745X0 (9Oqr-Eij>o ** r#Y+@gԤFR8.EiK,A<Ԥn{yKqzdњ@L[SLUܼ}\]+%B|k:6[lCp! p>()I)P;jbڤj;lr>uYibӲk]P*%ڃ.xv?gkH*eHph igg&mRLl|ӳ%YQpI_kp K\YOqdi4dqzޤ|.M?Oawj]ŷbkFS~4x{9: \Oxcyv .Snpb]}\OX]̀zX:l7Sepx5`sfݤpٝ^,E- V,*%, %vO,,Xd YJq 2a< * ]aaa<=7~D!u|Ld&X+ewڜ "KI1i( Ee-y@N b9:d(\d,2x ]Х8- R1 k3g%&`[ Kl+'WRhINJw)N U@ɫas$&’5S8pIxs>\g8fkSEi*8PH];^,T?h{Jq vi.nR>6fXR`vhM ;::Pӯ8w\, >h6ZH5^RQ1 b4~ɂ2"GW=%Y 5Ghg^rXuኂTQ )Ni[ٚ#)|P:E[J /o)N  n-1TRYj, O5?b9}$pZ"Sk<)5GRl,aV5Gj0℻'/~9:hpGR8K|Q:?Rn0 ZI%vdh6 NaX! -Ϩ]%A$ J0~Ī}℻ݶNwӪ jگvq꾮~}]-SêCwwӪ >?{{zxvo7M℻r=;YUnSn$ek 6!-*%J W dJYrqp)N6q@(Qgg0i[STVBl\J5 3&Ġ#kB|[)egpI]ڍ`I5k{Б?@ABCDEFGHIJKLMNOPQRSTUVj:xw777@u.JB',"$qJZr%/ņ0'E,q yDapclEKn sBh# 3gţX"Sb #):$\xF:dM!UAG Da=jpkRpE{%H7԰[˚F,- kYăD/kBgԕ,q#[ nM N@(sO8\3lZ@ЈDa MC%}Zl%26 N4C' GcmP`NE.Y[ ց!2'ΔK.j8z޶.N3e ЈpyXS$:};$:};&EE`'B'N%a=OVd}>'d5|\-%Le$ [8'B'.BganƨNBbSW'bP[X2IBEuN)S-$V4Y\TdJ''5Y+1O=N@1) X'-wz lU7IO%?x8N^3e$Iq?,_vqy;>N|<쎷 zi=E5w}4N1U7w [k}E5aN@k J؟ iy$MVMiNIyC lmDp#z̬a3kCJܚ0'؟&D8z޶.N>%\'F<˚Tjx/ϓqe7yo'_Ovǒ%VT⏱P 8'b^a@7l1Ŋ'H %<%'5ϒK.7mD4@5,*$( 6 )fbl*Mm ZՇx':'_=- p.yMAE6&A&*<;O:108rƟW9yD%tQ,0ex߾BL)({Dc 26lCP6 Ӛ$06yE禉!^ [ 6(1{p"(}*d6LC hF;[$pLN($,=mձ[Sɽ󤧒/es7xb$ׁ>S21$V̽m\{VfcɗP͜m o_a0X[ SbZ,m7 NԕpX j(fRFT*z s\Ixr5|mp h(Z $EHhh"J}8,qx5wH|ǘzkcK.p$SRa\ K~LED N1HD xJ/55a0\T&% mIs&IRMbovk:\=v~o_JpݧܚBw8p*H );w㿰3et>|O/,MC&8;o?,,3Cɟ^ڴ!Pd䒟EcQ]ΕuO=CoF]G0oW,SqQ=83AcƒK.zYp0J.y`:-Ip;SxjIЙA;v}&ZrcM8%}7m@4I䒗Oa\Kc#['Bo)8",'=\|oҐbt>\+I!ރ>3J`݆Qn U %xZ˰[S`шak :B- H^4A4t&.Nz9\|X8ܗ|t@!4 [(y\K^ O`-H`C$N Jă s%̐s%8y-$N Sb4u+>Xys RK nMu &%|=,/h{8}e#bcacA:S:*FZN? ;`{K.z?|sMTh ޶xN) ަ%\ h{ ^:%`8aن._ M jE騖̆˛7rKO/?) ;LqP?k?@A}}}NE9.7j)98ç1!( 9tarF뵩O_p?#Rl$Xब+8/ʑ֚SNG[NO0u_!ECRLpe`rC@g>KK*&5'3a6G aC$kޫ ^arag M_ J5kp|L`tErġęϬ9Zs)Jߘ\5ǻP0E/`8_o>}=}N`KV9p; u5@y*Б5iu?@ABCDEFGHIJKLMNOPQR׮oMUb7n;W)ػq5LuX3jffˮ+21]3]V]BӕT]%ӅdFFIKj..k]`f+U3負o <š )2a{0AAš)U]ߚtYO2AGߚgW阰"R`BIKPk&h[SLgB_yz&l%4Ɔ ƫJ&Nt!`B`م<ՕӉ.DR3+LLKaGLPk&8Kf. {&0ai0!^2 9Pk& Y& A#&z̈́P3]3n<LrUabn&&4~]aB Mlе5S}kf0^MWRӉ.`=>ݏ'psO߭Ntp<]87]jx_nt `*&`-gE?. j&˂ դm Lq5LnMRj/L^bRd6 CLCJ 9`r taXL(i5r%3!%L0a6]b=WEӕT1'ﺮM[SY˂ _o|@`fq3ak0 )2xUPk&lsaiRxU4]IL']0WWWnty9?x:p]]]Y1Bt!54xz&8ˆg. RI[Fj<Lrhϐǂ 7Lw38KfBIK`*LULC`6] 9h%3%Lc,W 9Pk&`U3a ͮ_bB Xg`*LULhb)f0^_Ä<xZ& wX,W t0L^ 1LĄ%`* ausVj&lsF隩qUa:]0a4WLLMxU4]IL']0RvoMUbrUtp%Uѽ]R3!^VL0^Ӥ%Lg5rd̈́GLc$7L7fGxLg6]bJbB XgJZb̈́`:LLئK C&lsTu}kT aդm _+?i?V5S'mg6ooϜRG&؋ÿ߭r{|}9{<[=蜳R7&t|sVja}8ӳZ>0^Ώ[gU{^J-;&ؗtR=ai朳R0R v~==[e v6??8gw5S5i/;dr„;̜eB07LhS`WwH|ǘzkcK.p$SRa\ K~LED N1HD xJ/55a0\T&% mIs&IRMbovd(SYSTAT.MACQ  !"#$%&'()*+,-./0123456789:;<=>?o@ABCDEFGHIJKLMNOPU ]]/(l?_\kGAx=_W?>~^W,e5~70eKG^7{>jWoW«uYCcm`*q/o^ «)LEPMc -],c鳝_<;m«ݛD1ꟕlAx{s(4 h voƲ߃j溦 9g5*9vo]p],}X``?$ڽ-e45M.Wᗷ'Mm|1R«kn:LӀpap~DM8j?"t6-Za@zZ;ᦃn;!t Y+97vt'ucpAk7 O;mn:hp&"t G.= t yZ;+!t ݴb17%%khH. #MsuMU* bˮeU*ce)X9«}7b0HXhcry"TGa§y+ 0Hq)yUx1Yx Аv Rt y"TGa ӇS BIk7 Ow r,{DN0HP:vpDx B鹺TА\ר Eu0n\P0HK# R,Be &]s?:aFanJ $ DC!ѐ&a8OtD0/?_\NvmrM!MpZNanJЊf|yse;Ͽ54 y"h%a8O)9 C+Zrx˻m h6&ѐ&a8O$ 07%GahE _Za5h4}&VuM,him~mI4$ Њb0/0}xyk7ỷ{VZ>`07ЊʾV?|Om\hV_VZW\hH0 c'a"$/0Hq1qq=6w% >[axUAc>S Ii" R, R,yDڏ( zm*ga§InƫW0gT B~XhAА߃0'  JXhwը RhHnWp_,* R,丟> ѨVAṺ&  ?a}Qde 4X Pza8OXv-0HyG'axUN0HqxGtJ^躱9 8O BI;a\7.>, R R;(a!ǐ7wАDNy8 ë§)m)yabT y"clq=P«pxWRt|$ 7|&a _lpZ0܌¸q&a¥$ Qu|4! RtJ])|j߶p0g*ŢHӱInFk0fYMN84FQB¸nŢ«pu7թ X$DN 4C-SOhB^S?lq4^M4^M<.fa ?]|VL" ک) Qa4! «!Z7]`*soF/?OՎn 2Z-.b,6F.|$ k 0HP\ÍVy)|:: y"(a!auVYMZ鼁5)JZ0h%R^X(iq@+, kUjVXpA+^VkW1lЊW6?«WRF+%%F%f1 }cc& <}5:FKBw?Мh_[c4c< ?W7nЊvNiX`}c,{ؠ4mӴMmЊZw.Qx$h֦ٵ,q&\`: I iIє ʊK1 8SQQeDDcI@ՈZ! xWm<M*,c2@@S4O ͧ. $T@(6+'0< VC#`zQc|0@1 iihJq c4ihIQ Ci Qj i$ȩʉ)P i8;TIMEDIF.A v1.00 ; ESKAY 02-12-85 ; MODULE "TIMEDIF" ; ; Purpose: ; Evaluate two ASCII character strings in HH:MM:SS format and ; return their difference. ; ; Entry point: TIMDIF ; Externals: STTIME ; ENTIME ; ELAPTM ; ; Input parameters: ; STTIME holds a time string of HH:MM:SS format. STTIME must point ; to the tens hours digit. The time string must be in 24 hour format. ; The time stored there should be the beginning time of an event. ; ; ENTIME holds a string with the same format. The time stored there ; should be the end of an event. ; ; On return, ELAPTM will be filled with the elapsed time in ; hours and minutes and the accumulator will be cleared with the ; ZERO flag SET. If either entry parameter contained an illegal ; quantity, the CARRY flag will be SET and ELAPTM will be undefined. ; NOTE: TIMDIF will not place delimiters into ELAPTM! ; ; Only the first 8 characters of the strings are processed and checked ; for proper range. Be sure to zero the seconds field if not needed! ; ; NOTE: ; If ENTIME is smaller than STTIME, then 24 hours are added to ENTIME. ; ; This routine is intended for application where the event time will ; never be greater than 23:59:59 (RCPM and BBS use mainly). ; LOC Code# ; ; Entry point. All registers meet their doom... ; TIMDIF:: MOV BX,&STTIME# ;POINT TO START TIME CALL CHFORM ;CHECK PROPER FORMAT JNC __X ;RETURN IF ERROR RET ; __X: MOV BX,&ENTIME# ;POINT TO END TIME CALL CHFORM ;CHECK THAT TOO JNC __Y RET ; ; The stage is set - let's get down to business... ; __Y: MOV BX,&STTIME#+6 ;POINT TO SECONDS START CALL GETBIN ;GET BINARY MOV DH,AL ;SAVE IT MOV BX,&ENTIME#+6 ;SECONDS END CALL GETBIN ;GET BINARY MOV DL,=0 ;RESET OUR PRIVATE BORROW FLAG SUB AL,DH ;SUBTRACT JC __Z ;SKIP IF NO BORROW JMP SKBS ; __Z: DEC DL ;SET OUR BORROW FLAG ADD AL,=60 ;MAKE MOD 60 SKBS: MOV BX,&ELAPTM#+7 ;STORE AS RESULT CALL STORA ; ; Do the same stuff for minutes ; MOV BX,&STTIME#+3 ;MINUTES START CALL GETBIN ;GET BINARY MOV DH,AL ;SAVE BINARY MOV BX,&ENTIME#+3 ;MINUTES END CALL GETBIN ;GET BINARY INC DL ;IF NOT BORROW... JZ __X ;THEN SKIP... JMP SKBM1 ; __X: INC DH ;...ELSE ADD BORROWED VALUE SKBM1: MOV DL,=0 ;MAKE SURE BORROW FLAG RESET SUB AL,DH ;SUBTRACT JC __X ;SKIP IF NO BORROW JMP SKBM2 ; __X: DEC DL ;SET BORROW ADD AL,=60 ;MAKE MOD 60 SKBM2: MOV BX,&ELAPTM#+4 ;STORE ELAPSED MINUTES CALL STORA ; ; Finally, here go the hours. ; MOV BX,&STTIME# ;HOURS START CALL GETBIN ;GET 'EM MOV DH,AL ;SAVE START HOURS MOV BX,&ENTIME# ;HOURS END CALL GETBIN ;GET BINARY INC DL ;IF NOT BORROW... JZ __X ;...THEN SKIP... JMP SKBH1 ; __X: INC DH ;...ELSE ADD BORROWED HOUR SKBH1: SUB AL,DH ;SUBTRACT JC __X ;JUMP IF NO BORROW JMP SKBH2 ; __X: ADD AL,=24 ;ELSE ADD 24 HOURS SKBH2: MOV BX,&ELAPTM#+1 ;SAVE AS HOURS CALL STORA XOR AL,AL ;MAKE SURE ERROR IS RESET RET ;END OF EXECUTION, BACK TO CALLER. ; ; Get the ASCII value at HL as a binary into A ; GETBIN: MOV AL,[BX] ;GET TENS AND AL,=0X0F ;STRIP ASCII OFFSET MOV CH,AL ;SAVE TENS XOR AL,AL ;SET ACCUMULATOR MOV CL,=10 ;SET UP CHEAP MULTIPLIER MUL: ADD AL,CL DEC CH JZ __X JMP MUL ; __X: MOV CH,AL ;SAVE TENS INC BX ;POINT TO UNITS MOV AL,[BX] ;GET UNITS AND AL,=0X0F ;SAME TREATMENT ADD AL,CH ;ADD THE TENS RET ; ; Check format of HH:MM:SS string. Checks all digits for presence ; and validity. ; CHFORM: MOV AL,[BX] ;GET 10S H CMP AL,='0' JNC __X RET ; __X: CMP AL,='3' CMC JNC __Y RET ; __Y: INC BX MOV AL,[BX] ;GET 1S H CALL CK10 ;CHECK DECIMAL JNC __Z RET ; __Z: INC BX ;GET COLON MOV AL,[BX] CMP AL,=':' STC JZ __A RET ; __A: INC BX ;POINT TO 10S M MOV AL,[BX] CALL CK6 ;CHECK HEX JNC __B RET ; __B: INC BX MOV AL,[BX] ;1S M CALL CK10 JNC __C RET ; __C: INC BX MOV AL,[BX] ;GET DELIMITER CMP AL,=':' STC JZ __D RET ; __D: INC BX MOV AL,[BX] ;GET 10S S CALL CK6 JNC __E RET ; __E: INC BX MOV AL,[BX] CK10: CMP AL,='0' JNC __X RET ; __X: CMP AL,='9'+1 CMC RET ; CK6: CMP AL,='0' JNC __X RET ; __X: CMP AL,='7' CMC RET ; ; Store accumulator as ASCII digits at HL and HL+1 ; STORA: MOV CH,=-1 TLP: INC CH SUB AL,=10 ;SUBTRACT 10 JC __X ;UNTIL BORROW JMP TLP ; __X: ADD AL,=10 ;MAKE MOD 10 OR AL,='0' ;MAKE ASCII MOV [BX],AL DEC BX MOV AL,='0' ADD AL,CH MOV [BX],AL RET ; END SQQ`eDDi@4Z!!!Pmk+d ZJX f۠ 3kX\C$ aSxiTPx!RPmҰmk+i6Ut(iV00`C$ td: @XU#?9I0l?c͵ :gmlXáF~f06á%0l?HkV { wd@2Jj"J4t))O*Ziu&GW@*ZAu$GZ2:*JtuG_2B2zlv!GlYv' obe0)*$T2*rJj,e" *&vTIMEPR.MACO  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN}_4ނsQcNJǐILbYwԙ؛޾}ɞ|ǜ,/?3uL>jwf5jnz s2Y®'1''瓞:{Bxgکw}:3uLw-Sٔz wvȍ]|Ms&.Ɯ:o,bpE-w,&&hLLŤt鿟ůLSgꛕ_7),%I\;3u4di0uoڵ}Z~:0ޙ[<Ż3SgSwygW־_/?[Lx  wmrI0%9Ol1)$dM01'I9&e]"t H,8"LY!, Ax۶1uF\7qmt\N{5Y4 Pu4Ja88_5~ L(A$mvLAƱ׫k&C'9x!OMτD4O tyyRL`&C'z8x1I}τD4O tyyRcLRoPrI z&o{&ép P3q % ͎ i|9L(3| }8]Kv;|xg91AB=MxfBp>J9q4Ťxusf8 R{82,;͓2!A t<L(ANL(AGw=  '/As LR  JA.Ia%x{ǘD\#a2AC˴m3ض T1I}oݼ}k1i 0Htz`B "OA 90aq4" e3Ń>۶1A\-oft۶%8z˓2a3 7qf꘶-ok`œgaqEG&0Hu ei3^R-+az5O 1 „ a89זP ]Jv k{8 LxKft%'iLӲ?@ABCDEFGHGmrqL Ӣaֶm8"C\TںsלgMnj]+i4Yquj-Uںs3-L5ޟ1If3<2-Lil)hzJL!+tŘ֮\ )zq߻X֕i+!(7L=&r;{W_(=}hEKѤgB"cWj23a?Er0Z4^k4RJ]+B]+*ʼn 5z0~vMhEض>ӹE,Ą~`BLT(|,[3j`)a:'&3ۘ L"2jqHW -"3ǫ Z"*]1&Lx^;&,>v%0F/?0az>^NkQcIm5zI sg&3ڕw <2An|fBW*1?0AF}4&Q-v1A\зjA7K)Ƅ3ġq8q]d8⭸-L?1A\ Gl߾Lg,& #$ 7&,adBL,  L} ܁~'$]Lz?0Yq[Z/pj2釉 .Bwg+wM!!{cBz8cBaLx(6&,>v%0F/`|:\)h44}jLeb  a89זP ]Jv k{8 LxKft%'iLӲ?@ABCDEFGHIJKLMNOPQRSճ߱-U zM7\n5tj@D VBY`Z5k:5`^S`%ZJEGk#V k :kI}h Sb8o/pt]^r9_qy{ͩO8o/rƚN y{7ۋlNΟ]yylNΟלy9XcM%f 5֤(ؚճ|'n ~_Yv^S5)#FmX>;-kRGl50:4`%5Q Z :kԀ*^ +ЬIXJ0P :kI|79o?,y;PnGkRC|_<{jlM*k*Wٗ}|lͩ^{kPTsk$#TXDO(/5)#oZ9c]I9X_֤$*tx]QKis^JR:Kc^JRzKҵlMJn@(ԡ4ʇF:wVQƠ usbMJn@Z>=uV]ܥ5]Z8b[8b'z-]} Ҍ(WzkRefЅTY8b[8b/5֤(%HqFzJ[3*㴳&9yF NZ{4G q$7SJaԬ'}fMU+VjUJ\B[Qzyz܀^xfQ'kRGlM>Sƭ~(=`g'tP뤥5)#NS k=a F͸C[8b = vG赈vGW9߼5o*/'֤>֡5X'}&Eq!#&Eq?ܼ|zoЯ 1:i5)#ǝ9٠s5B8xkRG ;h~hT5)#ǝA4*4=jB5)#ǝZժ?㍷&9}y|7G +$7`E=xf RSInxZF]meMrVaԬѯǹw&+^oVQk8 ;kRGlM"苈"Fӣ&QIn@^T"DqOyjU!#FIba?5V` `~hTpHaEٚ|(}*oW7ޚ45pޮ(/wzZFqg֤(ؚ(4*ƴ *`˫_o\ ;[s8Xc )Nc(ĦBUhqT8#= O@ NZ[ UA+c 7o?xQՃ׊?yU(Ej&5Ϭ_sx&Eq!#&EqouQPg:PX"h4!T}9[Ԅk ZpFlMr|VQF5U-7aԵ"4jjl+k.pY8b|<_eFy)=祄>/>)/y)]$Q\&jaIQ1v∭IQ1P뤥C4*o?@ABCDEFGHIJKLMNOPw_{hצKPkWWdΤN)\V%vß?2mL]-e6խu,)LwҤɦqbc{sI{ͺUWM7պ)_J\짫6ޖi*jŜl.&δٵy'IXŲͮ;Py$\0mvmމjɭik]!Eͺ&%ͮ- I6LZCvicz}f`z]mhӫIȴ1paЅIz[Fm&6m¤c S vб{NG:v}tfJ+mzuSEcO_::v}]t+Sn;yX: vб´1!5a%웤%곯y5L/cMxV s7JxVߋ2!5!UKτxL15bYC2mLSt54):g& `{ ѦbinCew" N.&)SvLfMC5iicjiАu <|`w" CǮ~8eQ,uD!F X$:v}bw"xV X$?E wU]d(F0aghL"9XQhȾLghLNs-)2AGgY,}ZRdhaOWo';}󃽻Ï,}ZRdhaWWv9~1صMZ&bڡ#Z;fD0ג"tD _Z&Uuqh0|w5uha}~m#|gLLoZ&;{f-tDZ&2AGW_[&o?6gh?-tD{?m5K&l*M! 8N.dSt4TiމW陊4y(% MIbc%II ^b0|!cSneBI0Aod>3Ad$&b!Ų_Uӝ/vX[kP"LЛt;_0A.SL'&"dDŽ<DqL1cqp3.%2A.-*\L1E);&yغ)Z%0qs\wva؇Z`e $^M1L~UI;tDkic )50ðC l5h :4EpLIIpp}h Ckc(% <ʄEffژw.'&ǖ 73;&4ࢆ2|D & Q1LI;M ߳CHAT36 AQMHD9DUALIO MQCJLOGIN BQSfGMAINT BQS5REMUSR MQCRTDS15 UQDvCHAT36.AM_  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNoOPQRSTUVWXYZ[\]^};wϚk6Gן D?=OD|/ŏ(l ᯋz}6n3.&Y%?حMpN~0%:ܦ-VgKAWڨD a#ltܦ$=Sza#<O('gP낒~oNib;EHۭS] ?I&mn<ՙ֯jKyJwE6T6 rr7dPCqBteìM5C:[)l^%UxU O;̘kҖꅪ_ii=ٽA[O=]x0r-lOy6†VyJ* ɦTz<%酢ُUg[N('gP&QPzEpz~,TJx,bZy᪈'Og~}VuJ+bp'Og|QIE .O- a#lRzJ5mUx(jP)+a#l~ͣlnNaTYad-%:ԯyp&soI»\ #~VbXC7DiJ%:ԯy6FP:]E? iKn,6T~? a{0fCO)M{ZyҖXN0g%G*lii=VUV=OiwUk1c74YO9m|m{aTY 0H?%7eO c n7s|L?¨ `~JnsC c nsO0G͗q/l!P+x 'ۓWڨD a*ڍW &!RJnU\7K&_^j-4iKz^M{aI.e\ `ƧST}PJ7q^[q ~RZa4ա?$Gи,-mzJ)t}:5j嗔=,%^sS*մIcE Esfa,F4ch2|f$]Q^6}Qhc64a<0ҴI' , Hi}U}%e}EE8 aPcѸ,}QµsWMi7ޫT6O^1V s5 cET_L4m}.)fC8 cE E7a,F4#~Vjڍ{R̆eq]ObXM0~FP+KZ杢jZM׋ sj"KJݤۖ6=hq߅tk<,yc50CxWkZZOK ZyaPWy,Y5j嗔=,Xep<̀*+7ޫT&Q^ m&%\;y1V *\0nKeq6 rǢqY g'\m){ E^%"O(ћRTU`eq6 rǢqY)+A?5ˆ.˪YTU`eqn aPcѸ,ΔqFĽvYVͿITU`eqh76†\ z5WTSу&Qd4JBP>SGJ†]UBaunQ.?۔T[и,-},zAR[J%lhUR-酢:tWi1hՒFTX4.0\#}2FHm\dӖE8Mvڝ0ܪ9\Uݤ[R쒖yV%A/'7 aPP>SOLgYS4nfqF2 +aLsL/pqV`v8i1hER[Җm4酢/-ڃ0v_O CJTU`v84cf~AE_kh\ga# *x,Y/Jd}O~r p] 6b$΍0V wag eӴ6.NӪ8e1F5p^E/=k>fkS%lڍ'T#. 5X4.k<LY_8?F5qY;EMuGY5Z kaUiįEʷRZ 6bFu"U/,zF2D7(`RM]*&4fCa MF/4Ԟ:kyz6c.',F{+l-C;2W qV 5 o}65N˱mqYn0u0r< atض:=Ǣ0ue!nO aB?K~s!?F]E[/֋㧯Q\v^. atxh/Ko˱m=Ǣe!:t~rYe1> 6/}){僶M5H[ A"s!j۸nк" ň0r l8υF5m\9Ooyz+ڋ6†2qI[ ^6Cͧ\#ʸ}jzP]^n[JV¨F" ň׀^ˆU7)MAkuk& r32lm# ɷ owEnR-s M67ZM[*IK[KG땰6†A[O|KCya#Ob.NpY(jnyO¨Fm\zܒ+'ZM=]x}Ea# *p0PV롽*[턍0\r0}BS]ѳx:$ 7uhu{S EaPWZ58¨F8aPWZ5ɄQ8TAFՋ0r-lAɢ0]d *\ aPƮ8¨Fve_q ʵkLsb!jaATU6 rǬ)Q8q ʵk8qq8*FAo~7 qRPj۔>*%]Fz(yN:^C{&PWZ5v8q؍p}U0}rMԐ[Q8Q%I)J *\ al=^0^v+ `w&mɭ a#l~ͣ6fyJt+a#l~ͣ645هZ%dSE6ǴeMʇ$Oo*T/V^{+b!MiZ+OݤZ&Oo6l|tnSvTWITBܫZiW*TT{Q+aC'H*OoU۫vSߜᦾsSj&S\/([ing s `UҒ.פ-;aU Dįܷxgeg5iKnNnÙy)Jo|0^>0*i)Qpc6dj0^>ǘOyVIK[K~MVC!ԯ>JnU*"`SZ}+1f`UҒ*hWE~MVp:&هZ%VxqpS&ׇ&~U/Vڦ:O7:kyznDwE"xSr%֓i0b!LP+vjaU&UJd婢.?[a8<&-Ջɾ^Wa/07^j0ܪāIV s9󬒖Ba>| #VzWTQm7pUnUe_&hR쒺OoII[KTT/'*%\;1Fuj~:7oE-=(^[M}nӍ6>Oo',F `n^jOoFq}bDWsS}F5m\a|6g-ՋCnR0&Ct}# n6yQYӛ3ň1soeqh)هZ4x٭াLmSE< 76Fؐi o7:OUBK멶ib;EztSESH,ՋC6nh愗 ׀9mՖ<͵vS_'VWne4iܜ[_0G͗RД6®oNFdNyMݤZyj0]*$׹MT+/lJuᙼ6UO}Qbl]ܛ}Y{[1 aJT'a#\1V;`H/nj&:wTX;Fa,Fܔڦ%:M"iΐ^O^x?GUSPP+F_Wa#\1G'Fxh酢mT"մB%մ]UVKP1KaTn(sTE̾$heBmI/t~TU|bMiZ+/ *f(OPm-- s `U-Jf!ԯ-;aU DM-mGYƾ*PVV%2PI/Co?L^ړΏyz6FдW>h)OhUR-l?+1ڡ2Wa,Fq57<'aT#u6Q8L{僶{ȻЩ Pa{^۸F5s5H[RB%Ƨ-Z7q-j۸n/x٭Lj?(O^MGUFlNpY(jnQpsFl>aswF*.O}jvT 2Ϛ{`[TU6e\ vT/V^p].ns\ c5pF;`6O5iKNS>Zya/;hhaLs 0ui=t+sqWGƫD[[Jo|Ja*I1 !tTIn&lN׋ \E[[R?{\<|hkv˶[_ԯ6-%yyao0?1`GZZO?::Jt_&so'TVnPRՖ+a# *حv9 qZQ:[۔m})JV ʵFWlnMz緅&+sTE̾`%VԞt~ӛ6†A[OyB{?[ ͅ#~O#"޻ vdDUALIO.MACU  !"#$%&'()*+,-o./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST|nwn0`]Vapݴ|t8].kB-cwE"p({JL6j eRJpmr;zq6JtF#F璴ͯ6KQFkk,W?wY& y~#c?Z5U>7O~#X%(i?zհj#uVY*APX-yZ~.zǏ-xT{HkMIٻ/%5w2]S.zp9.Y5k eЬkIqr;g>Ɉ, YגqZ-׈jSPbttɈH :$%ߌUht߽;_Ώ=[.HFST Xdۇ*J0p㝲mg»?}>_ΏDF<Ԑ(ddi(wɚl3= ߉ӕȢPLQH}c 7qz$NW2"W1Ik`v-;_VOӕ miڵ?M!)E"($kuh:Ļs't%#֡頃$ Ew ?ס鼛w|_?ܑx(Xb:(8L\?ӕȢ06&b LӮE~xy; \-p<+#(M0F*MxYZIuh:Ļ $#((v"m1Rav-;~'t%#֡頃$ Ew Cyn\pG2DcO(uh:J0q NW2"ؘ50Mw0pt'E5ڠH^Rc Reե1QFcZTw& Ecza_odjwp#$+Yd;pK2"XM#ͻnq%FE#O_#B^ghQ6Fx]n]VNϫ8]ɈjkQ[-S_~/E|.z7._yu<+!C(-ݏ_~/E_ xX>zHd[tx9uitHJ4l]n]V0iHF( R7|ej;}Zx$#cU1J4*mT1/'$#rx%H`T]%Ɉ^ $Uiڵh8L$#ZI Hiڵh8L\HFd1&萔h(vzy; \-pxy; \-p<ZT 17ޱvl;jQEz7.ݰ&w$# 5VAc4Z40qߑ :$%힫G2BjٻH"djtAuN$]wiY;֎;Z(og9M0F*LӮE{ӒdDcc*4Zw& Ec4Zw&." EVA5;ajy8o;psZВՂ1Ik`v-;w{$#de m1Rav-ڻ߭ņh54WhmTw^&~Z<Ȣ,ވ(#E:EyPmPtmڟ AA^~.t0bG"l hX__BQ,ɚ.c)h]DCYhQ68HA"*C/EmdIڈA!o,U0|8ȯ6mM J6%#Z]./wdD ZѨ6Qykq<{G7ޱ+q.zekvDׄZ6$ɈjCv"m1Rav-;ɈQHCR;vcM6}j$vtLOGIN.BSc  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNoOPQRSTUVWXYZ[\]^_`abz¨xwYg5"n_{)%)Hkl{_ǤE5Q-uq+8묦YMMQbJhjnE.ju -h+9&5hjoĤ)vG09 p;:w:QK]Bc^SRWR?W,4Fåm;gAm i{M=4Imዳ^H q笳5hz$ĺBzB#i4|ulC9lG n/ i{M=!*YXh$˥8w:QSh+9&5†Snܽz{F89w:QZjנ昼ԣH,bfp ;0FhE9w:Qz:%ŧUWژ鵳^H 1 q笳5hH6A[!1yF+!R$W,4FE8w:QZ昼ԣHhiH; pUنsَ4\05h+9&5hP҈^H )6ĝj{BcBSs+*pqVSדּ56Wۼkޢl1ultq+IC9뛠$ yAY͇5 h˫m|X=@Y}i<g ڴC6ʫm^;w:Qdヲ# UPR6Aw3 Y_D+d ~3D{Ϋûovyk,bٙޫ[`` 1uo;gHRmtt!uU%y=˫m'9i5Wշ.Jys'zݣgxwOw1a?3yOߟy`YE0krsh?g_^/7wfYE0f>gc~6krswgsp쉙.Jyoͯ~49f6wl?lf6l{3{D{3ol~|7qYE0=y0y͛?=1ϸcR"eC8oN{Hz)vm^zוL[:뛠pY5R׵i+PWgMP bW^SuLQlHg=V1zqgN쬯(O旛GszǼzqjentxnn>TĨ(CSpxGĂRhosַNiH/J+,b6ZzU-0OB 8Zo>͋wxsFRLh8;ש+s6sy>@5^='Sj80'UyYSF͋wxsFRLH吊,^5HīsDJ_#hQae`)qk|}KgV,0X h*T>,b1HH;SByp^cA%zՠ+sp쉙Hk|}=d $D^5h8Oٯm4< Fy2 F<wAt>J;̯ywf"y>CbA]p֫ 8Ow@J+女WZ|&@n9lp ƛofj0Qgz_i#*v@Ɣ@f M?6X0 vY uD"yA"yV2uNmtp3mW ZoV,03CBUM`ASBCLoNH@"^Iv{`ի.Hu>Y#hzɳ·5YCz+X`TJ4Ƅv@18`A AFYϴiS_1aאָbJ+­q3g,u;5_3gXdPW,HȠSEu=Ҋ_3gXdPWg}4uz xYM=~ߣQȜbUrc. ͢zXfnC2w:QY6J^I]^5PJ5d F Μ^S0C]Ϩs8u+yc纓<繮6y[s<]z yJCݥ 4nWAݥ<DХ봇 uRWg5XJ.)-8TЄOcRE+*z @bAh;ĺuz@]"-zՠKi1 CV,XPiocJh謯by5&sl`ΉjĜZGӑɼ1XpZ^qU b‘y:r>7 yW 5WGaa d $`6qdgG?R_0rFI ~ ྎI5Gg=J+|9p繕kLh9CbA 6xM×I1!e5(0m}%)2ʇ^5(I1i1 hoK݃R!ATr(o<}QHٛwoo~1KL?6X0R_6WZt^j}6?ޠ}5ǧQxI4E)wY1Hrp1Ȯ/cYV,XPij )"]DŽ>MTxg}%,qWߦPgjPuCz_iŲtJ+PcO P.cBUq@-?~A&Y+X`QR%"sX FU_jS)q3X^:P ځ]Zg9CEƤ3b)9+XP#̿3h8lN$|29>lNulMzՀ+d ~V,0oBZO4X^:nS%ϫZ>3(zm|29OX1mƔH~vOTDUm>%]v֫x_ 2cSFj~vַ1%4\$jkg}iX0R_6zՀiS_!1 ZW *Bz_iłV,0X xfۙ女WZ`ASBREB嬳ME/zuRWgjp>S X8!1Γyy`A<㬯M6ʫ䵳~ `/uWZ`AҊϔR@pv֫ud>@1Hl8U< pV,0FEƔ9W];As%ϫZvY+X`^-DO)# uXsliL:y>8+X`B!>%\1 B9ViL:y>;+X`zŵPA9zgjP6OfoӘVuy=} xV,0/! )8.u쨃xvY_<=iU:C|J('45;W ꖧV,0=%1%Q=Ĥ)vfyc[At!1*X`B6D".5BQ=ϟ?cufyc[AtqQi=%1%EHA|ÏY^:$/:gjP<=!1*X`B6D$S3VY^:$/:gjP2Ҋ!SBS\z2g,/^5[~ Ĩb);JPi3%R8+XҊY&}o` 1 #ɮ8+XҊYԱ͓@1jn` @[%J+PcO PR6Aw;R d ԅt #TAS3J+P N4Ŕ}Db(FD*B.n36O&Mq֏A:bE^nvY_iłV,J+q{\bݡ).)HmvY_i$Q,6Klo=.vYɼ~ +uD+XҊY_ig:h5Q5jri r,g]X| oI a2r,BgndZMTg$#V9l,J+,bqWZ|77Ϟ@B$@qtc!CC62J+ضT2r,B7A㌿EЄF;egv'#%Y? u:ї.my*iL>VpJ+gjzjr^O?êmެ.O~o֐8UӘVۖzqVuldf m7JmfgjP:OFS1c(#Ɏ+,S'Ҋ_3w3\'sJͳN,J<&ۖ\:u^ԚuҲc,zՀ×wU>T0o[Xb8V,XPi xH@ TZ8[i٥jqk;#)&HvWZ@^5hr ^'ŷt`{AbAhdWit{Jl@uR|KGg$ҲKU⬯bJ+g$V⬳zg5>[D1F}MET`g5:{_Ǥ⬯bJ+g} ̓D" iȠ D jw?8+X`VF_A!6hM#CBt>w:⬯b}>;W )&쬿y6W>}ϓ1c: : ߜ^5yyk@ MRkv3m꬯bqWZ3bR)b+vY/%y2~͓MRkvYMz-Azb+rVSדּ#ɎY_i⬯bШքP 6C@]ݫ3D" i@hBJax4J+j1C&jZҊ 31go?Ä7?7^<g} 7Lg#&|??`o7wY_i+Lo 7=~0٧?=g'b! iv4P 8KQ1^6;UDjۼ8@bAFWzՠmW7mߛ d $`$}HJ+g} ̳t#ʱqWZ0Փ9~;Lxxꂟ>qWZ|Ä7yv#&|% ~?`vg} ̯0!@?폘o?YIXB0礘^5Hī@1HHW cjA=1 it_m=fg&5;묦YMЄFjQLPmL:FH#KݶTJS'g5Ǐ7詔8ځ۲w.Pk CZ8P:Hvjuݕ]V,XIj:{Y| TZ8+X`^l:#J8R "mkg} ߥ!>%H@CcwqWZ#,0gl9Y6y25̉>(FRL0":H>D9U]I^S%+Q絳m6dc(-mndH렍nm|2 ̩|20dTuQJT'y}20JTWkg}SBEۼvַ1%4<$:FK,^5 d F ig}a^xfwpc 9U_Abl(qv;|vƑ~ RZghQJ+E/hoS(ozMRkvٍҋbJ+g^~}xF%AjD5G<<{bV,XIjzO#&|% ~?`vg}ԯ6-%yyao0?1`GZZO?::Jt_&so'TVnPRՖ+a# *حv9 qv0MAINT.BSb  !"#$%&'()*+,-./0123456789:;o<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ai4Fj3CuVYHߟi2-MYV8_?+";ϊ;,2-q~V%ߟii#gYgYgmZ}?0 w7xiwzg+?(gm͌mK-#OMe~A_WThf| v?{˗_~ζfF/zȥfG^~[G^>苵p>t] ~ջw+gm͌Y YMb.LvU7 48#Qhf|䉆luX5!8IЭ?:)g}4 & }$XPo#_98GΛRr֛KޮvtRzwVOoͽr֛(/Yo>r~_j|R~Ƿr֛Tjuyr֛Sjumsv#_Z]tySjup}~/SLrW#J};嬯F?ZzyRj2J9뫑JǧQjRJ&(g}5rM_)g}$P?_\!w_w7.\}$P?m6¹mp*|wE I9Iuַzo:g5︽y|<+g}qPo:P?:+g}qFq8뛎Mo:ο*zu֧YGõ^oq6+Uߔ:J9ҬaElfXUYMIB4 V&qA@]h:AEfB4 @7mdH YM5h P5frA@hQD# hrA@0qj &mQ>h(5(ϯhΌ#YL,YM#j!<&tkU@M(YM`D*f _ՌqT>hg}4 #jhTLzyR>hg> U ]W3M3-&Dv֏&rf4Gw}k[hf<ӦL\YM3yg!A`J*Īw=.*дԚ(iLqi4MǤe sq`vMۢhuiەkb4 Yش-F~RYMu{`$!vrk@HL@M?ͻp h&vk@o.tAm&z=fZ)Tk kCBYO3qf4i&.X"qf4)g=Y?Wz7 Ϝ>=lf)E)uSj:R+<%O#RyJmdg3RV_dmTh|>{g=@>hM&z~޽ݟp(g}4 VBYg=~&J"Ts4oԖ"VUg}$PiFCb:^S @FtExOEd@0VNN]3 g> CZ*P[DMYgPZ)?p$P3hqv~+@m5PӱYMϛ z؂f"DDMǓ:{D'u&̨&嬿BӶ:;&t땳kb4 Y8&tkU5;*>h x5;7AtA`׼bHƮ (g> T3TFR HAm&1;1JAֆpQIXU+A8H\ 1g\@*\?s`7E OxJdSh n.oThMg=9oY9Iy3A[xJxJ𔚎 OIv=lf)E)uSj:R+<%O#RyJmdg3R$zg"1dmTܴzQ}Vg':Z k=WdGӄn sEdJzF4pN]3ίeԴ)zR!\TRs:}4 /R6L0q40$&A9}4 .t߭i&J8+[uu{M}DM4c=fwJAֆf:uh8L\O7Nx j"VY٪;k j2H _ !E:uh8S$.zMv{s ڦNx+slY5I5P' ꄿ)YB5Lpq>hO7WW??VY٪;k j2XAϠ_ !S׌3.zMus{{OVPt9pVj$ +tN)Rqf48}4 o^. ڦ6VY٪;k j262V6rf4\^Ϡ6rndmFFՋ ȵ^Ϡ6r.dmF7z)YBj#FvjL89oqJ*VRunڕQgJ\+YB4 w7o|zQJ*VQVkӴ&dcԣMRYOu"17g翚Pnbď P@m5욎zƮnwMǓ:\765 kCBY3g> ԣR맻IL@.~ EdJ3sp~%.{uMA IAֆoILpk@E= Z$h3NT~ EdJ3sp~%.{MA C}G6>PoPaE~Po ߟ9}0Mϛ z"SSꄧtYG V'{=>3T*Mɨ-&㑱>h#A_z(weGuL}$8>I>0kb4 Yh~RY?Wz7 Ϝ>=lf)E)uSj:R+<%O#RyJmdg3L\+(.*x9E5gA[iPVk@DʋF̄?$-n+M Lޟ.ۂ_Cm&#;hf᜺f4\VMzƑku kCsyzƑkYE%bUzgVj dmz+\TR9Ts{=_ԋ ᢒ ϡ:?8뽞ȵ kCHmZA kE9E5g`>hsyr֓9 & }$P/oO'.*w>y+Y51bmք~M@H*>huO_VP4;IQ  j"VP ;InΌ#YLă]AmSV!mq^Sq)[UM=??rsy j۷pNpqA@/?;aE8'qqA@}jPڦ>h{6Ռq?#vA@>&  jk>r^s #OR7MzԶ9/MA_s #ORD^q%vu{=#kYB4 ?)g3RV_dm}$P/E9뽞ȵ kC&K&YG$&+H 䬳 fwZb0VA0W6H u4mE}k`v:;VAVkb4 Y8VA0h~Rٱ rڕ~Po ߟ9LfXf⬇2-8LK'P8LK+PEvP?pC8LK9LK98PPC}Q!\TczFyQg= chKܾx<(gE%bU:pŰr/3qCA _"qCA _:ᬇ Y4g=PgYY5~g=PP?pCA _:⬇L90rCA ̨K9론H 䬳b5lTPb%g=:z鄳 VHMtPV8`$;q~i:z(Δ~i j((g";z(Kଇ YtY5ԙr/a䬇*Q96rCA E9냑Yg?&-+j48Gzg )K$z(X!u g=88S+\/pC Iv\/㬇Rzl=^0^v+ `w&mɭ a#l~vHREMUSR.MACK  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJoï/Mwۘ>YؚN6E;#_r),Ly]u]|Y3 2ݾ}El8/c1/ҢqFK&JZE\#7_X34nz|Ej*.*edZ]}kxab{2v40e Ljv&1bi`sLj AFgщL40 ce,F\EuԳ"9HS&#٧2*'?j:Vcadi ?/h$˯/i`BgU3ƢRXt 鄬9D|٧&d,>_kT e.TÞ b "]{&(]g "3No>D`~126cTՋOLP=LLV]VXE ^C1ᤑU&( kLQ)dݴ77L85E'wa92 Lc[N+X: ʢ^n16ueCgBnx:0_7]_:NW /=kuNQQ먔sTL ;N WaL.2&m5;RdBnxؙpj ,? zcTՋ߶ |mǨt&B܌I.*&<{k2"0hF䮺.5=EU-o&Ƣ|aozE m4H~TVŏZzZؤ8;J12 rǥ\p`O+E ^#2qRL(cL8i44^MǰphiBYĠ5"NW!qx z 'fJGBphih\zeu#Wt쭑e,Nf#c~YLr浌]u]%&+5?1cLP]]꧛ 5eteî=j ^#2ᤑBV&(B,LZeV( kB>3AY9>y}ܣIUaU3kD`pF/5Eg$+&(5, X4E z b>D&ԔE z}ej"E z 1Y:ŮCPFOUM#o3 &Ydol^iS5ɷϿ,laOF)OզeaBXeU^ Z+Ŝ  ^#2|LS1EBY03AY, cKaIcO-jX+E ^#2ᤑOLP1L3AYO5?Cd:yej? ^#2|LO+E \=.T>D&(v͞ 'c?&mBYĠ,v,~!2|L6 [УrL cҦ8](hk-Q46Nl~L6ȿ!RƜM)LӘtY,bPL)#2AYtƢݬ,jτ2b:a՞ 'p8 5et{JW8F&( &&oi`:ƲBYڇ „i:N 740 d>-kv'A>$G?:e,F$1Yљ'Xmʺ2AYİcV{&G&4mLLP1`8'ŸOGdˉ 5eD`p8ټbNW6& Gd,FKhyNEWa, C59q^b܈2LPsuqjpjEnuXI\9L8i\A`8$kvL)+&So6"[&bkr77;t8貢0hSɵX/ɻ^ӑi`s+EW!Ι 5e3|L >6Z4)i`rwyEJ0H&4_JEl-M 5 b9K1'e-rT %/77LP1F{&䆏;N*e%왐mL8icaWL`MFdsrpHWg&(B 9*g, /r+dll^/ ELQ)x0V&[,bse+&!23d}n*$OLP13mŮ}PSFWLޭP1O="+E L o 8\1,Le!2+&t̙ 9* 7̙ 7tńLl1Gi,j i\fobٽ`ga,F;b`g<X[&0[pl^í8brVSgΘ&mmjgL֙9vƝ+&r ;#렶ېuP[P[xLSMn119+쌉i`Veo?{&j])pOS8Oa //).io?E!YVAUEG7"L -gLRV1f3&`9RD'F ;cGceS4u1)La 5d3LXΘ!Zd,F3V?3&`ȣ&9>1ڭ30)La ?@ABO>v>޻ωW E]|9>n9\8]RT-X`%y LtzZ`B 0ZPt}$z%{9@3c$Qt\ ŀzQ Rg1aKpq'V[=NȄo;B,3'8G[V\)#AlmX6$3k).I4"u>;CPS.eBH+:K{"Di0:.~S ԙC*lB3غRBǥPnˊ`#ivY V^xZEF.]fY j|z BMz3"N.xw|KY-R4vػbBK&ifP jH`xǒdhH"!h? ˊ^Vw}?3, ]!R WR_6#GK)1S &\0RRj8sx&{z:SwONnw77z!RG~Iͼ$nud\ R!^:I4)< ^l՟?oͽr֛(/Yo>r