.TITLE PUNFLG - PUNCH FLAG PAGES .IDENT /V1.01/ .NLIST TOC,SYM .ENABL LC ; Part of Sira Paper Tape Punch Despooler. ; ; COPYRIGHT(C) 1981,1982, Sira Institute Ltd., ; South Hill, Chislehurst, Kent, BR7 5EH, England. ; ; Author: C.J. Doran ; ; Assemble as: ; >MAC PPPPUNFLG=LB:[1,1]RUNMAC/ML,SY:[g,m]/PPPPUNFLG ;+ ; Punch "flag pages" by displaying ASCIZ string at HEADER (set up by SETFLG) ; as legible characters at head of tape. Characters are 5x8, 5x7 or 5x5, ; according to the width of the tape. ;- ; MODIFICATIONS RECORD ; ==================== ; V1.01 13-Jul-82 ; Add header table for seven-track tape. .MCALL QIOW$R .PSECT CODE,I,RO PUNFLG::MOVB TAPE,%2 ; Get tape size number ASL %2 ; *2 for table lookup MOV WIDTHS(%2),%2 ; Get table pointer according to tape width 10$: MOV #AUXBUF,%3 ; Address output buffer MOV #HEADER,%4 ; and header string MOV #120.,%1 ; Start with 12" 15$: CLRB (%3)+ ; of nulls SOB %1,15$ 20$: MOVB (%4)+,%1 ; Get character BEQ 40$ ; Done if null BMI 20$ ; Negative codes are padding. Ignore them MOV #5,%5 ; Set up byte counter for use at 30$ CMPB %1,#<' > ; Control code? BLO 20$ ; Ignore them CMPB %1,#'a ; Lower-case letters, or above? BLO 30$ ; No, branch SUB #'a-'A,%1 ; Yes, convert to upper case, square brackets etc 30$: MUL %5,%1 ; Compute table entry address ADD %2,%1 31$: MOVB (%1)+,(%3)+ ; Copy bytes to buffer SOB %5,31$ CLRB (%3)+ ; Put in a null separator BR 20$ ; and repeat ; Finished. Punch out buffer 40$: SUB #AUXBUF,%3 ; Compute length BLE 50$ ; Don't punch if empty QIOW$R PPQIOW,,,,,,,<#AUXBUF,%3>,QIOERR ; Punch, with error check 50$: RTS PC ; Return .PSECT STATIC,D,RO,LCL .NLIST BEX ; List of tables. Order must match allowed TAPE entries, F.8, F.5, F.7 ; Offset of 5*<' > is because control chars aren't displayed. WIDTHS: EIGHT-<5*<' >>,FIVE-<5*<' >>,SEVEN-<5*<' >> ; Table to form 5X8 characters: EIGHT: .BYTE 0,0,0,0,0 ; space .BYTE 0,337,337,0,0 ; ! .BYTE 0,7,0,7,0 ; " .BYTE 44,377,44,377,44 ; # .BYTE 206,211,377,211,161 ; $ .BYTE 203,143,30,304,303 ; % .BYTE 140,226,231,216,340 ; & .BYTE 0,7,3,1,0 ; ' .BYTE 0,74,102,201,0 ; ( .BYTE 0,201,102,74,0 ; ) .BYTE 211,112,377,112,211 ; * .BYTE 10,10,176,10,10 ; + .BYTE 0,260,160,0,0 ; , .BYTE 0,10,10,10,0 ; - .BYTE 0,140,140,0,0 ; . .BYTE 200,140,30,4,3 ; / .BYTE 176,241,211,205,176 ; 0 .BYTE 0,202,377,200,0 ; 1 .BYTE 302,241,221,211,206 ; 2 .BYTE 102,211,211,211,166 ; 3 .BYTE 37,20,374,20,20 ; 4 .BYTE 117,211,211,211,161 ; 5 .BYTE 176,211,211,211,160 ; 6 .BYTE 301,41,21,11,7 ; 7 .BYTE 166,211,211,211,166 ; 8 .BYTE 106,211,211,211,176 ; 9 .BYTE 0,146,146,0,0 ; : .BYTE 0,266,166,0,0 ; ; .BYTE 10,20,14,102,101 ; < .BYTE 0,44,44,44,0 ; = .BYTE 201,102,44,200,10 ; > .BYTE 2,271,11,11,6 ; ? .BYTE 176,201,235,223,116 ; @ .BYTE 374,22,21,22,374 ; A .BYTE 377,211,211,211,166 ; B .BYTE 176,201,201,201,102 ; C .BYTE 377,201,201,201,176 ; D .BYTE 377,211,211,211,201 ; E .BYTE 377,11,11,11,1 ; F .BYTE 176,201,261,221,162 ; G .BYTE 377,10,10,10,377 ; H .BYTE 0,201,377,201,0 ; I .BYTE 100,200,201,177,1 ; J .BYTE 377,10,34,42,301 ; K .BYTE 377,200,200,200,200 ; L .BYTE 377,2,4,2,377 ; M .BYTE 377,4,10,40,377 ; N .BYTE 176,201,201,201,176 ; O .BYTE 377,11,11,11,6 ; P .BYTE 176,201,241,101,276 ; Q .BYTE 377,11,31,51,306 ; R .BYTE 206,211,211,211,161 ; S .BYTE 1,1,377,1,1 ; T .BYTE 177,200,200,200,177 ; U .BYTE 37,140,200,140,37 ; V .BYTE 377,100,40,100,377 ; W .BYTE 343,34,10,34,343 ; X .BYTE 3,4,370,4,3 ; Y .BYTE 301,241,221,211,207 ; Z .BYTE 0,377,201,201,0 ; [ .BYTE 3,4,30,140,200 ; \ .BYTE 0,201,201,377,0 ; ] .BYTE 4,2,377,2,4 ; ^ .BYTE 40,160,250,40,40 ; <- (_) .BYTE 0,1,3,7,0 ; ` .IIF NE .-EIGHT-<<'`+1-' >*5> .ERROR .-EIGHT-<<'`+1-' >*5> ; MISSING 8-WIDE ENTRIES ; Table to form 5X8 characters. Note that characters are upside down compared ; with 8- and 5-track, to improve appearence. SEVEN: .BYTE 0,0,0,0,0 ; space .BYTE 0,173,173,0,0 ; ! .BYTE 0,140,0,140,0 ; " .BYTE 24,177,24,177,24 ; # .BYTE 62,111,177,111,46 ; $ .BYTE 141,146,10,63,103 ; % .BYTE 66,111,111,70,5 ; & .BYTE 0,140,100,0,0 ; ' .BYTE 0,34,42,101,0 ; ( .BYTE 0,101,42,34,0 ; ) .BYTE 153,34,177,34,153 ; * .BYTE 10,10,177,10,10 ; + .BYTE 0,5,6,0,0 ; , .BYTE 0,10,10,10,0 ; - .BYTE 0,6,6,0,0 ; . .BYTE 1,6,10,60,100 ; / .BYTE 76,105,111,121,76 ; 0 .BYTE 0,41,177,1,0 ; 1 .BYTE 41,43,105,111,61 ; 2 .BYTE 42,101,111,111,66 ; 3 .BYTE 37,20,174,20,20 ; 4 .BYTE 172,111,111,111,106 ; 5 .BYTE 36,51,111,11,6 ; 6 .BYTE 100,107,110,120,140 ; 7 .BYTE 66,111,111,111,66 ; 8 .BYTE 60,111,112,114,70 ; 9 .BYTE 0,63,63,0,0 ; : .BYTE 0,126,66,0,0 ; ; .BYTE 10,24,42,101,0 ; < .BYTE 0,24,24,24,0 ; = .BYTE 0,101,42,24,10 ; > .BYTE 40,100,117,110,60 ; ? .BYTE 76,101,117,111,56 ; @ .BYTE 37,50,110,50,37 ; A .BYTE 177,111,111,111,66 ; B .BYTE 76,101,101,101,42 ; C .BYTE 177,101,101,101,76 ; D .BYTE 177,111,111,111,101 ; E .BYTE 177,110,110,110,100 ; F .BYTE 76,101,101,105,47 ; G .BYTE 177,10,10,10,177 ; H .BYTE 0,101,177,101,0 ; I .BYTE 2,1,101,176,100 ; J .BYTE 177,10,24,42,101 ; K .BYTE 177,1,1,1,1 ; L .BYTE 177,40,20,40,177 ; M .BYTE 177,20,10,4,177 ; N .BYTE 76,101,101,101,76 ; O .BYTE 177,110,110,110,60 ; P .BYTE 76,101,105,102,75 ; Q .BYTE 177,110,114,112,61 ; R .BYTE 62,111,111,111,46 ; S .BYTE 100,100,177,100,100 ; T .BYTE 176,1,1,1,176 ; U .BYTE 174,2,1,2,174 ; V .BYTE 177,2,4,2,177 ; W .BYTE 143,24,10,24,143 ; X .BYTE 100,40,37,40,100 ; Y .BYTE 103,105,111,121,141 ; Z .BYTE 0,177,101,101,0 ; [ .BYTE 100,60,10,6,1 ; \ .BYTE 0,101,101,177,0 ; ] .BYTE 20,40,177,40,20 ; ^ .BYTE 10,34,12,111,2 ; <- (_) .BYTE 0,140,100,0,0 ; ` .IIF NE .-SEVEN-<<'`+1-' >*5> .ERROR .-SEVEN-<<'`+1-' >*5> ; MISSING 7-WIDE ENTRIES ; Table to form 4x5 characters: FIVE: .BYTE 0,0,0,0,0 ; space .BYTE 0,27,27,0,0 ; ! .BYTE 0,3,0,3,0 ; " .BYTE 12,37,12,37,12 ; # .BYTE 22,25,37,25,11 ; $ .BYTE 21,11,4,22,21 ; % .BYTE 12,25,25,32,30 ; & .BYTE 0,3,1,0,0 ; ' .BYTE 0,16,21,0,0 ; ( .BYTE 0,21,16,0,0 ; ) .BYTE 25,16,37,16,25 ; * .BYTE 4,4,37,4,4 ; + .BYTE 0,30,10,0,0 ; , .BYTE 4,4,4,4,4 ; - .BYTE 0,30,30,0,0 ; . .BYTE 20,10,4,2,1 ; / .BYTE 16,31,25,23,16 ; 0 .BYTE 0,22,37,20,0 ; 1 .BYTE 22,31,31,25,22 ; 2 .BYTE 12,21,25,25,12 ; 3 .BYTE 4,6,5,37,4 ; 4 .BYTE 27,25,25,25,11 ; 5 .BYTE 16,25,25,25,10 ; 6 .BYTE 21,11,5,3,1 ; 7 .BYTE 12,25,25,25,12 ; 8 .BYTE 2,25,25,25,16 ; 9 .BYTE 0,33,33,0,0 ; : .BYTE 0,33,13,0,0 ; ; .BYTE 0,4,12,21,0 ; < .BYTE 12,12,12,12,12 ; = .BYTE 0,21,12,4,0 ; > .BYTE 35,5,5,5,2 ; ? .BYTE 16,21,27,25,6 ; @ .BYTE 36,5,5,5,36 ; A .BYTE 37,25,25,25,12 ; B .BYTE 16,21,21,21,12 ; C .BYTE 37,21,21,21,16 ; D .BYTE 37,25,25,25,21 ; E .BYTE 37,5,5,5,1 ; F .BYTE 16,21,21,31,12 ; G .BYTE 37,4,4,4,37 ; H .BYTE 0,21,37,21,0 ; I .BYTE 10,20,21,17,1 ; J .BYTE 37,4,4,12,21 ; K .BYTE 37,20,20,20,20 ; L .BYTE 37,2,4,2,37 ; M .BYTE 37,2,4,10,37 ; N .BYTE 16,21,21,21,16 ; O .BYTE 37,5,5,5,2 ; P .BYTE 16,21,25,11,26 ; Q .BYTE 37,5,5,15,22 ; R .BYTE 22,25,25,25,11 ; S .BYTE 1,1,37,1,1 ; T .BYTE 17,20,20,20,17 ; U .BYTE 3,14,20,14,3 ; V .BYTE 37,10,4,10,37 ; W .BYTE 21,12,4,12,21 ; X .BYTE 1,2,34,2,1 ; Y .BYTE 21,31,25,23,21 ; Z .BYTE 0,37,21,21,0 ; [ .BYTE 1,2,4,10,20 ; \ .BYTE 0,21,21,37,0 ; ] .BYTE 0,2,1,2,0 ; ^ .BYTE 4,16,25,4,4 ; <- (_) .BYTE 0,1,3,0,0 ; ` .IIF NE .-FIVE-<<'`+1-' >*5> .ERROR .-FIVE-<<'`+1-' >*5> ; MISSING 5-WIDE ENTRIES .EVEN .END