.TITLE RAD50 ;CONVERTS FILE NAME INTO 4 RAD50 WORDS. C-BIT SET IF ERROR .MCALL .TLQ,.PARS,.TRUNS,.LONGS,.MOVS,.FINDS,.EXIT .GLOBL .RAD50 CODE: .BLKW 4 ;4 RAD50 WORDS FILE: .BLKW 1 ;ADDR OF ASCII NAME .RAD50: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) .FINDS FILE,#COLON,R0 ;COLON FOR DEVICE? BCC WPW MOVB #'D,DEVICE ;NO COLON; DEFAULT DEVICE IS DK: MOVB #'K,DEVICE+1 MOVB #40,DEVICE+2 MOV FILE,R0 ;NO DEVICE SPECIFIED; SEARCH BR DONAME ;FOR FILE NAME AT BEGINNING OF STRING ;DO DEVICE NAME WPW: .PARS FILE,#DEVICE,#COLON,R0 ;PARSE ON COLON YCOLON: .LONGS #DEVICE,R1 CMP R1,#3 ;DEVICE MUST HAVE <= 3 BYTES BLE DONAME .TLQ JMP ERROR DONAME: .FINDS R0,#PERIOD,R1 ;IS THERE PERIOD? BCC PWP .TLQ JMP ERROR PWP: .PARS R0,#NAME,#PERIOD,R0 .LONGS #NAME,R1 CMP R1,#6 ;NAME MUST HAVE <= 6 CHAR BLE WEW .TLQ BR ERROR WEW: .TRUNS #NAME,#6 ;DO EXTENSION .MOVS R0,#EXT .LONGS #EXT,R1 CMP R1,#3 ;EXT MUST HAVE <= 3 CHARACTERS BLE QUQ .TLQ BR ERROR QUQ: .TRUNS #EXT,#3 ;CONVERT 12-CHAR STRING AT ADDR DEVICE TO RAD50 CONVRT: MOV #4,R0 MOV #DEVICE,R1 MOV #CODE,R4 LOOP: MOVB (R1)+,R2 ;DO BYTE 1; RADIX-50 VALUE=(C1*50+ C2)*50 + C3 BIC #^B1111111110000000,R2 MOVB TABLE(R2),R2 BLT RADERR MOV R2,R3 ;R3 HOLDS ONE WORD OF CODE MUL #50,R3 MOVB (R1)+,R2 ;DO BYTE 2 BIC #^B1111111110000000,R2 MOVB TABLE(R2),R2 BLT RADERR ADD R2,R3 MUL #50,R3 MOVB (R1)+,R2 ;DO BYTE 3 BIC #^B1111111110000000,R2 MOVB TABLE(R2),R2 BGE OKAY RADERR: .TLQ BR ERROR OKAY: ADD R2,R3 MOV R3,(R4)+ SOB R0,LOOP CLC BR RET ERROR: SEC RET: MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN COLON: .ASCIZ %:% ;TERMINATOR COLON PERIOD: .ASCIZ %.% ;TERMINATOR PERIOD DEVICE: .BLKB 3 NAME: .BLKB 6 EXT: .BLKB 3 .BYTE 0 SPACE: .BYTE 40,40,40,40,40,40,40,40,40,0 KEYBUF: .BLKB 82. TABLE: .BYTE 0,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200 .BYTE 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200 .BYTE 0,200,200,200,33,200,200,200,200,200,200,200,200,200,34,200 .BYTE 36,37,40,41,42,43,44,45,46,47,200,200,200,200,200,200 .BYTE 200,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17 .BYTE 20,21,22,23,24,25,26,27,30,31,32,200,200,200,200,200 .BYTE 200,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17 .BYTE 20,21,22,23,24,25,26,27,30,31,32,200,200,200,200,200 .EVEN .END