.TITLE TYPE Determine char type .NLIST BEX .ENABL LC ; ; Pdp11/dcn - determine char type ; ; External symbols ; ; Entry symbols ; .GLOBL TYPE ;determine char type ; ; Procedure segment ; .PSECT $BOSI,RO,I ; ; Type (rda) determine char type ; Returns r0 = trimmed char, cc = ; Z control ; C special ; N digit ; V letter ; TYPE: BIC #^C177,R0 ;trim char MOV PC,-(SP) ;set up for sidewinder ADD #RDA4-.,@SP MOV R0,-(SP) ;save char MOV PC,R0 ADD #RDATAB-.,R0 ;search table RDA2: CMPB @SP,(R0)+ BLOS RDA3 TSTB (R0)+ BR RDA2 ; RDA3: MOVB @R0,R0 ;park code ADD R0,2(SP) RDA1: MOV (SP)+,R0 ;restore char CCC ;clear noisy bits in cc RTS PC ;complicated branch RDA4 = . ;handrail for swingers ; RDA6: BIC #040,R0 ;lower-case char. convert to upper case RDA7: SEV ;alphabetic char. set v bit RTS PC ; RDN6: TST (SP)+ ;reset sp RDA5: SEZ ;control char. set z bit RTS PC ; RDA8: SEN ;numeric char. set n bit RTS PC ; RDA9: SEC ;special char. set c bit RTS PC ; ; Data segment ; .PSECT $BOSD,RO,D ; ; Ascii decoding table ; RDATAB: .BYTE 037,RDA5-RDA4 ;000 <= char < 040 (control) .BYTE 057,RDA9-RDA4 ;040 <= char < 060 (special) .BYTE 071,RDA8-RDA4 ;060 <= char < 072 (digit) .BYTE 100,RDA9-RDA4 ;072 <= char < 101 (special) .BYTE 132,RDA7-RDA4 ;101 <= char < 133 (uc letter) .BYTE 140,RDA9-RDA4 ;133 <= char < 141 (special) .BYTE 172,RDA6-RDA4 ;141 <= char < 173 (lc letter) .BYTE 176,RDA9-RDA4 ;173 <= char < 177 (special) .BYTE 177,RDA5-RDA4 ;177 <= char < 200 (control) .EVEN ; .END