;***************************************************************************
; 
; 	                        WINDOW.M68
; 
; 
;		       Written By: James A. Jarboe IV
;			      1401 19th Street 
;			    Huntsville, TX 77340
;				409-295-5767
;                                  GR/AM
;
;				  02/23/86
;                 Copyright (C)  James A. Jarboe IV
;****************************************************************************
; Description:	Draws an alternate set graphics window border as per user's
;		Specs.
;
;
; Usage:  XCALL WINDOW, START'ROW, START'COL, COL'LONG, ROW'DEEP
;
; Where:  
;	START'ROW = Row to start window border on
;	START'COL = Column to start window border on
;	COL'LONG  = Number of columns horizontal line is to be
;	ROW'DEEP  = Number of rows vertical line is to be
;
;
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;  Be sure to LNKLIT WINDOW after assembly to get extern arguments
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

	OBJNAM  WINDOW.SBR
	
	EXTERN	$GTARG

	SEARCH	SYS
	SEARCH  SYSSYM
	SEARCH	TRM
ASECT
.=0
XP.TOP:	BLKW	1
XA.TYP:	BLKW	1
XA.ADR:	BLKL	1
XA.SIZ:	BLKL	1
XB.TYP:	BLKW	1
XB.ADR:	BLKL	1
XB.SIZ:	BLKL	1
XC.TYP:	BLKW	1
XC.ADR:	BLKL	1
XC.SIZ:	BLKL	1
XD.TYP:	BLKW	1
XD.ADR:	BLKL	1
XD.SIZ:	BLKL	1
XE.TYP:	BLKW	1
XE.ADR:	BLKL	1
XE.SIZ:	BLKL	1

	PSECT

.OFINI
.OFDEF	STRROW,2			; starting row #
.OFDEF  STRCOL,2			; starting column #
.OFDEF	COLLNG,2			; number of columns
.OFDEF  ROWLNG,2			; number of rows
.OFSIZ	MEMSIZ


ROW=D2
COL=D3


	PHDR	-1,0,PH$REE!PH$REU
;
; Check for variable & set up variables
;

	CMMW 	XP.TOP(A3),#4 		; at least 4 variables
	JNE	BADPARM			; no ... then quit

	MOV	#XA.TYP,D1		; get start row
	CALL 	$GTARG			; get floating point #
	MOVW	D1,STRROW(A4)		; start row

	MOV	#XB.TYP,D1		; start col
	CALL	$GTARG			; get floating point #
	MOVW	D1,STRCOL(A4)		; start col

	MOV	#XC.TYP,D1  		; # of col
	CALL	$GTARG			; get floating point #
	MOVW	D1,COLLNG(A4)		; # of col

	MOV	#XD.TYP,D1		; # of row
	CALL 	$GTARG			; get floating point #
	MOVW	D1,ROWLNG(A4)		; # of row

;Alternate character set - here we set to graphics mode and send it
;to the terminal via it's TCRT call -1,23

SETALT:	
	MOV	#-1_8.+23.,D1		; set alternate char set on
	TCRT

;Position the cursor - here we make the high order of D1 = the row
;and the low order of D1 = the column and then send it to the terminal
;to set the first position of the window

POSCUR:
	MOVW	STRROW(A4),D1		; move row to d1
	LSL	D1,#8.			; make row high order
	ADDW	STRCOL(A4),D1		; add col to d1
	TCRT
	MOV	#-1_8.+38.,D1		; top left corner -1,38
	TCRT
	MOV	#1,COL			; make COL = 1

;Horizontal line - here we draw the top horizontal line

HORI:
	INC	COL			; add 1 to column
	CMMW	COLLNG(A4),COL		; are we at end of column length ?
	BEQ	TRC			; yes .. goto top right corner
	MOV	#-1_8.+46.,D1		; horizontal line -1,46
	TCRT
	BR	HORI			; do it again
TRC:
	MOV	#-1_8.+39.,D1		; top right corner -1,39
	TCRT
	MOVW	STRROW(A4),ROW		; move starting row to ROW
	MOVW	STRCOL(A4),COL		; move starting column to COL
	SUB	#1,COL
	MOV	#1,D4

;Vertical line - here draw the vertical sides by using the starting column
;position and adding the column length to print the right side

VERT:
	INC	ROW			; add 1 to Row
	INC 	D4
	CMMW	ROWLNG(A4),D4		; are we at at last row
	JEQ	BOTTOM			; yes ... goto bottom line
	MOVW	ROW,D1		        ; get row position
	LSL	D1,#8.			; move it to high order
	ADDW	STRCOL(A4),D1		; add column position
	TCRT				; place cursor
	MOV	#-1_8.+47.,D1		; vertical line -1,47
	TCRT				; print it
	MOVW	ROW,D1			; get row again
	LSL 	D1,#8.			; move it to high order
	ADDW	COL,D1   		; get starting column
	ADDW	COLLNG(A4),D1		; add column length
	TCRT				; place cursor there
	MOV	#-1_8.+47.,D1		; vertical line -1,47
	TCRT				; print it on right side
	JMP	VERT			; do it again

;bottom line - here we draw the bottom of the window just like we drew the
;top line

BOTTOM:
	MOVW	STRROW(A4),D1		; get starting row
	SUB	#1,D1
	ADDW	ROWLNG(A4),D1		; add number of rows
	LSL	D1,#8.			; move it to high order
	ADDW	STRCOL(A4),D1		; get starting column
	TCRT				; place cursor there
	MOV	#-1_8.+40.,D1		; bottom left corner -1,40
	TCRT				; print it
	MOV 	#1,D4
BOTLOP:
	INC 	D4
	CMMW	COLLNG(A4),D4 		; are we at column length yet
	BEQ	BORC			; yes .. goto bottom right  corner
	MOV	#-1_8.+46.,D1		; print horizontal line -1,46
	TCRT
	BR	BOTLOP			; do it again
BORC:
	MOV	#-1_8.+41.,D1		; print bottom right corner -1,41
	TCRT				; print it

;Alternate graphic set off - here we get out of the graphic mode
;and return home to basic

GO:
	MOV	#-1_8.+24.,D1		; set alternate character set off
					; -1,24
	TCRT				; do it
	RTN				; back to basic

BADPARM:
	TYPECR	Not enough Variables passed to subroutine
	RTN

OUTOF:
	EXIT
	END