.TITLE SPYPLT - SCREEN CONTROL AND CURSOR ADDRESSING SUBRS ; ; SPY VS02.0 OCTOBER 23, 1979 FOR IAS VERSION 3.0 ; ; AERONAUTICAL RESEARCH ASSOCIATES OF PRINCETON (A.R.A.P.) ; BOX 2229, PRINCETON, NJ 08540 (609) 452-2950 ; ; AUTHOR: J.D. LEONARD ; ; .MCALL QIOW$,DIR$ .ENABL AMA ; CESC = 33 ; OUTDPB: QIOW$ IO.WLB!TF.WAL!TF.SYN,1,4,100.,,, ; ; ; ; CLRLN (IROW, ICOL) ; CLEAR TO END OF LINE ; CLRLN:: MOV CETEOL,R3 ; R3 FOR ERASE TO END OF LINE CLEAR: MOV #6,R4 ; NCH TO OUTPUT CALL CHECKB ; CHECK IF ENOUGH ROOM IN BUFFER MOV @2(R5),R0 ; ROW MOV @4(R5),R1 ; COLUMN CALL DCAOT ; DIRECT CURSOR ADDR CHARACTERS MOVB #CESC,(R4)+ ; ESC MOVB R3,(R4)+ ; ERASE TO END OF LINE/SCREEN BR RETURN ; ; ; CLRSCN (IROW, ICOL) ; CLEAR TO END OF SCREEN ; CLRSCN:: MOV CETEOS,R3 ; R3 SET TO ERASE TO END OF SCREEN BR CLEAR ; ; GRPH ; ENTER GRAPH MODE ; GRPH:: MOV CGRPH,R3 ; R3 SET FOR GRAPH MODE BLE RETRN2 ; IF <=0 , GRAPH MODE NOT AVAILABLE GRAPH: MOV #2,R4 ; NCH TO OUTPUT CALL CHECKB ; CHECK IF ENOUGH ROOM IN BUFFER MOVB #CESC,(R4)+ ; ESCAPE MOVB R3,(R4)+ ; GRPH/NOGRPH MODE BR RETURN ; ; ; NOGRPH ; EXIT GRAPH MODE ; NOGRPH:: MOV CNGRPH,R3 ; R3 SET FOR NOGRAPH MODE BLE RETRN2 ; NO GRAPH MODE FOR THIS TERMINAL TYPE BR GRAPH ; ; ; POSCUR (IROW, ICOL) ; POSITION CURSOR ; POSCUR:: MOV #4,R4 ; NCH TO OUTPUT CALL CHECKB ; CHECK IF ENOUGH ROOM IN BUFFER MOV @2(R5),R0 ; ROW MOV @4(R5),R1 ; COLUMN CALL DCAOT ; DIRECT CURSOR ADDR CHARACTERS BR RETURN ; ; ; PSWRIT (BUF, NCH, IROW, ICOL) ; WRITE NCH CHARACTERS FROM BUF ; PSWRIT:: MOV @4(R5),R4 ; NCH TO OUTPUT BLE RETRN2 ; NCH <= 0, DON'T DO ANYTHING ADD #4,R4 ; PLUS 4 FOR DCA CONTROLS CALL CHECKB ; CHECK IF ENOUGH ROOM IN BUFFER MOV @6(R5),R0 ; ROW MOV @10(R5),R1 ; COLUMN CALL DCAOT ; DIRECT CURSOR ADDR CHARACTERS ; ; MOV BUF TO OUTPUT BUFFER ; MOV @4(R5),R0 ; NCH TO MOVE MOV 2(R5),R1 ; INPUT BUFFER ADDRESS L1: MOVB (R1)+,(R4)+ SOB R0,L1 ; LOOP TILL DONE BR RETURN ; ; RETURN: MOV R4,BUFADR ; SAVE UPDATED BUFFER ADDR FOR NEXT TIME RETRN2: RETURN ; ; ; FLUSHB ; FLUSH ALL CHARACTERS IN BUFFER ; FLUSHB:: CMP BUFADR,#BUF ; SAME ADDR ? BEQ FEXIT ; YES, BUFFER'S EMPTY, GET OUT SUB #BUF,BUFADR ; NCH MOV BUFADR,OUTDPB+Q.IOPL+2 DIR$ #OUTDPB MOV #BUF,BUFADR ; RESET TO START OF BUFFER FEXIT: RETURN ; ; ; INTERNAL ROUTINES ; ; CHECKB - CHECK IF BUFFER FULL ; # OF CHARACTERS TO MOVE TO BUFFER IN R4, BUFFER ADDRESS ; RETURNED IN R4. ; CHECKB: ADD BUFADR,R4 ; CURRENT + CMP R4,#BUFEND ; PAST END OF BUFFER? BLT CHKEX ; NOPE CALL FLUSHB CHKEX: MOV BUFADR,R4 RETURN ; ; DCAOT - DIRECT CURSOR ADDRESSING OUTPUT ; DCAOT: ADD CDCAAD,R0 ADD CDCAAD,R1 MOVB #CESC,(R4)+ MOVB CDCA,(R4)+ MOVB R0,(R4)+ MOVB R1,(R4)+ RETURN ; .PSECT SPYPCM RW,D,OVR,GBL CETEOL: .WORD 0 ; ERASE TO END OF LINE CETEOS: .WORD 0 ; ERASE TO END OF SCREEN CDCA: .WORD 0 ; DIRECT CURSOR ADDRESSING CDCAAD: .WORD 0 ; ADD TO LINE# COL# FOR DIRECT ADDRESSING CGRPH: .WORD 0 ; ENTER GRAPH MODE CNGRPH: .WORD 0 ; EXIT GRAPH MODE CGCHAR: .WORD 0 ; CHARACTER TO DISPLAY FOR GRAPHING ; ; FOLLOWING IS BUFFER AREA FOR WRITES ; BUF: .BLKB 100. BUFEND=. BUFADR: .WORD BUF ; .END