.TITLE GETTERM ;+ ; ; 3-MAY-82 D. O'REILLY ; Modified : ; 2-JUN-82 -- to use unsolicisited character AST ; and print what it set the type to. ; D. Carroll ; ; Program to ask a terminal what it is, and do the proper ; set multiple characteristic for the terminal. Currently, this ; program will identify a VT52, VT100, VT102, or LA120. ; ; Fortran callable subroutine to determine terminal type. ; ; Calling sequence : ; CALL TERM(TYPE) ; where TYPE = 0 is undefined ; = 1 is VT52 ; = 2 is VT100 ; ; ;- .MCALL QIOW$C,EXIT$S,ALUN$C,ASTX$S,WTSE$C,SETF$C .MCALL CLEF$C,MRKT$C,CMKT$C,DIR$,QIOW$ .ENABL LC .PSECT DATA,RW,D OUT: .ASCII <33><132> ;Z (WHO ARE YOU?) CHRCNT: .WORD 0 TYPE: .WORD 0 ALLDON: .WORD 0 .EVEN .PSECT TERM:: QIOW$C IO.ATA,5,1,,,, BCC GOON ;ERROR? MOVB $DSW,R0 ;YES, GIVE US THE ERROR CLR R1 BPT GOON: QIOW$C IO.WVB,5,1,,,, ;WHO ARE YOU? MRKT$C ,1,2,EXPIRE CLEF$C 1 WTSE$C 1 ; get anything BR DONE NEXT: CMKT$C MRKT$C ,10.,1,EXPIRE MOV (SP)+,R1 ;OUR CHARACTER WE JUST READ IN TST TYPE ;HAVE WE IDENTIFIED SOMETHING YET? BNE GOTBRK ;YES, JUST LOOP TO THE END OF INPUT INC CHRCNT ;NUMBER OF CHARS READ SO FAR CMP #1,CHRCNT ;FIRST CHARACTER? BEQ GOTBRK ;YES, IGNORE IT CMP #2,CHRCNT ;SECOND CHARACTER? BNE TSTMOR ;NO, DO SOME OTHER STUFF MOV #'/,R2 ; Test for a slash CMPB R1,R2 ;SLASH? BNE GOTBRK ;NO, MUST BE A VT100/LA120/ETC. MOV #1,TYPE ;YES, IS SOMETHING IN VT52 MODE. GOTBRK: ASTX$S ;GET ANOTHER CHARACTER TSTMOR: CMP #4,CHRCNT ;FOURTH CHARACTER? BNE GOTBRK ;NO, BUT WE ALREADY KNOW WHAT TO DO NOW ;SO WE CAN IGNORE EVERYTHING ELSE. CMP R1,#61 ;IS THIS A 1 (VT100)? BNE CHK2 ;NO, MAYBE AN LA120 MOV #2,TYPE ;YES!!!! BR GOTBRK ;GET SOMETHING ELSE CHK2: CMP R1,#66 ;IS IT A VT102 (6)? BNE GOTBRK ;NO, SORRY ABOUT THAT MOV #2,TYPE ;YES BR GOTBRK ;GO GET ANOTHER CHARACTER ;GOODBYE! DONE: QIOW$C IO.DET,5,1 MOV TYPE,@2(R5) ; zap in the type RETURN EXPIRE: TST (SP)+ ;MRKT EXPIRED, FIRST POP STACK, MOV #1,ALLDON ;THEN FLAG THAT WE'RE ALL DONE SETF$C 1 ;SET EF 1 ASTX$S ;NOW BACK TO OUR PROGRAM .END