User Tools

Site Tools


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

Deck KEYEX

Library Member Format: MODIFY

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M00S00001.keyex   +++|      PROGRAM KEYEX(TAPE1=100,OUTPUT=100,TTFILE=100
00002  M00S00002.keyex   +++|     .    ,INPUT=100, KEYPRNT=100, TAPE6 = KEYPRNT
00003  M00S00003.keyex   +++|     .    ,TAPE2=OUTPUT,TAPE3=TTFILE,TAPE5=INPUT)
00004  M00S00004.keyex   +++|
00005  M00S00005.keyex   +++|***   KEY DEFINITION UTILITY.
Line S00001 Modification History
M01 (Added by) 281l803
Seq #  *Modification Id* Act 
----------------------------+
00006  M01S00001.281l803 +++|*
00007  M01S00002.281l803 +++|*         COPYRIGHT CONTROL DATA SYSTEMS INC.  1992.
00008  M00S00006.keyex   +++|*
00009  M00S00007.keyex   +++|*     THE *KEY* COMMAND WAS DESIGNED TO BE USED ONLY ON THE VIKING 721
00010  M00S00008.keyex   +++|*     TERMINAL.  IT MAKES USE OF THE PROGRAMMABLE FUNCTION KEYS ON THE
00011  M00S00009.keyex   +++|*     VIKING 721.  YOU CAN CREATE OR EDIT DEFINITIONS FOR FUNCTION
00012  M00S00010.keyex   +++|*     KEYS AND SET TERMINAL CHARACTERISTICS.
00013  M00S00011.keyex   +++|*
00014  M00S00012.keyex   +++|*     W. F. ANSLEY  83/06/01.  CYBER INTERFACE AND PANELS.
00015  M00S00013.keyex   +++|*     S. L. KSANDER 83/06/01.  721 INTERFACE AND Z80 CODE.
00016  M00S00014.keyex   +++|*                   83/11/07.  UPDATED TO INCLUDE THE CHECK AND PRINT
00017  M00S00015.keyex   +++|*                              COMMANDS.
00018  M00S00016.keyex   +++|*                   84/02/29.  UPDATE TO INCLUDE THE PF COMMANDS.
00019  M00S00017.keyex   +++|*     M. D. LEMBCKE 84/10/30.  REVISED AND STANDARDIZED.
00020  M00S00018.keyex   +++|*     M. L. SWANSON 85/02/05.
00021  M00S00019.keyex   +++|
00022  M00S00020.keyex   +++|*** THE COMMAND FORMATS ARE:  KEY,OPTION.   OR
00023  M00S00021.keyex   +++|*                             KEY(OPTION,FILENAME)
00024  M00S00022.keyex   +++|*
00025  M00S00023.keyex   +++|*     WHERE OPTION CAN BE ONE OF THE FOLLOWING:
00026  M00S00024.keyex   +++|*
00027  M00S00025.keyex   +++|*     HELP     GIVES THE USER COMPLETE INFORMATION ON THE *KEY*
00028  M00S00026.keyex   +++|*              COMMAND AND ITS USE.  *FILENAME* IS IGNORED WITH
00029  M00S00027.keyex   +++|*              THIS OPTION.
00030  M00S00028.keyex   +++|*
00031  M00S00029.keyex   +++|*     CHECK    CHECKS TO SEE IF THE FUNCTION KEYS ARE ALREADY
00032  M00S00030.keyex   +++|*              LOADED.  IF NOT, A LOAD WILL BE EXECUTED.  THIS
00033  M00S00031.keyex   +++|*              WILL SAVE TIME FOR THE USER OPERATING AT A LOW
00034  M00S00032.keyex   +++|*              BAUD RATE.
00035  M00S00033.keyex   +++|*
00036  M00S00034.keyex   +++|*              NOTE:  A GOOD USE FOR THIS OPTION IS IN A PROLOGUE
00037  M00S00035.keyex   +++|*                     AT LOGIN TIME (REFER TO THE UPROC COMMAND).
00038  M00S00036.keyex   +++|*
00039  M00S00037.keyex   +++|*     DISPLAY  DISPLAYS THE FIRST SIXTEEN FUNCTION KEY LABELS THAT
00040  M00S00038.keyex   +++|*              ARE CURRENTLY STORED IN THE 721.
00041  M00S00039.keyex   +++|*
00042  M00S00040.keyex   +++|*     DEFAULT  SETS THE KEY DEFINITIONS FOR THE HELP, EDIT AND STOP
00043  M00S00041.keyex   +++|*              KEY TO THE NOS SYSTEM DEFAULTS.  *FILENAME* IS IGNORED
00044  M00S00042.keyex   +++|*              FOR THIS OPTION.  THE DEFAULTS SET ARE:  HELP KEY =
00045  M00S00043.keyex   +++|*              HELP.  EDIT KEY = FSE.  STOP KEY = CTRL T/NEXT.
00046  M00S00044.keyex   +++|*
00047  M00S00045.keyex   +++|*     EDIT     ALLOWS THE USER TO UPDATE THEIR EXISTING KEY
00048  M00S00046.keyex   +++|*              DEFINITIONS ON *FILENAME*.  IF *FILENAME* IS
00049  M00S00047.keyex   +++|*              NOT SPECIFIED, A FILE NAMED *KEYDEFS* WILL
00050  M00S00048.keyex   +++|*              BE CREATED AND SAVED UNDER THE USER'S USERNAME.
00051  M00S00049.keyex   +++|*
00052  M00S00050.keyex   +++|*     LOAD     THIS WILL DOWNLINE LOAD THE KEY DEFINITIONS FROM THE
00053  M00S00051.keyex   +++|*              SPECIFIED FILE INTO THE TERMINAL WITHOUT ANY USER
00054  M00S00052.keyex   +++|*              INTERACTION.  IF NO FILE IS SPECIFIED, THE DEFAULT
00055  M00S00053.keyex   +++|*              FILE *KEYDEFS* WILL BE USED.
00056  M00S00054.keyex   +++|*
00057  M00S00055.keyex   +++|*     PRINT    THIS WILL LIST ONLY THE KEYS THAT ARE DEFINED ON THE
00058  M00S00056.keyex   +++|*              SPECIFIED FILE.  THE OUTPUT WILL BE PLACED ON THE
00059  M00S00057.keyex   +++|*              LOCAL FILE *KEYPRNT*.  IF NO FILE IS SPECIFIED,
00060  M00S00058.keyex   +++|*              *KEYDEFS* IS USED.  THIS DOES NOT NECESSARILY LIST
00061  M00S00059.keyex   +++|*              THE KEY DEFINITIONS THAT ARE CURRENTLY LOADED INTO
00062  M00S00060.keyex   +++|*              THE TERMINAL, JUST THOSE THAT ARE ON THE SPECIFIED
00063  M00S00061.keyex   +++|*              FILE.
00064  M00S00062.keyex   +++|*
00065  M00S00063.keyex   +++|*     FILENAME  THE DEFAULT FILE NAME IS *KEYDEFS*.
00066  M00S00064.keyex   +++|
00067  M00S00065.keyex   +++|***   ERROR MESSAGES.
00068  M00S00066.keyex   +++|*
00069  M00S00067.keyex   +++|*     * PLEASE ENTER THE SYSTEM COMMAND SCREEN(721)
00070  M00S00068.keyex   +++|*       AND RE-ENTER THE KEY COMMAND.*
00071  M00S00069.keyex   +++|*             THE PROGRAM HAS DETECTED THE TERMINAL MODEL NAME DOES
00072  M00S00070.keyex   +++|*             NOT BEGIN WITH THE PREFIX "721" AND HENCE THE TERMINAL
00073  M00S00071.keyex   +++|*             HAS NOT BEEN RECOGNIZED AS A VIKING X.  NO PROCESSING
00074  M00S00072.keyex   +++|*             OCCURS IN THIS CASE.
00075  M00S00073.keyex   +++|
00076  M00S00074.keyex   +++|***   MESSAGES.
00077  M00S00075.keyex   +++|*
00078  M00S00076.keyex   +++|*     * FUNCTION KEYS ARE ALREADY LOADED.*
00079  M00S00077.keyex   +++|*             OUTPUT BY ROUTINE *CHECK* TO SIGNIFY NO LOAD WAS
00080  M00S00078.keyex   +++|*             PROCESSED.
00081  M00S00079.keyex   +++|*
00082  M00S00080.keyex   +++|*     * FUNCTION KEYS ARE NOT LOADED.*
00083  M00S00081.keyex   +++|*             OUTPUT BY ROUTINE *DISPLAY* IF FUNCTION KEYS HAVE NOT
00084  M00S00082.keyex   +++|*             BEEN DEFINED.
00085  M00S00083.keyex   +++|*
00086  M00S00084.keyex   +++|*     * FUNCTION KEYS HAVE BEEN LOADED.*
00087  M00S00085.keyex   +++|*             OUTPUT BY ROUTINE *LOAD* IF FUNCTION KEYS WERE LOADED.
00088  M00S00086.keyex   +++|*
00089  M00S00087.keyex   +++|*     * THE FUNCTION KEYS *EDIT*, *HELP*, AND *STOP* HAVE BEEN LOADED.*
00090  M00S00088.keyex   +++|*             OUTPUT BY ROUTINE *DEFAULT* IF *EDIT*, *HELP*, *STOP*
00091  M00S00089.keyex   +++|*             KEYS WERE LOADED.
00092  M00S00090.keyex   +++|*
00093  M00S00091.keyex   +++|*     * THE KEY DEFINITIONS FILE HAS BEEN REPLACED.*
00094  M00S00092.keyex   +++|*             OUTPUT BY ROUTINE *EDIT* IF KEY DEFINITIONS FILE IS
00095  M00S00093.keyex   +++|*             REPLACED.
00096  M00S00094.keyex   +++|*
00097  M00S00095.keyex   +++|*     * THE LIST OF DEFINED FUNCTION KEYS IS ON THE LOCAL FILE
00098  M00S00096.keyex   +++|*             *KEYPRNT*.* - OUTPUT BY ROUTINE *PRINT* AS AN INFORM-
00099  M00S00097.keyex   +++|*             ATIVE MESSAGE TO THE USER.
00100  M00S00098.keyex   +++|
00101  M00S00099.keyex   +++|***   *KEY* FILES.
00102  M00S00100.keyex   +++|*
00103  M00S00101.keyex   +++|*     THE FOLLOWING DECKS/FILES ARE ASSOCIATED WITH THE *KEY* UTILITY.
00104  M00S00102.keyex   +++|*
00105  M00S00103.keyex   +++|*     PROCEDURES:
00106  M00S00104.keyex   +++|*             KEY       *CCL* PROCEDURE.
00107  M00S00105.keyex   +++|*
00108  M00S00106.keyex   +++|*     CODE:
00109  M00S00107.keyex   +++|*             KEYEX     KEY EXECUTIVE PROGRAM.
00110  M00S00108.keyex   +++|*             KEYPANS   SCREEN FORMATTING PANELS.
00111  M00S00109.keyex   +++|*             KEYUTIL   Z80 SOURCE CODE.
00112  M00S00110.keyex   +++|
00113  M00S00111.keyex   +++|
00114  M00S00112.keyex   +++|
00115  M00S00113.keyex   +++|
00116  M00S00114.keyex   +++|**    MAIN PROGRAM.
00117  M00S00115.keyex   +++|
00118  M00S00116.keyex   +++|**    KEYEX - EXECUTIVE PROGRAM FOR *KEY* UTILITY.
00119  M00S00117.keyex   +++|*
00120  M00S00118.keyex   +++|*     *KEYEX* SETS UP DEFAULTS IN COMMON BLOCK *INFO*, CRACKS
00121  M00S00119.keyex   +++|*     COMMAND PARAMETERS, AND PROCESSES USER SPECIFIED OPTIONS.
00122  M00S00120.keyex   +++|*
00123  M00S00121.keyex   +++|*     KEYEX(OPTION, FILENAME)
00124  M00S00122.keyex   +++|*
00125  M00S00123.keyex   +++|*     ENTRY   OPTION - USER SPECIFIED OPTION.
00126  M00S00124.keyex   +++|*             FILENAME - OPTIONAL FILE NAME.
00127  M00S00125.keyex   +++|*
00128  M00S00126.keyex   +++|*     EXIT    *CCL* GLOBAL VARIABLE *R1* = 1 IF TERMINAL TYPE IS
00129  M00S00127.keyex   +++|*             INCORRECT.
00130  M00S00128.keyex   +++|*
00131  M00S00129.keyex   +++|*     CALLS   CHECK, CHKTERM, DEFAULT, DISPLAY, EDIT, HELP, LOAD,
00132  M00S00130.keyex   +++|*             PRINT, SYSKEYS.
00133  M00S00131.keyex   +++|
00134  M00S00132.keyex   +++|
00135  M00S00133.keyex   +++|      IMPLICIT INTEGER (A - Z)
00136  M00S00134.keyex   +++|
00137  M00S00135.keyex   +++|      PARAMETER    (NKEYS = 45)
00138  M00S00136.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00139  M00S00137.keyex   +++|
00140  M00S00138.keyex   +++|      CHARACTER*7  OPTION
00141  M00S00139.keyex   +++|*                            OPTION SPECIFIED BY THE USER
00142  M00S00140.keyex   +++|      CHARACTER*7  FILENM
00143  M00S00141.keyex   +++|*                            KEY DEFINITIONS FILE
00144  M00S00142.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00145  M00S00143.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00146  M00S00144.keyex   +++|*                            7/ KEY LABEL, 60/ KEY DEFINITION
00147  M00S00145.keyex   +++|      CHARACTER*7  PARM
00148  M00S00146.keyex   +++|*                            PARAMETER NAME
00149  M00S00147.keyex   +++|      CHARACTER*7  SETDATA(3)
00150  M00S00148.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
00151  M00S00149.keyex   +++|
00152  M00S00150.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00153  M00S00151.keyex   +++|
00154  M00S00152.keyex   +++|
00155  M00S00153.keyex   +++|* SET UP DEFAULTS IN COMMON BLOCK AND GET INPUT PARAMETERS.
00156  M00S00154.keyex   +++|
00157  M00S00155.keyex   +++|      CALL SYSKEYS
00158  M00S00156.keyex   +++|      CALL GETPARM(PARM,OPTION,I)
00159  M00S00157.keyex   +++|      CALL GETPARM(PARM,FILENM,I)
00160  M00S00158.keyex   +++|
00161  M00S00159.keyex   +++|* CHECK TERMINAL TYPE AND PROCESS OPTION SPECIFIED BY THE USER.
00162  M00S00160.keyex   +++|
00163  M00S00161.keyex   +++|      CALL CHKTERM
00164  M00S00162.keyex   +++|      IF(OPTION .EQ. 'CHECK  ') THEN
00165  M00S00163.keyex   +++|        CALL CHECK
00166  M00S00164.keyex   +++|      ELSE IF(OPTION .EQ. 'DEFAULT') THEN
00167  M00S00165.keyex   +++|        CALL DEFAULT
00168  M00S00166.keyex   +++|      ELSE IF(OPTION .EQ. 'DISPLAY') THEN
00169  M00S00167.keyex   +++|        CALL DISPLAY
00170  M00S00168.keyex   +++|      ELSE IF(OPTION .EQ. 'EDIT   ') THEN
00171  M00S00169.keyex   +++|        CALL EDIT
00172  M00S00170.keyex   +++|      ELSE IF(OPTION .EQ. 'HELP   ') THEN
00173  M00S00171.keyex   +++|        CALL HELP
00174  M00S00172.keyex   +++|      ELSE IF(OPTION .EQ. 'LOAD   ') THEN
00175  M00S00173.keyex   +++|        CALL LOAD
00176  M00S00174.keyex   +++|      ELSE IF(OPTION .EQ. 'PRINT  ') THEN
00177  M00S00175.keyex   +++|        CALL PRINT
00178  M00S00176.keyex   +++|      ENDIF
00179  M00S00177.keyex   +++|      CLOSE(1,STATUS='DELETE')
00180  M00S00178.keyex   +++|      CLOSE(3,STATUS='DELETE')
00181  M00S00179.keyex   +++|      END
00182  M00S00180.keyex   +++|
00183  M00S00181.keyex   +++|
00184  M00S00182.keyex   +++|      SUBROUTINE BYTE (CHAR, UBYTE, LBYTE)
00185  M00S00183.keyex   +++|
00186  M00S00184.keyex   +++|**    BYTE - CONVERT ADDRESS TO Z80 FORMAT.
00187  M00S00185.keyex   +++|*
00188  M00S00186.keyex   +++|*     *BYTE* TAKES *CHAR* AND DIVIDES IT, CHANGING THE ADDRESS INTO
00189  M00S00187.keyex   +++|*     721 Z80 FORMAT AND RETURNS THE RESULT IN *UBYTE* AND *LBYTE*.
00190  M00S00188.keyex   +++|*
00191  M00S00189.keyex   +++|*     CALL BYTE(CHAR, UBYTE, LBYTE)
00192  M00S00190.keyex   +++|*
00193  M00S00191.keyex   +++|*     ENTRY   CHAR - CHARACTER BYTE ADDRESS.
00194  M00S00192.keyex   +++|*
00195  M00S00193.keyex   +++|*     EXIT    UBYTE - THE UPPER HALF ADDRESS WITH THE PREFIX *60*.
00196  M00S00194.keyex   +++|*             LBYTE - THE LOWER HALF ADDRESS WITH THE PREFIX *20*.
00197  M00S00195.keyex   +++|*
00198  M00S00196.keyex   +++|*     NOTE    THE Z80 MICRO REQUIRES A 16 BIT ADDRESS WITH THE UPPER
00199  M00S00197.keyex   +++|*             BYTE BEFORE THE LOWER BYTE.
00200  M00S00198.keyex   +++|
00201  M00S00199.keyex   +++|
00202  M00S00200.keyex   +++|      IMPLICIT INTEGER (A - Z)
00203  M00S00201.keyex   +++|
00204  M00S00202.keyex   +++|      BOOLEAN      ZPREFIX
00205  M00S00203.keyex   +++|*                            Z80 CODE PREFIX
00206  M00S00204.keyex   +++|      BOOLEAN      Z20CODE
00207  M00S00205.keyex   +++|*                            *20* PREFIX FOR Z80 ADDRESS
00208  M00S00206.keyex   +++|      BOOLEAN      Z60CODE
00209  M00S00207.keyex   +++|*                            *60* PREFIX FOR Z80 ADDRESS
00210  M00S00208.keyex   +++|
00211  M00S00209.keyex   +++|      DATA  ZPREFIX / Z"800" /
00212  M00S00210.keyex   +++|      DATA  Z20CODE / Z"20" /
00213  M00S00211.keyex   +++|      DATA  Z60CODE / Z"60" /
00214  M00S00212.keyex   +++|
00215  M00S00213.keyex   +++|      C     = AND(CHAR, Z"F0")
00216  M00S00214.keyex   +++|      UBYTE = SHIFT(C, -4)     + Z20CODE + ZPREFIX
00217  M00S00215.keyex   +++|      LBYTE = AND(CHAR, Z"0F") + Z60CODE + ZPREFIX
00218  M00S00216.keyex   +++|      RETURN
00219  M00S00217.keyex   +++|      END
00220  M00S00218.keyex   +++|
00221  M00S00219.keyex   +++|
00222  M00S00220.keyex   +++|      SUBROUTINE CHECK
00223  M00S00221.keyex   +++|
00224  M00S00222.keyex   +++|**    CHECK - CHECK IF FUNCTION KEYS HAVE BEEN LOADED.
00225  M00S00223.keyex   +++|*
00226  M00S00224.keyex   +++|*     *CHECK* QUERIES THE TERMINAL TO DETERMINE IF Z80 CONTROLWARE
00227  M00S00225.keyex   +++|*     AND KEY DEFINITIONS ARE LOADED INTO THE TERMINAL.
00228  M00S00226.keyex   +++|*
00229  M00S00227.keyex   +++|*     CALL CHECK
00230  M00S00228.keyex   +++|*
00231  M00S00229.keyex   +++|*     CALLS   LOAD, VERLOAD.
00232  M00S00230.keyex   +++|*
00233  M00S00231.keyex   +++|*     MESSAGES
00234  M00S00232.keyex   +++|*             FUNCTION KEYS HAVE BEEN LOADED.
00235  M00S00233.keyex   +++|
00236  M00S00234.keyex   +++|
00237  M00S00235.keyex   +++|      IMPLICIT INTEGER (A - Z)
00238  M00S00236.keyex   +++|
00239  M00S00237.keyex   +++|      LOGICAL      LOADED
00240  M00S00238.keyex   +++|*                            CONTROLWARE LOADED FLAG
00241  M00S00239.keyex   +++|
00242  M00S00240.keyex   +++|      DATA  LOADED  / .FALSE. /
00243  M00S00241.keyex   +++|
00244  M00S00242.keyex   +++|10    FORMAT('FUNCTION KEYS ARE ALREADY LOADED.')
00245  M00S00243.keyex   +++|
00246  M00S00244.keyex   +++|      CALL VERLOAD(LOADED)
00247  M00S00245.keyex   +++|
00248  M00S00246.keyex   +++|      IF (.NOT.LOADED) THEN
00249  M00S00247.keyex   +++|        CALL LOAD
00250  M00S00248.keyex   +++|      ELSE
00251  M00S00249.keyex   +++|        WRITE(2,10)
00252  M00S00250.keyex   +++|        ENDFILE 2
00253  M00S00251.keyex   +++|      ENDIF
00254  M00S00252.keyex   +++|      RETURN
00255  M00S00253.keyex   +++|      END
00256  M00S00254.keyex   +++|
00257  M00S00255.keyex   +++|
00258  M00S00256.keyex   +++|      SUBROUTINE CHKTERM
00259  M00S00257.keyex   +++|
00260  M00S00258.keyex   +++|**    CHKTERM - CHECK TERMINAL MODEL NAME.
00261  M00S00259.keyex   +++|*
00262  M00S00260.keyex   +++|*     *CHKTERM* VERIFIES THAT THE FIRST THREE CHARACTERS OF THE
00263  M00S00261.keyex   +++|*     TERMINAL MODEL NAME SPECIFIED TO THE SCREEN OR LINE COMMAND
00264  M00S00262.keyex   +++|*     WAS "721".
00265  M00S00263.keyex   +++|*
00266  M00S00264.keyex   +++|*     CALL CHKTERM
00267  M00S00265.keyex   +++|*
00268  M00S00266.keyex   +++|*     ERROR   *ERR* IS CALLED IF THE TERMINAL MODEL IS NOT PREFIXED
00269  M00S00267.keyex   +++|*             BY "721".
00270  M00S00268.keyex   +++|*
00271  M00S00269.keyex   +++|*     CALLS   ERR, SFGETN.
00272  M00S00270.keyex   +++|*
00273  M00S00271.keyex   +++|*     MESSAGES
00274  M00S00272.keyex   +++|*             PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.
00275  M00S00273.keyex   +++|*             AND RE-ENTER THE KEY COMMAND.
00276  M00S00274.keyex   +++|*             STOP.  FIX ERROR.
00277  M00S00275.keyex   +++|
00278  M00S00276.keyex   +++|
00279  M00S00277.keyex   +++|      IMPLICIT INTEGER (A - Z)
00280  M00S00278.keyex   +++|
00281  M00S00279.keyex   +++|      CHARACTER*7  MODNAME
00282  M00S00280.keyex   +++|*                            TERMINAL MODEL NAME.
00283  M00S00281.keyex   +++|      CHARACTER*3  PREFIX
00284  M00S00282.keyex   +++|*                            THREE CHARACTER PREFIX
00285  M00S00283.keyex   +++|      CHARACTER*3  PRE721
00286  M00S00284.keyex   +++|*                            CHARACTER STRING PREFIX FOR 721
00287  M00S00285.keyex   +++|
00288  M00S00286.keyex   +++|      EQUIVALENCE  (MODNAME, PREFIX)
00289  M00S00287.keyex   +++|
00290  M00S00288.keyex   +++|      DATA  PRE721 / '721' /
00291  M00S00289.keyex   +++|
00292  M00S00290.keyex   +++|10    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00293  M00S00291.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00294  M00S00292.keyex   +++|
00295  M00S00293.keyex   +++|* GET TERMINAL MODEL NAME.
00296  M00S00294.keyex   +++|
00297  M00S00295.keyex   +++|      CALL SFGETN(MODNAME)
00298  M00S00296.keyex   +++|
00299  M00S00297.keyex   +++|* IF PREFIX IS NOT '721', NOTIFY USER OF ERROR.
00300  M00S00298.keyex   +++|
00301  M00S00299.keyex   +++|      IF (PREFIX .NE. PRE721) THEN
00302  M00S00300.keyex   +++|        WRITE(2,10)
00303  M00S00301.keyex   +++|        CALL ERR
00304  M00S00302.keyex   +++|        STOP 'FIX ERROR.'
00305  M00S00303.keyex   +++|      ENDIF
00306  M00S00304.keyex   +++|      RETURN
00307  M00S00305.keyex   +++|      END
00308  M00S00306.keyex   +++|
00309  M00S00307.keyex   +++|
00310  M00S00308.keyex   +++|      SUBROUTINE CLEAR
00311  M00S00309.keyex   +++|
00312  M00S00310.keyex   +++|**    CLEAR - CLEAR THE USER DEFINED FUNCTION KEYS IN THE TERMINAL.
00313  M00S00311.keyex   +++|*
00314  M00S00312.keyex   +++|*     *CLEAR* CLEARS THE FUNCTION KEY DEFINITIONS WITHIN THE
00315  M00S00313.keyex   +++|*     TERMINAL BY EXECUTING A HOST-LOADED CONTROLWARE ROUTINE
00316  M00S00314.keyex   +++|*     THAT REINITIALIZES THE TERMINALS KEY DEFINITION TABLE.
00317  M00S00315.keyex   +++|*
00318  M00S00316.keyex   +++|*     CALL CLEAR
00319  M00S00317.keyex   +++|*
00320  M00S00318.keyex   +++|*     CALLS   PACK, SEQPACK.
00321  M00S00319.keyex   +++|
00322  M00S00320.keyex   +++|
00323  M00S00321.keyex   +++|      IMPLICIT INTEGER (A - Z)
00324  M00S00322.keyex   +++|
00325  M00S00323.keyex   +++|
00326  M00S00324.keyex   +++|      BOOLEAN      ZCARRET(1)
00327  M00S00325.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
00328  M00S00326.keyex   +++|      BOOLEAN      ZRESETR(3)
00329  M00S00327.keyex   +++|*                            HEX SEQUENCE TO INVOKE RESET ROUTINE
00330  M00S00328.keyex   +++|
00331  M00S00329.keyex   +++|
00332  M00S00330.keyex   +++|      DATA  ZCARRET / Z"0D" /
00333  M00S00331.keyex   +++|      DATA  ZRESETR / Z"1E", Z"12", Z"72" /
00334  M00S00332.keyex   +++|
00335  M00S00333.keyex   +++|* RESET KEYS TO THE DEFAULT 721 SETTINGS BY DOING A HOST EXECUTE
00336  M00S00334.keyex   +++|* OF THE HOST LOADED Z80 CONTROLWARE ROUTINE *RESET*.
00337  M00S00335.keyex   +++|
00338  M00S00336.keyex   +++|      CALL PACK(1, 0)
00339  M00S00337.keyex   +++|      CALL SEQPACK(ZRESETR,3)
00340  M00S00338.keyex   +++|      CALL SEQPACK(ZCARRET,1)
00341  M00S00339.keyex   +++|      CALL PACK(3, 1)
00342  M00S00340.keyex   +++|      RETURN
00343  M00S00341.keyex   +++|      END
00344  M00S00342.keyex   +++|
00345  M00S00343.keyex   +++|
00346  M00S00344.keyex   +++|      SUBROUTINE DEFAULT
00347  M00S00345.keyex   +++|
00348  M00S00346.keyex   +++|**    DEFAULT - LOAD DEFAULT FUNCTION KEYS.
00349  M00S00347.keyex   +++|*
00350  M00S00348.keyex   +++|*     *DEFAULT* LOADS THE *EDIT*, *HELP*, AND *STOP* FUNCTION KEYS.
00351  M00S00349.keyex   +++|*
00352  M00S00350.keyex   +++|*     CALL DEFAULT
00353  M00S00351.keyex   +++|*
00354  M00S00352.keyex   +++|*     EXIT    *KEYS* AND *SETDATA* ARE SET TO DEFAULT VALUES.
00355  M00S00353.keyex   +++|*
00356  M00S00354.keyex   +++|*     CALLS   CLEAR, SEND.
00357  M00S00355.keyex   +++|*
00358  M00S00356.keyex   +++|*     MESSAGES
00359  M00S00357.keyex   +++|*             THE FUNCTION KEYS *EDIT*, *HELP*, AND *STOP* HAVE BEEN
00360  M00S00358.keyex   +++|*             LOADED.
00361  M00S00359.keyex   +++|
00362  M00S00360.keyex   +++|
00363  M00S00361.keyex   +++|      IMPLICIT INTEGER (A - Z)
00364  M00S00362.keyex   +++|
00365  M00S00363.keyex   +++|10    FORMAT(' THE FUNCTION KEYS *EDIT*, *HELP*, AND *STOP* HAVE ',
00366  M00S00364.keyex   +++|     .'BEEN LOADED.')
00367  M00S00365.keyex   +++|
00368  M00S00366.keyex   +++|* CLEAR THE CURRENT FUNCTION KEY DEFINITIONS.
00369  M00S00367.keyex   +++|
00370  M00S00368.keyex   +++|      CALL CLEAR
00371  M00S00369.keyex   +++|
00372  M00S00370.keyex   +++|* SEND DEFAULT DEFINITIONS TO TERMINAL.
00373  M00S00371.keyex   +++|
00374  M00S00372.keyex   +++|      CALL SEND
00375  M00S00373.keyex   +++|      WRITE(2,10)
00376  M00S00374.keyex   +++|      ENDFILE 2
00377  M00S00375.keyex   +++|      RETURN
00378  M00S00376.keyex   +++|      END
00379  M00S00377.keyex   +++|
00380  M00S00378.keyex   +++|
00381  M00S00379.keyex   +++|      SUBROUTINE DISPLAY
00382  M00S00380.keyex   +++|
00383  M00S00381.keyex   +++|**    DISPLAY - DISPLAY FUNCTION KEYS.
00384  M00S00382.keyex   +++|*
00385  M00S00383.keyex   +++|*     *DISPLAY* DISPLAYS THE FIRST SIXTEEN FUNCTION KEY LABELS THAT
00386  M00S00384.keyex   +++|*     ARE CURRENTLY LOADED IN THE TERMINAL.
00387  M00S00385.keyex   +++|*
00388  M00S00386.keyex   +++|*     CALL DISPLAY
00389  M00S00387.keyex   +++|*
00390  M00S00388.keyex   +++|*     EXIT    THE FIRST SIXTEEN KEY LABELS DISPLAYED USING
00391  M00S00389.keyex   +++|*             A SCREEN FORMATTING PANEL.
00392  M00S00390.keyex   +++|*
00393  M00S00391.keyex   +++|*     CALLS   ERR, PACK, RDSORC, SEQPACK, SFCLOS, SFOPEN, SFSSHO,
00394  M00S00392.keyex   +++|*             VERLOAD.
00395  M00S00393.keyex   +++|*
00396  M00S00394.keyex   +++|*     MESSAGES
00397  M00S00395.keyex   +++|*             FUNCTION KEYS ARE NOT LOADED.
00398  M00S00396.keyex   +++|*
00399  M00S00397.keyex   +++|*             PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.
00400  M00S00398.keyex   +++|*             AND RE-ENTER THE KEY COMMAND.
00401  M00S00399.keyex   +++|*             STOP.  FIX ERROR.
00402  M00S00400.keyex   +++|
00403  M00S00401.keyex   +++|
00404  M00S00402.keyex   +++|      IMPLICIT INTEGER (A - Z)
00405  M00S00403.keyex   +++|
00406  M00S00404.keyex   +++|      PARAMETER    (NKEYS = 45)
00407  M00S00405.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00408  M00S00406.keyex   +++|
00409  M00S00407.keyex   +++|      BOOLEAN      ZDISKEY(3)
00410  M00S00408.keyex   +++|*                            HEX SEQUENCE TO DISABLE KEYBOARD ENTRY
00411  M00S00409.keyex   +++|      BOOLEAN      ZENKEYB(3)
00412  M00S00410.keyex   +++|*                            HEX SEQUENCE TO ENABLE KEYBOARD ENTRY
00413  M00S00411.keyex   +++|      BOOLEAN      ZHOSTLC(3)
00414  M00S00412.keyex   +++|*                            HEX SEQUENCE FOR HOST LOADED CONTROLWARE
00415  M00S00413.keyex   +++|      BOOLEAN      ZMCUR80(3)
00416  M00S00414.keyex   +++|*                            HEX SEQUENCE TO MOVE CURSOR FOR 80 COLUMN
00417  M00S00415.keyex   +++|      BOOLEAN      ZMCUR32(5)
00418  M00S00416.keyex   +++|*                            HEX SEQUENCE TO MOVE CURSOR FOR 132 COLUMN
00419  M00S00417.keyex   +++|      CHARACTER*7  FILENM
00420  M00S00418.keyex   +++|*                            KEY DEFINITIONS FILE
00421  M00S00419.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00422  M00S00420.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00423  M00S00421.keyex   +++|      CHARACTER*112 OPRAM4
00424  M00S00422.keyex   +++|*                            STRING OF USER LABELS
00425  M00S00423.keyex   +++|      CHARACTER*7  PANEL
00426  M00S00424.keyex   +++|*                            TEMPORARY PANEL NAME
00427  M00S00425.keyex   +++|      CHARACTER*7  PANEL7
00428  M00S00426.keyex   +++|*                            DISPLAY PANEL FOR 80 CHARACTERS/LINE
00429  M00S00427.keyex   +++|      CHARACTER*7  PANEL8
00430  M00S00428.keyex   +++|*                            DISPLAY PANEL FOR 132 CHARACTERS/LINE
00431  M00S00429.keyex   +++|      CHARACTER*7  SETDATA(3)
00432  M00S00430.keyex   +++|*                            TERMINAL CHARACTERISTICS
00433  M00S00431.keyex   +++|      CHARACTER*7  STR80
00434  M00S00432.keyex   +++|*                            80 CHARACTERS STRING
00435  M00S00433.keyex   +++|      CHARACTER*7  STR132
00436  M00S00434.keyex   +++|*                            132 CHARACTERS STRING
00437  M00S00435.keyex   +++|      LOGICAL      LOADED
00438  M00S00436.keyex   +++|*                            CONTROLWARE LOADED FLAG
00439  M00S00437.keyex   +++|
00440  M00S00438.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00441  M00S00439.keyex   +++|
00442  M00S00440.keyex   +++|      DATA  OPRAM4 / ' ' /
00443  M00S00441.keyex   +++|      DATA  PANEL7 / 'KEYPAN7' /
00444  M00S00442.keyex   +++|      DATA  PANEL8 / 'KEYPAN8' /
00445  M00S00443.keyex   +++|      DATA  ZDISKEY / Z"1E", Z"12", Z"4D" /
00446  M00S00444.keyex   +++|      DATA  ZENKEYB / Z"1E", Z"12", Z"4E" /
00447  M00S00445.keyex   +++|      DATA  ZHOSTLC / Z"1E", Z"12", Z"73" /
00448  M00S00446.keyex   +++|      DATA  ZMCUR80 / Z"02", Z"20", Z"23"/
00449  M00S00447.keyex   +++|      DATA  ZMCUR32 / Z"02", Z"7E", Z"20", Z"20", Z"23" /
00450  M00S00448.keyex   +++|      DATA  STR80   / '80     ' /
00451  M00S00449.keyex   +++|      DATA  STR132  / '132    ' /
00452  M00S00450.keyex   +++|      DATA  LOADED  / .FALSE. /
00453  M00S00451.keyex   +++|
00454  M00S00452.keyex   +++|12    FORMAT(A112)
00455  M00S00453.keyex   +++|13    FORMAT(' FUNCTION KEYS ARE NOT LOADED.')
00456  M00S00454.keyex   +++|14    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00457  M00S00455.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00458  M00S00456.keyex   +++|
00459  M00S00457.keyex   +++|
00460  M00S00458.keyex   +++|      CALL VERLOAD(LOADED)
00461  M00S00459.keyex   +++|
00462  M00S00460.keyex   +++|      IF (.NOT.LOADED) THEN
00463  M00S00461.keyex   +++|        CALL PACK(1, 0)
00464  M00S00462.keyex   +++|        WRITE(2,13)
00465  M00S00463.keyex   +++|      ELSE
00466  M00S00464.keyex   +++|        CALL RDSORC
00467  M00S00465.keyex   +++|        CALL PACK(1, 0)
00468  M00S00466.keyex   +++|        CALL SEQPACK(ZHOSTLC,3)
00469  M00S00467.keyex   +++|        CALL PACK(3, 1)
00470  M00S00468.keyex   +++|
00471  M00S00469.keyex   +++|* READ THE 721 LABELS FROM THE TERMINAL.
00472  M00S00470.keyex   +++|
00473  M00S00471.keyex   +++|        READ(5, 12) OPRAM4
00474  M00S00472.keyex   +++|
00475  M00S00473.keyex   +++|* DISPLAY THE LABELS USING THE CORRECT SIZE PANEL.
00476  M00S00474.keyex   +++|
00477  M00S00475.keyex   +++|        IF(SETDATA(3) .EQ. STR132) THEN
00478  M00S00476.keyex   +++|          PANEL = PANEL8
00479  M00S00477.keyex   +++|        ELSE
00480  M00S00478.keyex   +++|          PANEL = PANEL7
00481  M00S00479.keyex   +++|        ENDIF
00482  M00S00480.keyex   +++|
00483  M00S00481.keyex   +++|        CALL SFOPEN(PANEL, STAT)
00484  M00S00482.keyex   +++|        IF (STAT .NE. 0) THEN
00485  M00S00483.keyex   +++|          CALL ERR
00486  M00S00484.keyex   +++|          STOP 'SF ERROR.'
00487  M00S00485.keyex   +++|        ELSE
00488  M00S00486.keyex   +++|          CALL SFSWRI(PANEL, OPRAM4)
00489  M00S00487.keyex   +++|          CALL SFCLOS(PANEL, 2)
00490  M00S00488.keyex   +++|
00491  M00S00489.keyex   +++|* POSITION CURSOR UNDER THE DISPLAY OF LABELS.
00492  M00S00490.keyex   +++|
00493  M00S00491.keyex   +++|          CALL PACK(1, 0)
00494  M00S00492.keyex   +++|          IF(SETDATA(3) .EQ. STR80)  THEN
00495  M00S00493.keyex   +++|            CALL SEQPACK(ZMCUR80,3)
00496  M00S00494.keyex   +++|          ELSE
00497  M00S00495.keyex   +++|            CALL SEQPACK(ZMCUR32,5)
00498  M00S00496.keyex   +++|          ENDIF
00499  M00S00497.keyex   +++|
00500  M00S00498.keyex   +++|        ENDIF
00501  M00S00499.keyex   +++|
00502  M00S00500.keyex   +++|      ENDIF
00503  M00S00501.keyex   +++|      CALL SEQPACK(ZENKEYB,3)
00504  M00S00502.keyex   +++|      CALL PACK(3, 1)
00505  M00S00503.keyex   +++|      RETURN
00506  M00S00504.keyex   +++|      END
00507  M00S00505.keyex   +++|
00508  M00S00506.keyex   +++|
00509  M00S00507.keyex   +++|      SUBROUTINE EDIT
00510  M00S00508.keyex   +++|
00511  M00S00509.keyex   +++|**    EDIT - EDIT FUNCTION KEYS.
00512  M00S00510.keyex   +++|*
00513  M00S00511.keyex   +++|*     *EDIT* ALLOWS THE USER TO DEFINE AND LOAD FUNCTION KEYS
00514  M00S00512.keyex   +++|*     AND SET TERMINAL CHARACTERISTICS.
00515  M00S00513.keyex   +++|*
00516  M00S00514.keyex   +++|*     CALL EDIT
00517  M00S00515.keyex   +++|*
00518  M00S00516.keyex   +++|*     EXIT    *PARM* AND *SETDATA* MAY BE MODIFIED.
00519  M00S00517.keyex   +++|*
00520  M00S00518.keyex   +++|*     CALLS   EDSETUP, ERR, LDSETUP, LOAD, RDSORC, SFCLOS, SFGETK,
00521  M00S00519.keyex   +++|*             SFOPEN, SFSSHO, SYSKEYS, WRSORC.
00522  M00S00520.keyex   +++|*
00523  M00S00521.keyex   +++|*     MESSAGES
00524  M00S00522.keyex   +++|*             THE KEY DEFINITIONS FILE HAS BEEN REPLACED.
00525  M00S00523.keyex   +++|*
00526  M00S00524.keyex   +++|*             FUNCTION KEYS HAVE BEEN LOADED.
00527  M00S00525.keyex   +++|
00528  M00S00526.keyex   +++|      IMPLICIT INTEGER (A - Z)
00529  M00S00527.keyex   +++|
00530  M00S00528.keyex   +++|      PARAMETER    (ORDHELP = 3)
00531  M00S00529.keyex   +++|*                            ORDINAL FOR THE HELP KEY
00532  M00S00530.keyex   +++|      PARAMETER    (ORDBKW = 8)
00533  M00S00531.keyex   +++|*                            ORDINAL FOR THE BKW FUNCTION KEY
00534  M00S00532.keyex   +++|      PARAMETER    (ORDFWD = 7)
00535  M00S00533.keyex   +++|*                            ORDINAL FOR THE FWD FUNCTION KEY
00536  M00S00534.keyex   +++|      PARAMETER    (ORDSTOP = 4)
00537  M00S00535.keyex   +++|*                            ORDINAL FOR THE STOP FUNCTION KEY
00538  M00S00536.keyex   +++|      PARAMETER    (NKEYS = 45)
00539  M00S00537.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00540  M00S00538.keyex   +++|      PARAMETER    (NPAN = 3)
00541  M00S00539.keyex   +++|*                            NUMBER OF EDIT PANELS
00542  M00S00540.keyex   +++|      PARAMETER    (NKEYSPP = 15)
00543  M00S00541.keyex   +++|*                            NUMBER OF KEYS DEFINABLE PER PANEL
00544  M00S00542.keyex   +++|
00545  M00S00543.keyex   +++|      DIMENSION    BASE(NPAN)
00546  M00S00544.keyex   +++|*                            FUNCTION KEYS DIVIDED IN THREE GROUPS
00547  M00S00545.keyex   +++|      CHARACTER*1  PAGE(NPAN)
00548  M00S00546.keyex   +++|*                            PAGE NUMBER OF PANEL
00549  M00S00547.keyex   +++|      CHARACTER*7  FILENM
00550  M00S00548.keyex   +++|*                            FILE NAME
00551  M00S00549.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00552  M00S00550.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00553  M00S00551.keyex   +++|      CHARACTER*5  LABELS(NPAN, NKEYSPP)
00554  M00S00552.keyex   +++|*                            FUNCTION KEY LABELS
00555  M00S00553.keyex   +++|      CHARACTER*7  P1
00556  M00S00554.keyex   +++|*                            BASIC INPUT PANEL
00557  M00S00555.keyex   +++|      CHARACTER*7  P2
00558  M00S00556.keyex   +++|*                            HELP PANEL
00559  M00S00557.keyex   +++|      CHARACTER*7  P3
00560  M00S00558.keyex   +++|*                            ASCII-HEX PANEL
00561  M00S00559.keyex   +++|      CHARACTER*1081 P1IVAR
00562  M00S00560.keyex   +++|*                            INPUT STRING FROM THE PANEL
00563  M00S00561.keyex   +++|      CHARACTER*1081 P1OVAR
00564  M00S00562.keyex   +++|*                            OUTPUT STRING FOR THE PANEL
00565  M00S00563.keyex   +++|      CHARACTER*72 P1I(NKEYSPP)
00566  M00S00564.keyex   +++|*                            INPUT STRING FROM THE PANEL
00567  M00S00565.keyex   +++|      CHARACTER*72 P1O(NKEYSPP)
00568  M00S00566.keyex   +++|*                            OUTPUT STRING FOR THE PANEL
00569  M00S00567.keyex   +++|      CHARACTER*1  P2VAR
00570  M00S00568.keyex   +++|*                            BLANK OUTPUT STRING
00571  M00S00569.keyex   +++|      CHARACTER*7  SETDATA(3)
00572  M00S00570.keyex   +++|*                            SETUP DATA.
00573  M00S00571.keyex   +++|      INTEGER      ORDINAL
00574  M00S00572.keyex   +++|*                            FUNCTION KEY VALUE
00575  M00S00573.keyex   +++|      INTEGER      TYPE
00576  M00S00574.keyex   +++|*                            TYPE OF FUNCTION KEY
00577  M00S00575.keyex   +++|*                            0 = PROGRAMMABLE FUNCTION KEY
00578  M00S00576.keyex   +++|*                            1 = LABELED FUNCTION KEY
00579  M00S00577.keyex   +++|
00580  M00S00578.keyex   +++|      EQUIVALENCE (P1I(1), P1IVAR(2:2))
00581  M00S00579.keyex   +++|      EQUIVALENCE (P1O(1), P1OVAR(2:2))
00582  M00S00580.keyex   +++|
00583  M00S00581.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00584  M00S00582.keyex   +++|
00585  M00S00583.keyex   +++|      DATA  PAGE / '1', '2', '3' /
00586  M00S00584.keyex   +++|      DATA  P1 / 'KEYPAN4' /
00587  M00S00585.keyex   +++|      DATA  P2 / 'KEYPAN3' /
00588  M00S00586.keyex   +++|      DATA  P3 / 'KEYPAN6' /
00589  M00S00587.keyex   +++|      DATA  BASE / 0, 15, 30 /
00590  M00S00588.keyex   +++|      DATA  P1I / 15* ' ' /
00591  M00S00589.keyex   +++|      DATA  P1O / 15* ' ' /
00592  M00S00590.keyex   +++|      DATA  P2VAR / ' ' /
00593  M00S00591.keyex   +++|      DATA  (LABELS(1, I), I = 1, NKEYSPP) /
00594  M00S00592.keyex   +++|     .  'F1   ', 'F2   ', 'F3   ', 'F4    ', 'F5    '
00595  M00S00593.keyex   +++|     ., 'F6   ', 'F7   ', 'F8   ', 'F9    ', 'F10   '
00596  M00S00594.keyex   +++|     ., 'F11  ', 'F12  ', 'F13  ', 'F14   ', 'F15   '
00597  M00S00595.keyex   +++|     ./
00598  M00S00596.keyex   +++|      DATA  (LABELS(2, I), I = 1, NKEYSPP) /
00599  M00S00597.keyex   +++|     .  'RTAB ', 'LTAB ', 'NEXT ', 'DOWN  ', 'UP    '
00600  M00S00598.keyex   +++|     ., 'FWD  ', 'BKW  ', 'HELP ', 'ERASE ', 'EDIT  '
00601  M00S00599.keyex   +++|     ., 'BACK ', 'LAB  ', 'DATA ', 'STOP  ', 'INSRT '
00602  M00S00600.keyex   +++|     ./
00603  M00S00601.keyex   +++|      DATA  (LABELS(3, I), I = 1, NKEYSPP) /
00604  M00S00602.keyex   +++|     .  'DLETE', 'CLEAR', 'PRINT', 'PAD 1 ', 'PAD 2 '
00605  M00S00603.keyex   +++|     ., 'PAD 3', 'PAD 4', 'PAD 5', 'PAD 6 ', 'PAD 7 '
00606  M00S00604.keyex   +++|     ., 'PAD 8', 'PAD 9', 'PAD 0', 'PAD , ', 'PAD . '
00607  M00S00605.keyex   +++|     ./
00608  M00S00606.keyex   +++|
00609  M00S00607.keyex   +++|11    FORMAT(' THE KEY DEFINITIONS FILE HAS BEEN REPLACED.')
00610  M00S00608.keyex   +++|12    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00611  M00S00609.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00612  M00S00610.keyex   +++|
00613  M00S00611.keyex   +++|
00614  M00S00612.keyex   +++|* READ USER DEFINITIONS FROM SOURCE FILE, IF ANY.
00615  M00S00613.keyex   +++|
00616  M00S00614.keyex   +++|      CALL RDSORC
00617  M00S00615.keyex   +++|
00618  M00S00616.keyex   +++|      CALL SFOPEN(P1, STAT)
00619  M00S00617.keyex   +++|      IF (STAT .NE. 0) THEN
00620  M00S00618.keyex   +++|        CALL ERR
00621  M00S00619.keyex   +++|        STOP 'SF ERROR.'
00622  M00S00620.keyex   +++|      ENDIF
00623  M00S00621.keyex   +++|
00624  M00S00622.keyex   +++|100   PANEL = 1
00625  M00S00623.keyex   +++|
00626  M00S00624.keyex   +++|* LOAD THE OUTPUT STRING VARIABLE FOR THE PANEL.  THE OUTPUT STRING
00627  M00S00625.keyex   +++|* IS COMPRISED OF THE KEY NAME, LABEL, AND DEFINITION.
00628  M00S00626.keyex   +++|
00629  M00S00627.keyex   +++|110   P1OVAR(1:1) = PAGE(PANEL)
00630  M00S00628.keyex   +++|
00631  M00S00629.keyex   +++|      DO 120 I = 1, NKEYSPP
00632  M00S00630.keyex   +++|        P1O(I)(01:05) = LABELS(PANEL, I)
00633  M00S00631.keyex   +++|        P1O(I)(06:12) = KEYS(BASE(PANEL) + I)(1:07)
00634  M00S00632.keyex   +++|        P1O(I)(13:72) = KEYS(BASE(PANEL) + I)(8:67)
00635  M00S00633.keyex   +++|120   CONTINUE
00636  M00S00634.keyex   +++|
00637  M00S00635.keyex   +++|* SHOW KEY DEFINITION PANEL.
00638  M00S00636.keyex   +++|
00639  M00S00637.keyex   +++|      CALL SFSSHO(P1, P1OVAR, P1IVAR)
00640  M00S00638.keyex   +++|
00641  M00S00639.keyex   +++|      DO 130 I = 1, NKEYSPP
00642  M00S00640.keyex   +++|        KEYS(BASE(PANEL) + I)(1:07) = P1I(I)(06:12)
00643  M00S00641.keyex   +++|        KEYS(BASE(PANEL) + I)(8:67) = P1I(I)(13:72)
00644  M00S00642.keyex   +++|130   CONTINUE
00645  M00S00643.keyex   +++|
00646  M00S00644.keyex   +++|* CHECK FOR THE LABELED KEYS *FWD*, *BKW*, AND *HELP*, IGNORING OTHERS.
00647  M00S00645.keyex   +++|
00648  M00S00646.keyex   +++|      CALL SFGETK(TYPE, ORDINAL)
00649  M00S00647.keyex   +++|      IF(TYPE    .EQ. 0) GOTO 140
00650  M00S00648.keyex   +++|      IF(ORDINAL .EQ. ORDFWD) GOTO 150
00651  M00S00649.keyex   +++|      IF(ORDINAL .EQ. ORDBKW) GOTO 160
00652  M00S00650.keyex   +++|      IF(ORDINAL .EQ. ORDHELP) GOTO 190
00653  M00S00651.keyex   +++|      IF (ORDINAL .EQ. ORDSTOP) GOTO 200
00654  M00S00652.keyex   +++|      GOTO 110
00655  M00S00653.keyex   +++|
00656  M00S00654.keyex   +++|* CHECK FOR  APPLICATION KEYS F1, F2, F3, F4, F5, F6, F7, F8, F9.
00657  M00S00655.keyex   +++|
00658  M00S00656.keyex   +++|140   GOTO (150,160,170,180,190,200,210,220,230) ORDINAL
00659  M00S00657.keyex   +++|      GOTO 110
00660  M00S00658.keyex   +++|
00661  M00S00659.keyex   +++|* F1 KEY:  FWD TO NEXT PANEL.
00662  M00S00660.keyex   +++|
00663  M00S00661.keyex   +++|150   PANEL = PANEL + 1
00664  M00S00662.keyex   +++|      IF (PANEL .EQ. NPAN+1) PANEL = 1
00665  M00S00663.keyex   +++|      GOTO 110
00666  M00S00664.keyex   +++|
00667  M00S00665.keyex   +++|* F2 KEY:  BKW TO LAST PANEL.
00668  M00S00666.keyex   +++|
00669  M00S00667.keyex   +++|160   PANEL = PANEL - 1
00670  M00S00668.keyex   +++|      IF (PANEL .LT. 1) PANEL = 3
00671  M00S00669.keyex   +++|      GOTO 110
00672  M00S00670.keyex   +++|
00673  M00S00671.keyex   +++|* F3 KEY: UNDO ALL CHANGES AND RESTART.
00674  M00S00672.keyex   +++|* REINITIALIZE *KEYS* AND *SETDATA*, AND GET USER DEFINITIONS IF ANY.
00675  M00S00673.keyex   +++|
00676  M00S00674.keyex   +++|170   CALL SYSKEYS
00677  M00S00675.keyex   +++|      CALL RDSORC
00678  M00S00676.keyex   +++|      GOTO 100
00679  M00S00677.keyex   +++|
00680  M00S00678.keyex   +++|* F4 KEY:  LOAD.
00681  M00S00679.keyex   +++|
00682  M00S00680.keyex   +++|180   CALL SFCLOS(P1, 1)
00683  M00S00681.keyex   +++|      CALL WRSORC
00684  M00S00682.keyex   +++|      CALL LOAD
00685  M00S00683.keyex   +++|      RETURN
00686  M00S00684.keyex   +++|
00687  M00S00685.keyex   +++|* F5 KEY:  SHOW HELP PANELS.
00688  M00S00686.keyex   +++|
00689  M00S00687.keyex   +++|190   CALL SFOPEN(P2,STAT)
00690  M00S00688.keyex   +++|      IF (STAT .NE. 0) THEN
00691  M00S00689.keyex   +++|        CALL ERR
00692  M00S00690.keyex   +++|        STOP 'SF ERROR.'
00693  M00S00691.keyex   +++|      ENDIF
00694  M00S00692.keyex   +++|      CALL SFSSHO(P2,P2VAR,P2VAR)
00695  M00S00693.keyex   +++|      CALL SFGETK(TYPE, ORDINAL)
00696  M00S00694.keyex   +++|      CALL SFCLOS(P2,0)
00697  M00S00695.keyex   +++|      IF ((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDSTOP)) GOTO 200
00698  M00S00696.keyex   +++|      GOTO 110
00699  M00S00697.keyex   +++|
00700  M00S00698.keyex   +++|* F6 KEY:  QUIT.
00701  M00S00699.keyex   +++|
00702  M00S00700.keyex   +++|200   CALL SFCLOS(P1,1)
00703  M00S00701.keyex   +++|      RETURN
00704  M00S00702.keyex   +++|
00705  M00S00703.keyex   +++|* F7 KEY:  QUIT AND REPLACE FILE.
00706  M00S00704.keyex   +++|
00707  M00S00705.keyex   +++|210   CALL SFCLOS(P1,1)
00708  M00S00706.keyex   +++|      CALL WRSORC
00709  M00S00707.keyex   +++|      CALL LDSETUP
00710  M00S00708.keyex   +++|      WRITE(2,11)
00711  M00S00709.keyex   +++|      RETURN
00712  M00S00710.keyex   +++|
00713  M00S00711.keyex   +++|* F8 KEY:  DISPLAY ASCII-HEX CHART.
00714  M00S00712.keyex   +++|
00715  M00S00713.keyex   +++|220   CALL SFOPEN(P3,STAT)
00716  M00S00714.keyex   +++|      IF (STAT .NE. 0) THEN
00717  M00S00715.keyex   +++|        CALL ERR
00718  M00S00716.keyex   +++|        STOP 'SF ERROR.'
00719  M00S00717.keyex   +++|      ENDIF
00720  M00S00718.keyex   +++|      CALL SFSREA(P3,P2VAR)
00721  M00S00719.keyex   +++|      CALL SFCLOS(P3,0)
00722  M00S00720.keyex   +++|      GOTO 110
00723  M00S00721.keyex   +++|
00724  M00S00722.keyex   +++|* F9 KEY:  SET UP TERMINAL CHARACTERISTICS.
00725  M00S00723.keyex   +++|
00726  M00S00724.keyex   +++|230   CALL EDSETUP
00727  M00S00725.keyex   +++|      GOTO 110
00728  M00S00726.keyex   +++|
00729  M00S00727.keyex   +++|      END
00730  M00S00728.keyex   +++|
00731  M00S00729.keyex   +++|
00732  M00S00730.keyex   +++|      SUBROUTINE EDSETUP
00733  M00S00731.keyex   +++|
00734  M00S00732.keyex   +++|**    EDSETUP - EDIT THE SETUP TERMINAL CHARACTERISTICS.
00735  M00S00733.keyex   +++|*
00736  M00S00734.keyex   +++|*     *EDSETUP* IS CALLED BY *EDIT* AND ALLOWS THE USER TO SET UP THE
00737  M00S00735.keyex   +++|*     TERMINAL CHARACTERISTICS FOR THE NUMBER PAD, SCREEN MODE, AND THE
00738  M00S00736.keyex   +++|*     NUMBER OF CHARACTERS PER LINE.
00739  M00S00737.keyex   +++|*
00740  M00S00738.keyex   +++|*     CALL EDSETUP
00741  M00S00739.keyex   +++|*
00742  M00S00740.keyex   +++|*     CALLS   SFCLOS, SFGETK, SFOPEN, SFSSHO.
00743  M00S00741.keyex   +++|
00744  M00S00742.keyex   +++|
00745  M00S00743.keyex   +++|      IMPLICIT INTEGER (A - Z)
00746  M00S00744.keyex   +++|
00747  M00S00745.keyex   +++|      PARAMETER    (NKEYS = 45)
00748  M00S00746.keyex   +++|*                            NUMBER OF DEFINABLE KEYS
00749  M00S00747.keyex   +++|      PARAMETER    (ORDFWD = 7)
00750  M00S00748.keyex   +++|*                            ORDINAL FOR THE FWD KEY
00751  M00S00749.keyex   +++|      PARAMETER    (ORDBKW = 1)
00752  M00S00750.keyex   +++|*                            ORDINAL FOR THE BKW KEY
00753  M00S00751.keyex   +++|      PARAMETER    (ORDSTOP = 4)
00754  M00S00752.keyex   +++|*                            ORDINAL FOR THE STOP KEY
00755  M00S00753.keyex   +++|
00756  M00S00754.keyex   +++|      CHARACTER*7  FILENM
00757  M00S00755.keyex   +++|*                            KEY DEFINITIONS FILE
00758  M00S00756.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
00759  M00S00757.keyex   +++|*                            FUNCTION KEY DEFINITIONS
00760  M00S00758.keyex   +++|      CHARACTER*7  PANEL4
00761  M00S00759.keyex   +++|*                            DISPLAY PANEL FOR *EDIT*
00762  M00S00760.keyex   +++|      CHARACTER*7  PANEL5
00763  M00S00761.keyex   +++|*                            DISPLAY PANEL FOR SETUP
00764  M00S00762.keyex   +++|      CHARACTER*7  SETDATA(3)
00765  M00S00763.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
00766  M00S00764.keyex   +++|      CHARACTER*7  STRDEF
00767  M00S00765.keyex   +++|*                            DEFAULT STRING
00768  M00S00766.keyex   +++|      CHARACTER*21 PANELIO
00769  M00S00767.keyex   +++|*                            INPUT/OUTPUT STRING FROM THE PANEL
00770  M00S00768.keyex   +++|      CHARACTER*21 TEMPSTR
00771  M00S00769.keyex   +++|*                            TEMPORARY TERMINAL CHARACTERISTICS
00772  M00S00770.keyex   +++|      INTEGER      ORDINAL
00773  M00S00771.keyex   +++|*                            FUNCTION KEY VALUE
00774  M00S00772.keyex   +++|      INTEGER      TYPE
00775  M00S00773.keyex   +++|*                            TYPE OF FUNCTION KEY
00776  M00S00774.keyex   +++|*                            0 = PROGRAMMABLE FUNCTION KEY
00777  M00S00775.keyex   +++|*                            1 = LABELED FUNCTION KEY
00778  M00S00776.keyex   +++|
00779  M00S00777.keyex   +++|      EQUIVALENCE (SETDATA(1), TEMPSTR(1:1))
00780  M00S00778.keyex   +++|
00781  M00S00779.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00782  M00S00780.keyex   +++|
00783  M00S00781.keyex   +++|      DATA  PANEL5 / 'KEYPAN5' /
00784  M00S00782.keyex   +++|      DATA  PANEL4 / 'KEYPAN4' /
00785  M00S00783.keyex   +++|      DATA  STRDEF / 'DEFAULT' /
00786  M00S00784.keyex   +++|
00787  M00S00785.keyex   +++|
00788  M00S00786.keyex   +++|* CLOSE CURRENT *EDIT* PANEL.
00789  M00S00787.keyex   +++|
00790  M00S00788.keyex   +++|      CALL SFCLOS(PANEL4,0)
00791  M00S00789.keyex   +++|
00792  M00S00790.keyex   +++|* SHOW KEY DEFINITION PANEL.
00793  M00S00791.keyex   +++|
00794  M00S00792.keyex   +++|      CALL SFOPEN(PANEL5, STAT)
00795  M00S00793.keyex   +++|      IF (STAT .NE. 0) THEN
00796  M00S00794.keyex   +++|        CALL ERR
00797  M00S00795.keyex   +++|        STOP 'SF ERROR.'
00798  M00S00796.keyex   +++|      ENDIF
00799  M00S00797.keyex   +++|      PANELIO = STRDEF // STRDEF // STRDEF
00800  M00S00798.keyex   +++|      CALL SFSSHO(PANEL5, PANELIO, PANELIO)
00801  M00S00799.keyex   +++|      CALL SFGETK(TYPE, ORDINAL)
00802  M00S00800.keyex   +++|      CALL SFCLOS(PANEL5, 0)
00803  M00S00801.keyex   +++|
00804  M00S00802.keyex   +++|      IF (.NOT.((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDSTOP))) THEN
00805  M00S00803.keyex   +++|        CALL WRSORC
00806  M00S00804.keyex   +++|        TEMPSTR = PANELIO
00807  M00S00805.keyex   +++|      ENDIF
00808  M00S00806.keyex   +++|
00809  M00S00807.keyex   +++|      CALL SFOPEN(PANEL4, STAT)
00810  M00S00808.keyex   +++|      IF (STAT .NE. 0) THEN
00811  M00S00809.keyex   +++|        CALL ERR
00812  M00S00810.keyex   +++|        STOP 'SF ERROR.'
00813  M00S00811.keyex   +++|      ENDIF
00814  M00S00812.keyex   +++|      RETURN
00815  M00S00813.keyex   +++|      END
00816  M00S00814.keyex   +++|
00817  M00S00815.keyex   +++|
00818  M00S00816.keyex   +++|      SUBROUTINE RDSORC
00819  M00S00817.keyex   +++|
00820  M00S00818.keyex   +++|**    RDSORC - READ KEY DEFINITIONS FROM THE SOURCE FILE.
00821  M00S00819.keyex   +++|*
00822  M00S00820.keyex   +++|*     *RDSORC* READS THE KEY DEFINITIONS FROM THE DEFINITION
00823  M00S00821.keyex   +++|*     SOURCE FILE.
00824  M00S00822.keyex   +++|*
00825  M00S00823.keyex   +++|*     CALL RDSORC
00826  M00S00824.keyex   +++|*
00827  M00S00825.keyex   +++|*     USES    KEYS, SETDATA.
00828  M00S00826.keyex   +++|*
00829  M00S00827.keyex   +++|*     CALLS   PF.
00830  M00S00828.keyex   +++|
00831  M00S00829.keyex   +++|
00832  M00S00830.keyex   +++|      IMPLICIT INTEGER (A - Z)
00833  M00S00831.keyex   +++|
00834  M00S00832.keyex   +++|      PARAMETER     (NKEYS = 45)
00835  M00S00833.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
00836  M00S00834.keyex   +++|
00837  M00S00835.keyex   +++|      CHARACTER*7   FILENM
00838  M00S00836.keyex   +++|*                            KEY DEFINITIONS FILE
00839  M00S00837.keyex   +++|      CHARACTER*60  KEYDEF
00840  M00S00838.keyex   +++|*                            FUNCTION KEY DEFINITION
00841  M00S00839.keyex   +++|      CHARACTER*67  KEYS(NKEYS)
00842  M00S00840.keyex   +++|*                            LABEL AND KEYDEF
00843  M00S00841.keyex   +++|      CHARACTER*7   LABEL
00844  M00S00842.keyex   +++|*                            FUNCTION KEY LABEL
00845  M00S00843.keyex   +++|      CHARACTER*7   SETDATA(3)
00846  M00S00844.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
00847  M00S00845.keyex   +++|
00848  M00S00846.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
00849  M00S00847.keyex   +++|
00850  M00S00848.keyex   +++|10    FORMAT(A7, 1X, A60)
00851  M00S00849.keyex   +++|20    FORMAT(A7)
00852  M00S00850.keyex   +++|
00853  M00S00851.keyex   +++|* READ USER KEY DEFINITION FILE, IF ANY.
00854  M00S00852.keyex   +++|
00855  M00S00853.keyex   +++|      CALL PF('GET', 'TAPE1', FILENM, 'NA', IGNORE)
00856  M00S00854.keyex   +++|
00857  M00S00855.keyex   +++|* SOURCE FILE CONSISTS OF FUNCTION KEY LABELS,
00858  M00S00856.keyex   +++|* KEY DEFINITIONS, AND THE TERMINAL'S SETUP DATA.
00859  M00S00857.keyex   +++|
00860  M00S00858.keyex   +++|      DO 110 I = 1, NKEYS
00861  M00S00859.keyex   +++|        READ(1,  10, END=130) LABEL, KEYDEF
00862  M00S00860.keyex   +++|        IF(KEYDEF .NE. ' ') THEN
00863  M00S00861.keyex   +++|          KEYS(I)(1:07) = LABEL
00864  M00S00862.keyex   +++|          KEYS(I)(8:67) = KEYDEF
00865  M00S00863.keyex   +++|        ENDIF
00866  M00S00864.keyex   +++|110   CONTINUE
00867  M00S00865.keyex   +++|
00868  M00S00866.keyex   +++|      DO 120 I = 1, 3
00869  M00S00867.keyex   +++|        READ(1, 20, END=130) SETDATA(I)
00870  M00S00868.keyex   +++|120   CONTINUE
00871  M00S00869.keyex   +++|
00872  M00S00870.keyex   +++|130   REWIND 1
00873  M00S00871.keyex   +++|      RETURN
00874  M00S00872.keyex   +++|      END
00875  M00S00873.keyex   +++|
00876  M00S00874.keyex   +++|
00877  M00S00875.keyex   +++|
00878  M00S00876.keyex   +++|      SUBROUTINE HELP
00879  M00S00877.keyex   +++|
00880  M00S00878.keyex   +++|**    HELP - PROVIDE HELP INFORMATION FOR THE *KEY* UTILITY.
00881  M00S00879.keyex   +++|*
00882  M00S00880.keyex   +++|*     *HELP* GIVES THE USER INFORMATION ON THE *KEY* UTILITY,
00883  M00S00881.keyex   +++|*     USING SCREEN FORMATTING DISPLAY PANELS.
00884  M00S00882.keyex   +++|*
00885  M00S00883.keyex   +++|*     CALL HELP
00886  M00S00884.keyex   +++|*
00887  M00S00885.keyex   +++|*     CALLS   ERR, SFCLOS, SFOPEN, SFSSHO.
00888  M00S00886.keyex   +++|*
00889  M00S00887.keyex   +++|*     MESSAGES
00890  M00S00888.keyex   +++|*             PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.
00891  M00S00889.keyex   +++|*             AND RE-ENTER THE KEY COMMAND.
00892  M00S00890.keyex   +++|*             STOP.  FIX ERROR.
00893  M00S00891.keyex   +++|
00894  M00S00892.keyex   +++|
00895  M00S00893.keyex   +++|      IMPLICIT INTEGER (A - Z)
00896  M00S00894.keyex   +++|
00897  M00S00895.keyex   +++|      PARAMETER   (ORDBKW = 8)
00898  M00S00896.keyex   +++|*                            ORDINAL FOR THE BKW KEY
00899  M00S00897.keyex   +++|      PARAMETER   (ORDSTOP = 4)
00900  M00S00898.keyex   +++|*                            ORDINAL FOR THE STOP KEY
00901  M00S00899.keyex   +++|
00902  M00S00900.keyex   +++|      CHARACTER*7 PANEL1
00903  M00S00901.keyex   +++|*                            FIRST HELP PANEL
00904  M00S00902.keyex   +++|      CHARACTER*7 PANEL2
00905  M00S00903.keyex   +++|*                            SECOND HELP PANEL
00906  M00S00904.keyex   +++|      CHARACTER*1 PANELIO
00907  M00S00905.keyex   +++|*                            OUTPUT STRING FOR THE PANEL
00908  M00S00906.keyex   +++|      INTEGER     ORDINAL
00909  M00S00907.keyex   +++|*                            SCREEN FORMATTING KEY ORDINAL
00910  M00S00908.keyex   +++|      INTEGER     STAT
00911  M00S00909.keyex   +++|*                            *SFOPEN* RETURN STATUS
00912  M00S00910.keyex   +++|      INTEGER     TYPE
00913  M00S00911.keyex   +++|*                            SCREEN FORMATTING KEY TYPE
00914  M00S00912.keyex   +++|
00915  M00S00913.keyex   +++|      DATA  PANEL1 / 'KEYPAN1' /
00916  M00S00914.keyex   +++|      DATA  PANEL2 / 'KEYPAN2' /
00917  M00S00915.keyex   +++|
00918  M00S00916.keyex   +++|10    FORMAT(' PLEASE ENTER THE SYSTEM COMMAND:  SCREEN,721.',
00919  M00S00917.keyex   +++|     ./' AND RE-ENTER THE KEY COMMAND.')
00920  M00S00918.keyex   +++|
00921  M00S00919.keyex   +++|
00922  M00S00920.keyex   +++|* SHOW HELP PANELS.
00923  M00S00921.keyex   +++|
00924  M00S00922.keyex   +++| 100  CALL SFOPEN(PANEL1, STAT)
00925  M00S00923.keyex   +++|      IF (STAT .NE. 0) THEN
00926  M00S00924.keyex   +++|        WRITE(2,10)
00927  M00S00925.keyex   +++|        CALL ERR
00928  M00S00926.keyex   +++|        STOP 'SF ERROR.'
00929  M00S00927.keyex   +++|      ENDIF
00930  M00S00928.keyex   +++|      CALL SFSSHO(PANEL1, PANELIO,PANELIO)
00931  M00S00929.keyex   +++|      CALL SFGETK(TYPE,ORDINAL)
00932  M00S00930.keyex   +++|      CALL SFCLOS(PANEL1, 0)
00933  M00S00931.keyex   +++|      IF ((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDSTOP)) RETURN
00934  M00S00932.keyex   +++|      CALL SFOPEN(PANEL2, STAT)
00935  M00S00933.keyex   +++|      IF (STAT .NE. 0) THEN
00936  M00S00934.keyex   +++|        WRITE(2,10)
00937  M00S00935.keyex   +++|        CALL ERR
00938  M00S00936.keyex   +++|        STOP 'SF ERROR.'
00939  M00S00937.keyex   +++|      ENDIF
00940  M00S00938.keyex   +++|      CALL SFSSHO(PANEL2, PANELIO,PANELIO)
00941  M00S00939.keyex   +++|      CALL SFCLOS(PANEL2, 1)
00942  M00S00940.keyex   +++|      CALL SFGETK(TYPE,ORDINAL)
00943  M00S00941.keyex   +++|      CALL SFCLOS(PANEL2, 0)
00944  M00S00942.keyex   +++|      IF ((TYPE .EQ. 1) .AND. (ORDINAL .EQ. ORDBKW)) GOTO 100
00945  M00S00943.keyex   +++|      RETURN
00946  M00S00944.keyex   +++|      END
00947  M00S00945.keyex   +++|
00948  M00S00946.keyex   +++|
00949  M00S00947.keyex   +++|      SUBROUTINE LDSETUP
00950  M00S00948.keyex   +++|
00951  M00S00949.keyex   +++|**    LDSETUP - SET UP TERMINAL CHARACTERISTICS.
00952  M00S00950.keyex   +++|*
00953  M00S00951.keyex   +++|*     *LDSETUP* SETS THE TERMINAL CHARACTERISTICS FOR THE NUMBER PAD,
00954  M00S00952.keyex   +++|*     SCREEN MODE, AND THE NUMBER OF CHARACTERS PER LINE.
00955  M00S00953.keyex   +++|*
00956  M00S00954.keyex   +++|*     CALL LDSETUP
00957  M00S00955.keyex   +++|*
00958  M00S00956.keyex   +++|*     CALLS   PACK, SEQPACK.
00959  M00S00957.keyex   +++|*
00960  M00S00958.keyex   +++|*     NOTE    *RDSORC* MUST BE CALLED BEFORE THIS CODE IS PROCESSED TO
00961  M00S00959.keyex   +++|*             ENSURE THAT THE PROPER TERMINAL DEFINITIONS ARE LOADED.
00962  M00S00960.keyex   +++|
00963  M00S00961.keyex   +++|
00964  M00S00962.keyex   +++|      IMPLICIT INTEGER (A - Z)
00965  M00S00963.keyex   +++|
00966  M00S00964.keyex   +++|      PARAMETER  (KEYL = 45)
00967  M00S00965.keyex   +++|*                            NUMBER OF PROGRAMMABLE FUNCTION KEYS
00968  M00S00966.keyex   +++|
00969  M00S00967.keyex   +++|      BOOLEAN ZCARRET
00970  M00S00968.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
00971  M00S00969.keyex   +++|      BOOLEAN ZNUMCHR(3)
00972  M00S00970.keyex   +++|*                            HEX SEQUENCE FOR CHARACTERS PER LINE
00973  M00S00971.keyex   +++|      BOOLEAN ZNUMPAD(3)
00974  M00S00972.keyex   +++|*                            HEX SEQUENCE FOR NUMBER PAD CONDITION
00975  M00S00973.keyex   +++|      BOOLEAN ZOFFSET
00976  M00S00974.keyex   +++|*                            HEX CODE FOR ADDRESS OFFSET
00977  M00S00975.keyex   +++|      BOOLEAN ZMODE
00978  M00S00976.keyex   +++|*                            HEX CODE FOR SCREEN MODE
00979  M00S00977.keyex   +++|      BOOLEAN ZROLL
00980  M00S00978.keyex   +++|*                            HEX CODE FOR ROLL PAGE MODE
00981  M00S00979.keyex   +++|      BOOLEAN ZSHIFT
00982  M00S00980.keyex   +++|*                            HEX CODE FOR SHIFTED NUMERIC PAD CODE
00983  M00S00981.keyex   +++|      BOOLEAN Z132
00984  M00S00982.keyex   +++|*                            HEX CODE FOR 132 CHARACTERS PER LINE
00985  M00S00983.keyex   +++|      CHARACTER*7    FILENM
00986  M00S00984.keyex   +++|*                            FILE NAME OF KEY DEFINITIONS
00987  M00S00985.keyex   +++|      CHARACTER*67   KEYS(KEYL)
00988  M00S00986.keyex   +++|*                            FUNCTION KEY DEFINTIONS
00989  M00S00987.keyex   +++|      CHARACTER*7    SETDATA(3)
00990  M00S00988.keyex   +++|*                            TERMINAL SETUP DATA
00991  M00S00989.keyex   +++|      CHARACTER*7    STRDEF
00992  M00S00990.keyex   +++|*                            DEFAULT STRING
00993  M00S00991.keyex   +++|      CHARACTER*7    STRROL
00994  M00S00992.keyex   +++|*                            ROLL STRING
00995  M00S00993.keyex   +++|      CHARACTER*7    STRSHI
00996  M00S00994.keyex   +++|*                            SHIFTED STRING
00997  M00S00995.keyex   +++|      CHARACTER*7    STR132
00998  M00S00996.keyex   +++|*                            132 STRING
00999  M00S00997.keyex   +++|      LOGICAL        DEFNCHR
01000  M00S00998.keyex   +++|*                            DEFAULT NUMBER OF CHARACTERS PER LINE
01001  M00S00999.keyex   +++|      LOGICAL        DEFNPAD
01002  M00S01000.keyex   +++|*                            DEFAULT NUMERIC PAD SETTING
01003  M00S01001.keyex   +++|      LOGICAL        DEFPAGE
01004  M00S01002.keyex   +++|*                            DEFAULT PAGINATION SETTING
01005  M00S01003.keyex   +++|
01006  M00S01004.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01007  M00S01005.keyex   +++|
01008  M00S01006.keyex   +++|      DATA    ZCARRET  / Z"0D" /
01009  M00S01007.keyex   +++|      DATA    ZNUMCHR  / Z"1E", Z"12", Z"48" /
01010  M00S01008.keyex   +++|      DATA    ZNUMPAD  / Z"1E", Z"12", Z"6C" /
01011  M00S01009.keyex   +++|      DATA    ZOFFSET  / Z"800" /
01012  M00S01010.keyex   +++|      DATA    ZMODE    / Z"16" /
01013  M00S01011.keyex   +++|      DATA    ZROLL    / Z"12" /
01014  M00S01012.keyex   +++|      DATA    ZSHIFT   / Z"6B" /
01015  M00S01013.keyex   +++|      DATA    Z132     / Z"47" /
01016  M00S01014.keyex   +++|      DATA    STRDEF   / 'DEFAULT' /
01017  M00S01015.keyex   +++|      DATA    STRROL   / 'ROLL   ' /
01018  M00S01016.keyex   +++|      DATA    STRSHI   / 'SHIFTED' /
01019  M00S01017.keyex   +++|      DATA    STR132   / '132    ' /
01020  M00S01018.keyex   +++|      DATA    DEFNCHR  / .TRUE. /
01021  M00S01019.keyex   +++|      DATA    DEFNPAD  / .TRUE. /
01022  M00S01020.keyex   +++|      DATA    DEFPAGE  / .TRUE. /
01023  M00S01021.keyex   +++|
01024  M00S01022.keyex   +++|      IF(SETDATA(1).NE. STRDEF) DEFNPAD = .FALSE.
01025  M00S01023.keyex   +++|      IF(SETDATA(2).NE. STRDEF) DEFPAGE = .FALSE.
01026  M00S01024.keyex   +++|      IF(SETDATA(3).NE. STRDEF) DEFNCHR = .FALSE.
01027  M00S01025.keyex   +++|
01028  M00S01026.keyex   +++|      IF (.NOT.(DEFNPAD .AND. DEFPAGE .AND. DEFNCHR)) THEN
01029  M00S01027.keyex   +++|        CALL PACK(1, 0)
01030  M00S01028.keyex   +++|      ELSE
01031  M00S01029.keyex   +++|        RETURN
01032  M00S01030.keyex   +++|      ENDIF
01033  M00S01031.keyex   +++|
01034  M00S01032.keyex   +++|      IF (.NOT.DEFNPAD) THEN
01035  M00S01033.keyex   +++|        IF(SETDATA(1) .EQ. STRSHI) ZNUMPAD(3) = ZSHIFT
01036  M00S01034.keyex   +++|        CALL SEQPACK(ZNUMPAD, 3)
01037  M00S01035.keyex   +++|      ENDIF
01038  M00S01036.keyex   +++|
01039  M00S01037.keyex   +++|      IF (.NOT.DEFPAGE) THEN
01040  M00S01038.keyex   +++|        IF(SETDATA(2) .EQ. STRROL) ZMODE = ZROLL
01041  M00S01039.keyex   +++|        CALL PACK(2, ZOFFSET + ZMODE)
01042  M00S01040.keyex   +++|      ENDIF
01043  M00S01041.keyex   +++|
01044  M00S01042.keyex   +++|      IF (.NOT.DEFNCHR) THEN
01045  M00S01043.keyex   +++|        IF(SETDATA(3) .EQ. STR132) ZNUMCHR(3) = Z132
01046  M00S01044.keyex   +++|        CALL SEQPACK(ZNUMCHR, 3)
01047  M00S01045.keyex   +++|      ENDIF
01048  M00S01046.keyex   +++|
01049  M00S01047.keyex   +++|      IF (.NOT.(DEFNPAD .AND. DEFPAGE .AND. DEFNCHR)) THEN
01050  M00S01048.keyex   +++|
01051  M00S01049.keyex   +++|* SEND A CARRIAGE RETURN IF A SEQUENCE WAS SENT TO THE TERMINAL.
01052  M00S01050.keyex   +++|
01053  M00S01051.keyex   +++|        CALL PACK(2, ZOFFSET + ZCARRET)
01054  M00S01052.keyex   +++|        CALL PACK(3, 1)
01055  M00S01053.keyex   +++|      ENDIF
01056  M00S01054.keyex   +++|      RETURN
01057  M00S01055.keyex   +++|      END
01058  M00S01056.keyex   +++|
01059  M00S01057.keyex   +++|
01060  M00S01058.keyex   +++|      SUBROUTINE LOAD
01061  M00S01059.keyex   +++|
01062  M00S01060.keyex   +++|**    LOAD - LOAD DEFINITIONS INTO TERMINAL.
01063  M00S01061.keyex   +++|*
01064  M00S01062.keyex   +++|*     *LOAD* LOADS THE TERMINAL WITH BOTH FUNCTION KEY DEFINITIONS
01065  M00S01063.keyex   +++|*     AND LABELS, AND MODIFIES TERMINAL CHARACTERISTICS.
01066  M00S01064.keyex   +++|*
01067  M00S01065.keyex   +++|*     CALL LOAD
01068  M00S01066.keyex   +++|*
01069  M00S01067.keyex   +++|*     CALLS   CLEAR, LDSETUP, RDSORC, SEND.
01070  M00S01068.keyex   +++|*
01071  M00S01069.keyex   +++|*     MESSAGES
01072  M00S01070.keyex   +++|*             FUNCTION KEYS HAVE BEEN LOADED.
01073  M00S01071.keyex   +++|
01074  M00S01072.keyex   +++|
01075  M00S01073.keyex   +++|      IMPLICIT INTEGER (A - Z)
01076  M00S01074.keyex   +++|
01077  M00S01075.keyex   +++|10    FORMAT(' FUNCTION KEYS HAVE BEEN LOADED.')
01078  M00S01076.keyex   +++|
01079  M00S01077.keyex   +++|* READ SOURCE FILE INTO COMMON BLOCK.
01080  M00S01078.keyex   +++|
01081  M00S01079.keyex   +++|      CALL RDSORC
01082  M00S01080.keyex   +++|
01083  M00S01081.keyex   +++|* CLEAR FUNCTION KEYS OF PREVIOUS DEFINITIONS.
01084  M00S01082.keyex   +++|
01085  M00S01083.keyex   +++|      CALL CLEAR
01086  M00S01084.keyex   +++|
01087  M00S01085.keyex   +++|* DOWNLINE LOAD CURRENT DEFINITIONS INTO TERMINAL.
01088  M00S01086.keyex   +++|
01089  M00S01087.keyex   +++|      CALL SEND
01090  M00S01088.keyex   +++|
01091  M00S01089.keyex   +++|* CHANGE THE SPECIFIED TERMINAL CHARACTERISTICS.
01092  M00S01090.keyex   +++|
01093  M00S01091.keyex   +++|      CALL LDSETUP
01094  M00S01092.keyex   +++|      WRITE (2,10)
01095  M00S01093.keyex   +++|      ENDFILE 2
01096  M00S01094.keyex   +++|      RETURN
01097  M00S01095.keyex   +++|      END
01098  M00S01096.keyex   +++|
01099  M00S01097.keyex   +++|
01100  M00S01098.keyex   +++|      SUBROUTINE PACK(CODE, BYTE)
01101  M00S01099.keyex   +++|
01102  M00S01100.keyex   +++|**    PACK - PACK BUFFER AND WRITE TO TERMINAL.
01103  M00S01101.keyex   +++|*
01104  M00S01102.keyex   +++|*     *PACK* PACKS 4 BYTES INTO A BUFFER AND WRITES
01105  M00S01103.keyex   +++|*     THE BUFFER TO THE TERMINAL.
01106  M00S01104.keyex   +++|*
01107  M00S01105.keyex   +++|*     CALL PACK(CODE, BYTE)
01108  M00S01106.keyex   +++|*
01109  M00S01107.keyex   +++|*     ENTRY   CODE  = 1, FIRST BYTE IN BUFFER.
01110  M00S01108.keyex   +++|*                   = 2, BYTE TO PLACE IN BUFFER.
01111  M00S01109.keyex   +++|*                   = 3, LAST BYTE TO PLACE IN BUFFER.
01112  M00S01110.keyex   +++|*
01113  M00S01111.keyex   +++|*             BYTE = Z80 BYTE TO BE PACKED AND WRITTEN TO TERMINAL.
01114  M00S01112.keyex   +++|*
01115  M00S01113.keyex   +++|*     CALLS   CONNEC.
01116  M00S01114.keyex   +++|*
01117  M00S01115.keyex   +++|*     NOTES   BUFFER FORMAT IS 00074---4---4---4---.
01118  M00S01116.keyex   +++|*
01119  M00S01117.keyex   +++|*     MESSAGES
01120  M00S01118.keyex   +++|*             NO KEYS SPECIFIED.
01121  M00S01119.keyex   +++|*                  NO KEYS WERE SPECIFIED TO BE SENT.
01122  M00S01120.keyex   +++|*             BUFFER OVERFLOW IN PACK.
01123  M00S01121.keyex   +++|*                  BUFFER SIZE EXCEEDED LIMITS.
01124  M00S01122.keyex   +++|
01125  M00S01123.keyex   +++|
01126  M00S01124.keyex   +++|      IMPLICIT INTEGER (A - Z)
01127  M00S01125.keyex   +++|
01128  M00S01126.keyex   +++|      PARAMETER  (NUMKEYS = 45)
01129  M00S01127.keyex   +++|*                            NUMBER OF DEFINABLE KEYS
01130  M00S01128.keyex   +++|      PARAMETER  (STORCHR = 70)
01131  M00S01129.keyex   +++|*                            STORED CHARACTERS PER DEFINITION
01132  M00S01130.keyex   +++|      PARAMETER  (SIZE = (NUMKEYS * STORCHR) + 200)
01133  M00S01131.keyex   +++|*                            BUFFER SIZE
01134  M00S01132.keyex   +++|
01135  M00S01133.keyex   +++|      DIMENSION  BUF(SIZE)
01136  M00S01134.keyex   +++|*                            OUTPUT BUFFER
01137  M00S01135.keyex   +++|      INTEGER    BYT
01138  M00S01136.keyex   +++|*                            Z80 CODE DIVIDER
01139  M00S01137.keyex   +++|      INTEGER    BYTE
01140  M00S01138.keyex   +++|*                            Z80 BYTE CODE
01141  M00S01139.keyex   +++|      INTEGER    PTR
01142  M00S01140.keyex   +++|*                            INDEX FOR *BUF*
01143  M00S01141.keyex   +++|
01144  M00S01142.keyex   +++|* PACK *BYTE* INTO BUFFER FOR GIVEN *CODE*.
01145  M00S01143.keyex   +++|
01146  M00S01144.keyex   +++|      GOTO (100, 200, 300), CODE
01147  M00S01145.keyex   +++|
01148  M00S01146.keyex   +++|* CODE = 1.  SET UP INITIAL CODE IN BUFFER.
01149  M00S01147.keyex   +++|
01150  M00S01148.keyex   +++|100   PTR = 0
01151  M00S01149.keyex   +++|      BYT = 0
01152  M00S01150.keyex   +++|      BYTE = 07
01153  M00S01151.keyex   +++|
01154  M00S01152.keyex   +++|* CODE = 2.  PACK DATA INTO BUFFER.
01155  M00S01153.keyex   +++|
01156  M00S01154.keyex   +++|200   BYT = BYT - 1
01157  M00S01155.keyex   +++|
01158  M00S01156.keyex   +++|      IF(BYT .LT. 0) THEN
01159  M00S01157.keyex   +++|        BYT = 4
01160  M00S01158.keyex   +++|        PTR = PTR + 1
01161  M00S01159.keyex   +++|        BUF(PTR) = 0
01162  M00S01160.keyex   +++|      ENDIF
01163  M00S01161.keyex   +++|
01164  M00S01162.keyex   +++|      BUF(PTR) = OR(BUF(PTR), SHIFT(BYTE, BYT*12))
01165  M00S01163.keyex   +++|      RETURN
01166  M00S01164.keyex   +++|
01167  M00S01165.keyex   +++|* CHECK FOR ERRORS BEFORE STARTING I/O.
01168  M00S01166.keyex   +++|
01169  M00S01167.keyex   +++|300   IF(PTR .LT. 1) STOP ' NO KEYS SPECIFIED.'
01170  M00S01168.keyex   +++|
01171  M00S01169.keyex   +++|      IF(PTR .GT. SIZE) STOP ' BUFFER OVERFLOW IN PACK '
01172  M00S01170.keyex   +++|
01173  M00S01171.keyex   +++|* OUTPUT INFORMATION WITHOUT HEADER BYTES.
01174  M00S01172.keyex   +++|
01175  M00S01173.keyex   +++|      CALL CONNEC(3)
01176  M00S01174.keyex   +++|      BUFFER OUT(3, 0) (BUF(1), BUF(PTR))
01177  M00S01175.keyex   +++|
01178  M00S01176.keyex   +++|* LOOP UNTIL I/O COMPLETES.
01179  M00S01177.keyex   +++|
01180  M00S01178.keyex   +++|      IF(UNIT(3))310,320,320
01181  M00S01179.keyex   +++|310   CONTINUE
01182  M00S01180.keyex   +++|320   CONTINUE
01183  M00S01181.keyex   +++|      RETURN
01184  M00S01182.keyex   +++|      END
01185  M00S01183.keyex   +++|
01186  M00S01184.keyex   +++|
01187  M00S01185.keyex   +++|      SUBROUTINE PRINT
01188  M00S01186.keyex   +++|
01189  M00S01187.keyex   +++|**    PRINT - PRINT FUNCTION KEYS TO SPECIFIED FILE.
01190  M00S01188.keyex   +++|*
01191  M00S01189.keyex   +++|*     *PRINT* COPIES ALL DEFINED FUNCTION KEYS FROM THE SPECIFIED FILE
01192  M00S01190.keyex   +++|*     TO THE LOCAL FILE *KEYPRNT*.
01193  M00S01191.keyex   +++|*
01194  M00S01192.keyex   +++|*     CALL PRINT
01195  M00S01193.keyex   +++|*
01196  M00S01194.keyex   +++|*     CALLS   RDSORC.
01197  M00S01195.keyex   +++|*
01198  M00S01196.keyex   +++|*     MESSAGES
01199  M00S01197.keyex   +++|*             THE LIST OF DEFINED FUNCTION KEYS IS ON THE LOCAL
01200  M00S01198.keyex   +++|*             FILE *KEYPRNT*.
01201  M00S01199.keyex   +++|
01202  M00S01200.keyex   +++|
01203  M00S01201.keyex   +++|      IMPLICIT INTEGER (A - Z)
01204  M00S01202.keyex   +++|
01205  M00S01203.keyex   +++|      PARAMETER    (NKEYS = 45)
01206  M00S01204.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01207  M00S01205.keyex   +++|      PARAMETER    (NKEY = 15)
01208  M00S01206.keyex   +++|*                            NUMBER OF KEYS PER SECTION OF *KEYS*
01209  M00S01207.keyex   +++|      PARAMETER    (NPAN = 3)
01210  M00S01208.keyex   +++|*                            NUMBER OF SECTIONS IN *KEYS*
01211  M00S01209.keyex   +++|
01212  M00S01210.keyex   +++|      CHARACTER*7  FILENM
01213  M00S01211.keyex   +++|*                            KEY DEFINITIONS FILE
01214  M00S01212.keyex   +++|      CHARACTER*5  LABELS(NPAN, NKEY)
01215  M00S01213.keyex   +++|*                            FUNCTION KEY LABELS
01216  M00S01214.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
01217  M00S01215.keyex   +++|*                            FUNCTION KEY DEFINITIONS
01218  M00S01216.keyex   +++|      CHARACTER*7  SETDATA(3)
01219  M00S01217.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
01220  M00S01218.keyex   +++|
01221  M00S01219.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01222  M00S01220.keyex   +++|
01223  M00S01221.keyex   +++|      DATA  (LABELS(1, I), I = 1, NKEY) /
01224  M00S01222.keyex   +++|     .  'F1   ', 'F2   ', 'F3   ', 'F4    ', 'F5    '
01225  M00S01223.keyex   +++|     ., 'F6   ', 'F7   ', 'F8   ', 'F9    ', 'F10   '
01226  M00S01224.keyex   +++|     ., 'F11  ', 'F12  ', 'F13  ', 'F14   ', 'F15   '
01227  M00S01225.keyex   +++|     ./
01228  M00S01226.keyex   +++|      DATA  (LABELS(2, I), I = 1, NKEY) /
01229  M00S01227.keyex   +++|     .  'RTAB ', 'LTAB ', 'NEXT ', 'DOWN  ', 'UP    '
01230  M00S01228.keyex   +++|     ., 'FWD  ', 'BKW  ', 'HELP ', 'ERASE ', 'EDIT  '
01231  M00S01229.keyex   +++|     ., 'BACK ', 'LAB  ', 'DATA ', 'STOP  ', 'INSRT '
01232  M00S01230.keyex   +++|     ./
01233  M00S01231.keyex   +++|      DATA  (LABELS(3, I), I = 1, NKEY) /
01234  M00S01232.keyex   +++|     .  'DLETE', 'CLEAR', 'PRINT', 'PAD 1 ', 'PAD 2 '
01235  M00S01233.keyex   +++|     ., 'PAD 3', 'PAD 4', 'PAD 5', 'PAD 6 ', 'PAD 7 '
01236  M00S01234.keyex   +++|     ., 'PAD 8', 'PAD 9', 'PAD 0', 'PAD , ', 'PAD . '
01237  M00S01235.keyex   +++|     ./
01238  M00S01236.keyex   +++|
01239  M00S01237.keyex   +++|10    FORMAT(5X, 'KEY DEFINITION UTILITY.',//
01240  M00S01238.keyex   +++|     .3X,'KEY   LABEL   KEY DEFINITIONS'/
01241  M00S01239.keyex   +++|     .3X,'---   -----   ---------------')
01242  M00S01240.keyex   +++|11    FORMAT(1X, A7, 1X, A7, 1X, A60)
01243  M00S01241.keyex   +++|12    FORMAT(' THE LIST OF DEFINED FUNCTION KEYS IS ON THE',
01244  M00S01242.keyex   +++|     .' LOCAL FILE *KEYPRNT*.')
01245  M00S01243.keyex   +++|13    FORMAT(/7X,'TERMINAL CHARACTERISTICS',/
01246  M00S01244.keyex   +++|     .7X,'-------- ---------------',/
01247  M00S01245.keyex   +++|     .9X,'NUMBER PAD -  ',A7,/9X,'SCREEN MODE -  ',A7/
01248  M00S01246.keyex   +++|     .9X,'CHARS./ LINE -  ',A7)
01249  M00S01247.keyex   +++|
01250  M00S01248.keyex   +++|* GET FILE AND OUTPUT USER DEFINED FUNCTION KEYS.
01251  M00S01249.keyex   +++|
01252  M00S01250.keyex   +++|      CALL   RDSORC
01253  M00S01251.keyex   +++|      REWIND 6
01254  M00S01252.keyex   +++|      WRITE(6, 10)
01255  M00S01253.keyex   +++|      DO 110 I = 1, NPAN
01256  M00S01254.keyex   +++|        DO 100 J = 1, NKEY
01257  M00S01255.keyex   +++|          IF(I .EQ. 1) THEN
01258  M00S01256.keyex   +++|            IF(KEYS(J)(1:7) .NE. ' ') THEN
01259  M00S01257.keyex   +++|              WRITE(6,11) LABELS(I,J), KEYS(J)(1:7),
01260  M00S01258.keyex   +++|     .                    KEYS(J)(8:67)
01261  M00S01259.keyex   +++|            ENDIF
01262  M00S01260.keyex   +++|          ENDIF
01263  M00S01261.keyex   +++|          IF(I .EQ. 2) THEN
01264  M00S01262.keyex   +++|            IF(KEYS(J + 15)(1:7) .NE. ' ') THEN
01265  M00S01263.keyex   +++|              WRITE(6,11) LABELS(I,J), KEYS(J+15)(1:7),
01266  M00S01264.keyex   +++|     .                    KEYS(J+15)(8:67)
01267  M00S01265.keyex   +++|            ENDIF
01268  M00S01266.keyex   +++|          ENDIF
01269  M00S01267.keyex   +++|          IF(I .EQ. 3) THEN
01270  M00S01268.keyex   +++|            IF(KEYS(J + 30)(1:7) .NE. ' ') THEN
01271  M00S01269.keyex   +++|              WRITE(6, 11) LABELS(I, J), KEYS(J+30)(1:7),
01272  M00S01270.keyex   +++|     .                     KEYS(J+30)(8:67)
01273  M00S01271.keyex   +++|            ENDIF
01274  M00S01272.keyex   +++|          ENDIF
01275  M00S01273.keyex   +++|100     CONTINUE
01276  M00S01274.keyex   +++|110   CONTINUE
01277  M00S01275.keyex   +++|
01278  M00S01276.keyex   +++|* OUTPUT USER DEFINED TERMINAL SETUP CHARACTERISTICS.
01279  M00S01277.keyex   +++|
01280  M00S01278.keyex   +++|      WRITE(6,13) SETDATA
01281  M00S01279.keyex   +++|      REWIND 6
01282  M00S01280.keyex   +++|      WRITE(2,12)
01283  M00S01281.keyex   +++|      ENDFILE 2
01284  M00S01282.keyex   +++|      RETURN
01285  M00S01283.keyex   +++|      END
01286  M00S01284.keyex   +++|
01287  M00S01285.keyex   +++|
01288  M00S01286.keyex   +++|      SUBROUTINE SEND
01289  M00S01287.keyex   +++|
01290  M00S01288.keyex   +++|**    SEND - TRANSFER KEY DEFINITIONS FROM SYSTEM INTO TERMINAL.
01291  M00S01289.keyex   +++|*
01292  M00S01290.keyex   +++|*     *SEND* TRANSFERS THE KEY DEFINITIONS, KEY LABELS, AND Z80
01293  M00S01291.keyex   +++|*     ROUTINES INTO THE TERMINAL.
01294  M00S01292.keyex   +++|*
01295  M00S01293.keyex   +++|*     CALL SEND
01296  M00S01294.keyex   +++|*
01297  M00S01295.keyex   +++|*     CALLS   BYTE, PACK, ZSNDADD, ZSNDCHR, Z80CODE.
01298  M00S01296.keyex   +++|
01299  M00S01297.keyex   +++|
01300  M00S01298.keyex   +++|      IMPLICIT INTEGER (A - Z)
01301  M00S01299.keyex   +++|
01302  M00S01300.keyex   +++|      PARAMETER   (NKEYS = 45)
01303  M00S01301.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01304  M00S01302.keyex   +++|
01305  M00S01303.keyex   +++|      BOOLEAN      ZBASE
01306  M00S01304.keyex   +++|*                            HEX CODE FOR KEY TABLE OFFSET
01307  M00S01305.keyex   +++|      BOOLEAN      ZCARRET(1)
01308  M00S01306.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
01309  M00S01307.keyex   +++|      BOOLEAN      ZDEFKEY(4)
01310  M00S01308.keyex   +++|*                            HEX SEQUENCE TO DEFINE FUNCTION KEY
01311  M00S01309.keyex   +++|      BOOLEAN      ZDISKEY(3)
01312  M00S01310.keyex   +++|*                            HEX SEQUENCE TO DISABLE KEYBOARD ENTRY
01313  M00S01311.keyex   +++|      BOOLEAN      ZDISRET(3)
01314  M00S01312.keyex   +++|*                            HEX SEQUENCE TO DISABLE CARRIAGE RETURN
01315  M00S01313.keyex   +++|      BOOLEAN      ZECHO
01316  M00S01314.keyex   +++|*                            HEX CODE FOR ECHO
01317  M00S01315.keyex   +++|      BOOLEAN      ZECHOFF
01318  M00S01316.keyex   +++|*                            HEX CODE FOR ECHO OFF
01319  M00S01317.keyex   +++|      BOOLEAN      ZECHON
01320  M00S01318.keyex   +++|*                            HEX CODE FOR ECHO ON
01321  M00S01319.keyex   +++|      BOOLEAN      ZENBIAS(2)
01322  M00S01320.keyex   +++|*                            HEX SEQUENCE TO ENABLE BIAS
01323  M00S01321.keyex   +++|      BOOLEAN      ZENRETN(2)
01324  M00S01322.keyex   +++|*                            HEX SEQUENCE TO ENABLE CARRIAGE RETURN
01325  M00S01323.keyex   +++|      BOOLEAN      ZENKEYB(3)
01326  M00S01324.keyex   +++|*                            HEX SEQUENCE TO ENABLE KEYBOARD ENTRY
01327  M00S01325.keyex   +++|      BOOLEAN      ZTRMKEY(2)
01328  M00S01326.keyex   +++|*                            HEX SEQUENCE TO TERMINATE KEY DEFINITIONS
01329  M00S01327.keyex   +++|      CHARACTER*7  FILENM
01330  M00S01328.keyex   +++|*                            KEY DEFINITIONS FILE
01331  M00S01329.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
01332  M00S01330.keyex   +++|*                            FUNCTION KEY DEFINITIONS
01333  M00S01331.keyex   +++|      CHARACTER*7  SETDATA(3)
01334  M00S01332.keyex   +++|*                            SETUP DATA
01335  M00S01333.keyex   +++|      INTEGER      ASCII
01336  M00S01334.keyex   +++|*                            Z80 CHARACTER
01337  M00S01335.keyex   +++|      INTEGER      LASTNB
01338  M00S01336.keyex   +++|*                            LAST NON-BLANK CHARACTER
01339  M00S01337.keyex   +++|
01340  M00S01338.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01341  M00S01339.keyex   +++|
01342  M00S01340.keyex   +++|      DATA  ADDR    / Z"C002"/
01343  M00S01341.keyex   +++|      DATA  ADDL    / Z"C000"/
01344  M00S01342.keyex   +++|      DATA  ZBASE   / Z"30" /
01345  M00S01343.keyex   +++|      DATA  ZCARRET / Z"0D" /
01346  M00S01344.keyex   +++|      DATA  ZDEFKEY / Z"1E", Z"09", Z"30", Z"34" /
01347  M00S01345.keyex   +++|      DATA  ZDISKEY / Z"1E", Z"12", Z"4D" /
01348  M00S01346.keyex   +++|      DATA  ZDISRET / Z"1E", Z"12", Z"5A" /
01349  M00S01347.keyex   +++|      DATA  ZECHON  / Z"34" /
01350  M00S01348.keyex   +++|      DATA  ZECHOFF / Z"31" /
01351  M00S01349.keyex   +++|      DATA  ZENBIAS / Z"1E", Z"30" /
01352  M00S01350.keyex   +++|      DATA  ZENRETN / Z"1E", Z"05" /
01353  M00S01351.keyex   +++|      DATA  ZENKEYB / Z"1E", Z"12", Z"4E" /
01354  M00S01352.keyex   +++|      DATA  ZFEED   / Z"0A" /
01355  M00S01353.keyex   +++|      DATA  ZTRMKEY / Z"2F", Z"6F"/
01356  M00S01354.keyex   +++|
01357  M00S01355.keyex   +++|
01358  M00S01356.keyex   +++|      CALL PACK(1, 0)
01359  M00S01357.keyex   +++|
01360  M00S01358.keyex   +++|* LOCK THE KEYBOARD DURING WHILE SENDING DATA TO TERMINAL.
01361  M00S01359.keyex   +++|
01362  M00S01360.keyex   +++|      CALL SEQPACK(ZDISKEY,3)
01363  M00S01361.keyex   +++|
01364  M00S01362.keyex   +++|* DISABLE *CR* ON FUNCTION KEYS AND ENABLE BIAS.
01365  M00S01363.keyex   +++|
01366  M00S01364.keyex   +++|      CALL SEQPACK(ZDISRET,3)
01367  M00S01365.keyex   +++|      CALL SEQPACK(ZENBIAS,2)
01368  M00S01366.keyex   +++|
01369  M00S01367.keyex   +++|* PROCESS EACH FUNCTION KEY'S DEFINITION.  IF LAST CHARACTER IN THE
01370  M00S01368.keyex   +++|* DEFINITION FIELD IS AN * (ASTERISK), TURN ECHO ON.
01371  M00S01369.keyex   +++|
01372  M00S01370.keyex   +++|      DO 260 I = 1, NKEYS
01373  M00S01371.keyex   +++|        IF((KEYS(I)(8:8).EQ. ';') .OR. (KEYS(I)(8:8).EQ. ' ')) GOTO 260
01374  M00S01372.keyex   +++|        IF(KEYS(I)(67:67).EQ. '*') THEN
01375  M00S01373.keyex   +++|          ZECHO = ZECHON
01376  M00S01374.keyex   +++|        ELSE
01377  M00S01375.keyex   +++|          ZECHO = ZECHOFF
01378  M00S01376.keyex   +++|        ENDIF
01379  M00S01377.keyex   +++|        ZDEFKEY(3) = ZBASE + I
01380  M00S01378.keyex   +++|        ZDEFKEY(4) = ZECHO
01381  M00S01379.keyex   +++|        CALL SEQPACK(ZDEFKEY,4)
01382  M00S01380.keyex   +++|        CALL ZSNDADD(ADDR)
01383  M00S01381.keyex   +++|
01384  M00S01382.keyex   +++|* GET ACTUAL CHARACTERS FOR THE DEFINITION.
01385  M00S01383.keyex   +++|
01386  M00S01384.keyex   +++|        LEN = 0
01387  M00S01385.keyex   +++|        IF((KEYS(I)(8:8) .EQ. 'Z') .AND. (KEYS(I)(9:9) .EQ. '"')) THEN
01388  M00S01386.keyex   +++|
01389  M00S01387.keyex   +++|          DO 210 J = 10, 67, 2
01390  M00S01388.keyex   +++|            K = J + 1
01391  M00S01389.keyex   +++|            IF(KEYS(I)(J:J) .EQ. '"') GOTO 220
01392  M00S01390.keyex   +++|            IF(KEYS(I)(K:K) .EQ. '"') GOTO 220
01393  M00S01391.keyex   +++|            IF(KEYS(I)(J:J) .LE. '9') C1=ICHAR(KEYS(I)(J:J))-Z"10"
01394  M00S01392.keyex   +++|            IF(KEYS(I)(J:J) .GE. 'A') C1=ICHAR(KEYS(I)(J:J))-Z"20"+09
01395  M00S01393.keyex   +++|            IF(KEYS(I)(K:K) .LE. '9') C2=ICHAR(KEYS(I)(K:K))-Z"10"
01396  M00S01394.keyex   +++|            IF(KEYS(I)(K:K) .GE. 'A') C2=ICHAR(KEYS(I)(K:K))-Z"20"+09
01397  M00S01395.keyex   +++|            ASCII = C1*16+C2
01398  M00S01396.keyex   +++|            CALL ZSNDCHR(ASCII)
01399  M00S01397.keyex   +++|210       CONTINUE
01400  M00S01398.keyex   +++|
01401  M00S01399.keyex   +++|          J = 68
01402  M00S01400.keyex   +++|220       J = K
01403  M00S01401.keyex   +++|
01404  M00S01402.keyex   +++|* PROCESSING CHARACTER DATA.
01405  M00S01403.keyex   +++|
01406  M00S01404.keyex   +++|        ELSE
01407  M00S01405.keyex   +++|
01408  M00S01406.keyex   +++|* COUNT TRAILING BLANKS.
01409  M00S01407.keyex   +++|
01410  M00S01408.keyex   +++|          DO 225 J = 66, 8, -1
01411  M00S01409.keyex   +++|            IF(KEYS(I)(J:J) .NE. ' ') THEN
01412  M00S01410.keyex   +++|              LASTNB = J
01413  M00S01411.keyex   +++|              GOTO 227
01414  M00S01412.keyex   +++|            ENDIF
01415  M00S01413.keyex   +++|225       CONTINUE
01416  M00S01414.keyex   +++|
01417  M00S01415.keyex   +++|227       DO 230 J = 8, MIN(66, LASTNB)
01418  M00S01416.keyex   +++|            K = J + 1
01419  M00S01417.keyex   +++|            IF(KEYS(I)(J:J) .EQ. '!'.AND.((KEYS(I)(K:K) .EQ. ' ')
01420  M00S01418.keyex   +++|     .         .OR.(K .EQ. 67))) GOTO 240
01421  M00S01419.keyex   +++|            IF(KEYS(I)(J:J) .EQ. ';') GOTO 250
01422  M00S01420.keyex   +++|            IF(KEYS(I)(J:J) .EQ. '!') THEN
01423  M00S01421.keyex   +++|              CALL ZSNDCHR(ZCARRET)
01424  M00S01422.keyex   +++|              IF(KEYS(I)(67:67) .EQ. '*') THEN
01425  M00S01423.keyex   +++|                CALL ZSNDCHR(ZFEED)
01426  M00S01424.keyex   +++|                LEN = LEN + 1
01427  M00S01425.keyex   +++|              ENDIF
01428  M00S01426.keyex   +++|            ELSE
01429  M00S01427.keyex   +++|              ASCII = ICHAR(KEYS(I)(J:J)) + Z"20"
01430  M00S01428.keyex   +++|              CALL ZSNDCHR(ASCII)
01431  M00S01429.keyex   +++|            ENDIF
01432  M00S01430.keyex   +++|230       CONTINUE
01433  M00S01431.keyex   +++|
01434  M00S01432.keyex   +++|          J = 67
01435  M00S01433.keyex   +++|240       CALL ZSNDCHR(ZCARRET)
01436  M00S01434.keyex   +++|          J = J + 1
01437  M00S01435.keyex   +++|        ENDIF
01438  M00S01436.keyex   +++|
01439  M00S01437.keyex   +++|250     LEN = LEN + J - 8
01440  M00S01438.keyex   +++|        CALL SEQPACK(ZTRMKEY,2)
01441  M00S01439.keyex   +++|        CALL SEQPACK(ZCARRET,1)
01442  M00S01440.keyex   +++|        ADDR = ADDR + LEN + 1
01443  M00S01441.keyex   +++|260   CONTINUE
01444  M00S01442.keyex   +++|
01445  M00S01443.keyex   +++|* SET UP AN ADDRESS IN THE 721 TO STORE THE KEY LABELS TO BE USED BY
01446  M00S01444.keyex   +++|* THE *DISPLAY* OPTION.
01447  M00S01445.keyex   +++|
01448  M00S01446.keyex   +++|      ZDEFKEY(3) = Z"74"
01449  M00S01447.keyex   +++|      ZDEFKEY(4) = Z"31"
01450  M00S01448.keyex   +++|      CALL SEQPACK(ZDEFKEY,4)
01451  M00S01449.keyex   +++|      CALL ZSNDADD(ADDR)
01452  M00S01450.keyex   +++|
01453  M00S01451.keyex   +++|* STORE THE F1 - F15 KEY LABELS IN THE TERMINAL.
01454  M00S01452.keyex   +++|
01455  M00S01453.keyex   +++|      DO 280 I = 1, 15
01456  M00S01454.keyex   +++|        DO 270 J = 1, 7
01457  M00S01455.keyex   +++|          ASCII = ICHAR(KEYS(I)(J:J)) + Z"20"
01458  M00S01456.keyex   +++|          CALL ZSNDCHR(ASCII)
01459  M00S01457.keyex   +++|270     CONTINUE
01460  M00S01458.keyex   +++|280   CONTINUE
01461  M00S01459.keyex   +++|
01462  M00S01460.keyex   +++|* STORE THE 'LAB' LABEL AS F16 IN THE TERMINAL.
01463  M00S01461.keyex   +++|
01464  M00S01462.keyex   +++|      DO 290 I = 1, 7
01465  M00S01463.keyex   +++|        ASCII = ICHAR(KEYS(27)(I:I)) + Z"20"
01466  M00S01464.keyex   +++|        CALL ZSNDCHR(ASCII)
01467  M00S01465.keyex   +++|290   CONTINUE
01468  M00S01466.keyex   +++|
01469  M00S01467.keyex   +++|* TERMINATE KEY DEFINITIONS.
01470  M00S01468.keyex   +++|
01471  M00S01469.keyex   +++|      CALL SEQPACK(ZTRMKEY,2)
01472  M00S01470.keyex   +++|      CALL SEQPACK(ZCARRET,1)
01473  M00S01471.keyex   +++|      ADDR = (ADDR + (7*16) + 1) - ADDL
01474  M00S01472.keyex   +++|
01475  M00S01473.keyex   +++|* SEND LENGTH OF CHARACTER LOAD TO BASE ADDRESS *ADDL*.
01476  M00S01474.keyex   +++|
01477  M00S01475.keyex   +++|      ZDEFKEY(3) = Z"70"
01478  M00S01476.keyex   +++|      ZDEFKEY(4) = Z"32"
01479  M00S01477.keyex   +++|      CALL SEQPACK(ZDEFKEY,4)
01480  M00S01478.keyex   +++|      CALL ZSNDADD(ADDL)
01481  M00S01479.keyex   +++|      CALL ZSNDADD(ADDR)
01482  M00S01480.keyex   +++|      CALL SEQPACK(ZCARRET,1)
01483  M00S01481.keyex   +++|
01484  M00S01482.keyex   +++|* ENABLE KEYBOARD ENTRY.
01485  M00S01483.keyex   +++|
01486  M00S01484.keyex   +++|      CALL Z80CODE
01487  M00S01485.keyex   +++|      CALL SEQPACK(ZENKEYB,3)
01488  M00S01486.keyex   +++|      CALL PACK(3, 1)
01489  M00S01487.keyex   +++|      RETURN
01490  M00S01488.keyex   +++|      END
01491  M00S01489.keyex   +++|
01492  M00S01490.keyex   +++|
01493  M00S01491.keyex   +++|
01494  M00S01492.keyex   +++|      SUBROUTINE SEQPACK(SEQUENC,NBYTES)
01495  M00S01493.keyex   +++|
01496  M00S01494.keyex   +++|**    SEQPACK - PACKS THE GIVEN SEQUENCE INTO A BUFFER FOR OUTPUT.
01497  M00S01495.keyex   +++|*
01498  M00S01496.keyex   +++|*     *SEQPACK* PACKS THE GIVEN SEQUENCE INTO THE OUTPUT BUFFER VIA
01499  M00S01497.keyex   +++|*     THE *PACK* ROUTINE.
01500  M00S01498.keyex   +++|*
01501  M00S01499.keyex   +++|*     CALL SEQPACK(SEQUENC,NBYTES)
01502  M00S01500.keyex   +++|*
01503  M00S01501.keyex   +++|*     ENTRY   SEQUENC = ARRAY OF BOOLEAN HEX CODES.
01504  M00S01502.keyex   +++|*             NBYTES = LENGTH OF HEX CODE ARRAY.
01505  M00S01503.keyex   +++|*
01506  M00S01504.keyex   +++|*     CALLS   PACK.
01507  M00S01505.keyex   +++|
01508  M00S01506.keyex   +++|      IMPLICIT INTEGER (A - Z)
01509  M00S01507.keyex   +++|
01510  M00S01508.keyex   +++|      PARAMETER    (MAXBYTS = 5)
01511  M00S01509.keyex   +++|*                            MAXIMUM LENGTH OF *SEQUENC*
01512  M00S01510.keyex   +++|
01513  M00S01511.keyex   +++|      BOOLEAN      OFFSET
01514  M00S01512.keyex   +++|*                            OFFSET FOR Z80 PROCESSING
01515  M00S01513.keyex   +++|      BOOLEAN      SEQUENC(MAXBYTS)
01516  M00S01514.keyex   +++|*                            ARRAY OF BOOLEAN HEX CODES
01517  M00S01515.keyex   +++|      INTEGER      NBYTES
01518  M00S01516.keyex   +++|*                            LENGTH OF HEX CODE ARRAY
01519  M00S01517.keyex   +++|
01520  M00S01518.keyex   +++|      DATA  OFFSET / Z"800" /
01521  M00S01519.keyex   +++|
01522  M00S01520.keyex   +++|
01523  M00S01521.keyex   +++|      DO 100 I = 1, NBYTES
01524  M00S01522.keyex   +++|        CALL PACK(2, OFFSET + SEQUENC(I))
01525  M00S01523.keyex   +++|100   CONTINUE
01526  M00S01524.keyex   +++|
01527  M00S01525.keyex   +++|      RETURN
01528  M00S01526.keyex   +++|      END
01529  M00S01527.keyex   +++|
01530  M00S01528.keyex   +++|
01531  M00S01529.keyex   +++|      SUBROUTINE SYSKEYS
01532  M00S01530.keyex   +++|
01533  M00S01531.keyex   +++|**    SYSKEYS - SET SYSTEM DEFAULTS FOR KEYS AND SETUP CHARACTERISTICS.
01534  M00S01532.keyex   +++|*
01535  M00S01533.keyex   +++|*     *SYSKEYS* INITIALIZES *KEYS* AND TERMINAL SETUP CHARACTERISTICS
01536  M00S01534.keyex   +++|*     WITH THE SYSTEM DEFAULTS.
01537  M00S01535.keyex   +++|*
01538  M00S01536.keyex   +++|*     CALL SYSKEYS
01539  M00S01537.keyex   +++|*
01540  M00S01538.keyex   +++|*     USES    KEYS, SETDATA.
01541  M00S01539.keyex   +++|
01542  M00S01540.keyex   +++|
01543  M00S01541.keyex   +++|      IMPLICIT INTEGER (A - Z)
01544  M00S01542.keyex   +++|
01545  M00S01543.keyex   +++|      PARAMETER    (NKEYS = 45)
01546  M00S01544.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01547  M00S01545.keyex   +++|
01548  M00S01546.keyex   +++|      BOOLEAN      KHELP
01549  M00S01547.keyex   +++|*                            HEX CODE FOR HELP KEY
01550  M00S01548.keyex   +++|      BOOLEAN      KEDIT
01551  M00S01549.keyex   +++|*                            HEX CODE FOR EDIT KEY
01552  M00S01550.keyex   +++|      BOOLEAN      KSTOP
01553  M00S01551.keyex   +++|*                            HEX CODE FOR STOP KEY
01554  M00S01552.keyex   +++|      BOOLEAN      ZBASE
01555  M00S01553.keyex   +++|*                            HEX CODE FOR BASE OFFSET OF KEY TABLE
01556  M00S01554.keyex   +++|      CHARACTER*7  FILENM
01557  M00S01555.keyex   +++|*                            KEY DEFINITIONS FILE
01558  M00S01556.keyex   +++|      CHARACTER*67 KEYS(NKEYS)
01559  M00S01557.keyex   +++|*                            FUNCTION KEY DEFINITIONS
01560  M00S01558.keyex   +++|      CHARACTER*7  SETDATA(3)
01561  M00S01559.keyex   +++|*                            TERMINAL SETUP DATA
01562  M00S01560.keyex   +++|      CHARACTER*7  STRDEF
01563  M00S01561.keyex   +++|*                            DEFAULT STRING
01564  M00S01562.keyex   +++|      CHARACTER*7  STRHLP
01565  M00S01563.keyex   +++|*                            HELP STRING
01566  M00S01564.keyex   +++|      CHARACTER*7  STRHL1
01567  M00S01565.keyex   +++|*                            HELP WITH CARRIAGE RETURN STRING
01568  M00S01566.keyex   +++|      CHARACTER*7  STREDT
01569  M00S01567.keyex   +++|*                            EDIT STRING
01570  M00S01568.keyex   +++|      CHARACTER*7  STRFSE
01571  M00S01569.keyex   +++|*                            FSE WITH CARRIAGE RETURN STRING
01572  M00S01570.keyex   +++|      CHARACTER*7  STRSTP
01573  M00S01571.keyex   +++|*                            STOP STRING
01574  M00S01572.keyex   +++|      CHARACTER*7  STRCTT
01575  M00S01573.keyex   +++|*                            CONTROL-T STOP STRING
01576  M00S01574.keyex   +++|
01577  M00S01575.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01578  M00S01576.keyex   +++|
01579  M00S01577.keyex   +++|      DATA  KHELP  / Z"47" /
01580  M00S01578.keyex   +++|      DATA  KEDIT  / Z"49" /
01581  M00S01579.keyex   +++|      DATA  KSTOP  / Z"4D" /
01582  M00S01580.keyex   +++|      DATA  ZBASE  / Z"30" /
01583  M00S01581.keyex   +++|      DATA  STRDEF / 'DEFAULT' /
01584  M00S01582.keyex   +++|      DATA  STRHLP / 'HELP   ' /
01585  M00S01583.keyex   +++|      DATA  STRHL1 / 'HELP!  ' /
01586  M00S01584.keyex   +++|      DATA  STREDT / 'EDIT   ' /
01587  M00S01585.keyex   +++|      DATA  STRFSE / 'FSE!   ' /
01588  M00S01586.keyex   +++|      DATA  STRSTP / 'STOP   ' /
01589  M00S01587.keyex   +++|      DATA  STRCTT / 'Z"140D"' /
01590  M00S01588.keyex   +++|
01591  M00S01589.keyex   +++|
01592  M00S01590.keyex   +++|* INITIALIZE *KEYS*.
01593  M00S01591.keyex   +++|
01594  M00S01592.keyex   +++|      DO 100 I = 1, NKEYS
01595  M00S01593.keyex   +++|        KEYS(I) = ' '
01596  M00S01594.keyex   +++|100   CONTINUE
01597  M00S01595.keyex   +++|
01598  M00S01596.keyex   +++|* INITIALIZE *SETDATA*.
01599  M00S01597.keyex   +++|
01600  M00S01598.keyex   +++|      SETDATA(1) = STRDEF
01601  M00S01599.keyex   +++|      SETDATA(2) = STRDEF
01602  M00S01600.keyex   +++|      SETDATA(3) = STRDEF
01603  M00S01601.keyex   +++|
01604  M00S01602.keyex   +++|* STORE LABEL AND KEY DEFINITION FOR EACH *KEYS(I)*.
01605  M00S01603.keyex   +++|* EACH *KEYS(I)* = 7/LABEL, 60/DEFINITION.
01606  M00S01604.keyex   +++|
01607  M00S01605.keyex   +++|      KEYS(KHELP - Z"30")(1:07) = STRHLP
01608  M00S01606.keyex   +++|      KEYS(KHELP - Z"30")(8:67) = STRHLP
01609  M00S01607.keyex   +++|      KEYS(KEDIT - Z"30")(1:07) = STREDT
01610  M00S01608.keyex   +++|      KEYS(KEDIT - Z"30")(8:67) = STRFSE
01611  M00S01609.keyex   +++|      KEYS(KSTOP - Z"30")(1:07) = STRSTP
01612  M00S01610.keyex   +++|      KEYS(KSTOP - Z"30")(8:67) = STRCTT
01613  M00S01611.keyex   +++|      RETURN
01614  M00S01612.keyex   +++|      END
01615  M00S01613.keyex   +++|
01616  M00S01614.keyex   +++|
01617  M00S01615.keyex   +++|      SUBROUTINE VERLOAD(LOADED)
01618  M00S01616.keyex   +++|
01619  M00S01617.keyex   +++|**    VERLOAD - VERIFY THAT TERMINAL HAS LOADED CONTROLWARE.
01620  M00S01618.keyex   +++|*
01621  M00S01619.keyex   +++|*     *VERLOAD* INITIATES A LOADED CONTROLWARE SEQUENCE FOLLOWED BY A
01622  M00S01620.keyex   +++|*     MODEL REPORT REQUEST (WHICH IS ALWAYS PRESENT ON A 721 TERMINAL).
01623  M00S01621.keyex   +++|*     IF THE FIRST ITEM THAT COMES BACK IS THE MODEL REPORT REQUEST
01624  M00S01622.keyex   +++|*     DATA, THEN THERE WAS NO LOADED CONTROLWARE PRESENT.
01625  M00S01623.keyex   +++|*
01626  M00S01624.keyex   +++|*     CALL VERLOAD(LOADED)
01627  M00S01625.keyex   +++|*
01628  M00S01626.keyex   +++|*     EXIT    *LOADED* IS SET IF LOADED CONTROLWARE IS PRESENT.
01629  M00S01627.keyex   +++|*
01630  M00S01628.keyex   +++|*     CALLS   PACK, SEQPACK.
01631  M00S01629.keyex   +++|
01632  M00S01630.keyex   +++|
01633  M00S01631.keyex   +++|      IMPLICIT INTEGER (A - Z)
01634  M00S01632.keyex   +++|
01635  M00S01633.keyex   +++|      BOOLEAN      OUT
01636  M00S01634.keyex   +++|*                            OCTAL CODE TO INITIATE TRANSPARENT MODE
01637  M00S01635.keyex   +++|      BOOLEAN      ZDISKEY(3)
01638  M00S01636.keyex   +++|*                            HEX SEQUENCE TO DISABLE KEYBOARD ENTRY
01639  M00S01637.keyex   +++|      BOOLEAN      ZENKEYB(3)
01640  M00S01638.keyex   +++|*                            HEX SEQUENCE TO ENABLE KEYBOARD ENTRY
01641  M00S01639.keyex   +++|      BOOLEAN      ZHOSTLC(3)
01642  M00S01640.keyex   +++|*                            HEX SEQUENCE FOR HOST LOADED CONTROLWARE
01643  M00S01641.keyex   +++|      BOOLEAN      ZMODREP(3)
01644  M00S01642.keyex   +++|*                            HEX SEQUENCE FOR MODEL REPORT REQUEST
01645  M00S01643.keyex   +++|      CHARACTER*2  CTRLT
01646  M00S01644.keyex   +++|*                            CONTROL-T TERMINATION SEQUENCE
01647  M00S01645.keyex   +++|      CHARACTER*5  MODREP
01648  M00S01646.keyex   +++|*                            TERMINAL MODEL REPORT
01649  M00S01647.keyex   +++|      CHARACTER*7  VERSTR
01650  M00S01648.keyex   +++|*                            VERIFICATION STRING IF TERMINAL LOADED
01651  M00S01649.keyex   +++|      INTEGER      IOS
01652  M00S01650.keyex   +++|*                            IOSTAT VALUE FROM FORMATTED READ
01653  M00S01651.keyex   +++|      CHARACTER*112 OPRAM4
01654  M00S01652.keyex   +++|*                            721 HEX SEQUENCE CODES
01655  M00S01653.keyex   +++|      LOGICAL      LOADED
01656  M00S01654.keyex   +++|*                            CONTROLWARE LOADED FLAG
01657  M00S01655.keyex   +++|
01658  M00S01656.keyex   +++|      DATA  MODREP /'536.5'/
01659  M00S01657.keyex   +++|      DATA  VERSTR /'6A536.5'/
01660  M00S01658.keyex   +++|      DATA  CTRLT  /'5T'/
01661  M00S01659.keyex   +++|      DATA  OUT    /O"00060400001500000000"/
01662  M00S01660.keyex   +++|*                            OUT IS 1 WORD WITH THE DATA LEFT JUSTIFIED
01663  M00S01661.keyex   +++|*                            0006 = INITIATES TRANSPARENT INPUT MODE
01664  M00S01662.keyex   +++|*                            0400 = WORD LENGTH OF BLOCK TO TRANSMIT
01665  M00S01663.keyex   +++|*                            0015 = DELIMITER OF A *CR*
01666  M00S01664.keyex   +++|
01667  M00S01665.keyex   +++|      DATA  OPRAM4 / ' ' /
01668  M00S01666.keyex   +++|      DATA  ZDISKEY / Z"1E", Z"12", Z"4D" /
01669  M00S01667.keyex   +++|      DATA  ZENKEYB / Z"1E", Z"12", Z"4E" /
01670  M00S01668.keyex   +++|      DATA  ZHOSTLC / Z"1E", Z"12", Z"75" /
01671  M00S01669.keyex   +++|      DATA  ZMODREP / Z"1E", Z"43", Z"30" /
01672  M00S01670.keyex   +++|
01673  M00S01671.keyex   +++|11    FORMAT(A112)
01674  M00S01672.keyex   +++|
01675  M00S01673.keyex   +++|
01676  M00S01674.keyex   +++|* TURN OFF INPUT PROMPT AND INITIATE TRANSPARENT INPUT.
01677  M00S01675.keyex   +++|
01678  M00S01676.keyex   +++|      CALL PROMPT
01679  M00S01677.keyex   +++|      CLOSE (2 ,STATUS = 'DELETE' )
01680  M00S01678.keyex   +++|      OPEN  (2, RECL=100, FILE='OUTPUT', FORM = 'UNFORMATTED')
01681  M00S01679.keyex   +++|12    WRITE (2) OUT
01682  M00S01680.keyex   +++|      CLOSE (2 ,STATUS = 'DELETE' )
01683  M00S01681.keyex   +++|      OPEN  (2, RECL=100, FILE='OUTPUT')
01684  M00S01682.keyex   +++|
01685  M00S01683.keyex   +++|
01686  M00S01684.keyex   +++|* GET FUNCTION KEY LABELS FROM THE 721.
01687  M00S01685.keyex   +++|* KEYBOARD MUST BE LOCKED WHILE 721 SENDS FUNCTION KEY DATA UPLINE.
01688  M00S01686.keyex   +++|
01689  M00S01687.keyex   +++|      CALL PACK(1, 0)
01690  M00S01688.keyex   +++|      CALL SEQPACK(ZDISKEY,3)
01691  M00S01689.keyex   +++|      CALL SEQPACK(ZHOSTLC,3)
01692  M00S01690.keyex   +++|      CALL SEQPACK(ZMODREP,3)
01693  M00S01691.keyex   +++|      CALL PACK(3, 1)
01694  M00S01692.keyex   +++|
01695  M00S01693.keyex   +++|* CHECK IF THE MODEL REPORT COMES BACK FIRST.  IF SO, KEYS HAVE NOT
01696  M00S01694.keyex   +++|* BEEN DEFINED.  THE VALUE OF THE MODEL REPORT WILL NOT BE AFFECTED BY
01697  M00S01695.keyex   +++|* SYSTEM CHANGES.
01698  M00S01696.keyex   +++|
01699  M00S01697.keyex   +++|      READ(5,11,IOSTAT=IOS,ERR=14,END=14)OPRAM4
01700  M00S01698.keyex   +++|
01701  M00S01699.keyex   +++|* CHECK IF TYPED-AHEAD INPUT ENTERED.  NOTE THAT THE PROCESS LOOPS
01702  M00S01700.keyex   +++|* UNTIL ALL TYPED-AHEAD INPUT IS REMOVED, AND IS SATISFIED ONLY
01703  M00S01701.keyex   +++|* WHEN A CORRECT SEQUENCE IS RECEIVED FROM THE TERMINAL.
01704  M00S01702.keyex   +++|
01705  M00S01703.keyex   +++|13    IF (.NOT.((OPRAM4(3:7) .EQ. MODREP(1:5)).OR.
01706  M00S01704.keyex   +++|     .         (OPRAM4(3:5) .EQ. CTRLT(1:2)).OR.
01707  M00S01705.keyex   +++|     .         (OPRAM4(3:9) .EQ. VERSTR(1:7)))) THEN
01708  M00S01706.keyex   +++|        GOTO 12
01709  M00S01707.keyex   +++|      ENDIF
01710  M00S01708.keyex   +++|      CALL PACK(1, 0)
01711  M00S01709.keyex   +++|      CALL SEQPACK(ZENKEYB,3)
01712  M00S01710.keyex   +++|      CALL PACK(3, 1)
01713  M00S01711.keyex   +++|      IF(OPRAM4(3:7) .EQ. MODREP(1:5)) THEN
01714  M00S01712.keyex   +++|        LOADED = .FALSE.
01715  M00S01713.keyex   +++|      ELSE
01716  M00S01714.keyex   +++|        LOADED = .TRUE.
01717  M00S01715.keyex   +++|      ENDIF
01718  M00S01716.keyex   +++|      RETURN
01719  M00S01717.keyex   +++|
01720  M00S01718.keyex   +++|14    REWIND 5
01721  M00S01719.keyex   +++|      GOTO 13
01722  M00S01720.keyex   +++|      END
01723  M00S01721.keyex   +++|
01724  M00S01722.keyex   +++|
01725  M00S01723.keyex   +++|      SUBROUTINE WRSORC
01726  M00S01724.keyex   +++|
01727  M00S01725.keyex   +++|**    WRSORC - WRITE KEY DEFINITIONS TO THE SOURCE FILE.
01728  M00S01726.keyex   +++|*
01729  M00S01727.keyex   +++|*     *WRSORC* WILL WRITE THE KEY DEFINITIONS TO THE
01730  M00S01728.keyex   +++|*     SOURCE FILE.
01731  M00S01729.keyex   +++|*
01732  M00S01730.keyex   +++|*     CALL WRSORC
01733  M00S01731.keyex   +++|*
01734  M00S01732.keyex   +++|*     CALLS   PF.
01735  M00S01733.keyex   +++|
01736  M00S01734.keyex   +++|
01737  M00S01735.keyex   +++|      IMPLICIT INTEGER (A - Z)
01738  M00S01736.keyex   +++|
01739  M00S01737.keyex   +++|      PARAMETER     (NKEYS  = 45)
01740  M00S01738.keyex   +++|*                            NUMBER OF DEFINABLE FUNCTION KEYS
01741  M00S01739.keyex   +++|      PARAMETER     (NSETUP = 3)
01742  M00S01740.keyex   +++|*                            NUMBER OF TERMINAL SETUP CHARACTERISTICS
01743  M00S01741.keyex   +++|
01744  M00S01742.keyex   +++|      CHARACTER*7   FILENM
01745  M00S01743.keyex   +++|*                            KEY DEFINITIONS FILE
01746  M00S01744.keyex   +++|      CHARACTER*60  KEYDEF
01747  M00S01745.keyex   +++|*                            FUNCTION KEY DEFINITION
01748  M00S01746.keyex   +++|      CHARACTER*67  KEYS(NKEYS)
01749  M00S01747.keyex   +++|*                            LABEL AND KEYDEF
01750  M00S01748.keyex   +++|      CHARACTER*7   LABEL
01751  M00S01749.keyex   +++|*                            FUNCTION KEY LABEL
01752  M00S01750.keyex   +++|      CHARACTER*7   SETDATA(3)
01753  M00S01751.keyex   +++|*                            SETUP TERMINAL CHARACTERISTICS
01754  M00S01752.keyex   +++|
01755  M00S01753.keyex   +++|      COMMON / INFO / KEYS, FILENM, SETDATA
01756  M00S01754.keyex   +++|
01757  M00S01755.keyex   +++|10    FORMAT(A7, 1X, A60)
01758  M00S01756.keyex   +++|20    FORMAT(A7)
01759  M00S01757.keyex   +++|
01760  M00S01758.keyex   +++|
01761  M00S01759.keyex   +++|      REWIND 1
01762  M00S01760.keyex   +++|
01763  M00S01761.keyex   +++|* WRITE FUNCTION KEY DEFINITIONS TO FILE.
01764  M00S01762.keyex   +++|
01765  M00S01763.keyex   +++|      DO 210 I = 1, NKEYS
01766  M00S01764.keyex   +++|        WRITE(1, 10) KEYS(I)(1:7), KEYS(I)(8:67)
01767  M00S01765.keyex   +++|210   CONTINUE
01768  M00S01766.keyex   +++|
01769  M00S01767.keyex   +++|* WRITE TERMINAL SETUP CHARACTERISTICS TO FILE.
01770  M00S01768.keyex   +++|
01771  M00S01769.keyex   +++|      DO 220 I = 1, NSETUP
01772  M00S01770.keyex   +++|        WRITE(1, 20) SETDATA(I)
01773  M00S01771.keyex   +++|220   CONTINUE
01774  M00S01772.keyex   +++|
01775  M00S01773.keyex   +++|      REWIND 1
01776  M00S01774.keyex   +++|      CALL PF('REPLACE', 'TAPE1', FILENM, 'NA', IGNORE)
01777  M00S01775.keyex   +++|      RETURN
01778  M00S01776.keyex   +++|      END
01779  M00S01777.keyex   +++|
01780  M00S01778.keyex   +++|
01781  M00S01779.keyex   +++|      SUBROUTINE ZSNDADD(ADDRESS)
01782  M00S01780.keyex   +++|
01783  M00S01781.keyex   +++|**    ZSNDADD - FORMAT AND PACK Z80 ADDRESS INTO BUFFER.
01784  M00S01782.keyex   +++|*
01785  M00S01783.keyex   +++|*     *ZSNDSEQ* FORMATS THE GIVEN ADDRESS INTO MODIFIED HEX
01786  M00S01784.keyex   +++|*     FORMAT AND PACKS IT INTO THE BUFFER BEING SENT TO THE
01787  M00S01785.keyex   +++|*     TERMINAL.
01788  M00S01786.keyex   +++|*
01789  M00S01787.keyex   +++|*     CALL ZSNDADD(ADDRESS)
01790  M00S01788.keyex   +++|*
01791  M00S01789.keyex   +++|*     ENTRY   ADDRESS - Z80 ADDRESS IN TERMINAL MEMORY.
01792  M00S01790.keyex   +++|*
01793  M00S01791.keyex   +++|*     CALLS   PACK.
01794  M00S01792.keyex   +++|
01795  M00S01793.keyex   +++|
01796  M00S01794.keyex   +++|      IMPLICIT INTEGER (A - Z)
01797  M00S01795.keyex   +++|
01798  M00S01796.keyex   +++|
01799  M00S01797.keyex   +++|      BOOLEAN      ADDRESS
01800  M00S01798.keyex   +++|*                            Z80 ADDRESS IN TERMINAL MEMORY
01801  M00S01799.keyex   +++|
01802  M00S01800.keyex   +++|
01803  M00S01801.keyex   +++|      CALL BYTE(SHIFT(AND(ADDRESS, Z"FF00"), -8), U1ADDR, L1ADDR)
01804  M00S01802.keyex   +++|      CALL BYTE(AND(ADDRESS, Z"00FF"), U2ADDR, L2ADDR)
01805  M00S01803.keyex   +++|      CALL PACK(2, U1ADDR)
01806  M00S01804.keyex   +++|      CALL PACK(2, L1ADDR)
01807  M00S01805.keyex   +++|      CALL PACK(2, U2ADDR)
01808  M00S01806.keyex   +++|      CALL PACK(2, L2ADDR)
01809  M00S01807.keyex   +++|      RETURN
01810  M00S01808.keyex   +++|      END
01811  M00S01809.keyex   +++|
01812  M00S01810.keyex   +++|
01813  M00S01811.keyex   +++|      SUBROUTINE ZSNDCHR(ZCHAR)
01814  M00S01812.keyex   +++|
01815  M00S01813.keyex   +++|**    ZSNDCHR - FORMAT AND PACK Z80 CHARACTER INTO BUFFER.
01816  M00S01814.keyex   +++|*
01817  M00S01815.keyex   +++|*     *ZSNDCHR* FORMATS THE GIVEN Z80 CHARACTER INTO MODIFIED HEX
01818  M00S01816.keyex   +++|*     FORMAT AND PACKS IT INTO THE BUFFER BEING SENT TO THE
01819  M00S01817.keyex   +++|*     TERMINAL.
01820  M00S01818.keyex   +++|*
01821  M00S01819.keyex   +++|*     CALL ZSNDCHR(ZCHAR)
01822  M00S01820.keyex   +++|*
01823  M00S01821.keyex   +++|*     ENTRY   ZCHAR - Z80 CHARACTER.
01824  M00S01822.keyex   +++|*
01825  M00S01823.keyex   +++|*     CALLS   PACK.
01826  M00S01824.keyex   +++|
01827  M00S01825.keyex   +++|
01828  M00S01826.keyex   +++|      IMPLICIT INTEGER (A - Z)
01829  M00S01827.keyex   +++|
01830  M00S01828.keyex   +++|
01831  M00S01829.keyex   +++|      INTEGER      TEMP1
01832  M00S01830.keyex   +++|*                            Z80 UPPER BYTE
01833  M00S01831.keyex   +++|      INTEGER      TEMP2
01834  M00S01832.keyex   +++|*                            Z80 LOWER BYTE
01835  M00S01833.keyex   +++|      INTEGER      ZCHAR
01836  M00S01834.keyex   +++|*                            Z80 CHARACTER
01837  M00S01835.keyex   +++|
01838  M00S01836.keyex   +++|
01839  M00S01837.keyex   +++|      CALL BYTE(ZCHAR, TEMP1, TEMP2)
01840  M00S01838.keyex   +++|      CALL PACK(2, TEMP1)
01841  M00S01839.keyex   +++|      CALL PACK(2, TEMP2)
01842  M00S01840.keyex   +++|      RETURN
01843  M00S01841.keyex   +++|      END
01844  M00S01842.keyex   +++|
01845  M00S01843.keyex   +++|
01846  M00S01844.keyex   +++|      SUBROUTINE ZSNDSEQ(ZARRAY,ZLENGTH)
01847  M00S01845.keyex   +++|
01848  M00S01846.keyex   +++|**    ZSNDSEQ - FORMAT AND PACK Z80 CODE SEQUENCE INTO BUFFER.
01849  M00S01847.keyex   +++|*
01850  M00S01848.keyex   +++|*     *ZSNDSEQ* FORMATS THE Z80 CODE TO A MODIFIED HEX FORMAT
01851  M00S01849.keyex   +++|*     AND THEN PACKS THE SEQUENCE INTO THE BUFFER THAT IS TO
01852  M00S01850.keyex   +++|*     BE SENT TO THE TERMINAL.
01853  M00S01851.keyex   +++|*
01854  M00S01852.keyex   +++|*     CALL ZSNDSEQ(ZARRAY,ZLENGTH)
01855  M00S01853.keyex   +++|*
01856  M00S01854.keyex   +++|*     ENTRY   ZARRAY - Z80 CODE ARRAY TO BE FORMATTED AND PACKED.
01857  M00S01855.keyex   +++|*             ZLENGTH - LENGTH OF THE ARRAY(SEQUENCE).
01858  M00S01856.keyex   +++|*
01859  M00S01857.keyex   +++|*     CALLS   ZSNDCHR.
01860  M00S01858.keyex   +++|
01861  M00S01859.keyex   +++|
01862  M00S01860.keyex   +++|      IMPLICIT INTEGER (A - Z)
01863  M00S01861.keyex   +++|
01864  M00S01862.keyex   +++|
01865  M00S01863.keyex   +++|      PARAMETER    (MAXSEQ = 50)
01866  M00S01864.keyex   +++|*                            MAXIMUM LENGTH OF SEQUENCE
01867  M00S01865.keyex   +++|
01868  M00S01866.keyex   +++|      BOOLEAN      ZARRAY(MAXSEQ)
01869  M00S01867.keyex   +++|*                            Z80 CODE SEQUENCE
01870  M00S01868.keyex   +++|      INTEGER      ZLENGTH
01871  M00S01869.keyex   +++|*                            LENGTH OF THE Z80 CODE SEQUENCE
01872  M00S01870.keyex   +++|
01873  M00S01871.keyex   +++|
01874  M00S01872.keyex   +++|      DO 100 I = 1, ZLENGTH
01875  M00S01873.keyex   +++|        CALL ZSNDCHR(ZARRAY(I))
01876  M00S01874.keyex   +++| 100  CONTINUE
01877  M00S01875.keyex   +++|      RETURN
01878  M00S01876.keyex   +++|      END
01879  M00S01877.keyex   +++|
01880  M00S01878.keyex   +++|
01881  M00S01879.keyex   +++|      SUBROUTINE Z80CODE
01882  M00S01880.keyex   +++|
01883  M00S01881.keyex   +++|**    Z80CODE - LOAD Z80 CONTROLWARE INTO TERMINAL.
01884  M00S01882.keyex   +++|*
01885  M00S01883.keyex   +++|*     *Z80CODE* STORES THE Z80 ROUTINES *PUSH*, *POP*,
01886  M00S01884.keyex   +++|*     *RESET*, AND *LABEL* INTO THE TERMINAL, AND THEN
01887  M00S01885.keyex   +++|*     DEFINES SEVERAL VIRTUAL KEYS WITH THE ADDRESSES OF
01888  M00S01886.keyex   +++|*     THE LOADED CONTROLWARE.  LATER, WHEN THE KEY IS
01889  M00S01887.keyex   +++|*     INVOKED, THE TERMINAL KNOWS THAT IT CONTAINS THE
01890  M00S01888.keyex   +++|*     ADDRESS OF THE LOADED CONTROLWARE, AND BEGINS
01891  M00S01889.keyex   +++|*     EXECUTION OF THE LOADED Z80 ROUTINES.
01892  M00S01890.keyex   +++|*
01893  M00S01891.keyex   +++|*     THE SOURCE FOR THE FOLLOWING HARDCODED ROUTINES IS
01894  M00S01892.keyex   +++|*     CONTAINED ON THE MAINTENANCE PL AS DECKNAME *KEYUTIL*.
01895  M00S01893.keyex   +++|*
01896  M00S01894.keyex   +++|*     TO REPRODUCE THE Z80 BINARY CODES, RUN THE Z80 VARIANT
01897  M00S01895.keyex   +++|*     OF COMPASS AGAINST THE Z80 ROUTINES IN *KEYUTIL*, THEN
01898  M00S01896.keyex   +++|*     HAND TRANSLATE THE CODE INTO THE ROUTINES BELOW.
01899  M00S01897.keyex   +++|*
01900  M00S01898.keyex   +++|*     CALL Z80CODE
01901  M00S01899.keyex   +++|*
01902  M00S01900.keyex   +++|*     CALLS   PACK, SEQPACK.
01903  M00S01901.keyex   +++|*
01904  M00S01902.keyex   +++|*     NOTES   THE SOURCE FOR THE Z80 BINARY IS PROVIDED HERE.  THIS
01905  M00S01903.keyex   +++|*             SOURCE IS ASSEMBLED USING A Z80 ASSEMBLER, AND THE
01906  M00S01904.keyex   +++|*             BINARY CODES PRODUCED ARE THEN PLACED INTO THE *FORTRAN*
01907  M00S01905.keyex   +++|*             DATA STATEMENTS.
01908  M00S01906.keyex   +++|
01909  M00S01907.keyex   +++|
01910  M00S01908.keyex   +++|      IMPLICIT INTEGER (A - Z)
01911  M00S01909.keyex   +++|
01912  M00S01910.keyex   +++|      PARAMETER    (LZPUSH = 27)
01913  M00S01911.keyex   +++|*                            LENGTH OF THE Z80 PUSH ROUTINE
01914  M00S01912.keyex   +++|      PARAMETER    (LZPOP = 24)
01915  M00S01913.keyex   +++|*                            LENGTH OF THE Z80 POP ROUTINE
01916  M00S01914.keyex   +++|      PARAMETER    (LZRESET = 30)
01917  M00S01915.keyex   +++|*                            LENGTH OF THE Z80 RESET ROUTINE
01918  M00S01916.keyex   +++|      PARAMETER    (LZLABEL = 29)
01919  M00S01917.keyex   +++|*                            LENGTH OF THE Z80 LABEL ROUTINE
01920  M00S01918.keyex   +++|      PARAMETER    (LZVERFY = 6)
01921  M00S01919.keyex   +++|*                            LENGTH OF THE Z80 VERIFY ROUTINE
01922  M00S01920.keyex   +++|      PARAMETER    (LKEYC = 5)
01923  M00S01921.keyex   +++|*                            DIMENSION FOR THE *KEYC* ARRAY
01924  M00S01922.keyex   +++|
01925  M00S01923.keyex   +++|      BOOLEAN      ZABSLOC
01926  M00S01924.keyex   +++|*                            ABSOLUTE LOCATION OF Z80 ROUTINES
01927  M00S01925.keyex   +++|      BOOLEAN      ZCARRET(1)
01928  M00S01926.keyex   +++|*                            HEX CODE FOR CARRIAGE RETURN
01929  M00S01927.keyex   +++|      BOOLEAN      ZCONSEQ(4)
01930  M00S01928.keyex   +++|*                            HEX SEQUENCE FOR CONTROLWARE SEQUENCE
01931  M00S01929.keyex   +++|      BOOLEAN      ZPUSH(LZPUSH)
01932  M00S01930.keyex   +++|*                            HEX ARRAY FOR PUSH ROUTINE
01933  M00S01931.keyex   +++|      BOOLEAN      ZPOP(LZPOP)
01934  M00S01932.keyex   +++|*                            HEX ARRAY FOR POP ROUTINE
01935  M00S01933.keyex   +++|      BOOLEAN      ZRESET(LZRESET)
01936  M00S01934.keyex   +++|*                            HEX ARRAY FOR RESET ROUTINE
01937  M00S01935.keyex   +++|      BOOLEAN      ZLABEL(LZLABEL)
01938  M00S01936.keyex   +++|*                            HEX ARRAY FOR LABEL ROUTINE
01939  M00S01937.keyex   +++|      BOOLEAN      ZVERFY(LZVERFY)
01940  M00S01938.keyex   +++|*                            HEX ARRAY FOR VERIFY ROUTINE
01941  M00S01939.keyex   +++|      INTEGER      KEYC(LKEYC, 2)
01942  M00S01940.keyex   +++|*                            ARRAY FOR Z80 CODE
01943  M00S01941.keyex   +++|
01944  M00S01942.keyex   +++|      DATA    ZABSLOC  / Z"D100" /
01945  M00S01943.keyex   +++|      DATA    ZCARRET  / Z"0D" /
01946  M00S01944.keyex   +++|      DATA    ZCONSEQ  / Z"1E", Z"09", Z"70", Z"32" /
01947  M00S01945.keyex   +++|      DATA    ZPUSH    /
01948  M00S01946.keyex   +++|
01949  M00S01947.keyex   +++|* Z80 ROUTINE TO PUSH FUNCTION KEY DEFINITION TABLE IN TERMINAL.
01950  M00S01948.keyex   +++|
01951  M00S01949.keyex   +++|     .  Z"11", Z"76", Z"D1", Z"01", Z"F0", Z"00", Z"21", Z"E0", Z"D7"
01952  M00S01950.keyex   +++|     ., Z"ED", Z"B0", Z"3A", Z"47", Z"E0", Z"32", Z"66", Z"D2", Z"3A"
01953  M00S01951.keyex   +++|     ., Z"B9", Z"E0", Z"32", Z"67", Z"D2", Z"CD", Z"33", Z"D1", Z"C9"
01954  M00S01952.keyex   +++|     ./
01955  M00S01953.keyex   +++|
01956  M00S01954.keyex   +++|      DATA    ZPOP    /
01957  M00S01955.keyex   +++|
01958  M00S01956.keyex   +++|* Z80 ROUTINE TO POP FUNCTION KEY DEFINITION TABLE IN TERMINAL.
01959  M00S01957.keyex   +++|
01960  M00S01958.keyex   +++|     .  Z"21", Z"76", Z"D1", Z"01", Z"F0", Z"00", Z"11", Z"E0", Z"D7"
01961  M00S01959.keyex   +++|     ., Z"ED", Z"B0", Z"3A", Z"66", Z"D2", Z"32", Z"47", Z"E0", Z"3A"
01962  M00S01960.keyex   +++|     ., Z"67", Z"D2", Z"32", Z"B9", Z"E0", Z"C9"
01963  M00S01961.keyex   +++|     ./
01964  M00S01962.keyex   +++|
01965  M00S01963.keyex   +++|      DATA    ZRESET  /
01966  M00S01964.keyex   +++|
01967  M00S01965.keyex   +++|* Z80 ROUTINE TO RESET FUNCTION KEY DEFINITION TABLE IN TERMINAL.
01968  M00S01966.keyex   +++|
01969  M00S01967.keyex   +++|     .  Z"3A", Z"47", Z"E0", Z"F6", Z"02", Z"32", Z"47", Z"E0", Z"3E"
01970  M00S01968.keyex   +++|     ., Z"00", Z"32", Z"B9", Z"E0", Z"01", Z"F3", Z"00", Z"0B", Z"0B"
01971  M00S01969.keyex   +++|     ., Z"0B", Z"78", Z"B1", Z"C8", Z"21", Z"DD", Z"D7", Z"09", Z"36"
01972  M00S01970.keyex   +++|     ., Z"30", Z"18", Z"F2"
01973  M00S01971.keyex   +++|     ./
01974  M00S01972.keyex   +++|
01975  M00S01973.keyex   +++|      DATA    ZLABEL  /
01976  M00S01974.keyex   +++|
01977  M00S01975.keyex   +++|* Z80 ROUTINE TO DISPLAY RESIDENT KEY LABELS.
01978  M00S01976.keyex   +++|
01979  M00S01977.keyex   +++|     .  Z"3A", Z"DD", Z"D8", Z"67", Z"3A", Z"DE", Z"D8", Z"6F", Z"46"
01980  M00S01978.keyex   +++|     ., Z"78", Z"FE", Z"FF", Z"CA", Z"68", Z"D1", Z"E5", Z"CD", Z"87"
01981  M00S01979.keyex   +++|     ., Z"00", Z"E1", Z"23", Z"18", Z"F1", Z"06", Z"0D", Z"CD", Z"87"
01982  M00S01980.keyex   +++|     ., Z"00", Z"C9"
01983  M00S01981.keyex   +++|     ./
01984  M00S01982.keyex   +++|
01985  M00S01983.keyex   +++|      DATA    ZVERFY  /
01986  M00S01984.keyex   +++|
01987  M00S01985.keyex   +++|* Z80 ROUTINE TO SEND VERIFICATION CHARACTER TO HOST.
01988  M00S01986.keyex   +++|
01989  M00S01987.keyex   +++|     .  Z"06", Z"41", Z"CD", Z"87", Z"00", Z"C9" /
01990  M00S01988.keyex   +++|
01991  M00S01989.keyex   +++|      DATA  (KEYC(I, 1), KEYC(I, 2), I = 1, LKEYC)/
01992  M00S01990.keyex   +++|
01993  M00S01991.keyex   +++|* ADDRESS OF Z80 ROUTINE *PUSH* IS STORED IN KEY 70.
01994  M00S01992.keyex   +++|
01995  M00S01993.keyex   +++|     .        Z"70",      Z"D100"
01996  M00S01994.keyex   +++|
01997  M00S01995.keyex   +++|* ADDRESS OF Z80 ROUTINE *POP* IS STORED IN KEY 71.
01998  M00S01996.keyex   +++|
01999  M00S01997.keyex   +++|     .,       Z"71",      Z"D11B"
02000  M00S01998.keyex   +++|
02001  M00S01999.keyex   +++|* ADDRESS OF Z80 ROUTINE *RESET* IS STORED IN KEY 72.
02002  M00S02000.keyex   +++|
02003  M00S02001.keyex   +++|     .,       Z"72",      Z"D133"
02004  M00S02002.keyex   +++|
02005  M00S02003.keyex   +++|* ADDRESS OF Z80 ROUTINE *LABEL* IS STORED IN KEY 73.
02006  M00S02004.keyex   +++|
02007  M00S02005.keyex   +++|     .,       Z"73",      Z"D151"
02008  M00S02006.keyex   +++|
02009  M00S02007.keyex   +++|* ADDRESS OF Z80 ROUTINE *VERIFY* IS STORED IN KEY 75.
02010  M00S02008.keyex   +++|
02011  M00S02009.keyex   +++|     .,       Z"75",      Z"D16E"
02012  M00S02010.keyex   +++|     ./
02013  M00S02011.keyex   +++|
02014  M00S02012.keyex   +++|
02015  M00S02013.keyex   +++|*NOTIFY THE TERMINAL OF FOLLOWING CONTROL SEQUENCE.
02016  M00S02014.keyex   +++|
02017  M00S02015.keyex   +++|      CALL SEQPACK(ZCONSEQ,4)
02018  M00S02016.keyex   +++|
02019  M00S02017.keyex   +++|* STORE ADDRESS FOR THE Z80 PROGRAM.
02020  M00S02018.keyex   +++|
02021  M00S02019.keyex   +++|      ADDR = ZABSLOC
02022  M00S02020.keyex   +++|      CALL ZSNDADD(ADDR)
02023  M00S02021.keyex   +++|
02024  M00S02022.keyex   +++|* STORE Z80 CONTROLWARE ROUTINES IN CONSECUTIVE MEMORY AT *ZABSLOC*.
02025  M00S02023.keyex   +++|
02026  M00S02024.keyex   +++|      CALL ZSNDSEQ(ZPUSH, LZPUSH)
02027  M00S02025.keyex   +++|      CALL ZSNDSEQ(ZPOP, LZPOP)
02028  M00S02026.keyex   +++|      CALL ZSNDSEQ(ZRESET, LZRESET)
02029  M00S02027.keyex   +++|      CALL ZSNDSEQ(ZLABEL, LZLABEL)
02030  M00S02028.keyex   +++|      CALL ZSNDSEQ(ZVERFY, LZVERFY)
02031  M00S02029.keyex   +++|      CALL SEQPACK(ZCARRET,1)
02032  M00S02030.keyex   +++|
02033  M00S02031.keyex   +++|* STORE ADDRESSES OF Z80 ROUTINES AT VIRTUAL 7X KEY DEFINITIONS.
02034  M00S02032.keyex   +++|
02035  M00S02033.keyex   +++|      DO 110 I = 1, LKEYC
02036  M00S02034.keyex   +++|         ADDR = KEYC(I, 2)
02037  M00S02035.keyex   +++|         ZCONSEQ(3) = KEYC(I, 1)
02038  M00S02036.keyex   +++|         CALL SEQPACK(ZCONSEQ,4)
02039  M00S02037.keyex   +++|         CALL ZSNDADD(ADDR)
02040  M00S02038.keyex   +++|         CALL SEQPACK(ZCARRET,1)
02041  M00S02039.keyex   +++|110   CONTINUE
02042  M00S02040.keyex   +++|      RETURN
02043  M00S02041.keyex   +++|      END
02044  M00S02042.keyex   +++|          IDENT  PLT
02045  M00S02043.keyex   +++|          ENTRY  PLT
02046  M00S02044.keyex   +++|          ENTRY  PROMPT
02047  M00S02045.keyex   +++|          ENTRY  ERR
02048  M00S02046.keyex   +++|          ENTRY  RFL=
02049  M00S02047.keyex   +++|          SPACE  4,10
02050  M00S02048.keyex   +++|*         COMMON DECKS.
02051  M00S02049.keyex   +++|*CALL     COMCMAC
02052  M00S02050.keyex   +++| PLT      SPACE 4,30
02053  M00S02051.keyex   +++|**        PLT - PANEL LOADER TABLE.
02054  M00S02052.keyex   +++|*
02055  M00S02053.keyex   +++|*         *PLT* FORCES THE CYBER LOADER TO INCLUDE THE SMF PANELS
02056  M00S02054.keyex   +++|*         AS STATICALLY LOADED PANELS, AND ARE THEREFORE STATISFIED
02057  M00S02055.keyex   +++|*         BY THE LOADER AT LOAD TIME.
02058  M00S02056.keyex   +++|*
02059  M00S02057.keyex   +++|*         NOTE   THE FIRST TWO STATEMENTS INDICATE THE NUMBER OF
02060  M00S02058.keyex   +++|*                PANELS.
02061  M00S02059.keyex   +++|
02062  M00S02060.keyex   +++|
02063  M00S02061.keyex   +++|PLT       VFD    60/8
02064  M00S02062.keyex   +++|          VFD    60/8
02065  M00S02063.keyex   +++|          VFD    60/7LKEYPAN1
02066  M00S02064.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN1
02067  M00S02065.keyex   +++|          VFD    60/7LKEYPAN2
02068  M00S02066.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN2
02069  M00S02067.keyex   +++|          VFD    60/7LKEYPAN3
02070  M00S02068.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN3
02071  M00S02069.keyex   +++|          VFD    60/7LKEYPAN4
02072  M00S02070.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN4
02073  M00S02071.keyex   +++|          VFD    60/7LKEYPAN5
02074  M00S02072.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN5
02075  M00S02073.keyex   +++|          VFD    60/7LKEYPAN6
02076  M00S02074.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN6
02077  M00S02075.keyex   +++|          VFD    60/7LKEYPAN7
02078  M00S02076.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN7
02079  M00S02077.keyex   +++|          VFD    60/7LKEYPAN8
02080  M00S02078.keyex   +++|          VFD    1/1,41/0,18/=XKEYPAN8
02081  M00S02079.keyex   +++| PROMPT   SPACE 4,15
02082  M00S02080.keyex   +++|**        PROMPT - TURN FORTRAN PROMPTS OFF.
02083  M00S02081.keyex   +++|*
02084  M00S02082.keyex   +++|*         *PROMPT* TURNS OFF THE FORTRAN PROMPTS IN *CHECK* AND
02085  M00S02083.keyex   +++|*         *DISPLAY* ROUTINES.
02086  M00S02084.keyex   +++|*
02087  M00S02085.keyex   +++|*         CALLS  PROMPT.
02088  M00S02086.keyex   +++|
02089  M00S02087.keyex   +++|
02090  M00S02088.keyex   +++|PROMPT    SUBR
02091  M00S02089.keyex   +++|          PROMPT OFF
02092  M00S02090.keyex   +++|          EQ     PROMPTX     RETURN
02093  M00S02091.keyex   +++|
02094  M00S02092.keyex   +++| ERR      SPACE 4,30
02095  M00S02093.keyex   +++|**        ERR - ERROR PROCESSING.
02096  M00S02094.keyex   +++|*
02097  M00S02095.keyex   +++|*         *ERR* RESETS THE *R1* REGISTER WHICH IS USED AS AN ERROR FLAG
02098  M00S02096.keyex   +++|*         IN THE *CCL* PROCEDURE.
02099  M00S02097.keyex   +++|*
02100  M00S02098.keyex   +++|*         ENTRY  THE USER IS IN LINE MODE OR DOES NOT HAVE A *721* TYPE
02101  M00S02099.keyex   +++|*                TERMINAL.
02102  M00S02100.keyex   +++|*
02103  M00S02101.keyex   +++|*         EXIT   R1 = 1
02104  M00S02102.keyex   +++|*
02105  M00S02103.keyex   +++|*         USES   X - 1, 6
02106  M00S02104.keyex   +++|*                A - 1, 6
02107  M00S02105.keyex   +++|*
02108  M00S02106.keyex   +++|*         CALLS  GETJCR, SETJCR.
02109  M00S02107.keyex   +++|
02110  M00S02108.keyex   +++|
02111  M00S02109.keyex   +++|ERR       SUBR
02112  M00S02110.keyex   +++|          GETJCR REGS
02113  M00S02111.keyex   +++|          SA1    REGS
02114  M00S02112.keyex   +++|          SX6    X1+1
02115  M00S02113.keyex   +++|          SA6    REGS
02116  M00S02114.keyex   +++|          SETJCR REGS
02117  M00S02115.keyex   +++|          EQ     ERRX        RETURN
02118  M00S02116.keyex   +++|
02119  M00S02117.keyex   +++|REGS      CON    0
02120  M00S02118.keyex   +++|
02121  M00S02119.keyex   +++|*         BLANK COMMON BLOCK IS USED TO CREATE AN RFL= ENTRY POINT.
02122  M00S02120.keyex   +++|
02123  M00S02121.keyex   +++|          USE    //
02124  M00S02122.keyex   +++|RFL=      BSS    0
02125  M00S02123.keyex   +++|
02126  M00S02124.keyex   +++|          END
cdc/nos2.source/opl.opl871/deck/keyex.txt ยท Last modified: (external edit)