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
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 #
02187  M00S02182.virterm ---|       VDCTRL(OUT"INPUTB2" + ((ATTORDINAL[0]-6)* 2));
02188  M00S02183.virterm ---|       END
02189  M00S02184.virterm ---|      END
02190  M00S02185.virterm ---|    END
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/virterm.txt ยท Last modified: (external edit)