;*************************************************************************** ; ; 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