User Tools

Site Tools


cdc:nos2.source:opl.opl871:deck:virterm

Deck VIRTERM

Library Member Format: MODIFY

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M00S00001.virterm +++|PROC VIRTERM;
00002  M00S00002.virterm +++|
00003  M00S00003.virterm +++|# TITLE VIRTERM - VIRTUAL TERMINAL INTERFACE. #
00004  M00S00004.virterm +++|
00005  M00S00005.virterm +++|BEGIN  # VIRTERM #
00006  M00S00006.virterm +++|
00007  M00S00007.virterm +++|#
00008  M00S00008.virterm +++|***   VIRTERM - VIRTUAL TERMINAL INTERFACE.
00009  M00S00009.virterm +++|*
00010  M00S00010.virterm +++|*     *VIRTERM* PROVIDES VIRTUAL TERMINAL OBJECT ROUTINES TO MAP
00011  M00S00011.virterm +++|*     TO AND FROM TERMINAL-INDEPENDENT APPLICATION REQUESTS AND
00012  M00S00012.virterm +++|*     TERMINAL-DEPENDENT CODE SEQUENCES.
00013  M00S00013.virterm +++|*
00014  M00S00014.virterm +++|*     PROC VIRTERM
00015  M00S00015.virterm +++|*
00016  M00S00016.virterm +++|*     ENTRY     OBJECT ROUTINE CALLED.
00017  M00S00017.virterm +++|*
00018  M00S00018.virterm +++|*     EXIT      OBJECT ROUTINE EXECUTED.
00019  M00S00019.virterm +++|*
Line S00020 Modification History
M01 (Removed by) 281l803
Seq #  *Modification Id* Act 
----------------------------+
00020  M01S00020.281l803 ---|*     COPYRIGHT CONTROL DATA CORPORATION, 1984.
Line S00001 Modification History
M01 (Added by) 281l803
Seq #  *Modification Id* Act 
----------------------------+
00021  M01S00001.281l803 +++|*     COPYRIGHT CONTROL DATA SYSTEMS INC.  1992.
00022  M00S00021.virterm +++|#
00023  M00S00022.virterm +++|
00024  M00S00023.virterm +++|DEF LISTCON #1#;                     # LIST COMDECKS #
00025  M00S00024.virterm +++|
00026  M00S00025.virterm +++|*IFCALL SINGLE,COMFSGL
00027  M00S00026.virterm +++|*IFCALL ONLY,COMFONL
00028  M00S00027.virterm +++|*IFCALL MULTI,COMFMLT
00029  M00S00028.virterm +++|*IFCALL EDITOR,COMFFSE
00030  M00S00029.virterm +++|
00031  M00S00030.virterm +++|# START OF CODE SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY #
00032  M00S00031.virterm +++|
00033  M00S00032.virterm +++|*NIFCALL EDITOR,COMFTIO
00034  M00S00033.virterm +++|*IF UNDEF,EDITOR
00035  M00S00034.virterm +++|DEF EDITORVDT    #0#;                # STANDALONE VERSION OF VIRTERM #
00036  M00S00035.virterm +++|DEF IOBEGIN(XXX) #BEGIN#;            # BEGIN COMPOUND STATEMENT #
00037  M00S00036.virterm +++|DEF IOEND        #END#;              # END COMPOUND STATEMENT #
00038  M00S00037.virterm +++|DEF IORET        #RETURN;#;          # RETURN FROM SUBPROGRAM #
00039  M00S00038.virterm +++|DEF SINGLE       #1#;                # SINGLE-USER VERSION #
00040  M00S00039.virterm +++|DEF MULTI        #0#;                # NOT MULTI-USER #
00041  M00S00040.virterm +++|
00042  M00S00041.virterm +++|CONTROL PRESET;
00043  M00S00042.virterm +++|*ENDIF
00044  M00S00043.virterm +++|
00045  M00S00044.virterm +++|*IF UNDEF,QTRM
00046  M00S00045.virterm +++|DEF QTRMV        #0#;                # NOT QTRM VERSION #
00047  M00S00046.virterm +++|*ELSE
00048  M00S00047.virterm +++|DEF QTRMV        #1#;                # QTRM VERSION #
00049  M00S00048.virterm +++|*ENDIF
00050  M00S00049.virterm +++|
00051  M00S00050.virterm +++|# END OF CODE SEQUENCE CONDITIONALLY PRODUCED BY MODIFY UTILITY #
00052  M00S00051.virterm +++|CONTROL EJECT;
00053  M00S00052.virterm +++|
00054  M00S00053.virterm +++|CONTROL IFEQ MULTI,1;                # IF MULTI USER FSE VIRTERM #
00055  M00S00054.virterm +++|  XREF ARRAY RENTSTK [1:MAXREENT] P(1);  # SUBROUTINE STACK  #
00056  M00S00055.virterm +++|    BEGIN # ARRAY RENTSTK #
00057  M00S00056.virterm +++|    ITEM RSTK       I;               # STACK WORD #
00058  M00S00057.virterm +++|    END # ARRAY RENTSTK #
00059  M00S00058.virterm +++|  XREF ITEM RSTKPTR    I;            # STACK POINTER #
00060  M00S00059.virterm +++|CONTROL FI;                          # END OF IF MULTI USER FSE #
00061  M00S00060.virterm +++|
00062  M00S00061.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
00063  M00S00062.virterm +++|  ARRAY TDUFET [0:0] P(5);           # FET TO READ ZZZZTRM FILE #
00064  M00S00063.virterm +++|    BEGIN
00065  M00S00064.virterm +++|    ITEM TDUNAME    C(00,00,07) = ["ZZZZTRM"];  # FILE NAME #
00066  M00S00065.virterm +++|    ITEM TDUCODE    U(00,42,18) = [1];  # STATUS CODE #
00067  M00S00066.virterm +++|    ITEM TDUFET1    U(01,00,42) = [0];  # FET + 1 #
00068  M00S00067.virterm +++|    ITEM TDUFIRST   U(01,42,18) = [0];  # FIRST #
00069  M00S00068.virterm +++|    ITEM TDUFET2    U(02,00,42) = [0];  # FET + 2 #
00070  M00S00069.virterm +++|    ITEM TDUIN      U(02,42,18) = [0];  # IN #
00071  M00S00070.virterm +++|    ITEM TDUFET3    U(03,00,42) = [0];  # FET + 3 #
00072  M00S00071.virterm +++|    ITEM TDUOUT     U(03,42,18) = [0];  # OUT #
00073  M00S00072.virterm +++|    ITEM TDUFET4    U(04,00,42) = [0];  # FET + 4 #
00074  M00S00073.virterm +++|    ITEM TDULIMIT   U(04,42,18) = [0];  # LIMIT #
00075  M00S00074.virterm +++|    END
00076  M00S00075.virterm +++|
00077  M00S00076.virterm +++|  DEF  TDUBUFFLEN #O"301"#;          # *TDU* BUFFER LENGTH #
00078  M00S00077.virterm +++|
00079  M00S00078.virterm +++|  ARRAY TDUBUF [0:0] P(TDUBUFFLEN);; # *TDU* BUFFER #
00080  M00S00079.virterm +++|
00081  M00S00080.virterm +++|  BASED ARRAY TEMPSTORE [0:0] P(1);
00082  M00S00081.virterm +++|    BEGIN                            # USED TO MOVE *TDU* TABLE #
00083  M00S00082.virterm +++|    ITEM TEMPWORD   U;               # WORD #
00084  M00S00083.virterm +++|    END
00085  M00S00084.virterm +++|
00086  M00S00085.virterm +++|ARRAY T3270RTA [0:63] P(1);
00087  M00S00086.virterm +++|  BEGIN                              # 3270 RELATIVE TO ABSOLUTE #
00088  M00S00087.virterm +++|  ITEM RTA3270 U(00,00,60) = [
00089  M00S00088.virterm +++|    X"20", X"41", X"42", X"43", X"44", X"45", X"46", X"47",
00090  M00S00089.virterm +++|    X"48", X"49", X"5B", X"2E", X"3C", X"28", X"2B", X"21",
00091  M00S00090.virterm +++|    X"26", X"4A", X"4B", X"4C", X"4D", X"4E", X"4F", X"50",
00092  M00S00091.virterm +++|    X"51", X"52", X"5D", X"24", X"2A", X"29", X"3B", X"5E",
00093  M00S00092.virterm +++|    X"2D", X"2F", X"53", X"54", X"55", X"56", X"57", X"58",
00094  M00S00093.virterm +++|    X"59", X"5A", X"7C", X"2C", X"25", X"5F", X"3E", X"3F",
00095  M00S00094.virterm +++|    X"30", X"31", X"32", X"33", X"34", X"35", X"36", X"37",
00096  M00S00095.virterm +++|    X"38", X"39", X"3A", X"23", X"40", X"27", X"3D", X"22" ];
00097  M00S00096.virterm +++|  END
00098  M00S00097.virterm +++|
00099  M00S00098.virterm +++|ARRAY T3270ATR [0:127] P(1);
00100  M00S00099.virterm +++|  BEGIN                              # 3270 ABSOLUTE TO RELATIVE #
00101  M00S00100.virterm +++|  ITEM ATR3270 U(00,00,60) = [
00102  M00S00101.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 00-07 #
00103  M00S00102.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 08-0F #
00104  M00S00103.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 10-17 #
00105  M00S00104.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 18-1F #
00106  M00S00105.virterm +++|    X"00", X"0F", X"3F", X"3B", X"1B", X"2C", X"10", X"3D",   # 20-27 #
Line S00106 Modification History
M01 (Removed by) virte10
Seq #  *Modification Id* Act 
----------------------------+
00107  M01S00106.virte10 ---|    X"0D", X"1D", X"1C", X"0E", X"00", X"20", X"0B", X"21",   # 28-2F #
Line S00001 Modification History
M01 (Added by) virte10
Seq #  *Modification Id* Act 
----------------------------+
00108  M01S00001.virte10 +++|    X"0D", X"1D", X"1C", X"0E", X"2B", X"20", X"0B", X"21",   # 28-2F #
00109  M00S00107.virterm +++|    X"30", X"31", X"32", X"33", X"34", X"35", X"36", X"37",   # 30-30 #
00110  M00S00108.virterm +++|    X"38", X"39", X"3A", X"1E", X"0C", X"3E", X"2E", X"2F",   # 38-3F #
00111  M00S00109.virterm +++|    X"3C", X"01", X"02", X"03", X"04", X"05", X"06", X"07",   # 40-40 #
00112  M00S00110.virterm +++|    X"08", X"09", X"11", X"12", X"13", X"14", X"15", X"16",   # 48-4F #
00113  M00S00111.virterm +++|    X"17", X"18", X"19", X"22", X"23", X"24", X"25", X"26",   # 50-50 #
Line S00112 Modification History
M01 (Removed by) virte10
Seq #  *Modification Id* Act 
----------------------------+
00114  M01S00112.virte10 ---|    X"27", X"28", X"29", X"0A", X"2B", X"1A", X"1F", X"20",   # 58-5F #
Line S00002 Modification History
M01 (Added by) virte10
Seq #  *Modification Id* Act 
----------------------------+
00115  M01S00002.virte10 +++|    X"27", X"28", X"29", X"0A", X"00", X"1A", X"1F", X"2D",   # 58-5F #
00116  M00S00113.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 60-60 #
00117  M00S00114.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 68-6F #
00118  M00S00115.virterm +++|    X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",   # 70-70 #
00119  M00S00116.virterm +++|    X"00", X"00", X"00", X"00", X"2A", X"00", X"00", X"00" ]; # 78-7F #
00120  M00S00117.virterm +++|  END
00121  M00S00118.virterm +++|
00122  M00S00119.virterm +++|CONTROL FI;                          # END OF NOT MULTI USER FSE #
00123  M00S00120.virterm +++|CONTROL EJECT;
00124  M00S00121.virterm +++|
00125  M00S00122.virterm +++|XDEF
00126  M00S00123.virterm +++|  BEGIN
00127  M00S00124.virterm +++|*CALL COMFXVT
00128  M00S00125.virterm +++|*IF DEF,QTRM
00129  M00S00126.virterm +++|  PROC VDTWTO;                       # WRITE ONE WORD OF OUTPUT #
00130  M00S00127.virterm +++|*ENDIF
00131  M00S00128.virterm +++|  END
00132  M00S00129.virterm +++|
00133  M00S00130.virterm +++|XREF
00134  M00S00131.virterm +++|  BEGIN
00135  M00S00132.virterm +++|*IF DEF,QTRM
00136  M00S00133.virterm +++|  PROC PF;                           # GET PERMANENT FILE #
00137  M00S00134.virterm +++|  PROC SCRCCK;                       # VALIDATE TERMINAL CAPSULE #
00138  M00S00135.virterm +++|  PROC SCRLCP;                       # LOAD TERMINAL CAPSULE #
00139  M00S00136.virterm +++|  PROC SCRUGD;                       # UNLOAD GROUP DIRECTORY #
00140  M00S00137.virterm +++|  PROC SFDQUE;                       # QTRM DEQUEUE #
00141  M00S00138.virterm +++|  PROC SFNQUE;                       # QTRM ENQUEUE #
00142  M00S00139.virterm +++|  PROC VDTGTO;                       # GET TERMINAL ORDINAL #
00143  M00S00140.virterm +++|*ENDIF
00144  M00S00141.virterm +++|*IF DEF,DEBUG
00145  M00S00142.virterm +++|  PROC VDTDMP$;                      # DUMP OUTPUT TO XXXDUMP #
00146  M00S00143.virterm +++|*ENDIF
00147  M00S00144.virterm +++|  PROC VDTGSL;                       # GET OS SCREEN LINE MODE #
00148  M00S00145.virterm +++|  PROC VDTGTA;                       # GET *TDU* TABLE ADDRESS #
00149  M00S00146.virterm +++|  PROC VDTRDO;                       # READ ONE WORD OF INPUT #
00150  M00S00147.virterm +++|  PROC VDTRD$;                       # READ FILE TO CIO BUFFER #
00151  M00S00148.virterm +++|  PROC VDTREO$;                      # READ WORD FROM CIO BUFFER #
00152  M00S00149.virterm +++|  PROC VDTWRR$;                      # WRITE END OF RECORD #
00153  M00S00150.virterm +++|*IF UNDEF,QTRM
00154  M00S00151.virterm +++|  PROC VDTWTO;                       # WRITE ONE WORD OF OUTPUT #
00155  M00S00152.virterm +++|*ENDIF
00156  M00S00153.virterm +++|  PROC VDTWTC;                       # WRITE ONE LINE OF OUTPUT #
00157  M00S00154.virterm +++|  END
00158  M00S00155.virterm +++|
00159  M00S00156.virterm +++|CONTROL IFEQ EDITORVDT,0;
00160  M00S00157.virterm +++|  XREF
00161  M00S00158.virterm +++|    BEGIN
00162  M00S00159.virterm +++|    PROC VDTABT$;                    # ABORT THE CALLING ROUTINE #
00163  M00S00160.virterm +++|    PROC VDTCLO;                     # DO WRITER ON OUTPUT FET #
00164  M00S00161.virterm +++|    PROC VDTMSG$;                    # MESSAGE MACRO #
00165  M00S00162.virterm +++|    END
00166  M00S00163.virterm +++|CONTROL FI;
00167  M00S00164.virterm +++|
00168  M00S00165.virterm +++|*IF UNDEF,QTRM
00169  M00S00166.virterm +++|CONTROL IFEQ SINGLE,1;
00170  M00S00167.virterm +++|  CONTROL IFEQ EDITORVDT,1;
00171  M00S00168.virterm +++|    XREF
00172  M00S00169.virterm +++|      BEGIN
00173  M00S00170.virterm +++|      PROC VDTCLO;                   # DO WRITER ON OUTPUT FET #
00174  M00S00171.virterm +++|      PROC VDTPRT$;                  # PROMPT ON/OFF #
00175  M00S00172.virterm +++|      END
00176  M00S00173.virterm +++|  CONTROL FI;
00177  M00S00174.virterm +++|CONTROL FI;
00178  M00S00175.virterm +++|*ENDIF
00179  M00S00176.virterm +++|
00180  M00S00177.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
00181  M00S00178.virterm +++|  XREF
00182  M00S00179.virterm +++|    BEGIN
00183  M00S00180.virterm +++|    PROC VDTRWD;                     # REWIND FILE #
00184  M00S00181.virterm +++|    END
00185  M00S00182.virterm +++|CONTROL FI;
00186  M00S00183.virterm +++|CONTROL EJECT;
00187  M00S00184.virterm +++|
00188  M00S00185.virterm +++|DEF  XPARENTOUT #O"00070000000000000000"#;  # XPARENT OUTPUT #
00189  M00S00186.virterm +++|
00190  M00S00187.virterm +++|*CALL COMFVDT
00191  M00S00188.virterm +++|                                     # COMMON DATA BLOCK #
00192  M00S00189.virterm +++|*IFCALL EDITOR,COMFDS1
00193  M00S00190.virterm +++|*IFCALL EDITOR,COMFVD2
00194  M00S00191.virterm +++|*IFCALL EDITOR,COMFDS2
00195  M00S00192.virterm +++|
00196  M00S00193.virterm +++|*NIFCALL EDITOR,COMFVD1
00197  M00S00194.virterm +++|*NIFCALL EDITOR,COMFVD2
00198  M00S00195.virterm +++|*NIFCALL EDITOR,COMFVD3
00199  M00S00196.virterm +++|
00200  M00S00197.virterm +++|CONTROL IFEQ SINGLE,1;
00201  M00S00198.virterm +++|  CONTROL IFEQ EDITORVDT,1;
00202  M00S00199.virterm +++|    ARRAY ENABLEMMSG [0:3] P(1);     # ENABLE MULTI-MSG TRANSPARENT #
00203  M00S00200.virterm +++|      BEGIN
00204  M00S00201.virterm +++|      ITEM MULTIMSG   I = [          # TERMDEF CODES #
00205  M00S00202.virterm +++|      O"0016 4070 4001 4071 4011",   # XPT CHAR, UPPER BITS 2500D #
00206  M00S00203.virterm +++|      O"4072 4304 4073 4015 4074",   # LOWER BITS 2500D, CR DEL #
00207  M00S00204.virterm +++|      O"4000 4105 4377 4106 4001",   # NO TIMEOUT, R.O. DEL, M-MSG #
00208  M00S00205.virterm +++|      O"4064 4001 0000 0000 0000" ]; # START TRANSPARENT #
00209  M00S00206.virterm +++|      END
00210  M00S00207.virterm +++|
00211  M00S00208.virterm +++|    ARRAY DISABLMMSG [0:3] P(1);     # DISABLE MULTI-MSG TRANSPARENT #
00212  M00S00209.virterm +++|      BEGIN
00213  M00S00210.virterm +++|      ITEM SINGLEMSG   I = [         # TERMDEF CODES #
00214  M00S00211.virterm +++|      O"0016 4070 4001 4071 4011",   # XPT CHAR, UPPER BITS 2500D #
00215  M00S00212.virterm +++|      O"4072 4304 4073 4015 4074",   # LOWER BITS 2500D, CR DEL #
00216  M00S00213.virterm +++|      O"4000 4105 4377 4106 4000",   # NO TIMEOUT, R.O. DEL, S-MSG #
00217  M00S00214.virterm +++|      O"4064 4000 0000 0000 0000" ]; # END TRANSPARENT #
00218  M00S00215.virterm +++|      END
00219  M00S00216.virterm +++|  CONTROL FI;
00220  M00S00217.virterm +++|CONTROL FI;
00221  M00S00218.virterm +++|CONTROL EJECT;
00222  M00S00219.virterm +++|
00223  M00S00220.virterm +++|CONTROL IFEQ EDITORVDT,0;            # PROCEDURES NOT NEEDED BY FSE #
00224  M00S00221.virterm +++|
00225  M00S00222.virterm +++|PROC VDTBOI(ORDINAL);
00226  M00S00223.virterm +++|
00227  M00S00224.virterm +++|# TITLE VDTBOI - BEGINNING OF INPUT. #
00228  M00S00225.virterm +++|
00229  M00S00226.virterm +++|BEGIN  # VDTBOI #
00230  M00S00227.virterm +++|
00231  M00S00228.virterm +++|#
00232  M00S00229.virterm +++|**    VDTBOI - BEGINNING OF INPUT.
00233  M00S00230.virterm +++|*
00234  M00S00231.virterm +++|*     THIS PROCEDURES PROVIDES THE ABILITY TO START AND MONITOR
00235  M00S00232.virterm +++|*     INPUT SEQUENCES.  IT IS IDENTICAL TO PROCEDURE *VDTPPI* EX-
00236  M00S00233.virterm +++|*     CEPT THAT IT RETURNS AN ORDINAL.
00237  M00S00234.virterm +++|*
00238  M00S00235.virterm +++|*     PROC VDTBOI(ORDINAL)
00239  M00S00236.virterm +++|*
00240  M00S00237.virterm +++|*     EXIT      ORDINAL = 0, IF TRANSPARENT INPUT RECEIVED OK.
00241  M00S00238.virterm +++|*                       = NON ZERO, IF TYPEAHEAD.
00242  M00S00239.virterm +++|*
00243  M00S00240.virterm +++|*     CALLS     VDTPPI.
00244  M00S00241.virterm +++|*
00245  M00S00242.virterm +++|*     USES      VTORDN.
00246  M00S00243.virterm +++|#
00247  M00S00244.virterm +++|
00248  M00S00245.virterm +++|ITEM ORDINAL    I;                   # VTORDN #
00249  M00S00246.virterm +++|
00250  M00S00247.virterm +++|VDTPPI;                              # PRE-PROCESS INPUT #
00251  M00S00248.virterm +++|IF VTINPDATA EQ 0 THEN VTORDN = 1;   # NULL TYPEAHEAD #
00252  M00S00249.virterm +++|ORDINAL = VTORDN;
00253  M00S00250.virterm +++|
00254  M00S00251.virterm +++|END  # VDTBOI #
00255  M00S00252.virterm +++|CONTROL EJECT;
00256  M00S00253.virterm +++|
00257  M00S00254.virterm +++|PROC VDTBOX(ORDINAL);
00258  M00S00255.virterm +++|
00259  M00S00256.virterm +++|# TITLE VDTBOX - OUTPUT LINE DRAWING CHARACTER. #
00260  M00S00257.virterm +++|
00261  M00S00258.virterm +++|BEGIN  # VDTBOX #
00262  M00S00259.virterm +++|
00263  M00S00260.virterm +++|#
00264  M00S00261.virterm +++|**    VDTBOX - OUTPUT LINE DRAWING CHARACTER.
00265  M00S00262.virterm +++|*
00266  M00S00263.virterm +++|*     THIS PROCEDURE OUTPUTS LINE DRAWING CHARACTERS BY ORDINAL.
00267  M00S00264.virterm +++|*
00268  M00S00265.virterm +++|*     PROC VDTBOX(ORDINAL)
00269  M00S00266.virterm +++|*
00270  M00S00267.virterm +++|*     CALLS     VDCTRL.
00271  M00S00268.virterm +++|#
00272  M00S00269.virterm +++|
00273  M00S00270.virterm +++|ITEM ORDINAL    I;                   # LINE DRAWING CHARACTER ORDINAL #
00274  M00S00271.virterm +++|
00275  M00S00272.virterm +++|IF ORDINAL GQ 0 AND ORDINAL LQ 11 THEN
00276  M00S00273.virterm +++|  BEGIN                              # IF VALID ORDINAL #
00277  M00S00274.virterm +++|  VDCTRL(OUT"LDFHORIZON" + ORDINAL + (13 * (BOXWEIGHT - 1)));
00278  M00S00275.virterm +++|  END
00279  M00S00276.virterm +++|
00280  M00S00277.virterm +++|END  # VDTBOX #
00281  M00S00278.virterm +++|CONTROL EJECT;
00282  M00S00279.virterm +++|
00283  M00S00280.virterm +++|PROC VDTCAA(NEWMASK);
00284  M00S00281.virterm +++|
00285  M00S00282.virterm +++|# TITLE VDTCAA - CHANGE ALL ATTRIBUTES. #
00286  M00S00283.virterm +++|
00287  M00S00284.virterm +++|BEGIN  # VDTCAA #
00288  M00S00285.virterm +++|
00289  M00S00286.virterm +++|#
00290  M00S00287.virterm +++|**    VDTCAA - CHANGE ALL ATTRIBUTES.
00291  M00S00288.virterm +++|*
00292  M00S00289.virterm +++|*     THIS PROCEDURE CHANGES THE CURRENT ATTRIBUTE MASK.
00293  M00S00290.virterm +++|*
00294  M00S00291.virterm +++|*     PROC VDTCAA(NEWMASK)
00295  M00S00292.virterm +++|#
00296  M00S00293.virterm +++|ITEM NEWMASK   U;                    # NEW ATTRIBUTE MASK #
00297  M00S00294.virterm +++|
00298  M00S00295.virterm +++|ATTRIBMASK[0] = NEWMASK;             # SET NEW ATTRIBUTE MASK #
00299  M00S00296.virterm +++|
00300  M00S00297.virterm +++|END  # VDTCAA #
00301  M00S00298.virterm +++|*IF DEF,ECHO
00302  M00S00299.virterm +++|CONTROL EJECT;
00303  M00S00300.virterm +++|
00304  M00S00301.virterm +++|PROC VDTCLR;
00305  M00S00302.virterm +++|
00306  M00S00303.virterm +++|# TITLE VDTCLR - CLEAR TO END OF SCREEN. #
00307  M00S00304.virterm +++|
00308  M00S00305.virterm +++|BEGIN  # VDTCLR #
00309  M00S00306.virterm +++|
00310  M00S00307.virterm +++|#
00311  M00S00308.virterm +++|**    VDTCLR - CLEAR TO END OF SCREEN.
00312  M00S00309.virterm +++|*
00313  M00S00310.virterm +++|*     THIS PROCEDURE CLEARS THE SCREEN FROM THE CURRENT CURSOR
00314  M00S00311.virterm +++|*     POSITION TO THE END OF THE SCREEN AND POSITIONS THE CURSOR
00315  M00S00312.virterm +++|*     TO THE HOME POSITION.
00316  M00S00313.virterm +++|*
00317  M00S00314.virterm +++|*     PROC VDTCLR
00318  M00S00315.virterm +++|*
00319  M00S00316.virterm +++|*     EXIT      VTXCUR     = 0.
00320  M00S00317.virterm +++|*               VTYCUR     = 0 OR VTYMAX.
00321  M00S00318.virterm +++|*
00322  M00S00319.virterm +++|*     CALLS     VDCTRL, VDTBOO, VDTHOM.
00323  M00S00320.virterm +++|#
00324  M00S00321.virterm +++|
00325  M00S00322.virterm +++|VDTBOO;                              # BEGIN OUTPUT SEQUENCE #
00326  M00S00323.virterm +++|VDCTRL(OUT"CLREOS");                 # CLEAR TO END OF SCREEN #
00327  M00S00324.virterm +++|VDTHOM;                              # POSITION CURSOR TO HOME #
00328  M00S00325.virterm +++|
00329  M00S00326.virterm +++|END  # VDTCLR #
00330  M00S00327.virterm +++|CONTROL EJECT;
00331  M00S00328.virterm +++|
00332  M00S00329.virterm +++|PROC VDTCUD;
00333  M00S00330.virterm +++|
00334  M00S00331.virterm +++|# TITLE VDTCUD - MOVE CURSOR DOWN ONE POSITION. #
00335  M00S00332.virterm +++|
00336  M00S00333.virterm +++|BEGIN  # VDTCUD #
00337  M00S00334.virterm +++|
00338  M00S00335.virterm +++|#
00339  M00S00336.virterm +++|**    VDTCUD - MOVE CURSOR DOWN ONE POSITION.
00340  M00S00337.virterm +++|*
00341  M00S00338.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR DOWN ONE POSITION.
00342  M00S00339.virterm +++|*
00343  M00S00340.virterm +++|*     PROC VDTCUD
00344  M00S00341.virterm +++|*
00345  M00S00342.virterm +++|*     EXIT      VTYCUR AND VTXCUR ADJUSTED IF NECESSARY.
00346  M00S00343.virterm +++|*
00347  M00S00344.virterm +++|*     CALLS     VDCTRL.
00348  M00S00345.virterm +++|*
00349  M00S00346.virterm +++|*     USES      VTXCUR, VTYCUR.
00350  M00S00347.virterm +++|*
00351  M00S00348.virterm +++|*     NOTES     IF MOVING THE CURSOR DOWN ONE POSITON WILL CAUSE
00352  M00S00349.virterm +++|*               THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME
00353  M00S00350.virterm +++|*               (OR IF THE CURSOR WILL STOP) THIS IS A NOOP.
00354  M00S00351.virterm +++|#
00355  M00S00352.virterm +++|
00356  M00S00353.virterm +++|IF VTYCUR EQ VTYMAX THEN
00357  M00S00354.virterm +++|  BEGIN                              # IF PRESENTLY ON LAST LINE #
00358  M00S00355.virterm +++|  IF TABDWNCRSR[0] GQ CURSORMOVE"SPIRAL" THEN
00359  M00S00356.virterm +++|    BEGIN                            # IF NOT STOP, SCROLL OR HOME #
00360  M00S00357.virterm +++|    VTYCUR = 0;                      # CURSOR WILL MOVE TO FIRST LINE #
00361  M00S00358.virterm +++|    IF TABDWNCRSR[0] EQ CURSORMOVE"SPIRAL" THEN VTXCUR = VTXCUR + 1;
00362  M00S00359.virterm +++|    VDCTRL(OUT"CURSORDOWN");         # MOVE CURSOR DOWN #
00363  M00S00360.virterm +++|    END
00364  M00S00361.virterm +++|  END
00365  M00S00362.virterm +++|ELSE
00366  M00S00363.virterm +++|  BEGIN                              # NOT YET AT BOTTOM OF SCREEN #
00367  M00S00364.virterm +++|  VTYCUR = VTYCUR + 1;               # ADJUST POSITION #
00368  M00S00365.virterm +++|  VDCTRL(OUT"CURSORDOWN");           # MOVE CURSOR DOWN #
00369  M00S00366.virterm +++|  END
00370  M00S00367.virterm +++|
00371  M00S00368.virterm +++|END  # VDTCUD #
00372  M00S00369.virterm +++|CONTROL EJECT;
00373  M00S00370.virterm +++|
00374  M00S00371.virterm +++|PROC VDTCUL;
00375  M00S00372.virterm +++|
00376  M00S00373.virterm +++|# TITLE VDTCUL - MOVE CURSOR LEFT ONE POSITION. #
00377  M00S00374.virterm +++|
00378  M00S00375.virterm +++|BEGIN  # VDTCUL #
00379  M00S00376.virterm +++|
00380  M00S00377.virterm +++|#
00381  M00S00378.virterm +++|**    VDTCUL - MOVE CURSOR LEFT ONE POSITION.
00382  M00S00379.virterm +++|*
00383  M00S00380.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR LEFT ONE POSITION.
00384  M00S00381.virterm +++|*
00385  M00S00382.virterm +++|*     PROC VDTCUL
00386  M00S00383.virterm +++|*
00387  M00S00384.virterm +++|*     EXIT      VTXCUR AND VTYCUR ADJUSTED IF NECESSARY.
00388  M00S00385.virterm +++|*
00389  M00S00386.virterm +++|*     CALLS     VDCTRL, VDTCUU.
00390  M00S00387.virterm +++|*
00391  M00S00388.virterm +++|*     USES      VTXCUR, VTYCUR.
00392  M00S00389.virterm +++|*
00393  M00S00390.virterm +++|*     NOTES     IF MOVING THE CURSOR LEFT ONE POSITON WILL CAUSE
00394  M00S00391.virterm +++|*               THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME
00395  M00S00392.virterm +++|*               (OR IF THE CURSOR WILL STOP) THIS IS A NOOP.
00396  M00S00393.virterm +++|#
00397  M00S00394.virterm +++|
00398  M00S00395.virterm +++|IF VTXCUR EQ 0 THEN
00399  M00S00396.virterm +++|  BEGIN                              # IF PRESENTLY IN FIRST COLUMN #
00400  M00S00397.virterm +++|  IF TABLEFTCUR[0] GQ CURSORMOVE"SPIRAL" THEN
00401  M00S00398.virterm +++|    BEGIN                            # IF NOT STOP, SCROLL OR HOME #
00402  M00S00399.virterm +++|    VTYCUR = VTYMAX;                 # CURSOR MOVES TO LAST COLUMN #
00403  M00S00400.virterm +++|    IF TABLEFTCUR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR - 1;
00404  M00S00401.virterm +++|    VDCTRL(OUT"CURSORLEFT");         # MOVE CURSOR LEFT #
00405  M00S00402.virterm +++|    END
00406  M00S00403.virterm +++|  END
00407  M00S00404.virterm +++|ELSE
00408  M00S00405.virterm +++|  BEGIN                              # NOT YET AT LEFT SIDE OF SCREEN #
00409  M00S00406.virterm +++|  VTXCUR = VTXCUR - 1;               # ADJUST POSITION #
00410  M00S00407.virterm +++|  VDCTRL(OUT"CURSORLEFT");           # MOVE CURSOR LEFT #
00411  M00S00408.virterm +++|  END
00412  M00S00409.virterm +++|
00413  M00S00410.virterm +++|END  # VDTCUL #
00414  M00S00411.virterm +++|CONTROL EJECT;
00415  M00S00412.virterm +++|
00416  M00S00413.virterm +++|PROC VDTCUR;
00417  M00S00414.virterm +++|
00418  M00S00415.virterm +++|# TITLE VDTCUR - MOVE CURSOR RIGHT ONE POSITION. #
00419  M00S00416.virterm +++|
00420  M00S00417.virterm +++|BEGIN  # VDTCUR #
00421  M00S00418.virterm +++|
00422  M00S00419.virterm +++|#
00423  M00S00420.virterm +++|**    VDTCUR - MOVE CURSOR RIGHT ONE POSITION.
00424  M00S00421.virterm +++|*
00425  M00S00422.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR RIGHT ONE POSITION.
00426  M00S00423.virterm +++|*
00427  M00S00424.virterm +++|*     PROC VDTCUR
00428  M00S00425.virterm +++|*
00429  M00S00426.virterm +++|*     EXIT      VTXCUR AND VTYCUR ADJUSTED IF NECESSARY.
00430  M00S00427.virterm +++|*
00431  M00S00428.virterm +++|*     CALLS     VDCTRL.
00432  M00S00429.virterm +++|*
00433  M00S00430.virterm +++|*     USES      VTXCUR, VTYCUR.
00434  M00S00431.virterm +++|*
00435  M00S00432.virterm +++|*     NOTES     IF MOVING THE CURSOR RIGHT ONE POSITON WILL CAUSE
00436  M00S00433.virterm +++|*               THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME
00437  M00S00434.virterm +++|*               (OR IF THE CURSOR WILL STOP) THIS IS A NOOP.
00438  M00S00435.virterm +++|#
00439  M00S00436.virterm +++|
00440  M00S00437.virterm +++|IF VTXCUR EQ VTXMAX THEN
00441  M00S00438.virterm +++|  BEGIN                              # IF PRESENTLY IN LAST COLUMN #
00442  M00S00439.virterm +++|  IF TABRGHTCUR[0] GQ CURSORMOVE"SPIRAL" THEN
00443  M00S00440.virterm +++|    BEGIN                            # IF NOT STOP, SCROLL OR HOME #
00444  M00S00441.virterm +++|    VTYCUR = 0;                      # CURSOR MOVES TO FIRST COLUMN #
00445  M00S00442.virterm +++|    IF TABRGHTCUR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR + 1;
00446  M00S00443.virterm +++|    VDCTRL(OUT"CURSORIGHT");         # MOVE CURSOR RIGHT #
00447  M00S00444.virterm +++|    END
00448  M00S00445.virterm +++|  END
00449  M00S00446.virterm +++|ELSE
00450  M00S00447.virterm +++|  BEGIN                              # NOT AT RIGHT SIDE OF SCREEN #
00451  M00S00448.virterm +++|  VTXCUR = VTXCUR + 1;               # ADJUST POSITION #
00452  M00S00449.virterm +++|  VDCTRL(OUT"CURSORIGHT");           # MOVE CURSOR RIGHT #
00453  M00S00450.virterm +++|  END
00454  M00S00451.virterm +++|
00455  M00S00452.virterm +++|END  # VDTCUR #
00456  M00S00453.virterm +++|CONTROL EJECT;
00457  M00S00454.virterm +++|
00458  M00S00455.virterm +++|PROC VDTCUU;
00459  M00S00456.virterm +++|
00460  M00S00457.virterm +++|# TITLE VDTCUU - MOVE CURSOR UP ONE POSITION. #
00461  M00S00458.virterm +++|
00462  M00S00459.virterm +++|BEGIN  # VDTCUU #
00463  M00S00460.virterm +++|
00464  M00S00461.virterm +++|#
00465  M00S00462.virterm +++|**    VDTCUU - MOVE CURSOR UP ONE POSTION.
00466  M00S00463.virterm +++|*
00467  M00S00464.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR UP ONE POSITION.
00468  M00S00465.virterm +++|*
00469  M00S00466.virterm +++|*     PROC VDTCUU
00470  M00S00467.virterm +++|*
00471  M00S00468.virterm +++|*     EXIT      VTYCUR AND VTXCUR ADJUSTED IF NECESSARY.
00472  M00S00469.virterm +++|*
00473  M00S00470.virterm +++|*     CALLS     VDCTRL.
00474  M00S00471.virterm +++|*
00475  M00S00472.virterm +++|*     USES      VTXCUR, VTYCUR
00476  M00S00473.virterm +++|*
00477  M00S00474.virterm +++|*     NOTES     IF MOVING THE CURSOR UP ONE POSITON WILL CAUSE
00478  M00S00475.virterm +++|*               THE TERMINAL TO SCROLL, OR THE CURSOR TO GO HOME
00479  M00S00476.virterm +++|*               (OR IF THE CURSOR WILL STOP) THIS IS A NOOP.
00480  M00S00477.virterm +++|#
00481  M00S00478.virterm +++|
00482  M00S00479.virterm +++|IF VTYCUR EQ 0 THEN
00483  M00S00480.virterm +++|  BEGIN                              # IF PRESENTLY ON FIRST LINE #
00484  M00S00481.virterm +++|  IF TABUPCURSR[0] GQ CURSORMOVE"SPIRAL" THEN
00485  M00S00482.virterm +++|    BEGIN                            # IF NOT STOP, SCROLL OR HOME #
00486  M00S00483.virterm +++|    VTYCUR = VTYMAX;                 # CURSOR WILL MOVE TO LAST LINE #
00487  M00S00484.virterm +++|    IF TABUPCURSR[0] EQ CURSORMOVE"SPIRAL" THEN VTXCUR = VTXCUR - 1;
00488  M00S00485.virterm +++|    VDCTRL(OUT"CURSORUP");           # MOVE CURSOR UP #
00489  M00S00486.virterm +++|    END
00490  M00S00487.virterm +++|  END
00491  M00S00488.virterm +++|ELSE
00492  M00S00489.virterm +++|  BEGIN                              # NOT YET AT TOP OF SCREEN #
00493  M00S00490.virterm +++|  VTYCUR = VTYCUR - 1;               # ADJUST POSITION #
00494  M00S00491.virterm +++|  VDCTRL(OUT"CURSORUP");             # MOVE CURSOR UP #
00495  M00S00492.virterm +++|  END
00496  M00S00493.virterm +++|
00497  M00S00494.virterm +++|END  # VDTCUU #
00498  M00S00495.virterm +++|CONTROL EJECT;
00499  M00S00496.virterm +++|
00500  M00S00497.virterm +++|PROC VDTDEC;
00501  M00S00498.virterm +++|
00502  M00S00499.virterm +++|# TITLE VDTDEC - DELETE ONE CHARACTER. #
00503  M00S00500.virterm +++|
00504  M00S00501.virterm +++|BEGIN  # VDTDEC #
00505  M00S00502.virterm +++|
00506  M00S00503.virterm +++|#
00507  M00S00504.virterm +++|**    VDTDEC - DELETE ONE CHARACTER.
00508  M00S00505.virterm +++|*
00509  M00S00506.virterm +++|*     THIS PROCEDURE DELETES ONE CHARACTER FROM THE TEXT ON THE SCREEN
00510  M00S00507.virterm +++|*     SHIFTING EXISTING TEXT THAT WAS TO THE RIGHT OF THE CHARACTER ONE
00511  M00S00508.virterm +++|*     POSITION TO THE LEFT.
00512  M00S00509.virterm +++|*
00513  M00S00510.virterm +++|*     PROC VDTDEC
00514  M00S00511.virterm +++|*
00515  M00S00512.virterm +++|*     CALLS     VDCTRL.
00516  M00S00513.virterm +++|#
00517  M00S00514.virterm +++|
00518  M00S00515.virterm +++|VDCTRL(OUT"DELETECHAR");             # DELETE CHARACTER #
00519  M00S00516.virterm +++|
00520  M00S00517.virterm +++|END  # VDTDEC #
00521  M00S00518.virterm +++|CONTROL EJECT;
00522  M00S00519.virterm +++|
00523  M00S00520.virterm +++|PROC VDTDEL;
00524  M00S00521.virterm +++|
00525  M00S00522.virterm +++|# TITLE VDTDEL - DELETE ONE LINE. #
00526  M00S00523.virterm +++|
00527  M00S00524.virterm +++|BEGIN  # VDTDEL #
00528  M00S00525.virterm +++|
00529  M00S00526.virterm +++|#
00530  M00S00527.virterm +++|**    VDTDEL - DELETE ONE LINE.
00531  M00S00528.virterm +++|*
00532  M00S00529.virterm +++|*     THIS PROCEDURE DELETES THE LINE THAT THE CURSOR IS ON AND
00533  M00S00530.virterm +++|*     MOVES THE REMAINING LINES BELOW THE DELETED AREA UP ONE,
00534  M00S00531.virterm +++|*     POSITIONING THE CURSOR TO THE START OF THE LINE.
00535  M00S00532.virterm +++|*
00536  M00S00533.virterm +++|*     PROC VDTDEL
00537  M00S00534.virterm +++|*
00538  M00S00535.virterm +++|*     CALLS     VDCTRL, VDMOVE.
00539  M00S00536.virterm +++|*
00540  M00S00537.virterm +++|*     USES      VTXCUR.
00541  M00S00538.virterm +++|#
00542  M00S00539.virterm +++|
00543  M00S00540.virterm +++|VDCTRL(OUT"DELINECURL");             # DELETE LINE, CURSOR LEFT #
00544  M00S00541.virterm +++|IF NUMBERBYTE EQ 0 THEN
00545  M00S00542.virterm +++|  BEGIN                              # IF NO FUNCTION AVAILABLE #
00546  M00S00543.virterm +++|  VDCTRL(OUT"DELETELINE");           # DELETE LINE #
00547  M00S00544.virterm +++|  IF NUMBERBYTE NQ 0 AND VTXCUR NQ 0 THEN
00548  M00S00545.virterm +++|    BEGIN                            # IF POSITION NEEDS UPDATE #
00549  M00S00546.virterm +++|    VTXCUR = 0;                      # CLEAR X POSITION #
00550  M00S00547.virterm +++|    VDMOVE(VTXCUR,VTYCUR);           # POSITION CURSOR #
00551  M00S00548.virterm +++|    END
00552  M00S00549.virterm +++|  END
00553  M00S00550.virterm +++|ELSE
00554  M00S00551.virterm +++|  BEGIN                              # FUNCTION AVAILABLE #
00555  M00S00552.virterm +++|  VTXCUR = 0;                        # CLEAR X POSITION #
00556  M00S00553.virterm +++|  END
00557  M00S00554.virterm +++|
00558  M00S00555.virterm +++|END  # VDTDEL #
00559  M00S00556.virterm +++|*ENDIF
00560  M00S00557.virterm +++|CONTROL EJECT;
00561  M00S00558.virterm +++|
00562  M00S00559.virterm +++|PROC VDTDRW(WEIGHT);
00563  M00S00560.virterm +++|
00564  M00S00561.virterm +++|# TITLE VDTDRW - SET LINE DRAWING CHARACTER SET. #
00565  M00S00562.virterm +++|
00566  M00S00563.virterm +++|BEGIN  # VDTDRW #
00567  M00S00564.virterm +++|
00568  M00S00565.virterm +++|#
00569  M00S00566.virterm +++|**    VDTDRW - SET LINE DRAWING CHARACTER SET.
00570  M00S00567.virterm +++|*
00571  M00S00568.virterm +++|*     THIS PROCEDURE SETS OR CLEARS THE LINE DRAWING CHARACTER SET FOR
00572  M00S00569.virterm +++|*     THOSE TERMINALS THAT HAVE A LINE DRAWING CHARACTER SET.
00573  M00S00570.virterm +++|*
00574  M00S00571.virterm +++|*     PROC VDTDRW(WEIGHT)
00575  M00S00572.virterm +++|*
00576  M00S00573.virterm +++|*     ENTRY     BOXWEIGHT  = CURRENT LINE DRAWING WEIGHT.
00577  M00S00574.virterm +++|*               WEIGHT     = REQUESTED LINE DRAWING WEIGHT.
00578  M00S00575.virterm +++|*                          = 0, IF TURNING OFF LINE DRAWING.
00579  M00S00576.virterm +++|*                          = 1, IF FINE LINE DRAWING REQUESTED.
00580  M00S00577.virterm +++|*                          = 2, IF MEDIUM LINE DRAWING REQUESTED.
00581  M00S00578.virterm +++|*                          = 3, IF BOLD LINE DRAWING REQUESTED.
00582  M00S00579.virterm +++|*
00583  M00S00580.virterm +++|*     EXIT      BOXWEIGHT  = CURRENT LINE DRAWING WEIGHT.
00584  M00S00581.virterm +++|*
00585  M00S00582.virterm +++|*     CALLS     VDCTRL.
00586  M00S00583.virterm +++|#
00587  M00S00584.virterm +++|
00588  M00S00585.virterm +++|ITEM WEIGHT     I;                   # LINE DRAWING WEIGHT #
00589  M00S00586.virterm +++|
00590  M00S00587.virterm +++|IF WEIGHT GQ 0 AND WEIGHT LQ 3 AND WEIGHT NQ BOXWEIGHT THEN
00591  M00S00588.virterm +++|  BEGIN                              # IF VALID CHANGE REQUESTED #
00592  M00S00589.virterm +++|  IF BOXWEIGHT GR 0 THEN
00593  M00S00590.virterm +++|    BEGIN                            # IF LINE DRAWING IS ON #
00594  M00S00591.virterm +++|    VDCTRL(OUT"LDFINEOFF"+((BOXWEIGHT-1)*13));
00595  M00S00592.virterm +++|    END
00596  M00S00593.virterm +++|  IF WEIGHT GR 0 THEN
00597  M00S00594.virterm +++|    BEGIN                            # IF NEW WEIGHT REQUESTED #
00598  M00S00595.virterm +++|    VDCTRL(OUT"LDFINEON"+((WEIGHT-1)*13));
00599  M00S00596.virterm +++|    END
00600  M00S00597.virterm +++|  BOXWEIGHT = WEIGHT;                # SAVE NEW BOX WEIGHT #
00601  M00S00598.virterm +++|  END
00602  M00S00599.virterm +++|
00603  M00S00600.virterm +++|END  # VDTDRW #
00604  M00S00601.virterm +++|*IF DEF,ECHO
00605  M00S00602.virterm +++|CONTROL EJECT;
00606  M00S00603.virterm +++|
00607  M00S00604.virterm +++|PROC VDTEOI;
00608  M00S00605.virterm +++|
00609  M00S00606.virterm +++|# TITLE VDTEOI - END OF INFORMATION. #
00610  M00S00607.virterm +++|
00611  M00S00608.virterm +++|BEGIN  # VDTEOI #
00612  M00S00609.virterm +++|
00613  M00S00610.virterm +++|#
00614  M00S00611.virterm +++|**    VDTEOI - END OF INFORMATION.
00615  M00S00612.virterm +++|*
00616  M00S00613.virterm +++|*     THIS PROCEDURE SENDS AN END OF INFORMATION BYTE.
00617  M00S00614.virterm +++|*
00618  M00S00615.virterm +++|*     PROC VDTEOI
00619  M00S00616.virterm +++|*
00620  M00S00617.virterm +++|*     CALLS     VDTOUT.
00621  M00S00618.virterm +++|#
00622  M00S00619.virterm +++|
00623  M00S00620.virterm +++|VDTOUT(X"00");                       # END OF INFORMATION BYTE #
00624  M00S00621.virterm +++|
00625  M00S00622.virterm +++|END  # VDTEOI #
00626  M00S00623.virterm +++|CONTROL EJECT;
00627  M00S00624.virterm +++|
00628  M00S00625.virterm +++|PROC VDTERC;
00629  M00S00626.virterm +++|
00630  M00S00627.virterm +++|# TITLE VDTERC - ERASE CHARACTER. #
00631  M00S00628.virterm +++|
00632  M00S00629.virterm +++|BEGIN  # VDTERC #
00633  M00S00630.virterm +++|
00634  M00S00631.virterm +++|#
00635  M00S00632.virterm +++|**    VDTERC - ERASE CHARACTER.
00636  M00S00633.virterm +++|*
00637  M00S00634.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR LEFT ONE POSITION AND
00638  M00S00635.virterm +++|*     CLEARS THE (UNPROTECTED) CHARACTER IN THAT POSITION.
00639  M00S00636.virterm +++|*
00640  M00S00637.virterm +++|*     PROC VDTERC
00641  M00S00638.virterm +++|*
00642  M00S00639.virterm +++|*     EXIT      VTXCUR AND VTYCUR ADJUSTED IF NECESSARY.
00643  M00S00640.virterm +++|*
00644  M00S00641.virterm +++|*     CALLS     VDCTRL.
00645  M00S00642.virterm +++|#
00646  M00S00643.virterm +++|
00647  M00S00644.virterm +++|VDCTRL(OUT"ERASECHAR");
00648  M00S00645.virterm +++|
00649  M00S00646.virterm +++|VTXCUR = VTXCUR - 1;
00650  M00S00647.virterm +++|IF VTXCUR LS 0 THEN
00651  M00S00648.virterm +++|  BEGIN                          # IF OFF LEFT SIDE OF SCREEN #
00652  M00S00649.virterm +++|  IF TABLEFTCHR[0] GQ CURSORMOVE"SPIRAL" THEN
00653  M00S00650.virterm +++|    BEGIN                        # IF WRAP OR SPIRAL #
00654  M00S00651.virterm +++|    VTXCUR = VTXMAX;             # CURSOR IS IN LAST COLUMN #
00655  M00S00652.virterm +++|    IF TABLEFTCHR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR - 1;
00656  M00S00653.virterm +++|    END
00657  M00S00654.virterm +++|  ELSE
00658  M00S00655.virterm +++|    BEGIN                        # CURSOR HAS STOPPED AT LEFT #
00659  M00S00656.virterm +++|    VTXCUR = 0;                  # CURSOR IS IN FIRST COLUMN #
00660  M00S00657.virterm +++|    END
00661  M00S00658.virterm +++|  END
00662  M00S00659.virterm +++|
00663  M00S00660.virterm +++|END  # VDTERC #
00664  M00S00661.virterm +++|CONTROL EJECT;
00665  M00S00662.virterm +++|
00666  M00S00663.virterm +++|PROC VDTERL;
00667  M00S00664.virterm +++|
00668  M00S00665.virterm +++|# TITLE VDTERL - ERASE LINE. #
00669  M00S00666.virterm +++|
00670  M00S00667.virterm +++|BEGIN  # VDTERL #
00671  M00S00668.virterm +++|
00672  M00S00669.virterm +++|#
00673  M00S00670.virterm +++|**    VDTERL - ERASE LINE.
00674  M00S00671.virterm +++|*
00675  M00S00672.virterm +++|*     THIS PROCEDURE ERASES THE UNPROTECTED AREAS OF THE ACTIVE LINE.
00676  M00S00673.virterm +++|*
00677  M00S00674.virterm +++|*     PROC VDTERL
00678  M00S00675.virterm +++|*
00679  M00S00676.virterm +++|*     EXIT      VTXCUR    = 0.
00680  M00S00677.virterm +++|*
00681  M00S00678.virterm +++|*     CALLS     VDTCLL, VDCTRL, VDMOVE.
00682  M00S00679.virterm +++|*
00683  M00S00680.virterm +++|*     USES      VTXCUR.
00684  M00S00681.virterm +++|#
00685  M00S00682.virterm +++|
00686  M00S00683.virterm +++|VDCTRL(OUT"ERASELNECL");             # ERASE LINE, CURSOR LEFT #
00687  M00S00684.virterm +++|IF NUMBERBYTE EQ 0 THEN
00688  M00S00685.virterm +++|  BEGIN                              # IF NO FUNCTION AVAILABLE #
00689  M00S00686.virterm +++|  IF VTXCUR NQ 0 THEN
00690  M00S00687.virterm +++|    BEGIN                            # IF NOT AT START OF LINE #
00691  M00S00688.virterm +++|    VTXCUR = 0;                      # SET X POSITION #
00692  M00S00689.virterm +++|    VDMOVE(VTXCUR,VTYCUR);           # POSITION CURSOR #
00693  M00S00690.virterm +++|    END
00694  M00S00691.virterm +++|  VDCTRL(OUT"ERASELINE");            # ERASE LINE #
00695  M00S00692.virterm +++|  IF NUMBERBYTE EQ 0 THEN
00696  M00S00693.virterm +++|    BEGIN                            # IF NO FUNCTION AVAILABLE #
00697  M00S00694.virterm +++|    VDTCLL(VTXCUR,VTYCUR);           # CLEAR LINE #
00698  M00S00695.virterm +++|    END
00699  M00S00696.virterm +++|  END
00700  M00S00697.virterm +++|ELSE
00701  M00S00698.virterm +++|  BEGIN
00702  M00S00699.virterm +++|  VTXCUR = 0;                        # CLEAR X POSITION #
00703  M00S00700.virterm +++|  END
00704  M00S00701.virterm +++|
00705  M00S00702.virterm +++|END  # VDTERL #
00706  M00S00703.virterm +++|*ENDIF
00707  M00S00704.virterm +++|CONTROL EJECT;
00708  M00S00705.virterm +++|
00709  M00S00706.virterm +++|PROC VDTGTF(WORD,INDEX);
00710  M00S00707.virterm +++|
00711  M00S00708.virterm +++|# TITLE VDTGTF - GET TERMINAL ATTRIBUTE FLAGS. #
00712  M00S00709.virterm +++|
00713  M00S00710.virterm +++|BEGIN  # VDTGTF #
00714  M00S00711.virterm +++|
00715  M00S00712.virterm +++|#
00716  M00S00713.virterm +++|**    VDTGTF - GET TERMINAL ATTRIBUTE FLAGS.
00717  M00S00714.virterm +++|*
00718  M00S00715.virterm +++|*     THIS PROCEDURE RETURNS *TDU* TERMINAL ATTRIBUTE FLAGS.
00719  M00S00716.virterm +++|*
00720  M00S00717.virterm +++|*     PROC VDTGTF(WORD,INDEX)
00721  M00S00718.virterm +++|*
00722  M00S00719.virterm +++|*     EXIT      WORD       = TERMINAL ATTRIBUTE WORD FROM *TDU* TABLE.
00723  M00S00720.virterm +++|#
00724  M00S00721.virterm +++|ITEM WORD       U;                   # TERMINAL ATTRIBUTE WORD #
00725  M00S00722.virterm +++|ITEM INDEX      I;                   # INDEX INTO *TDU* TABLE #
00726  M00S00723.virterm +++|
00727  M00S00724.virterm +++|WORD = TABHEADONE[INDEX];            # RETURN WORD FROM TABLE #
00728  M00S00725.virterm +++|
00729  M00S00726.virterm +++|END  # VDTGTF #
00730  M00S00727.virterm +++|*IF DEF,ECHO
00731  M00S00728.virterm +++|CONTROL EJECT;
00732  M00S00729.virterm +++|
00733  M00S00730.virterm +++|PROC VDTINC;
00734  M00S00731.virterm +++|
00735  M00S00732.virterm +++|# TITLE VDTINC - INSERT ONE SPACE CHARACTER. #
00736  M00S00733.virterm +++|
00737  M00S00734.virterm +++|BEGIN  # VDTINC #
00738  M00S00735.virterm +++|
00739  M00S00736.virterm +++|#
00740  M00S00737.virterm +++|**    VDTINC - INSERT ONE SPACE CHARACTER.
00741  M00S00738.virterm +++|*
00742  M00S00739.virterm +++|*     THIS PROCEDURE INSERTS ONE BLANK CHARACTER INTO THE TEXT ON THE
00743  M00S00740.virterm +++|*     SCREEN,  SHIFTING EXISTING TEXT PAST THE CURSOR ONE POSITION TO
00744  M00S00741.virterm +++|*     THE RIGHT.
00745  M00S00742.virterm +++|*
00746  M00S00743.virterm +++|*     PROC VDTINC
00747  M00S00744.virterm +++|*
00748  M00S00745.virterm +++|*     CALLS     VDCTRL.
00749  M00S00746.virterm +++|#
00750  M00S00747.virterm +++|
00751  M00S00748.virterm +++|VDCTRL(OUT"INSERTCHAR");             # INSERT CHARACTER #
00752  M00S00749.virterm +++|
00753  M00S00750.virterm +++|END  # VDTINC #
00754  M00S00751.virterm +++|CONTROL EJECT;
00755  M00S00752.virterm +++|
00756  M00S00753.virterm +++|PROC VDTINL;
00757  M00S00754.virterm +++|
00758  M00S00755.virterm +++|# TITLE VDTINL - INSERT ONE BLANK LINE. #
00759  M00S00756.virterm +++|
00760  M00S00757.virterm +++|BEGIN  # VDTINL #
00761  M00S00758.virterm +++|
00762  M00S00759.virterm +++|#
00763  M00S00760.virterm +++|**    VDTINL - INSERT ONE BLANK LINE.
00764  M00S00761.virterm +++|*
00765  M00S00762.virterm +++|*     THIS PROCEDURE INSERTS A BLANK LINE, MOVING THE LINE THAT
00766  M00S00763.virterm +++|*     THE CURSOR IS ON AND ALL FOLLOWING LINES DOWN ONE, POS-
00767  M00S00764.virterm +++|*     TIONING THE CURSOR TO THE START OF THE LINE.
00768  M00S00765.virterm +++|*
00769  M00S00766.virterm +++|*     PROC VDTINL
00770  M00S00767.virterm +++|*
00771  M00S00768.virterm +++|*     CALLS     VDCTRL, VDMOVE.
00772  M00S00769.virterm +++|*
00773  M00S00770.virterm +++|*     USES      VTXCUR.
00774  M00S00771.virterm +++|#
00775  M00S00772.virterm +++|
00776  M00S00773.virterm +++|VDCTRL(OUT"INSLNECURL");             # INSERT LINE, CURSOR LEFT #
00777  M00S00774.virterm +++|IF NUMBERBYTE EQ 0 THEN
00778  M00S00775.virterm +++|  BEGIN                              # IF NO FUNCTION AVAILABLE #
00779  M00S00776.virterm +++|  VDCTRL(OUT"INSERTLINE");           # INSERT LINE #
00780  M00S00777.virterm +++|  IF NUMBERBYTE NQ 0 AND VTXCUR NQ 0 THEN
00781  M00S00778.virterm +++|    BEGIN                            # IF POSITION NEEDS UPDATE #
00782  M00S00779.virterm +++|    VTXCUR = 0;                      # CLEAR X POSITION #
00783  M00S00780.virterm +++|    VDMOVE(VTXCUR,VTYCUR);           # POSITION CURSOR #
00784  M00S00781.virterm +++|    END
00785  M00S00782.virterm +++|  END
00786  M00S00783.virterm +++|ELSE
00787  M00S00784.virterm +++|  BEGIN                              # FUNCTION AVAILABLE #
00788  M00S00785.virterm +++|  VTXCUR = 0;                        # CLEAR X POSITION #
00789  M00S00786.virterm +++|  END
00790  M00S00787.virterm +++|
00791  M00S00788.virterm +++|END  # VDTINL #
00792  M00S00789.virterm +++|*ENDIF
00793  M00S00790.virterm +++|CONTROL EJECT;
00794  M00S00791.virterm +++|
00795  M00S00792.virterm +++|PROC VDTINP(ORDINAL,COLUMN,LINE,CHAR,N);
00796  M00S00793.virterm +++|
00797  M00S00794.virterm +++|# TITLE VDTINP - IDENTIFY NEXT VIRTUAL INPUT EVENT. #
00798  M00S00795.virterm +++|
00799  M00S00796.virterm +++|BEGIN  # VDTINP #
00800  M00S00797.virterm +++|
00801  M00S00798.virterm +++|#
00802  M00S00799.virterm +++|**    VDTINP - IDENTIFY NEXT VIRTUAL INPUT EVENT.
00803  M00S00800.virterm +++|*
00804  M00S00801.virterm +++|*     THIS PROCEDURE INDENTIFIES THE NEXT VIRTUAL TERMINAL INPUT
00805  M00S00802.virterm +++|*     EVENT.  THIS REQUIRES THAT *VDTBOI* MUST BE CALLED FIRST TO
00806  M00S00803.virterm +++|*     SET UP FOR INPUT EVENTS.
00807  M00S00804.virterm +++|*
00808  M00S00805.virterm +++|*     PROC VDTINP(ORDINAL,COLUMN,LINE,CHAR,N)
00809  M00S00806.virterm +++|*
00810  M00S00807.virterm +++|*     ENTRY     VTINCR     = RESIDUAL CURSOR INCREMENT.
00811  M00S00808.virterm +++|*               VTXMAX     = NUMBER OF COLUMNS ON SCREEN.
00812  M00S00809.virterm +++|*               VTYMAX     = NUMBER OF LINES ON SCREEN.
00813  M00S00810.virterm +++|*
00814  M00S00811.virterm +++|*     EXIT      ORDINAL    = EVENT CATEGORY.
00815  M00S00812.virterm +++|*               CHAR       = DATA CHARACTER, OR FUNCTION ORDINAL.
00816  M00S00813.virterm +++|*               COLUMN     = COLUMN CURSOR POSITION.
00817  M00S00814.virterm +++|*               LINE       = LINE CURSOR POSITION.
00818  M00S00815.virterm +++|*               N          = INCREMENTAL CURSOR MOVEMENT.
00819  M00S00816.virterm +++|*
00820  M00S00817.virterm +++|*     CALLS     VDTIINP.
00821  M00S00818.virterm +++|#
00822  M00S00819.virterm +++|
00823  M00S00820.virterm +++|ITEM ORDINAL    I;                   # EVENT CATEGORY #
00824  M00S00821.virterm +++|ITEM COLUMN     I;                   # COLUMN POSITION #
00825  M00S00822.virterm +++|ITEM LINE       I;                   # LINE POSITION #
00826  M00S00823.virterm +++|ITEM CHAR       I;                   # DATA CHARACTER #
00827  M00S00824.virterm +++|ITEM N          I;                   # INCREMENTAL CURSOR MOVEMENT #
00828  M00S00825.virterm +++|
00829  M00S00826.virterm +++|VDTIINP;                             # PERFORM INPUT SEQUENCE #
00830  M00S00827.virterm +++|ORDINAL = VTORDN;
00831  M00S00828.virterm +++|COLUMN = VTXCUR;
00832  M00S00829.virterm +++|LINE = VTYCUR;
00833  M00S00830.virterm +++|CHAR = VTCHAR;
00834  M00S00831.virterm +++|N = VTDELT;
00835  M00S00832.virterm +++|
00836  M00S00833.virterm +++|END  # VDTINP #
00837  M00S00834.virterm +++|CONTROL EJECT;
00838  M00S00835.virterm +++|
00839  M00S00836.virterm +++|PROC VDTPRO(ORD);
00840  M00S00837.virterm +++|
00841  M00S00838.virterm +++|# TITLE VDTPRO - SET PROTECTION. #
00842  M00S00839.virterm +++|
00843  M00S00840.virterm +++|BEGIN  # VDTPRO #
00844  M00S00841.virterm +++|
00845  M00S00842.virterm +++|#
00846  M00S00843.virterm +++|**    VDTPRO - SET PROTECTION.
00847  M00S00844.virterm +++|*
00848  M00S00845.virterm +++|*     THIS PROCEDURE ISSUES OUTPUT SEQUENCES DEALING WITH PROTECT.
00849  M00S00846.virterm +++|*
00850  M00S00847.virterm +++|*     PROC VDTPRO(ORD)
00851  M00S00848.virterm +++|*
00852  M00S00849.virterm +++|*     ENTRY     ORD        = OUTPUT SEQUENCE ORDINAL FOR PROTECT
00853  M00S00850.virterm +++|*                            ALL, BEGIN DISPLAY OR END DISPLAY.
00854  M00S00851.virterm +++|*
00855  M00S00852.virterm +++|*     EXIT      REQUESTED SEQUENCE ISSUED.
00856  M00S00853.virterm +++|*
00857  M00S00854.virterm +++|*     CALLS     VDCTRL.
00858  M00S00855.virterm +++|#
00859  M00S00856.virterm +++|ITEM ORD        I;                   # OUTPUT SEQUENCE ORDINAL #
00860  M00S00857.virterm +++|
00861  M00S00858.virterm +++|VDCTRL(ORD);                         # ISSUE REQUESTED SEQUENCE #
00862  M00S00859.virterm +++|
00863  M00S00860.virterm +++|END  # VDTPRO #
00864  M00S00861.virterm +++|CONTROL EJECT;
00865  M00S00862.virterm +++|
00866  M00S00863.virterm +++|PROC VDTPSU;
00867  M00S00864.virterm +++|
00868  M00S00865.virterm +++|# TITLE VDTPSU - PSEUDO UNDERLINE. #
00869  M00S00866.virterm +++|
00870  M00S00867.virterm +++|BEGIN  # VDTPSU #
00871  M00S00868.virterm +++|
00872  M00S00869.virterm +++|#
00873  M00S00870.virterm +++|**    VDTPSU - PSEUDO UNDERLINE.
00874  M00S00871.virterm +++|*
00875  M00S00872.virterm +++|*     THIS PROCEDURE ALLOWS INPUT FIELDS TO BE SEEN ON DUMB TERMINALS
00876  M00S00873.virterm +++|*     BY TURNING THE BLANK AREA OF AN INPUT FIELD INTO UNDERSCORES.
00877  M00S00874.virterm +++|*
00878  M00S00875.virterm +++|*     PROC VDTPSU
00879  M00S00876.virterm +++|*
00880  M00S00877.virterm +++|*     ENTRY     VTPSUNDACT  = TRUE, IF PSEUDO UNDERLINING.
00881  M00S00878.virterm +++|*
00882  M00S00879.virterm +++|*     EXIT      BLANK OR UNDERSCORE OUTPUT AS NECESSARY.
00883  M00S00880.virterm +++|#
00884  M00S00881.virterm +++|
00885  M00S00882.virterm +++|IF VTPSUNDACT[0] THEN
00886  M00S00883.virterm +++|  BEGIN                              # IF PSEUDO UNDERLINING #
00887  M00S00884.virterm +++|  VDTCHR(O"0137");
00888  M00S00885.virterm +++|  END
00889  M00S00886.virterm +++|ELSE
00890  M00S00887.virterm +++|  BEGIN                              # JUST A BLANK #
00891  M00S00888.virterm +++|  VDTCHR(O"0040");
00892  M00S00889.virterm +++|  END
00893  M00S00890.virterm +++|
00894  M00S00891.virterm +++|END  # VDTPSU #
00895  M00S00892.virterm +++|*IF DEF,ECHO
00896  M00S00893.virterm +++|CONTROL EJECT;
00897  M00S00894.virterm +++|
00898  M00S00895.virterm +++|PROC VDTRES;
00899  M00S00896.virterm +++|
00900  M00S00897.virterm +++|# TITLE VDTRES - RESET. #
00901  M00S00898.virterm +++|
00902  M00S00899.virterm +++|BEGIN  # VDTRES #
00903  M00S00900.virterm +++|
00904  M00S00901.virterm +++|#
00905  M00S00902.virterm +++|**    VDTRES - RESET.
00906  M00S00903.virterm +++|*
00907  M00S00904.virterm +++|*     THIS PROCEDURE ISSUES A RESET SEQUENCE.
00908  M00S00905.virterm +++|*
00909  M00S00906.virterm +++|*     PROC VDTRES
00910  M00S00907.virterm +++|*
00911  M00S00908.virterm +++|*     CALLS     VDCTRL.
00912  M00S00909.virterm +++|#
00913  M00S00910.virterm +++|
00914  M00S00911.virterm +++|VDCTRL(OUT"RESET");                  # ISSUE RESET SEQUENCE #
00915  M00S00912.virterm +++|
00916  M00S00913.virterm +++|END  # VDTRES #
00917  M00S00914.virterm +++|CONTROL EJECT;
00918  M00S00915.virterm +++|
00919  M00S00916.virterm +++|PROC VDTRET;
00920  M00S00917.virterm +++|
00921  M00S00918.virterm +++|# TITLE VDTRET - RETURN. #
00922  M00S00919.virterm +++|
00923  M00S00920.virterm +++|BEGIN  # VDTRET #
00924  M00S00921.virterm +++|
00925  M00S00922.virterm +++|#
00926  M00S00923.virterm +++|**    VDTRET - RETURN.
00927  M00S00924.virterm +++|*
00928  M00S00925.virterm +++|*     THIS PROCEDURE ISSUES A RETURN SEQUENCE.
00929  M00S00926.virterm +++|*
00930  M00S00927.virterm +++|*     PROC VDTRET
00931  M00S00928.virterm +++|*
00932  M00S00929.virterm +++|*     CALLS     VDCTRL.
00933  M00S00930.virterm +++|#
00934  M00S00931.virterm +++|
00935  M00S00932.virterm +++|VDCTRL(OUT"RET");
00936  M00S00933.virterm +++|
00937  M00S00934.virterm +++|END  # VDTRET #
00938  M00S00935.virterm +++|CONTROL EJECT;
00939  M00S00936.virterm +++|
00940  M00S00937.virterm +++|PROC VDTTAB;
00941  M00S00938.virterm +++|
00942  M00S00939.virterm +++|# TITLE VDTTAB - TAB FORWARD. #
00943  M00S00940.virterm +++|
00944  M00S00941.virterm +++|BEGIN  # VDTTAB #
00945  M00S00942.virterm +++|
00946  M00S00943.virterm +++|#
00947  M00S00944.virterm +++|**    VDTTAB - TAB FORWARD.
00948  M00S00945.virterm +++|*
00949  M00S00946.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR TO THE NEXT TAB POSITION OR
00950  M00S00947.virterm +++|*     UNPROTECTED FIELD.
00951  M00S00948.virterm +++|*
00952  M00S00949.virterm +++|*     PROC VDTTAB
00953  M00S00950.virterm +++|*
00954  M00S00951.virterm +++|*     CALLS     VDCTRL.
00955  M00S00952.virterm +++|*
00956  M00S00953.virterm +++|*     NOTES     THE INTERNAL CURSOR POSITION IS INCORRECT AFTER
00957  M00S00954.virterm +++|*               A TAB FUNCTION SO PROCEDURE VDTCOR MUST BE CALLED.
00958  M00S00955.virterm +++|#
00959  M00S00956.virterm +++|
00960  M00S00957.virterm +++|VDCTRL(OUT"TABFORWARD");             # TAB FORWARD #
00961  M00S00958.virterm +++|
00962  M00S00959.virterm +++|END  # VDTTAB #
00963  M00S00960.virterm +++|CONTROL EJECT;
00964  M00S00961.virterm +++|
00965  M00S00962.virterm +++|PROC VDTTBB;
00966  M00S00963.virterm +++|
00967  M00S00964.virterm +++|# TITLE VDTTBB - TAB BACKWARD. #
00968  M00S00965.virterm +++|
00969  M00S00966.virterm +++|BEGIN  # VDTTBB #
00970  M00S00967.virterm +++|
00971  M00S00968.virterm +++|#
00972  M00S00969.virterm +++|**    VDTTBB - TAB BACKWARD.
00973  M00S00970.virterm +++|*
00974  M00S00971.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR TO THE PREVIOUS TAB POSITION
00975  M00S00972.virterm +++|*     OR UNPROTECTED FIELD.
00976  M00S00973.virterm +++|*
00977  M00S00974.virterm +++|*     PROC VDTTBB
00978  M00S00975.virterm +++|*
00979  M00S00976.virterm +++|*     CALLS     VDCTRL.
00980  M00S00977.virterm +++|*
00981  M00S00978.virterm +++|*     NOTES     THE INTERNAL CURSOR POSITION IS INCORRECT AFTER
00982  M00S00979.virterm +++|*               A TAB FUNCTION SO PROCEDURE VDTCOR MUST BE CALLED.
00983  M00S00980.virterm +++|#
00984  M00S00981.virterm +++|
00985  M00S00982.virterm +++|VDCTRL(OUT"TABACKWARD");             # TAB BACKWARD #
00986  M00S00983.virterm +++|
00987  M00S00984.virterm +++|END  # VDTTBB #
00988  M00S00985.virterm +++|*ENDIF
00989  M00S00986.virterm +++|
00990  M00S00987.virterm +++|CONTROL FI;                          # END OF SFORM ONLY PROCEDURES #
00991  M00S00988.virterm +++|CONTROL EJECT;                       # VDTTFF USED BY SFORM AND FSE #
00992  M00S00989.virterm +++|
00993  M00S00990.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
00994  M00S00991.virterm +++|
00995  M00S00992.virterm +++|PROC VDTTFF(OUTORD,COUNT);
00996  M00S00993.virterm +++|
00997  M00S00994.virterm +++|# TITLE VDTTFF - TEST FOR OUTPUT FUNCTION. #
00998  M00S00995.virterm +++|
00999  M00S00996.virterm +++|BEGIN  # VDTTFF #
01000  M00S00997.virterm +++|
01001  M00S00998.virterm +++|#
01002  M00S00999.virterm +++|**    VDTTFF - TEST FOR OUTPUT FUNCTION.
01003  M00S01000.virterm +++|*
01004  M00S01001.virterm +++|*     THIS PROCEDURE TESTS FOR A *TDU* DEFINED OUTPUT FUNCTION FOR A
01005  M00S01002.virterm +++|*     GIVEN ORDINAL.
01006  M00S01003.virterm +++|*
01007  M00S01004.virterm +++|*     PROC VDTTFF(OUTORD,COUNT)
01008  M00S01005.virterm +++|*
01009  M00S01006.virterm +++|*     ENTRY     OUTORD    = THE *TDU* OUPUT ORDINAL TO BE CHECKED.
01010  M00S01007.virterm +++|*
01011  M00S01008.virterm +++|*     EXIT      COUNT     = THE NUMBER OF BYTES IN THE SEQUENCE.
01012  M00S01009.virterm +++|#
01013  M00S01010.virterm +++|
01014  M00S01011.virterm +++|ITEM OUTORD     I;                   # *TDU* OUTPUT ORDINAL #
01015  M00S01012.virterm +++|ITEM COUNT      I;                   # BTYE COUNT FOR SEQUENCE #
01016  M00S01013.virterm +++|
01017  M00S01014.virterm +++|ITEM TDUOFFSET  I;                   # *TDU* OFFSET FOR SEQUENCE #
01018  M00S01015.virterm +++|ITEM CHARINDEX  I;                   # CHARACTER INDEX INTO WORD #
01019  M00S01016.virterm +++|ITEM WORDINDEX  I;                   # WORD INDEX INTP *TDU* TABLE #
01020  M00S01017.virterm +++|
01021  M00S01018.virterm +++|IF OUTORD GR OUT"RESERVED" AND OUTORD LS OUT"LASTOUT" THEN
01022  M00S01019.virterm +++|  BEGIN                              # IF LEGAL OUTPUT ORDINAL #
01023  M00S01020.virterm +++|  WORDINDEX = OUTORD / 5;            # GET OFFSET FOR ORDINAL #
01024  M00S01021.virterm +++|  CHARINDEX = 12 * (OUTORD - (WORDINDEX * 5));
01025  M00S01022.virterm +++|  TDUOFFSET = B<CHARINDEX,12>TABFULLWRD[WORDINDEX];
01026  M00S01023.virterm +++|  IF CHARINDEX NQ 48 THEN
01027  M00S01024.virterm +++|    BEGIN                            # IF NEXT BYTE IS IN SAME WORD #
01028  M00S01025.virterm +++|    COUNT = B<CHARINDEX+12,12>TABFULLWRD[WORDINDEX];
01029  M00S01026.virterm +++|    END
01030  M00S01027.virterm +++|  ELSE
01031  M00S01028.virterm +++|    BEGIN                            # GET BYTE FROM NEXT WORD #
01032  M00S01029.virterm +++|    COUNT = B<0,12>TABFULLWRD[WORDINDEX+1];
01033  M00S01030.virterm +++|    END
01034  M00S01031.virterm +++|  COUNT = COUNT - TDUOFFSET;         # CALCULATE NUMBER OF BYTES #
01035  M00S01032.virterm +++|  IF COUNT LS 0 THEN COUNT = 0;      # IF NEGATIVE COUNT, RETURN ZERO #
01036  M00S01033.virterm +++|  END
01037  M00S01034.virterm +++|ELSE
01038  M00S01035.virterm +++|  BEGIN                              # IF ILLEGAL ORDINAL #
01039  M00S01036.virterm +++|  COUNT = 0;                         # RETURN ZERO COUNT #
01040  M00S01037.virterm +++|  END
01041  M00S01038.virterm +++|
01042  M00S01039.virterm +++|END  # VDTTFF #
01043  M00S01040.virterm +++|
01044  M00S01041.virterm +++|CONTROL FI;                          # END OF IF NOT MULTI USER FSE #
01045  M00S01042.virterm +++|CONTROL EJECT;                       # FSE USED PROCEDURE VDTAPS #
01046  M00S01043.virterm +++|CONTROL IFEQ EDITORVDT,1;            # IF EDITOR VERSION OF VIRTERM #
01047  M00S01044.virterm +++|  CONTROL IFEQ SINGLE,1;             # IF NOT MULTI USER FSE #
01048  M00S01045.virterm +++|
01049  M00S01046.virterm +++|    PROC VDTAPS(NAME,STRING,LENGTH,STAT);
01050  M00S01047.virterm +++|
01051  M00S01048.virterm +++|    # TITLE VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE. #
01052  M00S01049.virterm +++|
01053  M00S01050.virterm +++|    BEGIN  # VDTAPS #
01054  M00S01051.virterm +++|
01055  M00S01052.virterm +++|    #
01056  M00S01053.virterm +++|    **    VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE.
01057  M00S01054.virterm +++|    *
01058  M00S01055.virterm +++|    *     THIS PROCEDURE GETS THE NEXT APPLICATION STRING FROM THE
01059  M00S01056.virterm +++|    *     *TDU* TABLE.
01060  M00S01057.virterm +++|    *
01061  M00S01058.virterm +++|    *     PROC VDTAPS(NAME,STRING,LENGTH,STAT)
01062  M00S01059.virterm +++|    *
01063  M00S01060.virterm +++|    *     ENTRY     NAME       = NAME OF APPLICATION STRING REQUESTED.
01064  M00S01061.virterm +++|    *               TDUINDEX   = WORD COUNT READ SO FAR OF *TDU* TABLE.
01065  M00S01062.virterm +++|    *               TDURESID   = RESIDENT *TDU* TABLE FLAG.
01066  M00S01063.virterm +++|    *
01067  M00S01064.virterm +++|    *     EXIT      STRING     = APPLICATION STRING (SEVEN BIT FORMAT).
01068  M00S01065.virterm +++|    *               LENGTH     = NUMBER OF CHARACTERS IN STRING.
01069  M00S01066.virterm +++|    *               STAT       = 0, IF NO ERROR.
01070  M00S01067.virterm +++|    *                          = 1, IF NO STRING.
01071  M00S01068.virterm +++|    *               TDUINDEX   = UPDATED.
01072  M00S01069.virterm +++|    *
01073  M00S01070.virterm +++|    *     CALLS     VDGETW.
01074  M00S01071.virterm +++|    *
01075  M00S01072.virterm +++|    *     USES      TDUINDEX.
01076  M00S01073.virterm +++|    #
01077  M00S01074.virterm +++|
01078  M00S01075.virterm +++|    ITEM NAME       C(7);            # NAME OF STRING #
01079  M00S01076.virterm +++|    ARRAY STRING [0:0] P(1);
01080  M00S01077.virterm +++|      BEGIN                          # APPLICATION STRING #
01081  M00S01078.virterm +++|      ITEM STRINGWORD U;             # WORD #
01082  M00S01079.virterm +++|      END
01083  M00S01080.virterm +++|    ITEM LENGTH     I;               # NUMBER OF CHARACTERS #
01084  M00S01081.virterm +++|    ITEM STAT       I;               # STATUS RETURNED #
01085  M00S01082.virterm +++|
01086  M00S01083.virterm +++|    ITEM FOUND      B;               # FLAG #
01087  M00S01084.virterm +++|    ITEM COUNTER    I;               # COUNTER #
01088  M00S01085.virterm +++|    ITEM COUNTER2   I;               # COUNTER2 #
01089  M00S01086.virterm +++|    ITEM COUNTER3   I;               # COUNTER3 #
01090  M00S01087.virterm +++|    ITEM WORD       U;               # WORD FROM *TDU* TABLE #
01091  M00S01088.virterm +++|    ARRAY WORDEXP [0:0] P(1);        # EXPANDED *TDU* TABLE WORD #
01092  M00S01089.virterm +++|      BEGIN
01093  M00S01090.virterm +++|      ITEM WORDFULL   U(00,00,60);   # FULL WORD #
01094  M00S01091.virterm +++|      ITEM WORDNAME   C(00,00,07);   # APPLICATION STRING NAME #
01095  M00S01092.virterm +++|      ITEM WORDCOUNT  I(00,42,18);   # CHARACTER COUNT #
01096  M00S01093.virterm +++|      END
01097  M00S01094.virterm +++|
01098  M00S01095.virterm +++|    STAT = 0;
01099  M00S01096.virterm +++|    IF TDUINDEX[0] GQ TABSTRINIT[0] THEN
01100  M00S01097.virterm +++|      BEGIN                          # IF PAST APPLICATION STRINGS #
01101  M00S01098.virterm +++|      STAT = 1;                      # NO MORE STRINGS #
01102  M00S01099.virterm +++|      END
01103  M00S01100.virterm +++|    ELSE
01104  M00S01101.virterm +++|      BEGIN
01105  M00S01102.virterm +++|      IF TDUINDEX[0] LS TABSTRAPPS THEN
01106  M00S01103.virterm +++|        BEGIN                        # IF NOT AT APPLICATION STRINGS #
01107  M00S01104.virterm +++|        COUNTER2 = TABSTRAPPS[0] - TDUINDEX[0];
01108  M00S01105.virterm +++|        FOR COUNTER = 0 STEP 1 UNTIL COUNTER2 - 1 DO
01109  M00S01106.virterm +++|          BEGIN                      # SKIP TO APPLICATION STRINGS #
01110  M00S01107.virterm +++|          VDGETW(WORD,STAT);
01111  M00S01108.virterm +++|          END
01112  M00S01109.virterm +++|        END
01113  M00S01110.virterm +++|      IF STAT EQ 0 THEN
01114  M00S01111.virterm +++|        BEGIN                        # IF NOT END OF TABLE #
01115  M00S01112.virterm +++|        FOUND = FALSE;               # NOT FOUND YET #
01116  M00S01113.virterm +++|        FOR COUNTER = 0 STEP 1 WHILE STAT EQ 0 AND NOT FOUND DO
01117  M00S01114.virterm +++|          BEGIN
01118  M00S01115.virterm +++|          VDGETW(WORD,STAT);         # GET APPLICATION STRING NAME #
01119  M00S01116.virterm +++|          WORDFULL = WORD;
01120  M00S01117.virterm +++|          IF WORDCOUNT[0] EQ 0 THEN
01121  M00S01118.virterm +++|            BEGIN                    # IF END OF APPLICATION STRINGS #
01122  M00S01119.virterm +++|            STAT = 1;
01123  M00S01120.virterm +++|            END
01124  M00S01121.virterm +++|          IF STAT EQ 0 THEN
01125  M00S01122.virterm +++|            BEGIN                    # IF NOT END OF TABLE #
01126  M00S01123.virterm +++|            COUNTER3 = (WORDCOUNT[0] + 7) / 8;
01127  M00S01124.virterm +++|            IF WORDNAME[0] NQ NAME THEN
01128  M00S01125.virterm +++|              BEGIN                  # IF NO MATCH ON NAME #
01129  M00S01126.virterm +++|              FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO
01130  M00S01127.virterm +++|                BEGIN
01131  M00S01128.virterm +++|                VDGETW(WORD,STAT);   # SKIP THROUGH STRING #
01132  M00S01129.virterm +++|                END
01133  M00S01130.virterm +++|              END
01134  M00S01131.virterm +++|            ELSE
01135  M00S01132.virterm +++|              BEGIN                  # IF NAME MATCHES #
01136  M00S01133.virterm +++|              FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO
01137  M00S01134.virterm +++|                BEGIN
01138  M00S01135.virterm +++|                VDGETW(WORD,STAT);   # GET WORD FROM *TDU* TABLE #
01139  M00S01136.virterm +++|                STRINGWORD[COUNTER2] = WORD;
01140  M00S01137.virterm +++|                END
01141  M00S01138.virterm +++|              LENGTH = WORDCOUNT[0];
01142  M00S01139.virterm +++|              FOUND = TRUE;          # FOUND IT #
01143  M00S01140.virterm +++|              END
01144  M00S01141.virterm +++|            END
01145  M00S01142.virterm +++|          END
01146  M00S01143.virterm +++|        END
01147  M00S01144.virterm +++|      END
01148  M00S01145.virterm +++|
01149  M00S01146.virterm +++|    END  # VDTAPS #
01150  M00S01147.virterm +++|  CONTROL FI;                        # END OF NOT MULTI USER FSE #
01151  M00S01148.virterm +++|CONTROL FI;                          # END OF IF EDITOR VIRTERM #
01152  M00S01149.virterm +++|CONTROL EJECT;                       # SFORM USED PROCEDURE VDTAPS #
01153  M00S01150.virterm +++|CONTROL IFEQ EDITORVDT,1;            # IF EDITOR VIRTERM #
01154  M00S01151.virterm +++|CONTROL IFEQ EDITORVDT,0;            # IF NOT EDITOR VIRTERM #
01155  M00S01152.virterm +++|
01156  M00S01153.virterm +++|  PROC VDTAPS(NAME,STRING,LENGTH,STAT);
01157  M00S01154.virterm +++|
01158  M00S01155.virterm +++|  # TITLE VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE. #
01159  M00S01156.virterm +++|
01160  M00S01157.virterm +++|  BEGIN  # VDTAPS #
01161  M00S01158.virterm +++|
01162  M00S01159.virterm +++|  #
01163  M00S01160.virterm +++|  **    VDTAPS - GET APPLICATION STRING FROM *TDU* TABLE.
01164  M00S01161.virterm +++|  *
01165  M00S01162.virterm +++|  *     THIS PROCEDURE GETS THE NEXT APPLICATION STRING FROM THE
01166  M00S01163.virterm +++|  *     *TDU* TABLE.
01167  M00S01164.virterm +++|  *
01168  M00S01165.virterm +++|  *     PROC VDTAPS(NAME,STRING,LENGTH,STAT)
01169  M00S01166.virterm +++|  *
01170  M00S01167.virterm +++|  *     ENTRY     NAME       = NAME OF APPLICATION STRING REQUESTED.
01171  M00S01168.virterm +++|  *               TDUINDEX   = WORD COUNT READ SO FAR OF *TDU* TABLE.
01172  M00S01169.virterm +++|  *               TDURESID   = RESIDENT *TDU* TABLE FLAG.
01173  M00S01170.virterm +++|  *
01174  M00S01171.virterm +++|  *     EXIT      STRING     = APPLICATION STRING (8/12 FORMAT).
01175  M00S01172.virterm +++|  *               LENGTH     = NUMBER OF CHARACTERS IN STRING.
01176  M00S01173.virterm +++|  *               STAT       = 0, IF NO ERROR.
01177  M00S01174.virterm +++|  *                          = 1, IF NO STRING.
01178  M00S01175.virterm +++|  *               TDUINDEX   = UPDATED.
01179  M00S01176.virterm +++|  *
01180  M00S01177.virterm +++|  *     CALLS     VDGETW.
01181  M00S01178.virterm +++|  *
01182  M00S01179.virterm +++|  *     USES      TDUINDEX.
01183  M00S01180.virterm +++|  #
01184  M00S01181.virterm +++|
01185  M00S01182.virterm +++|  ITEM NAME       C(7);              # NAME OF STRING #
01186  M00S01183.virterm +++|  ARRAY STRING [0:0] P(1);
01187  M00S01184.virterm +++|    BEGIN                            # APPLICATION STRING #
01188  M00S01185.virterm +++|    ITEM STRINGWORD U;               # WORD #
01189  M00S01186.virterm +++|    END
01190  M00S01187.virterm +++|  ITEM LENGTH     I;                 # NUMBER OF CHARACTERS #
01191  M00S01188.virterm +++|  ITEM STAT       I;                 # STATUS RETURNED #
01192  M00S01189.virterm +++|
01193  M00S01190.virterm +++|  ITEM FOUND      B;                 # FLAG #
01194  M00S01191.virterm +++|  ITEM COUNTER    I;                 # COUNTER #
01195  M00S01192.virterm +++|  ITEM COUNTER2   I;                 # COUNTER2 #
01196  M00S01193.virterm +++|  ITEM COUNTER3   I;                 # COUNTER3 #
01197  M00S01194.virterm +++|  ITEM WORD       U;                 # WORD FROM *TDU* TABLE #
01198  M00S01195.virterm +++|  ARRAY WORDEXP [0:0] P(1);          # EXPANDED *TDU* TABLE WORD #
01199  M00S01196.virterm +++|    BEGIN
01200  M00S01197.virterm +++|    ITEM WORDFULL   U(00,00,60);     # FULL WORD #
01201  M00S01198.virterm +++|    ITEM WORDNAME   C(00,00,07);     # APPLICATION STRING NAME #
01202  M00S01199.virterm +++|    ITEM WORDCOUNT  I(00,42,18);     # CHARACTER COUNT #
01203  M00S01200.virterm +++|    END
01204  M00S01201.virterm +++|
01205  M00S01202.virterm +++|  STAT = 0;
01206  M00S01203.virterm +++|  IF TDUINDEX[0] GQ TABSTRINIT[0] THEN
01207  M00S01204.virterm +++|    BEGIN                            # IF PAST APPLICATION STRINGS #
01208  M00S01205.virterm +++|    STAT = 1;                        # NO MORE STRINGS #
01209  M00S01206.virterm +++|    END
01210  M00S01207.virterm +++|  ELSE
01211  M00S01208.virterm +++|    BEGIN                            # NOT PAST APPLICATION STRINGS #
01212  M00S01209.virterm +++|    IF TDUINDEX[0] LS TABSTRAPPS THEN
01213  M00S01210.virterm +++|      BEGIN                          # IF NOT AT APPLICATION STRINGS #
01214  M00S01211.virterm +++|      COUNTER2 = TABSTRAPPS[0] - TDUINDEX[0];
01215  M00S01212.virterm +++|      FOR COUNTER = 0 STEP 1 UNTIL COUNTER2 - 1 DO
01216  M00S01213.virterm +++|        BEGIN                        # SKIP TO APPLICATION STRINGS #
01217  M00S01214.virterm +++|        VDGETW(WORD,STAT);
01218  M00S01215.virterm +++|        END
01219  M00S01216.virterm +++|      END
01220  M00S01217.virterm +++|    IF STAT EQ 0 THEN
01221  M00S01218.virterm +++|      BEGIN                          # IF NOT END OF TABLE #
01222  M00S01219.virterm +++|      FOUND = FALSE;                 # NOT FOUND YET #
01223  M00S01220.virterm +++|      FOR COUNTER = 0 STEP 1 WHILE STAT EQ 0 AND NOT FOUND DO
01224  M00S01221.virterm +++|        BEGIN
01225  M00S01222.virterm +++|        VDGETW(WORD,STAT);           # GET APPLICATION STRING NAME #
01226  M00S01223.virterm +++|        WORDFULL = WORD;
01227  M00S01224.virterm +++|        IF WORDCOUNT[0] EQ 0 THEN
01228  M00S01225.virterm +++|          BEGIN                      # IF END OF APPLICATION STRINGS #
01229  M00S01226.virterm +++|          STAT = 1;
01230  M00S01227.virterm +++|          END
01231  M00S01228.virterm +++|        IF STAT EQ 0 THEN
01232  M00S01229.virterm +++|          BEGIN                      # IF NOT END OF TABLE #
01233  M00S01230.virterm +++|          COUNTER3 = (WORDCOUNT[0] + 7) / 8;
01234  M00S01231.virterm +++|          IF WORDNAME[0] NQ NAME THEN
01235  M00S01232.virterm +++|            BEGIN                    # IF NO MATCH ON NAME #
01236  M00S01233.virterm +++|            FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO
01237  M00S01234.virterm +++|              BEGIN
01238  M00S01235.virterm +++|              VDGETW(WORD,STAT);     # SKIP THROUGH STRING #
01239  M00S01236.virterm +++|              END
01240  M00S01237.virterm +++|            END
01241  M00S01238.virterm +++|          ELSE
01242  M00S01239.virterm +++|            BEGIN                    # IF NAME MATCHES #
01243  M00S01240.virterm +++|            FOR COUNTER2 = 0 STEP 1 UNTIL COUNTER3 - 1 DO
01244  M00S01241.virterm +++|              BEGIN
01245  M00S01242.virterm +++|              VDGETW(WORD,STAT);     # GET WORD FROM *TDU* TABLE #
01246  M00S01243.virterm +++|              B<0,12>STRINGWORD[COUNTER2] = B<4,7>WORD;
01247  M00S01244.virterm +++|              B<12,12>STRINGWORD[COUNTER2] = B<11,7>WORD;
01248  M00S01245.virterm +++|              B<24,12>STRINGWORD[COUNTER2] = B<18,7>WORD;
01249  M00S01246.virterm +++|              B<36,12>STRINGWORD[COUNTER2] = B<25,7>WORD;
01250  M00S01247.virterm +++|              B<48,12>STRINGWORD[COUNTER2] = B<32,7>WORD;
01251  M00S01248.virterm +++|              END
01252  M00S01249.virterm +++|            LENGTH = WORDCOUNT[0];
01253  M00S01250.virterm +++|            FOUND = TRUE;            # FOUND IT #
01254  M00S01251.virterm +++|            END
01255  M00S01252.virterm +++|          END
01256  M00S01253.virterm +++|        END
01257  M00S01254.virterm +++|      END
01258  M00S01255.virterm +++|    END
01259  M00S01256.virterm +++|
01260  M00S01257.virterm +++|  END  # VDTAPS #
01261  M00S01258.virterm +++|CONTROL FI;                          # END OF IF EDITOR #
01262  M00S01259.virterm +++|CONTROL FI;                          # END OF IF NOT EDITOR #
01263  M00S01260.virterm +++|CONTROL EJECT;
01264  M00S01261.virterm +++|
01265  M00S01262.virterm +++|PROC VDTBEL;
01266  M00S01263.virterm +++|
01267  M00S01264.virterm +++|# TITLE VDTBEL - RING THE BELL. #
01268  M00S01265.virterm +++|
01269  M00S01266.virterm +++|IOBEGIN(VDTBEL)
01270  M00S01267.virterm +++|
01271  M00S01268.virterm +++|#
01272  M00S01269.virterm +++|**    VDTBEL - RING THE BELL.
01273  M00S01270.virterm +++|*
01274  M00S01271.virterm +++|*     THIS PROCEDURE SOUNDS THE AUDIBLE ALARM.
01275  M00S01272.virterm +++|*
01276  M00S01273.virterm +++|*     PROC VDTBEL
01277  M00S01274.virterm +++|*
01278  M00S01275.virterm +++|*     CALLS     VDCTRL.
01279  M00S01276.virterm +++|#
01280  M00S01277.virterm +++|
01281  M00S01278.virterm +++|VDCTRL(OUT"RINGBELL");               # RING THE BELL #
01282  M00S01279.virterm +++|
01283  M00S01280.virterm +++|IOEND  # VDTBELL #
01284  M00S01281.virterm +++|CONTROL EJECT;
01285  M00S01282.virterm +++|
01286  M00S01283.virterm +++|PROC VDTBOO;
01287  M00S01284.virterm +++|
01288  M00S01285.virterm +++|# TITLE VDTBOO - BEGINNING OF OUTPUT SEQUENCE. #
01289  M00S01286.virterm +++|
01290  M00S01287.virterm +++|IOBEGIN(VDTBOO)
01291  M00S01288.virterm +++|
01292  M00S01289.virterm +++|#
01293  M00S01290.virterm +++|**    VDTBOO - BEGINNING OF OUTPUT SEQUENCE.
01294  M00S01291.virterm +++|*
01295  M00S01292.virterm +++|*     THIS PROCEDURE IS CALLED TO START EACH OUTPUT SEQUENCE.
01296  M00S01293.virterm +++|*
01297  M00S01294.virterm +++|*     PROC VDTBOO
01298  M00S01295.virterm +++|*
01299  M00S01296.virterm +++|*     CALLS  VDCTRL.
01300  M00S01297.virterm +++|*
01301  M00S01298.virterm +++|*     NOTES  TO PROTECT USERS FROM THEMSELVES THE CONTROL
01302  M00S01299.virterm +++|*            SEQUENCE TO TURN OFF INSERT MODE IS ISSUED.
01303  M00S01300.virterm +++|#
01304  M00S01301.virterm +++|
01305  M00S01302.virterm +++|VTINSMODE[0] = FALSE;                # INSERT MODE IS FALSE #
01306  M00S01303.virterm +++|VDCTRL(OUT"INSRTMDOFF");             # TURN OFF INSERT MODE #
01307  M00S01304.virterm +++|VDCTRL(OUT"BEGINOUT");               # BEGIN OUTPUT SEQUENCE #
01308  M00S01305.virterm +++|CONTROL IFEQ EDITORVDT,0;            # IF NOT EDITOR VIRTERM #
01309  M00S01306.virterm +++|  VDCTRL(OUT"BEGINDIS");             # OUTPUT BEGIN DISPLAY #
01310  M00S01307.virterm +++|  IF NUMBERBYTE NQ 0 THEN
01311  M00S01308.virterm +++|    BEGIN                            # IF A SEQUENCE WAS SENT #
01312  M00S01309.virterm +++|    ATTRIBMASK = O"6001";            # PROTECT ATTRIBUTE IS ON #
01313  M00S01310.virterm +++|    END
01314  M00S01311.virterm +++|CONTROL FI;                          # END OF IF NOT EDITOR #
01315  M00S01312.virterm +++|
01316  M00S01313.virterm +++|IOEND  # VDTBOO #
01317  M00S01314.virterm +++|CONTROL EJECT;
01318  M00S01315.virterm +++|
01319  M00S01316.virterm +++|PROC VDTCHR(CHAR);
01320  M00S01317.virterm +++|
01321  M00S01318.virterm +++|# TITLE VDTCHR - OUTPUT ONE BYTE OF TEXT. #
01322  M00S01319.virterm +++|
01323  M00S01320.virterm +++|IOBEGIN(VDTCHR)
01324  M00S01321.virterm +++|
01325  M00S01322.virterm +++|#
01326  M00S01323.virterm +++|**    VDTCHR - OUTPUT ONE 12 BIT BYTE.
01327  M00S01324.virterm +++|*
01328  M00S01325.virterm +++|*     THIS PROCEDURE OUTPUTS A CHARACTER.
01329  M00S01326.virterm +++|*
01330  M00S01327.virterm +++|*     PROC VDTCHR(CHAR)
01331  M00S01328.virterm +++|*
01332  M00S01329.virterm +++|*     ENTRY     CHAR       = 12 BIT BYTE OF DATA.
01333  M00S01330.virterm +++|*
01334  M00S01331.virterm +++|*     EXIT      VTXCUR AND VTYCUR ADJUSTED AS NECESSARY.
01335  M00S01332.virterm +++|*
01336  M00S01333.virterm +++|*     CALLS     VDTOUT.
01337  M00S01334.virterm +++|*
01338  M00S01335.virterm +++|*     USES      VTCHAR, VTXCUR, VTYCUR.
01339  M00S01336.virterm +++|*
01340  M00S01337.virterm +++|*     NOTES     IF THE MOVEMENT OF THE CURSOR THAT WILL OCCUR WHEN
01341  M00S01338.virterm +++|*               THE CHARACTER IS OUTPUT WILL CAUSE THE TERMINAL TO
01342  M00S01339.virterm +++|*               SCROLL THEN THE CHARACTER WILL NOT BE OUTPUT.
01343  M00S01340.virterm +++|#
01344  M00S01341.virterm +++|
01345  M00S01342.virterm +++|ITEM CHAR       I;                   # OUTPUT BYTE #
01346  M00S01343.virterm +++|
01347  M00S01344.virterm +++|VTCHAR = CHAR;
01348  M00S01345.virterm +++|
01349  M00S01346.virterm +++|# END OF NON-REENTRANT PARAMETER USAGE #
01350  M00S01347.virterm +++|
01351  M00S01348.virterm +++|IF VTXCUR EQ VTXMAX THEN
01352  M00S01349.virterm +++|  BEGIN                              # IF PRESENTLY IN LAST COLUMN #
01353  M00S01350.virterm +++|  IF VTYCUR EQ VTYMAX THEN
01354  M00S01351.virterm +++|    BEGIN                            # IF PRESENTLY ON LAST LINE #
01355  M00S01352.virterm +++|    IF TABLASTPOS[0] NQ CURSORMOVE"SCROLL" THEN
01356  M00S01353.virterm +++|      BEGIN                          # IF TERMINAL WILL NOT SCROLL #
01357  M00S01354.virterm +++|      VDTOUT(VTCHAR);                # OUTPUT CHARACTER #
01358  M00S01355.virterm +++|      IF TABLASTPOS[0] GQ CURSORMOVE"SPIRAL" THEN
01359  M00S01356.virterm +++|        BEGIN                        # IF WRAP OR SPIRAL #
01360  M00S01357.virterm +++|        VTXCUR = 0;
01361  M00S01358.virterm +++|        IF TABLASTPOS[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = 0;
01362  M00S01359.virterm +++|        END
01363  M00S01360.virterm +++|      END
01364  M00S01361.virterm +++|    END
01365  M00S01362.virterm +++|  ELSE
01366  M00S01363.virterm +++|    BEGIN                            # NOT YET AT BOTTOM OF SCREEN #
01367  M00S01364.virterm +++|    VDTOUT(VTCHAR);                  # OUTPUT CHARACTER #
01368  M00S01365.virterm +++|    IF TABRGHTCHR[0] GQ CURSORMOVE"SPIRAL" THEN
01369  M00S01366.virterm +++|      BEGIN                          # IF WRAP OR SPIRAL #
01370  M00S01367.virterm +++|      VTXCUR = 0;
01371  M00S01368.virterm +++|      IF TABRGHTCHR[0] EQ CURSORMOVE"SPIRAL" THEN VTYCUR = VTYCUR + 1;
01372  M00S01369.virterm +++|      END
01373  M00S01370.virterm +++|    END
01374  M00S01371.virterm +++|  END
01375  M00S01372.virterm +++|ELSE
01376  M00S01373.virterm +++|  BEGIN                              # NOT YET AT LAST COLUMN #
01377  M00S01374.virterm +++|  VDTOUT(VTCHAR);                    # OUTPUT CHARACTER #
01378  M00S01375.virterm +++|  VTXCUR = VTXCUR + 1;               # ADJUST POSITION #
01379  M00S01376.virterm +++|  END
01380  M00S01377.virterm +++|
01381  M00S01378.virterm +++|IOEND  # VDTCHR #
01382  M00S01379.virterm +++|CONTROL EJECT;
01383  M00S01380.virterm +++|
01384  M00S01381.virterm +++|PROC VDTCLL(XX,YY);
01385  M00S01382.virterm +++|
01386  M00S01383.virterm +++|# TITLE VDTCLL - CLEAR TO END OF LINE. #
01387  M00S01384.virterm +++|
01388  M00S01385.virterm +++|IOBEGIN(VDTCLL)
01389  M00S01386.virterm +++|
01390  M00S01387.virterm +++|#
01391  M00S01388.virterm +++|**    VDTCLL - CLEAR TO END OF LINE.
01392  M00S01389.virterm +++|*
01393  M00S01390.virterm +++|*     THIS PROCEDURE ERASES ALL CHARACTERS FROM THE COLUMN XX TO THE
01394  M00S01391.virterm +++|*     END OF THE LINE FOR LINE YY.
01395  M00S01392.virterm +++|*
01396  M00S01393.virterm +++|*     PROC VDTCLL(XX,YY)
01397  M00S01394.virterm +++|*
01398  M00S01395.virterm +++|*     ENTRY     XX         = X COORDINATE TO CLEAR FROM.
01399  M00S01396.virterm +++|*               YY         = Y COORDINATE OF LINE TO CLEAR.
01400  M00S01397.virterm +++|*
01401  M00S01398.virterm +++|*     EXIT      VTXCUR UPDATED.
01402  M00S01399.virterm +++|*               VTYCUR UPDATED.
01403  M00S01400.virterm +++|*               LINE CLEARED.
01404  M00S01401.virterm +++|*
01405  M00S01402.virterm +++|*     USES      VTHOLD, VTXCUR, VTYCUR.
01406  M00S01403.virterm +++|*
01407  M00S01404.virterm +++|*     CALLS     VDCTRL, VDMOVE, VDTCHR, VDTOUT.
01408  M00S01405.virterm +++|#
01409  M00S01406.virterm +++|
01410  M00S01407.virterm +++|ITEM XX         I;                   # X CORDINATE #
01411  M00S01408.virterm +++|ITEM YY         I;                   # Y CORDINATE #
01412  M00S01409.virterm +++|
01413  M00S01410.virterm +++|# START OF NON-REENTRANT PARAMETER USAGE #
01414  M00S01411.virterm +++|
01415  M00S01412.virterm +++|IF VTXCUR NQ XX OR VTYCUR NQ YY THEN
01416  M00S01413.virterm +++|  BEGIN
01417  M00S01414.virterm +++|  VTXCUR = XX;
01418  M00S01415.virterm +++|  VTYCUR = YY;
01419  M00S01416.virterm +++|
01420  M00S01417.virterm +++|#  END OF NON-REENTRANT PARAMETER USAGE  #
01421  M00S01418.virterm +++|
01422  M00S01419.virterm +++|  VDMOVE(VTXCUR,VTYCUR);             # POSITION CURSOR #
01423  M00S01420.virterm +++|  END
01424  M00S01421.virterm +++|
01425  M00S01422.virterm +++|CONTROL IFEQ EDITORVDT,1;            # IF EDITOR VERSION OF VIRTERM #
01426  M00S01423.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
01427  M00S01424.virterm +++|
01428  M00S01425.virterm +++|#
01429  M00S01426.virterm +++|*     FSE USES THE LAST CHARACTER POSITION OF EACH LINE AS THE FIELD
01430  M00S01427.virterm +++|*     ATTRIBUTE FOR THE NEXT LINE ON A BLOCK MODE TERMINAL.  TO PRE-
01431  M00S01428.virterm +++|*     VENT THIS ATTRIBUTE CHARACTER FROM BEING OVERWRITTEN BY THE
01432  M00S01429.virterm +++|*     NORMAL CLEAR-TO-END-OF-LINE SEQUENCE, A SPECIAL SEQUENCE IS
01433  M00S01430.virterm +++|*     GENERATED THAT ONLY CLEARS UP TO, BUT NOT INCLUDING THE LAST
01434  M00S01431.virterm +++|*     POSITION OF THE LINE.
01435  M00S01432.virterm +++|#
01436  M00S01433.virterm +++|
01437  M00S01434.virterm +++|  IF TABLOCKMDE[0] THEN
01438  M00S01435.virterm +++|    BEGIN                             # IF BLOCK MODE TERMINAL #
01439  M00S01436.virterm +++|    IF VTXCUR NQ VTXMAX THEN
01440  M00S01437.virterm +++|      BEGIN                           # IF NOT ALREADY AT END OF LINE #
01441  M00S01438.virterm +++|      VTI = (VTYCUR * (VTXMAX + 1)) + VTXMAX;
01442  M00S01439.virterm +++|      VDTOUT(X"14");                  # REPEAT TO ADDRESS #
01443  M00S01440.virterm +++|      VDTOUT(RTA3270[B<48,6>VTI]);    # OUTPUT BYTE 1 OF ADDRESS #
01444  M00S01441.virterm +++|      VDTOUT(RTA3270[B<54,6>VTI]);    # OUTPUT BYTE 2 OF ADDRESS #
01445  M00S01442.virterm +++|      VDTOUT(X"00");                  # REPEAT (NULL CHARACTER) #
01446  M00S01443.virterm +++|      VDMOVE(VTXCUR,VTYCUR);          # REPOSITION CURSOR #
01447  M00S01444.virterm +++|      END
01448  M00S01445.virterm +++|    IORET
01449  M00S01446.virterm +++|    END
01450  M00S01447.virterm +++|
01451  M00S01448.virterm +++|CONTROL FI;                           # END OF IF NOT MULTI FSE #
01452  M00S01449.virterm +++|CONTROL FI;                           # END OF IF EDITOR VIRTERM #
01453  M00S01450.virterm +++|
01454  M00S01451.virterm +++|VDCTRL(OUT"CLREOL");                 # CLEAR TO END OF LINE #
01455  M00S01452.virterm +++|IF NUMBERBYTE EQ 0 THEN
01456  M00S01453.virterm +++|  BEGIN                              # IF NO FUNCTION AVAILABLE #
01457  M00S01454.virterm +++|  FOR VTI = VTXCUR STEP 1 UNTIL VTXMAX - 1 DO
01458  M00S01455.virterm +++|    BEGIN                            # UNTIL END OF LINE #
01459  M00S01456.virterm +++|    VDTOUT(X"20");                   # OUTPUT BLANK #
01460  M00S01457.virterm +++|    END
01461  M00S01458.virterm +++|  CONTROL IFEQ EDITORVDT,1;          # IF EDITOR VERSION OF VIRTERM #
01462  M00S01459.virterm +++|    VTHOLD = VTXCUR;                 # SAVE X COORDINATE #
01463  M00S01460.virterm +++|    VTI = VTYCUR;
01464  M00S01461.virterm +++|  CONTROL FI;                        # END OF IF EDITOR VIRTERM #
01465  M00S01462.virterm +++|  VTXCUR = VTXMAX;                   # CURSOR IS AT EDGE OF SCREEN #
01466  M00S01463.virterm +++|  VDTCHR(X"20");                     # OUTPUT CHARACTER WITH CHECK #
01467  M00S01464.virterm +++|  CONTROL IFEQ EDITORVDT,1;          # IF EDITOR VERSION OF VIRTERM #
01468  M00S01465.virterm +++|    VTXCUR = VTHOLD;                 # RESTORE X COORDINATE #
01469  M00S01466.virterm +++|    VTYCUR = VTI;
01470  M00S01467.virterm +++|    VDMOVE(VTXCUR,VTYCUR);           # RESET CURSOR POSITION #
01471  M00S01468.virterm +++|  CONTROL FI;                        # END OF IF EDITOR VIRTERM #
01472  M00S01469.virterm +++|  END
01473  M00S01470.virterm +++|
01474  M00S01471.virterm +++|IOEND  # VDTCLL #
01475  M00S01472.virterm +++|CONTROL EJECT;
01476  M00S01473.virterm +++|
01477  M00S01474.virterm +++|PROC VDTCLS;
01478  M00S01475.virterm +++|
01479  M00S01476.virterm +++|# TITLE VDTCLS - CLEAR SCREEN. #
01480  M00S01477.virterm +++|
01481  M00S01478.virterm +++|IOBEGIN(VDTCLS)
01482  M00S01479.virterm +++|
01483  M00S01480.virterm +++|#
01484  M00S01481.virterm +++|**    VDTCLS - CLEAR SCREEN.
01485  M00S01482.virterm +++|*
01486  M00S01483.virterm +++|*     THIS PROCEDURE CLEARS THE SCREEN AND POSITIONS THE CURSOR TO
01487  M00S01484.virterm +++|*     THE HOME POSITION.
01488  M00S01485.virterm +++|*
01489  M00S01486.virterm +++|*     PROC VDTCLS
01490  M00S01487.virterm +++|*
01491  M00S01488.virterm +++|*     EXIT      VTXCUR      = 0.
01492  M00S01489.virterm +++|*               VTYCUR      = 0 OR VTYMAX.
01493  M00S01490.virterm +++|*
Line S01491 Modification History
M01 (Removed by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
01494  M01S01491.ns2524  ---|*     CALLS     VDCTRL, VDTBOO, VDTHOM.
Line S00001 Modification History
M01 (Added by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
01495  M01S00001.ns2524  +++|*     CALLS     VDCTRL, VDTHOM.
01496  M00S01492.virterm +++|*
01497  M00S01493.virterm +++|*     USES      VTXCUR, VTYCUR.
01498  M00S01494.virterm +++|*
01499  M00S01495.virterm +++|*     NOTES  THE *TDU* DEFINITION OF THE BEGIN OUTPUT SEQUENCE
Line S00002 Modification History
M01 (Added by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
01500  M01S00002.ns2524  +++|*            (WHICH MUST BE ISSUED PRIOR TO CALLING VDTCLS)
01501  M00S01496.virterm +++|*            INCLUDES THE SEQUENCE TO TURN OFF INSERT MODE AND
01502  M00S01497.virterm +++|*            TO DISABLE PROTECT.
01503  M00S01498.virterm +++|#
01504  M00S01499.virterm +++|
Line S01500 Modification History
M01 (Removed by) ns2524
Seq #  *Modification Id* Act 
----------------------------+
01505  M01S01500.ns2524  ---|VDTBOO;                              # BEGIN OUTPUT SEQUENCE #
01506  M00S01501.virterm +++|VDCTRL(OUT"CLRSCRCURH");             # CLEAR SCREEN, CURSOR HOME #
01507  M00S01502.virterm +++|IF NUMBERBYTE EQ 0 THEN
01508  M00S01503.virterm +++|  BEGIN                              # IF NO CLEAR WITH CURSOR HOME #
01509  M00S01504.virterm +++|  VDCTRL(OUT"CLRSCREEN");            # ISSUE CLEAR SCREEN SEQUENCE #
01510  M00S01505.virterm +++|  VDTHOM;                            # POSITION CURSOR TO HOME #
01511  M00S01506.virterm +++|  END
01512  M00S01507.virterm +++|ELSE
01513  M00S01508.virterm +++|  BEGIN                              # CURSOR IS AT HOME POSITION #
01514  M00S01509.virterm +++|  VTXCUR = 0;                        # RESET COLUMN POINTER #
01515  M00S01510.virterm +++|  IF TABVTHOMEU[0] THEN
01516  M00S01511.virterm +++|    BEGIN                            # IF HOME POSITION IS TOP #
01517  M00S01512.virterm +++|    VTYCUR = 0;                      # CLEAR Y COORDINATE #
01518  M00S01513.virterm +++|    END
01519  M00S01514.virterm +++|  ELSE
01520  M00S01515.virterm +++|    BEGIN                            # HOME IS AT BOTTOM #
01521  M00S01516.virterm +++|    VTYCUR = VTYMAX;                 # SET Y COORDINATE #
01522  M00S01517.virterm +++|    END
01523  M00S01518.virterm +++|  END
01524  M00S01519.virterm +++|
01525  M00S01520.virterm +++|IOEND  # VDTCLS #
01526  M00S01521.virterm +++|CONTROL EJECT;
01527  M00S01522.virterm +++|
01528  M00S01523.virterm +++|PROC VDTCOR(LINE,COLUMN);
01529  M00S01524.virterm +++|
01530  M00S01525.virterm +++|# TITLE VDTCOR - SET INTERNAL CURSOR POSITION. #
01531  M00S01526.virterm +++|
01532  M00S01527.virterm +++|BEGIN  # VDTCOR #
01533  M00S01528.virterm +++|
01534  M00S01529.virterm +++|#
01535  M00S01530.virterm +++|**    VDTCOR - SET INTERNAL CURSOR POSITION.
01536  M00S01531.virterm +++|*
01537  M00S01532.virterm +++|*     THIS PROCEDURE ALLOWS AN APPLICATION PROGRAM TO SET THE
01538  M00S01533.virterm +++|*     INTERNAL CURSOR POSITION TO A SPECIFIED LINE AND COLUMN.
01539  M00S01534.virterm +++|*
01540  M00S01535.virterm +++|*     PROC VDTCOR(LINE,COLUMN)
01541  M00S01536.virterm +++|*
01542  M00S01537.virterm +++|*     ENTRY     LINE       = DESIRED Y COORDINATE.
01543  M00S01538.virterm +++|*               COLUMN     = DESIRED X COORDINATE.
01544  M00S01539.virterm +++|*
01545  M00S01540.virterm +++|*     EXIT      VTYCUR     = LINE.
01546  M00S01541.virterm +++|*               VTXCUR     = COLUMN.
01547  M00S01542.virterm +++|*
01548  M00S01543.virterm +++|*     NOTES     THIS ROUTINE DOES NOT PHYSICALLY MOVE THE CURSOR
01549  M00S01544.virterm +++|*               BUT MERELY CHANGES THE INTERNAL POINTERS TO THE
01550  M00S01545.virterm +++|*               CORRECT VALUES IF THEY ARE NO LONGER VALID, FOR
01551  M00S01546.virterm +++|*               EXAMPLE AFTER A TAB FUNCTION HAS BEEN RECEIVED.
01552  M00S01547.virterm +++|#
01553  M00S01548.virterm +++|
01554  M00S01549.virterm +++|ITEM LINE       I;                   # DESIRED X COORDINATE #
01555  M00S01550.virterm +++|ITEM COLUMN     I;                   # DESIRED Y COORDIANTE #
01556  M00S01551.virterm +++|
01557  M00S01552.virterm +++|VTYCUR = LINE;
01558  M00S01553.virterm +++|VTXCUR = COLUMN;
01559  M00S01554.virterm +++|
01560  M00S01555.virterm +++|END  # VDTCOR #
01561  M00S01556.virterm +++|CONTROL EJECT;
01562  M00S01557.virterm +++|
01563  M00S01558.virterm +++|PROC VDTCTS;
01564  M00S01559.virterm +++|
01565  M00S01560.virterm +++|# TITLE VDTCTS - CLEAR ALL TABS. #
01566  M00S01561.virterm +++|
01567  M00S01562.virterm +++|IOBEGIN(VDTCTS)
01568  M00S01563.virterm +++|
01569  M00S01564.virterm +++|#
01570  M00S01565.virterm +++|**    VDTCTS - CLEAR ALL TABS.
01571  M00S01566.virterm +++|*
01572  M00S01567.virterm +++|*     THIS PROCEDURE CLEARS ALL TAB STOPS.
01573  M00S01568.virterm +++|*
01574  M00S01569.virterm +++|*     PROC VDTCTS
01575  M00S01570.virterm +++|*
01576  M00S01571.virterm +++|*     EXIT      VTTABS CLEARED.
01577  M00S01572.virterm +++|*
01578  M00S01573.virterm +++|*     CALLS     VDCTRL.
01579  M00S01574.virterm +++|#
01580  M00S01575.virterm +++|
01581  M00S01576.virterm +++|VDCTRL(OUT"CLRALLTABS");             # CLEAR TAB STOPS #
01582  M00S01577.virterm +++|
01583  M00S01578.virterm +++|IOEND  # VDTCTS #
01584  M00S01579.virterm +++|CONTROL EJECT;
01585  M00S01580.virterm +++|
01586  M00S01581.virterm +++|PROC VDTEOO;
01587  M00S01582.virterm +++|
01588  M00S01583.virterm +++|# TITLE VDTEOO - END OF OUTPUT SEQUENCE. #
01589  M00S01584.virterm +++|
01590  M00S01585.virterm +++|IOBEGIN(VDTEOO)
01591  M00S01586.virterm +++|
01592  M00S01587.virterm +++|#
01593  M00S01588.virterm +++|**    VDTEOO - END OF OUTPUT SEQUENCE.
01594  M00S01589.virterm +++|*
01595  M00S01590.virterm +++|*     THIS PROCEDURE IS CALLED TO END EACH OUTPUT SEQUENCE.
01596  M00S01591.virterm +++|*
01597  M00S01592.virterm +++|*     EXIT      VTOUTDATA  = TRANSPARENT OUTPUT WORD.
01598  M00S01593.virterm +++|*               VTOUTNEXT  = 12.
01599  M00S01594.virterm +++|*
01600  M00S01595.virterm +++|*     CALLS     VDCTRL, VDSYNCH.
01601  M00S01596.virterm +++|*
01602  M00S01597.virterm +++|#
01603  M00S01598.virterm +++|
01604  M00S01599.virterm +++|CONTROL IFEQ EDITORVDT,0;            # IF NOT EDITOR VIRTERM #
01605  M00S01600.virterm +++|  VDCTRL(OUT"ENDISPLAY");            # OUTPUT END DISPLAY #
01606  M00S01601.virterm +++|  IF NUMBERBYTE NQ 0 THEN
01607  M00S01602.virterm +++|    BEGIN                            # IF A SEQUENCE WAS SENT #
01608  M00S01603.virterm +++|    ATTRIBMASK = 0;                  # NO ATTRIBUTES #
01609  M00S01604.virterm +++|    END
01610  M00S01605.virterm +++|CONTROL FI;                          # END OF IF NOT EDITOR #
01611  M00S01606.virterm +++|VDCTRL(OUT"ENDOUTPUT");              # END OUTPUT SEQUENCE #
01612  M00S01607.virterm +++|
01613  M00S01608.virterm +++|VDSYNCH;
01614  M00S01609.virterm +++|
01615  M00S01610.virterm +++|IOEND  # VDTEOO #
01616  M00S01611.virterm +++|CONTROL EJECT;
01617  M00S01612.virterm +++|
01618  M00S01613.virterm +++|PROC VDTGTD(COLUMNS,LINES);
01619  M00S01614.virterm +++|
01620  M00S01615.virterm +++|# TITLE VDTGTD - GET TERMINAL DIMENSIONS. #
01621  M00S01616.virterm +++|
01622  M00S01617.virterm +++|BEGIN  # VDTGTD #
01623  M00S01618.virterm +++|
01624  M00S01619.virterm +++|#
01625  M00S01620.virterm +++|**    VDTGTD - GET TERMINAL DIMENSIONS.
01626  M00S01621.virterm +++|*
01627  M00S01622.virterm +++|*     THIS PROCEDURE RETURNS THE CURRENT NUMBER OF COLUMNS AND LINES.
01628  M00S01623.virterm +++|*
01629  M00S01624.virterm +++|*     PROC VDTGTD(COLUMNS,LINES)
01630  M00S01625.virterm +++|*
01631  M00S01626.virterm +++|*     EXIT      COLUMNS    = NUMBER OF COLUMNS ON SCREEN.
01632  M00S01627.virterm +++|*               LINES      = NUMBER OF LINES ON SCREEN.
01633  M00S01628.virterm +++|#
01634  M00S01629.virterm +++|
01635  M00S01630.virterm +++|ITEM COLUMNS    I;                   # NUMBER OF COLUMNS #
01636  M00S01631.virterm +++|ITEM LINES      I;                   # NUMBER OF LINES #
01637  M00S01632.virterm +++|
01638  M00S01633.virterm +++|COLUMNS = VTXMAX + 1;
01639  M00S01634.virterm +++|LINES = VTYMAX + 1;
01640  M00S01635.virterm +++|
01641  M00S01636.virterm +++|END  # VDTGTD #
01642  M00S01637.virterm +++|CONTROL EJECT;
01643  M00S01638.virterm +++|
01644  M00S01639.virterm +++|PROC VDTHOM;
01645  M00S01640.virterm +++|
01646  M00S01641.virterm +++|# TITLE VDTHOM - MOVE CURSOR TO HOME POSITION. #
01647  M00S01642.virterm +++|
01648  M00S01643.virterm +++|IOBEGIN(VDTHOM)
01649  M00S01644.virterm +++|
01650  M00S01645.virterm +++|#
01651  M00S01646.virterm +++|**    VDTHOM - MOVE CURSOR TO HOME POSITION.
01652  M00S01647.virterm +++|*
01653  M00S01648.virterm +++|*     THIS PROCEDURE POSITIONS THE CURSOR TO HOME.
01654  M00S01649.virterm +++|*
01655  M00S01650.virterm +++|*     PROC VDTHOM
01656  M00S01651.virterm +++|*
01657  M00S01652.virterm +++|*     EXIT      VTXCUR     = 0.
01658  M00S01653.virterm +++|*               VTYCUR     = 0 OR VTYMAX.
01659  M00S01654.virterm +++|*
01660  M00S01655.virterm +++|*     CALLS     VDCTRL.
01661  M00S01656.virterm +++|*
01662  M00S01657.virterm +++|*     USES      VTXCUR, VTYCUR.
01663  M00S01658.virterm +++|#
01664  M00S01659.virterm +++|
01665  M00S01660.virterm +++|VDCTRL(OUT"CURSORHOME");             # POSITION CURSOR TO HOME #
01666  M00S01661.virterm +++|
01667  M00S01662.virterm +++|VTXCUR = 0;                          # RESET COLUMN POINTER #
01668  M00S01663.virterm +++|IF TABVTHOMEU[0] THEN
01669  M00S01664.virterm +++|  BEGIN                              # IF HOME POSITION IS TOP #
01670  M00S01665.virterm +++|  VTYCUR = 0;                        # CLEAR Y COORDINATE #
01671  M00S01666.virterm +++|  END
01672  M00S01667.virterm +++|ELSE
01673  M00S01668.virterm +++|  BEGIN                              # HOME IS AT BOTTOM #
01674  M00S01669.virterm +++|  VTYCUR = VTYMAX;                   # SET Y COORDINATE #
01675  M00S01670.virterm +++|  END
01676  M00S01671.virterm +++|
01677  M00S01672.virterm +++|IOEND  # VDTHOM #
01678  M00S01673.virterm +++|CONTROL EJECT;
01679  M00S01674.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
01680  M00S01675.virterm +++|
01681  M00S01676.virterm +++|PROC VDTITD(MODELNAME);
01682  M00S01677.virterm +++|
01683  M00S01678.virterm +++|# TITLE VDTITD - INITIALIZE *TDU* TABLE. #
01684  M00S01679.virterm +++|
01685  M00S01680.virterm +++|BEGIN  # VDTITD #
01686  M00S01681.virterm +++|
01687  M00S01682.virterm +++|#
01688  M00S01683.virterm +++|**    VDTITD - INITIALIZE *TDU* TABLE.
01689  M00S01684.virterm +++|*
01690  M00S01685.virterm +++|*     THIS PROCEDURE GETS THE *TDU* (TERMINAL DEFINITION UTILITY) TABLE
01691  M00S01686.virterm +++|*     FROM MEMORY OR FILE *ZZZZTRM* AND MOVES IT TO ARRAYS *TABLEHEADR*
01692  M00S01687.virterm +++|*     AND *TABLEWORDS* SO THAT THE TERMINAL CAN BE RUN IN SCREEN MODE.
01693  M00S01688.virterm +++|*     TDUINDEX IS LEFT POSITIONED WHERE THE READING OF THE INPUT AND
01694  M00S01689.virterm +++|*     OUPTUT DATA STOPPED TO ALLOW SUBSEQUENT ACCESS TO THE REST OF
01695  M00S01690.virterm +++|*     THE DATA IN THE REMAINING SECTIONS OF THE *TDU* TABLE.
01696  M00S01691.virterm +++|*
01697  M00S01692.virterm +++|*     PROC VDTITD(MODELNAME)
01698  M00S01693.virterm +++|*
01699  M00S01694.virterm +++|*     EXIT      MODELNAME  = THE MODELNAME OF THE TERMINAL AS DEFINED
01700  M00S01695.virterm +++|*                            TO *TDU*, LEFT JUSTIFIED, BLANK FILL.
01701  M00S01696.virterm +++|*                          = BLANK, IF NO *TDU* DEFINITION EXISTS.
01702  M00S01697.virterm +++|*
01703  M00S01698.virterm +++|*     CALLS     VDGETW, VDTGSL, VDTGTA.
01704  M00S01699.virterm +++|*
01705  M00S01700.virterm +++|*     USES      VTI, VTJ, VTMODEL.
01706  M00S01701.virterm +++|*
01707  M00S01702.virterm +++|*     NOTES     VDTITD CAN NOT BE CALLED IN THE MULTI USER VERSION
01708  M00S01703.virterm +++|*               VERSION OF THE EDITOR SINCE IT MAY DO DISK I/O TO
01709  M00S01704.virterm +++|*               TO GET A USER DEFINED *TDU* TABLE.
01710  M00S01705.virterm +++|#
01711  M00S01706.virterm +++|
01712  M00S01707.virterm +++|ITEM MODELNAME  C(6);                # MODEL NAME #
01713  M00S01708.virterm +++|ITEM TDUINOUT   U;                   # COUNT OF *TDU* I/O INFORMATION #
01714  M00S01709.virterm +++|ITEM TDUWORD    U;                   # WORD FROM *TDU* TABLE #
01715  M00S01710.virterm +++|
01716  M00S01711.virterm +++|CONTROL IFEQ QTRMV,1;                # IF QTRM #
01717  M00S01712.virterm +++|ITEM I          I;
01718  M00S01713.virterm +++|ITEM TMODEL     C(7);                # TEMP MODEL NAME #
01719  M00S01714.virterm +++|ITEM SCRCLS     I;                   # CAPSULE LOADED SUCCESSFULLY #
01720  M00S01715.virterm +++|ITEM SCRLCA     U;                   # LOADED CAPSULE ADDRESS #
01721  M00S01716.virterm +++|ITEM SCRPFF     I;                   # PERMANENT FILE FOUND FLAG #
01722  M00S01717.virterm +++|ITEM SCRPFN     C(7) = "TERMLIB";    # PERMANENT FILE NAME #
01723  M00S01718.virterm +++|ITEM SCRSTS     B;                   # *TERMLIB* STATUS FLAG #
01724  M00S01719.virterm +++|ITEM SCRTCL     I;                   # TERMINAL CAPSULE LENGTH #
01725  M00S01720.virterm +++|ITEM SCRUSN     C(7) = "LIBRARY";    # ALTERNATE USER NUMBER #
01726  M00S01721.virterm +++|ITEM SCRZTM     C(7);                # MODEL NAME PREFACED WITH Z #
01727  M00S01722.virterm +++|CONTROL FI;                          # END OF IF QTRM #
01728  M00S01723.virterm +++|
01729  M00S01724.virterm +++|IF NOT VTTDUREAD[0] THEN
01730  M00S01725.virterm +++|  BEGIN                              # IF *TDU* TABLE NOT READ YET #
01731  M00S01726.virterm +++|*IF UNDEF,QTRM
01732  M00S01727.virterm +++|  VDTGSL(VTMODEL,VTI);               # GET MODEL AND SCREEN OR LINE #
01733  M00S01728.virterm +++|  IF VTMODEL NQ 0 THEN
01734  M00S01729.virterm +++|    BEGIN                            # IF TERMINAL HAS BEEN DEFINED #
01735  M00S01730.virterm +++|    IF VTMODEL NQ 1 THEN
01736  M00S01731.virterm +++|      BEGIN                          # IF SYSTEM RESIDENT TABLE #
01737  M00S01732.virterm +++|      VDTGTA(VTMODEL,VTJ);           # GET ADDRESS FOR *TDU* TABLE #
01738  M00S01733.virterm +++|      P<TEMPSTORE> = VTJ;            # POSITION BASED ARRAY #
01739  M00S01734.virterm +++|      TDURESID[0] = TRUE;            # SET RESIDENT TABLE #
01740  M00S01735.virterm +++|      END
01741  M00S01736.virterm +++|    ELSE
01742  M00S01737.virterm +++|      BEGIN                          # NOT SYSTEM RESIDENT TABLE #
01743  M00S01738.virterm +++|      VTJ = LOC(TDUBUF);             # PRESET FET FOR READ #
01744  M00S01739.virterm +++|      TDUCODE = 1;
01745  M00S01740.virterm +++|      TDUIN = VTJ;
01746  M00S01741.virterm +++|      TDUFIRST = VTJ;
01747  M00S01742.virterm +++|      TDUOUT = VTJ;
01748  M00S01743.virterm +++|      TDULIMIT = VTJ + TDUBUFFLEN;   # BUFFER LENGTH #
01749  M00S01744.virterm +++|      VDTRWD(TDUFET,1);              # REWIND FET WITH RECALL #
01750  M00S01745.virterm +++|      VDTRD$(TDUFET,1);              # READ *TDU* TABLE WITH RECALL #
01751  M00S01746.virterm +++|      TDURESID[0] = FALSE;           # CLEAR RESIDENT TABLE #
01752  M00S01747.virterm +++|      END
01753  M00S01748.virterm +++|    TDUINDEX[0] = 0;                 # START INDEX AT ZERO #
01754  M00S01749.virterm +++|    VDGETW(TDUWORD,VTI);             # MOVE TABLE HEADER TO COMMON #
01755  M00S01750.virterm +++|    IF VTI EQ 0 THEN
01756  M00S01751.virterm +++|      BEGIN                          # IF TABLE EXISTS #
01757  M00S01752.virterm +++|      TABHEADONE[0] = TDUWORD;
01758  M00S01753.virterm +++|      VDGETW(TDUWORD,VTI);
01759  M00S01754.virterm +++|      TABHEADTWO[0] = TDUWORD;
01760  M00S01755.virterm +++|      VDGETW(TDUWORD,VTI);
01761  M00S01756.virterm +++|      TABHEADTHR[0] = TDUWORD;
01762  M00S01757.virterm +++|      VDGETW(TDUWORD,VTI);
01763  M00S01758.virterm +++|      TABHEADFOU[0] = TDUWORD;
01764  M00S01759.virterm +++|      VDGETW(TDUWORD,VTI);
01765  M00S01760.virterm +++|      TABHEADFIV[0] = TDUWORD;
01766  M00S01761.virterm +++|      VDGETW(TDUWORD,VTI);
01767  M00S01762.virterm +++|      TABHEADSIX[0] = TDUWORD;
01768  M00S01763.virterm +++|      TDUINOUT = TABSTRNMES[0] - 7;  # COUNT *TDU* I/O INFORMATION #
01769  M00S01764.virterm +++|      IF TDUINOUT GR TDUBUFFLEN - O"10" THEN
01770  M00S01765.virterm +++|        BEGIN                        # IF TOO MUCH I/O INFORMATION #
01771  M00S01766.virterm +++|        TDUINOUT = TDUBUFFLEN - O"10";
01772  M00S01767.virterm +++|        END
01773  M00S01768.virterm +++|      FOR VTJ = 0 STEP 1 UNTIL TDUINOUT DO
01774  M00S01769.virterm +++|        BEGIN                        # MOVE BODY OF TABLE TO COMMON #
01775  M00S01770.virterm +++|        VDGETW(TDUWORD,VTI);
01776  M00S01771.virterm +++|        TABFULLWRD[VTJ] = TDUWORD;
01777  M00S01772.virterm +++|        END
01778  M00S01773.virterm +++|      VTTDUREAD[0] = TRUE;           # SET TABLE READ FLAG #
01779  M00S01774.virterm +++|      END
01780  M00S01775.virterm +++|    ELSE
01781  M00S01776.virterm +++|      BEGIN                          # TABLE CAN NOT BE FOUND #
01782  M00S01777.virterm +++|      TABMODNAME[0] = "      ";      # SET BLANK NAME IN BLOCK #
01783  M00S01778.virterm +++|      END
01784  M00S01779.virterm +++|    END
01785  M00S01780.virterm +++|  ELSE
01786  M00S01781.virterm +++|    BEGIN                            # UNDEFINED TERMINAL #
01787  M00S01782.virterm +++|    TABMODNAME[0] = "      ";        # SET BLANK NAME IN BLOCK #
01788  M00S01783.virterm +++|    END
01789  M00S01784.virterm +++|  END
01790  M00S01785.virterm +++|*ELSE
01791  M00S01786.virterm +++|  VDTGTO(VTMODEL,MODELNAME);         # GET TERMINAL ORDINAL #
01792  M00S01787.virterm +++|  IF VTMODEL NQ 0 THEN
01793  M00S01788.virterm +++|    BEGIN                            # IF SYSTEM RESIDENT TABLE #
01794  M00S01789.virterm +++|    VDTGTA(VTMODEL,VTJ);             # GET ADDRESS FOR *TDU* TABLE #
01795  M00S01790.virterm +++|    P<TEMPSTORE> = VTJ;              # POSITION BASED ARRAY #
01796  M00S01791.virterm +++|    TDURESID[0] = TRUE;              # SET RESIDENT TABLE #
01797  M00S01792.virterm +++|    END
01798  M00S01793.virterm +++|  ELSE
01799  M00S01794.virterm +++|    BEGIN                            # NOT SYSTEM RESIDENT TABLE #
01800  M00S01795.virterm +++|    PF("GET",SCRPFN,SCRPFN,"RC",SCRPFF,"UN",SCRUSN,0);
01801  M00S01796.virterm +++|    IF SCRPFF NQ 0 THEN
01802  M00S01797.virterm +++|      BEGIN                          # IF NOT INDIRECT, TRY DIRECT #
01803  M00S01798.virterm +++|      PF("ATTACH",SCRPFN,SCRPFN,"RC",SCRPFF,"UN",SCRUSN,"PN",
01804  M00S01799.virterm +++|         "0","NA",0,0);
01805  M00S01800.virterm +++|      END
01806  M00S01801.virterm +++|    IF SCRPFF EQ 0 THEN
01807  M00S01802.virterm +++|      BEGIN                          # IF FILE FOUND #
01808  M00S01803.virterm +++|      C<0>SCRZTM = "Z";              # LOADER PREFIX #
01809  M00S01804.virterm +++|      FOR I = 1 STEP 1 UNTIL 6 DO C<I>SCRZTM = C<I-1>MODELNAME;
01810  M00S01805.virterm +++|      SCRLCP(SCRZTM,SCRLCA,SCRCLS);  # LOAD TERMINAL CAPSULE #
01811  M00S01806.virterm +++|      IF SCRCLS EQ 0 THEN
01812  M00S01807.virterm +++|        BEGIN                        # IF CAPSULE LOADED #
01813  M00S01808.virterm +++|        P<TEMPSTORE> = SCRLCA;       # POSITION BASED ARRAY #
01814  M00S01809.virterm +++|        TDURESID[0] = TRUE;          # SET RESIDENT TABLE #
01815  M00S01810.virterm +++|        TABMODNAME[0] = MODELNAME;   # BLANK NAME IN BLOCK #
01816  M00S01811.virterm +++|        END                          # CAPSULE LOADED #
01817  M00S01812.virterm +++|      END
01818  M00S01813.virterm +++|    IF ((SCRCLS NQ 0) OR (SCRPFF NQ 0)) THEN
01819  M00S01814.virterm +++|      BEGIN                          # IF CAPSULE NOT FOUND #
01820  M00S01815.virterm +++|      TABMODNAME[0] = "      ";      # SET BLANK NAME IN BLOCK #
01821  M00S01816.virterm +++|      END
01822  M00S01817.virterm +++|    END
01823  M00S01818.virterm +++|  TDUINDEX[0] = 0;                   # START INDEX AT ZERO #
01824  M00S01819.virterm +++|  VDGETW(TDUWORD,VTI);               # MOVE TABLE HEADER TO COMMON #
01825  M00S01820.virterm +++|  TABHEADONE[0] = TDUWORD;
01826  M00S01821.virterm +++|  VDGETW(TDUWORD,VTI);
01827  M00S01822.virterm +++|  TABHEADTWO[0] = TDUWORD;
01828  M00S01823.virterm +++|  VDGETW(TDUWORD,VTI);
01829  M00S01824.virterm +++|  TABHEADTHR[0] = TDUWORD;
01830  M00S01825.virterm +++|  VDGETW(TDUWORD,VTI);
01831  M00S01826.virterm +++|  TABHEADFOU[0] = TDUWORD;
01832  M00S01827.virterm +++|  VDGETW(TDUWORD,VTI);
01833  M00S01828.virterm +++|  TABHEADFIV[0] = TDUWORD;
01834  M00S01829.virterm +++|  VDGETW(TDUWORD,VTI);
01835  M00S01830.virterm +++|  TABHEADSIX[0] = TDUWORD;
01836  M00S01831.virterm +++|  TDUINOUT = TABSTRNMES[0] - 7;      # COUNT *TDU* I/O INFORMATION #
01837  M00S01832.virterm +++|  IF TDUINOUT GR TDUBUFFLEN - O"10" THEN
01838  M00S01833.virterm +++|    BEGIN                            # IF TOO MUCH I/O INFORMATION #
01839  M00S01834.virterm +++|    TDUINOUT = TDUBUFFLEN - O"10";
01840  M00S01835.virterm +++|    END
01841  M00S01836.virterm +++|  FOR VTJ = 0 STEP 1 UNTIL TDUINOUT DO
01842  M00S01837.virterm +++|    BEGIN                            # MOVE BODY OF TABLE TO COMMON #
01843  M00S01838.virterm +++|    VDGETW(TDUWORD,VTI);
01844  M00S01839.virterm +++|    TABFULLWRD[VTJ] = TDUWORD;
01845  M00S01840.virterm +++|    END
01846  M00S01841.virterm +++|  VTTDUREAD[0] = TRUE;               # SET TABLE READ FLAG #
01847  M00S01842.virterm +++|  END
01848  M00S01843.virterm +++|*ENDIF
01849  M00S01844.virterm +++|C<0,6>MODELNAME = TABMODNAME[0];     # RETURN MODEL NAME #
01850  M00S01845.virterm +++|
01851  M00S01846.virterm +++|END  # VDTITD #
01852  M00S01847.virterm +++|CONTROL FI;                          # END OF IF SINGLE USER FSE #
01853  M00S01848.virterm +++|*IF UNDEF,QTRM
01854  M00S01849.virterm +++|CONTROL EJECT;
01855  M00S01850.virterm +++|
01856  M00S01851.virterm +++|PROC VDTOUT(CHAR);
01857  M00S01852.virterm +++|
01858  M00S01853.virterm +++|# TITLE VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD. #
01859  M00S01854.virterm +++|
01860  M00S01855.virterm +++|IOBEGIN(VDTOUT)
01861  M00S01856.virterm +++|
01862  M00S01857.virterm +++|#
01863  M00S01858.virterm +++|**    VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD.
01864  M00S01859.virterm +++|*
01865  M00S01860.virterm +++|*     THIS PROCEDURE ALLOWS THE GENERAL OUTPUT OF ONE CHARACTER.
01866  M00S01861.virterm +++|*
01867  M00S01862.virterm +++|*     PROC VDTOUT(CHAR)
01868  M00S01863.virterm +++|*
01869  M00S01864.virterm +++|*     ENTRY     CHAR       = 12 BIT BYTE TO QUEUE OR TRANSMIT.
01870  M00S01865.virterm +++|*               VTOUTDATA  = ACCUMULATOR WORD.
01871  M00S01866.virterm +++|*               VTOUTNEXT  = PRESENT BIT POSITION.
01872  M00S01867.virterm +++|*
01873  M00S01868.virterm +++|*     EXIT      VTOUTDATA, VTOUTNEXT UPDATED.
01874  M00S01869.virterm +++|*
01875  M00S01870.virterm +++|*     CALLS     VDTWTO.
01876  M00S01871.virterm +++|*
01877  M00S01872.virterm +++|*     USES      VTOUTDATA, VTOUTNEXT.
01878  M00S01873.virterm +++|#
01879  M00S01874.virterm +++|
01880  M00S01875.virterm +++|ITEM CHAR       I;                   # OUTPUT BYTE #
01881  M00S01876.virterm +++|
01882  M00S01877.virterm +++|B<VTOUTNEXT,12>VTOUTDATA = CHAR LOR O"4000";  # XPARENT BYTE #
01883  M00S01878.virterm +++|
01884  M00S01879.virterm +++|#  END OF NON-REENTRANT PARAMETER USAGE  #
01885  M00S01880.virterm +++|
01886  M00S01881.virterm +++|VTOUTNEXT = VTOUTNEXT +12;           # INCREMENT BIT POSITION #
01887  M00S01882.virterm +++|IF VTOUTNEXT EQ 60 THEN
01888  M00S01883.virterm +++|  BEGIN                              # IF ACCUMULATOR WORD IS FULL #
01889  M00S01884.virterm +++|  VDTWTO(VTOUTDATA);                 # WRITE WORD #
01890  M00S01885.virterm +++|  VTOUTDATA = 0;                     # CLEAR ACCUMULATOR WORD #
01891  M00S01886.virterm +++|  VTOUTNEXT = 0;                     # SET BIT POSITION #
01892  M00S01887.virterm +++|  END
01893  M00S01888.virterm +++|
01894  M00S01889.virterm +++|IOEND  # VDTOUT #
01895  M00S01890.virterm +++|*ELSE
01896  M00S01891.virterm +++|CONTROL EJECT;                       # QTRM VARIANT OF VDTOUT #
01897  M00S01892.virterm +++|
01898  M00S01893.virterm +++|PROC VDTOUT(CHAR);
01899  M00S01894.virterm +++|
01900  M00S01895.virterm +++|# TITLE VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD. #
01901  M00S01896.virterm +++|
01902  M00S01897.virterm +++|BEGIN  # VDTOUT #
01903  M00S01898.virterm +++|
01904  M00S01899.virterm +++|#
01905  M00S01900.virterm +++|**    VDTOUT - ISSUE ONE BYTE TO ACCUMULATOR WORD.
01906  M00S01901.virterm +++|*
01907  M00S01902.virterm +++|*     THIS PROCEDURE ALLOWS GENERAL QTRM OUTPUT OF ONE CHARACTER.
01908  M00S01903.virterm +++|*
01909  M00S01904.virterm +++|*     PROC VDTOUT(CHAR)
01910  M00S01905.virterm +++|*
01911  M00S01906.virterm +++|*     ENTRY     CHAR       = 12 BIT BYTE TO QUEUE OR TRANSMIT.
01912  M00S01907.virterm +++|*               VTOUTDATA  = ACCUMULATOR WORD.
01913  M00S01908.virterm +++|*               VTOUTNEXT  = PRESENT BIT POSITION.
01914  M00S01909.virterm +++|*
01915  M00S01910.virterm +++|*     EXIT      VTOUTDATA, VTOUTNEXT UPDATED.
01916  M00S01911.virterm +++|*
01917  M00S01912.virterm +++|*     CALLS     SFNQUE.
01918  M00S01913.virterm +++|*
01919  M00S01914.virterm +++|*     USES      VTOUTDATA, VTOUTNEXT.
01920  M00S01915.virterm +++|#
01921  M00S01916.virterm +++|ITEM CHAR       I;                 # OUTPUT BYTE #
01922  M00S01917.virterm +++|ITEM I          I;                 # DUMMY PARAMETER #
01923  M00S01918.virterm +++|
01924  M00S01919.virterm +++|  B<VTOUTNEXT,12>VTOUTDATA = CHAR;
01925  M00S01920.virterm +++|  VTOUTNEXT = VTOUTNEXT + 12;
01926  M00S01921.virterm +++|  IF VTOUTNEXT EQ 60 THEN
01927  M00S01922.virterm +++|    BEGIN                          # IF ACCUMULATOR WORD IS FULL #
01928  M00S01923.virterm +++|    NIT$CTLC = 5;                  # ENQUEUE WORD #
01929  M00S01924.virterm +++|    SFNQUE("PUT",VTOUTDATA,I);
01930  M00S01925.virterm +++|    VTOUTDATA = 0;                 # CLEAR ACCUMULATOR WORD #
01931  M00S01926.virterm +++|    VTOUTNEXT = 0;                 # SET BIT POSITION #
01932  M00S01927.virterm +++|    END
01933  M00S01928.virterm +++|
01934  M00S01929.virterm +++|END  # VDTOUT #
01935  M00S01930.virterm +++|*ENDIF
01936  M00S01931.virterm +++|CONTROL EJECT;
01937  M00S01932.virterm +++|
01938  M00S01933.virterm +++|PROC VDTPOS(XX,YY);
01939  M00S01934.virterm +++|
01940  M00S01935.virterm +++|# TITLE VDTPOS - POSITION CURSOR. #
01941  M00S01936.virterm +++|
01942  M00S01937.virterm +++|IOBEGIN(VDTPOS)
01943  M00S01938.virterm +++|
01944  M00S01939.virterm +++|#
01945  M00S01940.virterm +++|**    VDTPOS - POSITION CURSOR.
01946  M00S01941.virterm +++|*
01947  M00S01942.virterm +++|*     THIS PROCEDURE MOVES THE CURSOR TO THE SPECIFIED POSITION.
01948  M00S01943.virterm +++|*
01949  M00S01944.virterm +++|*     PROC VDTPOS(XX,YY)
01950  M00S01945.virterm +++|*
01951  M00S01946.virterm +++|*     ENTRY     XX          = DESIRED X COORDINATE.
01952  M00S01947.virterm +++|*               YY          = DESIRED Y COORDINATE.
01953  M00S01948.virterm +++|*
01954  M00S01949.virterm +++|*     EXIT      VTXCUR      = XX.
01955  M00S01950.virterm +++|*               VTYCUR      = YY.
01956  M00S01951.virterm +++|*
01957  M00S01952.virterm +++|*     CALLS     VDMOVE.
01958  M00S01953.virterm +++|#
01959  M00S01954.virterm +++|
01960  M00S01955.virterm +++|ITEM XX         I;                   # COLUMN POSITION #
01961  M00S01956.virterm +++|ITEM YY         I;                   # LINE POSITION #
01962  M00S01957.virterm +++|
01963  M00S01958.virterm +++|VTXCUR = XX;                         # RESET COLUMN POINTER #
01964  M00S01959.virterm +++|VTYCUR = YY;                         # RESET LINE POINTER #
01965  M00S01960.virterm +++|
01966  M00S01961.virterm +++|#  END OF NON-REENTRANT PARAMETER USAGE  #
01967  M00S01962.virterm +++|
01968  M00S01963.virterm +++|VDMOVE(VTXCUR,VTYCUR);               # POSITION CURSOR #
01969  M00S01964.virterm +++|
01970  M00S01965.virterm +++|IOEND  # VDTPOS #
01971  M00S01966.virterm +++|*IF UNDEF,QTRM
01972  M00S01967.virterm +++|CONTROL EJECT;
01973  M00S01968.virterm +++|
01974  M00S01969.virterm +++|PROC VDTPPI;
01975  M00S01970.virterm +++|
01976  M00S01971.virterm +++|# TITLE VDTPPI - PRE-PROCESS INPUT. #
01977  M00S01972.virterm +++|
01978  M00S01973.virterm +++|IOBEGIN(VDTPPI)
01979  M00S01974.virterm +++|
01980  M00S01975.virterm +++|#
01981  M00S01976.virterm +++|**    VDTPPI - PRE-PROCESS INPUT.
01982  M00S01977.virterm +++|*
01983  M00S01978.virterm +++|*     THIS PROCEDURE VERIFIES THAT THE INPUT IS EITHER NULL OR IS
01984  M00S01979.virterm +++|*     TRANSPARENT INPUT.  THE EFFECT IS TO BANISH MOST TYPE AHEAD
01985  M00S01980.virterm +++|*     EXCEPT FOR TYPED AHEAD CARRIAGE RETURNS WHICH CAN BE IGNORED.
01986  M00S01981.virterm +++|*
01987  M00S01982.virterm +++|*     PROC VDTPPI
01988  M00S01983.virterm +++|*
01989  M00S01984.virterm +++|*     EXIT      VTORDN     = 0, IF TRANSPARENT INPUT RECEIVED OK.
01990  M00S01985.virterm +++|*                          = NON ZERO, IF NON-NULL TYPEAHEAD.
01991  M00S01986.virterm +++|*               VTINPDATA  = CONTAINS NEW TRANSPARENT INPUT DATA.
01992  M00S01987.virterm +++|*                VTRESINP   = BLOCK MODE RESIDUAL INPUT.
01993  M00S01988.virterm +++|*                VTINPNEXT  = UPDATED.
01994  M00S01989.virterm +++|*
01995  M00S01990.virterm +++|*     CALLS     VDTRDO, VDTWTO.
01996  M00S01991.virterm +++|*
01997  M00S01992.virterm +++|*     USES      VTINPDATA, VTINPDATA, VTORDN.
01998  M00S01993.virterm +++|*
01999  M00S01994.virterm +++|*     NOTES     SINCE THIS PROCEDURE INITIALIZES THE BIT POINTER
02000  M00S01995.virterm +++|*               (VTINPNEXT), IT MUST BE CALLED EXACTLY AT THE
02001  M00S01996.virterm +++|*               START OF EACH INPUT SEQUENCE.
02002  M00S01997.virterm +++|#
02003  M00S01998.virterm +++|
02004  M00S01999.virterm +++|CONTROL IFEQ EDITORVDT,1;            # IF EDITOR VIRTERM #
02005  M00S02000.virterm +++|  CONTROL IFEQ SINGLE,1;             # MULTI DOES THIS IN TTITRAP #
02006  M00S02001.virterm +++|    IF NOT TABTYPHEAD[0] THEN
02007  M00S02002.virterm +++|      BEGIN                          # IF TYPE AHEAD NOT ENABLED #
02008  M00S02003.virterm +++|      VDTWTO(O"0006 4704 0015 0000 0000");  # XPARENT INPUT MODE #
02009  M00S02004.virterm +++|      END
02010  M00S02005.virterm +++|  CONTROL FI;
02011  M00S02006.virterm +++|CONTROL FI;
02012  M00S02007.virterm +++|
02013  M00S02008.virterm +++|CONTROL IFEQ EDITORVDT,0;            # IF STAND ALONE VIRTERM #
02014  M00S02009.virterm +++|  VDTWTO(O"0006 4704 0015 0000 0000");  # XPARENT INPUT MODE #
02015  M00S02010.virterm +++|CONTROL FI;
02016  M00S02011.virterm +++|
02017  M00S02012.virterm +++|VTORDN = 1;
02018  M00S02013.virterm +++|VDTRDO(VTINPDATA);                   # READ WORD #
02019  M00S02014.virterm +++|VTINPNEXT = 12;                      # RESET BIT POSITION #
02020  M00S02015.virterm +++|VTRESINP = 0;                        # CLEAR RESIDUAL INPUT #
02021  M00S02016.virterm +++|
02022  M00S02017.virterm +++|IF B<0,12>VTINPDATA EQ 7 THEN
02023  M00S02018.virterm +++|  BEGIN                              # IF TRANSPARENT INPUT #
02024  M00S02019.virterm +++|  VTORDN = 0;
02025  M00S02020.virterm +++|CONTROL IFEQ SINGLE,1;               # IF NOT MULTI USER FSE #
02026  M00S02021.virterm +++|  IF TABLOCKMDE[0] THEN
02027  M00S02022.virterm +++|    BEGIN                            # IF BLOCK MODE TYPE TERMINAL #
02028  M00S02023.virterm +++|    B<00,12>VTRESINP = B<24,12>VTINPDATA;  # CURSOR ADDRESS #
02029  M00S02024.virterm +++|    B<12,12>VTRESINP = B<36,12>VTINPDATA;
02030  M00S02025.virterm +++|    B<24,12>VTRESINP = B<12,12>VTINPDATA;  # ATTENTION IDENTIFIER #
02031  M00S02026.virterm +++|    VTINPNEXT = 48;                  # SET BIT POINTER #
02032  M00S02027.virterm +++|    END
02033  M00S02028.virterm +++|CONTROL FI;                          # END OF IF NOT MULTI FSE #
02034  M00S02029.virterm +++|  END
02035  M00S02030.virterm +++|ELSE
02036  M00S02031.virterm +++|  BEGIN                              # NOT TRANSPARENT INPUT #
02037  M00S02032.virterm +++|  IF VTINPDATA EQ 0 THEN VTORDN = 0; # CHECK FOR NULL TYPE AHEAD #
02038  M00S02033.virterm +++|  END
02039  M00S02034.virterm +++|
02040  M00S02035.virterm +++|IOEND  # VDTPPI #
02041  M00S02036.virterm +++|*ELSE
02042  M00S02037.virterm +++|CONTROL EJECT;                       # QTRM VARIANT OF VDTPPI #
02043  M00S02038.virterm +++|
02044  M00S02039.virterm +++|PROC VDTPPI;
02045  M00S02040.virterm +++|
02046  M00S02041.virterm +++|# TITLE VDTPPI - PRE-PROCESS INPUT. #
02047  M00S02042.virterm +++|
02048  M00S02043.virterm +++|BEGIN  # VDTPPI #
02049  M00S02044.virterm +++|
02050  M00S02045.virterm +++|#
02051  M00S02046.virterm +++|**    VDTPPI - PRE-PROCESS INPUT.
02052  M00S02047.virterm +++|*
02053  M00S02048.virterm +++|*     THIS PROCEDURE DOES INITIALIZATION FOR QTRM INPUT.
02054  M00S02049.virterm +++|*
02055  M00S02050.virterm +++|*     PROC VDTPPI
02056  M00S02051.virterm +++|*
02057  M00S02052.virterm +++|*     EXIT      VTINPDATA = FIRST WORD OF INPUT.
02058  M00S02053.virterm +++|*               VTINPWORD = 1.
02059  M00S02054.virterm +++|*               VTINPNEXT = 0.
02060  M00S02055.virterm +++|*               VTORDN = 0.
02061  M00S02056.virterm +++|*
02062  M00S02057.virterm +++|*     USES      VTINPDATA, VTINPNEXT, VTINPWORD, VTORDN.
02063  M00S02058.virterm +++|#
02064  M00S02059.virterm +++|ITEM WORD       I;                   # WORD POINTER #
02065  M00S02060.virterm +++|ITEM BIT        I;                   # BIT POINTER #
02066  M00S02061.virterm +++|
02067  M00S02062.virterm +++|VTINPNEXT = 0;                       # CLEAR INPUT WORD #
02068  M00S02063.virterm +++|VTORDN = 0;                          # CLEAR ORDINAL #
02069  M00S02064.virterm +++|VTINPWORD = 1;
02070  M00S02065.virterm +++|WORD = (NIT$CTLC + 1) / 5;           # INSERT DUMMY CARRIAGE RETURN #
02071  M00S02066.virterm +++|BIT = (NIT$CTLC + 1 - (WORD * 5)) * 12;
02072  M00S02067.virterm +++|B<BIT,12>QTRM$WD0[WORD] = O"15";
02073  M00S02068.virterm +++|VTINPDATA = QTRM$WD0[0];
02074  M00S02069.virterm +++|
02075  M00S02070.virterm +++|END  # VDTPPI #
02076  M00S02071.virterm +++|*ENDIF
02077  M00S02072.virterm +++|CONTROL EJECT;
02078  M00S02073.virterm +++|
02079  M00S02074.virterm +++|PROC VDTSAM(MASK);
02080  M00S02075.virterm +++|
02081  M00S02076.virterm +++|# TITLE VDTSAM - SET ATTRIBUTE MASK. #
02082  M00S02077.virterm +++|
02083  M00S02078.virterm +++|IOBEGIN(VDTSAM)
02084  M00S02079.virterm +++|
02085  M00S02080.virterm +++|#
02086  M00S02081.virterm +++|**    VDTSAM - SET ATTRIBUTE MASK.
02087  M00S02082.virterm +++|*
02088  M00S02083.virterm +++|*     THIS PROCEDURE SETS THE ATTRIBUTES REQUESTED BY MASK.
02089  M00S02084.virterm +++|*
02090  M00S02085.virterm +++|*     PROC VDTSAM(MASK)
02091  M00S02086.virterm +++|*
02092  M00S02087.virterm +++|*     ENTRY     MASK       = MASK OF LOGICAL/PHYSICAL ATTRIBUTES.
02093  M00S02088.virterm +++|*               ATTRIBMASK = CURRENT ATTRIBUTE MASK.
02094  M00S02089.virterm +++|*
02095  M00S02090.virterm +++|*     EXIT      ATTRIBMASK = NEW ATTRIBUTE MASK.
02096  M00S02091.virterm +++|*
02097  M00S02092.virterm +++|*     CALLS     VDCTRL, VDTOUT.
02098  M00S02093.virterm +++|*
02099  M00S02094.virterm +++|*     USES      ATTNEWMASK, ATTRIBMASK, ATTRIBSAME.
02100  M00S02095.virterm +++|#
02101  M00S02096.virterm +++|
02102  M00S02097.virterm +++|ITEM MASK       U;                   # REQUESTED ATTRIBUTES #
02103  M00S02098.virterm +++|
02104  M00S02099.virterm +++|ATTNEWMASK = MASK;                   # SAVE NEW ATTRIBUTES #
02105  M00S02100.virterm +++|
02106  M00S02101.virterm +++|IF NOT TABNOTMASK[0] THEN
02107  M00S02102.virterm +++|  BEGIN                              # IF ATTRIBUTES ARE MASKABLE #
02108  M00S02103.virterm +++|
02109  M00S02104.virterm +++|  # CALCULATE ATTRIBUTES THAT WILL BE UNCHANGED #
02110  M00S02105.virterm +++|
02111  M00S02106.virterm +++|  ATTRIBSAME = (ATTNEWMASK LAN ATTRIBMASK[0]) LAN O"3000";
02112  M00S02107.virterm +++|  IF ATTLOGICAL[0] THEN
02113  M00S02108.virterm +++|    BEGIN                              # IF LOGICAL ATTRIBUTE #
02114  M00S02109.virterm +++|    IF B<0,1>ATTNEWMASK EQ 1 AND ATTORDINAL[0] EQ B<6,6>ATTNEWMASK THEN
02115  M00S02110.virterm +++|      ATTRIBSAME = ATTRIBSAME LOR (ATTNEWMASK LAN O"4077");
02116  M00S02111.virterm +++|    END
02117  M00S02112.virterm +++|  ELSE
02118  M00S02113.virterm +++|    BEGIN                              # PHYSICAL ATTRIBUTES #
02119  M00S02114.virterm +++|    IF B<0,1> ATTNEWMASK EQ 0 THEN
02120  M00S02115.virterm +++|      BEGIN
02121  M00S02116.virterm +++|      ATTRIBSAME = ATTRIBSAME LOR
02122  M00S02117.virterm +++|      ((ATTNEWMASK LAN ATTRIBMASK[0]) LAN O"0017");
02123  M00S02118.virterm +++|      END
02124  M00S02119.virterm +++|    END
02125  M00S02120.virterm +++|
02126  M00S02121.virterm +++|  # TURN OFF ATTRIBUTES THAT ARE ON AND NOT REQUESTED THIS CALL #
02127  M00S02122.virterm +++|
02128  M00S02123.virterm +++|  ATTRIBMASK[0] = ATTRIBMASK[0] LXR ATTRIBSAME;
02129  M00S02124.virterm +++|
02130  M00S02125.virterm +++|END
02131  M00S02126.virterm +++|
02132  M00S02127.virterm +++|IF ATTRIBMASK[0] NQ 0 THEN
02133  M00S02128.virterm +++|  BEGIN                              # IF TURNING OFF ANY ATTRIBUTES #
02134  M00S02129.virterm +++|  IF ATTLOGICAL[0] THEN
02135  M00S02130.virterm +++|    BEGIN                            # TURN OFF LOGICAL ATTRIBUTE #
02136  M00S02131.virterm +++|     IF ATTORDINAL[0] GQ 0 AND ATTORDINAL[0] LQ MAXLOGTYPE THEN
02137  M00S02132.virterm +++|      BEGIN                          # IF GROUP ONE LOGICAL #
02138  M00S02133.virterm +++|      VDCTRL(OUT"INPTEXTOFF" + (ATTORDINAL[0] * 2));
02139  M00S02134.virterm +++|      IF ATTORDINAL[0] EQ 0 THEN VTPSUNDACT[0] = FALSE;
02140  M00S02135.virterm +++|      END
02141  M00S02136.virterm +++|     ELSE
02142  M00S02137.virterm +++|      BEGIN                          # NOT GROUP ONE LOGICAL #
02143  M00S02138.virterm +++|      IF ATTORDINAL[0] LQ MAXLOGTYPE*2+1 THEN
02144  M00S02139.virterm +++|       BEGIN                         # IF LEGAL GROUP TWO LOGICAL #
02145  M00S02140.virterm +++|       VDCTRL(OUT"INPUTE2" + ((ATTORDINAL[0]-6) * 2));
02146  M00S02141.virterm +++|       END
02147  M00S02142.virterm +++|      END
02148  M00S02143.virterm +++|    END
02149  M00S02144.virterm +++|  ELSE
02150  M00S02145.virterm +++|    BEGIN                            # TURN OFF PHYSICAL ATTRIBUTES #
02151  M00S02146.virterm +++|    IF ATTUNDERLN[0] THEN VTPSUNDACT[0] = FALSE;
02152  M00S02147.virterm +++|    IF ATTUNDERLN[0] THEN VDCTRL(OUT"UNDERLNOFF");
02153  M00S02148.virterm +++|    IF ATTALTERIN[0] THEN VDCTRL(OUT"ALTINTNOFF");
02154  M00S02149.virterm +++|    IF ATTINVERSE[0] THEN VDCTRL(OUT"INVERSEOFF");
02155  M00S02150.virterm +++|    IF ATTBLINKMD[0] THEN VDCTRL(OUT"BLINKOFF");
02156  M00S02151.virterm +++|    END
02157  M00S02152.virterm +++|  IF ATTPROTECT[0] THEN VDCTRL(OUT"PROTECTOFF");
02158  M00S02153.virterm +++|  IF ATTGUARDMD[0] THEN VDCTRL(OUT"GUARDOFF");
02159  M00S02154.virterm +++|  END
02160  M00S02155.virterm +++|
02161  M00S02156.virterm +++|# TURN ON ATTRIBUTES THAT ARE NOT ON AND ARE REQUESTED THIS CALL #
02162  M00S02157.virterm +++|
02163  M00S02158.virterm +++|ATTRIBMASK[0] = ATTNEWMASK;          # RESET NEW ATTRIBUTES #
02164  M00S02159.virterm +++|
02165  M00S02160.virterm +++|IF ATTRIBMASK NQ 0 THEN
02166  M00S02161.virterm +++|  BEGIN                              # IF ANY ATTRIBUTES TO TURN ON #
02167  M00S02162.virterm +++|  IF NOT TABLOCKMDE[0] THEN
02168  M00S02163.virterm +++|    BEGIN                            # IF NOT BLOCK TYPE TERMINAL #
02169  M00S02164.virterm +++|    IF NOT TABNOTMASK[0] THEN
02170  M00S02165.virterm +++|      BEGIN                          # IF ATTRIBUTES ARE MASKABLE #
02171  M00S02166.virterm +++|      ATTRIBMASK[0] = ATTRIBMASK[0] LXR ATTRIBSAME;
02172  M00S02167.virterm +++|      END
02173  M00S02168.virterm +++|    IF ATTPROTECT[0] THEN VDCTRL(OUT"PROTECTON");
02174  M00S02169.virterm +++|    IF ATTGUARDMD[0] THEN VDCTRL(OUT"GUARDON");
02175  M00S02170.virterm +++|    END
02176  M00S02171.virterm +++|  IF ATTLOGICAL[0] THEN
02177  M00S02172.virterm +++|    BEGIN                            # TURN ON LOGICAL ATTRIBUTE #
02178  M00S02173.virterm +++|     IF ATTORDINAL[0] GQ 0 AND ATTORDINAL[0] LQ MAXLOGTYPE THEN
02179  M00S02174.virterm +++|      BEGIN                          # IF GROUP ONE LOGICAL #
02180  M00S02175.virterm +++|      VDCTRL(OUT"INPTEXTON" + (ATTORDINAL[0] * 2));
02181  M00S02176.virterm +++|      IF ATTORDINAL[0] EQ 0 THEN VTPSUNDACT[0] = VTPSUNDREQ[0];
02182  M00S02177.virterm +++|      END
02183  M00S02178.virterm +++|     ELSE
02184  M00S02179.virterm +++|      BEGIN                          # NOT GROUP ONE LOGICAL #
02185  M00S02180.virterm +++|      IF ATTORDINAL[0] LQ MAXLOGTYPE*2+1 THEN
02186  M00S02181.virterm +++|       BEGIN                         # IF LEGAL GROUP TWO LOGICAL #
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/virterm.txt ยท Last modified: by 127.0.0.1