C7$ ?BOOT-U-No boot on volume ߋtvvDF 7. ?Trapped a trap to 4 -- have a nice day! B B ɋ  Terminal to test? [0-4 or Q touit]? Invalid response, please try again.@RNd Q#q  0$ 4!7+0 7F This is a test of terminal TTx: SMisc RT UtilNick ZymarisDECRT11A *,.ENDM .MACRO .POKE AREA,ADDR,VALUE,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM6 ,28,3,, ...CM2 ,4,E .ENDM .MACRO .PRINT ADDR .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM5 ,351 .ENDM .MACRO .PROTE AREA,ADDR,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM6 ,25,0,,,E .ENDM .MACRO .PURGE CHAN .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM3 ,3. .ENDM .MACRO .PVAL AREA,OFFSE,VALUE,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM6 ,28,2,, ...CM2 ,4,E .ENDM .MACRO .QELDF .IIF NDF MMG$T,MMG$T=1 .IIF NE MMG$T,MMG$T=1 Q.LINK=0 Q.CSW=2. Q.BLKN=4. Q.FUNC=6. Q.JNUM=7. Q.UNIT=7. Q.BUFF=^O10 Q.WCNT=^O12 Q.COMP=^O14 .IRP X, Q$'X=Q.'X-4 .ENDR .IF EQ MMG$T Q.ELGH=^O16 .IFF Q.PAR=^O16 Q$PAR=^O12 Q.ELGH=^O24 .ENDC .ENDM .MACRO .QSET ADDR,LEN .IF NDF ...V1 .MCALL .MACS .MACS .ENDC MOV ADDR,-(SP) ...CM5 ,353 .ENDM .MACRO .RCTRL EMT ^O355 .ENDM .MACRO .RCVD AREA,BUF,WCNT,CRTN=#1,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM4 ,,,,22, .ENDM .MACRO .RCVDC AREA,BUF,WCNT,CRTN,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM4 ,,,,22, .ENDM .MACRO .RCVDW AREA,BUF,WCNT,CRTN=#0,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM4 ,,,,22, .ENDM .MACRO .RDBBK RGSIZ .MCALL .RDBDF .RDBDF .WORD .WORD RGSIZ .WORD .ENDM .MAzT`kQZUdkfL^kQ}[kQN}[kQ n}[vn}[vUdkQ kQ vvy-xkQZs`kQs`8xs`v:n%vzzzv @yxz@y%zrZxIqR rrX%zrZ%zrrXxkQzvz@yx ACS .ENDC ...CM7 ,,,,,,8,,200 .ENDM .MACRO .REGDEF .ENDM .MACRO .RELEA DNAM .IF NDF ...V1 .MCALL .MACS .MACS .ENDC ...CM5 ...CM0 ,343 .ENDM .MACRO .RENAM AREA,CHAN,DBLK,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC .IF EQ ...V1-1 ...CM5 ,<100+AREA> .IFF ...CM1 ,4,,,,E .ENDC .ENDM .MACRO .REOPE AREA,CHAN,CBLK,CODE .IF NDF ...V1 .MCALL .MACS .MACS .ENDC .IF EQ ...V1-1 ...CM5 ,<140+AREA> .IFF ...CM .mcall .exit ; By N.Z. 02-Feb-1998 msg: .asciz /SYSGEN options for this monitor are:/ .even start: .print #msg mov @#54,r0 ; Get offset to RMON mov sysgen(r0),r0 ; Get sysgen options word clr r1 clr r5 call decoct .exit .end start G .title Dump -- Convert an octal value to ASCII & optionally display ita .ident /V01.03/)digith: .word ^B1000000000000000 ; 10000015digit1: .word ^B0111000000000000 ; 070000 10 NOV 1984p7digit2: .word ^B0000111000000000 ; 007000 (revised from18digit3: .word ^B0000000111000000 ; 000700 5/84 version))digit4: .word ^B0000000000111000 ; 0000700<digit5: .word ^B0000000000000111 ; 000007 --> total = 177777number::.blkb 6 ; 6 digitsa .byte 40 ; space numlen=.-number .byte 0 .evenflag:: .word 0; Flags:+ f.nqio==1 ; Don't QIO; just put in NUMBERs .mcall qiow$c ; Calling sequence:B$ ; Put any desired flags in FLAG,0 ; MOV value_to_be_dumped,R5 then JSR PC,DUMP-dump:: mov r0,-(sp) ; Save working registerso mov r1,-(sp)r mov r2,-(sp)0 mov r3,-(sp)5 mov r4,-(sp)i? mov #177777,r3 ; R3, R4 retain these values during subroutine01 mov #60,r4 ; Value to add to get ASCII charcterk$ mov #17,r2 ; Repetitions of ROR R0 mov r3,r1 ; Set all bits in R1# sub digith,r1 ; Clear desired bit1- mov r5,r0 ; Load value to be dumped into R0i' bic r1,r0 ; Clear all but desired bitu!rot0: ror r0 ; Move bit into... + sob r2,rot0 ; one's place (ROR 17 times)( add r4,r0 ; Make it an ASCII character+ movb r0,number ; And stick it into NUMBER, mov r3,r1 ; Set all bits in R1$ mov #14,r2 ; Repetitions of ROR R0$ sub digit1,r1 ; Clear desired bits mov r5,r0 ; Load value! bic r1,r0 ; Clear unwanted bits !rot1: ror r0 ; Move bit into...i sob r2,rot1 ; one's place  add r4,r0 ; Make it ASCIIo, movb r0,number+1 ; And stick it into NUMBER mov r3,r1 ; And so on... mov #11,r2; sub digit2,r1 mov r5,r0 bic r1,r0 rot2: ror r0 sob r2,rot2 add r4,r0 movb r0,number+2a mov r3,r1 mov #6,r2 sub digit3,r1 mov r5,r0 bic r1,r0 rot3: ror r0 sob r2,rot3 add r4,r0 movb r0,number+30 mov r3,r1 sub digit4,r1 mov r5,r0 bic r1,r0 ror r0  ror r0, ror r0a add r4,r0 movb r0,number+4 mov r3,r1 sub digit5,r1 mov r5,r0 bic r1,r0 add r4,r0 movb r0,number+5v bit #f.nqio,flagt bne cont.1U% qioW$c IO.WVB,5,2,,,,vcont.1: mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r22 mov (sp)+,r1r mov (sp)+,r0, rts pc  .ende; Dump a 16-bit octal or decimal value: can be generalized to other radices ; easily. Written and debugged 28-30 Jan. 1998 by Nicholas Zymaris. ; Calling sequence: R0=number to output; R5=radix and format: 0=octal, ; 1=decimal; set sign bit to not strip leading zeroes. R1=>output buffer ; or 0. ; Outputs number in ASCII in (R1); preserves all registers except R0. R1 ; will point to one beyond the last character output by this routine. If ; R1=0 on entry, R1 is preserved and the .ttyout is done here. ; This version uses $SAVRG; to omit that just comment out the jsr r5 ; call to it and uncomment the three mov's after it, and before the ; rts pc; the function remains the same. .mcall .ttyout decoct:: jsr r5,$savrg ; save and restore R3 R4 R5 via SYSLIB ; mov r5,-(sp) ; mov r4,-(sp) ; mov r3,-(sp) mov #5,r3 ; minimum # digits to print mov r5,-(sp) ; save, to know how to format output string bit #1,r5 ; Enter with R5=0 for octal, 1 for decimal beq 5$ ; R0 not preserved bcz number passed in it mov #dectbl,r5 ; Point to table of decimal places br 6$ 5$: mov #octtbl,r5 ; Point to table of octal places inc r3 ; extra digit for octal 6$: mov r5,-(sp) ; save a copy of it mov #outbuf,r4 mov r4,-(sp) ; " 4$: tst -(r5) ; Initialize output buffer beq 41$ ; Zero=past last digit: done movb #'0,(r4)+ ; Put ASCII "0" in each place br 4$ 41$: mov (sp)+,r4 ; Restore pointers mov (sp)+,r5 br 11$ 3$: cmp r0,@r5 ; Higher than current decimal place? blo 1$ ; No, skip to next place 2$: incb @r4 sub @r5,r0 br 3$ 1$: inc r4 ; Next decimal place 11$: tst -(r5) ; Reached the zero yet? bne 3$ clrb (r4)+ ; make it an .asciz string mov #outbuf,r4 mov (sp)+,r5 ; Get radix and format bmi 7$ ; Sign bit=don't strip leading zeroes 73$: cmpb #'0,(r4) bne 7$ ; First nonzero character, stop stripping tstb 1(r4) ; Is next character a null = at ones' place? beq 7$ ; Yes, don't strip that zero tstb (r4)+ ; Else, strip it; sob r3,73$ ; Output 1 fewer digit & check next one 7$: mov r1,-(sp) ; Save R1 flag so it can be used as pointer; 74$: tst (sp) ; Print, or let caller deal with it? beq 71$ ; R1=0: print here; else use R1 as ptr movb (r4)+,(r1)+ ; write digits to caller's buffer br 72$ ; and go to common code 71$: .ttyout (r4)+ ; N.B. .TTYOUT moves chr into R0 72$: sob r3,74$ mov (sp)+,r0 ; Was R1 before bit #1,r5 ; Check radix again; if .eq. it's octal, beq 8$ ; so don't print the dot tst r0 ; Same print choice with dot, if decimal # beq 81$ movb #'.,(r1)+ br 8$ 81$: .ttyout #'. ; Decimal number takes a dot. 8$: ;mov (sp)+,r3 ; (Uncomment these if not using $SAVRG) ;mov (sp)+,r4 ;mov (sp)+,r5 rts pc .word 0,1,10.,100.,1000.,10000. dectbl: ; Backwards for predecrement .word 0,1,10,100,1000,10000,100000 octtbl: .word 0 outbuf: .blkb 6 ; 6 digits maximum .byte 0 ; .ASCIZ .even .end ; ; TCONV.MAC by Nicholas Zymaris 18-Jan-86 Version 1.2 ; ; Converts an RMS/FCS variable-record-length file (e.g. P/OS text file) to ; RT-11 text file format. ; ; P/OS file may be copied using my RT11FRPOS program running under P/OS. ; ; To use, type RUN TCONV outputfile=inputfile ; Or, type RUN TCONV. Each time you see the * prompt you may type another ; command string, so multiple commands can be issued rather that only one via ; the one-line method. To exit from this mode, wait for the * and type ^C. ; ; Default extension for input file is .MAC, default for output file is .MA1. ; Typing the /H switch will result in a short online help message. ; Typing the /I switch will result in the name of this program and its version ; number being displayed. ; ; Trailing nulls in a file become trailing CRLFs, which may be deleted in an ; editor if desired (there is no automatic way to distinguish between a null ; record and the nulls right before EOF, since F.FFBY is lost when the file ; leaves the P/OS environment). The unused bytes resulting from RMS/FCS ; rounding (to get the control words on word boundaries) are converted to ; embedded nulls. This means that when you enter and exit the editor, the ; file will be shortened by about 4% automatically. No data has been lost, ; since nulls are virtually meaningless in a normal RT-11 text file. ; .enabl lsb, lc .mcall .csigen,.readw,.writw,.close,.exit,.print,.qset q: .blkw 7*4 filbuf: .blkb 512. area: .blkw 10. hand: .blkw 20. block: .blkw 1 ; Block of file crlf: .byte 15,12 ; Word-aligned intmsg: .asciz /TCONV V1.2/ hlpmsg: .asciz /Type =/ err: .asciz /Error reading file./ illswt: .asciz /Illegal switch./ .even defext: .rad50 /MAC/ ; Default extension for input file .rad50 /MA1/ ; Default extension for output file ; ; Code ; error: .print #err ; Print error message br 6$ ; Reprompt start: .qset #q,#4 ; Reserve 4 Q-elements .print #intmsg ; Print introductory message 6$: .csigen #hand,#defext,#0 ; Get command line and open files ; Input file on chan. 3, output on 0 tst (sp)+ ; Any switches typed? bne 7$ ; Check for help switch if NE br ok ; Else continue with program 7$: cmpb #'H,(sp) ; Help switch typed? bne 8$ ; No, see if ID switch .print #hlpmsg ; Print help message clr (sp)+ ; Restore stack br 6$ ; Get another command 8$: cmpb #'I,(sp) ; Identification switch? bne 9$ ; No, illegal switch .print #intmsg ; Print message clr (sp)+ ; Restore stack br 6$ ; And get another command 9$: .print #illswt ; Give error clr (sp)+ ; Restore stack br 6$ ; And get another command ok: .readw #area,#3,#filbuf,#400,#0 ; Read block 0 of input file bcs error ; Error reading file -- reprompt clr block ; Current block clr r3 ; Pointer to file buffer mov filbuf(r3),r4 ; For first record, clr filbuf(r3) ; clear first control word to ; eliminate spurious CRLF. br 2$ ; Skip CRLF code first time only main: mov filbuf(r3),r4 ; Get RMS byte count 3$: mov crlf,filbuf(r3) ; Replace with CRLF for RT-11 2$: add r4,r3 ; Point to next record add #2,r3 ; Account for size of control word cmp r3,#1000 ; If past end of block, read new block bge 4$ ; before writing the null 5$: bit #1,r3 ; Odd address? beq 1$ ; Not if EQ movb #0,filbuf(r3) ; Fill extra byte with a null inc r3 ; Make odd number even 1$: cmp r3,#1000 ; End of block? blo main ; No, just continue 4$: .writw #area,#0,#filbuf,#400,block ; Write blks to output file inc block ; Read next block .readw #area,#3,#filbuf,#400,block ; Do it bcs done ; Read error = probable EOF sub #1000,r3 ; Update pointer br 5$ ; And continue done: .close #3 ; Close input file .close #0 ; Close output file jmp 6$ ; Get another command line if in "*" .end start ; mode. ; ; TCONV.MAC by Nicholas Zymaris 19-Jan-86 Version 1.31 ; ; Converts an RMS/FCS variable-record-length file (e.g. P/OS text file) to ; RT-11 text file format. ; ; P/OS file may be copied using my RT11FRPOS program running under P/OS. ; ; To use, type RUN TCONV outputfile=inputfile ; Or, type RUN TCONV. Each time you see the * prompt you may type another ; command string, so multiple commands can be issued rather that only one via ; the one-line method. To exit from this mode, wait for the * and type /E. ; ; Default extension for input file is .MAC, default for output file is .MA1. ; A blank command string (just a ) is rejected with an error message. ; Typing the /H switch will result in a short online help message. ; Typing the /I switch will result in the name of this program and its version ; number being displayed. ; Typing the /E switch (or ^C if not in read-pass-all mode) will result in the ; program exiting. ; ; Trailing nulls in a file become trailing CRLFs, which may be deleted in an ; editor if desired (there is no automatic way to distinguish between a null ; record and the nulls right before EOF, since F.FFBY is lost when the file ; leaves the P/OS environment). ; ; The unused bytes resulting from RMS/FCS rounding (to get the control words ; on word boundaries) are converted to embedded nulls. This means that when ; you enter and exit the editor, the file will be shortened by about 4% ; automatically (KED deletes the nulls). No data has been lost, since nulls ; are meaningless in a normal RT-11 text file. ; ; If a system crash occurs while using this program under the FB monitor, use ; the XM monitor (this program will not crash the XM monitor). ; .enabl lsb, lc .mcall .csigen,.readw,.writw,.close,.exit,.print,.qset q: .blkw 7*4 filbuf: .blkb 512. area: .blkw 10. hand: .blkw 20. block: .blkw 1 ; Block of file crlf: .byte 15,12 ; Word-aligned intmsg: .asciz /TCONV V1.31/ nzmsg: .asciz /by Nicholas Zymaris/<15><12> hlpmsg: .ascii |Command string: =/| .asciz <15><12>|Switches: /I (identification), /H (help), /E (exit).| err: .asciz |Error -- type /H for help.| illswt: .asciz /Illegal switch./ .even defext: .rad50 /MAC/ ; Default extension for input file .rad50 /MA1/ ; Default extension for output file ; ; Code ; error: .print #err ; Print error message br 6$ ; Reprompt start: .qset #q,#4 ; Reserve 4 Q-elements .print #intmsg ; Print introductory message .print #nzmsg ; " 6$: .csigen #hand,#defext,#0 ; Get command line and open files ; Input file on chan. 3, output on 0 tst (sp)+ ; Any switches typed? bne 7$ ; Yes if NE br ok ; Else continue with program 7$: cmpb #'H,(sp) ; Help switch typed? bne 8$ ; No, see if ID switch .print #hlpmsg ; Print help message clr (sp)+ ; Restore stack br 6$ ; Get another command 8$: cmpb #'I,(sp) ; Identification switch? bne 9$ ; No, see if another switch .print #intmsg ; Print message clr (sp)+ ; Restore stack br 6$ ; Get another command 9$: cmpb #'E,(sp) ; Exit command? bne 10$ ; No, illegal switch clr (sp)+ ; Restore stack .exit ; Exit program 10$: .print #illswt ; Give error clr (sp)+ ; Restore stack br 6$ ; And get another command ok: .readw #area,#3,#filbuf,#400,#0 ; Read block 0 of input file bcs error ; Error reading file -- reprompt clr block ; Current block clr r3 ; Pointer to file buffer mov filbuf(r3),r4 ; For first record, clr filbuf(r3) ; clear first control word to ; eliminate spurious CRLF. br 2$ ; Skip CRLF code first time only main: mov filbuf(r3),r4 ; Get RMS byte count 3$: mov crlf,filbuf(r3) ; Replace with CRLF for RT-11 2$: add r4,r3 ; Point to next record add #2,r3 ; Account for size of control word cmp r3,#1000 ; If past end of block, read new block bge 4$ ; before writing the null 5$: bit #1,r3 ; Odd address? beq 1$ ; Not if EQ movb #0,filbuf(r3) ; Fill extra byte with a null inc r3 ; Make odd number even 1$: cmp r3,#1000 ; End of block? blo main ; No, just continue 4$: .writw #area,#0,#filbuf,#400,block ; Write blks to output file inc block ; Read next block .readw #area,#3,#filbuf,#400,block ; Do it bcs done ; Read error = probable EOF sub #1000,r3 ; Update pointer br 5$ ; And continue done: .close #3 ; Close input file .close #0 ; Close output file jmp 6$ ; Get another command line if in "*" .end start ; mode. BR TCONV V1.31by Nicholas Zymaris Command string: =/ Switches: /I (identification), /H (help), /E (exit).Error -- type /H for help.Illegal switch.kQQ  xL6& ΥH ΥIx ΥE & 80 80 7  83 888ae  58 8 p80  X8L80 w TCONV V1.2Type =Error reading file.Illegal switch.kQQxL& ΥH ΥIx  80 80 Ƈ7 2 83 88 8ae  58 8 80  880 w .title Dump -- Convert an octal value to ASCII & optionally display it .ident /V01.31/ digith: .word ^B1000000000000000 ; 100000 digit1: .word ^B0111000000000000 ; 070000 10 NOV 1984 digit2: .word ^B0000111000000000 ; 007000 (revised from digit3: .word ^B0000000111000000 ; 000700 5/84 version) digit4: .word ^B0000000000111000 ; 000070 digit5: .word ^B0000000000000111 ; 000007 --> total = 177777 number::.blkb 6 ; 6 digits .byte 40 ; space numlen=.-number .byte 0 .even flag:: .word 0 ; Flags: f.nqio==1 ; Don't QIO; just put in NUMBER ; [V1.31] Keep the name tho' no QIO's in RT-11 ; Operating system: ; ; [V1.31] ; Select one and only one (not zero, not two or more), comment out other one: ; ; pos=1 ; Compile for P/OS or RSX rt11=1 ; Compile for RT-11 .ifdf pos ; [V1.31] Use conditional to retain P/OS .mcall qiow$s ; compatibility while adding RT-11 compat. .endc .ifdf rt11 ; [V1.31] 29-Jan-1998 modification for RT-11 .mcall .ttyout .endc ; Calling sequence: ; Put any desired flags in FLAG, ; MOV value_to_be_dumped,R5 then JSR PC,DUMP dump:: mov r0,-(sp) ; Save working registers mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov #177777,r3 ; R3, R4 retain these values during subroutine mov #60,r4 ; Value to add to get ASCII charcter mov #17,r2 ; Repetitions of ROR R0 mov r3,r1 ; Set all bits in R1 sub digith,r1 ; Clear desired bit mov r5,r0 ; Load value to be dumped into R0 bic r1,r0 ; Clear all but desired bit rot0: ror r0 ; Move bit into... sob r2,rot0 ; one's place (ROR 17 times) add r4,r0 ; Make it an ASCII character movb r0,number ; And stick it into NUMBER mov r3,r1 ; Set all bits in R1 mov #14,r2 ; Repetitions of ROR R0 sub digit1,r1 ; Clear desired bits mov r5,r0 ; Load value bic r1,r0 ; Clear unwanted bits rot1: ror r0 ; Move bit into... sob r2,rot1 ; one's place add r4,r0 ; Make it ASCII movb r0,number+1 ; And stick it into NUMBER mov r3,r1 ; And so on... mov #11,r2 sub digit2,r1 mov r5,r0 bic r1,r0 rot2: ror r0 sob r2,rot2 add r4,r0 movb r0,number+2 mov r3,r1 mov #6,r2 sub digit3,r1 mov r5,r0 bic r1,r0 rot3: ror r0 sob r2,rot3 add r4,r0 movb r0,number+3 mov r3,r1 sub digit4,r1 mov r5,r0 bic r1,r0 ror r0 ror r0 ror r0 add r4,r0 movb r0,number+4 mov r3,r1 sub digit5,r1 mov r5,r0 bic r1,r0 add r4,r0 movb r0,number+5 bit #f.nqio,flag bne cont.1 .ifdf pos ; [V1.31]: qioW$s #IO.WVB,#5,#2,,,,<#number,#numlen> ; change to $s form .endc .ifdf rt11 ; and add RT-11 code mov #number,r1 mov #numlen,r2 1$: .ttyout (r1)+ sob r2,1$ .endc cont.1: mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rts pc .end ; ; CLEAR.MAC 5-Jan-86 Nick Zymaris ; Clears the screen with an RIS sequence. ; Produces a 1 block .SAV file (can't get any shorter than that!) ; Must be linked as follows to avoid a system crash: ; LINK/STACK:756 CLEAR ; ; May be run by simply typing CLEAR ; .asect .=756 .mcall .print, .exit start: .print #clear .exit clear: .asciz <33>/c/ .end start c; Show ASCII value(s) of character(s) typed ; by Nicholas Zymaris 02-Feb-1998 cr=15 lf=12 esc=33 .mcall .ttyin,.ttyout,.exit tmsg: .asciz /[4mASCII character(s)://[0m / revon: .asciz /[7m/ revoff: .asciz /[0m/ .even tprnt: .ttyout (r1)+ bne tprnt rts pc loop: mov #tmsg,r1 ; Print prompt on current terminal, no CRLF call tprnt 2$: .ttyin cmpb r0,#'Q ; See if user wants out beq done cmpb r0,#'q beq done mov r0,-(sp) ; Protect input in R0 from .ttyout mov #revon,r1 call tprnt ; Distinguish from typed chars w/ revrs video clr r1 clr r5 mov (sp)+,r0 call decoct ; Show ASCII value(s) of character or func key mov #revoff,r1 call tprnt ; turn off reverse video br loop done: .exit .end loop ; Y2K Patch for RTMON 5.01C. By Nicholas Zymaris, 18:47:29 31-Jan-1998 ; ; Synopsis: RTMON gets date word and masks out all other bits to get ; year in R2. Month (->R0) and day (->R1) are then obtained ; by shifting around bits, and can be screwed up if the high ; year bits are not removed. It checks for a zero date and ; prints just blanks, as for some 21st century dates. ; ; Patch: It would seem that the most robust way to fix this is to ; JSR right where it would just ADD #110,R2 to a location ; unused by the program, to do the now-familiar SWAB and ROR ; on the high bits (still in R0) and add it to R2, subtracting ; 100. if >1999. and two-digit display, then clearing the ; 140000 bits from R0 before returning. Note: since this is a ; .REL file that can be loaded anywhere, you can't do a JSR ; PC, @#loc. ; This is the code to be "JSR"'d to start: mov r0,-(sp) ; Save date word for RTMON bic #37777,r0 ; Clear all except high year bits swab r0 ror r0 ; Shift 'em over 9 bits as usual add r0,r2 ; Add to low year bits add #72.,r2 ; Year (was) modulo 1972. A.D. cmp r2,#99. ; 1999. or later? blos 1$ ; Yes, no further correction needed sub #100.,r2 ; 21st century, correct for 2-digit display 1$: mov (sp)+,r0 ; Get back original date word bic #140000,r0 ; Clear hi bits so RTMON gets proper month rts pc .end ; Not to be executed until SIPPed in SIPP RTMON2.REL /A 0 52 5502 ^Z 5774 4767 440 ^Z 6440 10046 42700 37777 300 6000 60002 62702 110 20227 143 101402 162702 144 12600 42700 140000 207 ^Y RTMONQ.REL is RTMON with the two initial ^G's zapped out (Q for Quiet). RTMON2.REL is RTMON with 2-digit support for dates 1972-2099; it rolls over back to 1972 after 31-DEC-2099 23:59:59. [22:57:04 31-Jan-1998] !DIFF V1.0 by Nicholas Zymaris 27-Jan-1998 -- nickz@idt.netEnter: file1,file2 or /H(elp), /I(D), /E(xit), ^C. Input files may be disks or files. To read files 1 block at a time, use the /1 switch (faster).?DIFF-F-Illegal switch?DIFF-F-Read error on first file?DIFF-F-Read error on second file?DIFF-W-First file is shorter; no prior differences?DIFF-W-Second file is shorter; no prior differences?DIFF-I-No differences encountered?DIFF-W-Last block of different size?DIFF-I-Last group of blocks of different size; try /1?DIFF-I-Files differkQn8v0    ^  v鈷\L & "ΥH ΥIv ΥE Υ1 G  8v0  !-R - vv!$~  鈘 zDIR2 V1.4 by Nicholas Zymaris 30-Jan-1998 (e+int(pi) day): /H for helpType [=] or /H(elp), /I(D), /Q(uit), ^C. Input file may be a disk or logical disk; e.g.: TT:=DY: or QQQ.QQQ=DL0:TEST.DSK or NL:=TEST2.DSK Bug: crashes system if you try to read VM:, unless VM:=SY:. Misreads DY0: and crashes on DY1: if not=SY:, and DLn: if VM:=SY:. Use the /B(rief) switch with a disk or file for a brief listing (output device ignored for now). /N: Numeric (not character) month; /E: European date order. For numeric European order, use /E/N, not /N/E. List only: /U(nprotected) or /P(rotected) files; include /D(eleted) files; /T(oday's files only); Print the file sizes and number of files in (O)ctal.?DIR2-F-Error reading home block?DIR2-F-Error reading first directory block?DIR2-F-Error reading additional directory blocks?DIR2-F-Illegal switch-Jan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- N  鈷7 Ll & lΥHΥIΥQΥBU !PΥNUv !vFΥEUb !b<ΥP UN !N2U+ΥUU4 !4%ΥDU  ! ΥTU  ! ΥOU@ !! 鈇 8t0 w 8t0 w 8t0 v~7 %w5J5B5<5;5.545 -z , t  ѕ. B5 5l8 6ҕ  5 e t 8t0 8t0 w  w5TB 5@D , 4  $ %t鈇&  5@ Octal Files, blocks. w 5 R 5  < V v Et5z  @ @ e7 B ҕ- Et 5Dҕ- DEE? aeHW!c d f@ ` 7^t3 t (ҕ Ef 5@ \Bҕ 5ҕP5ҕDU5ҕTU5 E~5p ҕNUl5pҕnw f5 f& ԕ0 @ ̥0ԋ~f ~5  ѕ.. d'@% ee/ e0&f w D   ѕ:   ѕ.   D (@w 2 % b % e%e ee e -2,3 .MODULE SP,RELEASE=V05,VERSION=01,COMMENT=,AUDIT=YES ; incorporating NZ edits of 16-DEC-97, 20-DEC-97 and 30-JAN-98. -58 YRHI$ = 140000 ; [NZ 16-DEC-97] -143,143 WIDDAT: .WORD 11. ; [1-31-98] Was 9. for 2-digit year -217,218 SP$DAT: .BLKB 12. ; [NZ] was .BLKB 10. (+2 for 4-digit yrs) .ASSUME SP$DAT EQ SPINT-44 ; [NZ] was SPINT-42 (" " " " ) -366,369 ; MOV (SP)+,R5 mov (sp),r5 ; Read yr from stack, preserving it BIC #^C,R5 ; Isolate low year bits bic #^c,(sp) ; Isolate high year bits (on stack) swab (sp) ; [1-30-98] Adjust it right 9 bits to... ror (sp) ; ... add (sp)+,r5 ; pop & add it to year ADD #110,R5 ; add proper offset to year (72.) cmp r5,#<2000.-1900.> ; [1-30-98] Is it 2000. yet? blo cen20 ; [NZ] No, still in 20th century movb #'2,(r4)+ ; [1-30-98] for 4-digit date only: 1st digit movb #'0,(r4)+ ; ["] 2nd digit sub #100.,r5 ; ["] correct lower 2 digits for PUTNUM br cencom ; [NZ] go to common code cen20: movb #'1,(r4)+ ; [1-30-98] for 4-digit date only: 1st digit movb #'9,(r4)+ ; ["] 2nd digit cencom: CALL PUTNUM ; [1-30-98] print rightmost 2 digits -389,389 CLRB 11.(R5) ; [NZ 20-DEC-97] was CLRB 9.(R5) (+2 4-digit) -567,573 MOVB R0,(R4)+ ; Initialize 10's digit MOVB R0,@R4 ; and one's digit: "00" tst r5 ; [NZ] Is the number zero? beq 21$ ; [NZ] If so, we're done 10$: INCB @R4 ; increment the one's digit CMPB @R4,#': ; gone through all the digits? BNE 20$ ; not yet MOVB R0,@R4 ; yes, put a zero there INCB -1(R4) ; and carry -576,576 21$: INC R4 ; point to next chr; [NZ] added local label -578,578 .SBTTL OUTPUT A CHARACTER TO THE SPOOLER JOB ; [1-30-98] DEC left out 2nd "C" -646,647 .ASCII " Digital Equipment Corporation," ; [1-30-98] DEC left .ASCII " 146 Main Street, Maynard Mass.," ; out "p" in Equipment -662,662 CHRADR: .BLKW 12. ; was 10. - don't chop off first word of big "A" below -666,667 .IFT ; ^^[1-31-98] A: .WORD 11111111111100 ; this word gets chopped off otherwise / SLP SP.MA2/A=SP.MAC,SP.SLP -2,4 .MODULE RMONSJ,RELEASE=V05,VERSION=09,COMMENT=,GLOBAL=.RMNSJ -9,14 ; Edits by Nicholas Zymaris: -16,18 ; Year-2000 compatible Date rollover code added 12-Nov-97, functionally ; identical to code added to RMONFB. -19 ; .SDTTM and SET FILE DATE sections (adjacent to each other) modified so that ; high bits of year are not munged by monitor (but old PIP versions will clear ; sign bit and set protection bit); 26-Jan-98. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; -532,532 1$: ;BIC #140000,@SP ; [1-15-98] Oh no you don't! -577,577 ; BLE 1$ beq 1$ ; [1-15-98] (?) if no date supplied, don't use cmp #-1,r1 ; (for any progs that use -1 for same purpose) beq 1$ -2183,2184 ROLOVR::MOV $DATE,R1 ; verbatim from RMONFB.MAC, (c) DEC 1984 BEQ 1$ ; don't roll over if no date at all ; (makes it easier for 2003./2035. too) mov r2,-(sp) ; Save it in case other sys routines use it mov r1,r2 ; Save original date bic #37777,r2 ; ...only the century bits bic #140000,r1 ; Century bits will screw up month otherwise -2186 ASR R1 ; will improperly shift century bits -2188,2188 -2195,2197 BIT #3,@SP ; works fine in 2000, 2004, 2008, ... BNE NOLEAP ; (until 22nd century fix needed ;-) INCB R1 ; 29. is max. for leap years -2203,2203 CMPB (SP)+,R1 ; Byte compare: cty. bits don't matter -2205,2205 ADD #40,@SP ; just increment day, no rollover -2207,2215 LSTDAY: BIC #<31.*40>,@SP ; zero out date (e.g. 0-Dec-97) ADD #<1*40>+<1*2000>,@SP ; add 1 to date and month (e.g. 1-Dec) CMP @SP,#<13.*2000> ; at "13th month"? BLO 3$ ; no, don't roll over year ; BIC #<31.*2000>,@SP ; clr month out (& low century bit!) Bic #<15.*2000>,@SP ; clr month out (leave c. bit alone) ADD #2001,@SP ; Incr. yr. and day -> 1-Jan-XX bit #37,@sp ; Did yr overflow? (2004., 2036.) bne 3$ ; No, date OK, set it and that's it add #<40000-40>,@sp ; Correct dt & year (use century bits) 3$: add r2,@sp ; Restore century bits MOV (SP)+,$DATE ; Set new system date mov (sp)+,r2 ; Restore R2 BR 1$ ; (Local labels changd for SJ monitor) DAYTBL: .BYTE 31.,28.,31.,30.,31.,30. ; "30 Days hath September..." / A selection of small programs, test programs and Year 2000 fixes written by Nicholas Zymaris for RT-11 under a Pro 350 or PDP-11 environment, 1984-1998. ============================================================================ All the Year 2000 fixes for the RT-11 V5.01C monitor are here except KMOVLY (which now works but requires some minor debugging). Also fixes for DIR, MACRO, LINK and PIP are not included, but I plan to include them in a future logical disk where all the patches will be in one place. Monitor patches are SLP files to modify the original source code (*.MAC), whereas utility patches are SIPP files to modify the executable (*.REL or *.SAV). The programs included here do not use Pro-specific CSR's and should run on any real or emulated PDP-11, including John Wilson's Ersatz-11 which may be downloaded from ftp.dbit.com /pub/e11. The DIR2 here does not have all the options of RT-11's DIR; it was written primarily to have a Year 2000 compatible DIR list for use while testing Year 2000 fixes. Type /H for options. No wildcards are accepted at this time, but if you give the name of a logical disk as input it will list the contents of it. There are still some bugs; some listings are truncated as a result, but all the information it shows is correct except for the summary line at the bottom. DUMP is a simple program written in 1984 to print a six-digit octal number or store it to a buffer (the latter can be useful for debugging interrupt service routines where a .ttyout would not be appropriate). DECOCT is a rewritten version to print in decimal or octal, with or without leading zeroes; it also has the option to store to a buffer and not display the ASCII value. It does so a little more efficiently, whereas the 1984 version is more of a hack. TCONV is a utility to convert RSX and P/OS text files to RT-11 (for example, the DUMP.POS file). I have DIR and COPY programs available for P/OS which will read, write and list RT-11 volumes from P/OS, not included here. V1.3 has a few more features, but also has a bug which causes it to crash under some monitors, so either use XM or use the previous (V1.2) version. All these utilities set the date of the copied or converted file to the current date, not the date of the original file. By copying the executables to your boot disk (SY:), you can effectively add them to DCL, so you do not need to type RUN. E.g. to convert an RSX file just type TCONV outfile=infile. URL: http://idt.net/~nickz/dec.html and http://idt.net/~nickz/rt11/ E-mail: nickz@idt.net or nickz@tribeca.ios.com Legal: I have tested these programs on at least two platforms, on real and emulated environments, and they work. Some programs still have bugs; these are documented when known. Bug reports are welcome. Programs without source are still being developed and added to. All these programs are provided as is and since they are not being sold, they have no warranty. They are designed to be of utility to the RT-11 user. Copyright is retained by the author (copyright 1984-1998 Nicholas Zymaris). If you wish to incorporate the code into a commercial product, please contact me to work something out. However, I do not wish to perpetuate the sometimes overly-restrictive licensing arrangements that have tended to discourage the use of otherwise good operating systems for the PDP-11. Especially not for little programs like this, which are generally not likely to be commercially released anyway. Just give credit where credit is due if you find any of this code useful for your own software. Year 2000 patches are provided as SLP and SIPP files only so that no infringement of DEC's copyright occurs. Make sure you back up your source files before patching them. If you have modified the files to be patched, the patch may require adjustment, even for one extra added carriage return. Note that Mentec is planning to release a fully Year-2000 compatible update to RT-11 (V5.7). Companies and other RT-11 users who are able to upgrade may wish to consider doing so. For those who want to or must continue using an older version of RT-11, these fixes will provide proper date functionality through December 31, 2099. 03-Feb-98 SYSOPT.MAC 1P 02-Feb-98 Check SYSGEN option word of monitor DUMP .POS 5P 06-Feb-86 DUMP, P/OS version (RSX-11 text file) DECOCT.MAC 6P 30-Jan-98 Print or store decimal or octal as ASCII TCONV2.MAC 8P 18-Jan-86 Convert RSX-11 & P/OS text files to RT-11 TCONV3.MAC 9P 19-Jan-86 Update to TCONV V1.2, does not work on some FB TCONV3.SAV 4P 19-Jan-86 TCONV V1.3 compiled TCONV2.SAV 3P 29-Jan-98 TCONV V1.2 compiled DUMP .MAC 6P 29-Jan-98 DUMP, with conditionals for RSX (P/OS) & RT-11 CLEAR .MAC 1P 05-Jan-86 Reset screen&terminal w/ RIS sequence (ESC c) CLEAR .SAV 1P 05-Jan-86 Compiled; demo of 1-block .SAV file CLS .SAV 1P 11-Nov-97 Clear screen only with ESC [H ESC [J SHOWAS.MAC 2 02-Feb-98 Show ASCII values of characters & F keys RTMONP.MAC 3P 31-Jan-98 Commented source for RTMON Year 2000 patch RTMONP.SIP 1P 31-Jan-98 SIPP file to patch RTMON.REL V5.01C RTMONP.INF 1P 31-Jan-98 Information on RTMON.REL patch DIFF .SAV 17P 27-Jan-98 Homegrown DIFFerences program DIRV14.SAV 9P 30-Jan-98 DIR alternate for devices & logical disks SP .SLP 5 03-Feb-98 Year 2000 patch for SP.MAC (not SP.SYS) SP .COM 1 03-Feb-98 Command file to automate SP patch RMONSJ.SLP 6 03-Feb-98 Year 2000 patch for RMONSJ.MAC (FB is similar) RMONSJ.COM 1 03-Feb-98 Command file to automate RMONSJ patch RMONFB.SLP 6 03-Feb-98 Year 2000 patch for RMONFB.MAC (SJ is similar) RMONFB.COM 1 03-Feb-98 Command file to automate RMONFB patch 23 Files, 98 Blocks 1 Free block SLP RMONFB.MA2/A=RMONFB.MAC,RMONFB.SLP SLP RMONSJ.MA2/A=RMONSJ.MAC,RMONSJ.SLP -2,4 .MODULE RMONFB,RELEASE=V05,VERSION=36,COMMENT= -9,14 ; Edits by Nicholas Zymaris: -16,18 ; Year-2000 compatible Date rollover code added 12-Nov-97, functionally ; identical to code added to RMONSJ. -19 ; .SDTTM and SET FILE DATE sections (adjacent to each other) modified so that ; high bits of year are not munged by monitor (but old PIP versions will clear ; sign bit and set protection bit); 16-Jan-98; the same changes made to ; RMONSJ on 26-Jan-98. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; -3855,3855 BEQ 2$ ; don't roll over if no date at all ; (makes it easier for 2003./2035. too) mov r2,-(sp) ; Save it in case other sys routines use it mov r1,r2 ; Save original date bic #37777,r2 ; ...only the century bits bic #140000,r1 ; Century bits will screw up month otherwise -3857 ASR R1 ; will improperly shift century bits -3859,3859 -3866,3868 BIT #3,@SP ; works fine in 2000, 2004, 2008, ... BNE NOLEAP ; (until 22nd century fix needed ;-) INCB R1 ; 29. is max. for leap years -3874,3874 CMPB (SP)+,R1 ; Byte compare: cty. bits don't matter -3876,3876 ADD #40,@SP ; just increment day, no rollover -3878,3886 LSTDAY: BIC #<31.*40>,@SP ; zero out date (e.g. 0-Dec-97) ADD #<1*40>+<1*2000>,@SP ; add 1 to date and month (e.g. 1-Dec) CMP @SP,#<13.*2000> ; at "13th month"? BLO 4$ ; no, don't roll over year ; BIC #<31.*2000>,@SP ; clr month out (& low century bit!) Bic #<15.*2000>,@SP ; clr month out (leave c. bit alone) ADD #2001,@SP ; Incr. yr. and day -> 1-Jan-XX bit #37,@sp ; Did yr overflow? (2004., 2036.) bne 4$ ; No, date OK, set it and that's it add #<40000-40>,@sp ; Correct dt & year (use century bits) 4$: add r2,@sp ; Restore century bits MOV (SP)+,$DATE ; Set new system date mov (sp)+,r2 ; Restore R2 BR 2$ ; (Local labels differ in SJ monitor) DAYTBL: .BYTE 31.,28.,31.,30.,31.,30. ; "30 Days hath September..." -3967,3967 ; BLE 1$ beq 1$ ; [1-15-98] (?) if no date supplied, don't use cmp #-1,r1 ; (for any progs that use -1 for same purpose) beq 1$ -3985,3985 1$: ;BIC #140000,@SP ; [1-15-98] Oh no you don't! / ; Disable or enable clock interrupts for single-stepping in E11 or ; any uninterruptable task. Nonexistent memory location on Pro 350. ; ; Nicholas Zymaris 10:44:48 19-Mar-1998 .mcall .csispc, .print, .exit outsp: .blkw 5*3 dext: .word 0,0,0,0 linbuf: .blkb 82. ; Keep in place so .csispc doesn't overwrite hlpmsg hlpmsg: .ascii /Syntax: CLOCKI command, where command = OFF, ON or HELP / .asciz /(default)./ offmsg: .asciz /Clock is off./ onmsg: .asciz /Clock is on./ mapmsg: .asciz /Currently does not support a mapped monitor./ .even sysptr= 54 sysgen=372 xm= 2 start: mov @#sysptr,r0 bit #xm,sysgen(r0) bne noxm .csispc #outsp,#dext;,,#linbuf ;Get command line mov #dext,r0 tst (r0)+ beq help cmp #57266,@r0 ; .rad50 /OFF/? bne on bicb #100,@#177546 ; Interrupts off .print #offmsg br quit on: cmp #57760,@r0 ; .rad50 /ON/? bne help bisb #100,@#177546 .print #onmsg br quit noxm: .print #mapmsg ; Here if in XM (despite label) br quit help: .print #hlpmsg quit: .exit .end start ZSyntax: CLOCKI command, where command = OFF, ON or HELP (default).Clock is off.Clock is on.Currently does not support a mapped monitor.,5&  %^@f%_ @fx//idt.net/~nickz/rt11/ E-mail: nickz@idt.net or nickz@tribeca.ios.com Legal: I have tested these programs on at least two platforms, on real and emulated environments, and they work. Some programs still have bugs; these are documented when known. Bug reports are welcome. Programs without source are still being developed and added to. All these programs are provided as is and since they are not being sold, they have no warranty. They are designed to be of utility to the RT-11 user. Copyright is retained by the author (copyright 1984-1998 Nicholas Zymaris). If you wish to incorporate the code into a commercial product, please contact me to work something out. However, I do not wish to perpetuate the sometimes overly-restrictive licensing arrangements that have tended to discourage the use of otherwise good operating systems for the PDP-11. Especially not for little programs like this, which are generally not likely to be commercially released anyway. Just give credit where credit is due if you find any of this code useful for your own software. Year 2000 patches are provided as SLP and SIPP files only so that no infringement of DEC's copyright occurs. Make sure you back up your source files before patching them. Note that editing a file with EDT (e.g. under P/OS or RSX) may add a trailing space to the end of each line. This will not affect its function, but will increase the file size. If you have modified the files to be patched, the patch may require adjustment. Note that Mentec is planning to release a fully Year-2000 compatible update to RT-11 (V5.7). Companies and other RT-11 users who are able to upgrade may wish to consider doing so. For those who want to or must continue using an older version of RT-11, these fixes will provide proper date functionality through December 31, 2099. 03-Feb-98 SYSOPT.MAC 1P 02-Feb-98 Check SYSGEN option word of monitor DUMP .POS 5P 06-Feb-86 DUMP, P/OS version (RSX-11 text file) DECOCT.MAC 6P 30-Jan-98 Print or store decimal or octal as ASCII TCONV2.MAC 8P 18-Jan-86 Convert RSX-11 & P/OS text files to RT-11 TCONV3.MAC 9P 19-Jan-86 Update to TCONV V1.2, does not work on some FB TCONV3.SAV 4P 19-Jan-86 TCONV V1.3 compiled TCONV2.SAV 3P 29-Jan-98 TCONV V1.2 compiled DUMP .MAC 6P 29-Jan-98 DUMP, with conditionals for RSX (P/OS) & RT-11 CLEAR .MAC 1P 05-Jan-86 Reset screen&terminal w/ RIS sequence (ESC c) CLEAR .SAV 1P 05-Jan-86 Compiled; demo of 1-block .SAV file CLS .SAV 1P 11-Nov-97 Clear screen only with ESC [H ESC [J SHOWAS.MAC 2 02-Feb-98 Show ASCII values of characters & F keys RTMONP.MAC 3P 31-Jan-98 Commented source for RTMON Year 2000 patch RTMONP.SIP 1P 31-Jan-98 SIPP file to patch RTMON.REL V5.01C RTMONP.INF 1P 31-Jan-98 Information on RTMON.REL patch DIFF .SAV 17P 27-Jan-98 Homegrown DIFFerences program DIRV14.SAV 9P 30-Jan-98 DIR alternate for devices & logical disks SP .SLP 5 03-Feb-98 Year 2000 patch for SP.MAC (not SP.SYS) SP .COM 1 03-Feb-98 Command file to automate SP patch RMONSJ.SLP 6 03-Feb-98 Year 2000 patch for RMONSJ.MAC (FB is similar) RMONSJ.COM 1 03-Feb-98 Command file to automate RMONSJ patch RMONFB.SLP 6 03-Feb-98 Year 2000 patch for RMONFB.MAC (SJ is similar) RMONFB.COM 1 03-Feb-98 Command file to automate RMONFB patch 23 Files, 98 Blocks 1 Free block v*w .U-" 7׭h gc׭]    ߥ*w  ߥ**w -\*w 8& :& wt  PL h SKw :4  bK KTpp0 w 77,e"5 w7@Ek p n# @ V  B  B% 6 @E   `  B@ w   & ~ z w& &EU0 e b & #N e ee e .  (@@E% .   'w G` 0w G @ 3@&  w v  R   DX^pVJ8<< :/ 7*5"t0 0 ߋ**w  w v%HDR %EOF 77{7v  n%T -N\  Ew n4H6 2&׽)2& # Tp0  ߋ* *w U  %% @ +6@ +8& :& wWSW=# * ɋ ɭ" R Sы ҕ ҕ R X )d<S&F ,5 םiEU7 O e0wA aeK C [6FW[ KrXKL^[_[z,<9p:G0UXUU,@~]@] Х ,7Ф%yl7h_  w 7Fw dO J E% Ue,} i/:FT[    ) f 6 W"/%E <E    E h    < lt@ ,B  ݂C ؂C ӂBDB` 7.B0B`pCBB`xC p   E6/ E &5w V ,5.