User Tools

Site Tools


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

Deck KEYEX

1 Modification

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M01S00001.keyex   +++|      PROGRAM KEYEX(TAPE1=100,OUTPUT=100,TTFILE=100
00002  M01S00002.keyex   +++|     .    ,INPUT=100, KEYPRNT=100, TAPE6 = KEYPRNT
00003  M01S00003.keyex   +++|     .    ,TAPE2=OUTPUT,TAPE3=TTFILE,TAPE5=INPUT)
00004  M01S00004.keyex   +++|
00005  M01S00005.keyex   +++|***   KEY DEFINITION UTILITY.
00006  M01S00001.281l803 +++|*
00007  M01S00002.281l803 +++|*         COPYRIGHT CONTROL DATA SYSTEMS INC.  1992.
00008  M01S00006.keyex   +++|*
00009  M01S00007.keyex   +++|*     THE *KEY* COMMAND WAS DESIGNED TO BE USED ONLY ON THE VIKING 721
00010  M01S00008.keyex   +++|*     TERMINAL.  IT MAKES USE OF THE PROGRAMMABLE FUNCTION KEYS ON THE
00011  M01S00009.keyex   +++|*     VIKING 721.  YOU CAN CREATE OR EDIT DEFINITIONS FOR FUNCTION
00012  M01S00010.keyex   +++|*     KEYS AND SET TERMINAL CHARACTERISTICS.
00013  M01S00011.keyex   +++|*
00014  M01S00012.keyex   +++|*     W. F. ANSLEY  83/06/01.  CYBER INTERFACE AND PANELS.
00015  M01S00013.keyex   +++|*     S. L. KSANDER 83/06/01.  721 INTERFACE AND Z80 CODE.
00016  M01S00014.keyex   +++|*                   83/11/07.  UPDATED TO INCLUDE THE CHECK AND PRINT
00017  M01S00015.keyex   +++|*                              COMMANDS.
00018  M01S00016.keyex   +++|*                   84/02/29.  UPDATE TO INCLUDE THE PF COMMANDS.
00019  M01S00017.keyex   +++|*     M. D. LEMBCKE 84/10/30.  REVISED AND STANDARDIZED.
00020  M01S00018.keyex   +++|*     M. L. SWANSON 85/02/05.
00021  M01S00019.keyex   +++|
00022  M01S00020.keyex   +++|*** THE COMMAND FORMATS ARE:  KEY,OPTION.   OR
00023  M01S00021.keyex   +++|*                             KEY(OPTION,FILENAME)
00024  M01S00022.keyex   +++|*
00025  M01S00023.keyex   +++|*     WHERE OPTION CAN BE ONE OF THE FOLLOWING:
00026  M01S00024.keyex   +++|*
00027  M01S00025.keyex   +++|*     HELP     GIVES THE USER COMPLETE INFORMATION ON THE *KEY*
00028  M01S00026.keyex   +++|*              COMMAND AND ITS USE.  *FILENAME* IS IGNORED WITH
00029  M01S00027.keyex   +++|*              THIS OPTION.
00030  M01S00028.keyex   +++|*
00031  M01S00029.keyex   +++|*     CHECK    CHECKS TO SEE IF THE FUNCTION KEYS ARE ALREADY
00032  M01S00030.keyex   +++|*              LOADED.  IF NOT, A LOAD WILL BE EXECUTED.  THIS
00033  M01S00031.keyex   +++|*              WILL SAVE TIME FOR THE USER OPERATING AT A LOW
00034  M01S00032.keyex   +++|*              BAUD RATE.
00035  M01S00033.keyex   +++|*
00036  M01S00034.keyex   +++|*              NOTE:  A GOOD USE FOR THIS OPTION IS IN A PROLOGUE
00037  M01S00035.keyex   +++|*                     AT LOGIN TIME (REFER TO THE UPROC COMMAND).
00038  M01S00036.keyex   +++|*
00039  M01S00037.keyex   +++|*     DISPLAY  DISPLAYS THE FIRST SIXTEEN FUNCTION KEY LABELS THAT
00040  M01S00038.keyex   +++|*              ARE CURRENTLY STORED IN THE 721.
00041  M01S00039.keyex   +++|*
00042  M01S00040.keyex   +++|*     DEFAULT  SETS THE KEY DEFINITIONS FOR THE HELP, EDIT AND STOP
00043  M01S00041.keyex   +++|*              KEY TO THE NOS SYSTEM DEFAULTS.  *FILENAME* IS IGNORED
00044  M01S00042.keyex   +++|*              FOR THIS OPTION.  THE DEFAULTS SET ARE:  HELP KEY =
00045  M01S00043.keyex   +++|*              HELP.  EDIT KEY = FSE.  STOP KEY = CTRL T/NEXT.
00046  M01S00044.keyex   +++|*
00047  M01S00045.keyex   +++|*     EDIT     ALLOWS THE USER TO UPDATE THEIR EXISTING KEY
00048  M01S00046.keyex   +++|*              DEFINITIONS ON *FILENAME*.  IF *FILENAME* IS
00049  M01S00047.keyex   +++|*              NOT SPECIFIED, A FILE NAMED *KEYDEFS* WILL
00050  M01S00048.keyex   +++|*              BE CREATED AND SAVED UNDER THE USER'S USERNAME.
00051  M01S00049.keyex   +++|*
00052  M01S00050.keyex   +++|*     LOAD     THIS WILL DOWNLINE LOAD THE KEY DEFINITIONS FROM THE
00053  M01S00051.keyex   +++|*              SPECIFIED FILE INTO THE TERMINAL WITHOUT ANY USER
00054  M01S00052.keyex   +++|*              INTERACTION.  IF NO FILE IS SPECIFIED, THE DEFAULT
00055  M01S00053.keyex   +++|*              FILE *KEYDEFS* WILL BE USED.
00056  M01S00054.keyex   +++|*
00057  M01S00055.keyex   +++|*     PRINT    THIS WILL LIST ONLY THE KEYS THAT ARE DEFINED ON THE
00058  M01S00056.keyex   +++|*              SPECIFIED FILE.  THE OUTPUT WILL BE PLACED ON THE
00059  M01S00057.keyex   +++|*              LOCAL FILE *KEYPRNT*.  IF NO FILE IS SPECIFIED,
00060  M01S00058.keyex   +++|*              *KEYDEFS* IS USED.  THIS DOES NOT NECESSARILY LIST
00061  M01S00059.keyex   +++|*              THE KEY DEFINITIONS THAT ARE CURRENTLY LOADED INTO
00062  M01S00060.keyex   +++|*              THE TERMINAL, JUST THOSE THAT ARE ON THE SPECIFIED
00063  M01S00061.keyex   +++|*              FILE.
00064  M01S00062.keyex   +++|*
00065  M01S00063.keyex   +++|*     FILENAME  THE DEFAULT FILE NAME IS *KEYDEFS*.
00066  M01S00064.keyex   +++|
00067  M01S00065.keyex   +++|***   ERROR MESSAGES.
00068  M01S00066.keyex   +++|*
00069  M01S00067.keyex   +++|*     * PLEASE ENTER THE SYSTEM COMMAND SCREEN(721)
00070  M01S00068.keyex   +++|*       AND RE-ENTER THE KEY COMMAND.*
00071  M01S00069.keyex   +++|*             THE PROGRAM HAS DETECTED THE TERMINAL MODEL NAME DOES
00072  M01S00070.keyex   +++|*             NOT BEGIN WITH THE PREFIX "721" AND HENCE THE TERMINAL
00073  M01S00071.keyex   +++|*             HAS NOT BEEN RECOGNIZED AS A VIKING X.  NO PROCESSING
00074  M01S00072.keyex   +++|*             OCCURS IN THIS CASE.
00075  M01S00073.keyex   +++|
00076  M01S00074.keyex   +++|***   MESSAGES.
00077  M01S00075.keyex   +++|*
00078  M01S00076.keyex   +++|*     * FUNCTION KEYS ARE ALREADY LOADED.*
00079  M01S00077.keyex   +++|*             OUTPUT BY ROUTINE *CHECK* TO SIGNIFY NO LOAD WAS
00080  M01S00078.keyex   +++|*             PROCESSED.
00081  M01S00079.keyex   +++|*
00082  M01S00080.keyex   +++|*     * FUNCTION KEYS ARE NOT LOADED.*
00083  M01S00081.keyex   +++|*             OUTPUT BY ROUTINE *DISPLAY* IF FUNCTION KEYS HAVE NOT
00084  M01S00082.keyex   +++|*             BEEN DEFINED.
00085  M01S00083.keyex   +++|*
00086  M01S00084.keyex   +++|*     * FUNCTION KEYS HAVE BEEN LOADED.*
00087  M01S00085.keyex   +++|*             OUTPUT BY ROUTINE *LOAD* IF FUNCTION KEYS WERE LOADED.
00088  M01S00086.keyex   +++|*
00089  M01S00087.keyex   +++|*     * THE FUNCTION KEYS *EDIT*, *HELP*, AND *STOP* HAVE BEEN LOADED.*
00090  M01S00088.keyex   +++|*             OUTPUT BY ROUTINE *DEFAULT* IF *EDIT*, *HELP*, *STOP*
00091  M01S00089.keyex   +++|*             KEYS WERE LOADED.
00092  M01S00090.keyex   +++|*
00093  M01S00091.keyex   +++|*     * THE KEY DEFINITIONS FILE HAS BEEN REPLACED.*
00094  M01S00092.keyex   +++|*             OUTPUT BY ROUTINE *EDIT* IF KEY DEFINITIONS FILE IS
00095  M01S00093.keyex   +++|*             REPLACED.
00096  M01S00094.keyex   +++|*
00097  M01S00095.keyex   +++|*     * THE LIST OF DEFINED FUNCTION KEYS IS ON THE LOCAL FILE
00098  M01S00096.keyex   +++|*             *KEYPRNT*.* - OUTPUT BY ROUTINE *PRINT* AS AN INFORM-
00099  M01S00097.keyex   +++|*             ATIVE MESSAGE TO THE USER.
00100  M01S00098.keyex   +++|
00101  M01S00099.keyex   +++|***   *KEY* FILES.
00102  M01S00100.keyex   +++|*
00103  M01S00101.keyex   +++|*     THE FOLLOWING DECKS/FILES ARE ASSOCIATED WITH THE *KEY* UTILITY.
00104  M01S00102.keyex   +++|*
00105  M01S00103.keyex   +++|*     PROCEDURES:
00106  M01S00104.keyex   +++|*             KEY       *CCL* PROCEDURE.
00107  M01S00105.keyex   +++|*
00108  M01S00106.keyex   +++|*     CODE:
00109  M01S00107.keyex   +++|*             KEYEX     KEY EXECUTIVE PROGRAM.
00110  M01S00108.keyex   +++|*             KEYPANS   SCREEN FORMATTING PANELS.
00111  M01S00109.keyex   +++|*             KEYUTIL   Z80 SOURCE CODE.
00112  M01S00110.keyex   +++|
00113  M01S00111.keyex   +++|
00114  M01S00112.keyex   +++|
00115  M01S00113.keyex   +++|
00116  M01S00114.keyex   +++|**    MAIN PROGRAM.
00117  M01S00115.keyex   +++|
00118  M01S00116.keyex   +++|**    KEYEX - EXECUTIVE PROGRAM FOR *KEY* UTILITY.
00119  M01S00117.keyex   +++|*
00120  M01S00118.keyex   +++|*     *KEYEX* SETS UP DEFAULTS IN COMMON BLOCK *INFO*, CRACKS
00121  M01S00119.keyex   +++|*     COMMAND PARAMETERS, AND PROCESSES USER SPECIFIED OPTIONS.
00122  M01S00120.keyex   +++|*
00123  M01S00121.keyex   +++|*     KEYEX(OPTION, FILENAME)
00124  M01S00122.keyex   +++|*
00125  M01S00123.keyex   +++|*     ENTRY   OPTION - USER SPECIFIED OPTION.
00126  M01S00124.keyex   +++|*             FILENAME - OPTIONAL FILE NAME.
00127  M01S00125.keyex   +++|*
00128  M01S00126.keyex   +++|*     EXIT    *CCL* GLOBAL VARIABLE *R1* = 1 IF TERMINAL TYPE IS
00129  M01S00127.keyex   +++|*             INCORRECT.
00130  M01S00128.keyex   +++|*
00131  M01S00129.keyex   +++|*     CALLS   CHECK, CHKTERM, DEFAULT, DISPLAY, EDIT, HELP, LOAD,
00132  M01S00130.keyex   +++|*             PRINT, SYSKEYS.
00133  M01S00131.keyex   +++|
00134  M01S00132.keyex   +++|
00135  M01S00133.keyex   +++|      IMPLICIT INTEGER (A - Z)
00136  M01S00134.keyex   +++|
00137  M01S00135.keyex   +++|      PARAMETER    (NKEYS = 45)
00138  M01S00136.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00139  M01S00137.keyex   +++|
00140  M01S00138.keyex   +++|      CHARACTER*7  OPTION
00141  M01S00139.keyex   +++|*                            OPTION SPECIFIED BY THE USER
00142  M01S00140.keyex   +++|      CHARACTER*7  FILENM
00143  M01S00141.keyex   +++|*                            KEY DEFINITIONS FILE
00144  M01S00142.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00145  M01S00143.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00146  M01S00144.keyex   +++|*                            7/ KEY LABEL, 60/ KEY DEFINITION
00147  M01S00145.keyex   +++|      CHARACTER*7  PARM
00148  M01S00146.keyex   +++|*                            PARAMETER NAME
00149  M01S00147.keyex   +++|      CHARACTER*7  SETDATA(3)
00150  M01S00148.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
00151  M01S00149.keyex   +++|
00152  M01S00150.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00153  M01S00151.keyex   +++|
00154  M01S00152.keyex   +++|
00155  M01S00153.keyex   +++|* SET UP DEFAULTS IN COMMON BLOCK AND GET INPUT PARAMETERS.
00156  M01S00154.keyex   +++|
00157  M01S00155.keyex   +++|      CALL SYSKEYS
00158  M01S00156.keyex   +++|      CALL GETPARM(PARM,OPTION,I)
00159  M01S00157.keyex   +++|      CALL GETPARM(PARM,FILENM,I)
00160  M01S00158.keyex   +++|
00161  M01S00159.keyex   +++|* CHECK TERMINAL TYPE AND PROCESS OPTION SPECIFIED BY THE USER.
00162  M01S00160.keyex   +++|
00163  M01S00161.keyex   +++|      CALL CHKTERM
00164  M01S00162.keyex   +++|      IF(OPTION .EQ. 'CHECK  ') THEN
00165  M01S00163.keyex   +++|        CALL CHECK
00166  M01S00164.keyex   +++|      ELSE IF(OPTION .EQ. 'DEFAULT') THEN
00167  M01S00165.keyex   +++|        CALL DEFAULT
00168  M01S00166.keyex   +++|      ELSE IF(OPTION .EQ. 'DISPLAY') THEN
00169  M01S00167.keyex   +++|        CALL DISPLAY
00170  M01S00168.keyex   +++|      ELSE IF(OPTION .EQ. 'EDIT   ') THEN
00171  M01S00169.keyex   +++|        CALL EDIT
00172  M01S00170.keyex   +++|      ELSE IF(OPTION .EQ. 'HELP   ') THEN
00173  M01S00171.keyex   +++|        CALL HELP
00174  M01S00172.keyex   +++|      ELSE IF(OPTION .EQ. 'LOAD   ') THEN
00175  M01S00173.keyex   +++|        CALL LOAD
00176  M01S00174.keyex   +++|      ELSE IF(OPTION .EQ. 'PRINT  ') THEN
00177  M01S00175.keyex   +++|        CALL PRINT
00178  M01S00176.keyex   +++|      ENDIF
00179  M01S00177.keyex   +++|      CLOSE(1,STATUS='DELETE')
00180  M01S00178.keyex   +++|      CLOSE(3,STATUS='DELETE')
00181  M01S00179.keyex   +++|      END
00182  M01S00180.keyex   +++|
00183  M01S00181.keyex   +++|
00184  M01S00182.keyex   +++|      SUBROUTINE BYTE (CHAR, UBYTE, LBYTE)
00185  M01S00183.keyex   +++|
00186  M01S00184.keyex   +++|**    BYTE - CONVERT ADDRESS TO Z80 FORMAT.
00187  M01S00185.keyex   +++|*
00188  M01S00186.keyex   +++|*     *BYTE* TAKES *CHAR* AND DIVIDES IT, CHANGING THE ADDRESS INTO
00189  M01S00187.keyex   +++|*     721 Z80 FORMAT AND RETURNS THE RESULT IN *UBYTE* AND *LBYTE*.
00190  M01S00188.keyex   +++|*
00191  M01S00189.keyex   +++|*     CALL BYTE(CHAR, UBYTE, LBYTE)
00192  M01S00190.keyex   +++|*
00193  M01S00191.keyex   +++|*     ENTRY   CHAR - CHARACTER BYTE ADDRESS.
00194  M01S00192.keyex   +++|*
00195  M01S00193.keyex   +++|*     EXIT    UBYTE - THE UPPER HALF ADDRESS WITH THE PREFIX *60*.
00196  M01S00194.keyex   +++|*             LBYTE - THE LOWER HALF ADDRESS WITH THE PREFIX *20*.
00197  M01S00195.keyex   +++|*
00198  M01S00196.keyex   +++|*     NOTE    THE Z80 MICRO REQUIRES A 16 BIT ADDRESS WITH THE UPPER
00199  M01S00197.keyex   +++|*             BYTE BEFORE THE LOWER BYTE.
00200  M01S00198.keyex   +++|
00201  M01S00199.keyex   +++|
00202  M01S00200.keyex   +++|      IMPLICIT INTEGER (A - Z)
00203  M01S00201.keyex   +++|
00204  M01S00202.keyex   +++|      BOOLEAN      ZPREFIX
00205  M01S00203.keyex   +++|*                            Z80 CODE PREFIX
00206  M01S00204.keyex   +++|      BOOLEAN      Z20CODE
00207  M01S00205.keyex   +++|*                            *20* PREFIX FOR Z80 ADDRESS
00208  M01S00206.keyex   +++|      BOOLEAN      Z60CODE
00209  M01S00207.keyex   +++|*                            *60* PREFIX FOR Z80 ADDRESS
00210  M01S00208.keyex   +++|
00211  M01S00209.keyex   +++|      DATA  ZPREFIX / Z"800" /
00212  M01S00210.keyex   +++|      DATA  Z20CODE / Z"20" /
00213  M01S00211.keyex   +++|      DATA  Z60CODE / Z"60" /
00214  M01S00212.keyex   +++|
00215  M01S00213.keyex   +++|      C     = AND(CHAR, Z"F0")
00216  M01S00214.keyex   +++|      UBYTE = SHIFT(C, -4)     + Z20CODE + ZPREFIX
00217  M01S00215.keyex   +++|      LBYTE = AND(CHAR, Z"0F") + Z60CODE + ZPREFIX
00218  M01S00216.keyex   +++|      RETURN
00219  M01S00217.keyex   +++|      END
00220  M01S00218.keyex   +++|
00221  M01S00219.keyex   +++|
00222  M01S00220.keyex   +++|      SUBROUTINE CHECK
00223  M01S00221.keyex   +++|
00224  M01S00222.keyex   +++|**    CHECK - CHECK IF FUNCTION KEYS HAVE BEEN LOADED.
00225  M01S00223.keyex   +++|*
00226  M01S00224.keyex   +++|*     *CHECK* QUERIES THE TERMINAL TO DETERMINE IF Z80 CONTROLWARE
00227  M01S00225.keyex   +++|*     AND KEY DEFINITIONS ARE LOADED INTO THE TERMINAL.
00228  M01S00226.keyex   +++|*
00229  M01S00227.keyex   +++|*     CALL CHECK
00230  M01S00228.keyex   +++|*
00231  M01S00229.keyex   +++|*     CALLS   LOAD, VERLOAD.
00232  M01S00230.keyex   +++|*
00233  M01S00231.keyex   +++|*     MESSAGES
00234  M01S00232.keyex   +++|*             FUNCTION KEYS HAVE BEEN LOADED.
00235  M01S00233.keyex   +++|
00236  M01S00234.keyex   +++|
00237  M01S00235.keyex   +++|      IMPLICIT INTEGER (A - Z)
00238  M01S00236.keyex   +++|
00239  M01S00237.keyex   +++|      LOGICAL      LOADED
00240  M01S00238.keyex   +++|*                            CONTROLWARE LOADED FLAG
00241  M01S00239.keyex   +++|
00242  M01S00240.keyex   +++|      DATA  LOADED  / .FALSE. /
00243  M01S00241.keyex   +++|
00244  M01S00242.keyex   +++|10    FORMAT('FUNCTION KEYS ARE ALREADY LOADED.')
00245  M01S00243.keyex   +++|
00246  M01S00244.keyex   +++|      CALL VERLOAD(LOADED)
00247  M01S00245.keyex   +++|
00248  M01S00246.keyex   +++|      IF (.NOT.LOADED) THEN
00249  M01S00247.keyex   +++|        CALL LOAD
00250  M01S00248.keyex   +++|      ELSE
00251  M01S00249.keyex   +++|        WRITE(2,10)
00252  M01S00250.keyex   +++|        ENDFILE 2
00253  M01S00251.keyex   +++|      ENDIF
00254  M01S00252.keyex   +++|      RETURN
00255  M01S00253.keyex   +++|      END
00256  M01S00254.keyex   +++|
00257  M01S00255.keyex   +++|
00258  M01S00256.keyex   +++|      SUBROUTINE CHKTERM
00259  M01S00257.keyex   +++|
00260  M01S00258.keyex   +++|**    CHKTERM - CHECK TERMINAL MODEL NAME.
00261  M01S00259.keyex   +++|*
00262  M01S00260.keyex   +++|*     *CHKTERM* VERIFIES THAT THE FIRST THREE CHARACTERS OF THE
00263  M01S00261.keyex   +++|*     TERMINAL MODEL NAME SPECIFIED TO THE SCREEN OR LINE COMMAND
00264  M01S00262.keyex   +++|*     WAS "721".
00265  M01S00263.keyex   +++|*
00266  M01S00264.keyex   +++|*     CALL CHKTERM
00267  M01S00265.keyex   +++|*
00268  M01S00266.keyex   +++|*     ERROR   *ERR* IS CALLED IF THE TERMINAL MODEL IS NOT PREFIXED
00269  M01S00267.keyex   +++|*             BY "721".
00270  M01S00268.keyex   +++|*
00271  M01S00269.keyex   +++|*     CALLS   ERR, SFGETN.
00272  M01S00270.keyex   +++|*
00273  M01S00271.keyex   +++|*     MESSAGES
00274  M01S00272.keyex   +++|*             PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.
00275  M01S00273.keyex   +++|*             AND RE-ENTER THE KEY COMMAND.
00276  M01S00274.keyex   +++|*             STOP.  FIX ERROR.
00277  M01S00275.keyex   +++|
00278  M01S00276.keyex   +++|
00279  M01S00277.keyex   +++|      IMPLICIT INTEGER (A - Z)
00280  M01S00278.keyex   +++|
00281  M01S00279.keyex   +++|      CHARACTER*7  MODNAME
00282  M01S00280.keyex   +++|*                            TERMINAL MODEL NAME.
00283  M01S00281.keyex   +++|      CHARACTER*3  PREFIX
00284  M01S00282.keyex   +++|*                            THREE CHARACTER PREFIX
00285  M01S00283.keyex   +++|      CHARACTER*3  PRE721
00286  M01S00284.keyex   +++|*                            CHARACTER STRING PREFIX FOR 721
00287  M01S00285.keyex   +++|
00288  M01S00286.keyex   +++|      EQUIVALENCE  (MODNAME, PREFIX)
00289  M01S00287.keyex   +++|
00290  M01S00288.keyex   +++|      DATA  PRE721 / '721' /
00291  M01S00289.keyex   +++|
00292  M01S00290.keyex   +++|10    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00293  M01S00291.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00294  M01S00292.keyex   +++|
00295  M01S00293.keyex   +++|* GET TERMINAL MODEL NAME.
00296  M01S00294.keyex   +++|
00297  M01S00295.keyex   +++|      CALL SFGETN(MODNAME)
00298  M01S00296.keyex   +++|
00299  M01S00297.keyex   +++|* IF PREFIX IS NOT '721', NOTIFY USER OF ERROR.
00300  M01S00298.keyex   +++|
00301  M01S00299.keyex   +++|      IF (PREFIX .NE. PRE721) THEN
00302  M01S00300.keyex   +++|        WRITE(2,10)
00303  M01S00301.keyex   +++|        CALL ERR
00304  M01S00302.keyex   +++|        STOP 'FIX ERROR.'
00305  M01S00303.keyex   +++|      ENDIF
00306  M01S00304.keyex   +++|      RETURN
00307  M01S00305.keyex   +++|      END
00308  M01S00306.keyex   +++|
00309  M01S00307.keyex   +++|
00310  M01S00308.keyex   +++|      SUBROUTINE CLEAR
00311  M01S00309.keyex   +++|
00312  M01S00310.keyex   +++|**    CLEAR - CLEAR THE USER DEFINED FUNCTION KEYS IN THE TERMINAL.
00313  M01S00311.keyex   +++|*
00314  M01S00312.keyex   +++|*     *CLEAR* CLEARS THE FUNCTION KEY DEFINITIONS WITHIN THE
00315  M01S00313.keyex   +++|*     TERMINAL BY EXECUTING A HOST-LOADED CONTROLWARE ROUTINE
00316  M01S00314.keyex   +++|*     THAT REINITIALIZES THE TERMINALS KEY DEFINITION TABLE.
00317  M01S00315.keyex   +++|*
00318  M01S00316.keyex   +++|*     CALL CLEAR
00319  M01S00317.keyex   +++|*
00320  M01S00318.keyex   +++|*     CALLS   PACK, SEQPACK.
00321  M01S00319.keyex   +++|
00322  M01S00320.keyex   +++|
00323  M01S00321.keyex   +++|      IMPLICIT INTEGER (A - Z)
00324  M01S00322.keyex   +++|
00325  M01S00323.keyex   +++|
00326  M01S00324.keyex   +++|      BOOLEAN      ZCARRET(1)
00327  M01S00325.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
00328  M01S00326.keyex   +++|      BOOLEAN      ZRESETR(3)
00329  M01S00327.keyex   +++|*                            HEX SEQUENCE TO INVOKE RESET ROUTINE
00330  M01S00328.keyex   +++|
00331  M01S00329.keyex   +++|
00332  M01S00330.keyex   +++|      DATA  ZCARRET / Z"0D" /
00333  M01S00331.keyex   +++|      DATA  ZRESETR / Z"1E", Z"12", Z"72" /
00334  M01S00332.keyex   +++|
00335  M01S00333.keyex   +++|* RESET KEYS TO THE DEFAULT 721 SETTINGS BY DOING A HOST EXECUTE
00336  M01S00334.keyex   +++|* OF THE HOST LOADED Z80 CONTROLWARE ROUTINE *RESET*.
00337  M01S00335.keyex   +++|
00338  M01S00336.keyex   +++|      CALL PACK(1, 0)
00339  M01S00337.keyex   +++|      CALL SEQPACK(ZRESETR,3)
00340  M01S00338.keyex   +++|      CALL SEQPACK(ZCARRET,1)
00341  M01S00339.keyex   +++|      CALL PACK(3, 1)
00342  M01S00340.keyex   +++|      RETURN
00343  M01S00341.keyex   +++|      END
00344  M01S00342.keyex   +++|
00345  M01S00343.keyex   +++|
00346  M01S00344.keyex   +++|      SUBROUTINE DEFAULT
00347  M01S00345.keyex   +++|
00348  M01S00346.keyex   +++|**    DEFAULT - LOAD DEFAULT FUNCTION KEYS.
00349  M01S00347.keyex   +++|*
00350  M01S00348.keyex   +++|*     *DEFAULT* LOADS THE *EDIT*, *HELP*, AND *STOP* FUNCTION KEYS.
00351  M01S00349.keyex   +++|*
00352  M01S00350.keyex   +++|*     CALL DEFAULT
00353  M01S00351.keyex   +++|*
00354  M01S00352.keyex   +++|*     EXIT    *KEYS* AND *SETDATA* ARE SET TO DEFAULT VALUES.
00355  M01S00353.keyex   +++|*
00356  M01S00354.keyex   +++|*     CALLS   CLEAR, SEND.
00357  M01S00355.keyex   +++|*
00358  M01S00356.keyex   +++|*     MESSAGES
00359  M01S00357.keyex   +++|*             THE FUNCTION KEYS *EDIT*, *HELP*, AND *STOP* HAVE BEEN
00360  M01S00358.keyex   +++|*             LOADED.
00361  M01S00359.keyex   +++|
00362  M01S00360.keyex   +++|
00363  M01S00361.keyex   +++|      IMPLICIT INTEGER (A - Z)
00364  M01S00362.keyex   +++|
00365  M01S00363.keyex   +++|10    FORMAT(' THE FUNCTION KEYS *EDIT*, *HELP*, AND *STOP* HAVE ',
00366  M01S00364.keyex   +++|     .'BEEN LOADED.')
00367  M01S00365.keyex   +++|
00368  M01S00366.keyex   +++|* CLEAR THE CURRENT FUNCTION KEY DEFINITIONS.
00369  M01S00367.keyex   +++|
00370  M01S00368.keyex   +++|      CALL CLEAR
00371  M01S00369.keyex   +++|
00372  M01S00370.keyex   +++|* SEND DEFAULT DEFINITIONS TO TERMINAL.
00373  M01S00371.keyex   +++|
00374  M01S00372.keyex   +++|      CALL SEND
00375  M01S00373.keyex   +++|      WRITE(2,10)
00376  M01S00374.keyex   +++|      ENDFILE 2
00377  M01S00375.keyex   +++|      RETURN
00378  M01S00376.keyex   +++|      END
00379  M01S00377.keyex   +++|
00380  M01S00378.keyex   +++|
00381  M01S00379.keyex   +++|      SUBROUTINE DISPLAY
00382  M01S00380.keyex   +++|
00383  M01S00381.keyex   +++|**    DISPLAY - DISPLAY FUNCTION KEYS.
00384  M01S00382.keyex   +++|*
00385  M01S00383.keyex   +++|*     *DISPLAY* DISPLAYS THE FIRST SIXTEEN FUNCTION KEY LABELS THAT
00386  M01S00384.keyex   +++|*     ARE CURRENTLY LOADED IN THE TERMINAL.
00387  M01S00385.keyex   +++|*
00388  M01S00386.keyex   +++|*     CALL DISPLAY
00389  M01S00387.keyex   +++|*
00390  M01S00388.keyex   +++|*     EXIT    THE FIRST SIXTEEN KEY LABELS DISPLAYED USING
00391  M01S00389.keyex   +++|*             A SCREEN FORMATTING PANEL.
00392  M01S00390.keyex   +++|*
00393  M01S00391.keyex   +++|*     CALLS   ERR, PACK, RDSORC, SEQPACK, SFCLOS, SFOPEN, SFSSHO,
00394  M01S00392.keyex   +++|*             VERLOAD.
00395  M01S00393.keyex   +++|*
00396  M01S00394.keyex   +++|*     MESSAGES
00397  M01S00395.keyex   +++|*             FUNCTION KEYS ARE NOT LOADED.
00398  M01S00396.keyex   +++|*
00399  M01S00397.keyex   +++|*             PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.
00400  M01S00398.keyex   +++|*             AND RE-ENTER THE KEY COMMAND.
00401  M01S00399.keyex   +++|*             STOP.  FIX ERROR.
00402  M01S00400.keyex   +++|
00403  M01S00401.keyex   +++|
00404  M01S00402.keyex   +++|      IMPLICIT INTEGER (A - Z)
00405  M01S00403.keyex   +++|
00406  M01S00404.keyex   +++|      PARAMETER    (NKEYS = 45)
00407  M01S00405.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00408  M01S00406.keyex   +++|
00409  M01S00407.keyex   +++|      BOOLEAN      ZDISKEY(3)
00410  M01S00408.keyex   +++|*                            HEX SEQUENCE TO DISABLE KEYBOARD ENTRY
00411  M01S00409.keyex   +++|      BOOLEAN      ZENKEYB(3)
00412  M01S00410.keyex   +++|*                            HEX SEQUENCE TO ENABLE KEYBOARD ENTRY
00413  M01S00411.keyex   +++|      BOOLEAN      ZHOSTLC(3)
00414  M01S00412.keyex   +++|*                            HEX SEQUENCE FOR HOST LOADED CONTROLWARE
00415  M01S00413.keyex   +++|      BOOLEAN      ZMCUR80(3)
00416  M01S00414.keyex   +++|*                            HEX SEQUENCE TO MOVE CURSOR FOR 80 COLUMN
00417  M01S00415.keyex   +++|      BOOLEAN      ZMCUR32(5)
00418  M01S00416.keyex   +++|*                            HEX SEQUENCE TO MOVE CURSOR FOR 132 COLUMN
00419  M01S00417.keyex   +++|      CHARACTER*7  FILENM
00420  M01S00418.keyex   +++|*                            KEY DEFINITIONS FILE
00421  M01S00419.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00422  M01S00420.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00423  M01S00421.keyex   +++|      CHARACTER*112 OPRAM4
00424  M01S00422.keyex   +++|*                            STRING OF USER LABELS
00425  M01S00423.keyex   +++|      CHARACTER*7  PANEL
00426  M01S00424.keyex   +++|*                            TEMPORARY PANEL NAME
00427  M01S00425.keyex   +++|      CHARACTER*7  PANEL7
00428  M01S00426.keyex   +++|*                            DISPLAY PANEL FOR 80 CHARACTERS/LINE
00429  M01S00427.keyex   +++|      CHARACTER*7  PANEL8
00430  M01S00428.keyex   +++|*                            DISPLAY PANEL FOR 132 CHARACTERS/LINE
00431  M01S00429.keyex   +++|      CHARACTER*7  SETDATA(3)
00432  M01S00430.keyex   +++|*                            TERMINAL CHARACTERISTICS
00433  M01S00431.keyex   +++|      CHARACTER*7  STR80
00434  M01S00432.keyex   +++|*                            80 CHARACTERS STRING
00435  M01S00433.keyex   +++|      CHARACTER*7  STR132
00436  M01S00434.keyex   +++|*                            132 CHARACTERS STRING
00437  M01S00435.keyex   +++|      LOGICAL      LOADED
00438  M01S00436.keyex   +++|*                            CONTROLWARE LOADED FLAG
00439  M01S00437.keyex   +++|
00440  M01S00438.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00441  M01S00439.keyex   +++|
00442  M01S00440.keyex   +++|      DATA  OPRAM4 / ' ' /
00443  M01S00441.keyex   +++|      DATA  PANEL7 / 'KEYPAN7' /
00444  M01S00442.keyex   +++|      DATA  PANEL8 / 'KEYPAN8' /
00445  M01S00443.keyex   +++|      DATA  ZDISKEY / Z"1E", Z"12", Z"4D" /
00446  M01S00444.keyex   +++|      DATA  ZENKEYB / Z"1E", Z"12", Z"4E" /
00447  M01S00445.keyex   +++|      DATA  ZHOSTLC / Z"1E", Z"12", Z"73" /
00448  M01S00446.keyex   +++|      DATA  ZMCUR80 / Z"02", Z"20", Z"23"/
00449  M01S00447.keyex   +++|      DATA  ZMCUR32 / Z"02", Z"7E", Z"20", Z"20", Z"23" /
00450  M01S00448.keyex   +++|      DATA  STR80   / '80     ' /
00451  M01S00449.keyex   +++|      DATA  STR132  / '132    ' /
00452  M01S00450.keyex   +++|      DATA  LOADED  / .FALSE. /
00453  M01S00451.keyex   +++|
00454  M01S00452.keyex   +++|12    FORMAT(A112)
00455  M01S00453.keyex   +++|13    FORMAT(' FUNCTION KEYS ARE NOT LOADED.')
00456  M01S00454.keyex   +++|14    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00457  M01S00455.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00458  M01S00456.keyex   +++|
00459  M01S00457.keyex   +++|
00460  M01S00458.keyex   +++|      CALL VERLOAD(LOADED)
00461  M01S00459.keyex   +++|
00462  M01S00460.keyex   +++|      IF (.NOT.LOADED) THEN
00463  M01S00461.keyex   +++|        CALL PACK(1, 0)
00464  M01S00462.keyex   +++|        WRITE(2,13)
00465  M01S00463.keyex   +++|      ELSE
00466  M01S00464.keyex   +++|        CALL RDSORC
00467  M01S00465.keyex   +++|        CALL PACK(1, 0)
00468  M01S00466.keyex   +++|        CALL SEQPACK(ZHOSTLC,3)
00469  M01S00467.keyex   +++|        CALL PACK(3, 1)
00470  M01S00468.keyex   +++|
00471  M01S00469.keyex   +++|* READ THE 721 LABELS FROM THE TERMINAL.
00472  M01S00470.keyex   +++|
00473  M01S00471.keyex   +++|        READ(5, 12) OPRAM4
00474  M01S00472.keyex   +++|
00475  M01S00473.keyex   +++|* DISPLAY THE LABELS USING THE CORRECT SIZE PANEL.
00476  M01S00474.keyex   +++|
00477  M01S00475.keyex   +++|        IF(SETDATA(3) .EQ. STR132) THEN
00478  M01S00476.keyex   +++|          PANEL = PANEL8
00479  M01S00477.keyex   +++|        ELSE
00480  M01S00478.keyex   +++|          PANEL = PANEL7
00481  M01S00479.keyex   +++|        ENDIF
00482  M01S00480.keyex   +++|
00483  M01S00481.keyex   +++|        CALL SFOPEN(PANEL, STAT)
00484  M01S00482.keyex   +++|        IF (STAT .NE. 0) THEN
00485  M01S00483.keyex   +++|          CALL ERR
00486  M01S00484.keyex   +++|          STOP 'SF ERROR.'
00487  M01S00485.keyex   +++|        ELSE
00488  M01S00486.keyex   +++|          CALL SFSWRI(PANEL, OPRAM4)
00489  M01S00487.keyex   +++|          CALL SFCLOS(PANEL, 2)
00490  M01S00488.keyex   +++|
00491  M01S00489.keyex   +++|* POSITION CURSOR UNDER THE DISPLAY OF LABELS.
00492  M01S00490.keyex   +++|
00493  M01S00491.keyex   +++|          CALL PACK(1, 0)
00494  M01S00492.keyex   +++|          IF(SETDATA(3) .EQ. STR80)  THEN
00495  M01S00493.keyex   +++|            CALL SEQPACK(ZMCUR80,3)
00496  M01S00494.keyex   +++|          ELSE
00497  M01S00495.keyex   +++|            CALL SEQPACK(ZMCUR32,5)
00498  M01S00496.keyex   +++|          ENDIF
00499  M01S00497.keyex   +++|
00500  M01S00498.keyex   +++|        ENDIF
00501  M01S00499.keyex   +++|
00502  M01S00500.keyex   +++|      ENDIF
00503  M01S00501.keyex   +++|      CALL SEQPACK(ZENKEYB,3)
00504  M01S00502.keyex   +++|      CALL PACK(3, 1)
00505  M01S00503.keyex   +++|      RETURN
00506  M01S00504.keyex   +++|      END
00507  M01S00505.keyex   +++|
00508  M01S00506.keyex   +++|
00509  M01S00507.keyex   +++|      SUBROUTINE EDIT
00510  M01S00508.keyex   +++|
00511  M01S00509.keyex   +++|**    EDIT - EDIT FUNCTION KEYS.
00512  M01S00510.keyex   +++|*
00513  M01S00511.keyex   +++|*     *EDIT* ALLOWS THE USER TO DEFINE AND LOAD FUNCTION KEYS
00514  M01S00512.keyex   +++|*     AND SET TERMINAL CHARACTERISTICS.
00515  M01S00513.keyex   +++|*
00516  M01S00514.keyex   +++|*     CALL EDIT
00517  M01S00515.keyex   +++|*
00518  M01S00516.keyex   +++|*     EXIT    *PARM* AND *SETDATA* MAY BE MODIFIED.
00519  M01S00517.keyex   +++|*
00520  M01S00518.keyex   +++|*     CALLS   EDSETUP, ERR, LDSETUP, LOAD, RDSORC, SFCLOS, SFGETK,
00521  M01S00519.keyex   +++|*             SFOPEN, SFSSHO, SYSKEYS, WRSORC.
00522  M01S00520.keyex   +++|*
00523  M01S00521.keyex   +++|*     MESSAGES
00524  M01S00522.keyex   +++|*             THE KEY DEFINITIONS FILE HAS BEEN REPLACED.
00525  M01S00523.keyex   +++|*
00526  M01S00524.keyex   +++|*             FUNCTION KEYS HAVE BEEN LOADED.
00527  M01S00525.keyex   +++|
00528  M01S00526.keyex   +++|      IMPLICIT INTEGER (A - Z)
00529  M01S00527.keyex   +++|
00530  M01S00528.keyex   +++|      PARAMETER    (ORDHELP = 3)
00531  M01S00529.keyex   +++|*                            ORDINAL FOR THE HELP KEY
00532  M01S00530.keyex   +++|      PARAMETER    (ORDBKW = 8)
00533  M01S00531.keyex   +++|*                            ORDINAL FOR THE BKW FUNCTION KEY
00534  M01S00532.keyex   +++|      PARAMETER    (ORDFWD = 7)
00535  M01S00533.keyex   +++|*                            ORDINAL FOR THE FWD FUNCTION KEY
00536  M01S00534.keyex   +++|      PARAMETER    (ORDSTOP = 4)
00537  M01S00535.keyex   +++|*                            ORDINAL FOR THE STOP FUNCTION KEY
00538  M01S00536.keyex   +++|      PARAMETER    (NKEYS = 45)
00539  M01S00537.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00540  M01S00538.keyex   +++|      PARAMETER    (NPAN = 3)
00541  M01S00539.keyex   +++|*                            NUMBER OF EDIT PANELS
00542  M01S00540.keyex   +++|      PARAMETER    (NKEYSPP = 15)
00543  M01S00541.keyex   +++|*                            NUMBER OF KEYS DEFINABLE PER PANEL
00544  M01S00542.keyex   +++|
00545  M01S00543.keyex   +++|      DIMENSION    BASE(NPAN)
00546  M01S00544.keyex   +++|*                            FUNCTION KEYS DIVIDED IN THREE GROUPS
00547  M01S00545.keyex   +++|      CHARACTER*1  PAGE(NPAN)
00548  M01S00546.keyex   +++|*                            PAGE NUMBER OF PANEL
00549  M01S00547.keyex   +++|      CHARACTER*7  FILENM
00550  M01S00548.keyex   +++|*                            FILE NAME
00551  M01S00549.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00552  M01S00550.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00553  M01S00551.keyex   +++|      CHARACTER*5  LABELS(NPAN, NKEYSPP)
00554  M01S00552.keyex   +++|*                            FUNCTION KEY LABELS
00555  M01S00553.keyex   +++|      CHARACTER*7  P1
00556  M01S00554.keyex   +++|*                            BASIC INPUT PANEL
00557  M01S00555.keyex   +++|      CHARACTER*7  P2
00558  M01S00556.keyex   +++|*                            HELP PANEL
00559  M01S00557.keyex   +++|      CHARACTER*7  P3
00560  M01S00558.keyex   +++|*                            ASCII-HEX PANEL
00561  M01S00559.keyex   +++|      CHARACTER*1081 P1IVAR
00562  M01S00560.keyex   +++|*                            INPUT STRING FROM THE PANEL
00563  M01S00561.keyex   +++|      CHARACTER*1081 P1OVAR
00564  M01S00562.keyex   +++|*                            OUTPUT STRING FOR THE PANEL
00565  M01S00563.keyex   +++|      CHARACTER*72 P1I(NKEYSPP)
00566  M01S00564.keyex   +++|*                            INPUT STRING FROM THE PANEL
00567  M01S00565.keyex   +++|      CHARACTER*72 P1O(NKEYSPP)
00568  M01S00566.keyex   +++|*                            OUTPUT STRING FOR THE PANEL
00569  M01S00567.keyex   +++|      CHARACTER*1  P2VAR
00570  M01S00568.keyex   +++|*                            BLANK OUTPUT STRING
00571  M01S00569.keyex   +++|      CHARACTER*7  SETDATA(3)
00572  M01S00570.keyex   +++|*                            SETUP DATA.
00573  M01S00571.keyex   +++|      INTEGER      ORDINAL
00574  M01S00572.keyex   +++|*                            FUNCTION KEY VALUE
00575  M01S00573.keyex   +++|      INTEGER      TYPE
00576  M01S00574.keyex   +++|*                            TYPE OF FUNCTION KEY
00577  M01S00575.keyex   +++|*                            0 = PROGRAMMABLE FUNCTION KEY
00578  M01S00576.keyex   +++|*                            1 = LABELED FUNCTION KEY
00579  M01S00577.keyex   +++|
00580  M01S00578.keyex   +++|      EQUIVALENCE (P1I(1), P1IVAR(2:2))
00581  M01S00579.keyex   +++|      EQUIVALENCE (P1O(1), P1OVAR(2:2))
00582  M01S00580.keyex   +++|
00583  M01S00581.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00584  M01S00582.keyex   +++|
00585  M01S00583.keyex   +++|      DATA  PAGE / '1', '2', '3' /
00586  M01S00584.keyex   +++|      DATA  P1 / 'KEYPAN4' /
00587  M01S00585.keyex   +++|      DATA  P2 / 'KEYPAN3' /
00588  M01S00586.keyex   +++|      DATA  P3 / 'KEYPAN6' /
00589  M01S00587.keyex   +++|      DATA  BASE / 0, 15, 30 /
00590  M01S00588.keyex   +++|      DATA  P1I / 15* ' ' /
00591  M01S00589.keyex   +++|      DATA  P1O / 15* ' ' /
00592  M01S00590.keyex   +++|      DATA  P2VAR / ' ' /
00593  M01S00591.keyex   +++|      DATA  (LABELS(1, I), I = 1, NKEYSPP) /
00594  M01S00592.keyex   +++|     .  'F1   ', 'F2   ', 'F3   ', 'F4    ', 'F5    '
00595  M01S00593.keyex   +++|     ., 'F6   ', 'F7   ', 'F8   ', 'F9    ', 'F10   '
00596  M01S00594.keyex   +++|     ., 'F11  ', 'F12  ', 'F13  ', 'F14   ', 'F15   '
00597  M01S00595.keyex   +++|     ./
00598  M01S00596.keyex   +++|      DATA  (LABELS(2, I), I = 1, NKEYSPP) /
00599  M01S00597.keyex   +++|     .  'RTAB ', 'LTAB ', 'NEXT ', 'DOWN  ', 'UP    '
00600  M01S00598.keyex   +++|     ., 'FWD  ', 'BKW  ', 'HELP ', 'ERASE ', 'EDIT  '
00601  M01S00599.keyex   +++|     ., 'BACK ', 'LAB  ', 'DATA ', 'STOP  ', 'INSRT '
00602  M01S00600.keyex   +++|     ./
00603  M01S00601.keyex   +++|      DATA  (LABELS(3, I), I = 1, NKEYSPP) /
00604  M01S00602.keyex   +++|     .  'DLETE', 'CLEAR', 'PRINT', 'PAD 1 ', 'PAD 2 '
00605  M01S00603.keyex   +++|     ., 'PAD 3', 'PAD 4', 'PAD 5', 'PAD 6 ', 'PAD 7 '
00606  M01S00604.keyex   +++|     ., 'PAD 8', 'PAD 9', 'PAD 0', 'PAD , ', 'PAD . '
00607  M01S00605.keyex   +++|     ./
00608  M01S00606.keyex   +++|
00609  M01S00607.keyex   +++|11    FORMAT(' THE KEY DEFINITIONS FILE HAS BEEN REPLACED.')
00610  M01S00608.keyex   +++|12    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00611  M01S00609.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00612  M01S00610.keyex   +++|
00613  M01S00611.keyex   +++|
00614  M01S00612.keyex   +++|* READ USER DEFINITIONS FROM SOURCE FILE, IF ANY.
00615  M01S00613.keyex   +++|
00616  M01S00614.keyex   +++|      CALL RDSORC
00617  M01S00615.keyex   +++|
00618  M01S00616.keyex   +++|      CALL SFOPEN(P1, STAT)
00619  M01S00617.keyex   +++|      IF (STAT .NE. 0) THEN
00620  M01S00618.keyex   +++|        CALL ERR
00621  M01S00619.keyex   +++|        STOP 'SF ERROR.'
00622  M01S00620.keyex   +++|      ENDIF
00623  M01S00621.keyex   +++|
00624  M01S00622.keyex   +++|100   PANEL = 1
00625  M01S00623.keyex   +++|
00626  M01S00624.keyex   +++|* LOAD THE OUTPUT STRING VARIABLE FOR THE PANEL.  THE OUTPUT STRING
00627  M01S00625.keyex   +++|* IS COMPRISED OF THE KEY NAME, LABEL, AND DEFINITION.
00628  M01S00626.keyex   +++|
00629  M01S00627.keyex   +++|110   P1OVAR(1:1) = PAGE(PANEL)
00630  M01S00628.keyex   +++|
00631  M01S00629.keyex   +++|      DO 120 I = 1, NKEYSPP
00632  M01S00630.keyex   +++|        P1O(I)(01:05) = LABELS(PANEL, I)
00633  M01S00631.keyex   +++|        P1O(I)(06:12) = KEYS(BASE(PANEL) + I)(1:07)
00634  M01S00632.keyex   +++|        P1O(I)(13:72) = KEYS(BASE(PANEL) + I)(8:67)
00635  M01S00633.keyex   +++|120   CONTINUE
00636  M01S00634.keyex   +++|
00637  M01S00635.keyex   +++|* SHOW KEY DEFINITION PANEL.
00638  M01S00636.keyex   +++|
00639  M01S00637.keyex   +++|      CALL SFSSHO(P1, P1OVAR, P1IVAR)
00640  M01S00638.keyex   +++|
00641  M01S00639.keyex   +++|      DO 130 I = 1, NKEYSPP
00642  M01S00640.keyex   +++|        KEYS(BASE(PANEL) + I)(1:07) = P1I(I)(06:12)
00643  M01S00641.keyex   +++|        KEYS(BASE(PANEL) + I)(8:67) = P1I(I)(13:72)
00644  M01S00642.keyex   +++|130   CONTINUE
00645  M01S00643.keyex   +++|
00646  M01S00644.keyex   +++|* CHECK FOR THE LABELED KEYS *FWD*, *BKW*, AND *HELP*, IGNORING OTHERS.
00647  M01S00645.keyex   +++|
00648  M01S00646.keyex   +++|      CALL SFGETK(TYPE, ORDINAL)
00649  M01S00647.keyex   +++|      IF(TYPE    .EQ. 0) GOTO 140
00650  M01S00648.keyex   +++|      IF(ORDINAL .EQ. ORDFWD) GOTO 150
00651  M01S00649.keyex   +++|      IF(ORDINAL .EQ. ORDBKW) GOTO 160
00652  M01S00650.keyex   +++|      IF(ORDINAL .EQ. ORDHELP) GOTO 190
00653  M01S00651.keyex   +++|      IF (ORDINAL .EQ. ORDSTOP) GOTO 200
00654  M01S00652.keyex   +++|      GOTO 110
00655  M01S00653.keyex   +++|
00656  M01S00654.keyex   +++|* CHECK FOR  APPLICATION KEYS F1, F2, F3, F4, F5, F6, F7, F8, F9.
00657  M01S00655.keyex   +++|
00658  M01S00656.keyex   +++|140   GOTO (150,160,170,180,190,200,210,220,230) ORDINAL
00659  M01S00657.keyex   +++|      GOTO 110
00660  M01S00658.keyex   +++|
00661  M01S00659.keyex   +++|* F1 KEY:  FWD TO NEXT PANEL.
00662  M01S00660.keyex   +++|
00663  M01S00661.keyex   +++|150   PANEL = PANEL + 1
00664  M01S00662.keyex   +++|      IF (PANEL .EQ. NPAN+1) PANEL = 1
00665  M01S00663.keyex   +++|      GOTO 110
00666  M01S00664.keyex   +++|
00667  M01S00665.keyex   +++|* F2 KEY:  BKW TO LAST PANEL.
00668  M01S00666.keyex   +++|
00669  M01S00667.keyex   +++|160   PANEL = PANEL - 1
00670  M01S00668.keyex   +++|      IF (PANEL .LT. 1) PANEL = 3
00671  M01S00669.keyex   +++|      GOTO 110
00672  M01S00670.keyex   +++|
00673  M01S00671.keyex   +++|* F3 KEY: UNDO ALL CHANGES AND RESTART.
00674  M01S00672.keyex   +++|* REINITIALIZE *KEYS* AND *SETDATA*, AND GET USER DEFINITIONS IF ANY.
00675  M01S00673.keyex   +++|
00676  M01S00674.keyex   +++|170   CALL SYSKEYS
00677  M01S00675.keyex   +++|      CALL RDSORC
00678  M01S00676.keyex   +++|      GOTO 100
00679  M01S00677.keyex   +++|
00680  M01S00678.keyex   +++|* F4 KEY:  LOAD.
00681  M01S00679.keyex   +++|
00682  M01S00680.keyex   +++|180   CALL SFCLOS(P1, 1)
00683  M01S00681.keyex   +++|      CALL WRSORC
00684  M01S00682.keyex   +++|      CALL LOAD
00685  M01S00683.keyex   +++|      RETURN
00686  M01S00684.keyex   +++|
00687  M01S00685.keyex   +++|* F5 KEY:  SHOW HELP PANELS.
00688  M01S00686.keyex   +++|
00689  M01S00687.keyex   +++|190   CALL SFOPEN(P2,STAT)
00690  M01S00688.keyex   +++|      IF (STAT .NE. 0) THEN
00691  M01S00689.keyex   +++|        CALL ERR
00692  M01S00690.keyex   +++|        STOP 'SF ERROR.'
00693  M01S00691.keyex   +++|      ENDIF
00694  M01S00692.keyex   +++|      CALL SFSSHO(P2,P2VAR,P2VAR)
00695  M01S00693.keyex   +++|      CALL SFGETK(TYPE, ORDINAL)
00696  M01S00694.keyex   +++|      CALL SFCLOS(P2,0)
00697  M01S00695.keyex   +++|      IF ((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDSTOP)) GOTO 200
00698  M01S00696.keyex   +++|      GOTO 110
00699  M01S00697.keyex   +++|
00700  M01S00698.keyex   +++|* F6 KEY:  QUIT.
00701  M01S00699.keyex   +++|
00702  M01S00700.keyex   +++|200   CALL SFCLOS(P1,1)
00703  M01S00701.keyex   +++|      RETURN
00704  M01S00702.keyex   +++|
00705  M01S00703.keyex   +++|* F7 KEY:  QUIT AND REPLACE FILE.
00706  M01S00704.keyex   +++|
00707  M01S00705.keyex   +++|210   CALL SFCLOS(P1,1)
00708  M01S00706.keyex   +++|      CALL WRSORC
00709  M01S00707.keyex   +++|      CALL LDSETUP
00710  M01S00708.keyex   +++|      WRITE(2,11)
00711  M01S00709.keyex   +++|      RETURN
00712  M01S00710.keyex   +++|
00713  M01S00711.keyex   +++|* F8 KEY:  DISPLAY ASCII-HEX CHART.
00714  M01S00712.keyex   +++|
00715  M01S00713.keyex   +++|220   CALL SFOPEN(P3,STAT)
00716  M01S00714.keyex   +++|      IF (STAT .NE. 0) THEN
00717  M01S00715.keyex   +++|        CALL ERR
00718  M01S00716.keyex   +++|        STOP 'SF ERROR.'
00719  M01S00717.keyex   +++|      ENDIF
00720  M01S00718.keyex   +++|      CALL SFSREA(P3,P2VAR)
00721  M01S00719.keyex   +++|      CALL SFCLOS(P3,0)
00722  M01S00720.keyex   +++|      GOTO 110
00723  M01S00721.keyex   +++|
00724  M01S00722.keyex   +++|* F9 KEY:  SET UP TERMINAL CHARACTERISTICS.
00725  M01S00723.keyex   +++|
00726  M01S00724.keyex   +++|230   CALL EDSETUP
00727  M01S00725.keyex   +++|      GOTO 110
00728  M01S00726.keyex   +++|
00729  M01S00727.keyex   +++|      END
00730  M01S00728.keyex   +++|
00731  M01S00729.keyex   +++|
00732  M01S00730.keyex   +++|      SUBROUTINE EDSETUP
00733  M01S00731.keyex   +++|
00734  M01S00732.keyex   +++|**    EDSETUP - EDIT THE SETUP TERMINAL CHARACTERISTICS.
00735  M01S00733.keyex   +++|*
00736  M01S00734.keyex   +++|*     *EDSETUP* IS CALLED BY *EDIT* AND ALLOWS THE USER TO SET UP THE
00737  M01S00735.keyex   +++|*     TERMINAL CHARACTERISTICS FOR THE NUMBER PAD, SCREEN MODE, AND THE
00738  M01S00736.keyex   +++|*     NUMBER OF CHARACTERS PER LINE.
00739  M01S00737.keyex   +++|*
00740  M01S00738.keyex   +++|*     CALL EDSETUP
00741  M01S00739.keyex   +++|*
00742  M01S00740.keyex   +++|*     CALLS   SFCLOS, SFGETK, SFOPEN, SFSSHO.
00743  M01S00741.keyex   +++|
00744  M01S00742.keyex   +++|
00745  M01S00743.keyex   +++|      IMPLICIT INTEGER (A - Z)
00746  M01S00744.keyex   +++|
00747  M01S00745.keyex   +++|      PARAMETER    (NKEYS = 45)
00748  M01S00746.keyex   +++|*                            NUMBER OF DEFINABLE KEYS
00749  M01S00747.keyex   +++|      PARAMETER    (ORDFWD = 7)
00750  M01S00748.keyex   +++|*                            ORDINAL FOR THE FWD KEY
00751  M01S00749.keyex   +++|      PARAMETER    (ORDBKW = 1)
00752  M01S00750.keyex   +++|*                            ORDINAL FOR THE BKW KEY
00753  M01S00751.keyex   +++|      PARAMETER    (ORDSTOP = 4)
00754  M01S00752.keyex   +++|*                            ORDINAL FOR THE STOP KEY
00755  M01S00753.keyex   +++|
00756  M01S00754.keyex   +++|      CHARACTER*7  FILENM
00757  M01S00755.keyex   +++|*                            KEY DEFINITIONS FILE
00758  M01S00756.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00759  M01S00757.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00760  M01S00758.keyex   +++|      CHARACTER*7  PANEL4
00761  M01S00759.keyex   +++|*                            DISPLAY PANEL FOR *EDIT*
00762  M01S00760.keyex   +++|      CHARACTER*7  PANEL5
00763  M01S00761.keyex   +++|*                            DISPLAY PANEL FOR SETUP
00764  M01S00762.keyex   +++|      CHARACTER*7  SETDATA(3)
00765  M01S00763.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
00766  M01S00764.keyex   +++|      CHARACTER*7  STRDEF
00767  M01S00765.keyex   +++|*                            DEFAULT STRING
00768  M01S00766.keyex   +++|      CHARACTER*21 PANELIO
00769  M01S00767.keyex   +++|*                            INPUT/OUTPUT STRING FROM THE PANEL
00770  M01S00768.keyex   +++|      CHARACTER*21 TEMPSTR
00771  M01S00769.keyex   +++|*                            TEMPORARY TERMINAL CHARACTERISTICS
00772  M01S00770.keyex   +++|      INTEGER      ORDINAL
00773  M01S00771.keyex   +++|*                            FUNCTION KEY VALUE
00774  M01S00772.keyex   +++|      INTEGER      TYPE
00775  M01S00773.keyex   +++|*                            TYPE OF FUNCTION KEY
00776  M01S00774.keyex   +++|*                            0 = PROGRAMMABLE FUNCTION KEY
00777  M01S00775.keyex   +++|*                            1 = LABELED FUNCTION KEY
00778  M01S00776.keyex   +++|
00779  M01S00777.keyex   +++|      EQUIVALENCE (SETDATA(1), TEMPSTR(1:1))
00780  M01S00778.keyex   +++|
00781  M01S00779.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00782  M01S00780.keyex   +++|
00783  M01S00781.keyex   +++|      DATA  PANEL5 / 'KEYPAN5' /
00784  M01S00782.keyex   +++|      DATA  PANEL4 / 'KEYPAN4' /
00785  M01S00783.keyex   +++|      DATA  STRDEF / 'DEFAULT' /
00786  M01S00784.keyex   +++|
00787  M01S00785.keyex   +++|
00788  M01S00786.keyex   +++|* CLOSE CURRENT *EDIT* PANEL.
00789  M01S00787.keyex   +++|
00790  M01S00788.keyex   +++|      CALL SFCLOS(PANEL4,0)
00791  M01S00789.keyex   +++|
00792  M01S00790.keyex   +++|* SHOW KEY DEFINITION PANEL.
00793  M01S00791.keyex   +++|
00794  M01S00792.keyex   +++|      CALL SFOPEN(PANEL5, STAT)
00795  M01S00793.keyex   +++|      IF (STAT .NE. 0) THEN
00796  M01S00794.keyex   +++|        CALL ERR
00797  M01S00795.keyex   +++|        STOP 'SF ERROR.'
00798  M01S00796.keyex   +++|      ENDIF
00799  M01S00797.keyex   +++|      PANELIO = STRDEF // STRDEF // STRDEF
00800  M01S00798.keyex   +++|      CALL SFSSHO(PANEL5, PANELIO, PANELIO)
00801  M01S00799.keyex   +++|      CALL SFGETK(TYPE, ORDINAL)
00802  M01S00800.keyex   +++|      CALL SFCLOS(PANEL5, 0)
00803  M01S00801.keyex   +++|
00804  M01S00802.keyex   +++|      IF (.NOT.((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDSTOP))) THEN
00805  M01S00803.keyex   +++|        CALL WRSORC
00806  M01S00804.keyex   +++|        TEMPSTR = PANELIO
00807  M01S00805.keyex   +++|      ENDIF
00808  M01S00806.keyex   +++|
00809  M01S00807.keyex   +++|      CALL SFOPEN(PANEL4, STAT)
00810  M01S00808.keyex   +++|      IF (STAT .NE. 0) THEN
00811  M01S00809.keyex   +++|        CALL ERR
00812  M01S00810.keyex   +++|        STOP 'SF ERROR.'
00813  M01S00811.keyex   +++|      ENDIF
00814  M01S00812.keyex   +++|      RETURN
00815  M01S00813.keyex   +++|      END
00816  M01S00814.keyex   +++|
00817  M01S00815.keyex   +++|
00818  M01S00816.keyex   +++|      SUBROUTINE RDSORC
00819  M01S00817.keyex   +++|
00820  M01S00818.keyex   +++|**    RDSORC - READ KEY DEFINITIONS FROM THE SOURCE FILE.
00821  M01S00819.keyex   +++|*
00822  M01S00820.keyex   +++|*     *RDSORC* READS THE KEY DEFINITIONS FROM THE DEFINITION
00823  M01S00821.keyex   +++|*     SOURCE FILE.
00824  M01S00822.keyex   +++|*
00825  M01S00823.keyex   +++|*     CALL RDSORC
00826  M01S00824.keyex   +++|*
00827  M01S00825.keyex   +++|*     USES    KEYS, SETDATA.
00828  M01S00826.keyex   +++|*
00829  M01S00827.keyex   +++|*     CALLS   PF.
00830  M01S00828.keyex   +++|
00831  M01S00829.keyex   +++|
00832  M01S00830.keyex   +++|      IMPLICIT INTEGER (A - Z)
00833  M01S00831.keyex   +++|
00834  M01S00832.keyex   +++|      PARAMETER     (NKEYS = 45)
00835  M01S00833.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00836  M01S00834.keyex   +++|
00837  M01S00835.keyex   +++|      CHARACTER*7   FILENM
00838  M01S00836.keyex   +++|*                            KEY DEFINITIONS FILE
00839  M01S00837.keyex   +++|      CHARACTER*60  KEYDEF
00840  M01S00838.keyex   +++|*                            FUNCTION KEY DEFINITION
00841  M01S00839.keyex   +++|      CHARACTER*67  KEYS(NKEYS)
00842  M01S00840.keyex   +++|*                            LABEL AND KEYDEF
00843  M01S00841.keyex   +++|      CHARACTER*7   LABEL
00844  M01S00842.keyex   +++|*                            FUNCTION KEY LABEL
00845  M01S00843.keyex   +++|      CHARACTER*7   SETDATA(3)
00846  M01S00844.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
00847  M01S00845.keyex   +++|
00848  M01S00846.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00849  M01S00847.keyex   +++|
00850  M01S00848.keyex   +++|10    FORMAT(A7, 1X, A60)
00851  M01S00849.keyex   +++|20    FORMAT(A7)
00852  M01S00850.keyex   +++|
00853  M01S00851.keyex   +++|* READ USER KEY DEFINITION FILE, IF ANY.
00854  M01S00852.keyex   +++|
00855  M01S00853.keyex   +++|      CALL PF('GET', 'TAPE1', FILENM, 'NA', IGNORE)
00856  M01S00854.keyex   +++|
00857  M01S00855.keyex   +++|* SOURCE FILE CONSISTS OF FUNCTION KEY LABELS,
00858  M01S00856.keyex   +++|* KEY DEFINITIONS, AND THE TERMINAL'S SETUP DATA.
00859  M01S00857.keyex   +++|
00860  M01S00858.keyex   +++|      DO 110 I = 1, NKEYS
00861  M01S00859.keyex   +++|        READ(1,  10, END=130) LABEL, KEYDEF
00862  M01S00860.keyex   +++|        IF(KEYDEF .NE. ' ') THEN
00863  M01S00861.keyex   +++|          KEYS(I)(1:07) = LABEL
00864  M01S00862.keyex   +++|          KEYS(I)(8:67) = KEYDEF
00865  M01S00863.keyex   +++|        ENDIF
00866  M01S00864.keyex   +++|110   CONTINUE
00867  M01S00865.keyex   +++|
00868  M01S00866.keyex   +++|      DO 120 I = 1, 3
00869  M01S00867.keyex   +++|        READ(1, 20, END=130) SETDATA(I)
00870  M01S00868.keyex   +++|120   CONTINUE
00871  M01S00869.keyex   +++|
00872  M01S00870.keyex   +++|130   REWIND 1
00873  M01S00871.keyex   +++|      RETURN
00874  M01S00872.keyex   +++|      END
00875  M01S00873.keyex   +++|
00876  M01S00874.keyex   +++|
00877  M01S00875.keyex   +++|
00878  M01S00876.keyex   +++|      SUBROUTINE HELP
00879  M01S00877.keyex   +++|
00880  M01S00878.keyex   +++|**    HELP - PROVIDE HELP INFORMATION FOR THE *KEY* UTILITY.
00881  M01S00879.keyex   +++|*
00882  M01S00880.keyex   +++|*     *HELP* GIVES THE USER INFORMATION ON THE *KEY* UTILITY,
00883  M01S00881.keyex   +++|*     USING SCREEN FORMATTING DISPLAY PANELS.
00884  M01S00882.keyex   +++|*
00885  M01S00883.keyex   +++|*     CALL HELP
00886  M01S00884.keyex   +++|*
00887  M01S00885.keyex   +++|*     CALLS   ERR, SFCLOS, SFOPEN, SFSSHO.
00888  M01S00886.keyex   +++|*
00889  M01S00887.keyex   +++|*     MESSAGES
00890  M01S00888.keyex   +++|*             PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.
00891  M01S00889.keyex   +++|*             AND RE-ENTER THE KEY COMMAND.
00892  M01S00890.keyex   +++|*             STOP.  FIX ERROR.
00893  M01S00891.keyex   +++|
00894  M01S00892.keyex   +++|
00895  M01S00893.keyex   +++|      IMPLICIT INTEGER (A - Z)
00896  M01S00894.keyex   +++|
00897  M01S00895.keyex   +++|      PARAMETER   (ORDBKW = 8)
00898  M01S00896.keyex   +++|*                            ORDINAL FOR THE BKW KEY
00899  M01S00897.keyex   +++|      PARAMETER   (ORDSTOP = 4)
00900  M01S00898.keyex   +++|*                            ORDINAL FOR THE STOP KEY
00901  M01S00899.keyex   +++|
00902  M01S00900.keyex   +++|      CHARACTER*7 PANEL1
00903  M01S00901.keyex   +++|*                            FIRST HELP PANEL
00904  M01S00902.keyex   +++|      CHARACTER*7 PANEL2
00905  M01S00903.keyex   +++|*                            SECOND HELP PANEL
00906  M01S00904.keyex   +++|      CHARACTER*1 PANELIO
00907  M01S00905.keyex   +++|*                            OUTPUT STRING FOR THE PANEL
00908  M01S00906.keyex   +++|      INTEGER     ORDINAL
00909  M01S00907.keyex   +++|*                            SCREEN FORMATTING KEY ORDINAL
00910  M01S00908.keyex   +++|      INTEGER     STAT
00911  M01S00909.keyex   +++|*                            *SFOPEN* RETURN STATUS
00912  M01S00910.keyex   +++|      INTEGER     TYPE
00913  M01S00911.keyex   +++|*                            SCREEN FORMATTING KEY TYPE
00914  M01S00912.keyex   +++|
00915  M01S00913.keyex   +++|      DATA  PANEL1 / 'KEYPAN1' /
00916  M01S00914.keyex   +++|      DATA  PANEL2 / 'KEYPAN2' /
00917  M01S00915.keyex   +++|
00918  M01S00916.keyex   +++|10    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00919  M01S00917.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00920  M01S00918.keyex   +++|
00921  M01S00919.keyex   +++|
00922  M01S00920.keyex   +++|* SHOW HELP PANELS.
00923  M01S00921.keyex   +++|
00924  M01S00922.keyex   +++| 100  CALL SFOPEN(PANEL1, STAT)
00925  M01S00923.keyex   +++|      IF (STAT .NE. 0) THEN
00926  M01S00924.keyex   +++|        WRITE(2,10)
00927  M01S00925.keyex   +++|        CALL ERR
00928  M01S00926.keyex   +++|        STOP 'SF ERROR.'
00929  M01S00927.keyex   +++|      ENDIF
00930  M01S00928.keyex   +++|      CALL SFSSHO(PANEL1, PANELIO,PANELIO)
00931  M01S00929.keyex   +++|      CALL SFGETK(TYPE,ORDINAL)
00932  M01S00930.keyex   +++|      CALL SFCLOS(PANEL1, 0)
00933  M01S00931.keyex   +++|      IF ((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDSTOP)) RETURN
00934  M01S00932.keyex   +++|      CALL SFOPEN(PANEL2, STAT)
00935  M01S00933.keyex   +++|      IF (STAT .NE. 0) THEN
00936  M01S00934.keyex   +++|        WRITE(2,10)
00937  M01S00935.keyex   +++|        CALL ERR
00938  M01S00936.keyex   +++|        STOP 'SF ERROR.'
00939  M01S00937.keyex   +++|      ENDIF
00940  M01S00938.keyex   +++|      CALL SFSSHO(PANEL2, PANELIO,PANELIO)
00941  M01S00939.keyex   +++|      CALL SFCLOS(PANEL2, 1)
00942  M01S00940.keyex   +++|      CALL SFGETK(TYPE,ORDINAL)
00943  M01S00941.keyex   +++|      CALL SFCLOS(PANEL2, 0)
00944  M01S00942.keyex   +++|      IF ((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDBKW)) GOTO 100
00945  M01S00943.keyex   +++|      RETURN
00946  M01S00944.keyex   +++|      END
00947  M01S00945.keyex   +++|
00948  M01S00946.keyex   +++|
00949  M01S00947.keyex   +++|      SUBROUTINE LDSETUP
00950  M01S00948.keyex   +++|
00951  M01S00949.keyex   +++|**    LDSETUP - SET UP TERMINAL CHARACTERISTICS.
00952  M01S00950.keyex   +++|*
00953  M01S00951.keyex   +++|*     *LDSETUP* SETS THE TERMINAL CHARACTERISTICS FOR THE NUMBER PAD,
00954  M01S00952.keyex   +++|*     SCREEN MODE, AND THE NUMBER OF CHARACTERS PER LINE.
00955  M01S00953.keyex   +++|*
00956  M01S00954.keyex   +++|*     CALL LDSETUP
00957  M01S00955.keyex   +++|*
00958  M01S00956.keyex   +++|*     CALLS   PACK, SEQPACK.
00959  M01S00957.keyex   +++|*
00960  M01S00958.keyex   +++|*     NOTE    *RDSORC* MUST BE CALLED BEFORE THIS CODE IS PROCESSED TO
00961  M01S00959.keyex   +++|*             ENSURE THAT THE PROPER TERMINAL DEFINITIONS ARE LOADED.
00962  M01S00960.keyex   +++|
00963  M01S00961.keyex   +++|
00964  M01S00962.keyex   +++|      IMPLICIT INTEGER (A - Z)
00965  M01S00963.keyex   +++|
00966  M01S00964.keyex   +++|      PARAMETER  (KEYL = 45)
00967  M01S00965.keyex   +++|*                            NUMBER OF PROGRAMMABLE FUNCTION KEYS
00968  M01S00966.keyex   +++|
00969  M01S00967.keyex   +++|      BOOLEAN ZCARRET
00970  M01S00968.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
00971  M01S00969.keyex   +++|      BOOLEAN ZNUMCHR(3)
00972  M01S00970.keyex   +++|*                            HEX SEQUENCE FOR CHARACTERS PER LINE
00973  M01S00971.keyex   +++|      BOOLEAN ZNUMPAD(3)
00974  M01S00972.keyex   +++|*                            HEX SEQUENCE FOR NUMBER PAD CONDITION
00975  M01S00973.keyex   +++|      BOOLEAN ZOFFSET
00976  M01S00974.keyex   +++|*                            HEX CODE FOR ADDRESS OFFSET
00977  M01S00975.keyex   +++|      BOOLEAN ZMODE
00978  M01S00976.keyex   +++|*                            HEX CODE FOR SCREEN MODE
00979  M01S00977.keyex   +++|      BOOLEAN ZROLL
00980  M01S00978.keyex   +++|*                            HEX CODE FOR ROLL PAGE MODE
00981  M01S00979.keyex   +++|      BOOLEAN ZSHIFT
00982  M01S00980.keyex   +++|*                            HEX CODE FOR SHIFTED NUMERIC PAD CODE
00983  M01S00981.keyex   +++|      BOOLEAN Z132
00984  M01S00982.keyex   +++|*                            HEX CODE FOR 132 CHARACTERS PER LINE
00985  M01S00983.keyex   +++|      CHARACTER*7    FILENM
00986  M01S00984.keyex   +++|*                            FILE NAME OF KEY DEFINITIONS
00987  M01S00985.keyex   +++|      CHARACTER*67   KEYS(KEYL)
00988  M01S00986.keyex   +++|*                            FUNCTION KEY DEFINTIONS
00989  M01S00987.keyex   +++|      CHARACTER*7    SETDATA(3)
00990  M01S00988.keyex   +++|*                            TERMINAL SETUP DATA
00991  M01S00989.keyex   +++|      CHARACTER*7    STRDEF
00992  M01S00990.keyex   +++|*                            DEFAULT STRING
00993  M01S00991.keyex   +++|      CHARACTER*7    STRROL
00994  M01S00992.keyex   +++|*                            ROLL STRING
00995  M01S00993.keyex   +++|      CHARACTER*7    STRSHI
00996  M01S00994.keyex   +++|*                            SHIFTED STRING
00997  M01S00995.keyex   +++|      CHARACTER*7    STR132
00998  M01S00996.keyex   +++|*                            132 STRING
00999  M01S00997.keyex   +++|      LOGICAL        DEFNCHR
01000  M01S00998.keyex   +++|*                            DEFAULT NUMBER OF CHARACTERS PER LINE
01001  M01S00999.keyex   +++|      LOGICAL        DEFNPAD
01002  M01S01000.keyex   +++|*                            DEFAULT NUMERIC PAD SETTING
01003  M01S01001.keyex   +++|      LOGICAL        DEFPAGE
01004  M01S01002.keyex   +++|*                            DEFAULT PAGINATION SETTING
01005  M01S01003.keyex   +++|
01006  M01S01004.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01007  M01S01005.keyex   +++|
01008  M01S01006.keyex   +++|      DATA    ZCARRET  / Z"0D" /
01009  M01S01007.keyex   +++|      DATA    ZNUMCHR  / Z"1E", Z"12", Z"48" /
01010  M01S01008.keyex   +++|      DATA    ZNUMPAD  / Z"1E", Z"12", Z"6C" /
01011  M01S01009.keyex   +++|      DATA    ZOFFSET  / Z"800" /
01012  M01S01010.keyex   +++|      DATA    ZMODE    / Z"16" /
01013  M01S01011.keyex   +++|      DATA    ZROLL    / Z"12" /
01014  M01S01012.keyex   +++|      DATA    ZSHIFT   / Z"6B" /
01015  M01S01013.keyex   +++|      DATA    Z132     / Z"47" /
01016  M01S01014.keyex   +++|      DATA    STRDEF   / 'DEFAULT' /
01017  M01S01015.keyex   +++|      DATA    STRROL   / 'ROLL   ' /
01018  M01S01016.keyex   +++|      DATA    STRSHI   / 'SHIFTED' /
01019  M01S01017.keyex   +++|      DATA    STR132   / '132    ' /
01020  M01S01018.keyex   +++|      DATA    DEFNCHR  / .TRUE. /
01021  M01S01019.keyex   +++|      DATA    DEFNPAD  / .TRUE. /
01022  M01S01020.keyex   +++|      DATA    DEFPAGE  / .TRUE. /
01023  M01S01021.keyex   +++|
01024  M01S01022.keyex   +++|      IF(SETDATA(1).NE. STRDEF) DEFNPAD = .FALSE.
01025  M01S01023.keyex   +++|      IF(SETDATA(2).NE. STRDEF) DEFPAGE = .FALSE.
01026  M01S01024.keyex   +++|      IF(SETDATA(3).NE. STRDEF) DEFNCHR = .FALSE.
01027  M01S01025.keyex   +++|
01028  M01S01026.keyex   +++|      IF (.NOT.(DEFNPAD .AND. DEFPAGE .AND. DEFNCHR)) THEN
01029  M01S01027.keyex   +++|        CALL PACK(1, 0)
01030  M01S01028.keyex   +++|      ELSE
01031  M01S01029.keyex   +++|        RETURN
01032  M01S01030.keyex   +++|      ENDIF
01033  M01S01031.keyex   +++|
01034  M01S01032.keyex   +++|      IF (.NOT.DEFNPAD) THEN
01035  M01S01033.keyex   +++|        IF(SETDATA(1) .EQ. STRSHI) ZNUMPAD(3) = ZSHIFT
01036  M01S01034.keyex   +++|        CALL SEQPACK(ZNUMPAD, 3)
01037  M01S01035.keyex   +++|      ENDIF
01038  M01S01036.keyex   +++|
01039  M01S01037.keyex   +++|      IF (.NOT.DEFPAGE) THEN
01040  M01S01038.keyex   +++|        IF(SETDATA(2) .EQ. STRROL) ZMODE = ZROLL
01041  M01S01039.keyex   +++|        CALL PACK(2, ZOFFSET + ZMODE)
01042  M01S01040.keyex   +++|      ENDIF
01043  M01S01041.keyex   +++|
01044  M01S01042.keyex   +++|      IF (.NOT.DEFNCHR) THEN
01045  M01S01043.keyex   +++|        IF(SETDATA(3) .EQ. STR132) ZNUMCHR(3) = Z132
01046  M01S01044.keyex   +++|        CALL SEQPACK(ZNUMCHR, 3)
01047  M01S01045.keyex   +++|      ENDIF
01048  M01S01046.keyex   +++|
01049  M01S01047.keyex   +++|      IF (.NOT.(DEFNPAD .AND. DEFPAGE .AND. DEFNCHR)) THEN
01050  M01S01048.keyex   +++|
01051  M01S01049.keyex   +++|* SEND A CARRIAGE RETURN IF A SEQUENCE WAS SENT TO THE TERMINAL.
01052  M01S01050.keyex   +++|
01053  M01S01051.keyex   +++|        CALL PACK(2, ZOFFSET + ZCARRET)
01054  M01S01052.keyex   +++|        CALL PACK(3, 1)
01055  M01S01053.keyex   +++|      ENDIF
01056  M01S01054.keyex   +++|      RETURN
01057  M01S01055.keyex   +++|      END
01058  M01S01056.keyex   +++|
01059  M01S01057.keyex   +++|
01060  M01S01058.keyex   +++|      SUBROUTINE LOAD
01061  M01S01059.keyex   +++|
01062  M01S01060.keyex   +++|**    LOAD - LOAD DEFINITIONS INTO TERMINAL.
01063  M01S01061.keyex   +++|*
01064  M01S01062.keyex   +++|*     *LOAD* LOADS THE TERMINAL WITH BOTH FUNCTION KEY DEFINITIONS
01065  M01S01063.keyex   +++|*     AND LABELS, AND MODIFIES TERMINAL CHARACTERISTICS.
01066  M01S01064.keyex   +++|*
01067  M01S01065.keyex   +++|*     CALL LOAD
01068  M01S01066.keyex   +++|*
01069  M01S01067.keyex   +++|*     CALLS   CLEAR, LDSETUP, RDSORC, SEND.
01070  M01S01068.keyex   +++|*
01071  M01S01069.keyex   +++|*     MESSAGES
01072  M01S01070.keyex   +++|*             FUNCTION KEYS HAVE BEEN LOADED.
01073  M01S01071.keyex   +++|
01074  M01S01072.keyex   +++|
01075  M01S01073.keyex   +++|      IMPLICIT INTEGER (A - Z)
01076  M01S01074.keyex   +++|
01077  M01S01075.keyex   +++|10    FORMAT(' FUNCTION KEYS HAVE BEEN LOADED.')
01078  M01S01076.keyex   +++|
01079  M01S01077.keyex   +++|* READ SOURCE FILE INTO COMMON BLOCK.
01080  M01S01078.keyex   +++|
01081  M01S01079.keyex   +++|      CALL RDSORC
01082  M01S01080.keyex   +++|
01083  M01S01081.keyex   +++|* CLEAR FUNCTION KEYS OF PREVIOUS DEFINITIONS.
01084  M01S01082.keyex   +++|
01085  M01S01083.keyex   +++|      CALL CLEAR
01086  M01S01084.keyex   +++|
01087  M01S01085.keyex   +++|* DOWNLINE LOAD CURRENT DEFINITIONS INTO TERMINAL.
01088  M01S01086.keyex   +++|
01089  M01S01087.keyex   +++|      CALL SEND
01090  M01S01088.keyex   +++|
01091  M01S01089.keyex   +++|* CHANGE THE SPECIFIED TERMINAL CHARACTERISTICS.
01092  M01S01090.keyex   +++|
01093  M01S01091.keyex   +++|      CALL LDSETUP
01094  M01S01092.keyex   +++|      WRITE (2,10)
01095  M01S01093.keyex   +++|      ENDFILE 2
01096  M01S01094.keyex   +++|      RETURN
01097  M01S01095.keyex   +++|      END
01098  M01S01096.keyex   +++|
01099  M01S01097.keyex   +++|
01100  M01S01098.keyex   +++|      SUBROUTINE PACK(CODE, BYTE)
01101  M01S01099.keyex   +++|
01102  M01S01100.keyex   +++|**    PACK - PACK BUFFER AND WRITE TO TERMINAL.
01103  M01S01101.keyex   +++|*
01104  M01S01102.keyex   +++|*     *PACK* PACKS 4 BYTES INTO A BUFFER AND WRITES
01105  M01S01103.keyex   +++|*     THE BUFFER TO THE TERMINAL.
01106  M01S01104.keyex   +++|*
01107  M01S01105.keyex   +++|*     CALL PACK(CODE, BYTE)
01108  M01S01106.keyex   +++|*
01109  M01S01107.keyex   +++|*     ENTRY   CODE  = 1, FIRST BYTE IN BUFFER.
01110  M01S01108.keyex   +++|*                   = 2, BYTE TO PLACE IN BUFFER.
01111  M01S01109.keyex   +++|*                   = 3, LAST BYTE TO PLACE IN BUFFER.
01112  M01S01110.keyex   +++|*
01113  M01S01111.keyex   +++|*             BYTE = Z80 BYTE TO BE PACKED AND WRITTEN TO TERMINAL.
01114  M01S01112.keyex   +++|*
01115  M01S01113.keyex   +++|*     CALLS   CONNEC.
01116  M01S01114.keyex   +++|*
01117  M01S01115.keyex   +++|*     NOTES   BUFFER FORMAT IS 00074---4---4---4---.
01118  M01S01116.keyex   +++|*
01119  M01S01117.keyex   +++|*     MESSAGES
01120  M01S01118.keyex   +++|*             NO KEYS SPECIFIED.
01121  M01S01119.keyex   +++|*                  NO KEYS WERE SPECIFIED TO BE SENT.
01122  M01S01120.keyex   +++|*             BUFFER OVERFLOW IN PACK.
01123  M01S01121.keyex   +++|*                  BUFFER SIZE EXCEEDED LIMITS.
01124  M01S01122.keyex   +++|
01125  M01S01123.keyex   +++|
01126  M01S01124.keyex   +++|      IMPLICIT INTEGER (A - Z)
01127  M01S01125.keyex   +++|
01128  M01S01126.keyex   +++|      PARAMETER  (NUMKEYS = 45)
01129  M01S01127.keyex   +++|*                            NUMBER OF DEFINABLE KEYS
01130  M01S01128.keyex   +++|      PARAMETER  (STORCHR = 70)
01131  M01S01129.keyex   +++|*                            STORED CHARACTERS PER DEFINITION
01132  M01S01130.keyex   +++|      PARAMETER  (SIZE = (NUMKEYS * STORCHR) + 200)
01133  M01S01131.keyex   +++|*                            BUFFER SIZE
01134  M01S01132.keyex   +++|
01135  M01S01133.keyex   +++|      DIMENSION  BUF(SIZE)
01136  M01S01134.keyex   +++|*                            OUTPUT BUFFER
01137  M01S01135.keyex   +++|      INTEGER    BYT
01138  M01S01136.keyex   +++|*                            Z80 CODE DIVIDER
01139  M01S01137.keyex   +++|      INTEGER    BYTE
01140  M01S01138.keyex   +++|*                            Z80 BYTE CODE
01141  M01S01139.keyex   +++|      INTEGER    PTR
01142  M01S01140.keyex   +++|*                            INDEX FOR *BUF*
01143  M01S01141.keyex   +++|
01144  M01S01142.keyex   +++|* PACK *BYTE* INTO BUFFER FOR GIVEN *CODE*.
01145  M01S01143.keyex   +++|
01146  M01S01144.keyex   +++|      GOTO (100, 200, 300), CODE
01147  M01S01145.keyex   +++|
01148  M01S01146.keyex   +++|* CODE = 1.  SET UP INITIAL CODE IN BUFFER.
01149  M01S01147.keyex   +++|
01150  M01S01148.keyex   +++|100   PTR = 0
01151  M01S01149.keyex   +++|      BYT = 0
01152  M01S01150.keyex   +++|      BYTE = 07
01153  M01S01151.keyex   +++|
01154  M01S01152.keyex   +++|* CODE = 2.  PACK DATA INTO BUFFER.
01155  M01S01153.keyex   +++|
01156  M01S01154.keyex   +++|200   BYT = BYT - 1
01157  M01S01155.keyex   +++|
01158  M01S01156.keyex   +++|      IF(BYT .LT. 0) THEN
01159  M01S01157.keyex   +++|        BYT = 4
01160  M01S01158.keyex   +++|        PTR = PTR + 1
01161  M01S01159.keyex   +++|        BUF(PTR) = 0
01162  M01S01160.keyex   +++|      ENDIF
01163  M01S01161.keyex   +++|
01164  M01S01162.keyex   +++|      BUF(PTR) = OR(BUF(PTR), SHIFT(BYTE, BYT*12))
01165  M01S01163.keyex   +++|      RETURN
01166  M01S01164.keyex   +++|
01167  M01S01165.keyex   +++|* CHECK FOR ERRORS BEFORE STARTING I/O.
01168  M01S01166.keyex   +++|
01169  M01S01167.keyex   +++|300   IF(PTR .LT. 1) STOP ' NO KEYS SPECIFIED.'
01170  M01S01168.keyex   +++|
01171  M01S01169.keyex   +++|      IF(PTR .GT. SIZE) STOP ' BUFFER OVERFLOW IN PACK '
01172  M01S01170.keyex   +++|
01173  M01S01171.keyex   +++|* OUTPUT INFORMATION WITHOUT HEADER BYTES.
01174  M01S01172.keyex   +++|
01175  M01S01173.keyex   +++|      CALL CONNEC(3)
01176  M01S01174.keyex   +++|      BUFFER OUT(3, 0) (BUF(1), BUF(PTR))
01177  M01S01175.keyex   +++|
01178  M01S01176.keyex   +++|* LOOP UNTIL I/O COMPLETES.
01179  M01S01177.keyex   +++|
01180  M01S01178.keyex   +++|      IF(UNIT(3))310,320,320
01181  M01S01179.keyex   +++|310   CONTINUE
01182  M01S01180.keyex   +++|320   CONTINUE
01183  M01S01181.keyex   +++|      RETURN
01184  M01S01182.keyex   +++|      END
01185  M01S01183.keyex   +++|
01186  M01S01184.keyex   +++|
01187  M01S01185.keyex   +++|      SUBROUTINE PRINT
01188  M01S01186.keyex   +++|
01189  M01S01187.keyex   +++|**    PRINT - PRINT FUNCTION KEYS TO SPECIFIED FILE.
01190  M01S01188.keyex   +++|*
01191  M01S01189.keyex   +++|*     *PRINT* COPIES ALL DEFINED FUNCTION KEYS FROM THE SPECIFIED FILE
01192  M01S01190.keyex   +++|*     TO THE LOCAL FILE *KEYPRNT*.
01193  M01S01191.keyex   +++|*
01194  M01S01192.keyex   +++|*     CALL PRINT
01195  M01S01193.keyex   +++|*
01196  M01S01194.keyex   +++|*     CALLS   RDSORC.
01197  M01S01195.keyex   +++|*
01198  M01S01196.keyex   +++|*     MESSAGES
01199  M01S01197.keyex   +++|*             THE LIST OF DEFINED FUNCTION KEYS IS ON THE LOCAL
01200  M01S01198.keyex   +++|*             FILE *KEYPRNT*.
01201  M01S01199.keyex   +++|
01202  M01S01200.keyex   +++|
01203  M01S01201.keyex   +++|      IMPLICIT INTEGER (A - Z)
01204  M01S01202.keyex   +++|
01205  M01S01203.keyex   +++|      PARAMETER    (NKEYS = 45)
01206  M01S01204.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01207  M01S01205.keyex   +++|      PARAMETER    (NKEY = 15)
01208  M01S01206.keyex   +++|*                            NUMBER OF KEYS PER SECTION OF *KEYS*
01209  M01S01207.keyex   +++|      PARAMETER    (NPAN = 3)
01210  M01S01208.keyex   +++|*                            NUMBER OF SECTIONS IN *KEYS*
01211  M01S01209.keyex   +++|
01212  M01S01210.keyex   +++|      CHARACTER*7  FILENM
01213  M01S01211.keyex   +++|*                            KEY DEFINITIONS FILE
01214  M01S01212.keyex   +++|      CHARACTER*5  LABELS(NPAN, NKEY)
01215  M01S01213.keyex   +++|*                            FUNCTION KEY LABELS
01216  M01S01214.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
01217  M01S01215.keyex   +++|*                            FUNCTION KEY DEFINITIONS
01218  M01S01216.keyex   +++|      CHARACTER*7  SETDATA(3)
01219  M01S01217.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
01220  M01S01218.keyex   +++|
01221  M01S01219.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01222  M01S01220.keyex   +++|
01223  M01S01221.keyex   +++|      DATA  (LABELS(1, I), I = 1, NKEY) /
01224  M01S01222.keyex   +++|     .  'F1   ', 'F2   ', 'F3   ', 'F4    ', 'F5    '
01225  M01S01223.keyex   +++|     ., 'F6   ', 'F7   ', 'F8   ', 'F9    ', 'F10   '
01226  M01S01224.keyex   +++|     ., 'F11  ', 'F12  ', 'F13  ', 'F14   ', 'F15   '
01227  M01S01225.keyex   +++|     ./
01228  M01S01226.keyex   +++|      DATA  (LABELS(2, I), I = 1, NKEY) /
01229  M01S01227.keyex   +++|     .  'RTAB ', 'LTAB ', 'NEXT ', 'DOWN  ', 'UP    '
01230  M01S01228.keyex   +++|     ., 'FWD  ', 'BKW  ', 'HELP ', 'ERASE ', 'EDIT  '
01231  M01S01229.keyex   +++|     ., 'BACK ', 'LAB  ', 'DATA ', 'STOP  ', 'INSRT '
01232  M01S01230.keyex   +++|     ./
01233  M01S01231.keyex   +++|      DATA  (LABELS(3, I), I = 1, NKEY) /
01234  M01S01232.keyex   +++|     .  'DLETE', 'CLEAR', 'PRINT', 'PAD 1 ', 'PAD 2 '
01235  M01S01233.keyex   +++|     ., 'PAD 3', 'PAD 4', 'PAD 5', 'PAD 6 ', 'PAD 7 '
01236  M01S01234.keyex   +++|     ., 'PAD 8', 'PAD 9', 'PAD 0', 'PAD , ', 'PAD . '
01237  M01S01235.keyex   +++|     ./
01238  M01S01236.keyex   +++|
01239  M01S01237.keyex   +++|10    FORMAT(5X, 'KEY DEFINITION UTILITY.',//
01240  M01S01238.keyex   +++|     .3X,'KEY   LABEL   KEY DEFINITIONS'/
01241  M01S01239.keyex   +++|     .3X,'---   -----   ---------------')
01242  M01S01240.keyex   +++|11    FORMAT(1X, A7, 1X, A7, 1X, A60)
01243  M01S01241.keyex   +++|12    FORMAT(' THE LIST OF DEFINED FUNCTION KEYS IS ON THE',
01244  M01S01242.keyex   +++|     .' LOCAL FILE *KEYPRNT*.')
01245  M01S01243.keyex   +++|13    FORMAT(/7X,'TERMINAL CHARACTERISTICS',/
01246  M01S01244.keyex   +++|     .7X,'-------- ---------------',/
01247  M01S01245.keyex   +++|     .9X,'NUMBER PAD -  ',A7,/9X,'SCREEN MODE -  ',A7/
01248  M01S01246.keyex   +++|     .9X,'CHARS./ LINE -  ',A7)
01249  M01S01247.keyex   +++|
01250  M01S01248.keyex   +++|* GET FILE AND OUTPUT USER DEFINED FUNCTION KEYS.
01251  M01S01249.keyex   +++|
01252  M01S01250.keyex   +++|      CALL   RDSORC
01253  M01S01251.keyex   +++|      REWIND 6
01254  M01S01252.keyex   +++|      WRITE(6, 10)
01255  M01S01253.keyex   +++|      DO 110 I = 1, NPAN
01256  M01S01254.keyex   +++|        DO 100 J = 1, NKEY
01257  M01S01255.keyex   +++|          IF(I .EQ. 1) THEN
01258  M01S01256.keyex   +++|            IF(KEYS(J)(1:7) .NE. ' ') THEN
01259  M01S01257.keyex   +++|              WRITE(6,11) LABELS(I,J), KEYS(J)(1:7),
01260  M01S01258.keyex   +++|     .                    KEYS(J)(8:67)
01261  M01S01259.keyex   +++|            ENDIF
01262  M01S01260.keyex   +++|          ENDIF
01263  M01S01261.keyex   +++|          IF(I .EQ. 2) THEN
01264  M01S01262.keyex   +++|            IF(KEYS(J + 15)(1:7) .NE. ' ') THEN
01265  M01S01263.keyex   +++|              WRITE(6,11) LABELS(I,J), KEYS(J+15)(1:7),
01266  M01S01264.keyex   +++|     .                    KEYS(J+15)(8:67)
01267  M01S01265.keyex   +++|            ENDIF
01268  M01S01266.keyex   +++|          ENDIF
01269  M01S01267.keyex   +++|          IF(I .EQ. 3) THEN
01270  M01S01268.keyex   +++|            IF(KEYS(J + 30)(1:7) .NE. ' ') THEN
01271  M01S01269.keyex   +++|              WRITE(6, 11) LABELS(I, J), KEYS(J+30)(1:7),
01272  M01S01270.keyex   +++|     .                     KEYS(J+30)(8:67)
01273  M01S01271.keyex   +++|            ENDIF
01274  M01S01272.keyex   +++|          ENDIF
01275  M01S01273.keyex   +++|100     CONTINUE
01276  M01S01274.keyex   +++|110   CONTINUE
01277  M01S01275.keyex   +++|
01278  M01S01276.keyex   +++|* OUTPUT USER DEFINED TERMINAL SETUP CHARACTERISTICS.
01279  M01S01277.keyex   +++|
01280  M01S01278.keyex   +++|      WRITE(6,13) SETDATA
01281  M01S01279.keyex   +++|      REWIND 6
01282  M01S01280.keyex   +++|      WRITE(2,12)
01283  M01S01281.keyex   +++|      ENDFILE 2
01284  M01S01282.keyex   +++|      RETURN
01285  M01S01283.keyex   +++|      END
01286  M01S01284.keyex   +++|
01287  M01S01285.keyex   +++|
01288  M01S01286.keyex   +++|      SUBROUTINE SEND
01289  M01S01287.keyex   +++|
01290  M01S01288.keyex   +++|**    SEND - TRANSFER KEY DEFINITIONS FROM SYSTEM INTO TERMINAL.
01291  M01S01289.keyex   +++|*
01292  M01S01290.keyex   +++|*     *SEND* TRANSFERS THE KEY DEFINITIONS, KEY LABELS, AND Z80
01293  M01S01291.keyex   +++|*     ROUTINES INTO THE TERMINAL.
01294  M01S01292.keyex   +++|*
01295  M01S01293.keyex   +++|*     CALL SEND
01296  M01S01294.keyex   +++|*
01297  M01S01295.keyex   +++|*     CALLS   BYTE, PACK, ZSNDADD, ZSNDCHR, Z80CODE.
01298  M01S01296.keyex   +++|
01299  M01S01297.keyex   +++|
01300  M01S01298.keyex   +++|      IMPLICIT INTEGER (A - Z)
01301  M01S01299.keyex   +++|
01302  M01S01300.keyex   +++|      PARAMETER   (NKEYS = 45)
01303  M01S01301.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01304  M01S01302.keyex   +++|
01305  M01S01303.keyex   +++|      BOOLEAN      ZBASE
01306  M01S01304.keyex   +++|*                            HEX CODE FOR KEY TABLE OFFSET
01307  M01S01305.keyex   +++|      BOOLEAN      ZCARRET(1)
01308  M01S01306.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
01309  M01S01307.keyex   +++|      BOOLEAN      ZDEFKEY(4)
01310  M01S01308.keyex   +++|*                            HEX SEQUENCE TO DEFINE FUNCTION KEY
01311  M01S01309.keyex   +++|      BOOLEAN      ZDISKEY(3)
01312  M01S01310.keyex   +++|*                            HEX SEQUENCE TO DISABLE KEYBOARD ENTRY
01313  M01S01311.keyex   +++|      BOOLEAN      ZDISRET(3)
01314  M01S01312.keyex   +++|*                            HEX SEQUENCE TO DISABLE CARRIAGE RETURN
01315  M01S01313.keyex   +++|      BOOLEAN      ZECHO
01316  M01S01314.keyex   +++|*                            HEX CODE FOR ECHO
01317  M01S01315.keyex   +++|      BOOLEAN      ZECHOFF
01318  M01S01316.keyex   +++|*                            HEX CODE FOR ECHO OFF
01319  M01S01317.keyex   +++|      BOOLEAN      ZECHON
01320  M01S01318.keyex   +++|*                            HEX CODE FOR ECHO ON
01321  M01S01319.keyex   +++|      BOOLEAN      ZENBIAS(2)
01322  M01S01320.keyex   +++|*                            HEX SEQUENCE TO ENABLE BIAS
01323  M01S01321.keyex   +++|      BOOLEAN      ZENRETN(2)
01324  M01S01322.keyex   +++|*                            HEX SEQUENCE TO ENABLE CARRIAGE RETURN
01325  M01S01323.keyex   +++|      BOOLEAN      ZENKEYB(3)
01326  M01S01324.keyex   +++|*                            HEX SEQUENCE TO ENABLE KEYBOARD ENTRY
01327  M01S01325.keyex   +++|      BOOLEAN      ZTRMKEY(2)
01328  M01S01326.keyex   +++|*                            HEX SEQUENCE TO TERMINATE KEY DEFINITIONS
01329  M01S01327.keyex   +++|      CHARACTER*7  FILENM
01330  M01S01328.keyex   +++|*                            KEY DEFINITIONS FILE
01331  M01S01329.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
01332  M01S01330.keyex   +++|*                            FUNCTION KEY DEFINITIONS
01333  M01S01331.keyex   +++|      CHARACTER*7  SETDATA(3)
01334  M01S01332.keyex   +++|*                            SETUP DATA
01335  M01S01333.keyex   +++|      INTEGER      ASCII
01336  M01S01334.keyex   +++|*                            Z80 CHARACTER
01337  M01S01335.keyex   +++|      INTEGER      LASTNB
01338  M01S01336.keyex   +++|*                            LAST NON-BLANK CHARACTER
01339  M01S01337.keyex   +++|
01340  M01S01338.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01341  M01S01339.keyex   +++|
01342  M01S01340.keyex   +++|      DATA  ADDR    / Z"C002"/
01343  M01S01341.keyex   +++|      DATA  ADDL    / Z"C000"/
01344  M01S01342.keyex   +++|      DATA  ZBASE   / Z"30" /
01345  M01S01343.keyex   +++|      DATA  ZCARRET / Z"0D" /
01346  M01S01344.keyex   +++|      DATA  ZDEFKEY / Z"1E", Z"09", Z"30", Z"34" /
01347  M01S01345.keyex   +++|      DATA  ZDISKEY / Z"1E", Z"12", Z"4D" /
01348  M01S01346.keyex   +++|      DATA  ZDISRET / Z"1E", Z"12", Z"5A" /
01349  M01S01347.keyex   +++|      DATA  ZECHON  / Z"34" /
01350  M01S01348.keyex   +++|      DATA  ZECHOFF / Z"31" /
01351  M01S01349.keyex   +++|      DATA  ZENBIAS / Z"1E", Z"30" /
01352  M01S01350.keyex   +++|      DATA  ZENRETN / Z"1E", Z"05" /
01353  M01S01351.keyex   +++|      DATA  ZENKEYB / Z"1E", Z"12", Z"4E" /
01354  M01S01352.keyex   +++|      DATA  ZFEED   / Z"0A" /
01355  M01S01353.keyex   +++|      DATA  ZTRMKEY / Z"2F", Z"6F"/
01356  M01S01354.keyex   +++|
01357  M01S01355.keyex   +++|
01358  M01S01356.keyex   +++|      CALL PACK(1, 0)
01359  M01S01357.keyex   +++|
01360  M01S01358.keyex   +++|* LOCK THE KEYBOARD DURING WHILE SENDING DATA TO TERMINAL.
01361  M01S01359.keyex   +++|
01362  M01S01360.keyex   +++|      CALL SEQPACK(ZDISKEY,3)
01363  M01S01361.keyex   +++|
01364  M01S01362.keyex   +++|* DISABLE *CR* ON FUNCTION KEYS AND ENABLE BIAS.
01365  M01S01363.keyex   +++|
01366  M01S01364.keyex   +++|      CALL SEQPACK(ZDISRET,3)
01367  M01S01365.keyex   +++|      CALL SEQPACK(ZENBIAS,2)
01368  M01S01366.keyex   +++|
01369  M01S01367.keyex   +++|* PROCESS EACH FUNCTION KEY'S DEFINITION.  IF LAST CHARACTER IN THE
01370  M01S01368.keyex   +++|* DEFINITION FIELD IS AN * (ASTERISK), TURN ECHO ON.
01371  M01S01369.keyex   +++|
01372  M01S01370.keyex   +++|      DO 260 I = 1, NKEYS
01373  M01S01371.keyex   +++|        IF((KEYS(I)(8:8).EQ. ';') .OR. (KEYS(I)(8:8).EQ. ' ')) GOTO 260
01374  M01S01372.keyex   +++|        IF(KEYS(I)(67:67).EQ. '*') THEN
01375  M01S01373.keyex   +++|          ZECHO = ZECHON
01376  M01S01374.keyex   +++|        ELSE
01377  M01S01375.keyex   +++|          ZECHO = ZECHOFF
01378  M01S01376.keyex   +++|        ENDIF
01379  M01S01377.keyex   +++|        ZDEFKEY(3) = ZBASE + I
01380  M01S01378.keyex   +++|        ZDEFKEY(4) = ZECHO
01381  M01S01379.keyex   +++|        CALL SEQPACK(ZDEFKEY,4)
01382  M01S01380.keyex   +++|        CALL ZSNDADD(ADDR)
01383  M01S01381.keyex   +++|
01384  M01S01382.keyex   +++|* GET ACTUAL CHARACTERS FOR THE DEFINITION.
01385  M01S01383.keyex   +++|
01386  M01S01384.keyex   +++|        LEN = 0
01387  M01S01385.keyex   +++|        IF((KEYS(I)(8:8) .EQ. 'Z') .AND. (KEYS(I)(9:9) .EQ. '"')) THEN
01388  M01S01386.keyex   +++|
01389  M01S01387.keyex   +++|          DO 210 J = 10, 67, 2
01390  M01S01388.keyex   +++|            K = J + 1
01391  M01S01389.keyex   +++|            IF(KEYS(I)(J:J) .EQ. '"') GOTO 220
01392  M01S01390.keyex   +++|            IF(KEYS(I)(K:K) .EQ. '"') GOTO 220
01393  M01S01391.keyex   +++|            IF(KEYS(I)(J:J) .LE. '9') C1=ICHAR(KEYS(I)(J:J))-Z"10"
01394  M01S01392.keyex   +++|            IF(KEYS(I)(J:J) .GE. 'A') C1=ICHAR(KEYS(I)(J:J))-Z"20"+09
01395  M01S01393.keyex   +++|            IF(KEYS(I)(K:K) .LE. '9') C2=ICHAR(KEYS(I)(K:K))-Z"10"
01396  M01S01394.keyex   +++|            IF(KEYS(I)(K:K) .GE. 'A') C2=ICHAR(KEYS(I)(K:K))-Z"20"+09
01397  M01S01395.keyex   +++|            ASCII = C1*16+C2
01398  M01S01396.keyex   +++|            CALL ZSNDCHR(ASCII)
01399  M01S01397.keyex   +++|210       CONTINUE
01400  M01S01398.keyex   +++|
01401  M01S01399.keyex   +++|          J = 68
01402  M01S01400.keyex   +++|220       J = K
01403  M01S01401.keyex   +++|
01404  M01S01402.keyex   +++|* PROCESSING CHARACTER DATA.
01405  M01S01403.keyex   +++|
01406  M01S01404.keyex   +++|        ELSE
01407  M01S01405.keyex   +++|
01408  M01S01406.keyex   +++|* COUNT TRAILING BLANKS.
01409  M01S01407.keyex   +++|
01410  M01S01408.keyex   +++|          DO 225 J = 66, 8, -1
01411  M01S01409.keyex   +++|            IF(KEYS(I)(J:J) .NE. ' ') THEN
01412  M01S01410.keyex   +++|              LASTNB = J
01413  M01S01411.keyex   +++|              GOTO 227
01414  M01S01412.keyex   +++|            ENDIF
01415  M01S01413.keyex   +++|225       CONTINUE
01416  M01S01414.keyex   +++|
01417  M01S01415.keyex   +++|227       DO 230 J = 8, MIN(66, LASTNB)
01418  M01S01416.keyex   +++|            K = J + 1
01419  M01S01417.keyex   +++|            IF(KEYS(I)(J:J) .EQ. '!'.AND.((KEYS(I)(K:K) .EQ. ' ')
01420  M01S01418.keyex   +++|     .         .OR.(K .EQ. 67))) GOTO 240
01421  M01S01419.keyex   +++|            IF(KEYS(I)(J:J) .EQ. ';') GOTO 250
01422  M01S01420.keyex   +++|            IF(KEYS(I)(J:J) .EQ. '!') THEN
01423  M01S01421.keyex   +++|              CALL ZSNDCHR(ZCARRET)
01424  M01S01422.keyex   +++|              IF(KEYS(I)(67:67) .EQ. '*') THEN
01425  M01S01423.keyex   +++|                CALL ZSNDCHR(ZFEED)
01426  M01S01424.keyex   +++|                LEN = LEN + 1
01427  M01S01425.keyex   +++|              ENDIF
01428  M01S01426.keyex   +++|            ELSE
01429  M01S01427.keyex   +++|              ASCII = ICHAR(KEYS(I)(J:J)) + Z"20"
01430  M01S01428.keyex   +++|              CALL ZSNDCHR(ASCII)
01431  M01S01429.keyex   +++|            ENDIF
01432  M01S01430.keyex   +++|230       CONTINUE
01433  M01S01431.keyex   +++|
01434  M01S01432.keyex   +++|          J = 67
01435  M01S01433.keyex   +++|240       CALL ZSNDCHR(ZCARRET)
01436  M01S01434.keyex   +++|          J = J + 1
01437  M01S01435.keyex   +++|        ENDIF
01438  M01S01436.keyex   +++|
01439  M01S01437.keyex   +++|250     LEN = LEN + J - 8
01440  M01S01438.keyex   +++|        CALL SEQPACK(ZTRMKEY,2)
01441  M01S01439.keyex   +++|        CALL SEQPACK(ZCARRET,1)
01442  M01S01440.keyex   +++|        ADDR = ADDR + LEN + 1
01443  M01S01441.keyex   +++|260   CONTINUE
01444  M01S01442.keyex   +++|
01445  M01S01443.keyex   +++|* SET UP AN ADDRESS IN THE 721 TO STORE THE KEY LABELS TO BE USED BY
01446  M01S01444.keyex   +++|* THE *DISPLAY* OPTION.
01447  M01S01445.keyex   +++|
01448  M01S01446.keyex   +++|      ZDEFKEY(3) = Z"74"
01449  M01S01447.keyex   +++|      ZDEFKEY(4) = Z"31"
01450  M01S01448.keyex   +++|      CALL SEQPACK(ZDEFKEY,4)
01451  M01S01449.keyex   +++|      CALL ZSNDADD(ADDR)
01452  M01S01450.keyex   +++|
01453  M01S01451.keyex   +++|* STORE THE F1 - F15 KEY LABELS IN THE TERMINAL.
01454  M01S01452.keyex   +++|
01455  M01S01453.keyex   +++|      DO 280 I = 1, 15
01456  M01S01454.keyex   +++|        DO 270 J = 1, 7
01457  M01S01455.keyex   +++|          ASCII = ICHAR(KEYS(I)(J:J)) + Z"20"
01458  M01S01456.keyex   +++|          CALL ZSNDCHR(ASCII)
01459  M01S01457.keyex   +++|270     CONTINUE
01460  M01S01458.keyex   +++|280   CONTINUE
01461  M01S01459.keyex   +++|
01462  M01S01460.keyex   +++|* STORE THE 'LAB' LABEL AS F16 IN THE TERMINAL.
01463  M01S01461.keyex   +++|
01464  M01S01462.keyex   +++|      DO 290 I = 1, 7
01465  M01S01463.keyex   +++|        ASCII = ICHAR(KEYS(27)(I:I)) + Z"20"
01466  M01S01464.keyex   +++|        CALL ZSNDCHR(ASCII)
01467  M01S01465.keyex   +++|290   CONTINUE
01468  M01S01466.keyex   +++|
01469  M01S01467.keyex   +++|* TERMINATE KEY DEFINITIONS.
01470  M01S01468.keyex   +++|
01471  M01S01469.keyex   +++|      CALL SEQPACK(ZTRMKEY,2)
01472  M01S01470.keyex   +++|      CALL SEQPACK(ZCARRET,1)
01473  M01S01471.keyex   +++|      ADDR = (ADDR + (7*16) + 1) - ADDL
01474  M01S01472.keyex   +++|
01475  M01S01473.keyex   +++|* SEND LENGTH OF CHARACTER LOAD TO BASE ADDRESS *ADDL*.
01476  M01S01474.keyex   +++|
01477  M01S01475.keyex   +++|      ZDEFKEY(3) = Z"70"
01478  M01S01476.keyex   +++|      ZDEFKEY(4) = Z"32"
01479  M01S01477.keyex   +++|      CALL SEQPACK(ZDEFKEY,4)
01480  M01S01478.keyex   +++|      CALL ZSNDADD(ADDL)
01481  M01S01479.keyex   +++|      CALL ZSNDADD(ADDR)
01482  M01S01480.keyex   +++|      CALL SEQPACK(ZCARRET,1)
01483  M01S01481.keyex   +++|
01484  M01S01482.keyex   +++|* ENABLE KEYBOARD ENTRY.
01485  M01S01483.keyex   +++|
01486  M01S01484.keyex   +++|      CALL Z80CODE
01487  M01S01485.keyex   +++|      CALL SEQPACK(ZENKEYB,3)
01488  M01S01486.keyex   +++|      CALL PACK(3, 1)
01489  M01S01487.keyex   +++|      RETURN
01490  M01S01488.keyex   +++|      END
01491  M01S01489.keyex   +++|
01492  M01S01490.keyex   +++|
01493  M01S01491.keyex   +++|
01494  M01S01492.keyex   +++|      SUBROUTINE SEQPACK(SEQUENC,NBYTES)
01495  M01S01493.keyex   +++|
01496  M01S01494.keyex   +++|**    SEQPACK - PACKS THE GIVEN SEQUENCE INTO A BUFFER FOR OUTPUT.
01497  M01S01495.keyex   +++|*
01498  M01S01496.keyex   +++|*     *SEQPACK* PACKS THE GIVEN SEQUENCE INTO THE OUTPUT BUFFER VIA
01499  M01S01497.keyex   +++|*     THE *PACK* ROUTINE.
01500  M01S01498.keyex   +++|*
01501  M01S01499.keyex   +++|*     CALL SEQPACK(SEQUENC,NBYTES)
01502  M01S01500.keyex   +++|*
01503  M01S01501.keyex   +++|*     ENTRY   SEQUENC = ARRAY OF BOOLEAN HEX CODES.
01504  M01S01502.keyex   +++|*             NBYTES = LENGTH OF HEX CODE ARRAY.
01505  M01S01503.keyex   +++|*
01506  M01S01504.keyex   +++|*     CALLS   PACK.
01507  M01S01505.keyex   +++|
01508  M01S01506.keyex   +++|      IMPLICIT INTEGER (A - Z)
01509  M01S01507.keyex   +++|
01510  M01S01508.keyex   +++|      PARAMETER    (MAXBYTS = 5)
01511  M01S01509.keyex   +++|*                            MAXIMUM LENGTH OF *SEQUENC*
01512  M01S01510.keyex   +++|
01513  M01S01511.keyex   +++|      BOOLEAN      OFFSET
01514  M01S01512.keyex   +++|*                            OFFSET FOR Z80 PROCESSING
01515  M01S01513.keyex   +++|      BOOLEAN      SEQUENC(MAXBYTS)
01516  M01S01514.keyex   +++|*                            ARRAY OF BOOLEAN HEX CODES
01517  M01S01515.keyex   +++|      INTEGER      NBYTES
01518  M01S01516.keyex   +++|*                            LENGTH OF HEX CODE ARRAY
01519  M01S01517.keyex   +++|
01520  M01S01518.keyex   +++|      DATA  OFFSET / Z"800" /
01521  M01S01519.keyex   +++|
01522  M01S01520.keyex   +++|
01523  M01S01521.keyex   +++|      DO 100 I = 1, NBYTES
01524  M01S01522.keyex   +++|        CALL PACK(2, OFFSET + SEQUENC(I))
01525  M01S01523.keyex   +++|100   CONTINUE
01526  M01S01524.keyex   +++|
01527  M01S01525.keyex   +++|      RETURN
01528  M01S01526.keyex   +++|      END
01529  M01S01527.keyex   +++|
01530  M01S01528.keyex   +++|
01531  M01S01529.keyex   +++|      SUBROUTINE SYSKEYS
01532  M01S01530.keyex   +++|
01533  M01S01531.keyex   +++|**    SYSKEYS - SET SYSTEM DEFAULTS FOR KEYS AND SETUP CHARACTERISTICS.
01534  M01S01532.keyex   +++|*
01535  M01S01533.keyex   +++|*     *SYSKEYS* INITIALIZES *KEYS* AND TERMINAL SETUP CHARACTERISTICS
01536  M01S01534.keyex   +++|*     WITH THE SYSTEM DEFAULTS.
01537  M01S01535.keyex   +++|*
01538  M01S01536.keyex   +++|*     CALL SYSKEYS
01539  M01S01537.keyex   +++|*
01540  M01S01538.keyex   +++|*     USES    KEYS, SETDATA.
01541  M01S01539.keyex   +++|
01542  M01S01540.keyex   +++|
01543  M01S01541.keyex   +++|      IMPLICIT INTEGER (A - Z)
01544  M01S01542.keyex   +++|
01545  M01S01543.keyex   +++|      PARAMETER    (NKEYS = 45)
01546  M01S01544.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01547  M01S01545.keyex   +++|
01548  M01S01546.keyex   +++|      BOOLEAN      KHELP
01549  M01S01547.keyex   +++|*                            HEX CODE FOR HELP KEY
01550  M01S01548.keyex   +++|      BOOLEAN      KEDIT
01551  M01S01549.keyex   +++|*                            HEX CODE FOR EDIT KEY
01552  M01S01550.keyex   +++|      BOOLEAN      KSTOP
01553  M01S01551.keyex   +++|*                            HEX CODE FOR STOP KEY
01554  M01S01552.keyex   +++|      BOOLEAN      ZBASE
01555  M01S01553.keyex   +++|*                            HEX CODE FOR BASE OFFSET OF KEY TABLE
01556  M01S01554.keyex   +++|      CHARACTER*7  FILENM
01557  M01S01555.keyex   +++|*                            KEY DEFINITIONS FILE
01558  M01S01556.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
01559  M01S01557.keyex   +++|*                            FUNCTION KEY DEFINITIONS
01560  M01S01558.keyex   +++|      CHARACTER*7  SETDATA(3)
01561  M01S01559.keyex   +++|*                            TERMINAL SETUP DATA
01562  M01S01560.keyex   +++|      CHARACTER*7  STRDEF
01563  M01S01561.keyex   +++|*                            DEFAULT STRING
01564  M01S01562.keyex   +++|      CHARACTER*7  STRHLP
01565  M01S01563.keyex   +++|*                            HELP STRING
01566  M01S01564.keyex   +++|      CHARACTER*7  STRHL1
01567  M01S01565.keyex   +++|*                            HELP WITH CARRIAGE RETURN STRING
01568  M01S01566.keyex   +++|      CHARACTER*7  STREDT
01569  M01S01567.keyex   +++|*                            EDIT STRING
01570  M01S01568.keyex   +++|      CHARACTER*7  STRFSE
01571  M01S01569.keyex   +++|*                            FSE WITH CARRIAGE RETURN STRING
01572  M01S01570.keyex   +++|      CHARACTER*7  STRSTP
01573  M01S01571.keyex   +++|*                            STOP STRING
01574  M01S01572.keyex   +++|      CHARACTER*7  STRCTT
01575  M01S01573.keyex   +++|*                            CONTROL-T STOP STRING
01576  M01S01574.keyex   +++|
01577  M01S01575.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01578  M01S01576.keyex   +++|
01579  M01S01577.keyex   +++|      DATA  KHELP  / Z"47" /
01580  M01S01578.keyex   +++|      DATA  KEDIT  / Z"49" /
01581  M01S01579.keyex   +++|      DATA  KSTOP  / Z"4D" /
01582  M01S01580.keyex   +++|      DATA  ZBASE  / Z"30" /
01583  M01S01581.keyex   +++|      DATA  STRDEF / 'DEFAULT' /
01584  M01S01582.keyex   +++|      DATA  STRHLP / 'HELP   ' /
01585  M01S01583.keyex   +++|      DATA  STRHL1 / 'HELP!  ' /
01586  M01S01584.keyex   +++|      DATA  STREDT / 'EDIT   ' /
01587  M01S01585.keyex   +++|      DATA  STRFSE / 'FSE!   ' /
01588  M01S01586.keyex   +++|      DATA  STRSTP / 'STOP   ' /
01589  M01S01587.keyex   +++|      DATA  STRCTT / 'Z"140D"' /
01590  M01S01588.keyex   +++|
01591  M01S01589.keyex   +++|
01592  M01S01590.keyex   +++|* INITIALIZE *KEYS*.
01593  M01S01591.keyex   +++|
01594  M01S01592.keyex   +++|      DO 100 I = 1, NKEYS
01595  M01S01593.keyex   +++|        KEYS(I) = ' '
01596  M01S01594.keyex   +++|100   CONTINUE
01597  M01S01595.keyex   +++|
01598  M01S01596.keyex   +++|* INITIALIZE *SETDATA*.
01599  M01S01597.keyex   +++|
01600  M01S01598.keyex   +++|      SETDATA(1) = STRDEF
01601  M01S01599.keyex   +++|      SETDATA(2) = STRDEF
01602  M01S01600.keyex   +++|      SETDATA(3) = STRDEF
01603  M01S01601.keyex   +++|
01604  M01S01602.keyex   +++|* STORE LABEL AND KEY DEFINITION FOR EACH *KEYS(I)*.
01605  M01S01603.keyex   +++|* EACH *KEYS(I)* = 7/LABEL, 60/DEFINITION.
01606  M01S01604.keyex   +++|
01607  M01S01605.keyex   +++|      KEYS(KHELP - Z"30")(1:07) = STRHLP
01608  M01S01606.keyex   +++|      KEYS(KHELP - Z"30")(8:67) = STRHLP
01609  M01S01607.keyex   +++|      KEYS(KEDIT - Z"30")(1:07) = STREDT
01610  M01S01608.keyex   +++|      KEYS(KEDIT - Z"30")(8:67) = STRFSE
01611  M01S01609.keyex   +++|      KEYS(KSTOP - Z"30")(1:07) = STRSTP
01612  M01S01610.keyex   +++|      KEYS(KSTOP - Z"30")(8:67) = STRCTT
01613  M01S01611.keyex   +++|      RETURN
01614  M01S01612.keyex   +++|      END
01615  M01S01613.keyex   +++|
01616  M01S01614.keyex   +++|
01617  M01S01615.keyex   +++|      SUBROUTINE VERLOAD(LOADED)
01618  M01S01616.keyex   +++|
01619  M01S01617.keyex   +++|**    VERLOAD - VERIFY THAT TERMINAL HAS LOADED CONTROLWARE.
01620  M01S01618.keyex   +++|*
01621  M01S01619.keyex   +++|*     *VERLOAD* INITIATES A LOADED CONTROLWARE SEQUENCE FOLLOWED BY A
01622  M01S01620.keyex   +++|*     MODEL REPORT REQUEST (WHICH IS ALWAYS PRESENT ON A 721 TERMINAL).
01623  M01S01621.keyex   +++|*     IF THE FIRST ITEM THAT COMES BACK IS THE MODEL REPORT REQUEST
01624  M01S01622.keyex   +++|*     DATA, THEN THERE WAS NO LOADED CONTROLWARE PRESENT.
01625  M01S01623.keyex   +++|*
01626  M01S01624.keyex   +++|*     CALL VERLOAD(LOADED)
01627  M01S01625.keyex   +++|*
01628  M01S01626.keyex   +++|*     EXIT    *LOADED* IS SET IF LOADED CONTROLWARE IS PRESENT.
01629  M01S01627.keyex   +++|*
01630  M01S01628.keyex   +++|*     CALLS   PACK, SEQPACK.
01631  M01S01629.keyex   +++|
01632  M01S01630.keyex   +++|
01633  M01S01631.keyex   +++|      IMPLICIT INTEGER (A - Z)
01634  M01S01632.keyex   +++|
01635  M01S01633.keyex   +++|      BOOLEAN      OUT
01636  M01S01634.keyex   +++|*                            OCTAL CODE TO INITIATE TRANSPARENT MODE
01637  M01S01635.keyex   +++|      BOOLEAN      ZDISKEY(3)
01638  M01S01636.keyex   +++|*                            HEX SEQUENCE TO DISABLE KEYBOARD ENTRY
01639  M01S01637.keyex   +++|      BOOLEAN      ZENKEYB(3)
01640  M01S01638.keyex   +++|*                            HEX SEQUENCE TO ENABLE KEYBOARD ENTRY
01641  M01S01639.keyex   +++|      BOOLEAN      ZHOSTLC(3)
01642  M01S01640.keyex   +++|*                            HEX SEQUENCE FOR HOST LOADED CONTROLWARE
01643  M01S01641.keyex   +++|      BOOLEAN      ZMODREP(3)
01644  M01S01642.keyex   +++|*                            HEX SEQUENCE FOR MODEL REPORT REQUEST
01645  M01S01643.keyex   +++|      CHARACTER*2  CTRLT
01646  M01S01644.keyex   +++|*                            CONTROL-T TERMINATION SEQUENCE
01647  M01S01645.keyex   +++|      CHARACTER*5  MODREP
01648  M01S01646.keyex   +++|*                            TERMINAL MODEL REPORT
01649  M01S01647.keyex   +++|      CHARACTER*7  VERSTR
01650  M01S01648.keyex   +++|*                            VERIFICATION STRING IF TERMINAL LOADED
01651  M01S01649.keyex   +++|      INTEGER      IOS
01652  M01S01650.keyex   +++|*                            IOSTAT VALUE FROM FORMATTED READ
01653  M01S01651.keyex   +++|      CHARACTER*112 OPRAM4
01654  M01S01652.keyex   +++|*                            721 HEX SEQUENCE CODES
01655  M01S01653.keyex   +++|      LOGICAL      LOADED
01656  M01S01654.keyex   +++|*                            CONTROLWARE LOADED FLAG
01657  M01S01655.keyex   +++|
01658  M01S01656.keyex   +++|      DATA  MODREP /'536.5'/
01659  M01S01657.keyex   +++|      DATA  VERSTR /'6A536.5'/
01660  M01S01658.keyex   +++|      DATA  CTRLT  /'5T'/
01661  M01S01659.keyex   +++|      DATA  OUT    /O"00060400001500000000"/
01662  M01S01660.keyex   +++|*                            OUT IS 1 WORD WITH THE DATA LEFT JUSTIFIED
01663  M01S01661.keyex   +++|*                            0006 = INITIATES TRANSPARENT INPUT MODE
01664  M01S01662.keyex   +++|*                            0400 = WORD LENGTH OF BLOCK TO TRANSMIT
01665  M01S01663.keyex   +++|*                            0015 = DELIMITER OF A *CR*
01666  M01S01664.keyex   +++|
01667  M01S01665.keyex   +++|      DATA  OPRAM4 / ' ' /
01668  M01S01666.keyex   +++|      DATA  ZDISKEY / Z"1E", Z"12", Z"4D" /
01669  M01S01667.keyex   +++|      DATA  ZENKEYB / Z"1E", Z"12", Z"4E" /
01670  M01S01668.keyex   +++|      DATA  ZHOSTLC / Z"1E", Z"12", Z"75" /
01671  M01S01669.keyex   +++|      DATA  ZMODREP / Z"1E", Z"43", Z"30" /
01672  M01S01670.keyex   +++|
01673  M01S01671.keyex   +++|11    FORMAT(A112)
01674  M01S01672.keyex   +++|
01675  M01S01673.keyex   +++|
01676  M01S01674.keyex   +++|* TURN OFF INPUT PROMPT AND INITIATE TRANSPARENT INPUT.
01677  M01S01675.keyex   +++|
01678  M01S01676.keyex   +++|      CALL PROMPT
01679  M01S01677.keyex   +++|      CLOSE (2 ,STATUS = 'DELETE' )
01680  M01S01678.keyex   +++|      OPEN  (2, RECL=100, FILE='OUTPUT', FORM = 'UNFORMATTED')
01681  M01S01679.keyex   +++|12    WRITE (2) OUT
01682  M01S01680.keyex   +++|      CLOSE (2 ,STATUS = 'DELETE' )
01683  M01S01681.keyex   +++|      OPEN  (2, RECL=100, FILE='OUTPUT')
01684  M01S01682.keyex   +++|
01685  M01S01683.keyex   +++|
01686  M01S01684.keyex   +++|* GET FUNCTION KEY LABELS FROM THE 721.
01687  M01S01685.keyex   +++|* KEYBOARD MUST BE LOCKED WHILE 721 SENDS FUNCTION KEY DATA UPLINE.
01688  M01S01686.keyex   +++|
01689  M01S01687.keyex   +++|      CALL PACK(1, 0)
01690  M01S01688.keyex   +++|      CALL SEQPACK(ZDISKEY,3)
01691  M01S01689.keyex   +++|      CALL SEQPACK(ZHOSTLC,3)
01692  M01S01690.keyex   +++|      CALL SEQPACK(ZMODREP,3)
01693  M01S01691.keyex   +++|      CALL PACK(3, 1)
01694  M01S01692.keyex   +++|
01695  M01S01693.keyex   +++|* CHECK IF THE MODEL REPORT COMES BACK FIRST.  IF SO, KEYS HAVE NOT
01696  M01S01694.keyex   +++|* BEEN DEFINED.  THE VALUE OF THE MODEL REPORT WILL NOT BE AFFECTED BY
01697  M01S01695.keyex   +++|* SYSTEM CHANGES.
01698  M01S01696.keyex   +++|
01699  M01S01697.keyex   +++|      READ(5,11,IOSTAT=IOS,ERR=14,END=14)OPRAM4
01700  M01S01698.keyex   +++|
01701  M01S01699.keyex   +++|* CHECK IF TYPED-AHEAD INPUT ENTERED.  NOTE THAT THE PROCESS LOOPS
01702  M01S01700.keyex   +++|* UNTIL ALL TYPED-AHEAD INPUT IS REMOVED, AND IS SATISFIED ONLY
01703  M01S01701.keyex   +++|* WHEN A CORRECT SEQUENCE IS RECEIVED FROM THE TERMINAL.
01704  M01S01702.keyex   +++|
01705  M01S01703.keyex   +++|13    IF (.NOT.((OPRAM4(3:7) .EQ. MODREP(1:5)).OR.
01706  M01S01704.keyex   +++|     .         (OPRAM4(3:5) .EQ. CTRLT(1:2)).OR.
01707  M01S01705.keyex   +++|     .         (OPRAM4(3:9) .EQ. VERSTR(1:7)))) THEN
01708  M01S01706.keyex   +++|        GOTO 12
01709  M01S01707.keyex   +++|      ENDIF
01710  M01S01708.keyex   +++|      CALL PACK(1, 0)
01711  M01S01709.keyex   +++|      CALL SEQPACK(ZENKEYB,3)
01712  M01S01710.keyex   +++|      CALL PACK(3, 1)
01713  M01S01711.keyex   +++|      IF(OPRAM4(3:7) .EQ. MODREP(1:5)) THEN
01714  M01S01712.keyex   +++|        LOADED = .FALSE.
01715  M01S01713.keyex   +++|      ELSE
01716  M01S01714.keyex   +++|        LOADED = .TRUE.
01717  M01S01715.keyex   +++|      ENDIF
01718  M01S01716.keyex   +++|      RETURN
01719  M01S01717.keyex   +++|
01720  M01S01718.keyex   +++|14    REWIND 5
01721  M01S01719.keyex   +++|      GOTO 13
01722  M01S01720.keyex   +++|      END
01723  M01S01721.keyex   +++|
01724  M01S01722.keyex   +++|
01725  M01S01723.keyex   +++|      SUBROUTINE WRSORC
01726  M01S01724.keyex   +++|
01727  M01S01725.keyex   +++|**    WRSORC - WRITE KEY DEFINITIONS TO THE SOURCE FILE.
01728  M01S01726.keyex   +++|*
01729  M01S01727.keyex   +++|*     *WRSORC* WILL WRITE THE KEY DEFINITIONS TO THE
01730  M01S01728.keyex   +++|*     SOURCE FILE.
01731  M01S01729.keyex   +++|*
01732  M01S01730.keyex   +++|*     CALL WRSORC
01733  M01S01731.keyex   +++|*
01734  M01S01732.keyex   +++|*     CALLS   PF.
01735  M01S01733.keyex   +++|
01736  M01S01734.keyex   +++|
01737  M01S01735.keyex   +++|      IMPLICIT INTEGER (A - Z)
01738  M01S01736.keyex   +++|
01739  M01S01737.keyex   +++|      PARAMETER     (NKEYS  = 45)
01740  M01S01738.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01741  M01S01739.keyex   +++|      PARAMETER     (NSETUP = 3)
01742  M01S01740.keyex   +++|*                            NUMBER OF TERMINAL SETUP CHARACTERISTICS
01743  M01S01741.keyex   +++|
01744  M01S01742.keyex   +++|      CHARACTER*7   FILENM
01745  M01S01743.keyex   +++|*                            KEY DEFINITIONS FILE
01746  M01S01744.keyex   +++|      CHARACTER*60  KEYDEF
01747  M01S01745.keyex   +++|*                            FUNCTION KEY DEFINITION
01748  M01S01746.keyex   +++|      CHARACTER*67  KEYS(NKEYS)
01749  M01S01747.keyex   +++|*                            LABEL AND KEYDEF
01750  M01S01748.keyex   +++|      CHARACTER*7   LABEL
01751  M01S01749.keyex   +++|*                            FUNCTION KEY LABEL
01752  M01S01750.keyex   +++|      CHARACTER*7   SETDATA(3)
01753  M01S01751.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
01754  M01S01752.keyex   +++|
01755  M01S01753.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01756  M01S01754.keyex   +++|
01757  M01S01755.keyex   +++|10    FORMAT(A7, 1X, A60)
01758  M01S01756.keyex   +++|20    FORMAT(A7)
01759  M01S01757.keyex   +++|
01760  M01S01758.keyex   +++|
01761  M01S01759.keyex   +++|      REWIND 1
01762  M01S01760.keyex   +++|
01763  M01S01761.keyex   +++|* WRITE FUNCTION KEY DEFINITIONS TO FILE.
01764  M01S01762.keyex   +++|
01765  M01S01763.keyex   +++|      DO 210 I = 1, NKEYS
01766  M01S01764.keyex   +++|        WRITE(1, 10) KEYS(I)(1:7), KEYS(I)(8:67)
01767  M01S01765.keyex   +++|210   CONTINUE
01768  M01S01766.keyex   +++|
01769  M01S01767.keyex   +++|* WRITE TERMINAL SETUP CHARACTERISTICS TO FILE.
01770  M01S01768.keyex   +++|
01771  M01S01769.keyex   +++|      DO 220 I = 1, NSETUP
01772  M01S01770.keyex   +++|        WRITE(1, 20) SETDATA(I)
01773  M01S01771.keyex   +++|220   CONTINUE
01774  M01S01772.keyex   +++|
01775  M01S01773.keyex   +++|      REWIND 1
01776  M01S01774.keyex   +++|      CALL PF('REPLACE', 'TAPE1', FILENM, 'NA', IGNORE)
01777  M01S01775.keyex   +++|      RETURN
01778  M01S01776.keyex   +++|      END
01779  M01S01777.keyex   +++|
01780  M01S01778.keyex   +++|
01781  M01S01779.keyex   +++|      SUBROUTINE ZSNDADD(ADDRESS)
01782  M01S01780.keyex   +++|
01783  M01S01781.keyex   +++|**    ZSNDADD - FORMAT AND PACK Z80 ADDRESS INTO BUFFER.
01784  M01S01782.keyex   +++|*
01785  M01S01783.keyex   +++|*     *ZSNDSEQ* FORMATS THE GIVEN ADDRESS INTO MODIFIED HEX
01786  M01S01784.keyex   +++|*     FORMAT AND PACKS IT INTO THE BUFFER BEING SENT TO THE
01787  M01S01785.keyex   +++|*     TERMINAL.
01788  M01S01786.keyex   +++|*
01789  M01S01787.keyex   +++|*     CALL ZSNDADD(ADDRESS)
01790  M01S01788.keyex   +++|*
01791  M01S01789.keyex   +++|*     ENTRY   ADDRESS - Z80 ADDRESS IN TERMINAL MEMORY.
01792  M01S01790.keyex   +++|*
01793  M01S01791.keyex   +++|*     CALLS   PACK.
01794  M01S01792.keyex   +++|
01795  M01S01793.keyex   +++|
01796  M01S01794.keyex   +++|      IMPLICIT INTEGER (A - Z)
01797  M01S01795.keyex   +++|
01798  M01S01796.keyex   +++|
01799  M01S01797.keyex   +++|      BOOLEAN      ADDRESS
01800  M01S01798.keyex   +++|*                            Z80 ADDRESS IN TERMINAL MEMORY
01801  M01S01799.keyex   +++|
01802  M01S01800.keyex   +++|
01803  M01S01801.keyex   +++|      CALL BYTE(SHIFT(AND(ADDRESS, Z"FF00"), -8), U1ADDR, L1ADDR)
01804  M01S01802.keyex   +++|      CALL BYTE(AND(ADDRESS, Z"00FF"), U2ADDR, L2ADDR)
01805  M01S01803.keyex   +++|      CALL PACK(2, U1ADDR)
01806  M01S01804.keyex   +++|      CALL PACK(2, L1ADDR)
01807  M01S01805.keyex   +++|      CALL PACK(2, U2ADDR)
01808  M01S01806.keyex   +++|      CALL PACK(2, L2ADDR)
01809  M01S01807.keyex   +++|      RETURN
01810  M01S01808.keyex   +++|      END
01811  M01S01809.keyex   +++|
01812  M01S01810.keyex   +++|
01813  M01S01811.keyex   +++|      SUBROUTINE ZSNDCHR(ZCHAR)
01814  M01S01812.keyex   +++|
01815  M01S01813.keyex   +++|**    ZSNDCHR - FORMAT AND PACK Z80 CHARACTER INTO BUFFER.
01816  M01S01814.keyex   +++|*
01817  M01S01815.keyex   +++|*     *ZSNDCHR* FORMATS THE GIVEN Z80 CHARACTER INTO MODIFIED HEX
01818  M01S01816.keyex   +++|*     FORMAT AND PACKS IT INTO THE BUFFER BEING SENT TO THE
01819  M01S01817.keyex   +++|*     TERMINAL.
01820  M01S01818.keyex   +++|*
01821  M01S01819.keyex   +++|*     CALL ZSNDCHR(ZCHAR)
01822  M01S01820.keyex   +++|*
01823  M01S01821.keyex   +++|*     ENTRY   ZCHAR - Z80 CHARACTER.
01824  M01S01822.keyex   +++|*
01825  M01S01823.keyex   +++|*     CALLS   PACK.
01826  M01S01824.keyex   +++|
01827  M01S01825.keyex   +++|
01828  M01S01826.keyex   +++|      IMPLICIT INTEGER (A - Z)
01829  M01S01827.keyex   +++|
01830  M01S01828.keyex   +++|
01831  M01S01829.keyex   +++|      INTEGER      TEMP1
01832  M01S01830.keyex   +++|*                            Z80 UPPER BYTE
01833  M01S01831.keyex   +++|      INTEGER      TEMP2
01834  M01S01832.keyex   +++|*                            Z80 LOWER BYTE
01835  M01S01833.keyex   +++|      INTEGER      ZCHAR
01836  M01S01834.keyex   +++|*                            Z80 CHARACTER
01837  M01S01835.keyex   +++|
01838  M01S01836.keyex   +++|
01839  M01S01837.keyex   +++|      CALL BYTE(ZCHAR, TEMP1, TEMP2)
01840  M01S01838.keyex   +++|      CALL PACK(2, TEMP1)
01841  M01S01839.keyex   +++|      CALL PACK(2, TEMP2)
01842  M01S01840.keyex   +++|      RETURN
01843  M01S01841.keyex   +++|      END
01844  M01S01842.keyex   +++|
01845  M01S01843.keyex   +++|
01846  M01S01844.keyex   +++|      SUBROUTINE ZSNDSEQ(ZARRAY,ZLENGTH)
01847  M01S01845.keyex   +++|
01848  M01S01846.keyex   +++|**    ZSNDSEQ - FORMAT AND PACK Z80 CODE SEQUENCE INTO BUFFER.
01849  M01S01847.keyex   +++|*
01850  M01S01848.keyex   +++|*     *ZSNDSEQ* FORMATS THE Z80 CODE TO A MODIFIED HEX FORMAT
01851  M01S01849.keyex   +++|*     AND THEN PACKS THE SEQUENCE INTO THE BUFFER THAT IS TO
01852  M01S01850.keyex   +++|*     BE SENT TO THE TERMINAL.
01853  M01S01851.keyex   +++|*
01854  M01S01852.keyex   +++|*     CALL ZSNDSEQ(ZARRAY,ZLENGTH)
01855  M01S01853.keyex   +++|*
01856  M01S01854.keyex   +++|*     ENTRY   ZARRAY - Z80 CODE ARRAY TO BE FORMATTED AND PACKED.
01857  M01S01855.keyex   +++|*             ZLENGTH - LENGTH OF THE ARRAY(SEQUENCE).
01858  M01S01856.keyex   +++|*
01859  M01S01857.keyex   +++|*     CALLS   ZSNDCHR.
01860  M01S01858.keyex   +++|
01861  M01S01859.keyex   +++|
01862  M01S01860.keyex   +++|      IMPLICIT INTEGER (A - Z)
01863  M01S01861.keyex   +++|
01864  M01S01862.keyex   +++|
01865  M01S01863.keyex   +++|      PARAMETER    (MAXSEQ = 50)
01866  M01S01864.keyex   +++|*                            MAXIMUM LENGTH OF SEQUENCE
01867  M01S01865.keyex   +++|
01868  M01S01866.keyex   +++|      BOOLEAN      ZARRAY(MAXSEQ)
01869  M01S01867.keyex   +++|*                            Z80 CODE SEQUENCE
01870  M01S01868.keyex   +++|      INTEGER      ZLENGTH
01871  M01S01869.keyex   +++|*                            LENGTH OF THE Z80 CODE SEQUENCE
01872  M01S01870.keyex   +++|
01873  M01S01871.keyex   +++|
01874  M01S01872.keyex   +++|      DO 100 I = 1, ZLENGTH
01875  M01S01873.keyex   +++|        CALL ZSNDCHR(ZARRAY(I))
01876  M01S01874.keyex   +++| 100  CONTINUE
01877  M01S01875.keyex   +++|      RETURN
01878  M01S01876.keyex   +++|      END
01879  M01S01877.keyex   +++|
01880  M01S01878.keyex   +++|
01881  M01S01879.keyex   +++|      SUBROUTINE Z80CODE
01882  M01S01880.keyex   +++|
01883  M01S01881.keyex   +++|**    Z80CODE - LOAD Z80 CONTROLWARE INTO TERMINAL.
01884  M01S01882.keyex   +++|*
01885  M01S01883.keyex   +++|*     *Z80CODE* STORES THE Z80 ROUTINES *PUSH*, *POP*,
01886  M01S01884.keyex   +++|*     *RESET*, AND *LABEL* INTO THE TERMINAL, AND THEN
01887  M01S01885.keyex   +++|*     DEFINES SEVERAL VIRTUAL KEYS WITH THE ADDRESSES OF
01888  M01S01886.keyex   +++|*     THE LOADED CONTROLWARE.  LATER, WHEN THE KEY IS
01889  M01S01887.keyex   +++|*     INVOKED, THE TERMINAL KNOWS THAT IT CONTAINS THE
01890  M01S01888.keyex   +++|*     ADDRESS OF THE LOADED CONTROLWARE, AND BEGINS
01891  M01S01889.keyex   +++|*     EXECUTION OF THE LOADED Z80 ROUTINES.
01892  M01S01890.keyex   +++|*
01893  M01S01891.keyex   +++|*     THE SOURCE FOR THE FOLLOWING HARDCODED ROUTINES IS
01894  M01S01892.keyex   +++|*     CONTAINED ON THE MAINTENANCE PL AS DECKNAME *KEYUTIL*.
01895  M01S01893.keyex   +++|*
01896  M01S01894.keyex   +++|*     TO REPRODUCE THE Z80 BINARY CODES, RUN THE Z80 VARIANT
01897  M01S01895.keyex   +++|*     OF COMPASS AGAINST THE Z80 ROUTINES IN *KEYUTIL*, THEN
01898  M01S01896.keyex   +++|*     HAND TRANSLATE THE CODE INTO THE ROUTINES BELOW.
01899  M01S01897.keyex   +++|*
01900  M01S01898.keyex   +++|*     CALL Z80CODE
01901  M01S01899.keyex   +++|*
01902  M01S01900.keyex   +++|*     CALLS   PACK, SEQPACK.
01903  M01S01901.keyex   +++|*
01904  M01S01902.keyex   +++|*     NOTES   THE SOURCE FOR THE Z80 BINARY IS PROVIDED HERE.  THIS
01905  M01S01903.keyex   +++|*             SOURCE IS ASSEMBLED USING A Z80 ASSEMBLER, AND THE
01906  M01S01904.keyex   +++|*             BINARY CODES PRODUCED ARE THEN PLACED INTO THE *FORTRAN*
01907  M01S01905.keyex   +++|*             DATA STATEMENTS.
01908  M01S01906.keyex   +++|
01909  M01S01907.keyex   +++|
01910  M01S01908.keyex   +++|      IMPLICIT INTEGER (A - Z)
01911  M01S01909.keyex   +++|
01912  M01S01910.keyex   +++|      PARAMETER    (LZPUSH = 27)
01913  M01S01911.keyex   +++|*                            LENGTH OF THE Z80 PUSH ROUTINE
01914  M01S01912.keyex   +++|      PARAMETER    (LZPOP = 24)
01915  M01S01913.keyex   +++|*                            LENGTH OF THE Z80 POP ROUTINE
01916  M01S01914.keyex   +++|      PARAMETER    (LZRESET = 30)
01917  M01S01915.keyex   +++|*                            LENGTH OF THE Z80 RESET ROUTINE
01918  M01S01916.keyex   +++|      PARAMETER    (LZLABEL = 29)
01919  M01S01917.keyex   +++|*                            LENGTH OF THE Z80 LABEL ROUTINE
01920  M01S01918.keyex   +++|      PARAMETER    (LZVERFY = 6)
01921  M01S01919.keyex   +++|*                            LENGTH OF THE Z80 VERIFY ROUTINE
01922  M01S01920.keyex   +++|      PARAMETER    (LKEYC = 5)
01923  M01S01921.keyex   +++|*                            DIMENSION FOR THE *KEYC* ARRAY
01924  M01S01922.keyex   +++|
01925  M01S01923.keyex   +++|      BOOLEAN      ZABSLOC
01926  M01S01924.keyex   +++|*                            ABSOLUTE LOCATION OF Z80 ROUTINES
01927  M01S01925.keyex   +++|      BOOLEAN      ZCARRET(1)
01928  M01S01926.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
01929  M01S01927.keyex   +++|      BOOLEAN      ZCONSEQ(4)
01930  M01S01928.keyex   +++|*                            HEX SEQUENCE FOR CONTROLWARE SEQUENCE
01931  M01S01929.keyex   +++|      BOOLEAN      ZPUSH(LZPUSH)
01932  M01S01930.keyex   +++|*                            HEX ARRAY FOR PUSH ROUTINE
01933  M01S01931.keyex   +++|      BOOLEAN      ZPOP(LZPOP)
01934  M01S01932.keyex   +++|*                            HEX ARRAY FOR POP ROUTINE
01935  M01S01933.keyex   +++|      BOOLEAN      ZRESET(LZRESET)
01936  M01S01934.keyex   +++|*                            HEX ARRAY FOR RESET ROUTINE
01937  M01S01935.keyex   +++|      BOOLEAN      ZLABEL(LZLABEL)
01938  M01S01936.keyex   +++|*                            HEX ARRAY FOR LABEL ROUTINE
01939  M01S01937.keyex   +++|      BOOLEAN      ZVERFY(LZVERFY)
01940  M01S01938.keyex   +++|*                            HEX ARRAY FOR VERIFY ROUTINE
01941  M01S01939.keyex   +++|      INTEGER      KEYC(LKEYC, 2)
01942  M01S01940.keyex   +++|*                            ARRAY FOR Z80 CODE
01943  M01S01941.keyex   +++|
01944  M01S01942.keyex   +++|      DATA    ZABSLOC  / Z"D100" /
01945  M01S01943.keyex   +++|      DATA    ZCARRET  / Z"0D" /
01946  M01S01944.keyex   +++|      DATA    ZCONSEQ  / Z"1E", Z"09", Z"70", Z"32" /
01947  M01S01945.keyex   +++|      DATA    ZPUSH    /
01948  M01S01946.keyex   +++|
01949  M01S01947.keyex   +++|* Z80 ROUTINE TO PUSH FUNCTION KEY DEFINITION TABLE IN TERMINAL.
01950  M01S01948.keyex   +++|
01951  M01S01949.keyex   +++|     .  Z"11", Z"76", Z"D1", Z"01", Z"F0", Z"00", Z"21", Z"E0", Z"D7"
01952  M01S01950.keyex   +++|     ., Z"ED", Z"B0", Z"3A", Z"47", Z"E0", Z"32", Z"66", Z"D2", Z"3A"
01953  M01S01951.keyex   +++|     ., Z"B9", Z"E0", Z"32", Z"67", Z"D2", Z"CD", Z"33", Z"D1", Z"C9"
01954  M01S01952.keyex   +++|     ./
01955  M01S01953.keyex   +++|
01956  M01S01954.keyex   +++|      DATA    ZPOP    /
01957  M01S01955.keyex   +++|
01958  M01S01956.keyex   +++|* Z80 ROUTINE TO POP FUNCTION KEY DEFINITION TABLE IN TERMINAL.
01959  M01S01957.keyex   +++|
01960  M01S01958.keyex   +++|     .  Z"21", Z"76", Z"D1", Z"01", Z"F0", Z"00", Z"11", Z"E0", Z"D7"
01961  M01S01959.keyex   +++|     ., Z"ED", Z"B0", Z"3A", Z"66", Z"D2", Z"32", Z"47", Z"E0", Z"3A"
01962  M01S01960.keyex   +++|     ., Z"67", Z"D2", Z"32", Z"B9", Z"E0", Z"C9"
01963  M01S01961.keyex   +++|     ./
01964  M01S01962.keyex   +++|
01965  M01S01963.keyex   +++|      DATA    ZRESET  /
01966  M01S01964.keyex   +++|
01967  M01S01965.keyex   +++|* Z80 ROUTINE TO RESET FUNCTION KEY DEFINITION TABLE IN TERMINAL.
01968  M01S01966.keyex   +++|
01969  M01S01967.keyex   +++|     .  Z"3A", Z"47", Z"E0", Z"F6", Z"02", Z"32", Z"47", Z"E0", Z"3E"
01970  M01S01968.keyex   +++|     ., Z"00", Z"32", Z"B9", Z"E0", Z"01", Z"F3", Z"00", Z"0B", Z"0B"
01971  M01S01969.keyex   +++|     ., Z"0B", Z"78", Z"B1", Z"C8", Z"21", Z"DD", Z"D7", Z"09", Z"36"
01972  M01S01970.keyex   +++|     ., Z"30", Z"18", Z"F2"
01973  M01S01971.keyex   +++|     ./
01974  M01S01972.keyex   +++|
01975  M01S01973.keyex   +++|      DATA    ZLABEL  /
01976  M01S01974.keyex   +++|
01977  M01S01975.keyex   +++|* Z80 ROUTINE TO DISPLAY RESIDENT KEY LABELS.
01978  M01S01976.keyex   +++|
01979  M01S01977.keyex   +++|     .  Z"3A", Z"DD", Z"D8", Z"67", Z"3A", Z"DE", Z"D8", Z"6F", Z"46"
01980  M01S01978.keyex   +++|     ., Z"78", Z"FE", Z"FF", Z"CA", Z"68", Z"D1", Z"E5", Z"CD", Z"87"
01981  M01S01979.keyex   +++|     ., Z"00", Z"E1", Z"23", Z"18", Z"F1", Z"06", Z"0D", Z"CD", Z"87"
01982  M01S01980.keyex   +++|     ., Z"00", Z"C9"
01983  M01S01981.keyex   +++|     ./
01984  M01S01982.keyex   +++|
01985  M01S01983.keyex   +++|      DATA    ZVERFY  /
01986  M01S01984.keyex   +++|
01987  M01S01985.keyex   +++|* Z80 ROUTINE TO SEND VERIFICATION CHARACTER TO HOST.
01988  M01S01986.keyex   +++|
01989  M01S01987.keyex   +++|     .  Z"06", Z"41", Z"CD", Z"87", Z"00", Z"C9" /
01990  M01S01988.keyex   +++|
01991  M01S01989.keyex   +++|      DATA  (KEYC(I, 1), KEYC(I, 2), I = 1, LKEYC)/
01992  M01S01990.keyex   +++|
01993  M01S01991.keyex   +++|* ADDRESS OF Z80 ROUTINE *PUSH* IS STORED IN KEY 70.
01994  M01S01992.keyex   +++|
01995  M01S01993.keyex   +++|     .        Z"70",      Z"D100"
01996  M01S01994.keyex   +++|
01997  M01S01995.keyex   +++|* ADDRESS OF Z80 ROUTINE *POP* IS STORED IN KEY 71.
01998  M01S01996.keyex   +++|
01999  M01S01997.keyex   +++|     .,       Z"71",      Z"D11B"
02000  M01S01998.keyex   +++|
02001  M01S01999.keyex   +++|* ADDRESS OF Z80 ROUTINE *RESET* IS STORED IN KEY 72.
02002  M01S02000.keyex   +++|
02003  M01S02001.keyex   +++|     .,       Z"72",      Z"D133"
02004  M01S02002.keyex   +++|
02005  M01S02003.keyex   +++|* ADDRESS OF Z80 ROUTINE *LABEL* IS STORED IN KEY 73.
02006  M01S02004.keyex   +++|
02007  M01S02005.keyex   +++|     .,       Z"73",      Z"D151"
02008  M01S02006.keyex   +++|
02009  M01S02007.keyex   +++|* ADDRESS OF Z80 ROUTINE *VERIFY* IS STORED IN KEY 75.
02010  M01S02008.keyex   +++|
02011  M01S02009.keyex   +++|     .,       Z"75",      Z"D16E"
02012  M01S02010.keyex   +++|     ./
02013  M01S02011.keyex   +++|
02014  M01S02012.keyex   +++|
02015  M01S02013.keyex   +++|*NOTIFY THE TERMINAL OF FOLLOWING CONTROL SEQUENCE.
02016  M01S02014.keyex   +++|
02017  M01S02015.keyex   +++|      CALL SEQPACK(ZCONSEQ,4)
02018  M01S02016.keyex   +++|
02019  M01S02017.keyex   +++|* STORE ADDRESS FOR THE Z80 PROGRAM.
02020  M01S02018.keyex   +++|
02021  M01S02019.keyex   +++|      ADDR = ZABSLOC
02022  M01S02020.keyex   +++|      CALL ZSNDADD(ADDR)
02023  M01S02021.keyex   +++|
02024  M01S02022.keyex   +++|* STORE Z80 CONTROLWARE ROUTINES IN CONSECUTIVE MEMORY AT *ZABSLOC*.
02025  M01S02023.keyex   +++|
02026  M01S02024.keyex   +++|      CALL ZSNDSEQ(ZPUSH, LZPUSH)
02027  M01S02025.keyex   +++|      CALL ZSNDSEQ(ZPOP, LZPOP)
02028  M01S02026.keyex   +++|      CALL ZSNDSEQ(ZRESET, LZRESET)
02029  M01S02027.keyex   +++|      CALL ZSNDSEQ(ZLABEL, LZLABEL)
02030  M01S02028.keyex   +++|      CALL ZSNDSEQ(ZVERFY, LZVERFY)
02031  M01S02029.keyex   +++|      CALL SEQPACK(ZCARRET,1)
02032  M01S02030.keyex   +++|
02033  M01S02031.keyex   +++|* STORE ADDRESSES OF Z80 ROUTINES AT VIRTUAL 7X KEY DEFINITIONS.
02034  M01S02032.keyex   +++|
02035  M01S02033.keyex   +++|      DO 110 I = 1, LKEYC
02036  M01S02034.keyex   +++|         ADDR = KEYC(I, 2)
02037  M01S02035.keyex   +++|         ZCONSEQ(3) = KEYC(I, 1)
02038  M01S02036.keyex   +++|         CALL SEQPACK(ZCONSEQ,4)
02039  M01S02037.keyex   +++|         CALL ZSNDADD(ADDR)
02040  M01S02038.keyex   +++|         CALL SEQPACK(ZCARRET,1)
02041  M01S02039.keyex   +++|110   CONTINUE
02042  M01S02040.keyex   +++|      RETURN
02043  M01S02041.keyex   +++|      END
02044  M01S02042.keyex   +++|          IDENT  PLT
02045  M01S02043.keyex   +++|          ENTRY  PLT
02046  M01S02044.keyex   +++|          ENTRY  PROMPT
02047  M01S02045.keyex   +++|          ENTRY  ERR
02048  M01S02046.keyex   +++|          ENTRY  RFL=
02049  M01S02047.keyex   +++|          SPACE  4,10
02050  M01S02048.keyex   +++|*         COMMON DECKS.
02051  M01S02049.keyex   +++|*CALL     COMCMAC
02052  M01S02050.keyex   +++| PLT      SPACE 4,30
02053  M01S02051.keyex   +++|**        PLT - PANEL LOADER TABLE.
02054  M01S02052.keyex   +++|*
02055  M01S02053.keyex   +++|*         *PLT* FORCES THE CYBER LOADER TO INCLUDE THE SMF PANELS
02056  M01S02054.keyex   +++|*         AS STATICALLY LOADED PANELS, AND ARE THEREFORE STATISFIED
02057  M01S02055.keyex   +++|*         BY THE LOADER AT LOAD TIME.
02058  M01S02056.keyex   +++|*
02059  M01S02057.keyex   +++|*         NOTE   THE FIRST TWO STATEMENTS INDICATE THE NUMBER OF
02060  M01S02058.keyex   +++|*                PANELS.
02061  M01S02059.keyex   +++|
02062  M01S02060.keyex   +++|
02063  M01S02061.keyex   +++|PLT       VFD    60/8
02064  M01S02062.keyex   +++|          VFD    60/8
02065  M01S02063.keyex   +++|          VFD    60/7LKEYPAN1
02066  M01S02064.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN1
02067  M01S02065.keyex   +++|          VFD    60/7LKEYPAN2
02068  M01S02066.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN2
02069  M01S02067.keyex   +++|          VFD    60/7LKEYPAN3
02070  M01S02068.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN3
02071  M01S02069.keyex   +++|          VFD    60/7LKEYPAN4
02072  M01S02070.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN4
02073  M01S02071.keyex   +++|          VFD    60/7LKEYPAN5
02074  M01S02072.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN5
02075  M01S02073.keyex   +++|          VFD    60/7LKEYPAN6
02076  M01S02074.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN6
02077  M01S02075.keyex   +++|          VFD    60/7LKEYPAN7
02078  M01S02076.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN7
02079  M01S02077.keyex   +++|          VFD    60/7LKEYPAN8
02080  M01S02078.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN8
02081  M01S02079.keyex   +++| PROMPT   SPACE 4,15
02082  M01S02080.keyex   +++|**        PROMPT - TURN FORTRAN PROMPTS OFF.
02083  M01S02081.keyex   +++|*
02084  M01S02082.keyex   +++|*         *PROMPT* TURNS OFF THE FORTRAN PROMPTS IN *CHECK* AND
02085  M01S02083.keyex   +++|*         *DISPLAY* ROUTINES.
02086  M01S02084.keyex   +++|*
02087  M01S02085.keyex   +++|*         CALLS  PROMPT.
02088  M01S02086.keyex   +++|
02089  M01S02087.keyex   +++|
02090  M01S02088.keyex   +++|PROMPT    SUBR
02091  M01S02089.keyex   +++|          PROMPT OFF
02092  M01S02090.keyex   +++|          EQ     PROMPTX     RETURN
02093  M01S02091.keyex   +++|
02094  M01S02092.keyex   +++| ERR      SPACE 4,30
02095  M01S02093.keyex   +++|**        ERR - ERROR PROCESSING.
02096  M01S02094.keyex   +++|*
02097  M01S02095.keyex   +++|*         *ERR* RESETS THE *R1* REGISTER WHICH IS USED AS AN ERROR FLAG
02098  M01S02096.keyex   +++|*         IN THE *CCL* PROCEDURE.
02099  M01S02097.keyex   +++|*
02100  M01S02098.keyex   +++|*         ENTRY  THE USER IS IN LINE MODE OR DOES NOT HAVE A *721* TYPE
02101  M01S02099.keyex   +++|*                TERMINAL.
02102  M01S02100.keyex   +++|*
02103  M01S02101.keyex   +++|*         EXIT   R1 = 1
02104  M01S02102.keyex   +++|*
02105  M01S02103.keyex   +++|*         USES   X - 1, 6
02106  M01S02104.keyex   +++|*                A - 1, 6
02107  M01S02105.keyex   +++|*
02108  M01S02106.keyex   +++|*         CALLS  GETJCR, SETJCR.
02109  M01S02107.keyex   +++|
02110  M01S02108.keyex   +++|
02111  M01S02109.keyex   +++|ERR       SUBR
02112  M01S02110.keyex   +++|          GETJCR REGS
02113  M01S02111.keyex   +++|          SA1    REGS
02114  M01S02112.keyex   +++|          SX6    X1+1
02115  M01S02113.keyex   +++|          SA6    REGS
02116  M01S02114.keyex   +++|          SETJCR REGS
02117  M01S02115.keyex   +++|          EQ     ERRX        RETURN
02118  M01S02116.keyex   +++|
02119  M01S02117.keyex   +++|REGS      CON    0
02120  M01S02118.keyex   +++|
02121  M01S02119.keyex   +++|*         BLANK COMMON BLOCK IS USED TO CREATE AN RFL= ENTRY POINT.
02122  M01S02120.keyex   +++|
02123  M01S02121.keyex   +++|          USE    //
02124  M01S02122.keyex   +++|RFL=      BSS    0
02125  M01S02123.keyex   +++|
02126  M01S02124.keyex   +++|          END
cdc/nos2.source/opl.opl871/deck/keyex.txt ยท Last modified: by 127.0.0.1