.TITLE GETTERM ;+ ; ; 3-MAY-82 D. O'REILLY ; ; 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. ; ;- .MCALL QIOW$C,EXIT$S,ALUN$C,ASTX$S,WTSE$C,SETF$C .MCALL CLEF$C,MRKT$C,CMKT$C .ENABL LC BUFF: .BLKB 20. OUT: .ASCII <33><132> ;Z (WHO ARE YOU?) TYPE: .WORD 0 CHRCNT: .WORD 0 ALLDON: .WORD 0 LINE1: .ASCII /This program was unable to properly identify your terminal./ L1LEN =.-LINE1 .EVEN LINE2: .ASCII ?Please issue the proper SET /TERM command to do so.?<15><12> L2LEN =.-LINE2 .EVEN SETTRM: .BYTE TC.TTP TRMTYP: .BYTE 0 ;NOTE-THIS IS ALSO 'UNKNOWN' TYPE .BYTE T.VT52 ;VT52 .BYTE T.V100 ;VT100 .BYTE T.L120 ;LA120 .BYTE T.V102 ;VT102 .EVEN START: ALUN$C 1,TI,0 ;ASSIGN THE LUN QIOW$C IO.ATT!TF.ESQ,1,1 ;ATTACH FOR ESC SEQ RECEPTION BCC GOON ;ERROR? MOVB $DSW,R0 ;YES, GIVE US THE ERROR CLR R1 BPT GOON: MOV #BUFF,R1 ;OUR CHARACTER BUFFER QIOW$C IO.WVB,1,1,,,, ;WHAT ARE YOU? NEXT: QIOW$C IO.RAL!TF.RNE,1,1,,,, ;I AM..... MRKT$C ,1,2,EXPIRE ;MARK TIME FOR 10 CLOCK TICKS WTSE$C 1 ;WAIT FOR EF 1 TST ALLDON ;ANYTHING READ IN? BNE DONE ;NO, WE'RE ALL DONE TST TYPE ;HAVE WE IDENTIFIED SOMETHING YET? BNE NEXT ;YES, JUST LOOP TO THE END OF INPUT INC CHRCNT ;NUMBER OF CHARS READ SO FAR CMP #1,CHRCNT ;FIRST CHARACTER? BEQ NEXT ;YES, IGNORE IT CMP #2,CHRCNT ;SECOND CHARACTER? BNE TSTMOR ;NO, DO SOME OTHER STUFF CMPB (R1),#57 ;SLASH? BNE NEXT ;NO, MUST BE A VT100/LA120/ETC. BPT MOV #1,TYPE ;YES, IS SOMETHING IN VT52 MODE. JMP NEXT ;GET ANOTHER CHARACTER TSTMOR: CMP #4,CHRCNT ;FOURTH CHARACTER? BNE NEXT ;NO, BUT WE ALREADY KNOW WHAT TO DO NOW ;SO WE CAN IGNORE EVERYTHING ELSE. CMPB (R1),#61 ;IS THIS A 1 (VT100)? BNE CHK2 ;NO, MAYBE AN LA120 MOV #2,TYPE ;YES!!!! JMP NEXT ;GET SOMETHING ELSE CHK2: CMPB (R1),#62 ;HOW ABOUT A 2 (LA120)? BNE CHK3 ;NO, RIGHT NOW WE DON'T KNOW WHAT IT IS MOV #3,TYPE ;FLAG IT AS LA120 JMP NEXT ;GET ANOTHER CHARACTER CHK3: CMPB (R1),#66 ;IS IT A VT102 (6)? BNE CANTID ;NO, SORRY ABOUT THAT MOV #4,TYPE ;YES JMP NEXT ;GO GET ANOTHER CHARACTER CANTID: QIOW$C IO.WVB,5,1,,,, ;SORRY V1.0 QIOW$C IO.WVB,5,1,,,, ;SORRY V2.0 DONE: QIOW$C IO.KIL,1,1 ;KILL THE I/O ; CMP #1,ALLDON ;ABNORMAL EXIT ; BNE GOHOME ;YES, SKIP THIS STUFF MOV #TRMTYP,R0 ;ADDRESS OF TYPE ADD TYPE,R0 ;GET ADDRESS OF TRUE TERMINAL TYPE MOVB (R0),TRMTYP ;AND PUT IT IN TYPE BYTE FOR QIO QIOW$C SF.SMC,1,1,,,, ;SET THE TERMINAL TYPE UP PROPERLY EXIT$S ;GOODBYE! 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 START