.TITLE TCF TERMINAL CONTROL FUNCTIONS ; ; MCR COMMAND LINE IS USED TO ACQUIRE OCTAL BYTE VALUES, ; SEPERATED BY COMMAS, TO BE PASSED TO THE TERMINAL TO ; SET-UP TERMINAL CONTROL FUNCTIONS. ; ; FOR EXAMPLE; ; ; ">TCF 33,70,7" THIS SETS THE 4014 TERMINAL SIZE ; TO THE LARGEST AND RINGS THE BELL. ; .MCALL DIR$,QIO$,WTSE$,EXIT$S,GMCR$,MRKT$ ; LN =1 ;LOGICAL UNIT NUMBER EFN =1 ;EVENT FLAG NUMBER ; QIO: QIO$ IO.WAL,LN,EFN,,IOSB,, ; FNC =QIO+Q.IOFN ; ADDR OF FUNCTION OFFSET LUN =QIO+Q.IOLU ; ADDR OF LUN OFFSET BUF =QIO+Q.IOPL ; ADDR OF BUFFER OFFSET BYT =QIO+Q.IOPL+2 ; ADDR OF BYTE OFFSET VFC =QIO+Q.IOPL+4 ; ADDR OF FORM OFFSET ; WAIT: WTSE$ EFN ; MCR: GMCR$ ; MCRBUF =MCR+G.MCRB ; ADDR OF MCR BUFFER ; MARKT: MRKT$ 1,1,2 ; TIME =MARKT+M.KTMG ; TIME MAGNITUDE ; ; DATA SPACE ; IOSB: .WORD 0 ; I/O STATUS, READ COUNT: .WORD 0 ; BYTE COUNT, READ ; MSG1: .ASCII <12><15>/SYSTEM DIRECTIVE FAILURE/ MSG1B= .-MSG1 .EVEN MSG2: .ASCII <12><15>/NON-OCTAL VALUE/ MSG2B= .-MSG2 .EVEN ; ; ERROR EXITS ; ERR1: ; DIR$ FAILED MOV #MSG1,BUF MOV #40,VFC MOV #MSG1B,BYT DIR$ #QIO BCS EXIT DIR$ #WAIT BR EXIT ; ERR2: ; NON-OCTAL DATA MOV #MSG2,BUF MOV #40,VFC MOV #MSG2B,BYT DIR$ #QIO BCS EXIT DIR$ #WAIT BR EXIT ; START: DIR$ #MCR ; GET MCR BUFFER BCS ERR1 ; DIR$ FAILED? MOV $DSW,R2 ; ASCII BYTE COUNT SUB #4,R2 ; ASCII "DATA" BYTES TST R2 ; TEST BYTES BLE EXIT ; BAD BYTE COUNT? MOV #MCRBUF,R0 ; ACSII INPUT ADDR ADD #4,R0 ; ASCII "DATA" ADDR MOV #MCRBUF,R3 ; OCTAL "DATA" ADDR CLR BYT ; OCTAL BYTE COUNT CLR R4 ; R4 IS THE OCTAL VALUE 1$: MOVB (R0)+,R1 ; FETCH A CHAR CMPB R1,#60 ; CHK FOR LEGAL DIGIT BLT 3$ ; JMP IF NOT 0-7 CMPB R1,#67 BGT 3$ ; NOT 0-7 BICB #370,R1 ; MASK CHAR ASH #3,R4 ; MAKE ROOM FOR DIGIT BIS R1,R4 ; OR IN DIGIT 2$: SOB R2,1$ ; LOOP INC BYT ; INCREMENT BYTES MOVB R4,(R3)+ MOV #MCRBUF,BUF ; LOAD ADDRESS FOR QIO MOV #0,VFC ; FORMAT CONTROL DIR$ #QIO ; ISSUE WRITE BCS ERR1 ; DIR$ FAILED DIR$ #WAIT ; WAIT FOR I/O DONE BCS ERR1 ; DIR$ FAILED? BR EXIT 3$: CMPB R1,#54 ; ASCII COMMA? BNE ERR2 INC BYT ; INCREMENT OUTPUT BYTES MOVB R4,(R3)+ ; LOAD OCTAL VALUE CLR R4 ; CLEAR DATA BR 2$ ; GET MORE EXIT: ; PGM EXIT MOV BYT,R0 ; LOAD BYTE COUNT BLE 2$ ; NO DATA? MOV #MCRBUF,R1 ; LOAD MCR BUFFER ADDR 1$: CMPB (R1),#14 ; LOOK FOR FORM FEED BEQ 4$ CMPB (R1)+,#27 ; LOOK FOR HARD COPY BEQ 3$ SOB R0,1$ ; LOOP 2$: EXIT$S ; TERMINATE PGM. 3$: MOV #5,TIME ; WAIT 5 SEC FOR HARD COPY 4$: DIR$ #MARKT ; WAIT A SEC. FOR ERRASE BCS ERR1 ; DIR$ FAILED? DIR$ #WAIT ; WAIT FOR I/O BCS ERR1 ; DIR$ FAILED? BR 2$ .END START ; TRANSFER ADDRESS