C C C AUTHOR: C BOB MCCASKEY C REPUBLIC MANAGEMENT SYSTEMS INC. C ONE NESHAMINY INTERPLEX, SUITE 306 C TREVOSE, PA. 19044 C C ******************************************************* C * * C * * C * * C * DIRECT INQUIRIES TO: * C * * C * BOB MCCASKEY * C * REPUBLIC MANAGEMENT SYSTEMS * C * ONE NESHAMINY INTERPLEX, SUITE 306 * C * TREVOSE, PA. 19044 C * * C * NO WARRANTY OR REPRESENTATION, EXPRESS OR * C * IMPLIED, IS MADE WITH RESPECT TO THE * C * CORRECTNESS, COMPLETENESS, OR USEFULNESS * C * OF THIS SOFTWARE, NOR THAT USE OF THIS * C * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * C * OWNED RIGHTS. * C * * C * NO LIABILITY IS ASSUMED WITH RESPECT TO * C * THE USE OF, OR FOR DAMAGES RESULTING FROM * C * THE USE OF THIS SOFTWARE * C * * C ******************************************************* C * * C * THIS SOFTWARE WAS DESIGNED FOR USE ON A * C * PDP-11/70 OPERATING UNDER IAS V3.0. * C * * C ******************************************************* C SUBROUTINE OPENS COMMON/SC1/ITYPE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCC OPENS CCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C SUBROUTINE TO OPEN A V.D.T. WITH PROPER PARAMETERS FOR USE C IN 80*24 MODE OF DISPLAY AND VALIDATE FOR VT52 OR VT100 ORIGIN CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC OPEN(UNIT=5,NAME='TI:',CARRIAGECONTROL='FORTRAN') CALL SETTTY(ITYPE) IF (ITYPE.EQ.0)WRITE(5,11) 11 FORMAT(' INVALID TERMINAL TYPE CHECK SCREEN ROUTINES') IF (ITYPE.EQ.0) STOP C SET THE CHARACTERISTICS IN MACRO CALL C THEN ERASE THE V.D.T. CALL ERASE RETURN END SUBROUTINE ERASE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCC ERASE CCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C MOVE THE CURSOR TO POSITION 1,1 ON THE V.D.T. AND ERASE FROM CURRENT C POSITION TO END OF THE SCREEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BYTE CTL(4) DATA CTL/"033,'H',"033,'J'/ WRITE(5,1)CTL 1 FORMAT('+',4A1) RETURN END SUBROUTINE GRAPH (IRO,ICO,CH) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC COMMON/SC1/ITYPE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC GRAPH CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C SUBROUTINE TO ENTER GRAPHICS MODE AND DISPLAY THE CHARACTER (CH) C AT COORDINATES SPECIFIED (IRO,ICO); GRAPHICS MODE IS THEN EXITED C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC INTEGER IRO,ICO BYTE CTT(11) INTEGER CH DATA CTT/"033,'Y',' ',' ',"033,'F',' ',"033,'H',"033,'G'/ CTT(3)=IRO+"037 IF (ITYPE.NE.100) RETURN CTT(4)=ICO+"037 CTT(7)=CH WRITE(5,22)CTT 22 FORMAT('+',11A1) RETURN END SUBROUTINE BEEP CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCC BEEP CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C PRODUCE AN AUDIBLE SIGNAL FROM THE V.D.T. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BYTE CTL(2) DATA CTL/"07,"00/ WRITE(5,1)CTL 1 FORMAT('+'2A1) RETURN END C C C SUBROUTINE SHOW(IROW,ICOL,ILEN,BUFF) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCC SHOW CCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C ROUTINE TO DISPLAY ON THE TERMINAL THE STRING (BUFF) STARTING C AT THE ROW SPECIFIED BY IROW AND COLUMN SPECIFIED BY ICOL C FOR A LENGTH SPECIFIED BY ILEN. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BYTE CTL(4),BUFF(80) INTEGER IROW,ICOL,ILEN DATA CTL/"033,'Y',' ',' '/ CTL(3)=IROW+"037 CTL(4)=ICOL+"037 WRITE(5,1)CTL,(BUFF(I),I=1,ILEN) 1 FORMAT('+',4A1,80A1) RETURN END SUBROUTINE GETSCR(INTROW,ICOL,ILEN,ITERM,BUFFER) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC GETSCR CCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C ROUTINE TO ALLOW DATA INPUT FROM THE V.D.T. INTO A BYTE BUFFER C THE CURSOR IS POSITIONED AT COORDINATES INTROW AND ICOL. C THE LENGTH OF THE READ IS MAXIMIZED BY ILEN BUT MAY BE SHORTENED C BY A TERMINATION CHARACTER WHICH, IF HIT, WILL BE RETURNED IN ITERM C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BYTE CTLL(4),BUFFER(132) INTEGER INTROW,ICOL,ILEN,ITERM INTEGER*2 ISTAT(2),IPRM(6) BYTE ANS(2) DATA CTLL/"033,'Y',' ',' '/ DATA IFNC/"11000/ DO 2243 I=1,ILEN 2243 BUFFER(I)=' ' I=1 CTLL(3)=INTROW+"037 543 CTLL(4)=ICOL+"037+I-1 ITERM=0 1 FORMAT(4A1) CALL GETADR(IPRM,CTLL) IPRM(2)=4 CALL QIO(IFNC,5,3,100,ISTAT,IPRM,ISW) 99 CONTINUE CALL GETKEY(ANS(1)) CALL SHOW(INTROW,(ICOL+I-1),1,ANS) 2 FORMAT(2A1) IF (ANS(1).EQ.8.OR.ANS(1).EQ.127) GOTO 54 GOTO 55 54 CONTINUE C C C C C C BACKSPACE OR DELETE ROUTINE C C C 879 I=I-1 IF(I.EQ.0)I=1 880 IPOS=ICOL+I-1 CTLL(4)=IPOS+"037 CALL QIO(IFNC,5,3,100,ISTAT,IPRM,ISW) IF (ILEN.GT.1) GOTO 99 ITERM=ANS(1) GOTO 666 55 IF (ANS(1).EQ.13.OR.ANS(1).EQ.9.OR.ANS(1).EQ.10) GOTO 88 IF (ANS(1).NE.27) GOTO 123 678 CALL NOECO(ANS(1)) IF (ANS(1).EQ.'?') GOTO 678 IF(ANS(1).EQ.68)GOTO 879 IF(ANS(1).NE.67) GOTO 88 I=I+1 IF (I.GT.ILEN) GOTO 666 GOTO 880 88 ITERM=ANS(1) GOTO 666 123 BUFFER(I)=ANS(1) I=I+1 IF (I.GT.ILEN) GOTO 666 GOTO 543 666 RETURN END C C C C C C C C SUBROUTINE BLOCK(INTROW,INTCOL,KROW,KCOL) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCC BLOCK CCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C COMMON/SC1/ITYPE C C ROUTINE TO DRAW A BOX ON THE V.D.T. THE UPPER LEFT COORDINATES C ARE SPECIFIED BY INTROW AND INTCOL; THE LOWER RIGHT COORDINATES ARE C SPECIFIED BY KROW AND KCOL. C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C INTEGER INTROW,INTCOL,KROW,KCOL BYTE BUF(78) BYTE CTLL(4) BYTE SET(2) BYTE CTL(4) DATA CTLL/"033,'Y',' ',' '/ DATA CTL/"033,'H',"033,'G'/ DATA SET/"033,'F'/ DATA BUF/78*"161/ IF (ITYPE.NE.100) RETURN C FIRST DRAW THE CORNERS CALL GRAPH(INTROW,INTCOL,"154) CALL GRAPH(INTROW,KCOL,"153) CALL GRAPH(KROW,INTCOL,"155) CALL GRAPH(KROW,KCOL,"152) CTLL(3)=("037+INTROW) CTLL(4)=("037+INTCOL+1) WRITE(5,40)SET 40 FORMAT('+',4A1) WRITE(5,123)CTLL,(BUF(I),I=(INTCOL),(KCOL-2)) CTLL(3)=("037+KROW) WRITE(5,123)CTLL,(BUF(I),I=(INTCOL),(KCOL-2)) 123 FORMAT('+',4A1,78A1) DO 34 I=(INTROW+1),(KROW-1) CALL GRAPH(I,INTCOL,"170) 34 CALL GRAPH(I,KCOL,"170) WRITE(5,38)CTL 38 FORMAT('+',4A1) RETURN END C C C SUBROUTINE CLEAR(INTROW,INTCOL,INTLEN) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCC CLEAR CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C USED TO ERASE FIELDS ON THE SCREEN STARTING AT COORDINATES C SPECIFIED BY INTROW AND INTCOL FOR THE LENGTH SPECIFIED C IN INTLEN... C BYTE BLANKS(80) DATA BLANKS/80*"040/ CALL SHOW(INTROW,INTCOL,INTLEN,BLANKS) RETURN END C C C C C C C C C C C C C C C C C C SUBROUTINE REVER(IROW,ICOL,ILEN,BUFF) COMMON/SC1/ITYPE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCC REVER CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C THIS ROUTINE EXITS VT52 MODE AND ENTERS ANSI TO PERMIT USE C OF REVERSE OPTION ON A VT52 A SHOW WILL RESULT BYTE CTL(4),BUFF(80),CLEAR(4) BYTE ANSI(6) BYTE VT52(5) BYTE DUMB(1) INTEGER IROW,ICOL,ILEN IF (ITYPE.NE.100) CALL SHOW(IROW,ICOL,ILEN,BUFF) IF (ITYPE.NE.100) RETURN DATA ANSI/"033,'<',"033,'[','7',"155/ DATA VT52/"033,'[','?','2',"154/ DATA CTL/"033,'Y',' ',' '/ DATA CLEAR/"033,'[','0',"155/ CTL(3)=IROW+"037 CTL(4)=ICOL+"037 WRITE(5,1)CTL,ANSI,(BUFF(I),I=1,ILEN),CLEAR,VT52 1 FORMAT('+',4A1,6A1,80A1,4A1,5A1) RETURN END CCC C C C C C C SUBROUTINE WIDE(IROW,ICOL,ILEN,BUFF) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC COMMON/SC1/ITYPE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCC WIDE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ROUTINE USED TO ENTER ANSI MODE AND SHOW BUFF ON THE TERMINAL IN C DOUBLE WIDE MODE, THIS WILL CHANGE ALL PREVIOUS DISPLAYS ON THE C CURRENT LINE TO DOUBLE WIDTH CHARACTERS!! C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BYTE CTL(4),BUFF(80),CLEAR(4) BYTE ANSI(6) BYTE VT52(6) INTEGER IROW,ICOL,ILEN DATA ANSI/"033,'<',"033,'#','6',' '/ DATA CTL/"033,'Y',' ',' '/ DATA VT52/"033,'[','?','2',"154,' '/ IKL=ICOL*2 IF (ITYPE.NE.100) CALL SHOW(IROW,IKL,ILEN,BUFF) IF (ITYPE.NE.100) RETURN CTL(3)=IROW+"037 CTL(4)=(ICOL-1)+"037 WRITE(5,1)CTL,ANSI,(BUFF(I),I=1,ILEN),VT52 1 FORMAT('+',4A1,5A1,80A1,5A1) RETURN END C C C C C THIS SUBROUTINE PRODUCES DOUBLE-HIGH DOUBLE-WIDE C LINES BUT ALL THE PRINTING ON LINE SPECIFIED C WILL BE DOUBLED SO WATCH OUT C C SUBROUTINE HIGH(IROW,ICOL,ILEN,BUFF) COMMON/SC1/ITYPE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCC HIGH CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C ROUTINE TO DISPLAY IN DOUBLE-HIGH DOUBLE-WIDE THE STRING BUFF C STARTING AT COORDINATES IROW,ICOL FOR THE LENGTH SPECIFIED IN ILEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC BYTE CTL(4),BUFF(80),CLEAR(4) BYTE ANSI(6) BYTE VT52(6) INTEGER IROW,ICOL,ILEN DATA ANSI/"033,'<',"033,'#',' ',' '/ DATA CTL/"033,'Y',' ',' '/ DATA VT52/"033,'[','?','2',"154,' '/ ANSI(5)='3' IKL=ICOL*2 IF (ITYPE.NE.100) CALL SHOW(IROW,IKL,ILEN,BUFF) IF (ITYPE.NE.100) RETURN CTL(3)=IROW+"037 CTL(4)=(ICOL-1)+"037 C WRITE(5,1)CTL,ANSI,(BUFF(I),I=1,ILEN),VT52 CTL(3)=CTL(3)+1 ANSI(5)='4' WRITE(5,1)CTL,ANSI,(BUFF(I),I=1,ILEN),VT52 1 FORMAT('+',4A1,5A1,80A1,5A1) RETURN END