; TRMTYP.SBR
; SUBROUTINE TO DETERMINE & PASS BACK TO BASIC THE
; TYPE OF THE TERMINAL ATTACHED TO THE CURRENT JOB.
;
; VERSION 1.0 - 03/03/84 - D. EICHBAUER
; VERSION 1.1 - 09/08/84 - ALSO RETURN TERMINAL CHARACTERISTICS
; AS AN OPTION. D.E.
;
;
; PROPRIETARY PROGRAM MATERIAL
;
; THIS MATERIAL IS THE PROPERTY OF DALE A. EICHBAUER,
; 692 E. FREELAND ROAD, MERRILL, MICHIGAN, 48637. PERMISSION
; TO COPY & USE IS GRANTED FOR NON-PROFIT USES ONLY.
;
;
;
;
; FORMAT OF CALL IS: XCALL TRMTYP,ENTRY (,CHARACTERISTICS,ROWS,COLUMNS,
; COLORS,FOREGROUND,BACKGROUND)
; WHERE ENTRY IS A STRING AT LEAST 6 LONG. UPON RETURNING
; TO BASIC, ENTRY WILL CONTAIN NAME OF TERMINAL TYPE.
; CHARACTERISTICS IS A "STRING" AT LEAST 20 CHARACTERS LONG
; WHICH WILL BE FILLED WITH "T" & "F" FLAGS BASED ON THE
; CHARACTERISTICS OF THE PARTICULAR TERMINAL.
; ROWS IS THE NUMBER OF ROWS SUPPORTED BY THE TERMINAL.
; COLUMNS IS THE NUMBER OF COLUMNS SUPPORTED BY THE TERMINAL.
; COLORS IS THE NUMBER OF DIFFERENT COLORS SUPPORTED BY THE
; TERMINAL.
; FOREGROUND IS THE CURRENT FOREGROUND COLOR NUMBER.
; BACKGROUND IS THE CURRENT BACKGROUND COLOR NUMBER.
;
; TERMINAL FLAGS FROM SYSSYM AS OF AMOS/L VERSION 1.2:
;
; TD$ALP = 1 ; HAS ALTERNATE PAGE
; TD$BLF = 2 ; HAS BLOCK FILL
; TD$KID = 4 ; HAS COLUMN INSERT/DELETE
; TD$CLR = 10 ; HAS COLOR CAPABILITY
; TD$MLT = 20 ; HAS MULTI-KEY (FUNCTION KEY) TRANSLATION
; TD$AMS = 40 ; AN ALPHATERMINAL (ADDRESSABLE STATUS LINES)
; TD$STS = 100 ; HAS STATUS LINE
; TD$SPL = 200 ; HAS HORIZONTAL SPLIT SCREEN
; TD$EOL = 400 ; HAS ERASE TO END OF LINE
; TD$EOS = 1000 ; HAS ERASE TO END OF SCREEN
; TD$UND = 2000 ; HAS UNDERSCORE
; TD$BLN = 4000 ; HAS BLINK
; TD$DIM = 10000 ; HAS DIM
; TD$RVA = 20000 ; HAS REVERSE VIDEO
; TD$CID = 40000 ; HAS CHARACTER INSERT/DELETE
; TD$LID = 100000 ; HAS LINE INSERT/DELETE
; TD$PRT = 200000 ; HAS PRINTER SUPPORT
; TD$132 = 400000 ; HAS 80/132 COLUMN SUPPORT
; TD$SMT = 1000000 ; HAS SMOOTH SCROLL
; TD$BOX = 2000000 ; HAS "BOX" COMMANDS
; TD$LCL = 200
; TD$NEW = 2000
; TD$TCH = 4000
;
; CHARACTERISTICS BLOCK LAYOUT AS RETURNED BY TRMCHR:
; TC.FLG = 0 ; THE ABOVE FLAGS
; TC.ROW = 4 ; A WORD CONTAINING # OF ROWS
; TC.COL = 6 ; A WORD CONTAINING # OF COLUMNS
; TC.CLR = 10 ; A WORD CONTAINING # OF COLORS
; TC.FGC = 12 ; A WORD CONTAINING CURRENT FOREGROUND
; TC.BGC = 14 ; A WORD CONTAINING CURRENT BACKGROUND
; TC.WNR = 16 ; RESERVED FOR FUTURE USE
; TC.WNC = 20 ; RESERVED FOR FUTURE USE
; TC.SPR = 22 ; SIX BYTES OF SPARE AREA
; TC.CMP = 32 ; RESERVED FOR FUTURE USE
; TC.SIZ = 32 ; CURRENT SIZE OF THIS BLOCK
; TC.SZC = 132 ; TOTAL SIZE OF THIS BLOCK
SEARCH SYS
SEARCH SYSSYM
AUTOEXTERN
OBJNAM TRMTYP.SBR
VMAJOR=1.
VMINOR=1.
VSUB=0.
VEDIT=100.
VWHO=1.
; OFFSETS FROM A3 FOR PARAMETERS PASSED FROM BASIC
BR START
ASCII / COPYRIGHT (C) 1983, 1984 DALE A. EICHBAUER /
EVEN
START: TSTW @A3 ; MAKE SURE AT LEAST ONE PARAMETER
JLE BASIC ; ELSE ERROR
CLEAR @A4,100 ; CLEAR OUR FREE SPACE
JOBIDX A6
MOV JOBTRM(A6),A1 ; POINT TO TRMDEF
MOV 16(A1),A1 ; NOW GET ADDRESS OF TRM DRIVER
SUB #4,A1 ; STEP BACK 4 BYTES FOR NAME
MOV ADD.1(A3),A2 ; GET ADDRESS OF BASIC STRING
UNPACK
UNPACK
CMPW PARMS(A3),#1 ; SEE IF ONLY NAME DESIRED
JEQ BASIC ; IF SO, GET BACK
TRMCHR @A4 ; GET THE CHARACTERISTICS
MOV SIZE.2(A3),D1 ; GET THE ARGUMENT SIZE
CMP D1,#20. ; SEE IF AT LEAST 20 LONG
BLT BASIC ; IF NOT, GET OUT
MOV #20.,D1 ; SET OUR LOOP FOR 20
MOV ADD.2(A3),A1 ; POINT TO OUR VARIABLE
MOV @A4,D2 ; GET THE TERMINAL CHARACTERISTICS FLAGS
LOOP: ROR D2 ; SHIFT THE LOW BIT INTO THE CARRY
BCC FALSE ; IF CLEAR, THEN FALSE ATTRIBUTE
MOVB #'T,(A1)+ ; MAKE THIS ONE TRUE
BR STEP ;
FALSE: MOVB #'F,(A1)+ ; MAKE THIS ONE FALSE
STEP: SOB D1,LOOP ; LOOP BACK TILL DONE
CMPW PARMS(A3),#2 ; SEE IF LAST PARAMETER
BEQ BASIC ; IF SO, ALL DONE
MOV ADD.3(A3),A1 ; GET ADDRESS OF ROW PARAMETER
MOVB TC.ROW(A4),(A1)+ ; GET THE FIRST BYTE
MOVB TC.ROW+1(A4),(A1)+ ; THEN THE SECOND
CMPW PARMS(A3),#3 ; SEE IF LAST PARAMETER
BEQ BASIC ; IF SO, ALL DONE
MOV ADD.4(A3),A1 ; GET ADDRESS OF COLUMN PARAMETER
MOVB TC.COL(A4),(A1)+ ; GET THE FIRST BYTE
MOVB TC.COL+1(A4),(A1)+ ; THEN THE SECOND
CMPW PARMS(A3),#4 ; SEE IF LAST PARAMETER
BEQ BASIC ; IF SO, ALL DONE
MOV ADD.5(A3),A1 ; GET ADDRESS OF COLOR PARAMETER
MOVB TC.CLR(A4),(A1)+ ; GET THE FIRST BYTE
MOVB TC.CLR+1(A4),(A1)+ ; THEN THE SECOND
CMPW PARMS(A3),#5 ; SEE IF LAST PARAMETER
BEQ BASIC ; IF SO, ALL DONE
MOV ADD.6(A3),A1 ; GET ADDRESS OF FOREGROUND PARAMETER
MOVB TC.FGC(A4),(A1)+ ; GET THE FIRST BYTE
MOVB TC.FGC+1(A4),(A1)+ ; THEN THE SECOND
CMPW PARMS(A3),#6 ; SEE IF LAST PARAMETER
BEQ BASIC ; IF SO, ALL DONE
MOV ADD.7(A3),A1 ; GET ADDRESS OF BACKGROUND PARAMETER
MOVB TC.BGC(A4),(A1)+ ; GET THE FIRST BYTE
MOVB TC.BGC+1(A4),(A1)+ ; THEN THE SECOND
BASIC: RTN
ASCII / COPYRIGHT (C) 1983, 1984 DALE A. EICHBAUER /
EVEN