^.W$RbG$n$_MAKE_SDCALCULATOR.CLI comment MAKE_SDCALCULATOR.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] [!equal,,[!path sdcalculator.ob]] x lfe X screen_demon.lb sdcalculator [!end] sd_clink%0/% sdcalculator %1-% pop .W$RbB$n$_ 5MAKE_SD_ICDEB.CLI comment MAKE_SD_ICDEB.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] *** MAKE_SD_ICDEB *** For ICOBOL revision 1.60 and above, this macro can be used to create a new version of the ICDEB debugger for use with revision 3.52 of SCREEN DEMON. The new version will be called SD_ICDEB.PR, and there will be an associated shared library file called ICDEB__SCREEN_DEMON.SL Usage: MAKE_SD_ICDEB{/switches} {additional modules} The /CONFIG=configname switch indicates that the specified alternate SCREEN DEMON configuration file should be used instead of SD_DEBUGGER_CONFIG.OB The /SLONLY switch indicates that only the shared library file ICDEB__SCREEN_DEMON.SL is to be created. The step of creating the SD_ICDEB.PR program will be skipped. [!end] push prompt pop comment Adjust this searchlist command to fit your file system searchlist [!searchlist] :UTIL:ICOBOL& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] comment Determine the revision of ICOBOL being used, if possible. comment Use default revision if revision cannot be determined. delete/2=ignore =?[!pid]rev.tmp [!equal,,[!path icx.pr]] string 1.71 [!else] revision/l==?[!pid]rev.tmp icx.pr string [=?[!pid]rev.tmp] string [!ename [!ename [!string]]] string [!uadd,0,[!ename [!string]]][!eextension [!string]] delete/2=ignore =?[!pid]rev.tmp [!end] write/l==?[!pid]rev.tmp [!string][!ascii 46] [!equal,,%0/o=%] %0\%%0\o%/o=ICDEB_[=?[!pid]rev.tmp]_SCREEN_DEMON.SL %1-% [!else][!equal,,%0/config=%] %0\%%0\config%/config=SD_DEBUGGER_CONFIG %1-% [!else] string/k [!equal,,%0/sl/slonly%] [!equal,,[!path ICDEB.PR]] write [!ascii 7]ICOBOL's ICDEB.PR not found - cannot create SD_ICDEB.PR ! string ERROR [!end] [!end] [!equal,,[!path SD_ICDEB_[=?[!pid]rev.tmp]_INTF.OB]] write ICOBOL rev [=?[!pid]rev.tmp] debugger interface not found: write ,,,,,,,,SD_ICDEB_[=?[!pid]rev.tmp]_INTF.OB string ERROR [!end] [!equal,,[!string]] comment Build the special shared library for SD_ICDEB to use make_screen_demon.sl%0\sl\slonly% SD_ICDEB_[=?[!pid]rev.tmp]_INTF %1-% [!equal,,%0/sl/slonly%] write write Creating SCREEN DEMON version of ICOBOL debugger... sd_possess/delete/sl=%/o=% ICDEB [!nequal,,[!path SD_ICDEB.PR]] write ,,,,SD_ICDEB.PR is ready for use. [!end] [!end] [!end] write delete/2=ignore =?[!pid]rev.tmp [!end][!end] pop .W$RbD$n$_b MAKE_SD_ICX_NAMTB.CLI bcomment MAKE_SD_ICX_NAMTB.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- comment *** This macro assembles a customized NAMTB.OB file comment * to be linked with the ICOBOL interpreter. push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] ((write x/s),x/s) & masm/ps=masm_32char.ps/ulc/o=[!equal,,%1%]NAMTB[!else]%1%[!end]%0/% & NAMTB_DEFINES & NAMTB & %1-% & SD_CALLS pop .W$RbF%hL$_ MAKE_SD_SPY.CLI  comment MAKE_SD_SPY.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro creates a new version of the SD_SPY program, so that its Screen Demon configuration options can be changed. Optional global switches: /CONFIG=filename specifies an alternate configuration file to use instead of SD_SL_CONFIG. /O=programname specifies an alternate program name to create instead of the default name SD_SPY.PR /COB32 indicates that 32-bit VS/COBOL programs are also being linked with SD_SPY, and so will require the COBOL.LB and LANG_RT libaries. /LANG_RT indicates that the Common Language Runtime library is to be linked with the new SD_SPY program. This switch is not necessary if the /COB32 switch is specified. The /PRISWI global switch causes the Printer Switcher routine to be linked with the new version of SD_SPY. The SD_PRISWI_CONFIG file must be available at runtime. /WP causes the interface routines for WordPerfect Library/Office Shell to be linked with the new SD_SPY program. The SHELLCOM.32.OB file provided by WordPerfect must be available at link time. /CEO includes an interface to CEO Mail and to the CEO Interrupt Menu. This interface uses routines from CEO Toolkit, which must be available on your system at link time. /NOMODELID prevents the resulting Spy from querying the terminal for its model id on startup. Spy will assume it is running on a D210 terminal. Additional object modules may be included by listing them on the command line. Optional patches will be installed if they are placed in a file called SCREEN_DEMON.PAT. See the SCREEN_DEMON.OPTIONAL.PAT file for instructions on creating a SCREEN_DEMON.PAT file. Also, all available fix patches, as specified in the NONICX.PATCH_LIST file, will be installed. [!end] push prompt pop Comment Adjust the following SEARCHLIST command to fit your file system: searchlist [!searchlist]& & [!nequal,,%0/cob32/infos/ceo/lang_rt%] [!nequal,,%0/cob32%]& :util:cobol& [!end]& [!nequal,,%0/cob32/ceo/lang_rt%]& :util:lang_rt& [!end]& [!end]& & [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] [!equal,,%0/config=%] %0\%%0\config%/config=SD_SL_CONFIG %1-% [!else][!equal,,%0/o=%] %0\%%0\o%/o=SD_SPY %1-% [!else] [!equal,,[!path %0/config=%.OB]] write ERROR: cannot find configuration file %0/config=%.OB [!else] write write ,,,,Using configuration file [!path %0/config=%.OB] write ,,,,,,,,,to create %0/o=%.PR write (write,x/s) link/stack=20000/tasks=6& [!nequal,,%0/cob32/ceo/lang_rt%]/mtop=1[!end]& %0\config\priswi\wp\ceo\cob32\infos\lang_rt% & sd_spy/start& & %0/config=%& & %1-%& & [!nequal,,%0/wp%]& sd_wp_shell& [!nequal,,[!path :wpoffice:wpoexe:shellcom.32.ob]]& :wpoffice:wpoexe:shellcom.32& [!else][!nequal,,[!path :wpml:shellcom.32.ob]]& :wpml:shellcom.32& [!else]& shellcom.32.ob& [!end][!end]& [!end]& & [!nequal,,%0/ceo%]& sd_ceo_interface& :util:ceo_dir:it_lib.lb/multiple& [!end]& & [!nequal,,%0/priswi%]& sd_priswi& [!end]& & [!nequal,,%0/nomodelid%]& sd_no_model_id& [!end]& & screen_demon.lb& & [!nequal,,%0/cob32%]& cfalt ffalt cobol.lb& [!end]& & [!nequal,,%0/infos%]& [!equal,,%0/infos=%]& icall32& [!else]& dummyicall32& [!end]& [!end]& & [!nequal,,%0/cob32/ceo/lang_rt%]& multitasking no_queued_task_mgr lang_rt.lb& [!else]& sd_no_lang_rt& [!end] [!equal,(),([!string])] comment Install optional patches to the new SD_SPY [!nequal,,[!path SCREEN_DEMON.PAT]] x patch/t==%0/o=%.PR/p=SCREEN_DEMON.PAT/yes [!end] comment Install fix patches if available [!nequal,,[!path NONICX.PATCH_LIST]] x patch/t==%0/o=%.PR/p=([NONICX.PATCH_LIST])/yes [!end] [!nequal,,[!path SPY.PATCH_LIST]] x patch/t==%0/o=%.PR/p=([SPY.PATCH_LIST])/yes [!end] [!end] [!end] [!end][!end] pop .W$RbH$n$_  NAMTB.SR ; NAMTB.SR Screen Demon rev 3.52.01 ;Declaration of user assembler subroutines to be called from ; Interactive COBOL programs running under Screen Demon. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Each definition in this file should be of the following format: ; ; NAME routinename {, referencename} ; ; "routinename" is the actual entry point for the routine. ; ; "referencename" is the name that will appear in the ; CALL "" statements within ICOBOL programs. If not specified, ; it is assumed that the CALL name is the same as "routinename". ;Note that the ?CB calls provided with ICOBOL should NOT be defined in ; this table. Screen Demon will automatically define them, using ; compatible versions of these calls that do not require the ; LANG_RT.LB Common Language Runtimes (which would greatly increase ; the size of the interpreter). ;Specify names of user assembler subroutines below: .W$Q'$n$QO~[SD_ICX_CONFIG.SR ; SCREEN DEMON Configuration file ; ; revision 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;This file provides definitions for the key codes that require intervention ;by SCREEN DEMON after an input. Certain keys may be defined to cause ;a special action to occur, such as redrawing the screen. Then the ;input is restarted exactly as it was when the special key was pressed. ;A translation table may be defined so that keys that are normally ;inaccessible to COBOL (i.e., the arrow keys and C* function keys) can ;be translated to specified standard function key codes. ;Also, miscellaneous items such as the mail message string, time out values, ;note pad filename, and log file size are defined in this file. ;The following sections associates particular keys with specific routines ;that should be called whenever those keys are pressed. ;NOTE: A key that has a subroutine attached to it will never be ;seen by the host program, since the input statement where the key ;was pressed will be automatically restarted when the subroutine returns. ;Each hot key definition has the following form: ; HOT_KEY ; ,,,... ; ; ; ... ; MENU menu description <--- this line is optional ; DIRECTORY initial directory <--- this line is optional ; ACL access control list <--- this line is optional ; ; where: ; ; is one of the following special keys: ; TAB, NEW_LINE, ERASE_EOL, ERASE_PAGE, CR, ESC, DEL, ; HOME, UP, RIGHT, LEFT, DOWN, ; SHIFT_HOME, SHIFT_UP, SHIFT_RIGHT, SHIFT_LEFT, SHIFT_DOWN, ; C1, C2, C3, C4, SHIFT_C1, SHIFT_C2, SHIFT_C3, SHIFT_C4, ; CMD_SHIFT_PRINT, CMD_PRINT ; F1, F2, ..., F14, F15, ; SHIFT_F1, SHIFT_F2, ..., SHIFT_F14, SHIFT_F15, ; CTRL_F1, CTRL_F2, ..., CTRL_F14, CTRL_F15, ; CTRL_SHIFT_F1, CTRL_SHIFT_F2, ..., CTRL_SHIFT_F15, ; ; any single printable character after a quote: ; "A, "a, "*, ..., ; ; or a decimal number (1-127) representing a control character ; or printable character: ; 1 (CTRL-A), 18 (CTRL-R), 64 ("@), ... ; ; ; and ,,... are one of the following: ; LINKED Entry name ; For linked in assembler, C, PL/1, or FORTRAN sub-programs. ; ; COBOL32 Entry name ; For linked in VS/COBOL sub-programs. ; ; ICOBOL Program name ; Use only for an ICX linked with SCREEN DEMON. ; ; PR Name, arg, arg, ... ; The named program will be PROC'ed with the given ; arguments. ; ; CLI Macro name, arg, arg, ... ; CLI will be PROC'ed to execute the given macro ; with the specified arguments. ; ; LINKED_IN_ROOT Name ; For linked-in assembler, VS/COBOL, C, PL/1, ; or FORTRAN sub-programs. ; Use only when the shared library (SL) version of ; SCREEN DEMON is used. At execution time the ; SCREEN DEMON hot key handler will search for ; the specified name in the list of hot key definitions ; that were linked into the root program. A root ; linked hot key definition may be created by ; running the MAKE_SD_HKD macro. ; ; ; 's are from the following list: ; ; SAVE_SCREEN ; If the sub-routine will not make SCREEN DEMON ; calls to save and restore the screen, then include ; this flag. ; ; REDRAW ; or REDRAW IMMEDIATE ; Set if the hot key routine is PR or CLI and it will ; display characters on the screen. SCREEN DEMON ; will not know about the displayed characters so ; the screen must be redrawn. For CLI type hot keys, ; a "Press Any Key To Continue..." message will appear ; on return from the hot key call if REDRAW is ; specified. To suppress this message, use the ; IMMEDIATE option. ; ; CANCEL ; Only for ICOBOL type hot key programs. When the ; hot key is pressed, SCREEN DEMON simulates a ; CALL "program" (not a CALL PROGRAM). If file ; statuses and variables must be in their initial ; state when the program executes, then include this ; flag. ; ; ; The optional MENU clause will place an entry for the hot key ; on the Screen Demon main menu. The description shown on the ; menu will be the text specified after the keyword MENU. ; NOTE: To add a hot key to the main menu without actually ; assigning it to a particular key, do not specify ; a key name on the HOT_KEY clause. For example: ; HOT_KEY ; LINKED SD_WP_SHELL ; MENU WordPerfect Office Shell ; ; ; The optional DIRECTORY clause allows the initial working directory ; for the hot key process to be specified. This clause effects ; only PR and CLI type hot keys. If no DIRECTORY clause is supplied ; in a hot key definition, the hot key process will start in the ; current working directory. ; ; ; The optional ACL clause allows access to the hot key to be ; restricted. Following the ACL keyword should be a list of ; usernames and/or username templates, similar to an AOS/VS ; file ACL. Like an AOS/VS file ACL, `*' matches any one ; character, and `+' matches any number of characters, including ; zero. However, unlike an AOS/VS file ACL, the FIRST character ; of an individual template may be an exclamation mark (!), which ; indicates that if a match occurs on that template, access is to ; be DENIED, rather than permitted. Also, there are no privilege ; letters following each template. Whenever a particular user ; attempts to access a hot key that has an ACL (either via the ; menu or assigned key), Screen Demon will scan the ACL looking ; for a match for the current username. If no template in the list ; matches the current username, Screen Demon will silently deny the ; user access to the hot key. If a match is found, then if the ; template started with `!', access is denied; otherwise, the ; hot key routine will be called. ; ; NOTE: If there is no ACL clause specified in a particular ; hot key definition, then all users will be able to ; access that hot key routine. ; ; For example, suppose the following ACL clause was specified ; as part of a hot key definition: ; ACL FRED !MARTHA MAR+ ; This indicates that FRED may access the hot key, and anyone ; whose username begins with the letters "MAR" except MARTHA ; can access the hot key. All other users will be denied access. ; ; As another example, the ACL clause ; ACL !ACCT+ + ; means that everyone except those whose usernames begin with ; the letters "ACCT" can access the associated hot key routine. BEGIN_HOT_KEYS ;This line (and the END_HOT_KEYS below) must exist ; even if there are no hot keys defined. ; Assign the SCREEN DEMON pop-up main menu to function key 11 (F11) HOT_KEY F11 LINKED SD_MAIN_MENU ; Redraw the Screen when the Erase Page key is pressed HOT_KEY ERASE_PAGE LINKED SD_REDRAW ;Word address of Redraw routine MENU Redraw Screen ; On CMD PRINT or CMD SHIFT PRINT, call the Print Screen program HOT_KEY CMD_PRINT, CMD_SHIFT_PRINT LINKED SDSCREENPR INT ;this is a C program, not COBOL32 MENU Print Screen ; On F14, call the Calculator HOT_KEY F14 ICOBOL SDCALCULATOR MENU Calculator ; On F12, Read Mail ; You can specify SD_READ_MAIL instead of SD_MAIL_INBOX if you ; want new messages to be displayed automatically when the hot ; key is pressed. HOT_KEY F12 LINKED SD_MAIL_INBOX MENU Read Mail ; On Shift F12, Send Mail HOT_KEY SHIFT_F12 LINKED SD_INPUT_MAIL ;Word address of Input Mail Routine MENU Send Mail ; On F13, call the Notepad HOT_KEY F13 LINKED SD_NOTEPAD ;Word address of Notepad routine MENU Notepad ; On F15, call the CLI Interface HOT_KEY F15 LINKED SD_CLI_INTERFACE ;Word address of CLI Interface routine MENU Call CLI ; On Shift F11, call the SCREEN DEMON Command routine (sets Turbo level) HOT_KEY SHIFT_F11 LINKED SD_COMMAND ;Word address of Command routine MENU Turbo On/Off ; On Shift F14, call the Calendar program HOT_KEY SHIFT_F14 ICOBOL SDCALENDAR MENU Calendar ;Add more hot key routine definitions here as required... END_HOT_KEYS ;The following section is used to translate entered key codes to ;different ones. BEGIN_TRANSLATIONS ;This line is required even if there are no ;key translations specified ;For each key that is to be translated to another key, enter a line ;of the following format: ; ; TRANSLATE , ; ; where both key codes are of the form described for ; under the HOT KEY section above. ; ;For example, the following two lines (if the semicolons were removed ;to uncomment them) will translate the up and down arrow keys to F3 and F2, ;respectively: ; TRANSLATE UP,F3 ; TRANSLATE DOWN,F2 ;Insert key translations here END_TRANSLATIONS ;This line is required even if there are no ;key translations specified ;Sometimes it may be desirable to input a particular key to an application, ; even if that key has been assigned to be a hot key or is normally ; translated to appear as another key value. The following definition ; specifies an "escape" key that, if pressed, suppresses hot key processing ; and/or translation of the next key pressed. To pass the chosen "escape" ; key to the application, press it twice. If no "escape" key is desired, ; specify a value of -1. Note that the "escape" key can never be a hot key ; or be translated. HOT_ESCAPE_KEY: CTRL_SHIFT_F15 ;The standard Screen Demon hot key routines accept as the normal ; exit key. Users may be accustomed to pressing a different key to ; exit in their application programs; for example, CEO uses F11 as ; the Cancel/Exit key. To minimize user confusion, it is possible ; to designate an alternate exit key for Screen Demon hot key routines ; that will act the same as . This alternate exit key can be set ; to the same key that the user would press to exit their application ; programs. If no such alternate exit key is desired, set the answer ; to the following question to -1; otherwise, specify the key name: SD_ALTERNATE_EXIT_KEY? -1 ;none by default ;String that will be displayed whenever an input is completed to provide ; immediate feedback to the operator that the input operation is over. ; The next flush will undo whatever this string does to the screen. ; Special screen control characters can be included in the string by ; enclosing them inside <>. Predefined control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; ; If no such feedback is desired, set the INPUT_FEEDBACK_STRING_SIZE below ; to zero. Overall performance will be somewhat slower if the feedback ; string is output after inputs, but may make the system APPEAR faster ; to an operator. INPUT_FEEDBACK_STRING: .TXT "<13>" ;perhaps a CR ;Number of characters in the above string INPUT_FEEDBACK_STRING_SIZE: 0 ;default is no feedback string ;String that will be displayed whenever the user has unread mail. ; Special screen control characters can be included in the string by ; enclosing them inside <>. Predefined control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is a bright, blinking `Mail' in the top right corner of the screen. MAIL_INDICATOR: .TXT "Mail" ;Number of characters in the above string MAIL_INDICATOR_SIZE: 5 ;Location and size of region of screen occupied by above mail indicator string MAIL_VIEW_LINE: 1 MAIL_VIEW_COLUMN: 77 MAIL_VIEW_HEIGHT: 1 MAIL_VIEW_WIDTH: 4 ;String that will be displayed whenever a terminal is being viewed remotely ; through the SD_SPY program. Special screen control characters can be ; included in the string by enclosing them inside <>. Predefined control ; character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is no indicator. SD_REMOTE_VIEW_INDICATOR: .TXT "Remote View" ;Number of characters in the above string, or zero if no Remote View ; indicator is desired SD_REMOTE_VIEW_INDICATOR_SIZE: 0 ;set this to 12 ; to enable indicator ; string defined above ;Location and size of region of screen occupied by above indicator string SD_REMOTE_VIEW_INDICATOR_LINE: 1 SD_REMOTE_VIEW_INDICATOR_COLUMN: 1 SD_REMOTE_VIEW_INDICATOR_HEIGHT: 1 SD_REMOTE_VIEW_INDICATOR_WIDTH: 11 ;String that will be displayed whenever terminal inputs are being handled ; remotely through the SD_SPY program. Special screen control characters ; can be included in the string by enclosing them inside <>. Predefined ; control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is a bright, blinking `Remote Input' in the top left corner ; of the screen. SD_REMOTE_INPUT_INDICATOR: .TXT "Remote Input" ;Number of characters in the above string SD_REMOTE_INPUT_INDICATOR_SIZE: 13 ;Location and size of region of screen occupied by above indicator string SD_REMOTE_INPUT_INDICATOR_LINE: 1 SD_REMOTE_INPUT_INDICATOR_COLUMN: 1 SD_REMOTE_INPUT_INDICATOR_HEIGHT: 1 SD_REMOTE_INPUT_INDICATOR_WIDTH: 12 ;If the CEO interface is to be used, the following two fields allow the ; location of the CEO mail status indicator to be specified. ; At runtime, the optional hot key routine SD_CEO_STATUS_MOVE (see ; the CEO interface documentation) can be used to move the status ; indicator to a different position as needed. These two fields ; are ignored if the CEO interface is not installed. CEO_MAIL_VIEW_LINE: 1 ;Normal default is first line CEO_MAIL_VIEW_COLUMN: 1 ; and first column ;If the WordPerfect Library or Office interface is to be used, the ; following field allows the letter code for the "Go To CLI" ; selection on the Shell menu to be specified. SCREEN DEMON needs ; to know this in order for the SD_CLI_INTERFACE hot key to work ; when running under WP Shell. SD_WP_SHELL_CLI_LETTER: .TXT "G" ;Amount of time in seconds that may elapse during a single input before ;the list of 'periodic calls' is executed. The input is restarted after ;those functions are called. The SCREEN DEMON mail check and CEO interface ;mail check are examples of these periodic calls. PERIODIC_INTERVAL? 60 ;once per minute ;Amount of time in seconds that may elapse during a single input before ;triggering the SCREEN DEMON screen saver. This routine will completely ;blank the screen, including the cursor, to avoid burn-in. Pressing any ;key will restore the original screen contents. Set this field to -1 ;to disable the screen saver. SCREEN_SAVER_INTERVAL? -1 ;default is no screen saver ;Amount of time in seconds that may elapse while the Screen Demon Main Menu ;is waiting for a response before automatically exiting the menu. ; ;Use a value of -1 to never terminate the Main Menu because of inactivity. MAIN_MENU_TIMEOUT_INTERVAL? -1 ;default is no timeout ;Amount of time in seconds that may elapse for a single input before ;the user is terminated (via orderly shutdown: files will be closed). ; ;Use a value of -1 to disable automa @ tic logoff so that users will ; never be terminated because of inactivity. ; ;Note that specific programs can be protected against automatic logoff ; if desired. See Special Programs List below. LOGOFF_INTERVAL? -1 ;Default is to never terminate ; inactive users ;An optional time range during the day can be specified during which ; termination due to inactivity will not occur. Before and after ; this period, however, the time value specified in LOGOFF_INTERVAL ; above will apply. By default, logoff is permitted at any time, ; assuming LOGOFF_INTERVAL above is not -1. ; ; To specify a no-logoff time range, indicate the beginning and ending ; times (24-hour clock) of the protected period as follows: ; LOGOFF_OK_BEFORE hour,minute ; LOGOFF_OK_AFTER hour,minute ; ; For example, assuming that LOGOFF_INTERVAL contained an actual value, ; such as (15*60) to indicate 15 minutes, then the following statements ; would disable automatic logoffs between 8:00 am and 5:30 pm: ; LOGOFF_OK_BEFORE 8,00 ; LOGOFF_OK_AFTER 17,30 ; After 5:30 pm, users inactive for more than 15 minutes are to be logged ; off; the same applies to users inactive before 8:00 am. ;Specify optional no-logoff time period below: LOGOFF_OK_BEFORE 0,00 ;Default is LOGOFF_OK_AFTER 0,00 ; no protected period ;An optional list of users can be specified who are to be considered ; immune from automatic logoff. This list can contain exact usernames, ; username templates, or both. ; ; The NO_LOGOFF_USERS command is used to specify the list. There may ; be up to 25 usernames per NO_LOGOFF_USERS command, and there may be ; any number of NO_LOGOFF_USERS commands, provided each begins on a ; separate line. ; ; For example, ; ; NO_LOGOFF_USERS FRED MAR+ ; NO_LOGOFF_USERS ACCT+ ; ; indicates that all users whose names begin either with the letters MAR ; or ACCT should never be terminated due to inactivity, nor should the ; particular user named FRED. All other users can be terminated if ; their terminals become inactive, provided this is not prevented by ; other considerations, such as the logoff time range specified above, ; or the NO_LOGOFF special program declaration described later. ;Specify any users who should be immune from automatic logoff termination NO_LOGOFF_USERS ;no immune users by default ;The following question specifies the default value for the Turbo ; display setting. Turbo display offers two types of optimization ; of screen output: ; (1) System Call Buffering - Screen output is held until an input ; occurs, or until an specified amount of time has elapsed, ; as set with the FLUSH_INTERVAL? question below. ; (2) Discarding Redundant Characters - A given character will not ; be sent to the terminal if the screen position where it ; is to be displayed already shows that character. ; ; The allowable values for the Turbo display setting indicate what ; level of optimization is desired: ; ; Value Optimization ; ------- --------------- ; FULL Levels 1 and 2 ; PARTIAL Level 2 only ; this is equivalent to FULL with ; FLUSH_INTERVAL? set to zero, and ; is not recommended because it requires ; far more CPU resources ; OFF no optimization ; ON same as FULL ; ;Select an answer from the above list for the following question: DEFAULT_TURBO_DISPLAY_SETTING? FULL ;When running in FULL Turbo display mode, program screen output is normally ; held until the next input occurs, at which time the terminal screen ; is updated. Programs with many displays between inputs, such as a ; report program displaying a record count as it runs, need the screen ; updated more frequently. For this purpose, Screen Demon contains an ; optional Flush Timer which will force a screen update to occur if a ; specified amount of time has elapsed since the last flush, even if ; no input has occurred. ; ; The following field specifies the maximum time in seconds between ; screen updates. ; Use a value of -1 to disable the flush timer; this is equivalent ; to Full Turbo in rev 2 Screen Demon. ; Use a value of 0 to prevent buffering of program screen output; ; this is equivalent to Partial Turbo in rev 2 Screen Demon. FLUSH_INTERVAL? 10 ;flush at least once every ten seconds ;If Turbo mode is on, screen output is held until an input occurs, or ; the FLUSH_INTERVAL expires. If the screen scrolls, it may be ; desirable to update the screen at that time, rather than waiting ; for one of the other events to trigger a flush. The following ; field specifies the maximum number of scroll ups that can be ; held before forcing a flush. Set this field to -1 to prevent ; automatic flushing on scroll operations. MAX_SCROLL_BEFORE_FLUSH: 5 ;If the screen scrolls 5 lines, ; force a flush ;Miscellaneous options, answers are either YES or NO ;When Turbo mode is on, should SCREEN DEMON actually clear the screen ;whenever the host program outputs a clear screen command? ; ; Doing so is usually more efficient, and may be preferable to the ; operators. However, if the host program tends to blank the screen ; and repaint the same text a lot, it would probably be more efficient ; and would look better if SCREEN DEMON suppressed the actual clear ; screen command. PHYSICAL_SCREEN_CLEAR? YES ;Should SCREEN DEMON automatically redraw the screen whenever the ;host program returns from a call to a nonSCREEN DEMON program? ; ; When the host program calls out to a nonSCREEN DEMON program and then ; returns, SCREEN DEMON has no way to know what the nonSCREEN DEMON ; program did to the terminal screen. In order to resynchronize the ; screen with SCREEN DEMON's internal picture, a redraw is necessary. ; By default, this happens at the next flush after returning from ; the call. However, if the called program displayed some information ; that the user needs to see, an immediate redraw will clear this ; information before it can be read. In such cases, it might be ; preferable to set the following option to NO to inhibit the automatic ; redraw, and put code into the host program to call SD_REDRAW when a ; screen redraw is appropriate. Another case where it might be better ; to do the redraw under program control is when the called program ; doesn't actually affect the screen, and so a redraw is not really ; necessary. AUTO_REDRAW_AFTER_NONSD_CALL? YES ;Should SCREEN DEMON use the Line Drawing character set for boxes and ;lines on terminals that have this capability? ; ; The SCREEN DEMON calls SD_DRAW_BOX, SD_DRAW_HLINE, and SD_DRAW_VLINE ; allow the programmer to easily draw boxes and lines on the terminal. ; Boxes and lines created using the Line Drawing character set ; generally look better than the default boxes and lines created ; by using reverse video and underline screen attributes. However, ; there are some differences in the way boxes and lines must be ; built if the Line Drawing character set is used that could cause ; some incompatibilities with existing programs. The main difference ; is that horizontal lines built with Line Draw characters actually ; take up a character position, but horizontal lines created by ; underlining characters already present do not. If this is a problem, ; set the answer for one or both of the following two questions to NO. USE_LINE_DRAW_CHARSET_FOR_BOXES? YES USE_LINE_DRAW_CHARSET_FOR_LINES? YES ;Should Screen Demon turn off the /NRM characteristic so that SENDs ;are not blocked? ; ; Some programs, such as those compiled with VS/COBOL, set the ; /NRM characteristic to protect their screens. However, blocking ; SENDs altogether is not the best solution because there are ; cases when a SEND is the only way of notifying a user of some ; event. Since Screen Demon provides a Redraw Screen capability, ; an application program's screen can easily be restored after a ; SEND message appears on the terminal. Consequently, i ` t is not ; necessary for a program to set the /NRM characteristic. Answering ; this question YES tells Screen Demon to keep this characteristic ; off, even if the host program tries to turn it on. FORCE_NRM_CHARACTERISTIC_OFF? YES ;Should SCREEN DEMON trim trailing spaces and underscore characters ;from the initial contents of input fields, thus permitting ^A, ^E, ;and DELETE screenedit functions to work properly? ; ; Normally, COBOL input fields start off filled with underscore ; or space characters. This means that the "go to end of field" ; and "insert" screenedit functions will not work as expected, ; since PMGR treats the trailing spaces and/or underscores as ; real characters. Also, when DEL is used, trailing underscores ; will shift to the left, shortening the apparent length of the ; input area. Screen Demon can optionally trim these characters ; when the input begins, so that PMGR doesn't know about them. ; The characters will still be displayed before the input begins ; as always. The primary drawback is that when an input restarts, ; such as after a timeout or hot key, any trailing spaces or ; underscores will vanish, which may confuse some operators. ; ; NOTE: A bug in VS/COBOL rev 3.20 and below, and in rev 3.71, ; prevents function keys from working correctly if the ; underscores are removed, so this question MUST be answered ; NO for these revisions of VS/COBOL. The default for this ; question is NO for that reason. TRIM_SPACE_UNDERSCORE_ON_INPUT? NO ;Should SCREEN DEMON ignore console interrupts (^C^A, ^C^B, and ^C^E)? ; ; One of SCREEN DEMON's tasks catches console interrupts. By default, ; it handles the interrupts the same way that the host program would ; if SCREEN DEMON were not present. If the host program contains code ; to watch for console interrupts, SCREEN DEMON will pass the interrupt ; to the host program; otherwise, SCREEN DEMON will terminate the ; process gracefully. ; ; A YES answer to the following question will cause SCREEN DEMON ; to discard any console interrupt events. They will not be passed ; to the host program, and SCREEN DEMON will not terminate the process. ; This is an easy way to prevent operators from aborting out of ; programs that cannot defend themselves. IGNORE_CONSOLE_INTERRUPTS? NO ;How should SCREEN DEMON compensate for the ^C^x character sequence ; echoed whenever the operator presses a console interrupt? ; ; The ^C^x sequence normally echoed whenever a console interrupt ; is pressed is not visible to SCREEN DEMON. Consequently, SCREEN ; DEMON does not know where those echoed characters appeared on the ; screen. By default, SCREEN DEMON will update its image buffers ; to reflect the ^C^x characters by assuming that they are located ; immediately before the cursor position. However, if a display ; was occurring at the time, it is possible for this assumption to ; be incorrect. In order to definitely resynchronize the screen ; with SCREEN DEMON's internal picture, a redraw is necessary, but ; this can be annoying if done automatically; the Redraw hot key ; is available to force a redraw only when necessary. ; ; Select one of the following choices to answer this question: ; INTR_ERASE Immediately space over the ^C^x, assuming that ; the cursor is just past the sequence, leaving ; the cursor at its original position as if ^C^x ; had never been displayed. ; ; INTR_REDRAW Redraw the screen at the next flush to remove ; the ^C^x. This was the method used by rev 2.01.05 ; ; INTR_ECHO Update the ^C^x into the internal image buffers, ; assuming that the cursor is just past the sequence, ; leaving the cursor past the sequence. ; ; INTR_NOTHING Ignore the ^C^x sequence. ; CONSOLE_INTERRUPT_HANDLING? INTR_ECHO ;NOTE: The COBOL versions of the Print Screen hot key routine do not ; use the answers to the following two SDSCREENPRINT... questions, ; but the LINKED SDSCREENPRINT version does. ;Should the SCREEN DEMON Print Screen hot key routine ask the user ;for an output filename? ; ; Answer this question YES to allow the operator to specify a ; print destination for the screen image, with the default ; shown below as SDSCREENPRINT_OUTPUT_NAME. If this question ; is answered NO, then the operator will not be asked for an ; output filename, and the screen image will be printed to the ; default output filename as specified below. SDSCREENPRINT_ASK_OUTPUT_NAME? YES ;Default output filename for the SCREEN DEMON Print Screen hot key routine: SDSCREENPRINT_OUTPUT_NAME: .TXT "@LPT" ;Should the SCREEN DEMON Read Mail hot key routine ask the user ;for an output filename when the Print option is selected? ; ; Answer this question YES to allow the operator to specify a ; print destination for the printed message, with the default ; shown below as SD_READ_MAIL_OUTPUT_NAME. If this question ; is answered NO, then the operator will not be asked for an ; output filename, and the message will be printed to the ; default output filename as specified below. SD_READ_MAIL_ASK_OUTPUT_NAME? YES ;Default output filename for the SCREEN DEMON Read Mail hot key routine ; when the Print option is selected: SD_READ_MAIL_OUTPUT_NAME: .TXT "@LPT" ;Should SCREEN DEMON mail messages be deleted automatically after ;the operator has read them? ; ; Answer this question YES to force mail messages to be deleted ; automatically after the operator has acknowledged reading them. ; If this question is answered NO, previously read messages will ; remain in a user's inbox until deleted by the user. SD_READ_MAIL_AUTO_DELETE? NO ;Should SCREEN DEMON mail messages always be delivered immediately, ;whether or not they are marked as Urgent? ; ; Answer this question YES to force mail messages to appear ; immediately on the recipient's screen, even messages that ; are not Urgent. If this question is answered NO, only ; Urgent messages will appear immediately. Normal messages ; will simply trigger the Mail Indicator; the user must press ; the Read Mail hot key to view these messages. SD_IMMEDIATE_MAIL_DELIVERY? NO ;Declare the default sizes returned by the SD_GET_IMAGE and ; SD_GET_IMAGE_BELOW_FLOAT calls. ; ; Previous revisions of Screen Demon returned a 24 line by 80 column ; image, followed by 4 more bytes containing the cursor offset and ; global attribute settings. For rev 3.00, the internal screen images ; are 24x162, and there are a number of additional fields following the ; image. Existing programs will be expecting the smaller image style ; if they are simply relinked with rev 3.00 Screen Demon. However, if ; a program is recompiled, it may or may not want the older image format. ; If the program defines its image buffer using the SDIMAGE.DEF or ; SCREEN_DEMON.H include files, then a recompile without source code ; changes results in the program expecting the new larger image format. ; However, if the image definition is hard-coded, then the program will ; still expect the older image format even after recompilation. Thus, ; this configuration file option is provided to allow the system ; manager to decide which is the most appropriate default behavior for ; the Get Image calls. Note that a specific Get Image call can declare ; the actual size of image buffer it wants; this overrides the default ; setting defined here. ;Default number of lines in returned image buffers SD_GET_IMAGE_DEFAULT_LINES? 24 ;Default number of columns in returned image buffers ; For rev 3.00 compatibility, specify 162 ; For rev 2.01 (and before) compatibility, specify 80 ; SD_GET_IMAGE_DEFAULT_COLUMNS? 162 ;Default size in bytes of additional parameters returned ; following the image characters and attributes ; For rev 3.00 compatibility, specify 14 ; For rev 2.01 (and before) compatibility, specify 4 ; ;Default additional parameters return size in bytes SD_GET_IMAGE_DEFAULT_PARAMS? 14 ; The fu nctionality of the SD_RETURN_INPUT call was enhanced in ; revision 3.51. In previous revisions, this call functioned only ; in a program or subroutine invoked by pressing a hot key; the string ; of characters specified with this call was returned to the input field ; where the hot key was pressed. ; ; Beginning with revision 3.51, the specified string will be placed in the ; next encountered input field, whether or not a hot key is active. In ; addition, the string can contain multiple fields, separated by delimiters. ; At an input, the next chunk of the return input string will be loaded into ; the field as if the operator had entered it. If a delimiter follows the ; chunk, the input will be terminated as if the operator had pressed that ; key. This process is repeated at subsequent inputs until the contents of ; the return input string have been exhausted. ; ; Since this new functionality is potentially incompatible with that of ; older revisions, a configuration option is provided to allow the desired ; mode of operation to be specified. The new method will be incorrect in ; the situation where a hot key program calls SD_RETURN_INPUT, but then ; does an input before exiting. With the old method, this input would be ; unaffected by the SD_RETURN_INPUT call. With the new method, the returned ; characters would appear at that input, rather than the input field where ; the hot key was pressed. If you have programs that exhibit this behavior, ; you will need to modify them or set the following configuration option to ; "hot key only" mode. Otherwise, the new method should be satifactory. ; ; Choose the answer to the following question from this list of options: ; RI_HOT_ONLY SD_RETURN_INPUT valid only in hot key ; routines; the returned string is loaded ; into the field where the hot key was pressed. ; (Pre-revision 3.51 functionality) ; ; RI_ANY_INPUT SD_RETURN_INPUT works at any time; the ; returned string is loaded into the next ; encountered input field(s), and multiple ; input fields can be returned. ; (revision 3.51 functionality) ; ; Should the SD_RETURN_INPUT call function only to return input information ; from a hot key call to the input field where the hot key was pressed, or ; should return strings declared with this call be available at the next ; encountered input field(s)? SD_RETURN_INPUT_MODE? RI_ANY_INPUT ;default is new method ;If multiple character sets are to be used by programs running under ; SCREEN DEMON, a character set palette must be specified that ; lists the particular character sets to be used. SCREEN DEMON ; supports up to 8 simultaneously displayed character sets. ; Note that only some DG terminals support multiple character sets. ; ; Specify the character sets that will be invoked by listing their ; two-character codes, which can be found in the terminal's programming ; manual. The first code in the list should be the standard primary ; character set to be used (the code 00 is suggested, which is the set ; of the keyboard attached to the terminal). The order of the remaining ; codes is unimportant. If less than eight codes are listed, the default ; settings will be used for the unspecified palette slots. ; ; For example, (this is also the default palette) ; ; CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ; ; specifies that the following character sets are available: ; '00' char set #0 (primary) is Keyboard set ; '10' char set #1 is Word Processing set ; '11' char set #2 is Line Drawing set ; '0>' char set #3 is DG International set ; '01' char set #4 is U.S. set ; '02' char set #5 is United Kingdom set ; '13' char set #6 is DG Special Graphics set ; '20' char set #7 is DLL set 0 ;Indicate your desired character set palette here: CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ;Which of the sets listed in the palette above should be the default ; primary set? DEFAULT_PRIMARY_CHAR_SET? 00 ;Which of the sets listed in the palette above should be the default ; alternate set? DEFAULT_ALTERNATE_CHAR_SET? 10 ;For terminals that support selectable 7/8 bit mode, what should be ; the default character length? ; ; Most Data General terminals that support multiple character sets ; also support either 7 or 8 bit mode. When in 7-bit mode, the high ; bit is a parity bit, so the terminal only looks at the lower 7 bits ; when determining what character to display, and the character is ; always selected from the currently active character set. When in ; 8-bit mode, all bits are significant. If the high bit for a received ; character is set, the terminal will display the character from the ; current alternate character set even if the primary set is active ; at the time. ; ; This question allows the default setting for this parameter to be ; specified. Screen Demon will force the terminal into this state ; on start-up. ; ; This question should be answered with a value of either 7 or 8. DEFAULT_7_OR_8_BIT_MODE? 7 ;For terminals that support selectable keyboard language, what should be ; the default setting? ; ; When the terminal is operating in 7-bit mode (see above), this ; parameter is ignored, and the keyboard language matches the ; keyboard hardware. When in 8-bit mode, the keyboard language ; can also be set to be the US ASCII character set for 7-bit ; characters, and the DG International character set for 8-bit ; characters. This may be necessary if the SPCL key is to be ; used to generate particular 8-bit characters. ; ; Select one of the following choices to answer this question: ; KEYBD_LANG_HARDWARE Matches the keyboard hardware ; KEYBD_LANG_INTERNATIONAL US ASCII in K0, DG International in K1 DEFAULT_KEYBOARD_LANGUAGE? KEYBD_LANG_HARDWARE ;For terminals that support variable cursor types, what should be ; the default cursor type? ; ; The more advanced Data General terminals support different cursor ; types. On newer terminals, the default cursor type can be adjusted ; in the set-up screens. There is also a local cursor type key on ; the keyboard. Screen Demon cannot determine the current cursor type ; of the terminal, so it must force the cursor to a particular type ; when a Redraw occurs. The desired default cursor type can be ; indicated here. ; ; Select one of the following choices to answer this question: ; CURSOR_INVISIBLE No cursor ; ; CURSOR_BLINK_UNDERSCORE Cursor is a blinking underscore ; ; CURSOR_BLOCK Cursor is a reverse video block ; ; CURSOR_BLINK_BLOCK Cursor is a blinking reverse ; video block ; ; CURSOR_UNDERSCORE Cursor is a nonblinking underscore ; (not supported on older terminals) ; DEFAULT_CURSOR_TYPE? CURSOR_BLOCK ;For terminals that support adjustable scroll rates, what should be ; the default scroll rate? ; ; The more advanced Data General terminals support different scroll ; rates. On newer terminals, the default scroll rate can be adjusted ; in the set-up screens. There is also a local scroll rate key on ; the keyboard. Screen Demon cannot determine the current scroll rate ; of the terminal, so it must force the scroll rate to a particular ; setting when a Redraw occurs. The desired default scroll rate can be ; indicated here. ; ; Select one of the following choices to answer this question: ; SCROLL_JUMP As fast as new lines are received ; ; SCROLL_SMOOTH_SLOW Smooth scroll, 5 lines per second ; ; SCROLL_SMOOTH_FAST Smooth scroll, 10 lines per second ; DEFAULT_SCROLL_RATE? SCROLL_JUMP ;Initial command string for SD_CLI_INTERFACE hot key routine: ; (can be changed at runtime using the SD_SET_CLI_INIT_CMD call) SD_DEFAULT_CLI_INIT_CMD: .TXT "PREFIX,SCREEN,DEMON,CLI[!ASC 251]" ;Pathname of the CLI program to be called for CLI interface. ; If CLI32 is available, you may wish to change the pathname ; below to call that instead. Alternatively, you may want ; to call SD_CLI, if you have created a Screen Demon possessed ; version of CLI32. SD_CLI_PATHNAME: .TXT ":CLI" ;Screen Demon can maintain a list of the mos t recently entered ; input strings. This is similar to the HISTORY feature in CLI32, ; but Screen Demon's input history works at all input fields in ; any program. A separate input history is kept for each process. ; ; The input history is accessed via two hot key routines, which ; can be assigned to any two different keys on the keyboard. ; The hot key routine SD_GET_PREV_FROM_INPUT_HISTORY moves backward ; in the history list, displaying the input strings in the current ; input field each time the hot key is pressed. The hot key routine ; SD_GET_NEXT_FROM_INPUT_HISTORY works the same way, except that it ; moves forward through the history list. Both routines wrap around ; to the other end of the list when necessary. ; ; To maintain the input history, a buffer must be allocated where ; the input strings can be stored. Obviously, a larger buffer means ; more available input history. Unlike CLI32 HISTORY, where the ; history size is specified in lines, for Screen Demon's input history ; buffer, the size is specified in characters. If the input history ; feature is not desired, set the buffer size to zero. INPUT_HISTORY_BUFFER_SIZE? 0 ;default is no history ;Screen Demon can maintain a copy of text that has recently been scrolled ; off the top of the screen, or cleared because of a form feed command. ; These lines are kept in a "scrollback" buffer. When the buffer becomes ; full, the oldest lines are discarded to make room for new additions. ; ; The scrollback buffer can be examined via the hot key routine ; SD_SHOW_SCROLLBACK_BUFFER, which can be assigned to any key on ; the keyboard. While viewing the scrollback buffer, press UP ARROW ; to move upward and see earlier lines, or press DOWN ARROW to move ; downward and see text that scrolled off more recently. ; ; The scrollback buffer will be allocated at runtime. The size ; of this buffer is declared in characters. Screen Demon will keep ; as many complete scrollback lines in this buffer as will fit; ; the actual number of lines stored will depend on the average line ; length. If the scrollback feature is not desired, set the buffer ; size to zero. SCROLLBACK_BUFFER_SIZE? 0 ;default is no scrollback buf ;First part of pathname to user notepad files. A complete pathname to a ;user's notepad file is formed by taking the prefix string specified here ;(usually a directory pathname), appending the user's name, and then the ;string given below under PAD_PATH_SUFFIX. PAD_PATH_PREFIX: .TXT ":UDD:" ;Name extension of notepad file ready to be appended to Prefix/Username ;combination as described above. PAD_PATH_SUFFIX: .TXT ":NOTEPAD" ;Maximum size, in bytes, of a console logging file. MAX_CONLOG_SIZE? 65536 ;If Screen Demon should maintain a clock on the screen to display ; the current date, time, etc., describe the position, size, ; and format of this clock below. If no clock format string ; is specified, Screen Demon will not link the clock routine ; into your programs. ; ; ;Format string definitions: ; ; SD_FLOAT_CLOCK_FORMAT: ; .TXT "string" ; ; The text in the given string is displayed exactly except for ; constructs beginning with a percent sign (%). The character ; or characters following the percent sign indicate what parameter ; is to be displayed in place of the construct. In the list below, ; the examples of what would be displayed are based on the example ; point in history of 18-DEC-90 at 3:05 pm ; ; %% display a single percent sign ; % display a space. Use this in order to ; specify sequences of more than one SPACE, ; because " " looks like only one SPACE ; to the config file builder, but "% % % " ; will be seen as three consecutive SPACE ; characters. ; %cn display the upper two digits of complete year ; (e.g., 19) ; %yr display the lower two digits of complete year ; (e.g., 90) ; %mo display the month number within the year (e.g., 12) ; %nm display the full name of the month (e.g., December) ; %am display the abbreviated month name (e.g., Dec) ; %da display the day number within the month (e.g., 18) ; %nd display the full name of the day (e.g., Tuesday) ; %ad display the abbreviated day name (e.g., Tue) ; %hr display the hour in 12-hour format (e.g., 3) ; %mh display the hour in 24-hour format (e.g., 15) ; %mi display the minutes within the hour (e.g., 5) ; %ap display appropriate am/pm indicator (e.g., pm) ; ; ; For names, abbreviations, and the am/pm indicator, the case of ; the first character of the format specifier indicates the case ; of the first character of the displayed string. The case of the ; second character of the format specifier indicates the case of ; the remaining characters of the displayed string. ; e.g. %nm --> december ; %Nm --> December ; %NM --> DECEMBER ; ; For format specifiers that result in numeric displays, the case ; of the specifier is ignored. However, for these specifiers, ; a `0' character can be placed between the `%' character and the ; two-character code; this indicates that a leading zero should be ; included if necessary to pad the number out to two digits. ; e.g. %hr:%mi %ap --> 3:5 pm ; %hr:%0mi %ap --> 3:05 pm ; %0mh%0mi --> 1505 ; ; ; Note that screen control characters can be included in the ; format string if desired. See MAIL_INDICATOR above for ; information about these characters. ; ; As a more complex example, the format string ; "% It is now %hr:%0mi %ap on %Nd % %Nm %da, %cn%yr" ; would display the following underlined clock output: ; It is now 3:05 pm on Tuesday December 18, 1990 ; which would be updated at each input, and periodically ; during an input based on the time value indicated for ; the PERIODIC_INTERVAL? question above. ; ; ;Describe your desired clock format below. ; Leave this question blank if you do not want Screen Demon ; to display a clock. Otherwise, specify a format string ; of the form ; .TXT "string" ; following the label below: SD_FLOAT_CLOCK_FORMAT: ;default is no clock ;Specify the position and size of the clock on the screen. Note that ; the answers to the next four questions are ignored if the answer ; to the SD_FLOAT_CLOCK_FORMAT: question above is blank. The values ; shown here would match a Clock Format of "%mh:%0mi" SD_FLOAT_CLOCK_LINE: 1 SD_FLOAT_CLOCK_COLUMN: 76 SD_FLOAT_CLOCK_HEIGHT: 1 ;height in lines SD_FLOAT_CLOCK_WIDTH: 5 ;width in columns ;The names used by Screen Demon for months and weekdays are listed below. ; These lists can be modified to support languages other than English. ; Note that each of the two lists must appear on a single line, all ; names must be specified in uppercase, and there must be a vertical ; bar character (|) following each name in each of the lists. SD_MONTH_NAMES: .TXT "JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER|" SD_WEEKDAY_NAMES: .TXT "SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|" ;Under either the Interactive COBOL or Shared Library versions ; of SCREEN DEMON, all user programs will access the same copy ; of SCREEN DEMON, causing all programs to be treated alike. ; Since there will probably be some programs that should not ; be run with full Turbo Display, for example, this ; configuration file allows "special" programs to be declared. ; In this way, programs with special requirements will be ; automatically recognized and handled appropriately by SCREEN ; DEMON when they execute; all other programs will run normally. ; ; One of the special requirements that may be declared is Turbo ; Display level. While the majority of user programs will perform ; best with Full Turbo, there may be a few situations where ; No Turbo might need to be selected. For compatibility with ; Screen Demon rev 2.01, Partial Turbo is still available, but ; is strongly discouraged because of the performance penalty. ; ; Also, if the automatic logoff feature is enabled (see ; LOGOFF_INTERVAL above), there may be crit ical programs that ; shouldn't be terminated, no matter how long an operator lets ; them remain idle. These programs can be declared in the ; Special Programs list below to protect them from the automatic ; logoff handler. ; ; In rare cases, it may be appropriate to have SCREEN DEMON turn ; itself off while a particular program runs. This can be ; accomplished by declaring these programs as BYPASS in the ; Special Programs list. ; ; There may be some programs where hot keys are not desirable, ; such as a logon program. Since hot keys could allow access ; to application programs before a user had entered a name and ; password, it might be wise to disable hot keys while the ; logon program is running. This can be accomplished by declaring ; such programs as NO_HOT_KEYS in the Special Programs list. ; ; By listing a program in the Special Programs list with the LOG ; option, console event logging will automatically activate whenever ; that program is running. This eliminates the need to use SPY to ; watch for someone to run the program, and then manually start ; Logging on that console. ; ; ; Entries in the Special Programs list are lines of the form: ; Keyword programname1,programname2,...,programnameN ; ; The possible Keywords are ; PARTIAL_TURBO ; NO_TURBO ; NO_LOGOFF ; BYPASS ; LOG ; NO_HOT_KEYS ; ; There may be any number of entries in the list. A program ; can appear in more than one entry if it has more than one ; special attribute. The only restrictions are that each line ; must begin with one of the above keywords, and that the program ; names must be simple filenames without the .PR or .PD extension ; (pathnames or pathname fragments are not allowed). ; ; For example, ; BEGIN_SPECIAL_PROGRAMS ; PARTIAL_TURBO CSMNUPRT,CSOPRPRT ; NO_TURBO CSDBFM4 ; PARTIAL_TURBO CSLOGUPD ; NO_LOGOFF CSLOGUPD, CSDBFM4 ; NO_HOT_KEYS CSLOGON ; END_SPECIAL_PROGRAMS ; declares that the programs called CSMNUPRT, CSOPRPRT, and ; CSLOGUPD are to be run in Partial Turbo, while the program ; called CSDBFM4 must be run with Turbo Display completely off. ; All other programs run at the default Turbo setting, probably ; Full. In addition, the programs called CSLOGUPD and CSDBFM4 ; are immune to automatic logoff, and while the program CSLOGON ; is running, hot keys are disabled. BEGIN_SPECIAL_PROGRAMS ;This line (and the END_SPECIAL_PROGRAMS below) must ; exist even if there are no special programs defined. ;Put special program declarations here END_SPECIAL_PROGRAMS ;Titles used for the various Screen Demon pop-up functions. Note that ; control characters cannot be included in these title strings. ;Main menu - SD_MAIN_MENU: SD_MAIN_MENU_TITLE: .TXT " SCREEN DEMON Menu " ;Note: The <60> and <62> characters in the string below are `<' and `>', ; respectively. They must be expressed in numeric form because these ; are special characters for the .TXT assembler pseudo-op. SD_MAIN_MENU_FOOTER: .TXT " <60>NL<62> to select" ;Notepad - SD_NOTEPAD: SD_NOTEPAD_TITLE: .TXT " SCREEN DEMON Notepad " ;Print Screen - SDSCREENPRINT: SDSCREENPRINT_TITLE: .TXT " SCREEN DEMON Screen Print " ;Calculator - SDCALCULATOR ; There are two title lines for the calculator, each of which ; may be up to 16 characters long. SDCALCULATOR_TITLE_ONE: .TXT "SCREEN DEMON" SDCALCULATOR_TITLE_TWO: .TXT " Calculator" ;Also store these titles in PutValue space so that COBOL programs ; can get to them: PUT_VALUE SDCALCULATOR_TITLE_ONE PUT_VALUE SDCALCULATOR_TITLE_TWO ;Calendar - SDCALENDAR: SDCALENDAR_TITLE: .TXT " SCREEN DEMON Calendar " ;Also store this title in PutValue space so that COBOL programs ; can get to it: PUT_VALUE SDCALENDAR_TITLE ;Read Mail - SD_READ_MAIL: SD_READ_MAIL_TITLE: .TXT " SCREEN DEMON Read Mail " ;Input (Send) Mail - SD_INPUT_MAIL: SD_INPUT_MAIL_TITLE: .TXT " SCREEN DEMON Send Mail " ;Turbo Control - SD_COMMAND: SD_COMMAND_TITLE: .TXT " SCREEN DEMON Turbo Control " ;Request a chunk of unshared memory of a specified size in pages (2 KB) ; to be reserved for initial Screen Demon memory allocation operations. ; Screen Demon will use memory from this chunk until it is exhausted, ; and only then will it resort to a temporary shared memory file. The ; default size of 24 is sufficient for program start-up needs and the ; initial window, but not for additional pop-up windows. Note that ; excessively large values for this parameter may require that a ; larger KTOP or MTOP be declared at LINK time. This parameter can ; be set to zero to save space in the .PR file, at the expense of ; increased program start-up time. ; ; NOTE: This parameter should be set to zero for ICOBOL revision 1.60 ; and below; unpredictable errors may occur otherwise. ;Default SD_MEM initial chunk size in pages: SD_MEM_SIZE 0 ;The following section applies primarily to CEO environments, but may ; be applicable to other shared console / multiple program situations. ; ; If some of the CEO programs, such as CEO_CP, have been possessed ; with Screen Demon, but others, such as CEO_WP, have not, then special ; handling is required to keep the terminal screen up-to-date. ; In this situation, the integrated programs transfer control of the ; console between each other by means of IPC messages. Screen Demon ; will need to monitor these messages, since the console parameters ; (characteristics, etc.) may need to be reset and the screen redrawn ; when an IPC message is received from a non-Screen Demon process to ; return control of the console to a Screen Demon program. However, ; there is other IPC message traffic to/from the CEO agents, such as ; CEO_POA, that can be safely ignored, since these processes will not ; affect the console. ; ; When running in a shared console environment, such as CEO, what ; special handling, if any, needs to occur for IPC messages? ; ; Possible answers to this question are ; SHCON_IPC_IGNORE No special handling ; SHCON_IPC_FLUSH Flush to make sure screen is up-to-date ; before processing the message ; SHCON_IPC_RESET Flush before processing the message, and ; reset console environment (characteristics, ; etc.) after a message is received ; SHCON_IPC_REDRAW Same as RESET plus redraw the screen after ; a message is received ; ; The SHCON_IPC_REDRAW answer is suggested in the CEO environment as ; described above. The IGNORE response should be used if your application ; runs in a shared console environment, and uses IPC messages, but not for ; the purpose of transferring control of the console between processes. ; Screen Demon rev 3.00.03 always used the RESET option. ; ; Answer the following question with one of the above responses: SHARED_CONSOLE_IPC_HANDLING? SHCON_IPC_RESET ;Default is same as rev 3.00.03 ;If IPC messages are not ignored in this situation (i.e., the above question ; was not answered with SHCON_IPC_IGNORE), then you may wish to specify the ; names of server processes that will not affect the console. IPC traffic ; to/from these processes can be ignored. ; ; Determine the full process names for each of the processes that are to ; be ignored. A full process name consists of a username, followed by a ; colon character, followed by the simple process name. The CLI WHO command ; shows this information. For example: ; ) WHO 15 ; PID: 15 CEO_MGR CEO_POA :UTIL:CEO_DIR:CEO_POA.PR ; ^ ^ ; | | ; username simple process name ; ; Declare that IPC messages to/from a process are to be ignored using ; the SHCON_IPC_IGNORE_IF_FROM command. For example, the following ; is suggested if your CEO environment is as described previously: ; ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_POA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_FSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_CSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_QMA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_NSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_LOG ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_OP ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_GPN_1 ; ; There may be any number of these commands, but only one pro cess name can ; be specified per command. You do not need to specify any of these commands ; if this situation does not apply to your system. ; ; Specify any processes whose IPC messages are to be ignored when running ; in a shared console environment: ;none by default ; Custom user configuration data can also be stored in this file. There ; is no limit to the amount or type of information that can be included. ; User programs can retrieve this data using the SD_GET_VALUE call. ; ; The general format of user-defined configuration options is as follows: ; ; label: ; .TXT "value" ; ; PUT_VALUE label ; ; ; where 'label' is an identifier for the data item, and 'value' is the ; actual data itself. ; ; 'label' must consist only of letters, digits, and the special characters ; underscore (_), question mark (?), period (.), and dollar sign ($). ; The first character cannot be a digit. The exact name of 'label' must ; be known to a user program in order to retrieve the 'value' using ; SD_GET_VALUE. ; ; 'value' can be any string of ASCII characters. Control characters can ; be included by enclosing their decimal value within <>. ; ; For examples, see the declarations of the SDCALCULATOR and SDCALENDAR ; title strings elsewhere in this configuration file. ; ; Include any custom configuration options here: ;The following must be the last statement in this file (except for the .END) END_CONFIGURATION .END .W$L$n$_vlSD_MVUX_POSSESS.PAT ;--------------------------------------------------------------------- ; SD_MVUX_POSSESS.PAT 24-SEP-92 ; ;This patch is necessary for complete "possession" of programs ; from Data General's MV/UX system, which emulates a UNIX ; environment under AOS/VS. These programs contain a direct ; call to AGENT for some system calls. This call must be ; modified to call the Screen Demon system call interceptor ; instead so that Screen Demon can see the call. ; Apply this patch to SD_POSSESS'd MV/UX programs. %USERFILE 20264 [WPSH 3,3] {LJMP #20006,0} ^+1 [LCALL 6000000000,0,0] [] ^+1 [] [] ^+1 [] [NOP] ^+1 [] [NOP] ;End of patch .W$G%Om$_@ՏSD_POSSESS_ICX_1.40.PAT @;The patches in this file activate the SCREEN DEMON routines. ; ;This file applies only to revision 1.40 of the Interactive COBOL ; interpreter running under AOS/VS, using revision 3.52 of SCREEN DEMON ; for Interactive COBOL. %PROGRAM ;Catch beginning of initialization routine so that SCREEN DEMON can be ; initialized also. INIT+2 [LLEF 2,SCRPK,0] [LJMP SD_ICX_INIT,1] ^+1 [] [] ^+1 [] [] ;This patch allows Screen Demon to know when ICX has an ACCEPT ; in progress, and if multiple console ?READ's are actually ; part of the same ACCEPT. RDFD [WSSVR 10] [LJMP SD_ICX_RDFD,1] ^+1 [] [] ^+1 [NLDAI -1,1] [] ^+1 [] [WADC 1,1] ;This patch causes the ICOBOL interpreter to return an ESCAPE KEY ; value of 99 if a console timeout occurs, instead of aborting ; with a "Runtime System Panic". RDFD+1354 [NLDAI 67,1] {LPSHJ #SD_PATCH,1} ^+1 [] [] ^+1 [SUB# 0,1,SZR] [] #SD_PATCH 0 [WSNEI 76,0] ^+1 0 [] ^+1 0 [WBR .+5] ^+1 0 [WSNEI 67,0] ^+1 0 [] ^+1 0 [ISZTS] ^+1 0 [WPOPJ] ^+1 0 [WPOP 1,1] ^+1 0 [XNLDA 1,10,2] ^+1 0 [] ^+1 0 [XWADD 1,4,2] ^+1 0 [] ^+1 0 [WSUB 0,0] ^+1 0 [WSTB 1,0] ^+1 0 [NLDAI 99.,0] ^+1 0 [] ^+1 0 [LJMP RDFD+1100,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+23\ ^+1 [] [] ;Intercept EXIT PROGRAM so that if the exiting ICOBOL program was called via ; a "hot" key, control can be returned to the original ACCEPT. A.XIT+3 [LJMP COBOL,0] [LJMP SD_ICX_EXIT_PROGRAM,1] ^+1 [] [] ^+1 [] [] ;Divert STOP RUN processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called ; from a hot key. OAT+232 A.STP-.\ SD_ICX_STOP_RUN_HANDLER-.\ ^+1 [] [] ;Divert CALL PROGRAM processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called from ; a hot key. CHNOP+13 [XJSR WUSIN,1] [LJMP SD_ICX_CALL_PROGRAM_HANDLER,1] ^+1 [] [] ^+1 [WBR CHNOP+151] [] ;Catch ICOBOL program loads so that the name of the new active program ; can be obtained and put into the SCREEN DEMON control file. ASPRG+62 [XJSR WRPGD,1] [LJMP SD_ICX_ASPRG,1] ^+1 [] [] ^+1 [WBR ASPRG+136] [] LDPRG+7 [XJSR RDPGD,1] [LJMP SD_ICX_LDPRG,1] ^+1 [] [] ^+1 [WBR LDPRG+35] [] ;Catch ICX Abort so that SCREEN DEMON can reset the window environment ; if control will be returning to LOGON. ; Note that the 341 in next line is actually ICX's STATUS address CSTOP+2 [LDA 0,341,0] [LJMP SD_ICX_CSTOP,1] ^+1 [ANDI 2,0] [] ^+1 [] [] CPERR+14 [WBR CSTOP+11] [WBR CSTOP+2] CSTOP+24 [LJSR WAIT,1] [LJMP SD_ICX_CSTOP_WAIT,1] ^+1 [] [] ^+1 [] [] ;Catch entry into the ICX Debugger so that debugger window can be activated DB0 [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] SBUGG [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] EBUGG [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] ;Catch exit from the ICX Debugger so that debugger window can be deactivated DB0+122 [LDASB 3] [LPSHJ SD_ICX_LEAVE_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] ;Intercept ICX's attempt to input a debugger command so that this can be done ; in a proper screenedit fashion. SCAN0+343 [XJSR RDFD,1] [LJSR SD_ICX_READ_DEBUGGER_COMMAND,1] ^+1 [] [] ^+1 [WBR SCAN0+323] [] ICX_DEBUG_RESTART_ADDR 0 SCAN0+303\ ^+1 0 [] ;********** Optional Patches ********** ;This optional patch causes Screen Demon to catch ICX-generated error ; messages displayed on line 24 so that the original contents of ; the line can be restored after showing the error message. INVAL+14 [XJSR DSPER,1] [LJMP SD_ICX_ERROR_INVAL,1] ^+1 [] [] ^+1 [161411] [] DSPER+104 [XJSR PWRLN,1] [LJMP SD_ICX_ERROR_MPRE,1] ^+1 [] [] ^+1 [WRTN] [] DSPER+115 [XJSR WRLN,1] [LJMP SD_ICX_ERROR_MMSG,1] ^+1 [] [] ^+1 [WRTN] [] RDFD+1510 [XNLDA 0,2,2] {LJMP #SD_PATCH,1} ^+1 [] [] ^+1 [XNSTA 0,3,3] [] ^+1 [] [NOP] #SD_PATCH 0 [XNLDA 0,2,2] ^+1 0 [] ^+1 0 [XNSTA 0,3,3] ^+1 0 [] ^+1 0 [LJMP RDFD+1524,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+7\ ^+1 [] [] ;The following patch is not absolutely necessary, but will improve performance ; if COBOL calls to linked-in subroutines are used, such as the advanced ; features of SCREEN DEMON. It eliminates the unnecessary ?LEFE system ; call that is normally always performed on returning from a linked-in CALL ; routine. Note that if this patch is installed, any linked-in routine ; that issues a ?LEFD is responsible for issuing its own ?LEFE system call ; before returning to ICX. CALAS+116 [XJSR @16000000006,0] [WBR .+4] ^+1 [] [NOP] ^+1 265 [NOP] ^+1 [WBR CALAS+134] [NOP] ;***** The remaining patches fix bugs in the ICX interpreter ***** ; Note that these patches are not the same ones supplied by Data General. ; The DG patches must also be applied to the new ICX interpreter. ;Fix effective address problems (replace old 64K address space instructions) STBKA+21 [WADDI 2000,0] [WNADI 2000,0] ^+1 [] [] ^+1 [] [XNDSZ 2,3] ^+1 [DSZ 2,3] [] RDDD+5 [NLDAI 0,0] [WSUB 0,0] ^+1 [] [XNSTA 0,0,2] ^+1 [XNSTA 0,0,2] [] ^+1 [] [NLDAI 7,1] ^+1 [NLDAI 7,1] [] ^+1 [] [WBLM] ^+1 [WBLM] [LDAFP 3] ^+1 [LDAFP 3] [XWLDA 2,-4,3] ^+1 [XWLDA 2,-4,3] [] ^+1 [] [XLEF 3,2,3] ^+1 [LEF 3,2,3] [] GETSW+55 [BTO 2,1] [WBTO 2,1] RDSEC+400 [LDA 2,4,3] [XNLDA 2,4,3] ^+1 [ADD 1,2] [] ^+1 [NLDAI 0,1] [ADD 1,2] ^+1 [] [WSUB 1,1] CHNOP+76 [BTZ 2,1] [WBTZ 2,1] CHNOP+102 [BTO 2,1] [WBTO 2,1] ;Shutdown guard task is supposed to give the rest of the interpreter time ; to shut down by itself. However, parameters in AC0 and AC1 to its ; ?WDELAY system call are reversed, so it doesn't wait at all before ; doing an emergency shutdown and possibly corrupting open ISAM files. INITC+101 [NLDAI 0,0] [NLDAI 11610,0] ^+1 [] [] ^+1 [NLDAI 11610,1] [NLDAI 0,1] ^+1 [] [] ;CPLOG routine jumps into the middle of CHNOP routine, but stack frame size ; of CPLOG is zero, leaving CHNOP frame data vulnerable to subsequent ; subroutine calls. CPLOG+1 0 @(CHNOP+1) ;End of patches .W$Rbz$n$_ESD_PRISWI_DEFINES.SR ; SD_PRISWI_DEFINES Screen Demon rev 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .ESC "~ ;Change MASM's macro escape character to tilde ;Define symbols to use for referencing macro arguments beyond the ninth one ; in .TXT building macros. Note that in these symbol names, only a single ; character can follow the "?" in order to expand with "^?x" ?a = 10. ?b = 11. ?c = 12. ?d = 13. ?e = 14. ?f = 15. ?g = 16. ?h = 17. ?i = 18. ?j = 19. ?k = 20. ?l = 21. ?m = 22. ?n = 23. ?o = 24. ?p = 25. ?q = 26. ?r = 27. ?s = 28. ?t = 29. ?u = 30. ?v = 31. ?w = 32. ?x = 33. ?y = 34. ?z = 35. .MACRO BEGIN_DEFINITIONS .TITLE SD_PRISWI_CONFIG .PART SD_PRISWI_USER_SPECS_PART UNSHARED,DATA,LOCAL ?USERS = . .PART SD_PRISWI_CATCH_LIST_PART UNSHARED,DATA,LOCAL .DWORD ?USERS ;Put addr of user printer spec list ; just before list of caught names so ; that rev 3.00.04 programs can find ; it, but still allowing backward ; compatibility with rev 3.00.03 programs ?CATCH = . .PART SD_PRISWI_PRINTER_SPECS_PART UNSHARED,SHORT,DATA,LOCAL .DWORD ?CATCH ;Start file with addr of list of ptrs to names ; of files whose ?OPENs are to be caught ?PNUM = 0 ?CATCH_DEF = 0 % .MACRO CATCH .IFG .ARGCT ?I = 0 .DO .ARGCT ?I = ?I+1 .PART SD_PRISWI_CATCH_NAMES_PART UNSHARED,DATA,LOCAL ?CATCH = . .TXT "@^?I" .PART SD_PRISWI_CATCH_LIST_PART UNSHARED,DATA,LOCAL .DWORD ?CATCH*2 .ENDC ?CATCH_DEF = 1 .ENDC % .MACRO PRINTER .IFN ?PNUM DEFINE_PRINTER \?PNUM .ENDC .IFG .ARGCT ?PNUM = ?PNUM+1 ?NUM_^1 = ?PNUM ?DEV_DEF = 0 ?DESC_DEF = 0 .MACRO ^1 .DWORD ?PRT_\?NUM_^1 ~% .ENDC % .MACRO DEFINE_PRINTER .IFN ?DEV_DEF ?DEV_DEF = 0 .IFE ?DESC_DEF ?DESC = ?DEV .ENDC .PART PRINTER_DEFS_PART UNSHARED,LOCAL,DATA ?PRT_^1 = . .DWORD ?DEV*2 .DWORD ?DESC*2 .ENDC % .MACRO DEVICE .IFG .ARGCT .PART PRINTER_NAMES_PART UNSHARED,DATA,LOCAL ?DEV = . ?DEV_DEF = 1 .TXT "@^1" .ENDC % .MACRO QUEUE .IFG .ARGCT DEVICE ^1 .ENDC % .MACRO PATHNAME .IFG .ARGCT .PART PRINTER_NAMES_PART UNSHARED,DATA,LOCAL ?DEV = . ?DEV_DEF = 1 .TXT "^1" .ENDC % .MACRO INPUT ?DEV = 0 ?DEV_DEF = 1 % .MACRO PASSTHRU ?DEV = -1 ?DEV_DEF = 1 % .MACRO DESCRIPTION .IFG .ARGCT .PART PRINTER_NAMES_PART UNSHARED,DATA,LOCAL ?DESC = . ?DESC_DEF = 1 .IFN (.ARGCT==1) .TXT "^1" .ELSE .IFN (.ARGCT==2.) .TXT "^1 ^2" .ELSE .IFN (.ARGCT==3.) .TXT "^1 ^2 ^3" .ELSE .IFN (.ARGCT==4.) .TXT "^1 ^2 ^3 ^4" .ELSE .IFN (.ARGCT==5.) .TXT "^1 ^2 ^3 ^4 ^5" .ELSE .IFN (.ARGCT==6.) .TXT "^1 ^2 ^3 ^4 ^5 ^6" .ELSE .IFN (.ARGCT==7.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7" .ELSE .IFN (.ARGCT==8.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8" .ELSE .IFN (.ARGCT==9.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9" .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC % .MACRO CONSOLES .IFN ?PNUM DEFINE_PRINTER \?PNUM .ENDC .IFN .MCALL .PART SD_PRISWI_PRINTER_SPECS_PART UNSHARED,DATA,LOCAL .DWORD 0 .ENDC .IFG .ARGCT .PART SD_PRISWI_CONNAMES_PART UNSHARED,DATA,LOCAL ?LOCON = . .TXT "^1" .IFE (.ARGCT-1) ?HICON = ?LOCON .ELSE ?HICON = . .TXT "^2" .ENDC .PART SD_PRISWI_PRINTER_SPECS_PART UNSHARED,DATA,LOCAL .DWORD ?LOCON*2 .DWORD ?HICON*2 .ENDC % .MACRO USERS .IFN ?PNUM DEFINE_PRINTER \?PNUM .ENDC .IFN .MCALL .PART SD_PRISWI_PRINTER_SPECS_PART UNSHARED,DATA,LOCAL .DWORD 0 .ENDC .IFG .ARGCT .PART SD_PRISWI_USERNAMES_PART UNSHARED,DATA,LOCAL ?USERS = . .IFN (.ARGCT==1) .TXT "^1" .ELSE .IFN (.ARGCT==2.) .TXT "^1 ^2" .ELSE .IFN (.ARGCT==3.) .TXT "^1 ^2 ^3" .ELSE .IFN (.ARGCT==4.) .TXT "^1 ^2 ^3 ^4" .ELSE .IFN (.ARGCT==5.) .TXT "^1 ^2 ^3 ^4 ^5" .ELSE .IFN (.ARGCT==6.) .TXT "^1 ^2 ^3 ^4 ^5 ^6" .ELSE .IFN (.ARGCT==7.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7" .ELSE .IFN (.ARGCT==8.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8" .ELSE .IFN (.ARGCT==9.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9" .ELSE .IFN (.ARGCT==10.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a" .ELSE .IFN (.ARGCT==11.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b" .ELSE .IFN (.ARGCT==12.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c" .ELSE .IFN (.ARGCT==13.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d" .ELSE .IFN (.ARGCT==14.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e" .ELSE .IFN (.ARGCT==15.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f" .ELSE .IFN (.ARGCT==16.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g" .ELSE .IFN (.ARGCT==17.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h" .ELSE .IFN (.ARGCT==18.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i" .ELSE .IFN (.ARGCT==19.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j" .ELSE .IFN (.ARGCT==20.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k" .ELSE .IFN (.ARGCT==21.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l" .ELSE .IFN (.ARGCT==22.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m" .ELSE .IFN (.ARGCT==23.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n" .ELSE .IFN (.ARGCT==24.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n ^?o" .ELSE .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n ^?o ^?p" .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .PART SD_PRISWI_USER_SPECS_PART UNSHARED,DATA,LOCAL .DWORD ?USERS*2 .ENDC % .MACRO END_DEFINITIONS .PART SD_PRISWI_PRINTER_SPECS_PART UNSHARED,DATA,LOCAL .DWORD 0 .DWORD 0 .PART SD_PRISWI_USER_SPECS_PART UNSHARED,DATA,LOCAL .DWORD 0 .DWORD 0 .IFE ?CATCH_DEF ;Catch "@LPT" if no CATCH's were specified .PART SD_PRISWI_CATCH_NAMES_PART UNSHARED,DATA,LOCAL ?CATCH = . .TXT "@LPT" .PART SD_PRISWI_CATCH_LIST_PART UNSHARED,DATA,LOCAL .DWORD ?CATCH*2 .ENDC .PART SD_PRISWI_CATCH_LIST_PART UNSHARED,DATA,LOCAL .DWORD 0 .END % .END .W$Rb$n$_SD_TERMCAPS.SR ; SCREEN DEMON Terminal Capabilities Definition file ; ; Screen Demon rev 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1989 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Keywords for the various terminal capabilities that can be specified ; ALTERNATE_CHARACTER_SETS ; CHARACTER_INSERT_AND_DELETE ; COMPRESS_MODE ; LINE_INSERT_AND_DELETE ; MARGINS ; REVERSE_VIDEO ; SCROLL_LEFT_AND_RIGHT ; SCROLL_UP_AND_DOWN ; UNDERLINE ; WINDOWS ; ; EVERYTHING ; ALL ; NOTHING ; NONE BEGIN_TERMCAPS ;DEFAULT definition must occur before first TERMINAL definition DEFAULT DOES UNDERLINE DOES REVERSE_VIDEO TERMINAL DG6053 MODELID NONE DOES UNDERLINE TERMINAL D100 MODELID "! DOES UNDERLINE,REVERSE_VIDEO TERMINAL D200 MODELID "! DOES UNDERLINE,REVERSE_VIDEO TERMINAL D210 MODELID "( DOES UNDERLINE,REVERSE_VIDEO TERMINAL D211 MODELID "( DOES UNDERLINE,REVERSE_VIDEO TERMINAL D214 MODELID "1 DOES UNDERLINE,REVERSE_VIDEO TERMINAL D215 MODELID "1 DOES UNDERLINE,REVERSE_VIDEO TERMINAL D216 MODELID "e DOES UNDERLINE,REVERSE_VIDEO DOES ALTERNATE_CHARACTER_SETS TERMINAL D216E MODELID "e DOES UNDERLINE,REVERSE_VIDEO DOES ALTERNATE_CHARACTER_SETS TERMINAL D216_PLUS MODELID "3 DOES UNDERLINE,REVERSE_VIDEO DOES ALTERNATE_CHARACTER_SETS TERMINAL D217 MODELID "5 DOES UNDERLINE,REVERSE_VIDEO DOES ALTERNATE_CHARACTER_SETS TERMINAL D220 MODELID "+ DOES UNDERLINE,REVERSE_VIDEO DOES ALTERNATE_CHARACTER_SETS DOES SCROLL_UP_AND_DOWN DOES CHARACTER_INSERT_AND_DELETE TERMINAL D230 MODELID "+ DOES UNDERLINE,REVERSE_VIDEO DOES ALTERNATE_CHARACTER_SETS DOES SCROLL_UP_AND_DOWN DOES CHARACTER_INSERT_AND_DELETE TERMINAL D400 MODELID "' DOES EVERYTHING TERMINAL D410 MODELID "* DOES EVERYTHING TERMINAL D411 MODELID "0 DOES EVERYTHING TERMINAL D412 MODELID "f DOES EVERYTHING TERMINAL D412E MODELID "h DOES EVERYTHING TERMINAL D412E_PLUS MODELID "4 DOES EVERYTHING TERMINAL D412_PLUS MODELID "4 DOES EVERYTHING TERMINAL D413 MODELID "6 DOES EVERYTHING TERMINAL D450 MODELID "' DOES EVERYTHING TERMINAL D460 MODELID "* DOES EVERYTHING TERMINAL D461 MODELID "0 DOES EVERYTHING TERMINAL D462 MODELID "f DOES EVERYTHING TERMINAL D462E MODELID "h DOES EVERYTHING TERMINAL D462E_PLUS MODELID "4 DOES EVERYTHING TERMINAL D462_PLUS MODELID "4 DOES EVERYTHING TERMINAL D463 MODELID "6 DOES EVERYTHING TERMINAL D470C MODELID 54 DOES EVERYTHING EXCEPT COMPRESS_MODE TERMINAL PC_WITH_CGA_EMULATING_D400 MODELID "' DOES EVERYTHING EXCEPT UNDERLINE, COMPRESS_MODE TERMINAL W460_CGA MODELID "A DOES EVERYTHING EXCEPT UNDERLINE, COMPRESS_MODE END_TERMCAPS .W$f$n$f4SD_VM_DEFINES.SR  .TITLE SCREEN_DEMON.VM ; Definitions for building SCREEN_DEMON_3.00.VM file ; ; Screen Demon rev 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .NOLOC 1 ;List 'real' lines only .ESC "| ;Set MASM's escape char to vertical bar .RDX 10. ;Set decimal mode ;Use a partition definition that is the same as normal UD except ; that overwrite messages are suppressed. This will allow the ; same console to be touched by more than one model id declaration. .PART DATA_PART ALIGN=0,DATA,LONG,UNSHARED,NORM,GLOBAL,NOMESS .TXTN 1 ;Do not follow even-length strings with null word ;These definitions must match those in SD_DEFINES: .DUSR VMREC.SIZE = 5*1024. ;Size of VM file record in words .DUSR VMHDR.SIZE = VMREC.SIZE ;Size of VM file hdr record in words .DUSR VMREC.BLKS = VMREC.SIZE/256. ;# of blocks in VM file record .DUSR VMHDR.BLKS = VMHDR.SIZE/256. ;# of blocks in VM file hdr record .DUSR VMCON.MODELID = 4355. ;offset to Model Id field in console record .DUSR VMCON.TERMCAPS = 4357. ;offset to Termcaps field in console record .DUSR VMCON.FLAGS = 4361. ;offset to Flags field in console record ;Definitions of the various terminal capabilities .DUSR UNDERLINE = 1B15 .DUSR REVERSE_VIDEO = 1B14 .DUSR ALTERNATE_CHARACTER_SETS = 1B13 .DUSR COMPRESS_MODE = 1B12 .DUSR WINDOWS = 1B11 .DUSR SCROLL_UP_AND_DOWN = 1B10 .DUSR SCROLL_LEFT_AND_RIGHT = 1B9 .DUSR MARGINS = 1B8 .DUSR CHARACTER_INSERT_AND_DELETE = 1B7 .DUSR LINE_INSERT_AND_DELETE = 1B6 .DUSR EVERYTHING = -1 .DUSR ALL = -1 .DUSR NOTHING = 0 .DUSR NONE = 0 ;NONE is also intended to be used as MODEL_ID for terminals ; such as 6053's that don't respond to a model id request .MACRO BEGIN_TERMCAPS ?TDEF = 0 ?TCAP = 0 ?TCAP.NONE = 0 .PART DATA_PART ALIGN=0,DATA,LONG,UNSHARED,NORM,GLOBAL,NOMESS ;First two words of VM file header past console bitmap ; is block offset to first PID record .DWORD ?PIDBLKOFS ;Next part of header is termcaps table. First word of table is ; capabilities of terminal that doesn't return a model id. ; Rest of table is one-word slots for model id's SPACE thru ~ VMHDR.TERMCAPS_TBL: .BLK (1+127-32) % .MACRO DEFAULT % .MACRO TERMINAL .IFG .ARGCT .IFE ?TDEF ;Initialize "termcaps by model id" table entries ??M = 32 .DO (127-32) ?TCAPM.\??M = ?TCAP ??M = ??M+1 .ENDC .ELSE ?DEFINE_TERMINAL .ENDC ?TDEF = ?TDEF+1 ?TCAP = 0 ^1.TDEF = ?TDEF ?TCAPD.\?TDEF = 0 ?TMOD.\?TDEF = 0 .MACRO ^1 .IFG (.ARGCT-2) ASSIGN_TERMINALS ?TCAPD.\^1.TDEF,?TMOD.\^1.TDEF,|^1,|^2,|^3 .ELSE .IFG (.ARGCT-1) ASSIGN_TERMINALS ?TCAPD.\^1.TDEF,?TMOD.\^1.TDEF,|^1,|^2 .ELSE ASSIGN_TERMINALS ?TCAPD.\^1.TDEF,?TMOD.\^1.TDEF,|^1 .ENDC .ENDC |% .ENDC % .MACRO MODELID ?TMOD = 31 ;Default to value that gets slot in front of table .IFG .ARGCT .IFG (^1-31) .IFG (127-^1) ?TMOD = ^1 .ENDC .ENDC .ENDC % .MACRO DOES ?I = 1 .DO .ARGCT ;For each capability supplied... ?TCAP = ?TCAP!(^?I) ;...turn it on ?I = ?I+1 .ENDC % .MACRO EXCEPT ?I = 1 .DO .ARGCT ;For each capability supplied... ?TCAP = ?TCAP&(~(^?I)) ;...turn it off ?I = ?I+1 .ENDC % .MACRO ?DEFINE_TERMINAL .IFE ?TMOD ?TCAP.NONE = ?TCAP .ELSE ?TCAPM.\?TMOD = ?TCAP ?TCAPD.\?TDEF = ?TCAP .ENDC ?TMOD.\?TDEF = ?TMOD % .MACRO END_TERMCAPS .IFG ?TDEF ?DEFINE_TERMINAL .ENDC .LOC VMHDR.TERMCAPS_TBL .WORD ?TCAP.NONE ;First slot in table is slot for ; terminals whose model id is NONE ??M = 32 .DO (127-32) .IFE ?TDEF .WORD ?TCAP .ELSE .WORD ?TCAPM.\??M .ENDC ??M = ??M+1 .ENDC % .MACRO BEGIN_CON_TYPES ;Create a work area to be used to determine lengths of strings. ; CODE attribute necessary to force this area past real UD partition, ; NOMESS attribute needed since it will be overwritten repeatedly. .PART WORK_PART ALIGN=0,CODE,LONG,UNSHARED,NORM,GLOBAL,NOMESS WORK_AREA: .PART DATA_PART ALIGN=0,DATA,LONG,UNSHARED,NORM,GLOBAL,NOMESS % ;Usage: ; CON_TYPE deviceName,lowUnit,highUnit ; .MACRO CON_TYPE .IFE .MCALL ?BASE_CON_NUM = 0 ?PIDBLKOFS = VMHDR.BLKS .ENDC .IFG .ARGCT .IFL (.ARGCT-2) ?LO_UNIT = 0 .ELSE ?LO_UNIT = ^2 .ENDC .IFL (.ARGCT-3) ?HI_UNIT = ?LO_UNIT .ELSE ?HI_UNIT = ^3 .ENDC .WORD ^1.LEN ;length of device name in bytes, ; possibly including a terminating null .WORD ?LO_UNIT ;lowest unit # .WORD ?HI_UNIT-?LO_UNIT+1 ;max # of this type .TXT "^1" ;name of console type .DUSR ^1.LO = ?LO_UNIT .DUSR ^1.HI = ?HI_UNIT .DUSR ^1.BASE = ?BASE_CON_NUM ;Determine the length of the device name .PART WORK_PART ALIGN=0,CODE,LONG,UNSHARED,NORM,GLOBAL,NOMESS .LOC WORK_AREA .TXT "^1" ?WORK_END_A = . .LOC WORK_AREA .TXT "^1B" ?WORK_END_B = . .IFE (?WORK_END_A-?WORK_END_B) .DUSR ^1.LEN = (?WORK_END_A-WORK_AREA)*2-1 .ELSE .DUSR ^1.LEN = (?WORK_END_A-WORK_AREA)*2 .ENDC .PART DATA_PART ALIGN=0,DATA,LONG,UNSHARED,NORM,GLOBAL,NOMESS ?BASE_CON_NUM = ?BASE_CON_NUM+(?HI_UNIT-?LO_UNIT+1) ?PIDBLKOFS = ?PIDBLKOFS+((?HI_UNIT-?LO_UNIT+1)*VMREC.BLKS) .ENDC % .MACRO END_CON_TYPES .WORD 0 ;terminate con types table with zero size % .MACRO BEGIN_TERMINAL_ASSIGNMENTS % .MACRO END_TERMINAL_ASSIGNMENTS % ;Usage: ; ASSIGN_TERMINALS termcaps,modelid,contypename,lowunit,highunit ; .MACRO ASSIGN_TERMINALS .IFG (.ARGCT-2) .IFL (.ARGCT-4) ?LO_UNIT = ^3.LO ?HI_UNIT = ^3.HI .ELSE ?LO_UNIT = ^4 .IFL (.ARGCT-5) ?HI_UNIT = ?LO_UNIT .ELSE ?HI_UNIT = ^5 .ENDC .ENDC ?SDCONNUM = ^3.BASE+?LO_UNIT .DO (?HI_UNIT-?LO_UNIT+1) .LOC ?SDCONNUM*VMREC.SIZE+VMHDR.SIZE+VMCON.MODELID .DWORD (^2)S7 .LOC ?SDCONNUM*VMREC.SIZE+VMHDR.SIZE+VMCON.TERMCAPS .WORD ^1 .LOC ?SDCONNUM*VMREC.SIZE+VMHDR.SIZE+VMCON.FLAGS .WORD 1B13 ?SDCONNUM = ?SDCONNUM+1 .ENDC .ENDC % .EOF .W$f$n$fSCREEN_DEMON.CONTYPES ;Definitions for parameters maintained in SCREEN_DEMON_3.00.VM file, ; including console types and terminal model assignments. ; ; Screen Demon rev 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;--------------- SCREEN DEMON Console Type Definitions --------------- ; ; Specify the console type names of all terminals that will be ; running Screen Demon, followed by the lowest and highest ; unit number in use for each type of console. The console ; types CON, BATCH, and NOCON should always be included. ; ; The value for the BATCH type is the number of simultaneous ; BATCH_INPUT streams that will be used. Batch streams with names ; other than BATCH_INPUT can also be listed, but specify only the ; first word of the batch stream name. ; ; The value for the NOCON type is the maximum number of processes ; that will be running without a console simultaneously, not ; including batch processes that have their own type. ; ; ; For example: ; ; BEGIN_CON_TYPES ; CON_TYPE CON 2 17 ; CON_TYPE VCON 0 4 ; CON_TYPE BATCH 1 2 ; CON_TYPE NOCON 0 8 ; END_CON_TYPES ; ; indicates: ; terminals CON2 through CON17 exist, ; virtual terminals VCON0 through VCON4 exist, ; there will be at most two Batch streams running, ; and there will never be more than 8 nonbatch processes ; running without a console at the same time. ; ;----------------------------------------------------------------------- BEGIN_CON_TYPES ;Specify your actual console configuration here: CON_TYPE CON 0 512 CON_TYPE BATCH 1 4 CON_TYPE NOCON 0 32 END_CON_TYPES ;------------- SCREEN DEMON Console Model Id Definitions ------------- ; ; Optionally, the model ids of terminals on specific console ; lines can be declared, assuming that a given terminal is ; always connected to the same console line. Declaring the ; terminal model ids here will eliminate the need for SCREEN ; DEMON to determine the terminal's model id at runtime. ; ; This is also useful when terminal emulators running on PC's ; are being used. Although the emulator may respond to a ; Read Model Id request as if it was a D400, it may actually ; lack certain capabilities, such as underlining. Since ; SCREEN DEMON will be unable to know this based on the ; returned model id, an entry for the emulator's console line ; can be included in the table below to describe its true ; capabilities. ; ; Each entry in the TERMINAL_ASSIGNMENTS table below specifies ; a terminal model name from the SD_TERMCAPS.SR file. This file ; lists all known Data General terminal models, along with the ; capabilities of each, and should be updated if necessary when ; new DG terminals are installed. Special entries for terminal ; emulators can also be added to the SD_TERMCAPS.SR file. ; ; Following the terminal model name in the table entry, a console ; type name and range of unit numbers are given, which indicates ; that all terminals attached to that range of console lines are ; the specified model. There may be more than one line specifying ; the same terminal model. If only one unit number is specified ; for a console type, then it is assumed that only that single ; console line is being described. If no unit numbers are ; specified, but just a console type, then all units for that ; type are set to the given terminal model. If a particular ; console line is declared more than once, such as when it is ; part of a range on one line and then is specified individually ; on another, the last declaration is used. ; ; For example: ; ; BEGIN_TERMINAL_ASSIGNMENTS ; D210 CON 9 ; D410 CON 13 15 ; D210 VCON ; PC_WITH_CGA_EMULATING_D400 CON 6 ; END_TERMINAL_ASSIGNMENTS ; ; specifies that CON9 is a D210 terminal, CON13, CON14, ; and CON15 are all D410 terminals, every VCON is to be ; considered a D210, and CON6 is a PC emulator that can't ; do underlining. All other console lines will have their ; terminal model ids determined at runtime. ; ;----------------------------------------------------------------------- BEGIN_TERMINAL_ASSIGNMENTS ;Specify any terminal model id assignments here: END_TERMINAL_ASSIGNMENTS ;----------------------------------------------------------------------- ; ;End of SCREEN_DEMON.CONTYPES .END .W$Rb$n$` @SDWINDOWFLAGS.WS *** SDWINDOWFLAGS.WS Screen Demon rev 3.52.01 *** Copyright (C) 1993, Threshold, Inc., All Rights Reserved *** -------------------------------------------------------- ** Structure of the flags word in a Screen Demon window ** descriptor. A window descriptor can be examined using ** the SD_GET_WINDOW_DESCRIPTOR call. ** This copy file is intended to be used to examine the bits ** in the flags word via the SD_BITS_TO_DIGITS call. 01 SD-WINDOW-FLAGS-BITS-GROUP. 05 SD-WIND-FLAGS-RESERVED-BITS PIC X(12). 05 SD-WIND-FLAGS-D400-MODE-BIT PIC X. 05 SD-WIND-FLAGS-WRAPPED-BIT PIC X. 05 SD-WIND-FLAGS-FLOAT-BIT PIC X. 05 SD-WIND-FLAGS-ALLOC-VIB-BIT PIC X. ********************************************************************* * SD-WIND-FLAGS-RESERVED-BITS Undefined * SD-WIND-FLAGS-D400-MODE-BIT Views for this window represent * D400-style hardware windows * rather than Screen Demon views. * SD-WIND-FLAGS-WRAPPED-BIT The last display into this window * image ended by wrapping to the * beginning of the next line. * SD-WIND-FLAGS-FLOAT-BIT This is a floating window. * SD-WIND-FLAGS-ALLOC-VIB-BIT The image buffer for this window * was allocated by Screen Demon, * rather than supplied on the * SD_NEW_WINDOW call that created it. *** End of SDWINDOWFLAGS.WS *** .@$aW$n$bЈSDCALENDAR.DD 00000000000000000000000000SDCALENDAR SD_CAL_L SD_CAL_C SD_CAL_W SD_CAL_D 02N0000 (SDCALENDAR_TITLE   Calendar Help|  021355010{ JanFebMarAprMayJunJulAugSepOctNovDecJanuary February March April May June July August SeptemberOctober November December S M T W T F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31:DEInvalid date. SD_ALT_EXIT_KEY   #,          = :       e l t }      C1 for helpArrow keys: move day pointerShifted Arrow keys: move calendarHome: return to current date C2: previous month C4: next month C3: enter month ESC: exitany key to continue Month:  Year:      VYZ#######SD_SET_SECONDARY_PROGRAM_NAMESD_TURBO_FULL1902SD_GET_VALUE4SD_PUT_VALUESD_TURBO_RESETSD_ACTIVE_WINDOWSD_TOP_WINDOWSD_READ_CHAR 18753100N400101377 SCREEN DEMON Calendar |24|SD_CREATE_WINDOW9SD_REMOVE_WINDOWSD_SUSPEND_WINDOW12SD_ERROR_MESSAGESD_MOVE_WINDOW_LEFTSD_MOVE_WINDOW_RIGHTSD_MOVE_WINDOW_UPSD_MOVE_WINDOW_DOWN31302928 .J $l$n$lXc.SD_SET_CONSOLE_MODEL_ID.PR 4$>pnTp-0&0&0&00pl\02000>02000> @pp&pfppf,/))x)4)5)6Y) @a\p@4P *b Fatal Screen Demon error at PC = 00000000000 0` p$2p p  ))  1pfl p2 MailMRemote View Remote Input  G@LPT@LPTPREFIX,SCREEN,DEMON,CLI[!ASC 251]:CLI:UDD::NOTEPADLJANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER|SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|SDCALCULATOR_TITLE_ONEpmSDCALCULATOR_TITLE_TWOp4pm SCREEN DEMON Calendar SDCALENDAR_TITLEpDpn SCREEN DEMON Read Mail SCREEN DEMON Send Mail SCREEN DEMON Turbo Control ))SD_ALT_EXIT_KEYp^pn[SD_HOT_TIMEOUT_INTERVALppn&0010110>01021320p` xUnable to find directory called :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM+>?>CONBATCHNOCON@VCON@WCON@PCCON :MEM:?SD_VM. + @OUTPUT@INPUT<@o  ,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~!ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ hjsttterhkklodjGhipq>hp3qqqp_pts@sssqqs2s;sppmphp,@INPUTo?   !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}  SCREEN DEMON: Copyright (C) 1988-1993, Threshold, Inc., Auburn, Alabama. All Rights Reserved.p p@OUTPUT  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~9BXU@177Kd|@e;2?~BVY*yp&)Pm+!/"!$x26A0~XTlZXӝŠ͜Å訠Ԡ젬ɮ㠠҇.3250.161A-GU9-3Π򠠠ƠĠϬ㍐ɠΠҠ卐̳Ş宮G=?b[n7:H)/4eKa'Lxvd;| &Er+@A~Jyĵ"p.m% ! ݪ8Y6$Бl c9u0q-SȩF`ឧ̝jCUBQN 3(,}#XVD51w\ziotR ^g]*ٶ_{PWIfOԅkP  ++++-||-+|--||-:++++-||-+|--/cTRCG ++++-||-+|--||-:++++-||-+|--/cTRCG  @INPUTqrstuvwxabcdefgh12345678!"#$%&'(yz{|}~pijklmn`9:;<=>0)*+,-. \]^_ `@     Press any key to continue... :CONLOGSD_+ %'))&(%%)))&)&)')')))))(()))))))))))'&'&)&'))%%((%))())5799685599969697979999988999999999997676967995588599899  *p  (@Y 0 ||  SCREEN DEMON Menu to select SCREEN DEMON Notepad SCREEN DEMON Screen Print SCREEN DEMON Calculator) )9IY99&yǃx) UNLOCK )9IY9yǀ K )99)9Yyx։NONEXйY8x ~xhxY9)pInvalid model id specifiedi) Y) )္II)) YYY,癇) 9YY֣ 09)P99$) 9Y9999   I9) yxـ [9)TΉ)` ) 9E8<o868#0Ḅ ~Ў&Ŏ 8κ)98 xYΌY~8) )XXɇ)9$YY9e‚xI9xC)@f)@l)@x@))@@))&"@)Ɖ(@Y )‡y0ix8DsY)xȁx00)Ձp8I CYYbYIYNY'BJ)IxB)7 W=&&)@)   Yyp@xw)  YyX@x_)  zh9Yy;@8>YY1UH?)9)-x98); Unable to start Screen Demon auxiliary tasks!Unable to allocate memory for Screen Demon auxiliary tasks!9 )T Cannot open SCREEN DEMON control file :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM )iT)LI@Ii:II38 IYR )9 )d =ACL of SCREEN DEMON control file :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM must be set to +,WAR 9 )V Cannot read SCREEN DEMON control file :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM өY)R⸣ʤ )IYSIӸ Y9999I۩Y)IɩY[YIYWO 9)9Y99y),()IYSiY  )Y99D!)xyȉ yyy9tYi8) !@CONSOLE)♻) i )9)99)Y999y>ظ8))@8)8I9)89))  I. IY9ix9()@9 )Iyiy YYYy䲇yi)YYU䆎ԁ ))8 O)⩻L) 8)YYU1)9)yyiIx9 ){ NConsole name not found in Console Types table or out of range! Correct SCREEN_DEMON.CONTYPES and then MAKE_SCREEN_DEMON.VM ˎ$i  )`Ii) }))(YYUIY99U)c)񁉉x|89%y) YYyi9Yn)ʙ) ⟄Y)ʙc) ʩ)˪IYS) ʩ)ʩ>)ˉpY4)ʩ) ʙ) ʩ)@ʙD)I R) ʩY)ʙ) ʩ)ʙδJ) yyV)0YyyvY9)/yYyiYG))Y>)8)2)096)294)095Y9Y)!Ii)9999)99)99)99)O99Ę) YyyiYS!ԼH)nyỵǤi)nyyi9y){ y)R8)P).yyYy YYy躇yiY9 ))I)>耫YYE:)xO)IixI茩Y9Ya:Z)[YYPU    jIF︣ﭣ큩II݁8xԁ8ςI  9)@9Y99y)Y\MiY s)I Y9Y)Ii )99(YYo)) )YYU i  )Ii  )Iiu)uIYjSY)8Y)xG  )္II)iY \=Ȃ:PER:CONSOLENOCON)+F9})) ţ)yYyyyIyyxyYyy)y)"I yyy)  yYy YYYyyЉIyYYyy)x89Y8y)YĹI8IX)Iȉ艇yyyRY8Y) K IY) YcYY'Y湁Y9)-)lWUwYYYȮW癮x)9ˣi99x2))8ԫ퐈)ʣ)oY)ᵩYހx)YYp)៩Yȩ9W)J))yx)%)38)87)8)%YY)؃)NJ))-IY?=y Źs9)9Y99yby ŹS9Y9Y99yCyY)m8쬳©yۣ™yyy)i)Ixɇ艆Yy|yyx)XYoI xdɇȉ艇y)iTy) xɇ艇yyI)Iy 9Y999쫮08Y؉ɂYȉYyyyYy%8YxYxY)wIIjSlYY_UxYvU8q rx))b yx) ) x) <^C^@)yI2s129) Iܻ) )8y) p)/&=)8^)ȩ88L) t۩8YYSxщ8xYI  F  8;Y))8)щ&).3x).) wx) )8@W)tbY)xY)ބY) TN9*) Hخ0{Y9)EConsole InterruptF y yIYyԁ)АIYyщY ΉQy)ۀY)y幥=))YY)\)x)Ή) )@xY)˸ P8Y) 8*㈹8Y)`x)ES_{ syF)xgfY:Ny))⹂)8x)8)⹁x~))⹁)IP)S!~u)©nx)@)_)ꙻYY)8)x)xN)xRσ80x?0ϔi6yy{8y IyY)艆Yɇ))8 ) )YTIyYyi )I),깁Y9Yi ) 8IY9ʍ)YYY)))C)) )y 9)Y9)I9)  ) IiY9)xyYyyyѹpxۑIy pII)) YY))y晅y)y⩩Hx)yx󸀉y Y) ≃8i ɂYi )II)y)8Ήp{ߴ x։p p8  P IxYI9YY8 8 iI)y9^)xy) )IIyiɂ)x);QiyI IމYYxYiY)$7xi 幥pi =x);8yI IމYYxYiiY$ } 幥 pi)8x  9Yv08  )I9x)Y9晁)Y9yщx )I  I x))ZY9Zx) yxxy  yi<) YYxy.ɂ  i)I))3)̰)ڧI-Ii - Iy?)).9Y)T9Y)M9Y)P9YY9i )@9IY999 Y9)9P@II38&Yyt8x ) 9,FI9Y99 9̮I h9)Tx9f)`9ȂCannot create temporary memory allocation file in directory :SCREEN_DEMON_3.52:MEM Cannot open temporary memory allocation file in directory :SCREEN_DEMON_:SCREEN_DEMON_3.52:MEM )O ˙8XIO IIYyUX)# I)8ʩ%x" IIIYS)˙)YY{)ʩyYY)I9Y) I)2I>I+ѹIyyI!y߇)IY)8)x)󁹁XすX) ףؤm m)  zzzU) mNXḣ8X  9в) wIY9Yyi9Yx)x),9iY) YIY9Yi9YƁx)x[_SNxșlgF))))r9)|*M[I 9) YYd!8) IM3 l)أՂI lqxF  WARNING: You are about to be logged off due to inactivity!  Press any key to clear this message and avoid logoff...) Yw8X D) yi) Y) )) )I>yY)L )@) ;ߣ8@  I I IљIԬx8ΉxY8Ԗ؉y)_yIԉљYi) 󉈹8J9Oy)nye)w8Z)YY, YY)ӻ♻9)9))I9 Y99)82Yn)8Zy),`s)xII}+yVj ӾPiYYDx)Zʣƻ♻K9)9))I9 Y99)*YY )9ɇy}Y)8~ӎKݎЉy7`Y)ȉy(ѹyΉx:Yy xYIiى8)IyΉxܩYixى8)I) yy\)IyS)IyY)ij)I˳)Iyүѹy[Ή(Ή@- xҔى8)Iy:ΉΉ@ sى8)I))) yy)I)) y)IyGѹyΉ8Ή x,ى8)IyΉΉ ى8)I)) Y)󩩇9YSY"! |9)P99$) 9Y9999   I9) yxـ [9J)=JΉ)%Ѭ} ) 9^xUo8O8#IḄ ~h?]98R)9/)8&x~eY)Ή)Q|YY~) )XXɇ)9$YY9‚xI9xCy~) z.yI)Iy~)i)II}Ԃiy)I̻AI)I+I)i9Y8I )}ɪJ©z)) ™}Y)*™I))IбYi9Јy}) 깈8n))YYxI}gI})di)II~)y$))i9YYI)5Y)ʙ)y}V)깈83))YYxI})I)) ){)}&) |w|wYx|j}) ) })fy/)x9)) 9)x9)<|:9Y{EY^^{;/,|$X{-|)||}Qt<|) x|) [{{){|)f D EFEFQ0 ))Υ|nY)Y 9x|_Y) )yy |I)x #{֮|9)xI){Ɓi0ii|x@yyy @sF N@yyyyy )\y|s{ {8eIߍY9)MIij9c) ♈f yy/ły) ⩣|ss6 {)x) yyyy@y Ŏ y|@skl ߍY9)Ia9cY)  yyֱyyyy@y x yq))) {8x蹈c)8x{})nyyx){) Y;8) {r  ;yy ~͛yyyy@y  Fy )♣{r_ r yy ~9WyĎ !e[yzͤ9v) Y) ەѩxzY)9̮!߹)Y9*) ȂIyIcELOGOFF-TERMyyyy@yY8Lቓxyy ~1yyI)Iy7Y9Nyy)w YYyY)IxW* dy89L) zx?Y) ѩxzY)|92!;eĂIyI]c癝yyެY) xy)DzzYzy) )Ddzy) yy }yyyy@yyx  8y) xyy }f # yy8yyyy@y  )x♻ yy) xy)9)9)9 Y99i))xy _YyiщyĻ)IЉ)) CYyMщy׻)I  Fyy |؛yyyy@yxN)⹂xyy |y ix3⩁YYAZY)X xixx iΎ ؉yy |yy |~yyyy@yw)xxY)8x)b=yI yx 8xI)8)YYI8wIȉy yxoңy2sxݝ)iY)8yrx)nyy)xxxsxx)Љ))x)y 998yy)9)9Љ8yy)9)9y)8x5Y)Ȃ9Љ)) wZ8)9)Ky  y))x )))IY9w+9Yw&8yy)y  y)) y9yyvƫ)IY 78)>xЉwn֣vvIvۨ ߀w7Y) 8vЙI 8v⩻v⹁v㉁Byy zЉywnyv^vZ YyvY) 8vI 8v⩻v⹁v㉁SByy  pzY9)ay)) yYIIy9Y99))8 yy)y) v)y))y  y)) yyYق))8 yy)))Y8Y)y  yY9Yvmͣuuڀv2Y) 8u˙I 8u⩻u⹁u㉁Byy yYyvmuYuUYyuY) 8uI 8u⩻u⹁u㉁NByy yyud9Yu]u7)IyyW8։)>Iiu7)I9III)Iy)0Iy iy)))))))0I)I yux)y) yyt艇yyyy@yuF8t)⹀ )dyc]xڇ)SY)8ylul)nyy)ubu]ub)Љ)) x))x)yIY)ǻ)`tY)8؀)Wy  yy)))@yy)) yYIǐ YyIY))i~ټ)`8t)xY) 8rtYٞ)?t3xyy x4yy x(i9)) y))ytY)Ȃ9ЉYs]yy wyy wyyyy@ys8x8sP㉉gyy wü93yy wyyyy@yIxyyyy@yYys8x8s㉓@)8vyyyIyyy wc9㸎ӂyy wN)a wGyyyy@yIxyyyy@yYysK8r㉓@x)฻ yy؆Iyyy v9j8yy vyyyy@yr8x8rO㉋@)yQIyy v9븎*yy vyyyy@yrxxr㉙88Yyщy8e@)Iyy vf9xւyy vRyy@yrh)IppYyUrT)©Yp⍉yyy v&yyyy@yr9))pȣpéYyݠUr$)©Ypyy uȉXyy uyyyy@y0cy8qqqyy[N8yqکqvکЉxyy uyqکq_کЉayy umy)YY8yyyy@yˎy YN.yy ucBN uZqu)8I))xyyyy@y;ڎyyܿ8o u" u!q:Y)x)Y8yyyy@yV;ayy t tq )8+8)8yyyy@y%X;sl0yyUbx: t ty8)x)ў)xyp)♀)88o)xY8ɇyx)p)♣l)p) )))ÀU)pw) ♠ypj)8Ip'Y t;pU)M t1 t-)pD)x) tȉێyy tyyyy@yWyA8oܢoyyۆK8yoکoکЉGyy syoکoکЉ0yy s#yy syyyy@y.y偸o^yy s) syyyy@yԎyI) IyIЉo\YYn*9YY@Y#yy sY xYyy sH)Yo!o ooT) Y9999Iںۂ)o)ڭQYm̉x Y9999Iڕۂ)nމxnՅnѩYY~U)n)InnnIIdSyi) YOہx)  yyX)YI9>I؉ yI   Y!?؉y)@y)yIi8 Yy1)̅yIixn{) @CONSOLEI9)yIin\Y))8mII)@Iy)ٷyYYٯYmY8I) yIinY)8)mrII)@Iy)nvyYYnYmSY}2IYYUxm6IxyNYYDYm%ym"y8IIyI)@I&ylx)yY)I8:PER:yIiYƉxy58IiIyIYYy y    I  Y Y   yI ѩx  Y  Y y Y y y y U))2m I9=9K)2lY9=I9K)2lY9=9KyY9el怹)) )Y)8)i UY)ISfMiI9eiYI OGۂȉ,IY9Y9L9"9#9$9(9;9<ll YMYl9 9)9II9Yϳlylx)I9)i) lm)ۉYiکi)le)Y<5>Yi9$lB)l$Yl'l%l#l*l)llIl llll dM)=I9yYR)k)y)))@yi9Y9)Y)0yy   Xyik9 9 k))x x))x)xi)9I9"9#) i yX8iI9")ik̹yIIkr) ykmyikh9 M yk`)))I9) 8kNykY)ȂYkJYkE)) kA)ۉYiک)k:)Y >Yii9$kЉ))x x)iyy)k)Y>Yii9$j)y))IIժ9Yȹ9 )ji))I9)j 9ijkyk)yij9999jjpyj~ +y)I)jWyjV yY YYj\iYj]j^)x*j<)j,j'iYϤjA)j0) 8Q<xij#)$ij jfj )@8i)$ρ +y)I)ii㭉 yXiڣii Mщyyi͵yiہxi՗iгiIyYyYyyyiYi)IHj9!)щ  iIXiYYYiXYYȢꅉ)ȫYXI )XڑY)xYyYXǁYȃY)ȫYЉxY)ȫYY)XiEXѹY)I)I)YYi)=3Y칤9 BH^(*)i9 ))IYjYeYiXȫY)IɹY)X ѩY9')ɹyh߳h )=Yh)InhƎIYYi:9!hY)8λth) xyi) S9)''t) hhY YhyhrY8 9YyyihdhdI)9Y9)))XXih^YhX)I )5))')8I9(9)'8m)`(i)ʣhohnY']hg)hxg)Ox)> h )xG()=8g)gX7)響I)@IgףgԆgģgÁgg) x)(T s)@Y8 ) g) I5)I9;Yg))gxg^gUuyyi g))O SggRd`gI\g.yg*g#tyyiG Y9;) g.)ˉYʩgigg^ f)Qff)Yyf{™xf))YYjYf|) )=)IY5Y f)}8f)rx)IfY9)9)fffiӸYfh)) i>Yxf) d)il)=8x |3) %{Zy)=xLOHfI) f]ͣf]ǣf]f1) HP*FyfY)xfY)@f))D80yf8-EYeyi)=򁹉x)Y)əy9y)f8)9yց8i)yY9y))9 ) yY9&x>e9&e 8ewyevs Yyemieiev xeZI9xeV8ec)x9&eCI)A¹ ~e5y9&9%)щ eF) )<);8Ye)%i ))LIe8iyyIyiЉ)0I) )) Y9YYieW)dՉI5t))(E)Icd)& )(щY9(y9)ѩ̹#)yyYi9y))9) )i9 i)=)%Y _)Ǖ8yY9)d)9)!X XIdXљI‰8y)yYYdyy)$i)<8dJxY)ȫYYn) iX)IsYXnIXȫYdY)<);щIi)%yc) cd);)<)йx.c)c8c)%yivyIii y.+)Icc)9 )9 ) 9 ) 9 Y9)9)09x))c)ȫYcɫcĬcɳc) )cc)YȫYc Y8i)9)9)iiI ))8)Iyi9y)cp)Iy)yi9))9))X Y S))cJ)9cB )) 9)) x I8Y9999 bxXY)I)X) I99)ȫY9)))XXYi9 b{)Hy))=8)ḅbǤb̆Ix)})!yi)=)b)YXiYib6YYȳbȫYbXI)I  YI)ݾb|bwb|)܆Ii)UYXPYiaxYY)ȫY)XI)I  YIE)%a8a))x)aax)Kй8a89) waa) Mщ)")#az)8)xx)79L88Y)x)79LaU) aXaH)x)79LƸ Y)ƫ)=щ  lxYIYByk a5Y)xj\I)й k䩹ý S(K)a ) 8'a)8Pi= )9`)Y/ÙFsy)%l`f6yyiΣ`9G)`H)G`ݣjYf8``)멩 ``Yy`weyIyX`k`YƉY I8)Yx)Y8yeVyyl8)@Yi9Jy9`Gx)y98Yy9YX```)i)`` Yyyi`)`ՉI0I9)>])?])@] E])A])B] C]y+)yY)éYй8xYЉ艇yxxi)%)y]Y]xi)%)y]xY]sx]o]j)zy ) )ۉ)I) y)Ii)  ) I)IY9)yΉYYi)i)i))Ii Yxo8oYy )9  ) yyyYyi  Y9xy)%̹yIIy19)9)9\9)%9yy9 \yi )J+YiI))d84ygg\exκβΪ\Py9")դvg? y\88f#Y\+&)QY\ 6Ź9)9Y99yǞ)V)Y8\ )ʙ[) )9Y9yk[)8 Y99yUi)[)qx)YY<y)p[Ή)! &Kyfx[lx̮[Wy9")ڤ̘fP ))8Ňy[18X"Y[$%y[)[ [ YƫN[YYơUyZ)8Z XYƌNiZ)YZ`9&9%*) ZǪIYeS)8,IZ͉Y9Yyyi) Z) )*Z)Ox)> |9Yt` p)IZ))Z)) )Z)) Z9))8ZvYY 9) 9))~6Yf Y普8eIՇyiщ8)%8)8yëyYU YYȹ8yYYxi)%YYyyYÇyY9Yyyxw\F)`Y8[VxM8R詓GੀyyY Y:76/ȩ8YyIYyF8ЉI$\F+x) Y<8虑8虂򸩚񉸣่xY YyYr YլҤYyyIYyEЉIÇ)Y))ԚYI ix))ԆYѣ  4 ´*&nyp˳kZ)i))5X98) Ywu  FoD = 0;)21 10 2-VR#iDXI98) )))йIYI i))ӺIY x))ӨY X98) ڙXPXLXNXBX@X8+tW9x) )`)oW) yiyR w)k)gid L IFQ>JYYXHJ$62YJ76)xW6)x  W%)щ)XyKYX뒉y߫XYȃYyYYəy)F8Y)PY)0Nx[ûIyXY/s鉃xyYY'#YYz9YyypXQYoȃYYnK8bIYc) 򩁩WKxTҊ8) MKx@8yJK x0+" $1 ()Y  ~89Y.ۉYy&I)xK`))iٱI9Y Xщ8A)x)x x 8) yI)$9)Y)^9@Y9)~艼8w ~flkjihgfed R)))) I OyYK K?ЉD F) ? )Y 7)Y 0)湎 YIYx   Iyy: }yX܁YȃYYЉyȫYʬЉ) }أ) }У) }ȣ) }) }) }) }) }) }) }@q)i }||`ir }mnlyp) }^h)  }R)QYECE)7=J.'%)6Ay*Ы8T󐹈x) )8 8T)xYY$x9#)9) 8TR )1Y)x^X҉9)9)T3 )1)Y^XѹTT^YY)I̳SSډS)mS8)_U vlm |jkIbO |]cKVX7~SYy)IyiK~@X!YI32yYyyYyy%(I9Yiyy ) | | y~  YYyyYyyY9IyYyųSPxݳۮ^ҳIȫʎώ)x9)8S x^|I9z))IR)x^p)YxR) Y)IY)Im) {[Rv) FE,}PYDBYѹAyyYAI:I3 4I' {$$)8y}YYyyI)Y)) 9Y9YYȉ~쇉yyYyyȉyIY9YIȉ) ©x)Yۍy|yxy9)Yy8|Iy{)|Ye z Q)Q) zrr) zjj) zbf]YUOiIO zL|MYK8EY8680|F z1|2/+y|, z|Y  8| z) ©xY׳)9)9Y)Y񍉫9sW y֤ yY)Yэϳ)s y鸁Y)Y)s yxYg)Yf)s yn ylX)9IP})ji yBY/q $Y)F Y)a8?8 Y)28YYP+)©yYY Y xP))9Y xP)9yIs̹@Iy e y)Iyyys)yyYYI)9YYɹЉiyyOͅyPyyy1:yMyy?yYyYYy OY)̄Y)89)Y xiCS)9Y)o9Y)#9YCH)yy<)xObY))89)I x1FbOS9@) 9YYމyIy0I)9Y0 O Y)QY)9)I D wyXXiYΉiyIY) xyIĹ)I y) ♼ XN)   {? wyމhyIy0Y ) o~I)YIyIiII朅yIiiyyˮNNN׮0")u>2MMϮ:1oNq)})wF  }h))09Y@> }OY)09Y&$YZI)YxY8)@Y9i v橩 } Y)Y獉写x094 v |Y)Yx095 v |Yr)YY0a96 vw |YM)Yxv)Y_iX vS |wY))YTRى8y# v |;Y)YMY)K)8y)9yI9YY ; uMY)x-))9I | u)8)x))) 8)>,剁) 8)x)99LY)) 8ijwى8L)x8 xyIyyCp1CY {z {yYljLrY)8) )Y 1 Y u9LTY)x)9)I v0/ {@yY!L'Y)8T))Y N)鸁Y t@)89j)I  )  )K) ))y9 tģ)89)I  )K) t zФ )Y平9 8)Y平i)i9 8)YzxN)i9 hx)Y_]69 )YMK$)ق@9))ق@9)vyYY)yyyy  Y9))I)Ii9YY)xܺڹY8y߻ՙYԙIѪX)xyyyi9yy ))I)Ii9YIY} s)89)IYYui)9)O9YYXz|Rpxuh)IbYH=)294 G=- ) )9JZ)) x s(FAY4 9 yA$# x)Y平9 8)Y)i9 )Y鍉9)Xy8y 9 )  xX) i I) Zy{)Y99)9Y9)9{9))1Y9Yy 8Y)9Y :PYt\7Y$I^) r;y)999)Y9)9)9Y9I:) YX񩉃8 Iy ?й8 x)Y平9 x)Y퍉)i9 ܩ)YӍ平9 )Y)i9 wƣx)xYYXys}ysw)Q ) YF qc 8)Yki平?9 8)YVT+)i9 E)Y<:平9 x)Y'%)i9 )Y  平9 )Y)i9 w)) 8 ţ99)I9)I9)y9)y)YYX)yryxy}r` ) YU prr)J)f)bYYX_a pS v| )YYW平-9 )YDB)i9 38)Y*(平9 )Y)i98q򅉡y)yqyᑩyۑyqY oˣ)9 &)IGGF)qYȫYyzXG 8Y)8Yio oYeXF8) W) ) )8Iv9z)FͻFʳQYYY)I}FFF_)8K.-Y o)y$Y(iYIyyy艣IIyyЉ)tY 9)I.FUFTF)卉ȳYŽpުXӪXѪiyyYy̪XȪYXF.8 Y)yyy艣IIyyЉxXYy{XF8Y)nYyyyIY9yYy ny)9)IEīEÊE)p_Y_ȫY8y"Љ/XE8Y)I88x2Հ@I@@s) y@gY) )) w)U)Iι xIe))@8@9)Âx}@%Y))}y) ɝy)٣@ Y)x>)?) ))-q@x)8/) ) yIy09x ).829===uR~===u=|A|R=|eKJYƀÙ7I}IKJibٙÙi\9Y ÙYQ/Ù WIQJ)KWIfi-I1iYlÙz逆9r)P`2KK7IY؀\9 'i'' ''CY܀hrYnO9 91iY!lÙÙI299cb8rYnO9 91iỲlÙ\9iX9g\9 e%97 (CX2XX''9JY9(i8 Ù9q9`)ÙYdÙ  iÙiy)ÙKzKR ÙD nhgyPznÙ9˨Z)KKK˨9Vnh\9I2cbÙ299bgXGHiz(Giz9nGƌiz0(9z9)ibG9ighZ@9չ2BJnOGz@7YnO9Bfi2cG9BgXG9Bznn(YnOiGB2r96\\zr95 79 9>!U!w!>w>,PI%===uR0XڧPI>xวщhhщI|x>wxۄ,R0XCA>A!!U!RAxww>*,R0X9>U>>U!>>w>xwPI%===u0X!%|x>wxۄ,R!%~h~ѕ*ه0_>%~h~ѕ~~!(0Xd>!Iۍ>,w>>R|xww>ل!PP!>0XxIۍ>wIwUwP>P>I>w>,R0X;>ww%"="=RRR)I99Y9 9 99 x)I9Y9 99 99 8)I999 Y9 99 )y)<)x   щxy* 懩Y9 9999 I9 x)Y9 999 99 x)I9 9Y99 99 )8x Y9x)7ӂ v)9) xyy)0YyyY9Y)/yyi Y9091}.)292)393)494)595)696i) N)" ))щy)f)9 ) ) 8 $Y9 9 999)99)O99))x y )9I )i)Y9I )9 )i)9)99))998)9)9)9999)9))Py9i yy) ;90Y91)92;}93;r)494)595)696i) x{)ƣ) I)xI)Iy :))x  y y y  )щx9"9y))Yy*yi)xYִY 8)xFl))FzY艇y  )nyyi Y) i )Ii ) i9 Y   xIy) xyyYyy) IYyЉxi  )y):{)x  R8 8 y )nyyi Y) i  )Ii ) i9 Y y y  xIy) rxyyYyy) IYyЉx9) 9) ))x  89 gy))Y9)iyyry9) 9 09 19) 299)9)9i9Љ9)8y )y999))9)  9jyQ)ʎw)χ)9Z)  9?y()2))91щx x) %)dy))Y9)I99й `)x  88鉉x8됹 8) ~) yy0Љy'')+8_) 8\) 98)8 yy)9999)9)9Y9 Y Iy Cй8))8) ))y8`9)x ))y8K97) 7) )))8)o )8Y)y89) )8Y))P)@yy797) 7) )Y))) )i))) )) 7)I9))) )i))) ))7)I979) 76) )􇩧))) )i))) ))7`) I9 ))) )i))) ))|76) I9 6) 6) )y77 y ɇyy66yщy6y )6yy6ߎ y )yyYщx yyy6y66y66y6 )6O) 6L) y  6y6ix6~6t8Y) )Y6g6) 6) yy6]886W6RYyy6H886>6=Yyy  x6)ix6"y) ) ӂyy)0YyyY9Y)/yyY)Y9998)I9Y99x)I99Y9)5xY)@5t)@I99Y9)Y99I9)I99Y95PY)5F)5>) i)`)85,)))5) 5)@)n"5) 4) I9Y9G/)I?4) )59))͉5Yy5yY艤4yyy)x9r)4Yy4yY艤4ݓyyyy@|I)9YY)9@jI)9YY)9)ꩴ4$y)8444}k4K9x4B9))ʩ4|4{Yѹ8y4pYa4k)9Y4d)84]4XYI4S4)Y4W)))NFS10OFS00 FE))49  iy҉844%}y)` )"I)))84  iy҉833|Գy)/ i)"I3) 3) )C))3 3 03«33 13) )8 23)3)3i33>) 3;) )))  8)y йIi)ԇ)))3V)8  iy8  iy҉83+y ) I)Љ) ))  ѹ)L i) Ii2) 2) )_))  ѹ8) Iy) #YyY y) IiyY2b) 2_) )))Ȯ8y)2>)Y2v2mйx)Ȯԃx2byǤ2` )x))Y xY2R2Q1))Y9 9Y)/yyi21 йY2,y  ) 9 ) 9 )9)9)9)9) ))8)@ 1xVV )8)8xIYyI8)Yi99)x)xxI8YyI8)Yi99 ) )xI8YyI8)Yi9)9) )xIYy)PW)@)yIYyЉi9)9)XYX)XYX y9)XYX)XYX y9)i)I9) )i) I9)Y9`)/)9)9 )/ 8I   щx ~Yi 0ـx0Τ0ѣ00)< 0k) 0 щy)9)) I syU{ yYyyyi)I9I9yYyyi)yI9R999I99 X0)   ) )8/)ꙃ80I0D0-yU' yYi9 y   y0yYYyYyhyyIi /X//I/I/ہIIy/YIi)/zY)@x/ 8  )x )y)y9) y)y9xy/r 8)99)(93/b>/_@</ZBI9Dpx)(>@@@<BI9DߖE  I9 Y91:999 )/I )09)19)29)39 E)1I)@Y99)295)396:7II)y)i9798)9йygY)Y11Y:.'94 EޘIY92)xF)x. Y)x.X) 9iY)x ~ )x  ))8  ix 8II8 M i~Y9-.) )~) )-Y)~)~~i < BYx j <)9Y)F9Y)X9Y F~ӎ A<~)9Y9-i < BYx 9 <)9Y)F9Y)B9Y~  y)09Y)yY09Y)1))9YI) Iy))Q))y~oyY9 8Iyi)-) i~aI-YIi BiY8yi< Iyyy00yi )9  i y  8  Iə8ȹx  xyiGI6i M Y '%#yiGI  i I Gi MYM)90)9 MX9EK)蹃x0) Ii)iK) x))i)) <))')zo < Bx <)9Y)91 B< <) :I)i9Y<)z?)Y9)Y)&)'y9z$9IyIII9 < BYx <)9Y)9Y)9Y<)) )Xi y)2)_XyYXYYxEyQy yy0Q 8iȉȉyQy y0iQ iyixY9!)9 ))!Љ < Bx <) 9Y<))2)8yzXYy KyYyy0Y9yYyiyb)YyIЉEG)))9)9Y)ȃYYiY)yY)y9)2)8z)yy8y < BYx <9)yyiى8i)88 9iIYYY9Dݏu+y)09Y)99Љ)19u)98)38) )`9)D9)09yiY9&#$ +s) )8 8)&)8 I9& + I+y)9()&9'y") )xI))yi)IYQs 8) )i)I)x)sy)iIyIIIX9zQ9Yi90- < BY i <)9Y)F9Y)CY9Yii<3sV) yrt)i < BYx <)9Y)F9Y)^9Y<rS)ʩyrJ)i < BYx <)9Y)F9Y)]9Y<r()ʙys)x" ) )xI))8yr 8) )i)I)x)rщy)iIyIIIX9yx)9 < BY1i <)9Y)F9Y)JY9Yi<r) yy09YyY09Yyi > <@B) ) x)),)9 )9)9  )9 ) )9) )9))9 )9)9Y9 )I9 ,O)9 )9)9 ) )9 ) )9) )9)I9 )9 )9)9) )))7LJ )@8)I9 f 8Y)xa%)dY))xY yY)0yi 0Y9Y)=yyiY9  # )090)191 2 2)IiY) )gJ)1 8)J M))) 8iy)XI Iyyyy00yi)  蹊)0))XIi 90I9 i xi  ɉ8) y)yyyyxi) Y 0yyyxi) `)yyyyi )0Y))Љ9Y9 普))89 9  86YȫYYYY 9 9)5Y9I9 9 9 )5Y9 9 I9 9)5Y9 9 9I9 IY)x 8 x)5I9 Y9 9 98)5Y9 9 9 9I9Y9 *&Y)@8pYI hۂ щ)5I9 Y9 9 x)5I9 Y9 9 8)5Y9 9 9 I99 Y9)Y)@8pFI huۂ)  8 )I98 )9e99)9<)X8i щ yyyi8Y)9<)9e9 щy9i) щx))@x)1y)96Y9=9>?GIK9f9g979;I98C)e) m)Yi9eb)d 9iY9x )hxY 999 <Qx8x)-Y)) )I99 9 *)) 9Ɖx)9<)968i y999iY)8ف89Ỵ}ão') x'I9 gY)8) щ8 xi%ґI)й nn)) xy9)) Љ)8 _)IIYnpp:9)3y)*)I(Y)@nUYnw щ ~S ~oi)Y)nZ)) 889)) )8 ) щx x yɂOщ)x)8 >y8Y99I))Y 'yiI9 y  щ))Y9I)) 8)I tmө8۞mʩyۊYyyi8) )YoY)8g) xY])8A)696~S95)I9Y9= eE) 8嵣&86BkY) )x)pY ) 9) Y)#) ) I~x)܄Y)m )x)m 5)mήvx~)h V 5m)y9 lyyim i) )ˉYʩ)ei9e*Z)jRP)YY 5©xA))YYY-[Y)Y}~) )I@))e9e щ)=9Y9 ~ 9)) 8)I)ӸYY)Y}8) i)e9e}x)%©yI) } щ8y)=)yyy9  9yiՁ)8>8Y))) +8) ~Y$)ق yY)xY~288xx{)8 i)9ل ~i/)Y|~~) )~IYS)hx) 9Y ~ y) x) ) ybY^k2щ8y 8)Y8yyY999y9 yi0 y))) Y)Y)y4;"))!ƙyi"I xx+I;Y!Ι x+lIii)9)9 N) xxIt EpxIx+ IyyIk) YYyy IIyyyyYЉ ѩx 8iy j)I^r) %JIY9x),xYN) %8IY9i)xۉpxII'' ] xI2 J *dx))8V) i) Yyyy ri)))) ֖kYIY٣P)8xF)i) Yyyy Yͣ))  )i))x`)) ) i i)Ii yI|kiɂiy|D)IiyI)iII)I9YxyY)8IمyI)Iyiiy)IiHI)iHI)I9Y8iryi_))YYIXIYy'Iyy)IIYIۂ))I)Y) yo艇y)ӣy)IIYIۂ))I8)ܣYYU)y)IYщ)#b8^ZIIZSYNXI)IHyy)%tYy9#9"99 {29!YI{" ' y)9$Yy#y艇yxy)"})!z) )  v)$xIy)YģIISY)) )!Y\YY x )!\8 Fg) yi) Y)8 8)aI99D?F')I݉).Y)PY)R9)yyY9i .PR)aY9£F)9 Iiy).9Y)P9Y)R9YY999D)$IЉ8IY999D)IЉ8ЉE9D)I):9Yi9Iiy).9Y)P9Y)R9YY99D9D)IЉЉY99D9D)I8  "Y99 ))€Y9E) y YYYi9' I9Y)IiY)  I9) 9) 99D ")8Y9: Y)מYD.+ރ$ }  TߍY9)4ItT9cx)) YY ֓x ") 9Y9Ɖ )9Yy~Y'"x)) ⩣ e) @NULL)) )  IyYy))Y)@xYev  )8egYiyʼIIeXy yiYg)8 )))yʀe<I9e4)8Y9e'))x 8 )g_" Iy98yyi yYYyi) g:) y9))g.VR )>: B)GY))d)〹8=낉8ւI YߩY}Ҋ8YYĮ}ƃ ʫ8   \)yIWT YY}8 ) 9I9Y9 ƉB@9u9}e8 ĶIIlY YYR}OƁ XyuXxBt)钧I֧I):9Yu=) IIu/9N)yyʳu")y94yic)xY9)|I9YY|ނt)y9܇yi q9)|It)y9yi9tY|t)y9yi Y99Yt|t)y9PyiB9Y9)|It)y9yi9)tY|l9)|`I9YY|Wނ~ɇ=yII) щyyܹIyi 99й q)Ii v)Ii u)!Ii 9zyQ ta)"Ii a)Ii )9 I8y9 yyyiY9ުY 9 I Y9{8 9iYY{Â)YiIч))YY{)))8YY{)ʁY9.LOG.LGO.TMP))  ))y9 ))y9 ))y,yYY)y9y ))yyԹY)y9ȫY9!Yp}a ~Ya) )ݘ *ϐiY9)͉yyYyi) !9Yiyyi ԁY9)|9am)x)9) 9)xaY) 幢9):9)Y )ݘ =ii))p)9ʼn)ʼn7Ĺ'Ĺ9I9)6&9)9I9 @Y!)9I9xY9)-9`Y )9) 9`)8)9Y9y)x`)幢9);9i !)))p8Yx)yi)8X!))pY9))5I%Ii9!)))i 9Yxi))Yi ! BY)͉)8 Xy))pYyi)9)8Ĺ(Ĺ9Yx9yYyyiȉ!)9yYyyi) 8Ή1234։!"#$gy։++++))py >+9)I?+9 щ@+9IA+9) !9I9 щ!9I9)x. )Ii ))|Y)Y ) Y y YF YyiX) yi ! IY)͉)9yYyyi))YY  )ݣI9  () 9xY   )  y nI)x))!8YY)8iyIȫYYFI)Y)) x)Y)Y)Sisi)Didi)RiriљYY))Y 4))Y))Yi ')) ) Y ) ))   Y ) Y99 ) x ) 9 Y) x)p_ȃI9)9pVII ) )8Y9 I ĹI yyyiyyi y y Yi Y   8 Y) )/Yx Yt  y YiIy8 x )Y Y)IIy8 )9ooIIy1晓yoщYoII剁Y oyyi yyi)) y ) y晓yщY)9)Y 9 yyyi 9) ) xyKY 9)y x)9 ) )Y  yyyyi)) 𪋈8 )Y Y)II8 )98) 9Y9n멉)) y ~Yyщ)/)yY   yi yyi) )Y 9)Y9)) )N9 Y   )Y9)Gѹy ) x )xY+x )Y ʹ*x)*xY ʹ )Y 8i8y Yx)x))8 )  )) ))xԔ   y)x)8x)| ӣ ) ˊ)8@) y  ))6<D))x 9))  0 }0i9 s q) ʙ) ʩ))  [09 T R) ʙ))  @09 9 7) ʙ) ʙ))  !09 )  ʩ))x ) ) )) ) ) )) ) ))ʙ)ճ)ʩ)) ) )y)0BY9Yx)) )yY)YЧ٩ɂ@ 9)) yI)0IiЉ)0X)1XևypxIg) Iyy pxIy ѹpIxЉɉx ))pƉ9);oProgram requires LANG_RT: relink without SD_NO_LANG_RT.OB 4x8DOx00@0ypi0I ))ȹyIlj9  FATAL RUNTIME ERROR: TERMINATION THRU ?BOMB 0 .C$}{$n$}0 SD_LOGPRT.ST   p?BOMB/p..sc..sd_c_file_io!C.INIT pRsstrcpy pfsd_nopen ?G.IXIT 0?G.IXMT 0?G.BKPT" pLogDataLen!CTRL p}GetSw pCollectGlobalSwitches pGetArg p?NTOP p~.KILL- p&?UDP000000!.REQUIRE_LANG_RT_REV_3.10!AWOFS py?URTB p(?ZMAX p$?NMAX 0?G.UTSKG p*SC.sd_sys pReadLogData p<main p+WriteOutput pSysReturn"p$Switch"p@@LogData!AWPOS!AWATR! CON_TERMCAPS p(?ZBOT p?SBOT p?NBOT p.UKIL putoa/p..sc..sd_logprt" pSyncCount"p:LogHdr p4sd_sys" p8LogTrailer!CON_ACTIVE_PID-p&..LOW32K p?UKIL! CON_USERNAME! SD_CUR_PID pasd_nread!SD_INIT!I.INIT p sd_nclose/p..ud..sd_logprt"pOutFD"pLogFD" pReadCharCount"pLogCount!FLUSH_INTERVAL!CHARSETS!ATTRB p'sd_nwrite p)CFALT p&SFALT!AWSET!AWDSC!TIB!ACCEPT_TIMEOUT!CON_PROG!TIBATR 0?G.UKILL"pUtoaBase"pCharBase" pFunKeyName!AWBUF!TIBOFS! TIB_UPD_COUNT p/FFALT" pDisplayCount! TOP_WINDOW!FLOAT_TOP_WINDOW p.UTSK psd_nseek" pInputCount! BOTTOM_WINDOW p,IFALT 0?G.SYSCA p?UTSK!PERIODIC_INTERVAL p{.BOMB 0?G.UTSKB"p.NULLDEL!LOGOFF_INTERVAL ( .W$RbA$n$_MAKE_SD_GATES.CLI comment MAKE_SD_GATES.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro assembles inner ring gate definition modules to be linked with user programs and the inner ring Screen Demon program. [!end] comment If no ring was specified, use ring 6 as the default. [!equal,,%0/ring=%] %0%/ring=6 %1-% comment If no inner ring program name was specified, comment use SCREEN_DEMON_RING_.PR as the default. [!else][!equal,,%0/ringname=%] %0%/ringname=SCREEN_DEMON_RING_%0/ring=% %1-% comment If no name was specified for the module base name, comment use as the default base. comment Both _GATES.OB and _CALLS.OB will be created. [!else][!equal,,%0/base=%] %0%/base=%0/ringname=% %1-% [!else] push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] write write write Building gate array module %0/base=%_GATES.OB write ,,,,to be linked with Screen Demon inner ring program write ,,,,%0/ringname=%.PR write ((write x/s),x/s) & masm/ps=masm_32char.ps/ulc/o=%0/base=%_GATES%0\base\ring\ringname% & SD_GATE_ARRAY_DEFINES & SD_CALLS & %1-% & SD_GATE_ARRAY_DEFINES_END [!equal,(),([!string])] write write %0/base=%_GATES.OB can now be used by MAKE_SD_INNER_RING write,,,,to create %0/ringname=%.PR write [!end] write write write Building inner ring interface module %0/base=%_CALLS.OB write ,,,,to be linked with user programs for calling routines write ,,,,in the ring %0/ring=% program %0/ringname=%.PR write delete/2=ignore =?[!pid]ring_def.sr write/l==?[!pid]ring_def.sr SD_RING_NUMBER %0/ring=% write/l==?[!pid]ring_def.sr SD_RING_NAME %0/ringname=% ((write x/s),x/s) & masm/ps=masm_32char.ps/ulc/o=%0/base=%_CALLS%0\base\ring\ringname%& SD_GATE_CALL_DEFINES & ?[!pid]ring_def & SD_CALLS & %1-% delete/2=ignore =?[!pid]ring_def.sr [!equal,(),([!string])] write write %0/base=%_CALLS.OB is now ready to be linked with your programs. write [!end] pop [!end][!end][!end] .W$Rb$n$_%Ĕ SDWINDOW.DEF %*** SDWINDOW.DEF Screen Demon rev 3.52.01 *** Copyright (C) 1993, Threshold, Inc., All Rights Reserved *** -------------------------------------------------------- ** Structure of a SCREEN DEMON window descriptor ** * This copy file is intended to be copied after an 01 level group field * that names the window descriptor. Individual fields within the window * descriptor can be referenced via qualification if necessary. 05 SD-WINDOW-VIB-PTR PIC S9(9) COMP. 05 SD-WINDOW-ABOVE-ADDR PIC S9(9) COMP. 05 SD-WINDOW-BELOW-ADDR PIC S9(9) COMP. 05 SD-WINDOW-ACTIVE-UP-LINK PIC S9(9) COMP. 05 SD-WINDOW-ACTIVE-DOWN-LINK PIC S9(9) COMP. 05 SD-WINDOW-FLAGS PIC S9(4) COMP. 05 SD-WINDOW-RESERVED PIC X(02). 05 SD-WINDOW-TIB-LINE-OFFSET PIC S9(4) COMP. 05 SD-WINDOW-TIB-COL-OFFSET PIC S9(4) COMP. 05 SD-WINDOW-VIB-LINE-OFFSET PIC S9(4) COMP. 05 SD-WINDOW-VIB-COL-OFFSET PIC S9(4) COMP. 05 SD-WINDOW-RESERVED-2 PIC X(04). 05 SD-WINDOW-VIEW-1. 10 SD-WINDOW-VIEW1-VIB-LINE PIC S9(4) COMP. 10 SD-WINDOW-VIEW1-VIB-COL PIC S9(4) COMP. 10 SD-WINDOW-VIEW1-TIB-LINE PIC S9(4) COMP. 10 SD-WINDOW-VIEW1-TIB-COL PIC S9(4) COMP. 10 SD-WINDOW-VIEW1-HEIGHT PIC 9(4) COMP. 10 SD-WINDOW-VIEW1-WIDTH PIC 9(4) COMP. 10 SD-WINDOW-VIEW1-NEXT PIC S9(9) COMP. 10 SD-WINDOW-VIEW1-FLAGS PIC S9(4) COMP. 05 SD-WINDOW-LEFT-MARGIN PIC 9(04) COMP. 05 SD-WINDOW-RIGHT-MARGIN PIC 9(04) COMP. 05 SD-WINDOW-OLD-LEFT-MARGIN PIC 9(04) COMP. 05 SD-WINDOW-OLD-RIGHT-MARGIN PIC 9(04) COMP. 05 SD-WINDOW-RESERVED-3 PIC X(64). * End of window descriptor structure * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Descriptions for each field in the window descriptor: * *---------------------------------------------------------------------------- * * SD-WINDOW-VIB-PTR contains a byte pointer to the window's Virtual * Image Buffer. It is recommended that this field not be modified by * COBOL programs. * * SD-WINDOW-ABOVE-ADDR contains the word address of the window * descriptor for the window which is above this one in the window * stack, or zero if there are no windows above this one. Note that * if floating windows exist and this is the Top Window, this field * will point to the descriptor of the lowest floating window because * the floating windows are above all normal windows. It is recommended * that this field not be modified by COBOL programs. * * SD-WINDOW-BELOW-ADDR contains the word address of the window * descriptor for the window which is below this one in the window * stack, or zero if if there are no windows below this one. It is * recommended that this field not be modified by COBOL programs. * * SD-WINDOW-ACTIVE-UP-LINK contains the word address of the window * descriptor for the window which was active immediately after this * one was last active, or zero if this is the current active window. * It is recommended that this field not be modified by COBOL programs. * * SD-WINDOW-ACTIVE-DOWN-LINK contains the word address of the window * descriptor for the window which was active immediately before this * window was active, or zero if no windows were active before this * one was last active. It is recommended that this field not be * modified by COBOL programs. * * SD-WINDOW-FLAGS indicate certain facts about this window if set: * Bit Value Meaning * 1 VIB was allocated from available memory, * rather than provided as an argument on * the SD_NEW_WINDOW call * 2 This is a floating window * 4 Cursor wrapped on last display to this window * 8 D400-mode is on for this window * It is recommended that this field not be modified by COBOL programs. * * SD-WINDOW-RESERVED should always be filled with LOW-VALUES. * * SD-WINDOW-TIB-LINE-OFFSET specifies the number of additional lines * to add to the physical screen line number of all views belonging * to this window. This field may contain any value. A positive * number will cause all views for this window to be shifted downward * that many lines on the terminal screen, relative to the views' * normal positions. A negative number results in an upward shift. * The same effect could be produced by adding this number of lines * to the SD-VIEW-TIB-LINE in every view descriptor for this window. * * SD-WINDOW-TIB-COL-OFFSET specifies the number of additional columns * to add to the physical screen column number of all views belonging * to this window. This field may contain any value. A positive * number will cause all views for this window to be shifted to the * right that many columns on the terminal screen, relative to the * views' normal positions. A negative number results in a shift to * the left. The same effect could be produced by adding this number * of columns to the SD-VIEW-TIB-COL in every view descriptor for * this window. * * SD-WINDOW-VIB-LINE-OFFSET specifies the number of additional lines * to add to the virtual image line number of all views belonging to * this window. This field may contain any value. A positive number * will cause the contents of all views for this window to be scrolled * upward that many lines as shown on the terminal screen, relative to * the views' normal contents. A negative number results in a * downward scroll. The same effect could be produced by adding this * number of lines to the SD-VIEW-VIB-LINE in every view descriptor * for this window. * * SD-WINDOW-VIB-COL-OFFSET specifies the number of additional lines * to add to the virtual image column number of all views belonging * to this window. This field may contain any value. A positive * number will cause the contents of all views for this window to be * scrolled to the left that many columns as shown on the terminal * screen, relative to the views' normal contents. A negative number * results in a scroll to the right. The same effect could be * produced by adding this number of columns to the SD-VIEW-VIB-COL * in every view descriptor for this window. * * SD-WINDOW-VIEW-1 is the first view descriptor for this window. * It has the structure as described in SDVIEW.DEF, except that * there is no FILLER padding at the end. * * SD-WINDOW-LEFT-MARGIN contains the number of columns from the left * edge of the screen to the first column where the cursor can be * positioned. A value of zero means that there is no left margin. * * SD-WINDOW-RIGHT-MARGIN contains the number of columns from the left * edge of the screen to the last column where the cursor can be * positioned. A value of 161 means that there is no right margin. * * SD-WINDOW-OLD-LEFT-MARGIN and SD-WINDOW-OLD-RIGHT-MARGIN contain the * previous values of the above two fields whenever alternate margins * are in effect. * * SD-WINDOW-RESERVED-3 is reserved for future expansion, and its * contents are not used in revision 3.00 *** End of SDWINDOW.DEF *** .W${S $n$_pSD_GATE_CALL_DEFINES.SR p;Screen Demon rev 3.52.01 inner ring gate call definitions .TITLE SD_GATE_CALLS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .NOLOC 1 ;List 'real' lines only .ESC ;Kill MASM's escape character ;Entry symbols defined by the Gate Calls module .ENT SD_INNER_RING_NAME ;Define the macro that declares the ring where the Screen Demon routines ; will be loaded .DUSR ?SD_RING_NUMBER = 6 ;the default .MACRO SD_RING_NUMBER .IFG .ARGCT .DUSR ?SD_RING_NUMBER = ^1 .ENDC % ;Define the macro that declares the pathname of the inner ring program ; that will contain the Screen Demon routines. .DUSR ?SD_RING_NAME_FLAG = 0 ;Name not initially defined .MACRO SD_RING_NAME .IFG .ARGCT .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS SD_INNER_RING_NAME: .TXT "^1.PR" .DUSR ?SD_RING_NAME_FLAG = 1 ;Remember that a ; name was given .ENDC % ;Define a macro to define a gate for the specified routine. ; ; Call format: ; GATE routinename ; "routinename" is the actual entry point for the routine. .DUSR ?SD_MAX_GATES = 0 .MACRO GATE .IFG .ARGCT ;List routine as an entry symbol .ENT ^1 ;Define symbol for the routine as a gate reference .DUSR ^1 = (?SD_RING_NUMBER)S3!?SD_MAX_GATES ;Increment number of gates that have been defined .DUSR ?SD_MAX_GATES = ?SD_MAX_GATES+1 .ENDC % ;Define a macro to create a dummy slot in the gate array. ; Referencing this gate causes a dummy routine in the ; inner ring program to be called. ; ; Call format: ; DUMMY_GATE .MACRO DUMMY_GATE GATE DUMMY_GATE_CALL % ;Define the BEGIN_SD.CALLS macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so that it ; does nothing, since no special initialization is needed. .MACRO BEGIN_SD.CALLS % ;Define the SD.CALL macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so ; that it uses the GATE macro above to define a gate for ; a Screen Demon call. .MACRO SD.CALL GATE ^1 % ;Define the END_SD.CALLS macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so that it ; leaves extra gate numbers available between the Screen Demon ; call gates and first user gates. This allows new Screen Demon ; call gates to be added in future revisions without disturbing ; user gate numbers. ; Also, define the inner ring program name as the default, ; if none was specified. .MACRO END_SD.CALLS .DO 32.-10. ;Was 32 in rev 3.00.03, but 10 new gates were added ; in rev 3.5 DUMMY_GATE .ENDC .IFE ?SD_RING_NAME_FLAG ;If no name has been given... .IFE (?SD_RING_NUMBER-6) SD_RING_NAME SCREEN_DEMON_RING_6 .ELSE .IFE (?SD_RING_NUMBER-5) SD_RING_NAME SCREEN_DEMON_RING_5 .ELSE .IFE (?SD_RING_NUMBER-4) SD_RING_NAME SCREEN_DEMON_RING_4 .ENDC .ENDC .ENDC .ENDC % ;The first gate is reserved GATE SD_SYSCALL_GATE ;Gate 0 is the special gate for the ; system call interceptor .EOF .W$G$n$_ؗSD_POSSESS_ICX_1.50.PAT ;The patches in this file activate the SCREEN DEMON routines. ; ;This file applies only to revision 1.50 of the Interactive COBOL ; interpreter running under AOS/VS, using revision 3.52.01 of SCREEN DEMON ; for Interactive COBOL. %PROGRAM ;Catch beginning of initialization routine so that SCREEN DEMON can be ; initialized also. INIT+2 [LLEF 2,SCRPK,0] [LJMP SD_ICX_INIT,1] ^+1 [] [] ^+1 [] [] ;This patch allows Screen Demon to know when ICX has an ACCEPT ; in progress, and if multiple console ?READ's are actually ; part of the same ACCEPT. RDFD [WSSVR 10] [LJMP SD_ICX_RDFD,1] ^+1 [] [] ^+1 [NLDAI -1,1] [] ^+1 [] [WADC 1,1] ;This patch causes the ICOBOL interpreter to return an ESCAPE KEY ; value of 99 if a console timeout occurs, instead of aborting ; with a "Runtime System Panic". SETDLM+1134 [NLDAI 67,1] {LPSHJ #SD_PATCH,1} ^+1 [] [] ^+1 [SUB# 0,1,SZR] [] #SD_PATCH 0 [WSNEI 76,0] ^+1 0 [] ^+1 0 [WBR .+5] ^+1 0 [WSNEI 67,0] ^+1 0 [] ^+1 0 [ISZTS] ^+1 0 [WPOPJ] ^+1 0 [WPOP 1,1] ^+1 0 [XNLDA 1,10,2] ^+1 0 [] ^+1 0 [XWADD 1,4,2] ^+1 0 [] ^+1 0 [WSUB 0,0] ^+1 0 [WSTB 1,0] ^+1 0 [NLDAI 99.,0] ^+1 0 [] ^+1 0 [LJMP SETDLM+667,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+23\ ^+1 [] [] ;Intercept EXIT PROGRAM so that if the exiting ICOBOL program was called via ; a "hot" key, control can be returned to the original ACCEPT. A.XIT+3 [LJMP COBOL,0] [LJMP SD_ICX_EXIT_PROGRAM,1] ^+1 [] [] ^+1 [] [] ;Divert STOP RUN processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called ; from a hot key. OAT+232 A.STP-.\ SD_ICX_STOP_RUN_HANDLER-.\ ^+1 [] [] ;Divert CALL PROGRAM processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called from ; a hot key. CHNOP+13 [XJSR WUSIN,1] [LJMP SD_ICX_CALL_PROGRAM_HANDLER,1] ^+1 [] [] ^+1 [WBR CHNOP+151] [] ;Catch ICOBOL program loads so that the name of the new active program ; can be obtained and put into the SCREEN DEMON control file. ASPRG+62 [XJSR WRPGD,1] [LJMP SD_ICX_ASPRG,1] ^+1 [] [] ^+1 [WBR ASPRG+136] [] LDPRG+7 [XJSR RDPGD,1] [LJMP SD_ICX_LDPRG,1] ^+1 [] [] ^+1 [WBR LDPRG+35] [] ;Catch ICX Abort so that SCREEN DEMON can reset the window environment ; if control will return to LOGON. ; Note that the 341 in next line is actually ICX's STATUS address, ; which PATCH won't accept in the instruction format necessary. CSTOP+2 [LDA 0,341,0] [LJMP SD_ICX_CSTOP,1] ^+1 [ANDI 2,0] [] ^+1 [] [] CPERR+14 [WBR CSTOP+11] [WBR CSTOP+2] CSTOP+24 [LJSR WAIT,1] [LJMP SD_ICX_CSTOP_WAIT,1] ^+1 [] [] ^+1 [] [] ;Catch entry into the ICX Debugger so that debugger window can be activated DB0 [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] SBUGG [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] EBUGG [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] ;Catch exit from the ICX Debugger so that debugger window can be deactivated DB0+122 [LDASB 3] [LPSHJ SD_ICX_LEAVE_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] ;Intercept ICX's attempt to input a debugger command so that this can be done ; in a proper screenedit fashion. SCAN0+343 [XJSR RDFD,1] [LJSR SD_ICX_READ_DEBUGGER_COMMAND,1] ^+1 [] [] ^+1 [WBR SCAN0+323] [] ICX_DEBUG_RESTART_ADDR 0 SCAN0+303\ ^+1 0 [] ;********** Optional Patches ********** ;This optional patch causes Screen Demon to catch ICX-generated error ; messages displayed on line 24 so that the original contents of ; the line can be restored after showing the error message. INVAL+14 [XJSR DSPER,1] [LJMP SD_ICX_ERROR_INVAL,1] ^+1 [] [] ^+1 [XWLDA 0,-6,3] [] ^+1 [] [NOP] DSPER+104 [XJSR PWRLN,1] [LJMP SD_ICX_ERROR_MPRE,1] ^+1 [] [] ^+1 [WRTN] [] DSPER+115 [XJSR WRLN,1] [LJMP SD_ICX_ERROR_MMSG,1] ^+1 [] [] ^+1 [WRTN] [] SETDLM+1254 [XNLDA 0,2,2] {LJMP #SD_PATCH,1} ^+1 [] [] ^+1 [XNSTA 0,3,3] [] ^+1 [] [NOP] #SD_PATCH 0 [XNLDA 0,2,2] ^+1 0 [] ^+1 0 [XNSTA 0,3,3] ^+1 0 [] ^+1 0 [LJMP SETDLM+1272,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+7\ ^+1 [] [] ;The following patch is not absolutely necessary, but will improve performance ; if the advanced features of SCREEN DEMON are used. It eliminates the ; unnecessary ?LEFE system call that is always performed on returning from ; an assembler CALL routine. This does mean that any assembler routine ; that issues a ?LEFD must do its own ?LEFE before returning to ICX. CALAS+116 [XJSR @16000000006,0] [WBR .+4] ^+1 [] [NOP] ^+1 265 [NOP] ^+1 [WBR CALAS+134] [NOP] ;***** The remaining patches fix bugs in the ICX interpreter ***** ; Note that these patches are not the same ones supplied by Data General. ; The DG patches must also be applied to the new ICX interpreter. ;Fix effective address problems STBKA+21 [WADDI 2000,0] [WNADI 2000,0] ^+1 [] [] ^+1 [] [XNDSZ 2,3] ^+1 [DSZ 2,3] [] RDDD+5 [NLDAI 0,0] [WSUB 0,0] ^+1 [] [XNSTA 0,0,2] ^+1 [XNSTA 0,0,2] [] ^+1 [] [NLDAI 7,1] ^+1 [NLDAI 7,1] [] ^+1 [] [WBLM] ^+1 [WBLM] [LDAFP 3] ^+1 [LDAFP 3] [XWLDA 2,-4,3] ^+1 [XWLDA 2,-4,3] [] ^+1 [] [XLEF 3,2,3] ^+1 [LEF 3,2,3] [] GETSW+55 [BTO 2,1] [WBTO 2,1] RDSEC+410 [LDA 2,4,3] [XNLDA 2,4,3] ^+1 [ADD 1,2] [] ^+1 [NLDAI 0,1] [ADD 1,2] ^+1 [] [WSUB 1,1] CHNOP+76 [BTZ 2,1] [WBTZ 2,1] CHNOP+102 [BTO 2,1] [WBTO 2,1] ;Shutdown guard task is supposed to give the rest of the interpreter time ; to shut down by itself. However, parameters in AC0 and AC1 to its ; ?WDELAY system call are reversed, so it doesn't wait at all, which ; could result in corrupted MINISAM files. INITC+104 [NLDAI 0,0] [NLDAI 11610,0] ^+1 [] [] ^+1 [NLDAI 11610,1] [NLDAI 0,1] ^+1 [] [] ;CPLOG routine jumps into the middle of CHNOP routine, but stack frame size ; of CPLOG is zero, leaving CHNOP frame data vulnerable to subsequent ; subroutine calls. CPLOG+1 0 @(CHNOP+1) ;End of patches .W$Rb$n$_*SD_REGISTER.CLI comment SD_REGISTER.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] directory/1=error/2=error :SCREEN_DEMON_3.52 X SD_REGISTER%0/quick% pop .W$Q-$n$QRSD_SL_CONFIG.SR ; SCREEN DEMON Configuration file ; ; revision 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;This file provides definitions for the key codes that require intervention ;by SCREEN DEMON after an input. Certain keys may be defined to cause ;a special action to occur, such as redrawing the screen. Then the ;input is restarted exactly as it was when the special key was pressed. ;A translation table may be defined so that keys that are normally ;inaccessible to COBOL (i.e., the arrow keys and C* function keys) can ;be translated to specified standard function key codes. ;Also, miscellaneous items such as the mail message string, time out values, ;note pad filename, and log file size are defined in this file. ;The following sections associates particular keys with specific routines ;that should be called whenever those keys are pressed. ;NOTE: A key that has a subroutine attached to it will never be ;seen by the host program, since the input statement where the key ;was pressed will be automatically restarted when the subroutine returns. ;Each hot key definition has the following form: ; HOT_KEY ; ,,,... ; ; ; ... ; MENU menu description <--- this line is optional ; DIRECTORY initial directory <--- this line is optional ; ACL access control list <--- this line is optional ; ; where: ; ; is one of the following special keys: ; TAB, NEW_LINE, ERASE_EOL, ERASE_PAGE, CR, ESC, DEL, ; HOME, UP, RIGHT, LEFT, DOWN, ; SHIFT_HOME, SHIFT_UP, SHIFT_RIGHT, SHIFT_LEFT, SHIFT_DOWN, ; C1, C2, C3, C4, SHIFT_C1, SHIFT_C2, SHIFT_C3, SHIFT_C4, ; CMD_SHIFT_PRINT, CMD_PRINT ; F1, F2, ..., F14, F15, ; SHIFT_F1, SHIFT_F2, ..., SHIFT_F14, SHIFT_F15, ; CTRL_F1, CTRL_F2, ..., CTRL_F14, CTRL_F15, ; CTRL_SHIFT_F1, CTRL_SHIFT_F2, ..., CTRL_SHIFT_F15, ; ; any single printable character after a quote: ; "A, "a, "*, ..., ; ; or a decimal number (1-127) representing a control character ; or printable character: ; 1 (CTRL-A), 18 (CTRL-R), 64 ("@), ... ; ; ; and ,,... are one of the following: ; LINKED Entry name ; For linked in assembler, C, PL/1, or FORTRAN sub-programs. ; ; COBOL32 Entry name ; For linked in VS/COBOL sub-programs. ; ; ICOBOL Program name ; Use only for an ICX linked with SCREEN DEMON. ; ; PR Name, arg, arg, ... ; The named program will be PROC'ed with the given ; arguments. ; ; CLI Macro name, arg, arg, ... ; CLI will be PROC'ed to execute the given macro ; with the specified arguments. ; ; LINKED_IN_ROOT Name ; For linked-in assembler, VS/COBOL, C, PL/1, ; or FORTRAN sub-programs. ; Use only when the shared library (SL) version of ; SCREEN DEMON is used. At execution time the ; SCREEN DEMON hot key handler will search for ; the specified name in the list of hot key definitions ; that were linked into the root program. A root ; linked hot key definition may be created by ; running the MAKE_SD_HKD macro. ; ; ; 's are from the following list: ; ; SAVE_SCREEN ; If the sub-routine will not make SCREEN DEMON ; calls to save and restore the screen, then include ; this flag. ; ; REDRAW ; or REDRAW IMMEDIATE ; Set if the hot key routine is PR or CLI and it will ; display characters on the screen. SCREEN DEMON ; will not know about the displayed characters so ; the screen must be redrawn. For CLI type hot keys, ; a "Press Any Key To Continue..." message will appear ; on return from the hot key call if REDRAW is ; specified. To suppress this message, use the ; IMMEDIATE option. ; ; CANCEL ; Only for ICOBOL type hot key programs. When the ; hot key is pressed, SCREEN DEMON simulates a ; CALL "program" (not a CALL PROGRAM). If file ; statuses and variables must be in their initial ; state when the program executes, then include this ; flag. ; ; ; The optional MENU clause will place an entry for the hot key ; on the Screen Demon main menu. The description shown on the ; menu will be the text specified after the keyword MENU. ; NOTE: To add a hot key to the main menu without actually ; assigning it to a particular key, do not specify ; a key name on the HOT_KEY clause. For example: ; HOT_KEY ; LINKED SD_WP_SHELL ; MENU WordPerfect Office Shell ; ; ; The optional DIRECTORY clause allows the initial working directory ; for the hot key process to be specified. This clause effects ; only PR and CLI type hot keys. If no DIRECTORY clause is supplied ; in a hot key definition, the hot key process will start in the ; current working directory. ; ; ; The optional ACL clause allows access to the hot key to be ; restricted. Following the ACL keyword should be a list of ; usernames and/or username templates, similar to an AOS/VS ; file ACL. Like an AOS/VS file ACL, `*' matches any one ; character, and `+' matches any number of characters, including ; zero. However, unlike an AOS/VS file ACL, the FIRST character ; of an individual template may be an exclamation mark (!), which ; indicates that if a match occurs on that template, access is to ; be DENIED, rather than permitted. Also, there are no privilege ; letters following each template. Whenever a particular user ; attempts to access a hot key that has an ACL (either via the ; menu or assigned key), Screen Demon will scan the ACL looking ; for a match for the current username. If no template in the list ; matches the current username, Screen Demon will silently deny the ; user access to the hot key. If a match is found, then if the ; template started with `!', access is denied; otherwise, the ; hot key routine will be called. ; ; NOTE: If there is no ACL clause specified in a particular ; hot key definition, then all users will be able to ; access that hot key routine. ; ; For example, suppose the following ACL clause was specified ; as part of a hot key definition: ; ACL FRED !MARTHA MAR+ ; This indicates that FRED may access the hot key, and anyone ; whose username begins with the letters "MAR" except MARTHA ; can access the hot key. All other users will be denied access. ; ; As another example, the ACL clause ; ACL !ACCT+ + ; means that everyone except those whose usernames begin with ; the letters "ACCT" can access the associated hot key routine. BEGIN_HOT_KEYS ;This line (and the END_HOT_KEYS below) must exist ; even if there are no hot keys defined. ; Assign the SCREEN DEMON pop-up main menu to function key 11 (F11) HOT_KEY F11 LINKED SD_MAIN_MENU ; Redraw the Screen when the Erase Page key is pressed HOT_KEY ERASE_PAGE LINKED SD_REDRAW ;Word address of Redraw routine MENU Redraw Screen ; On CMD PRINT or CMD SHIFT PRINT, call the Print Screen program HOT_KEY CMD_PRINT, CMD_SHIFT_PRINT LINKED SDSCREENPR INT ;this is a C program, not COBOL32 MENU Print Screen ; On F14, call the Calculator HOT_KEY F14 PR SDCALCULATOR MENU Calculator ; On F12, Read Mail ; You can specify SD_READ_MAIL instead of SD_MAIL_INBOX if you ; want new messages to be displayed automatically when the hot ; key is pressed. HOT_KEY F12 LINKED SD_MAIL_INBOX MENU Read Mail ; On Shift F12, Send Mail HOT_KEY SHIFT_F12 LINKED SD_INPUT_MAIL ;Word address of Input Mail Routine MENU Send Mail ; On F13, call the Notepad HOT_KEY F13 LINKED SD_NOTEPAD ;Word address of Notepad routine MENU Notepad ; On F15, call the CLI Interface HOT_KEY F15 LINKED SD_CLI_INTERFACE ;Word address of CLI Interface routine MENU Call CLI ; On Shift F11, call the SCREEN DEMON Command routine (sets Turbo level) HOT_KEY SHIFT_F11 LINKED SD_COMMAND ;Word address of Command routine MENU Turbo On/Off ; On Shift F14, call the Calendar program HOT_KEY SHIFT_F14 PR SDCALENDAR MENU Calendar ;Add more hot key routine definitions here as required... END_HOT_KEYS ;The following section is used to translate entered key codes to ;different ones. BEGIN_TRANSLATIONS ;This line is required even if there are no ;key translations specified ;For each key that is to be translated to another key, enter a line ;of the following format: ; ; TRANSLATE , ; ; where both key codes are of the form described for ; under the HOT KEY section above. ; ;For example, the following two lines (if the semicolons were removed ;to uncomment them) will translate the up and down arrow keys to F3 and F2, ;respectively: ; TRANSLATE UP,F3 ; TRANSLATE DOWN,F2 ;Insert key translations here END_TRANSLATIONS ;This line is required even if there are no ;key translations specified ;Sometimes it may be desirable to input a particular key to an application, ; even if that key has been assigned to be a hot key or is normally ; translated to appear as another key value. The following definition ; specifies an "escape" key that, if pressed, suppresses hot key processing ; and/or translation of the next key pressed. To pass the chosen "escape" ; key to the application, press it twice. If no "escape" key is desired, ; specify a value of -1. Note that the "escape" key can never be a hot key ; or be translated. HOT_ESCAPE_KEY: CTRL_SHIFT_F15 ;The standard Screen Demon hot key routines accept as the normal ; exit key. Users may be accustomed to pressing a different key to ; exit in their application programs; for example, CEO uses F11 as ; the Cancel/Exit key. To minimize user confusion, it is possible ; to designate an alternate exit key for Screen Demon hot key routines ; that will act the same as . This alternate exit key can be set ; to the same key that the user would press to exit their application ; programs. If no such alternate exit key is desired, set the answer ; to the following question to -1; otherwise, specify the key name: SD_ALTERNATE_EXIT_KEY? -1 ;none by default ;String that will be displayed whenever an input is completed to provide ; immediate feedback to the operator that the input operation is over. ; The next flush will undo whatever this string does to the screen. ; Special screen control characters can be included in the string by ; enclosing them inside <>. Predefined control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; ; If no such feedback is desired, set the INPUT_FEEDBACK_STRING_SIZE below ; to zero. Overall performance will be somewhat slower if the feedback ; string is output after inputs, but may make the system APPEAR faster ; to an operator. INPUT_FEEDBACK_STRING: .TXT "<13>" ;perhaps a CR ;Number of characters in the above string INPUT_FEEDBACK_STRING_SIZE: 0 ;default is no feedback string ;String that will be displayed whenever the user has unread mail. ; Special screen control characters can be included in the string by ; enclosing them inside <>. Predefined control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is a bright, blinking `Mail' in the top right corner of the screen. MAIL_INDICATOR: .TXT "Mail" ;Number of characters in the above string MAIL_INDICATOR_SIZE: 5 ;Location and size of region of screen occupied by above mail indicator string MAIL_VIEW_LINE: 1 MAIL_VIEW_COLUMN: 77 MAIL_VIEW_HEIGHT: 1 MAIL_VIEW_WIDTH: 4 ;String that will be displayed whenever a terminal is being viewed remotely ; through the SD_SPY program. Special screen control characters can be ; included in the string by enclosing them inside <>. Predefined control ; character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is no indicator. SD_REMOTE_VIEW_INDICATOR: .TXT "Remote View" ;Number of characters in the above string, or zero if no Remote View ; indicator is desired SD_REMOTE_VIEW_INDICATOR_SIZE: 0 ;set this to 12 ; to enable indicator ; string defined above ;Location and size of region of screen occupied by above indicator string SD_REMOTE_VIEW_INDICATOR_LINE: 1 SD_REMOTE_VIEW_INDICATOR_COLUMN: 1 SD_REMOTE_VIEW_INDICATOR_HEIGHT: 1 SD_REMOTE_VIEW_INDICATOR_WIDTH: 11 ;String that will be displayed whenever terminal inputs are being handled ; remotely through the SD_SPY program. Special screen control characters ; can be included in the string by enclosing them inside <>. Predefined ; control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is a bright, blinking `Remote Input' in the top left corner ; of the screen. SD_REMOTE_INPUT_INDICATOR: .TXT "Remote Input" ;Number of characters in the above string SD_REMOTE_INPUT_INDICATOR_SIZE: 13 ;Location and size of region of screen occupied by above indicator string SD_REMOTE_INPUT_INDICATOR_LINE: 1 SD_REMOTE_INPUT_INDICATOR_COLUMN: 1 SD_REMOTE_INPUT_INDICATOR_HEIGHT: 1 SD_REMOTE_INPUT_INDICATOR_WIDTH: 12 ;If the CEO interface is to be used, the following two fields allow the ; location of the CEO mail status indicator to be specified. ; At runtime, the optional hot key routine SD_CEO_STATUS_MOVE (see ; the CEO interface documentation) can be used to move the status ; indicator to a different position as needed. These two fields ; are ignored if the CEO interface is not installed. CEO_MAIL_VIEW_LINE: 1 ;Normal default is first line CEO_MAIL_VIEW_COLUMN: 1 ; and first column ;If the WordPerfect Library or Office interface is to be used, the ; following field allows the letter code for the "Go To CLI" ; selection on the Shell menu to be specified. SCREEN DEMON needs ; to know this in order for the SD_CLI_INTERFACE hot key to work ; when running under WP Shell. SD_WP_SHELL_CLI_LETTER: .TXT "G" ;Amount of time in seconds that may elapse during a single input before ;the list of 'periodic calls' is executed. The input is restarted after ;those functions are called. The SCREEN DEMON mail check and CEO interface ;mail check are examples of these periodic calls. PERIODIC_INTERVAL? 60 ;once per minute ;Amount of time in seconds that may elapse during a single input before ;triggering the SCREEN DEMON screen saver. This routine will completely ;blank the screen, including the cursor, to avoid burn-in. Pressing any ;key will restore the original screen contents. Set this field to -1 ;to disable the screen saver. SCREEN_SAVER_INTERVAL? -1 ;default is no screen saver ;Amount of time in seconds that may elapse while the Screen Demon Main Menu ;is waiting for a response before automatically exiting the menu. ; ;Use a value of -1 to never terminate the Main Menu because of inactivity. MAIN_MENU_TIMEOUT_INTERVAL? -1 ;default is no timeout ;Amount of time in seconds that may elapse for a single input before ;the user is terminated (via orderly shutdown: files will be closed). ; ;Use a value of -1 to disable automatic logo @ ff so that users will ; never be terminated because of inactivity. ; ;Note that specific programs can be protected against automatic logoff ; if desired. See Special Programs List below. LOGOFF_INTERVAL? -1 ;Default is to never terminate ; inactive users ;An optional time range during the day can be specified during which ; termination due to inactivity will not occur. Before and after ; this period, however, the time value specified in LOGOFF_INTERVAL ; above will apply. By default, logoff is permitted at any time, ; assuming LOGOFF_INTERVAL above is not -1. ; ; To specify a no-logoff time range, indicate the beginning and ending ; times (24-hour clock) of the protected period as follows: ; LOGOFF_OK_BEFORE hour,minute ; LOGOFF_OK_AFTER hour,minute ; ; For example, assuming that LOGOFF_INTERVAL contained an actual value, ; such as (15*60) to indicate 15 minutes, then the following statements ; would disable automatic logoffs between 8:00 am and 5:30 pm: ; LOGOFF_OK_BEFORE 8,00 ; LOGOFF_OK_AFTER 17,30 ; After 5:30 pm, users inactive for more than 15 minutes are to be logged ; off; the same applies to users inactive before 8:00 am. ;Specify optional no-logoff time period below: LOGOFF_OK_BEFORE 0,00 ;Default is LOGOFF_OK_AFTER 0,00 ; no protected period ;An optional list of users can be specified who are to be considered ; immune from automatic logoff. This list can contain exact usernames, ; username templates, or both. ; ; The NO_LOGOFF_USERS command is used to specify the list. There may ; be up to 25 usernames per NO_LOGOFF_USERS command, and there may be ; any number of NO_LOGOFF_USERS commands, provided each begins on a ; separate line. ; ; For example, ; ; NO_LOGOFF_USERS FRED MAR+ ; NO_LOGOFF_USERS ACCT+ ; ; indicates that all users whose names begin either with the letters MAR ; or ACCT should never be terminated due to inactivity, nor should the ; particular user named FRED. All other users can be terminated if ; their terminals become inactive, provided this is not prevented by ; other considerations, such as the logoff time range specified above, ; or the NO_LOGOFF special program declaration described later. ;Specify any users who should be immune from automatic logoff termination NO_LOGOFF_USERS ;no immune users by default ;The following question specifies the default value for the Turbo ; display setting. Turbo display offers two types of optimization ; of screen output: ; (1) System Call Buffering - Screen output is held until an input ; occurs, or until an specified amount of time has elapsed, ; as set with the FLUSH_INTERVAL? question below. ; (2) Discarding Redundant Characters - A given character will not ; be sent to the terminal if the screen position where it ; is to be displayed already shows that character. ; ; The allowable values for the Turbo display setting indicate what ; level of optimization is desired: ; ; Value Optimization ; ------- --------------- ; FULL Levels 1 and 2 ; PARTIAL Level 2 only ; this is equivalent to FULL with ; FLUSH_INTERVAL? set to zero, and ; is not recommended because it requires ; far more CPU resources ; OFF no optimization ; ON same as FULL ; ;Select an answer from the above list for the following question: DEFAULT_TURBO_DISPLAY_SETTING? FULL ;When running in FULL Turbo display mode, program screen output is normally ; held until the next input occurs, at which time the terminal screen ; is updated. Programs with many displays between inputs, such as a ; report program displaying a record count as it runs, need the screen ; updated more frequently. For this purpose, Screen Demon contains an ; optional Flush Timer which will force a screen update to occur if a ; specified amount of time has elapsed since the last flush, even if ; no input has occurred. ; ; The following field specifies the maximum time in seconds between ; screen updates. ; Use a value of -1 to disable the flush timer; this is equivalent ; to Full Turbo in rev 2 Screen Demon. ; Use a value of 0 to prevent buffering of program screen output; ; this is equivalent to Partial Turbo in rev 2 Screen Demon. FLUSH_INTERVAL? 10 ;flush at least once every ten seconds ;If Turbo mode is on, screen output is held until an input occurs, or ; the FLUSH_INTERVAL expires. If the screen scrolls, it may be ; desirable to update the screen at that time, rather than waiting ; for one of the other events to trigger a flush. The following ; field specifies the maximum number of scroll ups that can be ; held before forcing a flush. Set this field to -1 to prevent ; automatic flushing on scroll operations. MAX_SCROLL_BEFORE_FLUSH: 5 ;If the screen scrolls 5 lines, ; force a flush ;Miscellaneous options, answers are either YES or NO ;When Turbo mode is on, should SCREEN DEMON actually clear the screen ;whenever the host program outputs a clear screen command? ; ; Doing so is usually more efficient, and may be preferable to the ; operators. However, if the host program tends to blank the screen ; and repaint the same text a lot, it would probably be more efficient ; and would look better if SCREEN DEMON suppressed the actual clear ; screen command. PHYSICAL_SCREEN_CLEAR? YES ;Should SCREEN DEMON automatically redraw the screen whenever the ;host program returns from a call to a nonSCREEN DEMON program? ; ; When the host program calls out to a nonSCREEN DEMON program and then ; returns, SCREEN DEMON has no way to know what the nonSCREEN DEMON ; program did to the terminal screen. In order to resynchronize the ; screen with SCREEN DEMON's internal picture, a redraw is necessary. ; By default, this happens at the next flush after returning from ; the call. However, if the called program displayed some information ; that the user needs to see, an immediate redraw will clear this ; information before it can be read. In such cases, it might be ; preferable to set the following option to NO to inhibit the automatic ; redraw, and put code into the host program to call SD_REDRAW when a ; screen redraw is appropriate. Another case where it might be better ; to do the redraw under program control is when the called program ; doesn't actually affect the screen, and so a redraw is not really ; necessary. AUTO_REDRAW_AFTER_NONSD_CALL? YES ;Should SCREEN DEMON use the Line Drawing character set for boxes and ;lines on terminals that have this capability? ; ; The SCREEN DEMON calls SD_DRAW_BOX, SD_DRAW_HLINE, and SD_DRAW_VLINE ; allow the programmer to easily draw boxes and lines on the terminal. ; Boxes and lines created using the Line Drawing character set ; generally look better than the default boxes and lines created ; by using reverse video and underline screen attributes. However, ; there are some differences in the way boxes and lines must be ; built if the Line Drawing character set is used that could cause ; some incompatibilities with existing programs. The main difference ; is that horizontal lines built with Line Draw characters actually ; take up a character position, but horizontal lines created by ; underlining characters already present do not. If this is a problem, ; set the answer for one or both of the following two questions to NO. USE_LINE_DRAW_CHARSET_FOR_BOXES? YES USE_LINE_DRAW_CHARSET_FOR_LINES? YES ;Should Screen Demon turn off the /NRM characteristic so that SENDs ;are not blocked? ; ; Some programs, such as those compiled with VS/COBOL, set the ; /NRM characteristic to protect their screens. However, blocking ; SENDs altogether is not the best solution because there are ; cases when a SEND is the only way of notifying a user of some ; event. Since Screen Demon provides a Redraw Screen capability, ; an application program's screen can easily be restored after a ; SEND message appears on the terminal. Consequently, it is not `  ; necessary for a program to set the /NRM characteristic. Answering ; this question YES tells Screen Demon to keep this characteristic ; off, even if the host program tries to turn it on. FORCE_NRM_CHARACTERISTIC_OFF? YES ;Should SCREEN DEMON trim trailing spaces and underscore characters ;from the initial contents of input fields, thus permitting ^A, ^E, ;and DELETE screenedit functions to work properly? ; ; Normally, COBOL input fields start off filled with underscore ; or space characters. This means that the "go to end of field" ; and "insert" screenedit functions will not work as expected, ; since PMGR treats the trailing spaces and/or underscores as ; real characters. Also, when DEL is used, trailing underscores ; will shift to the left, shortening the apparent length of the ; input area. Screen Demon can optionally trim these characters ; when the input begins, so that PMGR doesn't know about them. ; The characters will still be displayed before the input begins ; as always. The primary drawback is that when an input restarts, ; such as after a timeout or hot key, any trailing spaces or ; underscores will vanish, which may confuse some operators. ; ; NOTE: A bug in VS/COBOL rev 3.20 and below, and in rev 3.71, ; prevents function keys from working correctly if the ; underscores are removed, so this question MUST be answered ; NO for these revisions of VS/COBOL. The default for this ; question is NO for that reason. TRIM_SPACE_UNDERSCORE_ON_INPUT? NO ;Should SCREEN DEMON ignore console interrupts (^C^A, ^C^B, and ^C^E)? ; ; One of SCREEN DEMON's tasks catches console interrupts. By default, ; it handles the interrupts the same way that the host program would ; if SCREEN DEMON were not present. If the host program contains code ; to watch for console interrupts, SCREEN DEMON will pass the interrupt ; to the host program; otherwise, SCREEN DEMON will terminate the ; process gracefully. ; ; A YES answer to the following question will cause SCREEN DEMON ; to discard any console interrupt events. They will not be passed ; to the host program, and SCREEN DEMON will not terminate the process. ; This is an easy way to prevent operators from aborting out of ; programs that cannot defend themselves. IGNORE_CONSOLE_INTERRUPTS? NO ;How should SCREEN DEMON compensate for the ^C^x character sequence ; echoed whenever the operator presses a console interrupt? ; ; The ^C^x sequence normally echoed whenever a console interrupt ; is pressed is not visible to SCREEN DEMON. Consequently, SCREEN ; DEMON does not know where those echoed characters appeared on the ; screen. By default, SCREEN DEMON will update its image buffers ; to reflect the ^C^x characters by assuming that they are located ; immediately before the cursor position. However, if a display ; was occurring at the time, it is possible for this assumption to ; be incorrect. In order to definitely resynchronize the screen ; with SCREEN DEMON's internal picture, a redraw is necessary, but ; this can be annoying if done automatically; the Redraw hot key ; is available to force a redraw only when necessary. ; ; Select one of the following choices to answer this question: ; INTR_ERASE Immediately space over the ^C^x, assuming that ; the cursor is just past the sequence, leaving ; the cursor at its original position as if ^C^x ; had never been displayed. ; ; INTR_REDRAW Redraw the screen at the next flush to remove ; the ^C^x. This was the method used by rev 2.01.05 ; ; INTR_ECHO Update the ^C^x into the internal image buffers, ; assuming that the cursor is just past the sequence, ; leaving the cursor past the sequence. ; ; INTR_NOTHING Ignore the ^C^x sequence. ; CONSOLE_INTERRUPT_HANDLING? INTR_ECHO ;NOTE: The COBOL versions of the Print Screen hot key routine do not ; use the answers to the following two SDSCREENPRINT... questions, ; but the LINKED SDSCREENPRINT version does. ;Should the SCREEN DEMON Print Screen hot key routine ask the user ;for an output filename? ; ; Answer this question YES to allow the operator to specify a ; print destination for the screen image, with the default ; shown below as SDSCREENPRINT_OUTPUT_NAME. If this question ; is answered NO, then the operator will not be asked for an ; output filename, and the screen image will be printed to the ; default output filename as specified below. SDSCREENPRINT_ASK_OUTPUT_NAME? YES ;Default output filename for the SCREEN DEMON Print Screen hot key routine: SDSCREENPRINT_OUTPUT_NAME: .TXT "@LPT" ;Should the SCREEN DEMON Read Mail hot key routine ask the user ;for an output filename when the Print option is selected? ; ; Answer this question YES to allow the operator to specify a ; print destination for the printed message, with the default ; shown below as SD_READ_MAIL_OUTPUT_NAME. If this question ; is answered NO, then the operator will not be asked for an ; output filename, and the message will be printed to the ; default output filename as specified below. SD_READ_MAIL_ASK_OUTPUT_NAME? YES ;Default output filename for the SCREEN DEMON Read Mail hot key routine ; when the Print option is selected: SD_READ_MAIL_OUTPUT_NAME: .TXT "@LPT" ;Should SCREEN DEMON mail messages be deleted automatically after ;the operator has read them? ; ; Answer this question YES to force mail messages to be deleted ; automatically after the operator has acknowledged reading them. ; If this question is answered NO, previously read messages will ; remain in a user's inbox until deleted by the user. SD_READ_MAIL_AUTO_DELETE? NO ;Should SCREEN DEMON mail messages always be delivered immediately, ;whether or not they are marked as Urgent? ; ; Answer this question YES to force mail messages to appear ; immediately on the recipient's screen, even messages that ; are not Urgent. If this question is answered NO, only ; Urgent messages will appear immediately. Normal messages ; will simply trigger the Mail Indicator; the user must press ; the Read Mail hot key to view these messages. SD_IMMEDIATE_MAIL_DELIVERY? NO ;Declare the default sizes returned by the SD_GET_IMAGE and ; SD_GET_IMAGE_BELOW_FLOAT calls. ; ; Previous revisions of Screen Demon returned a 24 line by 80 column ; image, followed by 4 more bytes containing the cursor offset and ; global attribute settings. For rev 3.00, the internal screen images ; are 24x162, and there are a number of additional fields following the ; image. Existing programs will be expecting the smaller image style ; if they are simply relinked with rev 3.00 Screen Demon. However, if ; a program is recompiled, it may or may not want the older image format. ; If the program defines its image buffer using the SDIMAGE.DEF or ; SCREEN_DEMON.H include files, then a recompile without source code ; changes results in the program expecting the new larger image format. ; However, if the image definition is hard-coded, then the program will ; still expect the older image format even after recompilation. Thus, ; this configuration file option is provided to allow the system ; manager to decide which is the most appropriate default behavior for ; the Get Image calls. Note that a specific Get Image call can declare ; the actual size of image buffer it wants; this overrides the default ; setting defined here. ;Default number of lines in returned image buffers SD_GET_IMAGE_DEFAULT_LINES? 24 ;Default number of columns in returned image buffers ; For rev 3.00 compatibility, specify 162 ; For rev 2.01 (and before) compatibility, specify 80 ; SD_GET_IMAGE_DEFAULT_COLUMNS? 162 ;Default size in bytes of additional parameters returned ; following the image characters and attributes ; For rev 3.00 compatibility, specify 14 ; For rev 2.01 (and before) compatibility, specify 4 ; ;Default additional parameters return size in bytes SD_GET_IMAGE_DEFAULT_PARAMS? 14 ; The functional ity of the SD_RETURN_INPUT call was enhanced in ; revision 3.51. In previous revisions, this call functioned only ; in a program or subroutine invoked by pressing a hot key; the string ; of characters specified with this call was returned to the input field ; where the hot key was pressed. ; ; Beginning with revision 3.51, the specified string will be placed in the ; next encountered input field, whether or not a hot key is active. In ; addition, the string can contain multiple fields, separated by delimiters. ; At an input, the next chunk of the return input string will be loaded into ; the field as if the operator had entered it. If a delimiter follows the ; chunk, the input will be terminated as if the operator had pressed that ; key. This process is repeated at subsequent inputs until the contents of ; the return input string have been exhausted. ; ; Since this new functionality is potentially incompatible with that of ; older revisions, a configuration option is provided to allow the desired ; mode of operation to be specified. The new method will be incorrect in ; the situation where a hot key program calls SD_RETURN_INPUT, but then ; does an input before exiting. With the old method, this input would be ; unaffected by the SD_RETURN_INPUT call. With the new method, the returned ; characters would appear at that input, rather than the input field where ; the hot key was pressed. If you have programs that exhibit this behavior, ; you will need to modify them or set the following configuration option to ; "hot key only" mode. Otherwise, the new method should be satifactory. ; ; Choose the answer to the following question from this list of options: ; RI_HOT_ONLY SD_RETURN_INPUT valid only in hot key ; routines; the returned string is loaded ; into the field where the hot key was pressed. ; (Pre-revision 3.51 functionality) ; ; RI_ANY_INPUT SD_RETURN_INPUT works at any time; the ; returned string is loaded into the next ; encountered input field(s), and multiple ; input fields can be returned. ; (revision 3.51 functionality) ; ; Should the SD_RETURN_INPUT call function only to return input information ; from a hot key call to the input field where the hot key was pressed, or ; should return strings declared with this call be available at the next ; encountered input field(s)? SD_RETURN_INPUT_MODE? RI_ANY_INPUT ;default is new method ;If multiple character sets are to be used by programs running under ; SCREEN DEMON, a character set palette must be specified that ; lists the particular character sets to be used. SCREEN DEMON ; supports up to 8 simultaneously displayed character sets. ; Note that only some DG terminals support multiple character sets. ; ; Specify the character sets that will be invoked by listing their ; two-character codes, which can be found in the terminal's programming ; manual. The first code in the list should be the standard primary ; character set to be used (the code 00 is suggested, which is the set ; of the keyboard attached to the terminal). The order of the remaining ; codes is unimportant. If less than eight codes are listed, the default ; settings will be used for the unspecified palette slots. ; ; For example, (this is also the default palette) ; ; CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ; ; specifies that the following character sets are available: ; '00' char set #0 (primary) is Keyboard set ; '10' char set #1 is Word Processing set ; '11' char set #2 is Line Drawing set ; '0>' char set #3 is DG International set ; '01' char set #4 is U.S. set ; '02' char set #5 is United Kingdom set ; '13' char set #6 is DG Special Graphics set ; '20' char set #7 is DLL set 0 ;Indicate your desired character set palette here: CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ;Which of the sets listed in the palette above should be the default ; primary set? DEFAULT_PRIMARY_CHAR_SET? 00 ;Which of the sets listed in the palette above should be the default ; alternate set? DEFAULT_ALTERNATE_CHAR_SET? 10 ;For terminals that support selectable 7/8 bit mode, what should be ; the default character length? ; ; Most Data General terminals that support multiple character sets ; also support either 7 or 8 bit mode. When in 7-bit mode, the high ; bit is a parity bit, so the terminal only looks at the lower 7 bits ; when determining what character to display, and the character is ; always selected from the currently active character set. When in ; 8-bit mode, all bits are significant. If the high bit for a received ; character is set, the terminal will display the character from the ; current alternate character set even if the primary set is active ; at the time. ; ; This question allows the default setting for this parameter to be ; specified. Screen Demon will force the terminal into this state ; on start-up. ; ; This question should be answered with a value of either 7 or 8. DEFAULT_7_OR_8_BIT_MODE? 7 ;For terminals that support selectable keyboard language, what should be ; the default setting? ; ; When the terminal is operating in 7-bit mode (see above), this ; parameter is ignored, and the keyboard language matches the ; keyboard hardware. When in 8-bit mode, the keyboard language ; can also be set to be the US ASCII character set for 7-bit ; characters, and the DG International character set for 8-bit ; characters. This may be necessary if the SPCL key is to be ; used to generate particular 8-bit characters. ; ; Select one of the following choices to answer this question: ; KEYBD_LANG_HARDWARE Matches the keyboard hardware ; KEYBD_LANG_INTERNATIONAL US ASCII in K0, DG International in K1 DEFAULT_KEYBOARD_LANGUAGE? KEYBD_LANG_HARDWARE ;For terminals that support variable cursor types, what should be ; the default cursor type? ; ; The more advanced Data General terminals support different cursor ; types. On newer terminals, the default cursor type can be adjusted ; in the set-up screens. There is also a local cursor type key on ; the keyboard. Screen Demon cannot determine the current cursor type ; of the terminal, so it must force the cursor to a particular type ; when a Redraw occurs. The desired default cursor type can be ; indicated here. ; ; Select one of the following choices to answer this question: ; CURSOR_INVISIBLE No cursor ; ; CURSOR_BLINK_UNDERSCORE Cursor is a blinking underscore ; ; CURSOR_BLOCK Cursor is a reverse video block ; ; CURSOR_BLINK_BLOCK Cursor is a blinking reverse ; video block ; ; CURSOR_UNDERSCORE Cursor is a nonblinking underscore ; (not supported on older terminals) ; DEFAULT_CURSOR_TYPE? CURSOR_BLOCK ;For terminals that support adjustable scroll rates, what should be ; the default scroll rate? ; ; The more advanced Data General terminals support different scroll ; rates. On newer terminals, the default scroll rate can be adjusted ; in the set-up screens. There is also a local scroll rate key on ; the keyboard. Screen Demon cannot determine the current scroll rate ; of the terminal, so it must force the scroll rate to a particular ; setting when a Redraw occurs. The desired default scroll rate can be ; indicated here. ; ; Select one of the following choices to answer this question: ; SCROLL_JUMP As fast as new lines are received ; ; SCROLL_SMOOTH_SLOW Smooth scroll, 5 lines per second ; ; SCROLL_SMOOTH_FAST Smooth scroll, 10 lines per second ; DEFAULT_SCROLL_RATE? SCROLL_JUMP ;Initial command string for SD_CLI_INTERFACE hot key routine: ; (can be changed at runtime using the SD_SET_CLI_INIT_CMD call) SD_DEFAULT_CLI_INIT_CMD: .TXT "PREFIX,SCREEN,DEMON,CLI[!ASC 251]" ;Pathname of the CLI program to be called for CLI interface. ; If CLI32 is available, you may wish to change the pathname ; below to call that instead. Alternatively, you may want ; to call SD_CLI, if you have created a Screen Demon possessed ; version of CLI32. SD_CLI_PATHNAME: .TXT ":CLI" ;Screen Demon can maintain a list of the most recent ly entered ; input strings. This is similar to the HISTORY feature in CLI32, ; but Screen Demon's input history works at all input fields in ; any program. A separate input history is kept for each process. ; ; The input history is accessed via two hot key routines, which ; can be assigned to any two different keys on the keyboard. ; The hot key routine SD_GET_PREV_FROM_INPUT_HISTORY moves backward ; in the history list, displaying the input strings in the current ; input field each time the hot key is pressed. The hot key routine ; SD_GET_NEXT_FROM_INPUT_HISTORY works the same way, except that it ; moves forward through the history list. Both routines wrap around ; to the other end of the list when necessary. ; ; To maintain the input history, a buffer must be allocated where ; the input strings can be stored. Obviously, a larger buffer means ; more available input history. Unlike CLI32 HISTORY, where the ; history size is specified in lines, for Screen Demon's input history ; buffer, the size is specified in characters. If the input history ; feature is not desired, set the buffer size to zero. INPUT_HISTORY_BUFFER_SIZE? 0 ;default is no history ;Screen Demon can maintain a copy of text that has recently been scrolled ; off the top of the screen, or cleared because of a form feed command. ; These lines are kept in a "scrollback" buffer. When the buffer becomes ; full, the oldest lines are discarded to make room for new additions. ; ; The scrollback buffer can be examined via the hot key routine ; SD_SHOW_SCROLLBACK_BUFFER, which can be assigned to any key on ; the keyboard. While viewing the scrollback buffer, press UP ARROW ; to move upward and see earlier lines, or press DOWN ARROW to move ; downward and see text that scrolled off more recently. ; ; The scrollback buffer will be allocated at runtime. The size ; of this buffer is declared in characters. Screen Demon will keep ; as many complete scrollback lines in this buffer as will fit; ; the actual number of lines stored will depend on the average line ; length. If the scrollback feature is not desired, set the buffer ; size to zero. SCROLLBACK_BUFFER_SIZE? 0 ;default is no scrollback buf ;First part of pathname to user notepad files. A complete pathname to a ;user's notepad file is formed by taking the prefix string specified here ;(usually a directory pathname), appending the user's name, and then the ;string given below under PAD_PATH_SUFFIX. PAD_PATH_PREFIX: .TXT ":UDD:" ;Name extension of notepad file ready to be appended to Prefix/Username ;combination as described above. PAD_PATH_SUFFIX: .TXT ":NOTEPAD" ;Maximum size, in bytes, of a console logging file. MAX_CONLOG_SIZE? 65536 ;If Screen Demon should maintain a clock on the screen to display ; the current date, time, etc., describe the position, size, ; and format of this clock below. If no clock format string ; is specified, Screen Demon will not link the clock routine ; into your programs. ; ; ;Format string definitions: ; ; SD_FLOAT_CLOCK_FORMAT: ; .TXT "string" ; ; The text in the given string is displayed exactly except for ; constructs beginning with a percent sign (%). The character ; or characters following the percent sign indicate what parameter ; is to be displayed in place of the construct. In the list below, ; the examples of what would be displayed are based on the example ; point in history of 18-DEC-90 at 3:05 pm ; ; %% display a single percent sign ; % display a space. Use this in order to ; specify sequences of more than one SPACE, ; because " " looks like only one SPACE ; to the config file builder, but "% % % " ; will be seen as three consecutive SPACE ; characters. ; %cn display the upper two digits of complete year ; (e.g., 19) ; %yr display the lower two digits of complete year ; (e.g., 90) ; %mo display the month number within the year (e.g., 12) ; %nm display the full name of the month (e.g., December) ; %am display the abbreviated month name (e.g., Dec) ; %da display the day number within the month (e.g., 18) ; %nd display the full name of the day (e.g., Tuesday) ; %ad display the abbreviated day name (e.g., Tue) ; %hr display the hour in 12-hour format (e.g., 3) ; %mh display the hour in 24-hour format (e.g., 15) ; %mi display the minutes within the hour (e.g., 5) ; %ap display appropriate am/pm indicator (e.g., pm) ; ; ; For names, abbreviations, and the am/pm indicator, the case of ; the first character of the format specifier indicates the case ; of the first character of the displayed string. The case of the ; second character of the format specifier indicates the case of ; the remaining characters of the displayed string. ; e.g. %nm --> december ; %Nm --> December ; %NM --> DECEMBER ; ; For format specifiers that result in numeric displays, the case ; of the specifier is ignored. However, for these specifiers, ; a `0' character can be placed between the `%' character and the ; two-character code; this indicates that a leading zero should be ; included if necessary to pad the number out to two digits. ; e.g. %hr:%mi %ap --> 3:5 pm ; %hr:%0mi %ap --> 3:05 pm ; %0mh%0mi --> 1505 ; ; ; Note that screen control characters can be included in the ; format string if desired. See MAIL_INDICATOR above for ; information about these characters. ; ; As a more complex example, the format string ; "% It is now %hr:%0mi %ap on %Nd % %Nm %da, %cn%yr" ; would display the following underlined clock output: ; It is now 3:05 pm on Tuesday December 18, 1990 ; which would be updated at each input, and periodically ; during an input based on the time value indicated for ; the PERIODIC_INTERVAL? question above. ; ; ;Describe your desired clock format below. ; Leave this question blank if you do not want Screen Demon ; to display a clock. Otherwise, specify a format string ; of the form ; .TXT "string" ; following the label below: SD_FLOAT_CLOCK_FORMAT: ;default is no clock ;Specify the position and size of the clock on the screen. Note that ; the answers to the next four questions are ignored if the answer ; to the SD_FLOAT_CLOCK_FORMAT: question above is blank. The values ; shown here would match a Clock Format of "%mh:%0mi" SD_FLOAT_CLOCK_LINE: 1 SD_FLOAT_CLOCK_COLUMN: 76 SD_FLOAT_CLOCK_HEIGHT: 1 ;height in lines SD_FLOAT_CLOCK_WIDTH: 5 ;width in columns ;The names used by Screen Demon for months and weekdays are listed below. ; These lists can be modified to support languages other than English. ; Note that each of the two lists must appear on a single line, all ; names must be specified in uppercase, and there must be a vertical ; bar character (|) following each name in each of the lists. SD_MONTH_NAMES: .TXT "JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER|" SD_WEEKDAY_NAMES: .TXT "SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|" ;Under either the Interactive COBOL or Shared Library versions ; of SCREEN DEMON, all user programs will access the same copy ; of SCREEN DEMON, causing all programs to be treated alike. ; Since there will probably be some programs that should not ; be run with full Turbo Display, for example, this ; configuration file allows "special" programs to be declared. ; In this way, programs with special requirements will be ; automatically recognized and handled appropriately by SCREEN ; DEMON when they execute; all other programs will run normally. ; ; One of the special requirements that may be declared is Turbo ; Display level. While the majority of user programs will perform ; best with Full Turbo, there may be a few situations where ; No Turbo might need to be selected. For compatibility with ; Screen Demon rev 2.01, Partial Turbo is still available, but ; is strongly discouraged because of the performance penalty. ; ; Also, if the automatic logoff feature is enabled (see ; LOGOFF_INTERVAL above), there may be critical pro grams that ; shouldn't be terminated, no matter how long an operator lets ; them remain idle. These programs can be declared in the ; Special Programs list below to protect them from the automatic ; logoff handler. ; ; In rare cases, it may be appropriate to have SCREEN DEMON turn ; itself off while a particular program runs. This can be ; accomplished by declaring these programs as BYPASS in the ; Special Programs list. ; ; There may be some programs where hot keys are not desirable, ; such as a logon program. Since hot keys could allow access ; to application programs before a user had entered a name and ; password, it might be wise to disable hot keys while the ; logon program is running. This can be accomplished by declaring ; such programs as NO_HOT_KEYS in the Special Programs list. ; ; By listing a program in the Special Programs list with the LOG ; option, console event logging will automatically activate whenever ; that program is running. This eliminates the need to use SPY to ; watch for someone to run the program, and then manually start ; Logging on that console. ; ; ; Entries in the Special Programs list are lines of the form: ; Keyword programname1,programname2,...,programnameN ; ; The possible Keywords are ; PARTIAL_TURBO ; NO_TURBO ; NO_LOGOFF ; BYPASS ; LOG ; NO_HOT_KEYS ; ; There may be any number of entries in the list. A program ; can appear in more than one entry if it has more than one ; special attribute. The only restrictions are that each line ; must begin with one of the above keywords, and that the program ; names must be simple filenames without the .PR or .PD extension ; (pathnames or pathname fragments are not allowed). ; ; For example, ; BEGIN_SPECIAL_PROGRAMS ; PARTIAL_TURBO CSMNUPRT,CSOPRPRT ; NO_TURBO CSDBFM4 ; PARTIAL_TURBO CSLOGUPD ; NO_LOGOFF CSLOGUPD, CSDBFM4 ; NO_HOT_KEYS CSLOGON ; END_SPECIAL_PROGRAMS ; declares that the programs called CSMNUPRT, CSOPRPRT, and ; CSLOGUPD are to be run in Partial Turbo, while the program ; called CSDBFM4 must be run with Turbo Display completely off. ; All other programs run at the default Turbo setting, probably ; Full. In addition, the programs called CSLOGUPD and CSDBFM4 ; are immune to automatic logoff, and while the program CSLOGON ; is running, hot keys are disabled. BEGIN_SPECIAL_PROGRAMS ;This line (and the END_SPECIAL_PROGRAMS below) must ; exist even if there are no special programs defined. ;Put special program declarations here END_SPECIAL_PROGRAMS ;Titles used for the various Screen Demon pop-up functions. Note that ; control characters cannot be included in these title strings. ;Main menu - SD_MAIN_MENU: SD_MAIN_MENU_TITLE: .TXT " SCREEN DEMON Menu " ;Note: The <60> and <62> characters in the string below are `<' and `>', ; respectively. They must be expressed in numeric form because these ; are special characters for the .TXT assembler pseudo-op. SD_MAIN_MENU_FOOTER: .TXT " <60>NL<62> to select" ;Notepad - SD_NOTEPAD: SD_NOTEPAD_TITLE: .TXT " SCREEN DEMON Notepad " ;Print Screen - SDSCREENPRINT: SDSCREENPRINT_TITLE: .TXT " SCREEN DEMON Screen Print " ;Calculator - SDCALCULATOR ; There are two title lines for the calculator, each of which ; may be up to 16 characters long. SDCALCULATOR_TITLE_ONE: .TXT "SCREEN DEMON" SDCALCULATOR_TITLE_TWO: .TXT " Calculator" ;Also store these titles in PutValue space so that COBOL programs ; can get to them: PUT_VALUE SDCALCULATOR_TITLE_ONE PUT_VALUE SDCALCULATOR_TITLE_TWO ;Calendar - SDCALENDAR: SDCALENDAR_TITLE: .TXT " SCREEN DEMON Calendar " ;Also store this title in PutValue space so that COBOL programs ; can get to it: PUT_VALUE SDCALENDAR_TITLE ;Read Mail - SD_READ_MAIL: SD_READ_MAIL_TITLE: .TXT " SCREEN DEMON Read Mail " ;Input (Send) Mail - SD_INPUT_MAIL: SD_INPUT_MAIL_TITLE: .TXT " SCREEN DEMON Send Mail " ;Turbo Control - SD_COMMAND: SD_COMMAND_TITLE: .TXT " SCREEN DEMON Turbo Control " ;Request a chunk of unshared memory of a specified size in pages (2 KB) ; to be reserved for initial Screen Demon memory allocation operations. ; Screen Demon will use memory from this chunk until it is exhausted, ; and only then will it resort to a temporary shared memory file. The ; default size of 24 is sufficient for program start-up needs and the ; initial window, but not for additional pop-up windows. Note that ; excessively large values for this parameter may require that a ; larger KTOP or MTOP be declared at LINK time. This parameter can ; be set to zero to save space in the .PR file, at the expense of ; increased program start-up time. ; ; NOTE: This parameter should be set to zero for ICOBOL revision 1.60 ; and below; unpredictable errors may occur otherwise. ;Default SD_MEM initial chunk size in pages: SD_MEM_SIZE 24 ;The following section applies primarily to CEO environments, but may ; be applicable to other shared console / multiple program situations. ; ; If some of the CEO programs, such as CEO_CP, have been possessed ; with Screen Demon, but others, such as CEO_WP, have not, then special ; handling is required to keep the terminal screen up-to-date. ; In this situation, the integrated programs transfer control of the ; console between each other by means of IPC messages. Screen Demon ; will need to monitor these messages, since the console parameters ; (characteristics, etc.) may need to be reset and the screen redrawn ; when an IPC message is received from a non-Screen Demon process to ; return control of the console to a Screen Demon program. However, ; there is other IPC message traffic to/from the CEO agents, such as ; CEO_POA, that can be safely ignored, since these processes will not ; affect the console. ; ; When running in a shared console environment, such as CEO, what ; special handling, if any, needs to occur for IPC messages? ; ; Possible answers to this question are ; SHCON_IPC_IGNORE No special handling ; SHCON_IPC_FLUSH Flush to make sure screen is up-to-date ; before processing the message ; SHCON_IPC_RESET Flush before processing the message, and ; reset console environment (characteristics, ; etc.) after a message is received ; SHCON_IPC_REDRAW Same as RESET plus redraw the screen after ; a message is received ; ; The SHCON_IPC_REDRAW answer is suggested in the CEO environment as ; described above. The IGNORE response should be used if your application ; runs in a shared console environment, and uses IPC messages, but not for ; the purpose of transferring control of the console between processes. ; Screen Demon rev 3.00.03 always used the RESET option. ; ; Answer the following question with one of the above responses: SHARED_CONSOLE_IPC_HANDLING? SHCON_IPC_RESET ;Default is same as rev 3.00.03 ;If IPC messages are not ignored in this situation (i.e., the above question ; was not answered with SHCON_IPC_IGNORE), then you may wish to specify the ; names of server processes that will not affect the console. IPC traffic ; to/from these processes can be ignored. ; ; Determine the full process names for each of the processes that are to ; be ignored. A full process name consists of a username, followed by a ; colon character, followed by the simple process name. The CLI WHO command ; shows this information. For example: ; ) WHO 15 ; PID: 15 CEO_MGR CEO_POA :UTIL:CEO_DIR:CEO_POA.PR ; ^ ^ ; | | ; username simple process name ; ; Declare that IPC messages to/from a process are to be ignored using ; the SHCON_IPC_IGNORE_IF_FROM command. For example, the following ; is suggested if your CEO environment is as described previously: ; ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_POA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_FSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_CSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_QMA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_NSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_LOG ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_OP ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_GPN_1 ; ; There may be any number of these commands, but only one process na me can ; be specified per command. You do not need to specify any of these commands ; if this situation does not apply to your system. ; ; Specify any processes whose IPC messages are to be ignored when running ; in a shared console environment: ;none by default ; Custom user configuration data can also be stored in this file. There ; is no limit to the amount or type of information that can be included. ; User programs can retrieve this data using the SD_GET_VALUE call. ; ; The general format of user-defined configuration options is as follows: ; ; label: ; .TXT "value" ; ; PUT_VALUE label ; ; ; where 'label' is an identifier for the data item, and 'value' is the ; actual data itself. ; ; 'label' must consist only of letters, digits, and the special characters ; underscore (_), question mark (?), period (.), and dollar sign ($). ; The first character cannot be a digit. The exact name of 'label' must ; be known to a user program in order to retrieve the 'value' using ; SD_GET_VALUE. ; ; 'value' can be any string of ASCII characters. Control characters can ; be included by enclosing their decimal value within <>. ; ; For examples, see the declarations of the SDCALCULATOR and SDCALENDAR ; title strings elsewhere in this configuration file. ; ; Include any custom configuration options here: ;The following must be the last statement in this file (except for the .END) END_CONFIGURATION .END .W$Rb$n$` ;SDATTRIBUTES.WS *** SDATTRIBUTES.WS Screen Demon rev 3.52.01 *** Copyright (C) 1993, Threshold, Inc., All Rights Reserved *** -------------------------------------------------------- ** Structure of Screen Demon screen attribute settings. ** The current attributes of a window image are contained ** in the SD-IMAGE-CURRENT-ATTRIBUTES field (see SDIMAGE.DEF), ** which is a full 16 bit value. ** Attributes of individual characters in the image also follow ** the same structure, but the first 8 bits are not used, since ** the character attribute fields are only one byte in size. ** This copy file is intended to be used to examine the bits in ** the attribute setttings via the SD_BITS_TO_DIGITS call. 01 SD-ATTRIBUTE-BITS-GROUP. *** Attribute bits found only in Window Current Attributes, not for * each character in the image. 05 SD-ATTRIB-PAGE-MODE-BIT PIC X. 05 SD-ATTRIB-ALT-CHAR-SETS-BIT PIC X. 05 SD-ATTRIB-ALT-MARGINS-BIT PIC X. 05 SD-ATTRIB-NO-HORIZ-SCROLL-BIT PIC X. 05 SD-ATTRIB-PROTECT-ENABLED-BIT PIC X. 05 SD-ATTRIB-BLINK-DISABLED-BIT PIC X. 05 SD-ATTRIB-EIGHT-BIT-MODE-BIT PIC X. 05 SD-ATTRIB-RESERVED-BITS PIC X(1). *** Attributes for each character in image *** 05 SD-ATTRIB-PROTECT-BIT PIC X. 05 SD-ATTRIB-CHAR-SET-NUM-BITS PIC X(3). 88 SD-ATTRIB-CHAR-SET-NUM-IS-0 VALUE IS "000". 88 SD-ATTRIB-CHAR-SET-NUM-IS-1 VALUE IS "001". 88 SD-ATTRIB-CHAR-SET-NUM-IS-2 VALUE IS "010". 88 SD-ATTRIB-CHAR-SET-NUM-IS-3 VALUE IS "011". 88 SD-ATTRIB-CHAR-SET-NUM-IS-4 VALUE IS "100". 88 SD-ATTRIB-CHAR-SET-NUM-IS-5 VALUE IS "101". 88 SD-ATTRIB-CHAR-SET-NUM-IS-6 VALUE IS "110". 88 SD-ATTRIB-CHAR-SET-NUM-IS-7 VALUE IS "111". 05 SD-ATTRIB-REVERSE-VIDEO-BIT PIC X. 05 SD-ATTRIB-UNDERLINE-BIT PIC X. 05 SD-ATTRIB-BLINK-BIT PIC X. 05 SD-ATTRIB-DIM-BIT PIC X. *** These first 8 bits are found only in the global window attributes * field SD-IMAGE-CURRENT-ATTRIBUTES (see SDIMAGE.DEF): * SD-ATTRIB-PAGE-MODE-BIT Page mode (no scrolling) is on * SD-ATTRIB-ALT-CHAR-SETS-BIT The alternate character set indicated by * by SD-IMAGE-ALT-CHAR-SET-NUM (see SDIMAGE.DEF) * is active, rather than the primary char set * SD-ATTRIB-ALT-MARGINS-BIT Alternate margins are in effect. The old * primary margins can be found in the window * descriptor fields SD-WINDOW-OLD-LEFT-MARGIN * and SD-WINDOW-OLD-RIGHT-MARGIN (see SDWINDOW.DEF) * SD-ATTRIB-NO-HORIZ-SCROLL-BIT Horizontal scrolling is disabled * SD-ATTRIB-PROTECT-ENABLED-BIT Protect mode is enabled. All chars * marked as protected (see PROTECT-BIT) * will be unaffected by some terminal * commands. * SD-ATTRIB-BLINK-DISABLED-BIT Blink mode is DISabled. No characters * will blink even if they have the * blink attribute (BLINK-BIT). * SD-ATTRIB-EIGHT-BIT-MODE-BIT Window is in eight-bit mode. High bit * of characters placed into image is * significant. * SD-ATTRIB-RESERVED-BITS Undefined *** The last group of bits also applies to the attribute bytes * of individual characters in an image buffer: * SD-ATTRIB-PROTECT-BIT Character is protected. If Protect Mode is * enabled (see PROTECT-ENABLED-BIT above), * character cannot be erased by an Erase To * End of Screen terminal command. * SD-ATTRIB-CHAR-SET-NUM-BITS A 3-bit field, representing a value of 0 - 7, * indicating which slot in the character set * palette (defined in the configuration file) * contains the character set code * SD-ATTRIB-REVERSE-VIDEO-BIT Reverse video * SD-ATTRIB-UNDERLINE-BIT Underline * SD-ATTRIB-BLINK-BIT Blinking * SD-ATTRIB-DIM-BIT Dim *** End of SDATTRIBUTES.WS *** .W$Rb$n$` SDTERMCAPS.WS *** SDTERMCAPS.WS Screen Demon rev 3.52.01 *** Copyright (C) 1993, Threshold, Inc., All Rights Reserved *** -------------------------------------------------------- ** Structure of the Screen Demon terminal capabilities word, which ** can be obtained using the SD_GET_TERMCAPS call. ** This copy file is intended to be used to examine the bits ** in the capabilities word via the SD_BITS_TO_DIGITS call. 01 SD-TERMCAPS-BITS-GROUP. 05 SD-TERMCAPS-RESERVED-BITS PIC X(6). 05 SD-TERMCAPS-INS-DEL-LINE-BIT PIC X. 05 SD-TERMCAPS-INS-DEL-CHAR-BIT PIC X. 05 SD-TERMCAPS-MARGINS-BIT PIC X. 05 SD-TERMCAPS-HORIZ-SCROLL-BIT PIC X. 05 SD-TERMCAPS-VERT-SCROLL-BIT PIC X. 05 SD-TERMCAPS-HARDWARE-WIND-BIT PIC X. 05 SD-TERMCAPS-COMPRESS-BIT PIC X. 05 SD-TERMCAPS-ALT-CHAR-SETS-BIT PIC X. 05 SD-TERMCAPS-REVERSE-VIDEO-BIT PIC X. 05 SD-TERMCAPS-UNDERLINE-BIT PIC X. ******************************************************************** * SD-TERMCAPS-RESERVED-BITS Undefined * SD-TERMCAPS-INS-DEL-LINE-BIT Terminal can insert a blank line at * the cursor, shifting the remainder * of the screen down. Also can delete * the line containing the cursor by * shifting the remainder of the screen up. * SD-TERMCAPS-INS-DEL-CHAR-BIT Terminal can insert a blank space at the * cursor, shifting the remainder of the line * to the right. Also can delete the character * at the cursor by shifting the remainder * of the line to the left. * SD-TERMCAPS-MARGINS-BIT Terminal can set left and right margins, and * internally stores 162 characters per line. * SD-TERMCAPS-HORIZ-SCROLL-BIT Terminal can shift the contents of the screen * to the left or right. * SD-TERMCAPS-VERT-SCROLL-BIT Terminal can shift the contents of the screen * upward or downward. Not the same thing as * the scroll caused by a on last line. * SD-TERMCAPS-HARDWARE-WIND-BIT Terminal can divide the screen into * multiple independently scrollable regions. * SD-TERMCAPS-COMPRESS-BIT Terminal can alternate between showing * 81 columns or 135 columns at a time. * SD-TERMCAPS-ALT-CHAR-SETS-BIT Terminal supports alternate character * sets, such as Line Drawing character set. * SD-TERMCAPS-REVERSE-VIDEO-BIT Terminal can display characters * in reverse video. * SD-TERMCAPS-UNDERLINE-BIT Terminal can display underlined characters. *** End of SDTERMCAPS.WS *** .@$`%ym$b *SDCALCULATOR.DD 00000000000000000000000000SDCALCULATOR  -32  P Calculator Help| F000000000000000000N 00 RE+-x/=* 1240+0000000000000000000000000000000{000000000000000{000000000000000{ 000000000000000{00 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  16SDCALCULATOR_TITLE_ONE SDCALCULATOR_TITLE_TWO SD_ALT_EXIT_KEY DESCEDTABEDDELEDCR ED EDClrEDMemED ^ ED x ED< ED+|-ED >EDFrMED v ED / ED1ED2ED3ED4ED5ED6ED7ED8ED9ED0 ED- ED= ED+ ED.ED EM Press DSPACEE for HelpDSPACEEClear FunctionsEntering DataMemory FunctionsDshiftEMoving the CalculatorMath FunctionsLeaving the Calculator!!!%Exit!%Tape Clear!%Delete Digit!%Return Result48<48<48<48<ACEGACEGACEGAEG4!!1! F! [! v! < 4 8 < 4 8 < 4 +8 9< GAUCaEmGyACEGACEGA EG4444 (F3E3 13E3 M44444444 4 4 4 H 4 The Calculator is controlled from the numeric and cursor keypads. Thesematch the key layout shown on the Calculator, where each key is labeledwith its function. Other keys and their functions are listed to the left.To perform a function, press the indicated key or type the first letter ofthe function name. The Calculator operates like an ordinary hand-heldcalculator, which is somewhat different from a desk-type calculator. See the additional help for the math functions (+ - x / =) for details. For additional information about a particular key, press that key now. Otherwise, press  to return to the Calculator...    When pressed once, this key clears the calculatordisplay. If pressed a second time, the automaticconstant is also cleared, which prepares the calculator for a new calculation.  Pressing this key deletes the last entered digit or decimal point from the display. This key clears all results from the tape display.None of these functions affect Memory. Memories can becan be cleared by storing zero into them.Press any key to return to Main Help screen... +  C   r  Use the numeric keys to enter the digits of  numbers to be used in calculations. Excess digits  will be ignored. If the period (.) key is pressed,   subsequently entered digits will be placed to the right of the decimal point in the display.  Pressing this key causes the sign of the number currently in the display to be changed. Positivenumbers will become negative, and negative numberswill become positive; zero is always positive.Press any key to return to Main Help screen...     H T`    There are ten separate memories, numbered 0 through 9. Copies the number currently in the display into memory number 0. An ( will appear in the display whenever this memory contains a nonzero value.  Copies the number currently in memory number 0 into the display. Same as unshifted versions, except after pressing either of these keys, press a digit from 0 through 9to specify which of the ten memories to access.Press any key to return to Main Help screen... 5 &  3 C   The arrow keys in the cursor keypad can be used to move calculator to a different location on the screen. This may be necessary if a value needed for a calculation was covered up by the calculator when it appeared. The unshifted arrow keys move the entire calculator one position in the direction of the arrow. The shifted arrow keys move the entire calculator several positions in the direction of the arrow. You may move the calculator partially or even completely off the screen if desired.Press any key to return to Main Help screen..."',16 All math functions take two numbers and produce a result. The first number is entered, then the proper math key is pressed, then the second number is entered. The second number isn't known to be complete until another math key is pressed. Then the calculator has the two numbers it needs to evaluate the first math function, and it places the result into the display. The second math function will use this result as its first number, but must wait for its second number to be entered, which means waiting until yet another math key is pressed, and so on. This cycle continues until the special math key 9 is pressed, which completes the pending math function, but doesn't actually perform a function of its own.Press any key to return to Main Help screen...",'9, F1 T6b6 When you exit from the calculator, the calculator will be removed from the screen, and you will be returned to the input field where you originally pressed the Hot Key that accessed the calculator. There are two ways to do this:  Normal exit. Restarts the interrupted input with the contents of the input field unchanged.Return result. Restarts the interrupted input,but the number currently shown in the calculatordisplay is placed into the input field at theposition of the cursor at the time that thecalculator Hot Key was originally pressed.Press any key to return to Main Help screen...   uMMMMMMMMMMMM#.####YRE=+-x/123456789101112SD_SET_SECONDARY_PROGRAM_NAMESD_TURBO_FULLSD_GET_VALUE0SCREEN DEMON Calculator SD_NEW_WINDOWSD_DRAW_BOXSD_GET_WINDOW_VIEWSD_PUT_WINDOW_VIEWSD_NEW_WINDOW_VIEWSD_REMOVE_WINDOWSD_TURBO_RESETN.*X,erDdCcTt|MmFfSD_MOVE_WINDOW_UPSD_MOVE_WINDOW_DOWNSD_MOVE_WINDOW_RIGHTSD_MOV *E_WINDOW_LEFTHhSD_RETURN_INPUTSD_READ_CHAR .J $kt%IQ$k}\ SD_PLAY.PR 4/_p*YpR80&0&0&00p02000>02000> @pnpx&pkLpkpkL,/))x)4)5)6Y)@@`y?00000_SD_PLAY.TMPpx<  @-(pB@4P kcc Fatal Screen Demon error at PC = 00000000000 0 =HNNNYNWWMSG.00000@jD VYYNYNWWY Select recipient: select, exitVYYNYNWW`HNNYYNWW pGppppp pp    1pi DDDDDDDDDDDDDDDDDDDDDDDSDDSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSDDSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSDSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHNNYYNWW  HNNYYNWW ppqasIApDLU|  _______________ . . . |_______________| |_______________| |_______________| | escape | _______________ _______________ _______________ | | . . . | c1 | | ^ | | c2 | | EXIT | | | | | | | | | | . . . | FAST | | STATUS LINE | | FAST | |_______________| | BACKWARD | | UP | | FORWARD | . . . . . . . . . |_______________| |_______________| |_______________| _______________ _______________ _______________ . . . . . . . . . | <-- | | home | | --> | | BACKWARD | | PAUSE | | FORWARD | SCREEN DEMON . . . | - - - - - - - | | - - - - - - - | | - - - - - - - | Console Event | JUMP BACKWARD | | AUTO-PAUSE | | JUMP FORWARD | Playback Control . . . |_________shift_| |_________shift_| |_________shift_| _______________ _______________ _______________ _______________ . . . | c3 | | | | | c4 | | space | | | | V | | | | | . . . | SLOW | | STATUS LINE | | SLOW | | PAUSE | | BACKWARD | | DOWN | | FORWARD | | | . . . |_______________| |_______________| |_______________| |_______________| auto- last pause console username date time event delim speed direction at status ======================[status line format shown above]==========================  2  pXpp8pApppѼp8 MailMRemote View Remote Input  G@LPT@LPTPREFIX,SCREEN,DEMON,CLI[!ASC 251]:CLI:UDD::NOTEPADLJANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER|SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|SDCALCULATOR_TITLE_ONEp*SDCALCULATOR_TITLE_TWOpp* SCREEN DEMON Calendar SDCALENDAR_TITLEpp* SCREEN DEMON Read Mail SCREEN DEMON Send Mail SCREEN DEMON Turbo Control ))SD_ALT_EXIT_KEYpp*+[SD_HOT_TIMEOUT_INTERVALp&p*;0010110>01021320pT` Unable to find directory called :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM+>?>CONBATCHNOCON@VCON@WCON@PCCON :MEM:?SD_VM. + @OUTPUT@INPUT<@o  ,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~!ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ hjiLC8v#d Ex7@"pBpdrpcmpb1@INPUTo?   !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}  SCREEN DEMON: Copyright (C) 1988-1993, Threshold, Inc., Auburn, Alabama. All Rights Reserved.ppe@OUTPUT  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ >G]ZE6<<Pi@e@ʟ7?~š Ȯ G[ǫ^/~u+.Ur ġŐ0&4' &)}26F0~]Yq_]ӝŠ͜Å訠Ԡ젬ɮ㠠҇.3250.161A-GU9-3Π򠠠ƠĠϬ㍐ɠΠҠ卐̳Ş宮G=?b[n7:H)/4eKa'Lxvd;| &Er+@A~Jyĵ"p.m% ! ݪ8Y6$Бl c9u0q-SȩF`ឧ̝jCUBQN 3(,}#XVD51w\ziotR ^g]*ٶ_{PWIfOԅkP ( ++++-||-+|--||-:++++-||-+|--/cTRCG ++++-||-+|--||-:++++-||-+|--/cTRCG  0@INPUTqrstuvwxabcdefgh12345678!"#$%&'(yz{|}~pijklmn`9:;<=>0)*+,-. \]^_ 8`@     Press any key to continue... @SD_COMMAND%Turbo Display% Screen Update Interval seconds% Use arrow keys to specify desired% settings. Then press DNEW LINEE to %accept values as shown, or press %DESCE to exit without making changes.# )ON |OFF|| Hppp:SD_POST_OFFICE+.BOXSD_STAMP_DEPTSD_PO_USERS_LISTMTo:,Urgent? N9Acknowledgement? N. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..L..L..L. .L . .L . .L . .L . .L ..L..L..L..L..L..L..L.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .DESCE=Exit DF1E=List of Users DESCE=Start over DF1E=Send this messageLDF1EL BCSendingCMessageLCP.O.DirCCleanupL Urgent: Ack: From: To: No Post Office box exists for that username.You are denied access to that user's P.O. box.There is no mailing list file with that name.!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~!ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ PSD_NOTEPADD DESCE=Exit DC2E=Prev Page DC4E=Next PageBPage !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ o? XSD_CLI_INTERFACE    :UTIL:SD_CLI_ACCESS.ACLp2p" ` Select: to select hDDDDDDDDSDSDDSDDDDDDDDDPNPNADDDDNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ  -  Z  "  Z  p:CONLOGSD_+ x Error!Press any key to continue... Yes|No|| %'))&(%%)))&)&)')')))))(()))))))))))'&'&)&'))%%((%))())5799685599969697979999988999999999997676967995588599899  >u  (@Y  Redraw Screen|Print Screen|Calculator|Read Mail|Send Mail|Notepad|Call CLI|Turbo On/Off|Calendar|| SDCALCULATORSDCALENDAR  SCREEN DEMON Menu to select SCREEN DEMON Notepad SCREEN DEMON Screen Print SCREEN DEMON Calculator)lIa ʣ)UM)V)7I~bI):9YsIi )9IY9y ]NJx)9Q)9Yy Eǂ+89Iϐ HNo console log files found for specified console!9I 'Error on open of temporary playback file:9I  Error on allocation of memory for log screen image:FA}8e9)IGuq)8y)Ii ԸdL)99)99)9)9h7ɞgƉ@ Yy h@89I' nError starting display task:)8Ȑg)8pgkZYIYBe)@))y)9)9W) )QҮgVk&)YIY))ߠ99") )$g!x )8 ¸)))))))x))8I)8I)8I)8I)㖣㘳㖑I㔎0 J㌅)yㄎD ;j))xY))Y8)99x)9)98Y9) ™ ~6 /)ƉYy x*ffƚfj,IEE@ݩݠYyy FA)yyuYY bX i)xi % 4⼩Yyⷮ U ⧎ ⠫➉8Y⥴⥣⒁xف n) j)IiY}}ǂ)⡥f8_)Ydd2is {\8)n8xF6)9 )viF zhgY)Yi- 5Y  9) 3Eњ)%)) )ȭy909$)E 90))xᷩxᨂyᙫᢉYљi)iᙣXљiIእYܫy) Yy aIYɣf) ףa8hy)IiQOMLI|@x0) hK ~Sy\9nb9o"9rsG9uQp9 @?np9vY wI9yY7I2O)9i) Yy 8)nY9i Yy’Ii)n)r s)u)YYYy҂y)vY9Фͫ̉ǂI YYbÂyDy)i9 YYFxI)I 9Y9Y/y }Y9Y҂yYdb`) i989Yyy yYYyyԹyyЉ9)yyiԤ98*/) 9يx)xy񁸣쁹扉8 t)IiYuISD_.LGO.LOGyi ߈)IiIl %߃)!Ii) n9ߛ)nyyi) |ߊ) ) i9 ) 9 ) 9 )9)9)9)9)9)9  ) Ii | 8 L y) -yyYyy) IYyЉ Ix)y9&)P)y)Y0)PyyyY9Yi)Qyyxi9))IY`yyY95)096)294yI99) 9Yyxª)Ƥ)x) x) x x) Y99YyK“x9) IY)ޚ)ދވIYކނ) = :8kg8cY tye VUO9) 9Y9Y҂Y )9yy) wIY9i- YY8z Y8Iyx 9YYy]Dݜ<ݔ)9)9)99)9)99|)VAv) 񸮣wBIii`aߥ) ™(yY9ХI)yE5y9Ҽ9ģ@y)y3:yy;9ŹI)y CyyT YIyYyiY򀹃x)YyyixYYڂy))-9Yy)i9ZIyy) 9Yy˩YYقyĩ)):9Y)):9Y)iּ9 ŹI)y܊(yi)γɐxǁ89xܾܺxܼ89xh)Y9)WJyiP.)9 ܈iIyy D EJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECSync Disp InFld InChr At BegAt EndPausedSlow FastJumpForward Backward Input Step null ^A ^B ^C ^D ^E ^F ^G home tab nl ^K ^L cr ^N ^O ^P ^Q ^R ^S ^T ^U ^V up right left down escape^\ ^] ^^ ^_ space ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ deleteTimOutcmshPr<202> <203> <204> <205> <206> <207> shHome<211> <212> <213> <214> <215> <216> <217> <220> cmPrnt<222> <223> <224> <225> <226> shUp shRghtshLeftshDown<233> <234> <235> <236> <237> ^shF15^shF1 ^shF2 ^shF3 ^shF4 ^shF5 ^shF6 ^shF7 ^shF8 ^shF9 ^shF10^shF11^shF12^shF13^shF14<257> ^F15 ^F1 ^F2 ^F3 ^F4 ^F5 ^F6 ^F7 ^F8 ^F9 ^F10 ^F11 ^F12 ^F13 ^F14 <277> <300> <301> <302> <303> <304> <305> <306> <307> <310> <311> <312> <313> <314> <315> <316> <317> <320> <321> <322> <323> <324> <325> <326> <327> shC1 shC2 shC3 shC4 C1 C2 C3 C4 shF15 shF1 shF2 shF3 shF4 shF5 shF6 shF7 shF8 shF9 shF10 shF11 shF12 shF13 shF14 <357> F15 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 y*)9ؿIYSش9xC5YNy؝)8yYyy󸠉y؇)yYYkK)yYYXJ )) ) L^)RQ)^pD))Ԯ5))%y0ix8 D:Y)xAx00))  YyX@x&)  z/9Yy;@8YY1U̸v)9)-x98); Unable to start Screen Demon auxiliary tasks!Unable to allocate memory for Screen Demon auxiliary tasks!9 )T Cannot open SCREEN DEMON control file :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM )du)vIIivII38;5vfIYR )9 )d =ACL of SCREEN DEMON control file :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM must be set to +  ,WAR 9 )V Cannot read SCREEN DEMON control file :SCREEN_DEMON_3.52:SCREEN_DEMON_3.00.VM ΩY)R⸣Ť;4)˪IYSIӸ Y9999I۩Y)IĩY99IYW9 :k9)9Y99y)9ϣ9ˣm)kIYSiY  )Y99DX)xyȉ yyy9tYi8) @CONSOLEױ)♻׮) i )9)99)Y999y>ظ8))@8׃)8I9)89)r`) oIo) oIY9ix9()@9\)Iyiny YYYyqyiկ)ժYYUq̎ԁ ))8ʙ)⩻) 8~)yYYU)9qZ)yyiqJIx9 ){ NConsole name not found in Console Types table or out of range! Correct SCREEN_DEMON.CONTYPES and then MAKE_SCREEN_DEMON.VM 8n$i  )`Ii8[) })YYUIY99U)c)8$x889%y) YYyi9Y5)ʙ) ΚY)ʙ*) ʩԖ)ԒIYS{) ʩ)ʩ)ˉkY)ʩ) ʙ) ʩ)@ʙ7?)I M) ʩۄY)ʙ) ʩ)ʙo@) yyzL)0YyylY9)/yYyiYB))Y9)3)-)096)294)095Y9Y)!Iiݤy)9999)99)99)99)O99) YyyiYͼS!՛y>)nyyՓՎՓix)nyyi9y)v y)R8)P).yyYyl YYyyiY96))I߫)9v6YYE5)xJ)IixIY9Ya:!)"YYPU    jIA6[6P聩IIݫ6@؁8xρ8ʂI 6, 6"69)@9Y99y)Ytsp\MiY s)I Y9Y)Ii )99(YYo)5) 5g)dYYU i  )Ii  )Ii<)IIjS3YY_UxY=U88 9x))) yxЁ) ) x) ^C^@)yI2s129) Iȶ) )8@) 7)/&e)8%)Џ88) t΢8YΘYSxΌщ8xYI  F  86Y))8)_щ!).3x).ϧ) >x) )8@W)tbυY)x{Y)لY) TN9*) Hخ0{Y9)EConsole Interrupt¿ هy֤yIYy͛)АIYyщYͼ ΉQ͂y){Y)y幥)t)YYg)W)xε)2NΉ))@xʄY)˸ P8Y) 8%08Y)`xΪ)ES_{ sy )x.fY:Ny΂))⹂)8@q)8l)⹁xW`)[)⹁S)MIP)S!<)©5x)@)&)ꙻ Y)8)x)x)xRσ80x0ϔiyy忁8y IyY)艆Yɇ))8 ) /)YeOIyYyi )eD/),깁Y9Yi ) e3IY9/m)YYY))͎)C)) )y 9)Y9)I9) ^P) ݧIiY9)xyYyyycѹpx֑IybII)) YY))y晅y)y˩Hxˡ)y˛x󸀉y Y) ≃8i ˃ɂYi )II)y)8Ήp7 x։p$ p8' IxYI9YY8 8 iI)y9^)xy) )IIyiɂ)恉x);QiyI IމYYxYiY)$7xi 幥pi =x);8yI IމYYxYiiY$ m 幥 pi)ʅ8x  9Ypv08  )I9x)Y9晁)Y9yщx )I  I x))ZY9!x) yxxy  yi) YYxyɂ  i)I))3)Y)\ IIi Iy,℩)).9Y)T9Y)M9Y)P9YY9i )@9IY999 fT9)9[[II38s[lYyt8x ) 9<I9Y99 9[I h9)Tx9f)`9ȂCannot create temporary memory allocation file in directory :SCREEN_DEMON_3.52:MEM Cannot open temporary memory allocation file in directory :SCREEN_DEMON_:SCREEN_DEMON_3.52:MEM )O ˙8XIO IIYyUX)# ȿI)8Ȣʩ%x"Ț IIIYSȊ)˙)YY{x)ʩyYomY)Ix9Y) I)IIѹIyyIy߇)I٩|Y)8)xأ£գ)ȺXȶȪXȩ) ȞӤm 4) ʱjʣdʩ^) mNlXhaḣV8XU I 9) `rIY9Yyi9Yx)x),9iY) `TIY9Yi9YƁx)x"_xș 0lgF))))G9)|*M[IУ9) YgYd!8) IM3 l)ǟƱǜI lqxF  WARNING: You are about to be logged off due to inactivity!  Press any key to clear this message and avoid logoff...)L Y'8X g?) yi) Y) )) )IyǧY) )@ǘ) ;ߣǏ8@ Nj I I IљIx*ΉxpY8؉y)ZyIљYiF) 󉈹8E9Oy)iy,)w8!)Yw  YY)*vf♻*p9)9))I9 Y99)*O82Y5)8!y)Vsƾ)xII}+y PiYYDx))*mbƍ♻)9)9))I9 Y99))́YY )[)9ɇyDY)8~ΎK؎Љy2'Y)ȉy#ѹy)ΉxȩYy xYIi ى8)Iy)XΉxjYixى8)I) yyW)IyN)IyŮY)i )IƳi)Iyѹy(ΉΉ@- xى8)Iy(ΉtΉ@ nى8)IN))) yy)I)) y)IyBѹy(ΉΉ x'ى8)Iy(eΉΉى8)I)) ̬Y)&9YNY (9)P99$) 9Y9999   I9) yxـ [9J)='Ή)%} ) 9^xUo8O8#IḄ ~y^?yS98yH)9/)8&x,Y)'Ή)L|YxYV) )XXɇ)9$YY9‚xI9xCy) z.yI)Iy)i)II}ςiy)Iǻc>Yx1) ) )fy*)x9)) 9)x9)<9Y Y^^*'끹X)ۣكr) xk) [̣)W)f D EFEFQ0 ))5Y)Y 9x&Y) u)yy )x #)xI)i0ieix@yyy @sF N@yyyyy )\y[ 8eI ߍY9)MI#g9c) ♈f yy/ły) ⩣ i)x) yyyy@y Ŏ y ߍY9)I#9cY̎)  yyֱyyyy@y x yl))) x蹈^)8PD)nyyxVr)) Y;3) X  ;yy ~͛yyyy@y  Fy) @ 3؀ r yy ~9WyĎ !e[y}ͤ9v) Y) "8ѩxcY)9̮!˴)Y9*) ȂIyIcELOGOFF-TERMyyyy@yY8!ቓxyy ~1yyI)Iy!Y9Nyy)cr YYyY)IxW* dy89L) x:Y) !ѩxY)|92!;eĂIyI]c癝yY) x)DzYܣ) )Dḍ|) yy }yyyy@yhx  8\) xyy }f # yy8yyyy@y  )♻" yy) xy)9)9)9 Y99i))xy bZYybdщyĻ)IЉ)) b>YybHщy׻)I  Fyy |؛yyyy@y)⹂xyy |y " ⩁YYA!Y)X xixx iΎ ؉yy |yy |~yyyy@y)xNY)8J)b=yI yѣ8͑I)8)YYI8Iȉy yKtիnxɘ)dY)8yJI)nyy)?:?)Љ))x)y 998yy)9)9Љ8yy)9)9y)8Y)Ȃ9Љ)) !8)9)Ky  y))x )))IY99Y8yy)y  y)) y9yy)IY 78)>xЉOgcI ߀Y) 8I 8⩻⹁㉁Byy zЉyay%! YyY) 8WI 8N⩻l⹁i㉁SByy zY9)ay)) yYIIy9Y99))8 yy)y) a)y))y  y)) yyYق))8 yy)))Y8Y)y  yY9YF^ZڀY) 8I 8⩻⹁㉁Byy yYy\  YyY) 8RI 8I⩻g⹁d㉁NByy yy+9Y$ީ2)IyyW8։)>Ii)I9III)Iy)0Iy iy)))))))0I)I yx)y) yy艇yyyy@y 8h)⹀ )dy^XxƂ)NY)8yDz3)nyy))$))Љ)) x))x)yIY)ǻ)`Y)8؀)Wy  yy)))@yy)) yYI YyIY))i~ŷ)`8N)xY) 8Yř)?t3xyy x4yy x(i9)) y))yKY)Ȃ9ЉY|]yy wyy wyyyy@y8x8㉉byy wü93yy wyyyy@yIxyyyy@yYy|8x8㉓@)8qyyyIyyy wc9㸎ӂyy wN)a wGyyyy@yIxyyyy@yYy8e㉓@x)฻yyāIyyy v9j8yy vyyyy@y8x8㉋@)yLIyy v9븎*yy vyyyy@yxx㉙88[Yy[щy8e@)Iyy vf9xւyy vRyy@y/)IYyU)©Yyyy v&yyyy@y))YyݠU)©Yyyy uȉXyy uyyyy@y0cy8zzPyy[N8ycک=کЉxyy uyLک&کЉayy umy)YY8yyyy@yˎy YN.yy ucBN uZ<)8))xyyyy@y;ڎyyܿ8o u" u!Y)x)Y8yyyy@yV;ayy t t)8+8)8yyyy@y%X;sl0yyUbx: t ty3)x)A)xy)♀)88*)xY8ɇy)^)♣)Q) ))){)>) ♠y1)8IY t;)M t1 t-) )x) tȉێyy tyyyy@yWyA8{yyۆK8yکhکЉGyy syyکQکЉ0yy s#yy syyyy@y.y偸G^yy s) syyyy@yԎyI) IyIЉ#YY9YY@Y#yy sY xYyy sH)Y) Y9999Iںۂ)ʇ)ڭQYx Y9999Iڕۂ)xYY~U))I~IIdSyi) YOہx)yyX)YI9>I؉ yI   Y!?؉y)@y)yIi8 Yy1)…yIixB) @CONSOLEI/)yIi#Y))8xII)@Iy)ޮٷyYYٯYYY8I)yIiY)8)9II)@Iy)dvyYYnYY 2IYYUxIxydܩYYDYy遉y8IIyI)@I&yx)yY)I8:PER:yIiYƉxy58IiIyIYYy y    I  Y Y   yI ѩx  Y  Y y Y y y y U))2ЂI9=9K)2ŁY9=I9K)2Y9=9KyY9e)) )Y)8)i UT)INfHiI9eiYI OGۂȉ'IY9Y9L9"9#9$9(9;9<dS YMYK9 9)9II9YϳIy?)I9)i) 4)ۉYiکi),)Y>Yi9$ )Y٣ڂIӣYgأ dM)=I9yYR))y)))@yi9Y9)Y)0yy   Xyi9 9 |))x x))x)xi)9I9"9#) i yX8iI9")iG̹yII9) y4yi/9 MX y')))I9) 8yY)ȂYY )) )ۉYiک))Y>Yii9$Љ))x x)iyy))Yy>Yii9$)y))IIa89Yȹ9 `  )i))I9)f 9iwܕy)yi^9999X7yE +y)I)y yYW YY#iY$%)x )iY)) 8Q<xi)$i -)@8i)$| +y)I) yXi Mщyyyx~IyYyYyyyiY)IH9!)щ  iIXZYYYiXYYȢ光)ȫYXI )XՑY)xYyYXYȃY)ȫYЉxY)ȫYY)X XѹY)I)I)YYi)=3Y칤9 BH^(*)i9 ))IYeY`YiXȫY)IɹY)X ѩY9')ɹy )=Y)InIYY9!Y)8λD&s) xyi) S9)''D) aGYU Y@9Y8 9Yyyi++I)9Y9)))XXi%Y)I )5))')8I9(9)'8h)`ˣd)ʣ65Y'].)Nx)Ox)> )xG()=8)X2)響I)@I) x)(/ C)@Y8 ) p) Ip)I9;YN))?%|Lyyi )O Sb_[WyLyyiB Y9;) )ˉYʩiߣ# )Q)Yy{™x))YYjY) )=)IY0Y b)}8)Bx)IYY9)9)Ra[iӸY/d) i>YxG) d)il)=8x |3) %{Zy)=xLOH) F@:) HP*Fy݄Y)xY)@))D80yǁ8W-EYyi)=x)Y)əy9y))9yy8i)yY9y))9 ) yY9&x>R9&_ 8>y=n Yy4i0= x!I9x8*)x9& I)<¹ ~y9&9%)щ  ) )<);8Y)%i ))$Iȭ8iyyIyiЉ)0I) )) Y9YYi)ՉI5t))(@)Ic)& )(щY9(y9)nѩ̹#)cyyYi9y))9) )i9 i)=)%Y _)88yY9))9)!X XIXљI‰8y)yYYyy)$i)<8xY)ȫYYi) iX)InYXiIXȫYفY)<);щIi)%y) );)<)йx.)8)%yilyIii y.+)I)9 )9 ) 9 ) 9 Y9)9)09x)))ȫY) )x)YȫYp Y8i)9)9)iiI ))8)Iyi9y)7)Iy)yi9))9))X Y S)))9 )) 9)) x I8Y9999 wxXY)I)X) I99)ȫY9)))XXYi9 B)Hy))=8)Ix)x)!yi)=)l)YXiYiYYȳfȫYaXI)I  YI)ݾC>C)܆Ii)PYXKYixYY)ȫY)XI)I  YI@)%8}))x)sx)Kй8g89) wXQ) Mщ)")#A)8)xx)79L88۬Y)x)79L) ʎX)x)79L Y))=щ  ;xYIYBy;{ Y)x9I)й ;g ` S(F)) 8')8i= )9)Y* <Any)%g>,yyiΣq9G)jH)Gaݣ Y 8ov)橩 _HYy>=yIyX2FYY I8)Yx)Y8y=Lyy;)@Yi9Jy9x)y98Yy9YXi)QԥYyyiF)ՉI0I9)>)?)@ E)As)Bm Cey&)yY)éYй8xYЉ艇yxxi)%)yOYJxi)%)y?Y:x61)Jy ) )ۉ)I) y)Ii)  ) I)IY9)yΉYYi)i)i))Ii Yxo8oYy )9  ) yyyYyi  Y9xy)%̹yIIy,9)9)99)%9yy9 ^yi )ڀYiI))d84y6ꁹ,xmmmmy9")դm|6® y8C#Y&)QY ŹR9)9Y99yǞ)Q)Y8)ʙ) )9Y9yk)8 Y99yUi ))qx)YY<y)pTΉ)! &Ky53xkkkkҮy9")ڤk5Ӯ ))8Ňy8A"Y%y)ѣYƫNʩYYơUy)8 XYƌNi)Yԣ[9&9%%) IYeS)"I͉Y9Yyyi )   ) )%N)Ox)> |9Yt` p)Iq))i)) )[)) H9))8=YY 9) 9))~i<Y5Y普85qIxyipщ8)%8)8yf_yY[P YYȹ8yYxi)%IDYF9:5YyyyY9Y'*y%40)Y8x𸙃8詓ੀyyYZ Yݼڤ٫ȩ8YyIYyЉILJ3x)8虑8虂่xYZ~ YyYZm YxupYyyIYyЉIf)Ya`))ԚYI ix))ԆYtr B >e:%6!4,$Ƴ)i))5_98) Y    0)մ 1 2гi98) )))йIYI i))ӺIY x))ӨY 98) ڙ[WS OME(5&=+*9x) )`D)oj) y'i,'y )) i  YYXǣ٣ՎYګَ)x)x  )щ)XyKYXyXcYȃYyyYYəy~)F8Y)PY)0NHVUf_IayXGBQYMH鉃xy@YY'#YY(29YyyXYȃYYK8IY) 򩁩KxҊ8) Kx㒉8yJ xӳΑŪÍǎ1 )Yë ~89Y~Yy&I)xK[)g)i|I9Y Xtщ8<)x)x x 8) yI)$9)Y)^9@Y9)JI~艼A@8G ~ lkjihgfed R)))) I OyYK K?ЉD F) ? )Y 7)Y 0)湎 YIYx   Iyy: }yXYȃYYЉyȫYmЉ) }أ{) }Уs) }ȣk) }c) }[) }S) }K) }C) };) }3@)i$ }|i }mny) }^ )  }R)QY桙)ڣJюʪȍ̎6䇩yƫ8Kx) )8 8O)xYY$x9#)4) 8 )1Y)xw^Xt҉9)9) )1)YW^XTѹ.+YY)I̳ډu)8")'.  |jO |]KXڎ~SYy)Iyi~XāYIֳձyYyyYyy˱I9Yiyy) | | y~ YYyyYyyY9IyYyhxb~./uSIkmώ )x9)88簹xJFN-E;I;39z)1)I+j)x-)Yx) Y)IY)I) {[=) FE,}PYYѹyyYI݉I֎ I {$)8y}YYyyI)Y)) 9Y9YYȉ~쇉yyYyyȉyIY9YIȉ) ©x)Y~|y|yxb`yE9)YXVy8|4I1y)|Y z e)\) zr) zj ) zb YiI zL|MY8Y۲ٱ8ӎ|F z1|2Ғ΍y|, z|Y8| z) ©xYz)9)9Y)Y9CR y֤W yYL)YtrK)C| y鸁Y+)YSQ*)C yxY )Y20 )C yn yl)9ID)  yBYңA Y)F Y)a8?8 Y)28YY)©yYYY x))9Y x)9yIC̹@Iy e y)IyyyC)yyYYI)9YYɹЉiyyyyZyy1:yMyy1yYyYYy bY)DŽY)89)Y xiC)9Y)o9Y)#9Y>)yy߅)x)Y))89)I x1Fb9@) 9YYމyIy0I)9Y0 Y)LY)9)I D wyXXiYΉiyIY) xyIĹ)I y) ♼XF) {? wyމhyIy0Y ) o~I)YIyIiIIyIiiyyƮa[,׮0")u 2:Ԯ8)})wF  }h̕)09Y㍉ }OY)09YɍǁY)I)YxY8)@Y9i v橩 } Y_)Yx0N94 v |Y:)Yecx0)95 v |Y)Y@>Y096 vw |Y)Y)Yi vS |wY)Yى8yƣ v |;Y)YY)F)8y)9yI9YY ; uǬY)x()g)9I | u)8)x))) 8),剁) 8)x=)99Y)) 8ى8r)x38 xyIyy1Y  {yY 9Y)8) )Y Զ Y u9Y)x|)9)I vӫҩ {@yYč«Y)8O))Y N)鸁Yw t;)89j)I g ) u )) ))y9 tģ)89)I P )) t zФ )YPN平"9 8)Y97平 )i9 &8)Y)i9  x)Y9 )Yǧ)ق@9))ق@9)vyYY)yyyy Y9))I)Ii9YYz)x}Y8yxYwItXp)xyyyi9yy   G))I)Ii9YNIY s)89)IYYu )(9)O"9YYXxu )IY)294 G= ) )9!)) x s(FAY׳9 yAǫƤ x)Y󻍉平9 8)Y󦍉)ix9 󕩹)Y󌍉c9^)pXy8y 9= )  xX.X) iIN) Zy)Y99)9%Y9)99))1Y9Yy 8Y)9 :Yt\7Yǣ%) r;y)999)Y9)9)9Y9) Y쮫X򔩉8 Iy ?й8 x)Y򥍉平y9 x)Y򐍉e)i9 )Yvt平J9 )Ya_5)i9 wƣBx):x/-YYX*,ys}ys) ) Y qc 8)Y 平9 8)Y)i9 詹)Yߍ平9 x)Yʍ)i9 񹩹)Y񰍉平9 )Y񛍉񙆙o)i9 w)Tq) 8 hf9b9)I9)I9)y9)yI)CYYXAC)yryx&y r ) Y pr)) )YYX pS v| )Y平9 )Y獉)i9 ֩8)Y͍平9 )Y𸍉𶆙)i98q𕅉y)yqyy~yqYQ oˣ)9 &)Iݫ܊)qYTȫY-yz$XӀ8Y)81Yio oY=X8) ) ) )8I9z) YY)I}kj&)ێѫY o)yYiYIyyy艣￑IIyyЉ)tT 9)I.)ȳYepުXvXtiywyYyoXkYFX8Y)yyy艣VIIyyЉxHXDYyX8Y)nYyyy-IY9yYy ny)9)IF)p_YȫYۭy"ЉңX8Y)Y n8qӎ n/yչIꉃxYyyy艣ȑIIyyY)sW 9)I1)oyȳYlXX}iyyIyxXtYOX8Y)yyy艣_IIyyЉxQXMYy'X8Y)wYyyy6IY9yYy m 3x)Y*(幣 )YiY)x))Q))yyY)IyY9 )  ) m# sL ҩ8)Yɍ幣흤 x)Y튌i횄Y))YYY9g ) ) lԣw) ḷo) lģg) ʤ xi)Ydb平89 x)YOM$)i9 >)Y53平 9 )Y )i9 r)y9)ɩxYY))Q))yy9ȡ8)))x))XYY9n)yyn ) ) Ys kτY)0)@89)I- kFO)9J)I抉)m_ZȫYQ0X8Y)iX Yyyyy艣5IIyyY9 k)9)IO)mh ȫYݻX8Y)-YYYyy艣IIyyY9 k5FKFJFHF[FIF\JKHI) k) kyYy봳 ) ) lyYY)Ix8s 넀낫뀳ibwiIty)@8Fع) Y)x)8)Oy.ىx)HIщIѹ I8 8щxyII88x2ՀaI[:) y.Y) ~)) w$P)Iι xIe))@8@9)Âx}Y))}y) ɝy)٣ԄY)x~9)) ))j )8l) ) y Iy09x  `).829===uR~===u=|A|R=|eKJYƀÙ7I}IKJibٙÙi\9Y ÙYQ/Ù WIQJ)KWIfi-I1iYlÙz逆9r)P`2KK7IY؀\9 'i'' ''CY܀hrYnO9 91iY!lÙÙI299cb8rYnO9 91iỲlÙ\9iX9g\9 e%97 (CX2XX''9JY9(i8 Ù9q9`)ÙYdÙiÙiy)ÙKzKR ÙD nhgyPznÙ9˨Z)KKK˨9Vnh\9I2cbÙ299bgXGHiz(Giz9nGƌiz0(9z9)ibG9ighZ@9չ2BJnOGz@7YnO9Bfi2cG9BgXG9Bznn(YnOiGB2r96\\zr95 79 9>!U!w!>w>,PI%===uR0XڧPI>xวщhhщI|x>wxۄ,R0XCA>A!!U!RAxww>*,R0X9>U>>U!>>w>xwPI%===u0X!%|x>wxۄ,R!%~h~ѕ*ه0_>%~h~ѕ~~!(0Xd>!Iۍ>,w>>R|xww>ل!PP!>0XxIۍ>wIwUwP>P>I>w>,R0X;>ww%"="=RRR)I99Y9 9 99 x)I9Y9 99 99 8)I999 Y9 99 )y))x   щxy* 懩Y9 9999 I9 x)Y9 999 99 x)I9 9Y99 99 )8x Y9x)7ӂ v)9) xyy)0YyyY9Y)/yyi Y9091i))292)393)494)595)696i) N)" ))щy)f)9 ) ) 8 $Y9 9 999)99)O99))x y )9I )i)Y9I )9 )i)9)99))998)9)9)9999)9))Py9i yy) L90Y91)92D939)494)595)696i) x{)ƣ) I)xI)Iy :))  x  y y y  )щx9"9y))Yyl9yi)xYxѴY 8)x))Y艇y  )nyyi Y) i )Ii ) i9 Y   xIy) xyyYyy) IYyЉxi  )y)B)x  R8 8 y )nyyi Y) i  )Ii ) i9 Y y y  xIy) rxyyYyy) IYyЉxz) w) ))x  8 gy))Y)iyyry)  0 1) 2}))i}Љo)8y )y_Z_))J)  1yQ)ʎw)χ)!)  y()2))~щx x) %)dy))Y9)I9~й `)x  ~~x~ 8) ~) yy0Љy'')+~&) ~#) 98)8 yy)9999)9)9Y9 Y Iy Cй8))8) ))y~'9)x ))y~9}) }) )))8)o )8Y)y}9) )8Y))Pu)@yy}9}e) }b) )Y))) )i))) )) })I9))) )i))) ))}b)I9}) |) )􇩧))) )i))) ))}') I9 ))) )i))) ))||) I9 |) |) )y|գ|y ɇyy||yщy|y )|yy| y )yyYщx yyy|y||~y|y|ry|k )|) |) y  |Ry|Mix|E|;8Y) )Y|.{) {) yy|$88||Yyy|88||Yyy  x{ix{y) ) ӂyźy)0YyyY9Y)/yyYqq)Y9998)I9Y99x)I99Y9){?Y)@{;)@I99Y9)Y99I9)I99Y9{Y){ ){) d)`)8|n0)))z) z)@)dsz) z) I9Y9qB/)Iq:z) )z9)r)͉zYyzyY艤zēyyyr)x9r)zYyzyY艤zyyyypI)9YY)9pI)9YY)9p)ꩴzty)8zezbzcxrfz9xz 9))ʩzCzBYѹ8yz7Yaz2)9Yz+)8z$zYIzy)Yz)))NFS10OFS00 FE))z  iy҉8yy}y)` )"I)))8y  iy҉8yy|Գy)/ i)"IyO) yL) )C))y y 0yyy 1y) )8 2yx)yw)ysiypy) y) )))  8)y йIi)ԇ)))y)8  iy8  iy҉8xy ) I)Љ) ))  ѹ)L i) Iixk) xh) )_))  ѹ8) Iy) #YyY y) IiyYx)) x&) )))Ȯ8y)x)Yx=x4йx)Ȯԃxx)yǤx' )x))Y xYxxw))Y9 9Y)/yyiw йYw󀹓y  ) 9 ) 9 )9)9)9)9) ))8o)@ wx&& )8)8xIYyI8)Yi99)x)xxI8YyI8)Yi99 ) )xI8YyI8)Yi9)9) )xIYy)PoR)@)yIYyЉi9)9)XYX)XYX y9)XYX)XYX y9)i)I9) )i) I9)Y9`)/)9)9 )/ 8I   щx ~Yi vxvvvv~)< v2) vo щy)9)) I sy%v yYyyyi)I9I9yYyyi)yI9R999I99 Xu)   ) )8u)ꙃ8vv uy%" yYi9 y   yuͩyYYyYyhyyIi uXuuIuIuIIyuYIi)uAY)@xuw 8  )x )y)y9) y)y9xyu9 8)99)(93u)>u&@<u!BI9Dfx)(>@@@<BI9DE  I9 Y91:999 )/I )09)19)29)39 E)1I)@Y99)295)396 II)y)i9798)9йyOlbY)Y11Y:s94 EIY92)xlA)xsӄY)xt) k4iY)x ~ )xk  ))8  ix 8II8 M ijY9-s) )j) )s~Y)j)jji < BYx j <)9Y)F9Y)X9Y FjΎ A<j)9Y9si < BYx 9 <)9Y)F9Y)B9Yj  y)09Y)yY09Y)1))9YI) Iy))Q))yjjyY9 8Iyi)-) ij\I-YIi BiY8yi< ى8i)88 9iIYYY9Dݏa&y)09Y)99Љ)19a$98)38) )`9)D9)09yiY9&h +_) )8 8)&)8 I9& + I+y)9()&9'yh) )xI))yi)IYQ_ 8) )i)I)x)_y)iIyIIIX9zQ9Yi90- < BY i <)9Y)F9Y)CY9Yii<3_Q) y^o)i < BYx <)9Y)F9Y)^9Y<^N)ʩy^E)i < BYx <)9Y)F9Y)]9Y<^#)ʙy_)xg) )xI))8y^ 8) )i)I)x)^̉y)iIyIIIX9yx)9 < BY1i <)9Y)F9Y)JY9Yi<^) yy09YyY09Yyi > <@B)f) x)))9 )9)9  )9 ) )9) )9))9 )9)9Y9 )I9 )9 )9)9 ) )9 ) )9) )9)I9 )9 )9)9) )))7LJe)@8)I9 \ 8eÄY)xM )deY)e)xY yY)0yi 0Y9Y)=yyiY9 e )090)191e 2 2)IiYe) )gJ)1 8)J M))) 8iy)XI Iyyyy00yi)  eu蹊)0))XIi 90I9 i xi  ɉ8) y)yyyyxi) Y 0yyyxi) `)yyyyi )0Y))Љ9Y9 普))8e 98dYȫYYYY 9 9)5Y9I9 9 9 )5Y9 9 I9 9)5Y9 9 9I9 IY)x 8 x)5I9 Y9 9 98)5Y9 9 9 9I9Y9 Y)@8\YI hۂ щ)5I9 Y9 9 x)5I9 Y9 9 8)5Y9 9 9 I99 Y9dY)@8\AI huۂ)  8 )I98 )9e99)9<)X8i щ yyyi8Y)9<)9e9 щy9i) щx))@x)1y)96Y9=9>?GIK9f9g979;I98C)e) c4)Yi9ec))d 9iY9cxb)hxY 999 <Qx8x)bY)) n)I99 9 *)) 9Ɖx)9<)968i y999ibY)8b86YbfZn") xI9 gbY)8) щ8 xiI)й nZ)bW) xy9))FЉc)8I)IIYZ\\b9)ay)a)IY)@Z}UYZr щ ~S ~oiaY)ZU)a) 889))F7c)8H ) щx x yɂbщ)x)8 by8Y99I))Y ayiI9 y  щ))Y9I)) 8)I tYΩ8YũyYyyi8) )Ya6Y)8a.) xYla$)81A)69695)I9Y9= eE) 8嵣`큉8ЮkY`) `)x)lkY `) 9) `Y)l) `) Ių`y)`Y)  Y)x)Y 5)Yɮvx`E)h V 5Y)y9 byyiY i) `^)ˉYʩ)ei9e*`!)j``)YY 5©x`))YYY_`"Y)Ykky) )I`))e9e щ)=9Y9 ~ 9)) 8)I_)ӸY__٬Y)Yػk3) i)e9e}x_)EyI) } щ8y)=)yyy9  9yiՁ)8>8_Y))k ) +8) ~Y$)ق y_YY)xYj288xx_B)8 i)9ل ~i^)Y&jj~) )j^IYS^)hx) 9Y ~ y) x^) `aR`SR`YR^) y_)Y_%W-щ8y 8)Y8yyY999y9 yi^ y)^|)) ^rY)^nY)y4_Q))ƙyiI xxI;YΙ xbIii)9)9 ^) xxo EpxYIxIyyf) YYyy IIyyyyYЉ ѩx 8iy V)ITh) EIY9x),xYD) 3IY9i)xۉpxYI"' ] x- J *Pݻx]\))82L) i) Yyyy ri)))2) ֖kYIY٣])8x] )i) Yyyy Yͣ\) \)i))x`)\) ) i U)Ii^EO yIhfUĂiyh?)IUyI)iII)I9Yxy\Y)8IمyI)IyUiy)IUI)i I)I9Y8UmyUZ))YYIXIYy~Iyy)IIYIۂ))I)Y\\\\}) yo艇y)ӣ\jy)IIYIۂ))I\T8\P)ܣ\IYYU)y)IYщ)#\)8\%\!IIZSY\X\)IHyy)%tYy9#[9"Z9Z9 g-9!Y[mIZƣZģg ' d9$Y^y艇yxy)"[D)!f) Z)Z  v)$4Iy)Y[[[IISY[y)) )!Y\YYL9x )!\8 b) yi) Y)8 8)aI99D")I݉).Y)PY)R9)yyY9i .PR)aY9£)9 Iiy).9Y)P9Y)R9YY999D)$IЉ8IY999D)IЉ8Љ9DxT)I):9Yi9Iiy).9Y)P9Y)R9YY99D9D)IЉЉY99D9D)I8  "Y99 ))€Y9{) y YYYi9' I9Y)IiY)  I9) 9) 99D "Y)8Y9:[PLYY)מYZ YYރY @f}  @ߍY9)4IN@9cd)) YY ֓x ") 9Y9Ɖ )9Yy~Y'"d)) ⩣ZLlQ) @NULL)) ) IyYyad Printing |SDSCREENPRINTOutput FilenameESC to exit without printing)   y   y)xM))0 yp88y)3 9 ) 8Y 9 9ȩ8))*Jxi))))#y2VY   8 )9yyyi  )X x9) 9) 9 Yy) y*x p8 y+u2 xYi) .!))Ю0 y,+zԂ zĮ2V ) )J)4)yyy2  ̹)N)cyyy&j  ̹ )6yyy&X  )yyy&E  y)yy ~zxy y y ~  yy)y/_  ฮ2yz y ~bxy/@ y-F y0')-X) Wo Wh)I), ،-r-j-b-ZԾ)ޤ,jU09)))W-9--uuWy2\zW9t)乣VޣV٤VޣVz) YIY>8牉 8 x)8NInIx) YȫY809xcظY) ȫYI)硩y9:V!Vi9V0iV )Tl)H|)XVdy))物y))V7) 9Yc8) 9Y 89Y)V)nU) )V 9 )yyNONE  2KT4%IU:MSG.rdOpening the message fileadOpening the output fileReading the message file Printing |Writing the output file Print Message|Output FilenameESC to exit without printingYes |No || OK to delete? Urgent!#Acknowledgement of message # A copy of that message is attached: ----------------------------------- Error accessing the message file:select:|Delete |Next |Print |Menu |Exit ||Choose one of the selections shown|Delete this message|Read the next message|Print this message|Go to the Inbox Menu|Exit the mail system|| ERROR accessing the associated message file!YN*- Inbox MenuNew Msg No Date Time FromAll/new |Read |Print |Delete |Exit ||New/all |Read |Print |Delete |Exit ||Alternate between all messages or just the new ones|Read the selected message|Print the selected message|Delete the selected message|Exit the mail system||There are no new messages in your Post Office box.There are no messages in your Post Office box.Press 'A' to see all messages, any other key to exit.Press any key to exit...Unable to access your SCREEN DEMON Post Office BoxSD_READ_MAIL)  )Y )))ɮ,)   y   y"Z/))Y)0)y yy)*fµy y,) ) y ))#-)YY))Y Y  )Y?  Y9 n)Y)K8)P YYY YP9 )(Y y), 9 ) 8Y 9 9ȩ8 y \8i9v 8))"8i9f 8) y#b8i9H)Z)  ))#y*p   ) yN"8i9) Ny#8I 8 N8 y# y#+! 8Y)k ɢk+A  )  ) )P)4)yyy*_  ̹)4)cyyy  ̹ )yyy  )yyy  j)yy }j x)j y ~  y yy'  8*])j4 y ~d ̹ y yy')P 8 )I9J I9K)9L))*S9)N9yy)i)t%xI) y }q9Y)))) }Y3Y x  ')Y? 8YY Yr t r)Y t9 YYx Y9 ۫Yx }5Y yIIIIIIIII)? 􈹁Y9 ) 븁Y)LY y |8i 8) y! 8i  9 IY9 9 I)Y8 򩉁8)yDY8 򩉁8)yy))c)%y)))3y) ))4y9 y)y) )y x):))Z)T) ).)() 8) y ] 8i  9 IY9) )%)yT )F9 y)( 8) y  8iY     ) y 8i x  9  Y9) y(5 9 IY9 ) )J)yy    8 8) y z))c))y) )J)y y  ))Y)x9v9d99æ)N))y&)J))y k)y d ? @yy })c9#) x ?y z ?᪈x))x)qx 򁉁8))I98 򁉁8))cI9 򁉁8))cI9)c9x)c9884 y |)c98Y98)9 y {)c9)9x)9)c P/ x y |<&o)).Y RT yIIIIIIIIIT R)  x x)Y 8 iy  )  x  yIIIIIIIIIyT RI9Y Ry y 8i 8)$ yxi89$IY9)@ yIIIIIIIII.)$)% x)$ ytxix9$IY9)I yIIIIIIIII9Z9$ Zy% 8)$ y48i 8)$ yxi89$IY9)_ yIIIIIIIII)$)>%_ 8 yIIIIIIIIIY)0Z)y y6)&y Z)%2 yIIIIIIIII\<)> y x yN )  2I)9)I9 Y $    )Yx))@  ȹ8)Y yIIIy)  ) )? ?y } yIIIyI9 yIIIy I9 I9 I9 YI9 ) y))Y89~9z y))y y)Kx y)F)) y y yII>Iy) yyIIIIIIIII> y))c) yy  yIIIIIIIII y)>)c) yy Yx  ~   I9y8 yyIIYáI yY9  8 I9Y) y))Y X 8))@8Yѩ𸇩)|zѹ X)ϙx 􁉁x ѩ ])UYOxLG)2)r)#))F))y"8))c))y)B)yY)%9霤<9鸬99ΤZE99)өY¬ )9) Y y }m 88ѹx8y ~)yYyy }A鸩 ))  )9)y) )y!r )N)6) ) yx)`)6)) y))) ) :<щ8)YxYй̹ @щY x))?yy :7yZx))?yyj :'yADyu) < :ʸa8A )98x))!B8yIIIy))Ɂx8 ?))I ))I ))x) ))9x9)BYyyi)DY ۂx))888) y }8 }8, y }uY 8)x IYx)ϙ8)# y vL) y x ? yy uQ ~ Z)))Y YY 8 )Y) K8) )@  YoY x)Yyy xx)U)Y )  I9Vvy38)) y))yYχĮ晤-YY9y)iyYyi) )娮v)KxM) I |)Y 8 |݅y y) vY\)Y WA)I J)) ) )  yx)  y)޾)  y)D Y)񁩁 x倹WWйȮtēy9)mNdx)F9C) ™C) ™@W)8C)xщ8)8Y9C) ™C) ™ )k85Vف)Cl) )YVƳNѩ8YHY)ѹ 9 ).ĢVCϤN@IIh3YVCCh08CΉCC)@9Yyh89F) *lYCɇ8YyҎhqIƇWARNING: Unable to set SCREEN DEMON `@ON Ready For Mail' flag))YyhQqY)MHħI IY9iLL)h,II):9YY9ɇ)C 9)9Yyh ɇ)BY9yg)E))N )))N )) )@ lY wIx9 * 99) x9o) Y9i)) y) 7) 燩 x9Y99)) x9)9 8x)) y) 8) ѧ)E) + !889) ) Unable find SCREEN DEMON Post Office directory 'SD_POST_OFFICE' in the SCREEN_DEMON directory. The SD_INIT_MAIL macro will create this directory.KY IY9iJdIIf39) ( GUnable to open SCREEN DEMON Stamp file SD_STAMP_DEPTYPmAAf092) (oYyᎩfqI WUnable to read SCREEN DEMON Stamp file WIrIIfs3x9V) (. '~B8P Y  @ 8 ?xY9Yx #x븴98) 'O䆩Yyf)%cA~Unable to obtain a message number from SCREEN DEMON Stamp DeptOYye%.@}Y&O@ͳ@Ȯe089*) 'Yy eq Unable to access recipient's SCREEN DEMON Post Office Box)$@G )@j)D@Iye Ȅ)湁Y9(1HXYħIY9i)9) 9Y9YyW) 9YyV) yyyiY9)N)8 )Y)9yЉ9Y) 9Y)yyiy)Ny)8)YyЉ9Y) 9Y9@ )@ k9)yy)Ii) 9YQ89)yyi) Ii) 9Y796) &Yy?d y9>) &w pUnable to write message to message text fileUnable to create message text file )@8By?|) Y?xi)@?lYy?fdb8) Y Y9i?Q9?L Y )@IYYd4?099?-)?+)?Yy?d‚)?yx)?Yy?c)>Dj>9)+9YY9Y)9YY9D@9YcLYy>Ӯc {9) % sUnable to obtain use of recipient's SCREEN DEMON Post Office BoxMM))8))@)Yy)?IIi9i)9IyiIiM#)@)i9)YYi9M YycUP>B{IYyc@q)A8B9)c.I8x)yйxzӂxɳҬCYI9IiY9ɇ.BOX)yYyyb!yy))-9Yy)i9pIyy)-9Y)) 9Y9YYyyybyĩ)):9Y)):9Y)yiJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECYy=bÇɇSD_INPUT_MAIL)i)H)n)F.)3ox9) $, )Can't allocate memory for message line inputͮ v wNYO (6)~I9h)"Y9yYyi)N)) )eY9yYyi)8lY9h)")ѮX98)y88Ѡ8 T9x9h)"9)9Y)9Y)9YjIyYiyi9)%)  mx ! $\9hy)ޤ@yIiih@¹x9h~x?(IYaNRxx Jf) I#) I#Y ?9iy) Y9yix 4Ή@ONΉ@ALL9i9)a ID) "2)8n#PYIYyN8Yny8У ~ -' t)Y)N)4yIΉy)PYIY֚yN8Yny86 ~. 3%-HD)Y)N)J )9ӁY  )K)Ѯ}9)y)yx8̈ } i ~ Ϲ8 } OI)ӋyY9 K )Ӌyx9 )KY u )ӆ8Y)i9ӁY K Z ,`)YIYՆ8xx }$%8 -)8s%C)V)I ) 9Yi)y Ky)II) 9YK8Y9ih@ 9hYIx9 S) 89))))))9)򈸣~9y)" yYyyix)x9)%&)) ͅy) v |e89))))))Y99))x9ǣ/9y)" yYyyi)ȁ98) )) ͅy)h v]  r sm ͮlܾ)F+*)Hj)9`r¤9Grʤ9CY9߂I9b9 Y)Rk6Y9  YP Xy普kyy  Yyyi lsIy) )йxx8) <9 )J )|9Yi x 89hIx)|98)Y)щYqq> 2)" Y9i ) l No Post Office boxes found)yyI9,)i8i 9)i8i@ON@ALL)@)@Y9y)IY9i8 9 )@9I9y] xɀ8txY996p)Ii IY9i7y\x))79)@9)9Yy\x )79Yy\)75 bY9)9I9y\x)I):9)y 9Y9rY \hY) y) Y9i )y%5IY\A387/9Ή)9YY\,)Y)\q)T")v+ Y999 I99)9) 942 y[9) 8Unable to open Post Office directory! Stamp Department cannot be rebuilt!ERY9Y)Ii Y9996906)+9Y) [wYx)9:yEiEYy[aPYy [X&)#) g)'yYF %o pA@)hVI9 q Unable to allocate memory for notepad page!F 6Y9)YIi 6):9)D9)9I9)x Yx F£)IHIIY9Yi6 F 6  YyZ)`9)9 4) y )F| 4Y)9i)99)0Y)) F)yy 9)Y@8t) Y F)@y)@ Y9Yyyixx8݃ߊ8ˈ m S 44 J 4aY4 =i ~8 ɝx | UoO"UfyxY[\@W WNyxCD)@Y> >5xY) i(Y%%@   ~m) 44Yy 6Y= F8g %m nT)&) eyi 6 F 4 YyY‚)8Px F?)yyV) YY9YyYYy@xyi F: 4@lyI) Fyii F?) )9@Yy 6XÂyi F)Y9yYy)ދ)>y Yyy ))eIYXR8Z)`9$أ)I)Y)Y3)x),9Y5IY9Y9i)$)d)3>3{8f) y) Yyye;xyyyyyY93S)23L98Y3B3BD  f\fT09fB f2x38II))3~)2)1#Y9 )098 cYѩ8ȩYiy0 9Ky  Y҉Yiyy8 0X Y x 0V 𨹁8) y9 Xx  yy   )9)LJ) 􅉁IyIIIIIIII򅉃I1111) 􁹇  )X YHr y Yi 𑹀 􅉁IyIIIIIIII1H 𩙩Y yyyyi x  0x9y)YyIyi 1  q)).8)yI9 ).) `  I9 ) 򉹋y I9 ) y I9))8)))Y)))) y )IyIIIIIIII)I] 00 )YY)Y)YIyIIIIIIII 8 9yi ) YyIyi x)Y)YIyIIIIIIII x9y)YyIyi)Y)YIyIIIIIIII 0, )9))Y)Y  9yy)YyIyi )Y)Y x9y)YyIyi)Y)Y / 3    ))˸)Y ) I9 8I9 )N)) 𬹫I9Y9 YF  y YiI9) 9 I9 I9 /lYI9 Y/bY9 9y)Y9)Y/L+wt82) Y9 9 9 I9 9999  ) )=8)♰8) y) Y9 ) Yh9 ) Y9 x) y) Y89 8) Y9 )♑) Y9 )♊) Y@9 ) Y@9 x) Y@9 ) 8) ϙx) Y@9 Y )))xi) ) I9 Y9  I9Y99 )))îYxi)) I9 Y9  I9Y99 )))®8)/8Y xi)) I9 Y) Y9 Y999I  )))Үx 8 򁉉89 )))Ү i) I9Y )))i) I9 I9 I9 I9)x999 9 yi  y999 9 y yi  y) I9 I9 I9999 yi y) I9 I9 I9999 yi y4) 􅹅y) 􅹅yG) 9yY y ) 􅹮Š) 􅹮H)9y))) YB  y YiIx Iy9 y)) YB  y YiIx Iy9 y)) YB  y YiIx Iy9 y)) 8)& I99y))) 8) I99y)) I99yc))x)8 YB y YiI9 I9)89 y79) y() I9)9 ys89 y yc8Y9)))R) 􅹅y) I99y)9y))) 9yIY89y Yӈ89 y  )) Y) y\) ^))8 YA  y YiI9 I99 yi yd)))9 I999 yi  y')x)))) 􍹭y8x  yyxY ))) 􍹭y8x  yyx   yy8   yi  y88   yi   y   y  y yyxY)8  y晓y) )) I9 I9)x y[99 yi yF99 y yi y.) I9 I9)x y99 yi y99 y yi y) I9 I9)x y99 yi y))8 IYE) I 8  i  &))xY I998 y yx I9 I999 x yi   yy8 y yi  y ye)) 99y) I99yd2)9yB)Y)9yi)Y)9y)Y)9y%)Y)9yW)Y)9y))  yY)Y)9) yydpydj)Y))x I9 I9 I9 I999 9 9 yi y8 I9 I9 I9 I999 9 9 y yi yxY9 y ))x I9 I9 I9 I999 9 9 yi yr8 I9 I9 I9 I999 9 9 y yi y<x7Y9 y9 ))x I9 I9 I9 I999 9 9 yi yZ8 I9 I9 I9 I999 9 9 y yi y$xY9 y )) 9yɂ򇉧))  Ii 9 Y))9 <8 X yyYIi xY9)R) n 9F )9Y99 99I9 )VY9)YN9)YN9)WW9)9)9)999&i)  ) 99F)IyYy)4I9Qy)4Y9) # Q8 x )Y i )Y i )Yi8 )Yix )Yi))&NYy$Gyi96YY 9))y)P%Nx$)yi97YY9))$H8)y9)y9 yL N))y9V))y9W)I9X)#ԁyyi9S) )y#ġyi9TY9U9:99<9F)| Q )8Y)YY Y92 )y 2y iη yٹyYiX28)y9)I9)I 22 h):Ii^9Y9:۸ Q щx))|8Y)YY ):92n # 2 yyiX29=Y2 h):XI)=9)Uy9U x Q)8@Y Q):) g$Hxi)9)i)y)y99)щ C9495)q Q%Nx$ 84My "y" yY YYyi)595 Q 84(y "y"h yY^ YYyi)595 Q)8"JX4YY)&NYyi96)x)PX5YY)y97&N < y)j)h)n)l)Yy k Q щxy)6)74!Ȁy "Y!!4Ii Q)6& Nx)78)5XY7йY99 Q&N8$Hxi)Xѹ)X҉89)8i9ixi):Xѹ)X҉89)8i9ii9B9A!yȳY!i?)!liI!hI)9 Q$Hx ?)?!QI)9 ) 9 Ɖ^v<> ;)w)y)10Yx)Y) i9 ) i9 Ɖefdb i ?)Y)yi)  yGYyyyIY8i) y I9YyyЉ I8iY9;)<9 h\IZ ?8X yY ȃYY Q$VxXA) x)BYy \) Q$Hx)Fx);<< ~)9=y 8 \ yi ~8))VI)Wi9)=yyYyi d)= Q$Hy 8C \I8;X)\\)<;):x 8 pi)< Q$H8 ?9x)?9 I) 9)<;):8 Q$H)?9x)C9I) 9)9E ?8Y9GH Q)Y )FX<9F8)x);x9F)F)Ex˂ Nщx)x)x% NщY9|)X|  8 LI)DY t LI) I)azx)|!~x):9 Z)EI ^ɹ h )az|8 x y hY)<;X))O\)8YY>)OYZ9.LOG.LGO.TMP)NYJyCyII ))Y9 )) y II8 )i )iIi  ާ))  )IY)i )i )i )I)i9Y9:щxyyy)I)|Y)|)|9Yxi)|9Y ) >ɁYIY999:)Nx))Y94))I9 I))Y9 IY`I8 )i )iIi x )Y9@檉)I9Y3 )Y9( I89 9 9) ) i)) Y9)J) 8)PY9)$))y9 )))y IY9 9 сIȣƣ19)y) y9 i) )| 8¹ ~Yi Y iyX) y9 ) )x ) 8 x|!~YxY)i I8y)y Yyi) y9 ) I) )YY9 ) )PYY9 )xY IyY))))칭y{) I) Ii) Ii yi) )| 8¹ ~Yi Y iyyX  ĻXx) ) 8 ) 8 x|!~Y8Y)iv8)xzXon) x1YY\Iή)0όi쇩L IX;YȃYYY!)칉IO乂Y.$' щ89۸)98)9) ))yy9 ))y걩y ))yYXyiI9Iw. ǁY9)-9))8)9Y9)8))䁙幢9);9i I)y)8Y))p89Ii))i 9Y8) 9x))  M9 ))y=y9 ))y-YXy ))yyiI9Ivq Y9)|9))x)9) 9)8))&幢9):9)y )))p89ñI)9YI8O) 9x#))  ))y9 ))y9 ))y{yYY)y9y ))ydyԹY)y9TȫY9BI!Yu AB ~Y 3) )ݘ *iY9)͉yyYyi) ! 9Yiyyi ԁY9)|9 )x)9) 9 )x )幢9):9)Y )ݘ =i))p)9ʼn)ʼn7Ĺ'Ĺ9I9)6&9)9I9Y!)9I9xY9)-9 wY )9) 9 g)8)9Y9)x T)幢N9);F9i !)))p8Yx)yi)8X!))pY9))5I%Ii9!)))i 9Yxi))Yi !ر BY)͉)8 Xy))pYyi)9)8Ĺ(Ĺ9Yx9yYyyiȉ!)9yYyyi) 8Ή1234։!"#$y։++++))py >+9)I?+9 щ@+9IA+9) !9I9 щ!9I9)xt )Ii ))|Y)Y )#Y y Y YyiX) yi !IY)͉)9yYyyi))YY )+I9 w) 9xKYӣϣ) ɇyI)x))!8YY)8iyIȫYYLI)Y)) x)Y)Y)Sisi)Didi)RiriљYY))Yc))Y))YiV)) )JY )?)) 2 Y+) Y99 ) x ) 9  Y) x)w=ȃI9)9w4II ) )8Y9 I ĹI yyyiyyi y y Yi Y   8 Y) )/Yx Y'~  y YiIy8 x )Y Y)IIy8 )9vvIIyB晓yvщYvII剁Y vwyyi yyi)) y ) yB~晓yщY)9)Y 9 yyyi 9) ) xyCY 9)yB> x)9 ) )Y  yyyyi)) 𪋈8 )Y Y)II8 )98) 9Y9uɩ)) y ~Yyщ)/)yY   yi yyi) )Y 9)Y9)) )N9 Y   )Y9)ѹy ) x )xY+x )Y ʹ*x)*xY ʹ )Y 8i8y Yx)x))8 )SQ)) ))x964y)x)8x)!))8GLJ) y))FGH<))x 9))  0 0i9  ) ʙ) ʩ))  09  ) ʙ))  09  ) ʙ) ʙ))  o09 h)  cʩ))x ) R) )) )  C) )) ) ) 0 .)ʙ) # !)ʩ)) ) )y)0BY9Yx)) )yY)YЧ٩ɂ@ 9)) y6)0IiЉ)0\)1XypxCI ) Iyy px,Iy ѹpIxЉɉx ))p"Ɖ9);.Program requires LANG_RT: relink without SD_NO_LANG_RT.OB 4x8DOx00@0ypBi0I ))ȹyIlj9  FATAL RUNTIME ERROR: TERMINATION THRU ?BOMB 0 .@$a%Om$~WSD_ICX_INTF.OB  SD_ICX_INTF4C&(!9 !NSD_SHARED_DATA_PARTSD_UNSHARED_DATA_PARTSD_UNINITIALIZED_DATA_PARTk #(-27=BGLQUX]bglqvz~ /? P]d r|  $ 4 >KPUZ _hp     ".UKILWRLNPWRLNSCRSRRDFDINVALDSPERBLDPCSTOPUSTOPINITINITCCOBOLCHNOPCLLOPA.XITA.STPABORTWUSINGETSWASPRGLDPRGRDPGDWRPGDCNPRSFNPRGGETPDSTATUSC.CCABINPKSCRPKDLMTB..PCDCT..DSA..FCA..ESC..AFC..REF..CUR..DR..P1..P2..RIP..MSKSWTCHINMAP..T0..T1..T2..T3..T4..T5..T6..T7..T8..T9..T10..T11LNBFINIFN..EXC..BAT..KTOSD_MONITOR_STRINGSD_FLUSHSD_NEW_WINDOWSD_REMOVE_WINDOWSD_REMOVE_WINDOW_NO_FLUSHSD_ACTIVE_WINDOWSD_SUSPEND_WINDOWSD_TOP_WINDOWSD_INITSD_INPUT_FIELDSD_GETCHARSD_GETCHAR_ONLYSD_CONSOLE_SET_VIRTUAL_DELIM_TBLHANDLE_SPECIAL_TURBO_SETTINGSD_DISABLESWITCH_TO_SCREEN_DEMON_STACKSD_ABORT_ALL_LOCKSSD_ABORT_HOT_KEY_HOLDSCTRLICTRLICTRL2FLOAT_TOP_WINDOWTOP_WINDOWBOTTOM_WINDOWAWDSCAWOFSAWBUFAWPOSPID_FLAGSCON_PROGCON_PROG_END_PTRNONFN_TBLNONFNB_TBLNONPRT_TBLNULL_TBLACCEPT_TIMEOUTACCEPT_TIMEOUT_RESETINPUT_ERROR_WINDOWSD_WORK_DIR_PATHVIRTUAL_CON_CHARACTERISTICSUPPERCASE_XLAT_TBLCONSOLE_CHANSD.SYSCALL+ #  1<(Uh 0  F  6.VCX*tL      2CWfz     SD_LINKED_WITH_ICX_FLAGcurrent_opcodeSD_ICX_RDFDSD_CALL_ICOBOL_SUBPROGRAMSD_ICX_EXIT_PROGRAMSD_ICX_CALL_PROGRAM_HANDLERSD_ICX_STOP_RUN_HANDLERSD_ICX_ASPRGSD_ICX_LDPRGSD_ICX_ERROR_INVALSD_ICX_ERROR_MPRESD_ICX_ERROR_MMSGSD_ICX_CSTOPSD_ICX_CSTOP_WAITSD_ICX_INITSD_ICX_TERMINATESD_ICX_INTERRUPTSD_ICX_ENTER_DEBUGGERSD_ICX_LEAVE_DEBUGGERSD_ICX_READ_DEBUGGER_COMMANDSD_ICX_VIEW_PROGRAM_SCREENSD_ICX_UPDATE_..KTODEBUG_WINDOWICX_CALL_PROG_WUSIN_OKICX_CALL_PROG_WUSIN_ERRICX_CLLOP_LOADICX_INVAL_CONTINUEICX_CSTOP_CONTINUEICX_CSTOP_AFTER_WAITICX_USTOP_CONTINUEICX_INIT_CONTINUEICX_ASPRG_SUCCESSFULICX_ASPRG_ERRORICX_LDPRG_SUCCESSFULICX_LDPRG_ERRORICX_INITC_FAKE_CTRL_C_CTRL_BICX_ABORTICX_..KTOICX_DEBUG_RESTART_ADDRSD.SD_ICX_INTFUD.SD_ICX_INTFUI.SD_ICX_INTFSC.SD_ICX_INTF [&i 5^ @INPUT    J    ) I)I)%)B Ii) HIi) VIinp9r9stvxz|~) Ii) IiD)ʩY )y yiY)/yy Yyi  Yyyi9I)xi9P)I):9Yi IiY9y9PY9)8i MiyIyyIYyy))  ـI Y yY )8 )xxYʙ X )B Ii) HIi) VIi n p)r)s v t x z | ~ ) Ii) Ii yiDG8 Dy)#xY)WN8 "8ــ)x8y)x ـIY ـyx)x8nono&-+2'9FB'KER4W5\6a7f-k.p/u0z123))H8+ '6j8m8_Hjq _&H7<_F[G^%dGg9j$o;r;v#|+ 'F'E4567.-/0123))H8+ L '+.1]8L< ADHIM]TY\` cMgcjpnr wzQI]  Mcp L yx)x8I#)8ـ yYIYـ IYـy 8y ɉyIyЉ8Y)™  ـy){9y)ցxـ@y 9m) yY8؉Љ y9LYYւxYYւx8iɇSD_ICDEB.PR))) hـ )YN)ـ*8ــyYyI)@I։)I8ــyyy) yY)DY)PxY).YY YyY),9YyyY9YyY8)ЉIYyyyIй9f)ɀx)9) ɀyY)ȋi) Interactive COBOL Debugger   (Use VIEW command provided by SCREEN DEMON to see COBOL program's screen) ЉIYyyyYщY9) ) ɀY)ȋi)9 9 2)92)9)94Y9 9  9399I9 I ?UBLPR? ?PRIPR@ ?SGNLA ?GUNMB ?GSHPTC ?GHRZD ?DIRE ?INITF ?FSTATG ?RELEASEH ?SLISTI ?GLISTJ  ?SYLOGK ?GBIASL ?SBIASM ?IHISTN ?KHISTO $?GNAMEP (?GCPNQ ,?SUSERR 0?SACLS 4?GACLT 8?PNAMEU  4?IDPRI? 8?IDGOTO@ 9YY8y)yyŹy098   (o-o 5o7oDoFoRoTolq  27 Y5y)9 pY9  Y8 8Iy)9 pY9  Y8 8Iy)9 pIY9  Y8 8Iy YY8Iy)I $I):9Y) LII P)yyYYy) 9Yi9Y9YY #2 N] z     <<;;;;| 0 .@$c%Om$~Z>rSD_NO_LANG_RT.OB > SD_NO_LANG_RT  SD.SYSCALL@8Qjp.REQUIRE_LANG_RT_REV_2.30.REQUIRE_LANG_RT_REV_3.10I.INITSC.SD_NO_LANG_RT9.Ɖ9);Program requires LANG_RT: relink without SD_NO_LANG_RT.OB  .@$f?$n$~{rSD_SWAT_INTF.OB r SD_SWAT_INTF%C!/ SD_SHARED_DATA_PARTSD_UNINITIALIZED_DATA_PARTDSh x  +SD_MEM_ALLOCATESD_NEW_WINDOW_NO_INITSD_REMOVE_WINDOWSD_GETCHARSD_SET_SECONDARY_PROGRAM_NAMESD_GET_HOT_CALLED_FROM_NAMESD_RETURN_INPUTSWITCH_TO_SCREEN_DEMON_STACKRESTORE_USER_STACKSD_FLUSH_IF_NEEDED_JSRICTRLCON_FLAGSTIBTIB_UPD_COUNTEXTC_SD_INIT_CALLS=8M\ kSD_VIEW_TARGET_SCREENSD.SD_SWAT_INTFUI.SD_SWAT_INTFSC.SD_SWAT_INTF x)Y  Y y)xb8֐ـ?Qb8Ciɇ)) xx@yƉYxy@y)♀y@y)♣8щƉ yy)♀) 8 ))<yYIY)X SD_VIEW_TARGET_SCREEN 9$y9)yYx)     * 0 8; > J U Z b g poruowz }           .@$~%Om$~' NAMTB.OB   NAMTB# #&NAMTB_PARTNAMTB_NAMES_PARTe     '7Nf w      (0K\j   ": LY hs z  + 9 COg y   )D[p+? P ] j v ?CBADDR?CBBADDR?CBPEEK?CBPOKE?CBSYSSD_ACTIVE_WINDOWSD_BITS_TO_DIGITSSD_BYPASS_OFFSD_BYPASS_ONSD_CLI_CMDSD_CLI_INTERFACESD_COMMANDSD_CONTROLSD_CREATE_WINDOWSD_CREATE_WINDOW_NO_BOXSD_CREATE_WINDOW_NO_INITSD_DIGITS_TO_BITSSD_DISABLESD_DISABLE_HOT_KEYSSD_DISCARD_TYPE_AHEADSD_DISPLAYSD_DISPLAY_INTO_STRINGSD_DRAW_BOXSD_DRAW_HLINESD_DRAW_VLINESD_ENABLESD_ENABLE_HOT_KEYSSD_ERROR_MESSAGESD_FLOAT_WINDOWSD_FLUSHSD_GET_ACCEPT_CURSOR_OFFSETSD_GET_ACCEPT_POSSD_GET_CONTROLSD_GET_CONSOLE_DEVICE_NAMESD_GET_CONSOLE_STATUSSD_GET_HOT_CALLED_FROM_NAMESD_GET_IMAGESD_GET_IMAGE_BELOW_FLOATSD_GET_NEXT_WINDOW_VIEWSD_GET_POSSD_GET_TERMCAPSSD_GET_USER_IDSD_GET_VALUESD_GET_WINDOW_DESCRIPTORSD_GET_WINDOW_VIEWSD_INPUT_MAILSD_INPUT_STRINGSD_LOAD_TIBSD_MENUSD_MESSAGESD_MESSAGE_ONLYSD_MOVE_WINDOW_DOWNSD_MOVE_WINDOW_LEFTSD_MOVE_WINDOW_RIGHTSD_MOVE_WINDOW_UPSD_NEW_WINDOWSD_NEW_WINDOW_NO_INITSD_NEW_WINDOW_VIEWSD_NOTEPADSD_OBTAIN_INPUTSD_POP_UP_MENUSD_PROC_PRSD_PUT_VALUESD_PUT_WINDOW_DESCRIPTORSD_PUT_WINDOW_VIEWSD_READ_CHARSD_READ_CHAR_ONLYSD_READ_MAILSD_REDRAWSD_REMOVE_WINDOWSD_RETURN_INPUTSD_SCROLL_WINDOW_DOWNSD_SCROLL_WINDOW_LEFTSD_SCROLL_WINDOW_RIGHTSD_SCROLL_WINDOW_UPSD_SEND_MAILSD_SET_ACCEPT_CURSOR_OFFSETSD_SET_ACCEPT_LOWERCASESD_SET_ACCEPT_TIMEOUTSD_SET_ACCEPT_UPPERCASESD_SET_AND_LOCK_USER_IDSD_SET_CLI_INIT_CMDSD_SET_LOGOFF_INTERVALSD_SET_SECONDARY_PROGRAM_NAMESD_SET_USER_IDSD_SET_WINDOW_POSITIONSD_SET_WINDOW_SIZESD_SUSPEND_WINDOWSD_SYS_ERROR_MESSAGESD_TEMPLATE_MATCHSD_TOP_WINDOWSD_TURBO_FULLSD_TURBO_OFFSD_TURBO_ONSD_TURBO_PARTIALSD_TURBO_RESETSD_UNLOCK_USER_IDSD_USER_IDSD_RING_7_SYSCALL_OKSD_RING_7_SYSCALL_ERRORSD_DIRECT_OUTPUTp ,;WlSD_CLONE_WINDOWSD_RESTORE_WINDOW_FROM_CLONESD_SET_LINEDRAW_STYLESD_SET_BOX_FILL_STYLESD_GET_DELIMITER_TABLESD_SET_DELIMITER_TABLESD_EXTENDED_READ_CHARSD_ASK_QUESTIONWHO_LOCKED_IT? NAMTB  ?CBADDR   ?CBBADDR     ?CBPEEK     ?CBPOKE     ?CBSYS"  SD_ACTIVE_WINDOW*  SD_BITS_TO_DIGITS<  'SD_BYPASS_OFFN  .SD_BYPASS_ON \  5SD_CLI_CMD$j  ;SD_CLI_INTERFACE(v  DSD_COMMAND,  JSD_CONTROL 0 ! PSD_CREATE_WINDOW"4 # YSD_CREATE_WINDOW_NO_BOX$8 % eSD_CREATE_WINDOW_NO_INIT&< ' rSD_DIGITS_TO_BITS(@ ) {SD_DISABLE*D + SD_DISABLE_HOT_KEYS,H - SD_DISCARD_TYPE_AHEAD.L / SD_DISPLAY0P, 1 SD_DISPLAY_INTO_STRING2T8 3 SD_DRAW_BOX4XP  5 SD_DRAW_HLINE6\\ !7 SD_DRAW_VLINE8`j "9  SD_ENABLE:dx #; SD_ENABLE_HOT_KEYS<h $= SD_ERROR_MESSAGE>l %? SD_FLOAT_WINDOW@p &A  SD_FLUSHBt 'C SD_GET_ACCEPT_CURSOR_OFFSETDx (E SD_GET_ACCEPT_POSF| )G SD_GET_CONTROLH *I SD_GET_CONSOLE_DEVICE_NAMEJ +K SD_GET_CONSOLE_STATUSL ,M SD_GET_HOT_CALLED_FROM_NAMEN2 -O 'SD_GET_IMAGEPN .Q .SD_GET_IMAGE_BELOW_FLOATR\ /S ;SD_GET_NEXT_WINDOW_VIEWTv 0U GSD_GET_POSV 1W MSD_GET_TERMCAPSX 2Y USD_GET_USER_IDZ 3[ ]SD_GET_VALUE\ 4] dSD_GET_WINDOW_DESCRIPTOR^ 5_ qSD_GET_WINDOW_VIEW` 6a {SD_INPUT_MAILb 7c SD_INPUT_STRINGd 8e SD_LOAD_TIBf 9g  SD_MENUh  :i SD_MESSAGEj( ;k SD_MESSAGE_ONLYl4 <m SD_MOVE_WINDOW_DOWNnD =o SD_MOVE_WINDOW_LEFTpX >q SD_MOVE_WINDOW_RIGHTrl ?s SD_MOVE_WINDOW_UPt @u SD_NEW_WINDOWv Aw SD_NEW_WINDOW_NO_INITx By SD_NEW_WINDOW_VIEWz C{ SD_NOTEPAD| D} SD_OBTAIN_INPUT~ E SD_POP_UP_MENU F SD_PROC_PR G SD_PUT_VALUE H  SD_PUT_WINDOW_DESCRIPTOR I SD_PUT_WINDOW_VIEW, J  SD_READ_CHAR@ K 'SD_READ_CHAR_ONLYN L 0SD_READ_MAIL ` M  7SD_REDRAWn N `+I`, P`-Z`.i`/|`0`1`2 `3`4`5 `6`7`8 `9 `:%`;=`< O`=[`> l`? x`@`A`B`C`D`E`F `GSD_INNER_RING_NAMESD_SYSCALL_GATESD_ACTIVE_WINDOWSD_BITS_TO_DIGITSSD_BYPASS_OFFSD_BYPASS_ONSD_CLI_CMDSD_CLI_INTERFACESD_COMMANDSD_CONTROLSD_CREATE_WINDOWSD_CREATE_WINDOW_NO_BOXSD_CREATE_WINDOW_NO_INITSD_DIGITS_TO_BITSSD_DISABLESD_DISABLE_HOT_KEYSSD_DISCARD_TYPE_AHEADSD_DISPLAYSD_DISPLAY_INTO_STRINGSD_DRAW_BOXSD_DRAW_HLINESD_DRAW_VLINESD_ENABLESD_ENABLE_HOT_KEYSSD_ERROR_MESSAGESD_FLOAT_WINDOWSD_FLUSHSD_GET_ACCEPT_CURSOR_OFFSETSD_GET_ACCEPT_POSSD_GET_CONTROLSD_GET_CONSOLE_DEVICE_NAMESD_GET_CONSOLE_STATUSSD_GET_HOT_CALLED_FROM_NAMESD_GET_IMAGESD_GET_IMAGE_BELOW_FLOATSD_GET_NEXT_WINDOW_VIEWSD_GET_POSSD_GET_TERMCAPSSD_GET_USER_IDSD_GET_VALUESD_GET_WINDOW_DESCRIPTORSD_GET_WINDOW_VIEWSD_INPUT_MAILSD_INPUT_STRINGSD_LOAD_TIBSD_MENUSD_MESSAGESD_MESSAGE_ONLYSD_MOVE_WINDOW_DOWNSD_MOVE_WINDOW_LEFTSD_MOVE_WINDOW_RIGHTSD_MOVE_WINDOW_UPSD_NEW_WINDOWSD_NEW_WINDOW_NO_INITSD_NEW_WINDOW_VIEWSD_NOTEPADSD_OBTAIN_INPUTSD_POP_UP_MENUSD_PROC_PRSD_PUT_VALUESD_PUT_WINDOW_DESCRIPTORSD_PUT_WINDOW_VIEWSD_READ_CHARSD_READ_CHAR_ONLYSD_READ_MAILSD_REDRAWSD_REMOVE_WINDOWSD_RETURN_INPUTSD_SCROLL_WINDOW_DOWNSD_SCROLL_WINDOW_LEFTSD_SCROLL_WINDOW_RIGHTSD_SCROLL_WINDOW_UPSD_SEND_MAIL#`H`I`J`K `L!`M4`gJ`Og`Pu`Q`R`S`T`U `V `W `X `Y`Z`["`\ 3`]=`^Q`_h``x`a`b`c`d`e`f`h`i`j+`SD_SET_ACCEPT_CURSOR_OFFSETSD_SET_ACCEPT_LOWERCASESD_SET_ACCEPT_TIMEOUTSD_SET_ACCEPT_UPPERCASESD_SET_AND_LOCK_USER_IDSD_SET_CLI_INIT_CMDSD_SET_LOGOFF_INTERVALSD_SET_SECONDARY_PROGRAM_NAMESD_SET_USER_IDSD_SET_WINDOW_POSITIONSD_SET_WINDOW_SIZESD_SUSPEND_WINDOWSD_SYS_ERROR_MESSAGESD_TEMPLATE_MATCHSD_TOP_WINDOWSD_TURBO_FULLSD_TURBO_OFFSD_TURBO_ONSD_TURBO_PARTIALSD_TURBO_RESETSD_UNLOCK_USER_IDSD_USER_IDSD_RING_7_SYSCALL_OKSD_RING_7_SYSCALL_ERRORSD_DIRECT_OUTPUTSD_CLONE_WINDOWSD_RESTORE_WINDOW_FROM_CLONESD_SET_LINEDRAW_STYLESD_SET_BOX_FILL_STYLESD_GET_DELIMITER_TABLESD_SET_DELIMITER_TABLESD_EXTENDED_READ_CHARSD_ASK_QUESTIONWHO_LOCKED_IT?DUMMY_GATE_CALL SCREEN_DEMON_RING_6.PR .W$TT$n$_ APPLY_SD_UPDATE.CLI comment APPLY_SD_UPDATE.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- comment apply_sd_update.cli push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] defacl +,oware write write Screen Demon update installation write ================================ write push [!equal,,[!path :screen_demon_3.52]] write No SCREEN_DEMON_3.52 directory found in : - creating one. create/directory/max=999999999 :screen_demon_3.52 write [!end] write directory :screen_demon_3.52 directory/1=error/2=error :screen_demon_3.52 comment If there is no MEM subdirectory, create it [!equal,,[!path =mem]] write Creating MEM subdirectory in [!path =] create/directory/max=999999999 mem [!end] [!equal,,[!path =conlog]] write Creating CONLOG subdirectory in [!path =] create/directory/max=999999999 conlog [!end] comment Set proper ACL's for the Screen Demon subdirectories acl :screen_demon_3.52 [!user],oware +,re acl :screen_demon_3.52:(mem,conlog) +,ware acl/2=ignore :screen_demon_3.52:sd_post_office +,ware comment If standard Screen Demon inner ring program and shared library comment are not in the Screen Demon directory, create links for them [!equal,,[!path =SCREEN_DEMON_RING_6.PR]] [!nequal,,[!path SCREEN_DEMON_RING_6.PR]] ((write,),)create/link SCREEN_DEMON_RING_6.PR & [!path SCREEN_DEMON_RING_6.PR] [!end] [!end] [!equal,,[!path =SCREEN_DEMON.SL]] [!nequal,,[!path SCREEN_DEMON.SL]] ((write,),)create/link SCREEN_DEMON.SL [!path SCREEN_DEMON.SL] [!end] [!end] comment Now return to the original directory where this macro was executed pop comment Flag set if any update patches are installed var0 0 write Patching main library SCREEN_DEMON.LB... [!equal,,[!path LB.PATCH_LIST]] write ,,,,No patches required for SCREEN_DEMON.LB [!else] xeq patch/t=[!path SCREEN_DEMON.LB]/p=([LB.PATCH_LIST])/yes var0 1 [!end] write write Patching inner ring interface module SD_INTERFACE_IR.OB... [!equal,,[!path IR.PATCH_LIST]] write ,,,,No patches required for SD_INTERFACE_IR.OB [!else] x patch/t=[!path sd_interface_ir.ob]/p=([ir.patch_list])/yes var0 1 [!end] write write Patching CEO interface module SD_CEO_INTERFACE.OB... [!equal,,[!path CEO.PATCH_LIST]] write ,,,,No patches required for SD_CEO_INTERFACE.OB [!else] x patch/t=[!path sd_ceo_interface.ob]/p=([CEO.PATCH_LIST])/yes var0 1 [!end] write write Patching WordPerfect interface module SD_WP_SHELL.OB... [!equal,,[!path WP.PATCH_LIST]] write ,,,,No patches required for SD_WP_SHELL.OB [!else] x patch/t=[!path sd_wp_shell.ob]/p=([WP.PATCH_LIST])/yes var0 1 [!end] write write Patching Screen Demon registration program SD_REGISTER.PR... [!equal,,[!path REG.PATCH_LIST]] write ,,,,No patches required for SD_REGISTER.PR [!else] x patch/t=[!path sd_register.pr]/p=([REG.PATCH_LIST])/yes [!end] comment Rebuild things only if any patches were installed above [!nequal,0,[!var0]] write write Rebuilding SD_SPY.PR program... make_sd_spy write write Rebuilding SD_PLAY.PR program... make_sd_play write write Rebuilding default inner ring program SCREEN_DEMON_RING_6.PR... make_sd_inner_ring write write Rebuilding default shared library SCREEN_DEMON.SL... make_screen_demon.sl [!end] write write Screen Demon update installation complete! pop .W$Rb>$n$_|MAKE_PRISWI_CONFIG.CLI comment MAKE_PRISWI_CONFIG.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro creates a customized SD_PRISWI_CONFIG file which will be accessed at runtime by Screen Demon's SD_PRISWI print file redirector routine. [!end] push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] ((write x/s),x/s) & masm/ps=masm_32char.ps/o=SD_PRISWI_CONFIG%0/% & SD_PRISWI_DEFINES SD_PRISWI_CONFIG [!equal,(),([!string])] ((write x/s),x/s) link/supst/nbot=0/udf/elementsize=4 SD_PRISWI_CONFIG [!equal,(),([!string])] delete/2=ignore SD_PRISWI_CONFIG ((write renamed),rename) SD_PRISWI_CONFIG.PR SD_PRISWI_CONFIG ((write deleted),delete) SD_PRISWI_CONFIG.OB [!end] [!end] pop .W$Rb?$n$_MAKE_SCREEN_DEMON.VM.CLI comment MAKE_SCREEN_DEMON.VM.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,COMMENT] This macro creates a new SCREEN_DEMON_3.00.VM file. This file is used by Screen Demon revision 3.00 thru 3.52. It expects to find the console type assignments in the file SCREEN_DEMON.CONTYPES [!end] push prompt pop directory/1=error/2=error :screen_demon_3.52 searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] defacl +,ware comment If there is no MEM subdirectory, create it [!equal,,[!path =mem]] write No [!path =]:MEM subdirectory found - creating one. create/directory/max=999999999 mem [!end] comment If there is no CONLOG subdirectory, create it [!equal,,[!path =conlog]] write No [!path =]:CONLOG subdirectory found - creating one. create/directory/max=999999999 conlog [!end] write x/s masm/ps=masm_32char.ps/o=SCREEN_DEMON_3.00.VM & SD_VM_DEFINES SD_TERMCAPS SCREEN_DEMON.CONTYPES [!equal,(),([!string])] x/s link/udf/supst/overwrite/nbot=512/elementsize=20 SCREEN_DEMON_3.00.VM [!equal,(),([!string])] delete/2=ignore SCREEN_DEMON_3.00.VM.bu rename/2=ignore SCREEN_DEMON_3.00.VM<,.bu> rename SCREEN_DEMON_3.00.VM<.pr,> acl SCREEN_DEMON_3.00.VM +,WARE delete/2=ignore SCREEN_DEMON_3.00.VM. write write SCREEN_DEMON_3.00.VM is ready for use write [!end] [!end] pop .W$Rb@$n$_ MAKE_SD_B32_USERSUBS.CLI comment MAKE_SD_B32_USERSUBS.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro creates the Screen Demon interface module for B32. Usage: MAKE_SD_B32_USERSUBS{/O=modulename}{/L=listfile} {other source files} The interface module should be linked with the B32 interpreter to allow B32 programs to call Screen Demon routines. The filename of this module can be specified with the /O= global switch. If no /O= global switch is given, the filename will be SD_B32_USERSUBS.OB This macro will also create a text file containing a list of all Screen Demon routines and their corresponding UCALL numbers. The name for this file can be specified with the /L= global switch. If no /L= switch is given, the filename will be SD_B32_UCALLS.LS Additional global switches for MASM can be included if needed. Additional source files can be included if desired as command line arguments. If present, these files must end with .EOF, not .END!!! NOTE: The MASM phase can be skipped if just the UCALL listing is desired by including the /NOMASM global switch. The UCALL listing phase can be suppressed by including the /NOLIST global switch. [!end] push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] string/k [!equal,,%0/nomasm%] ((write x/s),x/s) & masm/ps=masm_32char.ps/o=[!equal,,%0/o=%]SD_B32_USERSUBS[!else]%0/o=%[!end]%0\nolist% & SD_B32_DEFINES SD_B32_UCALLS %1-% SD_B32_USERSUBS [!equal,(),([!string])] write [!equal,,%0/o=%]SD_B32_USERSUBS[!else]%0/o=%[!end].OB created write [!end] [!end] comment If the MASM was successful, create the SCREEN DEMON UCALL listing comment by executing the UCALL declarations file as a CLI macro. [!equal,(),([!string]%0/nolist%)] write Building Screen Demon UCALL listing file... string [!nequal,,%0/l=%]%0/l=%[!else]SD_B32_UCALLS.LS[!end] delete/2=ignore [!string] write/l=[!string] Screen Demon UCALL Routines for B32 write/l=[!string] write/l=[!string] Screen Demon routine name[!ascii 11]UCALL[!ascii 11]Argument types delete/2=ignore ?<,?rtn>.tmp write/l=?narrow.tmp num-expr[!ascii 46] write/l=?wide.tmp num-expr[!ascii 46] write/l=?string.tmp string-expr[!ascii 46] write/l=?narrow?rtn.tmp num-var[!ascii 46] write/l=?wide?rtn.tmp num-var[!ascii 46] write/l=?string?rtn.tmp string-var[!ascii 46] comment Initialize beginning SD UCALL number var0 1 [sd_b32_ucalls.sr] delete/2=ignore ?<,?rtn>.tmp [!end] pop .W$RbE$n$_*MAKE_SD_INNER_RING.CLI comment MAKE_SD_INNER_RING.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro rebuilds the SCREEN DEMON Inner Ring subroutine program. Optional global switches: /RING=ring# Specifies the ring in which the Screen Demon inner ring program will be loaded. The default is ring 6. /CONFIG=filename Specifies an alternate configuration file to use instead of SD_SL_CONFIG. /O=inner_ring_filename Specifies an alternate filename to use for the inner ring program instead of SCREEN_DEMON_RING_.PR, where is the ring number specified by the /RING= switch. /COB32 Indicates that 32-bit VS/COBOL programs are also being linked into the inner ring program, and so will require the COBOL.LB and LANG_RT libaries. /PRISWI Causes the Printer Switcher routine to be linked with the inner ring program. The SD_PRISWI_CONFIG file must be available at runtime. /LANG_RT Indicates that the Common Language Runtime library is to be linked with the inner ring program. This switch is not necessary if the /COB32 switch is specified. /PID_SIZE= Allows a type other than HYBRID to be specified for the inner ring program. This may be necessary on AOS/VS II systems where an ANYPID type program cannot ringload a HYBRID. In that case, use /PID_SIZE=ANYPID when creating the inner ring program if the ring 7 program that will be using the inner ring program is an ANYPID type. /GATES=gate-array-module-name Specifies an alternate gate array definition .OB module that declares the gates which will be used to access the new inner ring program. A gate array module is created using the MAKE_SD_GATES.CLI macro. If this switch is not supplied, the default is to use _GATES.OB if it exists; otherwise, the default SCREEN_DEMON_RING_6_GATES.OB will be used. /WP Causes the interface routines for WordPerfect Library/Office Shell to be linked with the new inner ring program. The SHELLCOM.32.OB file provided by WordPerfect must be available. /CEO Includes an interface to CEO Mail and to the CEO Interrupt Menu. This interface uses routines from CEO Toolkit, which must be available on your system. /NOVM Causes the resulting inner ring program to run outside of the SCREEN_DEMON_3.00.VM file. This means that programs using this inner ring program will not be visible to SD_SPY, and will be unable to pass the screen image across program calls. /NOMODELID Prevents programs that use this inner ring program from querying the terminal for its model id on startup. The program will assume it is running on a D210 terminal. This switch is often used with /NOVM. Additional object modules may be included by listing them on the command line. Optional patches will be installed if they are placed in a file called SCREEN_DEMON.PAT. See the SCREEN_DEMON.OPTIONAL.PAT file for instructions on creating a SCREEN_DEMON.PAT file. Also, all available fix patches, as specified in the NONICX.PATCH_LIST file, will be installed. [!end] push prompt pop Comment Adjust the following SEARCHLIST command to fit your file system: searchlist [!searchlist]& & [!nequal,,%0/cob32/infos/lang_rt%]& [!nequal,,%0/cob32%]& :util:cobol& [!end]& [!nequal,,%0/cob32/lang_rt%]& :util:lang_rt& [!end]& [!end]& & [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] Comment If required switches were not supplied, recurse with defaults [!equal,,%0/$setup%] %0\%%0\config\o\ring%/$setup& & /config=[!equal,,%0/config=%]SD_SL_CONFIG[!else]%0/config=%[!end]& & /ring=[!equal,,%0/ring=%]6[!else]%0/ring=%[!end]& & /o=[!equal,,%0/o=%][!path =]:SCREEN_DEMON_RING_[!equal,,%0/ring=%]6[!else]%0/ring=%[!end]& [!else][!equal,,[!edirectory %0/o=%]][!path =][!else][!path [!edirectory %0/o=%]][!end]:[!efile %0/o=%][!end] %-% [!else] [!equal,,[!path %0/config=%.OB]] write ERROR: cannot find configuration file %0/config=%.OB [!else] write write ,,,,Using configuration file [!path %0/config=%.OB] write ,,,,,,,,,to create %0/o=%.PR write ((write x/s),x/s) & link/stacksize=8192/tasks=32& /o=[!edirectory %0/o=%]:?[!pid]_sd_ir& [!equal,,%0/mtop=%]/mtop=1[!end]& [!equal,,%0/pid_size=%]/pid_size=[!equal,[!system],AOS/VS]HYBRID[!else]ANYPID[!end][!end]& %0\$setup\o\config\gates\priswi\cob32\infos\lang_rt\ceo\wp% & & [!nequal,,%0/gates=%]& %0/gates=%& [!else][!nequal,,[!path %0/o=%_GATES.OB]]& %0/o=%_GATES& [!else][!nequal,,[!path [!ename %0/o=%]_GATES.OB]]& [!ename %0/o=%]_GATES& [!else]& screen_demon_ring_6_gates& [!end][!end][!end]& & %0/config=% & & %1-% & & sd_interface_ir& & [!nequal,,%0/wp%]& sd_wp_shell& [!nequal,,[!path :wpoffice:wpoexe:shellcom.32.ob]]& :wpoffice:wpoexe:shellcom.32& [!else][!nequal,,[!path :wpml:shellcom.32.ob]]& :wpml:shellcom.32& [!else]& shellcom.32.ob& [!end][!end]& [!end]& & [!nequal,,%0/ceo%]& sd_ceo_interface& :util:ceo_dir:it_lib.lb/multiple& [!end]& & [!nequal,,%0/priswi%]& sd_priswi& [!end]& & [!nequal,,%0/novm%]& sd_init_no_vm& [!equal,,%0/nomodelid%]& sd_no_vm_termcaps_tbl& [!end]& [!end]& & [!nequal,,%0/nomodelid%]& sd_no_model_id& [!end]& & screen_demon.lb& & [!nequal,,%0/cob32%]& cfalt ffalt cobol.lb& [!end]& & [!nequal,,%0/infos%]& [!equal,,%0/infos=%]& icall32& [!else]& dummyicall32& [!end]& [!end]& & [!nequal,,%0/cob32/lang_rt%]& .STKSIZE/value=8192& multitasking no_queued_task_mgr inner.lb lang_rt.lb& [!else]& sd_no_lang_rt& [!end] [!nequal,(),([!string])] write [!ascii 207] write Errors prevent creation of new inner ring program! [!else] comment Install optional patches to the inner ring program [!nequal,,[!path SCREEN_DEMON.PAT]] x patch/t=[!edirectory %0/o=%]:?[!pid]_sd_ir.PR/p=SCREEN_DEMON.PAT/yes [!end] comment Install fix patches if available [!nequal,,[!path NONICX.PATCH_LIST]] x patch/t=[!edirectory %0/o=%]:?[!pid]_sd_ir.PR/p=([NONICX.PATCH_LIST])/yes [!end] [!equal,,comment] Now that the new inner ring program is ready for use, rename it to the desired name. Waiting until this point prevents users from accessing a partially-patched version. [!end] delete/2=ignore [!edirectory %0/o=%]:[!efile %0/o=%.PR] delete/2=ignore [!edirectory %0/o=%]:[!efile %0/o=%.ST] delete/2=ignore [!edirectory %0/o=%]:[!efile %0/o=%.PR.PH] write Renaming [!path [!edirectory %0/o=%]:?[!pid]_sd_ir.PR]& to [!efile %0/o=%.PR] rename [!path [!edirectory %0/o=%]:?[!pid]_sd_ir.PR]& [!efile %0/o=%.PR] write Renaming [!path [!edirectory %0/o=%]:?[!pid]_sd_ir.ST]& to [!efile %0/o=%.ST] rename [!path [!edirectory %0/o=%]:?[!pid]_sd_ir.ST]& [!efile %0/o=%.ST] [!nequal,,[!path [!edirectory %0/o=%]:?[!pid]_sd_ir.PR.PH]] write Renaming [!path [!edirectory %0/o=%]:?[!pid]_sd_ir.PR.PH]& to [!efile %0/o=%.PR.PH] rename [!path [!edirectory %0/o=%]:?[!pid]_sd_ir.PR.PH]& [!efile %0/o=%.PR.PH] [!end] write write [!path %0/o=%.PR] is now ready for use [!end] [!end] [!end] pop .W$RbF%?H$_-MAKE_SD_PLAY.CLI -comment MAKE_SD_PLAY.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro creates a new version of the SD_PLAY program, so that its Screen Demon configuration options can be changed. Optional global switches: /CONFIG=filename specifies an alternate configuration file to use instead of SD_SL_CONFIG. /O=programname specifies an alternate program name to create instead of the default name SD_PLAY.PR /COB32 indicates that 32-bit VS/COBOL programs are also being linked with SD_PLAY, and so will require the COBOL.LB and LANG_RT libaries. /LANG_RT indicates that the Common Language Runtime library is to be linked with the new SD_PLAY program. This switch is not necessary if the /COB32 switch is specified. The /PRISWI global switch causes the Printer Switcher routine to be linked with the new version of SD_PLAY. The SD_PRISWI_CONFIG file must be available at runtime. /WP causes the interface routines for WordPerfect Library/Office Shell to be linked with the new SD_PLAY program. The SHELLCOM.32.OB file provided by WordPerfect must be available at link time. /CEO includes an interface to CEO Mail and to the CEO Interrupt Menu. This interface uses routines from CEO Toolkit, which must be available on your system at link time. /NOMODELID prevents the resulting Play from querying the terminal for its model id on startup. Play will assume it is running on a D210 terminal. Additional object modules may be included by listing them on the command line. Optional patches will be installed if they are placed in a file called SCREEN_DEMON.PAT. See the SCREEN_DEMON.OPTIONAL.PAT file for instructions on creating a SCREEN_DEMON.PAT file. Also, all available fix patches, as specified in the NONICX.PATCH_LIST file, will be installed. [!end] push prompt pop Comment Adjust the following SEARCHLIST command to fit your file system: searchlist [!searchlist]& & [!nequal,,%0/cob32/infos/ceo/lang_rt%] [!nequal,,%0/cob32%]& :util:cobol& [!end]& [!nequal,,%0/cob32/ceo/lang_rt%]& :util:lang_rt& [!end]& [!end]& & [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] [!equal,,%0/config=%] %0\%%0\config%/config=SD_SL_CONFIG %1-% [!else][!equal,,%0/o=%] %0\%%0\o%/o=SD_PLAY %1-% [!else] [!equal,,[!path %0/config=%.OB]] write ERROR: cannot find configuration file %0/config=%.OB [!else] write write ,,,,Using configuration file [!path %0/config=%.OB] write ,,,,,,,,,to create %0/o=%.PR write (write,x/s) link/stack=20000/tasks=6& [!nequal,,%0/cob32/ceo/lang_rt%]/mtop=1[!end]& %0\config\priswi\wp\ceo\cob32\infos\lang_rt% & sd_play/start sd_play_help_screen & & %0/config=%& & %1-%& & [!nequal,,%0/wp%]& sd_wp_shell& [!nequal,,[!path :wpoffice:wpoexe:shellcom.32.ob]]& :wpoffice:wpoexe:shellcom.32& [!else][!nequal,,[!path :wpml:shellcom.32.ob]]& :wpml:shellcom.32& [!else]& shellcom.32.ob& [!end][!end]& [!end]& & [!nequal,,%0/ceo%]& sd_ceo_interface& :util:ceo_dir:it_lib.lb/multiple& [!end]& & [!nequal,,%0/priswi%]& sd_priswi& [!end]& & [!nequal,,%0/nomodelid%]& sd_no_model_id& [!end]& & screen_demon.lb& & [!nequal,,%0/cob32%]& cfalt ffalt cobol.lb& [!end]& & [!nequal,,%0/infos%]& [!equal,,%0/infos=%]& icall32& [!else]& dummyicall32& [!end]& [!end]& & [!nequal,,%0/cob32/ceo/lang_rt%]& multitasking no_queued_task_mgr lang_rt.lb& [!else]& sd_no_lang_rt& [!end] [!equal,(),([!string])] comment Install optional patches to the new SD_PLAY [!nequal,,[!path SCREEN_DEMON.PAT]] x patch/t==%0/o=%.PR/p=SCREEN_DEMON.PAT/yes [!end] comment Install fix patches if available [!nequal,,[!path NONICX.PATCH_LIST]] x patch/t==%0/o=%.PR/p=([NONICX.PATCH_LIST])/yes [!end] [!nequal,,[!path PLAY.PATCH_LIST]] x patch/t==%0/o=%.PR/p=([SPY.PATCH_LIST])/yes [!end] [!end] [!end] [!end][!end] pop .W$^$n$_aSD_B32_UCALLS.SR aSD?UCALL SD_ACTIVE_WINDOW,WIDE,WIDE SD?UCALL SD_ACTIVE_WINDOW,WIDE?RTN SD?UCALL SD_CLI_CMD,STRING SD?UCALL SD_CLI_INTERFACE SD?UCALL SD_COMMAND SD?UCALL SD_CONTROL,NARROW SD?UCALL SD_CREATE_WINDOW SD?UCALL SD_CREATE_WINDOW,NARROW,NARROW,NARROW,NARROW SD?UCALL SD_CREATE_WINDOW,STRING?RTN SD?UCALL SD_CREATE_WINDOW,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_CREATE_WINDOW,STRING?RTN,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_CREATE_WINDOW_NO_INIT SD?UCALL SD_CREATE_WINDOW_NO_INIT,NARROW,NARROW,NARROW,NARROW SD?UCALL SD_CREATE_WINDOW_NO_INIT,STRING?RTN SD?UCALL SD_CREATE_WINDOW_NO_INIT,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_CREATE_WINDOW_NO_INIT,STRING?RTN,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_DISABLE SD?UCALL SD_DISPLAY,STRING SD?UCALL SD_DISPLAY_INTO_STRING,STRING,STRING,STRING SD?UCALL SD_DRAW_BOX,NARROW,NARROW,NARROW,NARROW SD?UCALL SD_DRAW_BOX,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_DRAW_HLINE,NARROW,NARROW,NARROW SD?UCALL SD_DRAW_VLINE,NARROW,NARROW,NARROW SD?UCALL SD_ENABLE SD?UCALL SD_ERROR_MESSAGE,STRING SD?UCALL SD_ERROR_MESSAGE,STRING,NARROW,NARROW SD?UCALL SD_FLOAT_WINDOW SD?UCALL SD_FLOAT_WINDOW,WIDE SD?UCALL SD_FLUSH SD?UCALL SD_GET_CONTROL,NARROW?RTN SD?UCALL SD_GET_HOT_CALLED_FROM_NAME,STRING?RTN SD?UCALL SD_GET_IMAGE,STRING?RTN SD?UCALL SD_GET_NEXT_WINDOW_VIEW,STRING?RTN SD?UCALL SD_GET_NEXT_WINDOW_VIEW,STRING?RTN,WIDE SD?UCALL SD_GET_NEXT_WINDOW_VIEW,STRING?RTN,WIDE?RTN,WIDE SD?UCALL SD_GET_POS,NARROW SD?UCALL SD_GET_USER_ID,STRING?RTN SD?UCALL SD_GET_VALUE,STRING,STRING?RTN,NARROW,NARROW?RTN SD?UCALL SD_GET_WINDOW_DESCRIPTOR,STRING?RTN SD?UCALL SD_GET_WINDOW_DESCRIPTOR,STRING?RTN,WIDE SD?UCALL SD_GET_WINDOW_VIEW,STRING?RTN SD?UCALL SD_GET_WINDOW_VIEW,STRING?RTN,WIDE?RTN SD?UCALL SD_GET_WINDOW_VIEW,STRING?RTN,WIDE?RTN,WIDE SD?UCALL SD_INPUT_MAIL SD?UCALL SD_INPUT_STRING,STRING SD?UCALL SD_MENU,STRING SD?UCALL SD_MENU,STRING,STRING SD?UCALL SD_MENU,STRING,STRING,STRING SD?UCALL SD_MENU,STRING,STRING,STRING,STRING SD?UCALL SD_MENU,STRING,STRING,STRING,STRING,STRING SD?UCALL SD_MENU,STRING,STRING,STRING,STRING,STRING,STRING SD?UCALL SD_MESSAGE,STRING SD?UCALL SD_MESSAGE,STRING,NARROW,NARROW SD?UCALL SD_MESSAGE,STRING,NARROW,NARROW,STRING SD?UCALL SD_MOVE_WINDOW_DOWN SD?UCALL SD_MOVE_WINDOW_DOWN,NARROW SD?UCALL SD_MOVE_WINDOW_LEFT SD?UCALL SD_MOVE_WINDOW_LEFT,NARROW SD?UCALL SD_MOVE_WINDOW_RIGHT SD?UCALL SD_MOVE_WINDOW_RIGHT,NARROW SD?UCALL SD_MOVE_WINDOW_UP SD?UCALL SD_MOVE_WINDOW_UP,NARROW SD?UCALL SD_NEW_WINDOW SD?UCALL SD_NEW_WINDOW,NARROW,NARROW,NARROW,NARROW SD?UCALL SD_NEW_WINDOW,STRING?RTN SD?UCALL SD_NEW_WINDOW,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_NEW_WINDOW,STRING?RTN,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_NEW_WINDOW_NO_INIT SD?UCALL SD_NEW_WINDOW_NO_INIT,NARROW,NARROW,NARROW,NARROW SD?UCALL SD_NEW_WINDOW_NO_INIT,STRING?RTN SD?UCALL SD_NEW_WINDOW_NO_INIT,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_NEW_WINDOW_NO_INIT,STRING?RTN,NARROW,NARROW,NARROW,NARROW,STRING SD?UCALL SD_NEW_WINDOW_VIEW,STRING?RTN,WIDE SD?UCALL SD_NOTEPAD SD?UCALL SD_NOTEPAD,STRING SD?UCALL SD_POP_UP_MENU,STRING SD?UCALL SD_POP_UP_MENU,STRING,STRING SD?UCALL SD_PROC_PR,STRING SD?UCALL SD_PUT_VALUE,STRING,STRING,NARROW SD?UCALL SD_PUT_WINDOW_DESCRIPTOR,STRING?RTN SD?UCALL SD_PUT_WINDOW_DESCRIPTOR,STRING?RTN,WIDE SD?UCALL SD_PUT_WINDOW_VIEW,STRING?RTN,WIDE SD?UCALL SD_READ_CHAR,STRING?RTN SD?UCALL SD_READ_CHAR,STRING?RTN,NARROW SD?UCALL SD_READ_CHAR_ONLY,STRING?RTN SD?UCALL SD_READ_CHAR_ONLY,STRING?RTN,NARROW SD?UCALL SD_READ_MAIL SD?UCALL SD_REDRAW SD?UCALL SD_REMOVE_WINDOW SD?UCALL SD_REMOVE_WINDOW,WIDE SD?UCALL SD_RETURN_INPUT,STRING?RTN,NARROW SD?UCALL SD_SCROLL_WINDOW_DOWN SD?UCALL SD_SCROLL_WINDOW_DOWN,NARROW SD?UCALL SD_SCROLL_WINDOW_LEFT SD?UCALL SD_SCROLL_WINDOW_LEFT,NARROW SD?UCALL SD_SCROLL_WINDOW_RIGHT SD?UCALL SD_SCROLL_WINDOW_RIGHT,NARROW SD?UCALL SD_SCROLL_WINDOW_UP SD?UCALL SD_SCROLL_WINDOW_UP,NARROW SD?UCALL SD_SEND_MAIL,STRING,STRING SD?UCALL SD_SEND_MAIL,STRING,STRING,STRING SD?UCALL SD_SEND_MAIL,STRING,STRING,STRING,STRING SD?UCALL SD_SET_ACCEPT_LOWERCASE SD?UCALL SD_SET_ACCEPT_TIMEOUT,NARROW SD?UCALL SD_SET_ACCEPT_UPPERCASE SD?UCALL SD_SET_AND_LOCK_USER_ID,STRING SD?UCALL SD_SET_CLI_INIT_CMD SD?UCALL SD_SET_CLI_INIT_CMD,STRING SD?UCALL SD_SET_USER_ID,STRING SD?UCALL SD_SET_WINDOW_SIZE,NARROW,NARROW SD?UCALL SD_SUSPEND_WINDOW SD?UCALL SD_SUSPEND_WINDOW,WIDE SD?UCALL SD_SYS_ERROR_MESSAGE,NARROW SD?UCALL SD_SYS_ERROR_MESSAGE,NARROW,STRING SD?UCALL SD_SYS_ERROR_MESSAGE,NARROW,STRING,NARROW,NARROW SD?UCALL SD_TOP_WINDOW SD?UCALL SD_TOP_WINDOW,WIDE SD?UCALL SD_TURBO_FULL SD?UCALL SD_TURBO_OFF SD?UCALL SD_TURBO_ON SD?UCALL SD_TURBO_PARTIAL SD?UCALL SD_UNLOCK_USER_ID .W$RbQ%3uA$_ SD_CLINK.CLI comment SD_CLINK.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,comment] This macro links a 32-bit COBOL program with Screen Demon. All standard CLINK switches are supported. Following a successful link, if optional Screen Demon patches exist, they will be applied to the new program. /SDRING= or /SDRING= Causes the program to be linked so that it loads the specified SCREEN DEMON inner ring program, instead of linking the SCREEN DEMON routines into the COBOL program. If just a is given, the inner ring CALLS module name will be SCREEN_DEMON_RING__CALLS.OB Inner ring CALLS modules are created using MAKE_SD_GATES.CLI /SHARED If /SDRING= is not specified, /SHARED causes the program to be linked so that it uses the shared library version of SCREEN DEMON in addition to the shared libraries for COBOL and LANG_RT. If /SDRING= was also included, the program will run SCREEN DEMON in the specified inner ring, but it will still use the COBOL and LANG_RT shared libraries. /CONFIG=config-filename Specifies that the indicated configuration file should be used instead of the default SD_CONFIG.OB file. /PARTURBO Causes the program start up in Partial Turbo mode rather than Full Turbo. Partial Turbo provides the continual screen updates that occur without Turbo, but still transmits only the characters that change. Partial Turbo is much slower than Full Turbo, however, because screen writes are not buffered, thus requiring more system calls. /NOTURBO Forces the program to start with Turbo Display mode completely off. Use this switch only when absolutely necessary. It can disrupt SCREEN DEMON's windowing environment. Try the /PARTURBO switch instead. /PRISWI Causes the Printer Switcher routine to be linked with the COBOL program. Do not use this switch with the /SHARED or /SDRING switches. The SD_PRISWI_CONFIG file must be available at runtime. /WP Causes the interface routines for WordPerfect Library/Office Shell to be linked with the program. The SHELLCOM.32.OB file provided by WordPerfect must be available. /CEO Includes an interface to CEO Mail and to the CEO Interrupt Menu. This interface uses routines from CEO Toolkit, which must be available on your system. /NOVM Causes the resulting program to run outside of the SCREEN_DEMON_3.00.VM file. This means that it will not be visible to SD_SPY, but will also be unable to pass the screen image across program calls. /NOMODELID Prevents the resulting program from querying the terminal for its model id on startup. The program will assume it is running on a D210 terminal. This switch is often used with /NOVM. Optional patches will be installed if they are placed in a file called SCREEN_DEMON.PAT. See the SCREEN_DEMON.OPTIONAL.PAT file for instructions on creating a SCREEN_DEMON.PAT file. [!end] push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] write string/k [!equal,,%0/shared/sdring=%] [!equal,,%0/config=%] [!equal,,[!path SD_CONFIG.OB]] write ,,,,Configuration file SD_CONFIG.OB not found! string ERROR [!else] write ,,,,Using configuration file [!path SD_CONFIG.OB] [!end] [!else] [!equal,,[!path %0/config=%.OB]] write ,,,,Configuration file %0/config=%.OB not found! string ERROR [!else] write ,,,,Using configuration file [!path %0/config=%.OB] [!end] [!end] write [!end] [!equal,,[!string]] ((write,),)CLINK/s%0\s\parturbo\noturbo\config\priswi\ceo\wp\sdring% & & %1%& & [!nequal,,%0/sdring=%]& %2-% & & [!equal,6,%0/sdring=%]& SCREEN_DEMON_RING_6_CALLS& [!else][!equal,5,%0/sdring=%]& SCREEN_DEMON_RING_5_CALLS& [!else][!equal,4,%0/sdring=%]& SCREEN_DEMON_RING_4_CALLS& [!else]& %0/sdring=%& [!end][!end][!end]& SD_INNER_RING_INTF& & [!else]& [!equal,,%0/shared%]& [!nequal,,%0/config=%]& %0/config=%& [!else]& sd_config& [!end]& [!end]& & %2-% & & sd_cobol32_intf & & [!nequal,,%0/wp%]& sd_wp_shell& [!nequal,,[!path :wpoffice:wpoexe:shellcom.32.ob]]& :wpoffice:wpoexe:shellcom.32& [!else][!nequal,,[!path :wpml:shellcom.32.ob]]& :wpml:shellcom.32& [!else]& shellcom.32.ob& [!end][!end]& [!end]& & [!nequal,,%0/ceo%]& [!nequal,,%0/shared%]& sd_ceo_interface_rtd& [!else]& sd_ceo_interface& [!end]& :util:ceo_dir:it_lib.lb/multiple& [!end]& & [!equal,,%0/shared%]& [!nequal,,%0/priswi%]& sd_priswi& [!end]& [!end]& & [!nequal,,%0/novm%]& sd_init_no_vm& [!equal,,%0/nomodelid%]& sd_no_vm_termcaps_tbl& [!end]& [!end]& & [!nequal,,%0/nomodelid%]& sd_no_model_id& [!end]& & [!nequal,,%0/shared%]shared_[!end]screen_demon.lb & [!end]& [!end] [!equal,,comment] NOTE: The standard CLINK macro supplied by DG discards the results returned by LINK. To have these results passed back to this macro, the PUSH and POP done in CLINK.CLI must be removed. Then, if the link has errors, this macro will not attempt to install any patches. [!end] comment If the link was successful (or unknown), install applicable patches comment unless /SHARED or /SDRING switches were used. [!equal,(),([!string]%0/shared/sdring=%)] comment Install special anti-Turbo patches to the new program [!nequal,,%0/PARTURBO%] x patch/t=%1%.PR/p=PAR_TURBO.PAT/yes [!else][!nequal,,%0/NOTURBO%] x patch/t=%1%.PR/p=NO_TURBO.PAT/yes [!end][!end] comment Install user-selected patches to the new program [!nequal,,[!path SCREEN_DEMON.PAT]] x patch/t=%1%.pr/p=SCREEN_DEMON.PAT/yes [!end] comment Install fix patches if available [!nequal,,[!path NONICX.PATCH_LIST]] x patch/t=%1%.pr/p=([NONICX.PATCH_LIST])/yes [!end] [!end] pop .W$RbT$n$_͘SD_CONFIG_DEFINES.SR  .TITLE SD_CONFIG ; Definitions for SCREEN DEMON revision 3.52.01 configuration files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .NOLOC 1 ;List 'real' lines only .ESC ;Kill MASM's escape character .RDX 10. ;Set decimal mode .ENABLE WORD,PCREL ;Data placement mode is by word, PC-relative ;Revision of this configuration file is 3.52.01 .DUSR SD_CONFIG_REV_VALUE = (3)S7!(50)S15!(01)S23 ;Provides definitions for the function key codes ; that require intervention by SCREEN DEMON after an ACCEPT. ;Certain function keys cause a special action to occur, such as redrawing ; the screen. Then the ACCEPT is restarted at the beginning. ;Also, keys that are normally inaccessible to COBOL, such as the arrow keys ; and C* function keys, can be translated to specified standard function ; key codes. ;External variables in this module .ENT SD_CONFIG_REV .ENT HOT_KEY_ASSIGNMENTS_TABLE .ENT HOT_KEY_DEFS_TABLE .ENT KEY_TRANSLATION_TABLE .ENT HOT_DELIMITER_TABLE .ENT HOT_ESCAPE_KEY .ENT HOT_MENU_ITEMS, HOT_MENU_ITEM_NUMS .ENT INPUT_FEEDBACK_STRING, INPUT_FEEDBACK_STRING_SIZE .ENT MAX_SCROLL_BEFORE_FLUSH .ENT MAIL_INDICATOR, MAIL_INDICATOR_SIZE .ENT MAIL_VIEW_LINE, MAIL_VIEW_COLUMN .ENT MAIL_VIEW_HEIGHT, MAIL_VIEW_WIDTH .ENT SD_REMOTE_VIEW_INDICATOR .ENT SD_REMOTE_VIEW_INDICATOR_SIZE .ENT SD_REMOTE_VIEW_INDICATOR_LINE .ENT SD_REMOTE_VIEW_INDICATOR_COLUMN .ENT SD_REMOTE_VIEW_INDICATOR_HEIGHT .ENT SD_REMOTE_VIEW_INDICATOR_WIDTH .ENT SD_REMOTE_INPUT_INDICATOR .ENT SD_REMOTE_INPUT_INDICATOR_SIZE .ENT SD_REMOTE_INPUT_INDICATOR_LINE .ENT SD_REMOTE_INPUT_INDICATOR_COLUMN .ENT SD_REMOTE_INPUT_INDICATOR_HEIGHT .ENT SD_REMOTE_INPUT_INDICATOR_WIDTH .ENT CEO_MAIL_VIEW_LINE, CEO_MAIL_VIEW_COLUMN .ENT PERIODIC_INTERVAL .ENT SD_SCREEN_SAVER_INTERVAL .ENT SD_HOT_TIMEOUT_INTERVAL .ENT LOGOFF_INTERVAL .ENT LOGOFF_OK_AFTER_TIME, LOGOFF_OK_BEFORE_TIME .ENT FLUSH_INTERVAL .ENT PAD_PATH_PREFIX, PAD_PATH_SUFFIX .ENT MAX_CONLOG_SIZE .ENT SD_SPECIAL_PROGRAMS_LIST .ENT CHARACTER_SET_PALETTE .ENT SD_WP_SHELL_CLI_LETTER .ENT SD_MAIN_MENU_TITLE, SD_MAIN_MENU_FOOTER .ENT SD_NOTEPAD_TITLE .ENT SDSCREENPRINT_TITLE .ENT SDCALCULATOR_TITLE_ONE, SDCALCULATOR_TITLE_TWO .ENT SDCALENDAR_TITLE .ENT SD_READ_MAIL_TITLE .ENT SD_INPUT_MAIL_TITLE .ENT SD_COMMAND_TITLE .ENT SD_DEFAULT_CLI_INIT_CMD .ENT SD_CLI_PATHNAME .ENT SDSCREENPRINT_OUTPUT_NAME .ENT SDSCREENPRINT_ASK_OUTPUT_NAME .ENT SD_READ_MAIL_OUTPUT_NAME .ENT SD_READ_MAIL_ASK_OUTPUT_NAME .ENT SD_READ_MAIL_AUTO_DELETE .ENT SD_IMMEDIATE_MAIL_DELIVERY .ENT SD_MEM_INITIAL_AREA .ENT SD_CONFIG_FLAGS .ENT SD_CONSOLE_INTERRUPT_HANDLING .ENT SD_DEFAULT_CURSOR_TYPE .ENT SD_DEFAULT_SCROLL_RATE .ENT SD_DEFAULT_7_OR_8_BIT_MODE .ENT SD_DEFAULT_KEYBD_LANG .ENT SD_DEFAULT_PRIMARY_CHAR_SET .ENT SD_DEFAULT_ALTERNATE_CHAR_SET .ENT SD_CONFIG_TURBO_LEVEL .ENT SD_CONFIG_NRM_OFF .ENT SD_FLOAT_CLOCK_LINE, SD_FLOAT_CLOCK_COLUMN .ENT SD_FLOAT_CLOCK_WIDTH, SD_FLOAT_CLOCK_HEIGHT .ENT SD_FLOAT_CLOCK_FORMAT, SD_FLOAT_CLOCK_FORMAT_LEN .ENT SD_MONTH_NAMES, SD_WEEKDAY_NAMES .ENT SD_INPUT_HISTORY_SIZE .ENT SD_SCROLLBACK_BUFFER_SIZE .ENT SD_GET_IMAGE_DEFAULTS .ENT SD_NO_LOGOFF_USERS .ENT SD_SHCON_IPC_HANDLING .ENT SD_SHCON_IPC_IGNORE_PIDS .ENT SD_ALT_EXIT_KEY .ENT SD_MODEM_DISCONNECT_KEY .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 SD_CONFIG_REV: .DWORD SD_CONFIG_REV_VALUE ; Macros to set up byte tables (modified version of bit macros in c:csym.sr) ; Usage: BYTE?INIT <# bytes> { } ; default = 0 ; BYTE?PUT ; BYTE?PUT ; ... ; BYTE?GEN ; ; Symbols set: ??S, ??Y.000 - ??Y.377, ??X, ??I .MACRO BYTE?INIT ; Byte table initialization ??S = ((^1)+3.)/4. .IFN (.ARGCT>1) ??X = (^2)S7+(^2)S15+(^2)S23+(^2) .ELSE ??X = 0 .ENDC ??I = 0 .DO ??S ??Y.\??I = ??X ??I = ??I+1 .ENDC % .MACRO BYTE?PUT ; Set a byte within current table ??I = ^1/4. ??X = ^1&3*8.+7. ??Y.\??I = (??Y.\??I)&~(255.S(??X))!(^2)S(??X) % .MACRO BYTE?GEN ; Generate the current byte table ??I= 0 .DO ??S .DWORD ??Y.\??I ??I= ??I+1 .ENDC % ;Macros, patterned after the byte macros above, that build a bit ; (i.e. delimiter) table. ; ; WARNING: This version translates all bit offsets > 127 to 30!. ; This is for HOT_DELIMITER_TABLE, which for any function key ; just wants the function key header char (30 = ^^) marked. ; ; Usage: HOT_BIT?INIT <# bits> { } ; default = 0 ; HOT_BIT?PUT ; HOT_BIT?PUT ; ... ; HOT_BIT?GEN ; ; Symbols set: ??SB, ??YB.000 - ??YB.255, ??X, ??I .MACRO HOT_BIT?INIT ; Bit table initialization ??SB = ((^1)+31.)/32. .IFN (.ARGCT>1) ??X = -(^2) .ELSE ??X = 0 .ENDC ??I = 0 .DO ??SB ??YB.\??I = ??X ??I = ??I+1 .ENDC % .MACRO HOT_BIT?PUT ; Set a bit within current table .IFN (^1>127.) ;Does bit correspond to a function key? ??X = 30. ;Yes: set function header char's bit .ELSE ??X = ^1 ;No: use given bit offset .ENDC ??I = ??X/32. ;Compute DWORD that contains the bit ??X = ??X&31. ; and the bit within the DWORD ;Set that bit within the ??YB... symbols to the given value ??YB.\??I = ((??YB.\??I)&~(1S(??X)))!((^2)S(??X)) % .MACRO HOT_BIT?GEN ; Generate the current bit table ??I = 0 .DO ??SB .DWORD ??YB.\??I ??I = ??I+1 .ENDC % ;These macros maintain a set of bit flags, and generate an error message ; on an attempt to set the same bit flag twice. ; Usage: FLAG?INIT <# bits> ; FLAG?SET , ; ; Symbols set: ??SF, ??YF.000 - ??YF.016, ??X, ??I .MACRO FLAG?INIT ; Bit table initialization ??SF = ((^1)+31.)/32. ??I = 0 .DO ??SF ??YF.\??I = 0 ??I = ??I+1 .ENDC % .MACRO FLAG?SET ;Set a bit flag ??I = (^1)/32. ;Compute DWORD that contains the bit ??X = (^1)&31. ; and the bit within the DWORD ;Check to see if that bit within the ??YF... symbols is already set .IFN ((??YF.\??I)&(1S(??X))) .ERROR ^2 ^3 ^4 ^5 ^6 ^7 ;Else not set, so OK to set the flag .ELSE ??YF.\??I = (??YF.\??I)!(1S(??X)) .ENDC % ;Define symbols to use for referencing macro arguments beyond the ninth one ; in .TXT building macros. Note that in these symbol names, only a single ; character can follow the "?" in order to expand with "^?x" ?a = 10. ?b = 11. ?c = 12. ?d = 13. ?e = 14. ?f = 15. ?g = 16. ?h = 17. ?i = 18. ?j = 19. ?k = 20. ?l = 21. ?m = 22. ?n = 23. ?o = 24. ?p = 25. ?q = 26. ?r = 27. ?s = 28. ?t = 29. ?u = 30. ?v = 31. ?w = 32. ?x = 33. ?y = 34. ?z = 35. ;The following table associates particular keys with specifi c routines that ; should be called whenever those keys are pressed. For nonfunction keys, ; the ASCII value of key is used as the offset into this table. For ; function keys, the table offset is the ASCII value of the second ; character sent by the function key with the high bit set. ; ; The word found at the offset contains the Hot Key Routine number, or ; zero if that key has no subroutine assigned to it. ; The Hot Key Routine number is used as the index into the table following ; this one, called HOT_KEY_DEFS_TABLE, which contains information about ; how SCREEN DEMON should call the requested subroutine. ; Note that a key that has a subroutine attached to it will never be ; seen by the COBOL program, since the ACCEPT statement where the key ; was pressed will be automatically restarted when the subroutine returns. ;Table describing hot key routines and how they should be called. Index into ; this table is the Hot Key Routine # assigned to particular function key, ; obtained from the above table. ; Each entry in this table consists of 4 words, formatted as follows: .DUSR SD_HOT_TYPE = 0 .DUSR SD_HOT_FLAGS = 1 .DUSR SD_HOT_PTR = 2 .DUSR SD_HOT_ACL = 4 .DUSR SD_HOT_DIR = 6 .DUSR SD_HOT_DEF_SIZE = 8. ; word 1 = Routine type - one of the following: .DUSR SD_HOT_LINKED = 0 ;Linked in routine .DUSR SD_HOT_COBOL32 = 1 ;Linked in 32-bit COBOL subprogram .DUSR SD_HOT_ICOBOL = 2 ;ICOBOL subprogram .DUSR SD_HOT_CLI = 3 ;CLI macro .DUSR SD_HOT_PR = 4 ;External PR .DUSR SD_HOT_IN_ROOT = 5 ;Routine is linked into root program ; word 2 = Call flags - any combination of the following: .DUSR SD_HOT_UNAWARE = 1B15 ;Not aware of SCREEN DEMON, window management ; must be done for it .DUSR SD_HOT_REDRAW = 1B14 ;Redraw screen on return from routine .DUSR SD_HOT_CANCEL = 1B13 ;CANCEL hot-key-invoked COBOL subprogram ; on exit .DUSR SD_HOT_IMMED = 1B12 ;If REDRAW is specified, do not ask the ; "Press any key to continue..." question ; before proceeding with the Redraw ; ; words 3-4 = Pointer to routine ; Contains word address of routine if type SD_HOT_LINKED, ; otherwise contains byte pointer to name of ICOBOL subprogram, ; CLI macro, or external PR file. .MACRO BEGIN_HOT_KEYS .PART HOT_MENU_STRINGS_PART SHARED,DATA,LOCAL HOT_MENU_ITEMS: .PART HOT_MENU_NUMS_PART SHARED,DATA,LOCAL HOT_MENU_ITEM_NUMS: .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 HOT_BIT?INIT 256. ;Init the delimiter table symbols FLAG?INIT 256. ; and the duplicate-check flag symbols HOT_KEY_ASSIGNMENTS_TABLE: ;Lay down zeros for key offset table .BLK 256. HOT_KEY_DEFS_TABLE: ;Start of hot key definitions ?HOT_KEY_LOC = . ;Start of current hot key definition ?HOT_KEYS = 0 ;Number of hot keys defined so far ?HOT_KEY_DEFINED = 0 ?HOT_KEY_ACL = 0 ;Byte ptr to ACL string for cur hot ; key, zero if none ?HOT_KEY_HAS_ACL = 0 ;Flag, set once an ACL cmd has been ; encountered in current hot key def ?HOT_KEY_DIR = 0 ;Byte ptr to name of initial working ; directory for cur hot key, zero if ; same as host program current dir ;If all of the following symbols are still zero at the end ; of configuration file processing, then the Screen Demon ; mail system should not be included. .DUSR ?HOT?SD_READ_MAIL = 0 .DUSR ?HOT?SD_MAIL_INBOX = 0 .DUSR ?HOT?SD_INPUT_MAIL = 0 % .MACRO ?PUT_LAST_HOT_KEY .IFN (?HOT_KEYS>0) .IFN (?HOT_KEY_DEFINED==0) .ERROR HOT_KEY must be followed by LINKED, ICOBOL, PR, CLI, or LINKED_IN_ROOT .ELSE .LOC ?HOT_KEY_LOC+SD_HOT_FLAGS .WORD ?HOT_KEY_FLAGS .LOC ?HOT_KEY_LOC+SD_HOT_ACL .DWORD ?HOT_KEY_ACL*2 .LOC ?HOT_KEY_LOC+SD_HOT_DIR .DWORD ?HOT_KEY_DIR*2 .ENDC .LOC ?HOT_KEY_LOC+SD_HOT_DEF_SIZE ?HOT_KEY_LOC = . .ENDC ?HOT_KEY_FLAGS = 0 % .MACRO HOT_KEY ?PUT_LAST_HOT_KEY ?HOT_KEY_DEFINED = 0 ?HOT_KEY_ACL = 0 ?HOT_KEY_HAS_ACL = 0 ?HOT_KEY_DIR = 0 ?HOT_KEYS = ?HOT_KEYS+1 ?I = 0 .DO .ARGCT ?I = ?I+1 .IFN (^?I>0) HOT_BIT?PUT ^?I,1 ;Mark this key as a delimiter ;Make sure that this hot key isn't used more than once FLAG?SET ^?I,Multiple assignments for hot key ^?I .LOC HOT_KEY_ASSIGNMENTS_TABLE+^?I .WORD ?HOT_KEYS .ENDC .ENDC % .MACRO ?PUT_HOT_KEY_TYPE .IFN (?HOT_KEY_DEFINED==1) .ERROR Hot Key is being defined as multiple types .ELSE .LOC ?HOT_KEY_LOC+SD_HOT_TYPE .WORD ^1 ?HOT_KEY_DEFINED = 1 .ENDC % .MACRO ?PUT_HOT_PTR_STRING .PART HOT_KEY_STRINGS SHARED,DATA,LOCAL ?STRING_PTR = . .IFN (.ARGCT==1) .TXT "^1" .ELSE .IFN (.ARGCT==2.) .TXT "^1,^2" .ELSE .IFN (.ARGCT==3.) .TXT "^1,^2,^3" .ELSE .IFN (.ARGCT==4.) .TXT "^1,^2,^3,^4" .ELSE .IFN (.ARGCT==5.) .TXT "^1,^2,^3,^4,^5" .ELSE .IFN (.ARGCT==6.) .TXT "^1,^2,^3,^4,^5,^6" .ELSE .IFN (.ARGCT==7.) .TXT "^1,^2,^3,^4,^5,^6,^7" .ELSE .IFN (.ARGCT==8.) .TXT "^1,^2,^3,^4,^5,^6,^7,^8" .ELSE .IFN (.ARGCT==9.) .TXT "^1,^2,^3,^4,^5,^6,^7,^8,^9" .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .LOC ?HOT_KEY_LOC+SD_HOT_PTR .DWORD ?STRING_PTR*2 % .MACRO LINKED ?PUT_HOT_KEY_TYPE SD_HOT_LINKED .LOC ?HOT_KEY_LOC+SD_HOT_PTR .EXTL ^1 .DWORD ^1 .DUSR ?HOT?^1 = -1 % .MACRO COBOL32 ?PUT_HOT_KEY_TYPE SD_HOT_COBOL32 .LOC ?HOT_KEY_LOC+SD_HOT_PTR .EXTL ^1 .DWORD ^1 % .MACRO ICOBOL ?PUT_HOT_KEY_TYPE SD_HOT_ICOBOL ?PUT_HOT_PTR_STRING ^1 % .MACRO PR ?PUT_HOT_KEY_TYPE SD_HOT_PR ?PUT_HOT_PTR_STRING ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 % .MACRO CLI ?PUT_HOT_KEY_TYPE SD_HOT_CLI ?PUT_HOT_PTR_STRING ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 % .MACRO LINKED_IN_ROOT ?PUT_HOT_KEY_TYPE SD_HOT_IN_ROOT ?PUT_HOT_PTR_STRING ^1 % .MACRO SAVE_SCREEN ?HOT_KEY_FLAGS = ?HOT_KEY_FLAGS!SD_HOT_UNAWARE % ;Optional arguments for REDRAW flag .DUSR IMMEDIATE = 1 .DUSR WAIT = 0 .MACRO REDRAW .IFG .ARGCT .IFG ^1 ?HOT_KEY_FLAGS = ?HOT_KEY_FLAGS!SD_HOT_REDRAW!SD_HOT_IMMED .ELSE ?HOT_KEY_FLAGS = ?HOT_KEY_FLAGS!SD_HOT_REDRAW .ENDC .ELSE ?HOT_KEY_FLAGS = ?HOT_KEY_FLAGS!SD_HOT_REDRAW .ENDC % .MACRO CANCEL ?HOT_KEY_FLAGS = ?HOT_KEY_FLAGS!SD_HOT_CANCEL % .MACRO MENU .PART HOT_MENU_NUMS_PART SHARED,DATA,LOCAL .WORD ?HOT_KEYS .PART HOT_MENU_STRINGS_PART SHARED,DATA,LOCAL .TXTN 1 ;Do not follow even-length strings with null word .IFE .MCALL .IFN (.ARGCT==1) .TXT "^1" .ELSE .IFN (.ARGCT==2.) .TXT "^1 ^2" .ELSE .IFN (.ARGCT==3.) .TXT "^1 ^2 ^3" .ELSE .IFN (.ARGCT==4.) .TXT "^1 ^2 ^3 ^4" .ELSE .IFN (.ARGCT==5.) .TXT "^1 ^2 ^3 ^4 ^5" .ELSE .IFN (.ARGCT==6.) .TXT "^1 ^2 ^3 ^4 ^5 ^6" .ELSE .IFN (.ARGCT==7.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7" .ELSE .IFN (.ARGCT==8.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8" .ELSE .IFN (.ARGCT==9.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9" .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ELSE .IFN (.ARGCT==1) .TXT "|^1" .ELSE .IFN (.ARGCT==2.) .TXT "|^1 ^2" .ELSE .IFN (.ARGCT==3.) .TXT "|^1 ^2 ^3" .ELSE .IFN (.ARGCT==4.) .TXT "|^1 ^2 ^3 ^4" .ELSE .IFN (.ARGCT==5.) .TXT "|^1 ^2 ^3 ^4 ^5" .ELSE .IFN (.ARGCT==6.) .TXT "|^1 ^2 ^3 ^4 ^5 ^6" .ELSE .IFN (.ARGCT==7.) .TXT "|^1 ^2 ^3 ^4 ^5 ^6 ^7" .ELSE .IFN (.ARGCT==8.) .TXT "|^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8" .ELSE .IFN (.ARGCT==9.) .TXT "|^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9" .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .TXTN 0 ;Resume normal text placement mode % .MACRO ACL .PART HOT_ACL_STRINGS_PART SHARED,DATA,LOCAL,NOMESS .IFN ?HOT_KEY_HAS_ACL .LOC .-1 ;continuation, back up before null(s) that ; terminated previous ACL chunk .ELSE ?HOT_KEY_ACL = . ?HOT_KEY_HAS_ACL = 1 .ENDC .IFN (.ARGCT==1) .TXT "^1 " .ELSE .IFN (.ARGCT==2.) .TXT "^1 ^2 " .ELSE .IFN (.ARGCT==3.) .TXT "^1 ^2 ^3 " .ELSE .IFN (.ARGCT==4.) .TXT "^1 ^2 ^3 ^4 " .ELSE .IFN (.ARGCT==5.) .TXT "^1 ^2 ^3 ^4 ^5 " .ELSE .IFN (.ARGCT==6.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 " .ELSE .IFN (.ARGCT==7.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 " .ELSE .IFN (.ARGCT==8.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 " .ELSE .IFN (.ARGCT==9.) .TXT "^1 ^2 ^3 ^4 ^5  @ ^6 ^7 ^8 ^9 " .ELSE .IFN (.ARGCT==10.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a " .ELSE .IFN (.ARGCT==11.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b " .ELSE .IFN (.ARGCT==12.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c " .ELSE .IFN (.ARGCT==13.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d " .ELSE .IFN (.ARGCT==14.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e " .ELSE .IFN (.ARGCT==15.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f " .ELSE .IFN (.ARGCT==16.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g " .ELSE .IFN (.ARGCT==17.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h " .ELSE .IFN (.ARGCT==18.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i " .ELSE .IFN (.ARGCT==19.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j " .ELSE .IFN (.ARGCT==20.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k " .ELSE .IFN (.ARGCT==21.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l " .ELSE .IFN (.ARGCT==22.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m " .ELSE .IFN (.ARGCT==23.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n " .ELSE .IFN (.ARGCT==24.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n ^?o " .ELSE .IFN (.ARGCT==25.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n ^?o ^?p " .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC % .MACRO DIRECTORY .IFN (.ARGCT) .PART HOT_DIR_STRINGS_PART SHARED,DATA,LOCAL ?HOT_KEY_DIR = . .TXT "^1" .ENDC % .MACRO END_HOT_KEYS ?PUT_LAST_HOT_KEY .PART HOT_MENU_STRINGS_PART SHARED,DATA,LOCAL .TXT "||" .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 % ;The following table is used to translate entered key codes to possible ; different ones. For nonfunction keys, the ASCII code of the key itself ; is used as the offset into the table. The offset into the table for ; function keys is the ASCII code of the second character sent by that ; function key. The byte at the particular offset contains the translated ; code for that key, or zero if the key should not be translated. .MACRO BEGIN_TRANSLATIONS BYTE?INIT 256. % .MACRO TRANSLATE BYTE?PUT ^1,^2 ;Set byte offset in xlat table to given value HOT_BIT?PUT ^1,1 ;Mark this key as a delimiter % .MACRO END_TRANSLATIONS KEY_TRANSLATION_TABLE: ;Lay down the translation table bytes BYTE?GEN HOT_DELIMITER_TABLE: ;Lay down the delimiter table bits HOT_BIT?GEN % ; Mnemonics for all keyboard code sequences .DUSR CTRL_A = 1 .DUSR CTRL_B = 2 .DUSR CTRL_C = 3 .DUSR CTRL_D = 4 .DUSR CTRL_E = 5 .DUSR CTRL_F = 6 .DUSR CTRL_G = 7 .DUSR CTRL_H = 8 .DUSR CTRL_I = 9 .DUSR CTRL_J = 10 .DUSR CTRL_K = 11 .DUSR CTRL_L = 12 .DUSR CTRL_M = 13 .DUSR CTRL_N = 14 .DUSR CTRL_O = 15 .DUSR CTRL_P = 16 .DUSR CTRL_Q = 17 .DUSR CTRL_R = 18 .DUSR CTRL_S = 19 .DUSR CTRL_T = 20 .DUSR CTRL_U = 21 .DUSR CTRL_V = 22 .DUSR CTRL_W = 23 .DUSR CTRL_X = 24 .DUSR CTRL_Y = 25 .DUSR CTRL_Z = 26 .DUSR TAB = 9 .DUSR NEW_LINE = 10 .DUSR ERASE_EOL = 11 .DUSR ERASE_PAGE = 12 .DUSR CR = 13 .DUSR ESC = 27 .DUSR DEL = 127 .DUSR HOME = 8 .DUSR UP = 23 .DUSR RIGHT = 24 .DUSR LEFT = 25 .DUSR DOWN = 26 .DUSR SHIFT_HOME = 136 .DUSR SHIFT_UP = 151 .DUSR SHIFT_RIGHT = 152 .DUSR SHIFT_LEFT = 153 .DUSR SHIFT_DOWN = 154 .DUSR C1 = 220 .DUSR C2 = 221 .DUSR C3 = 222 .DUSR C4 = 223 .DUSR SHIFT_C1 = 216 .DUSR SHIFT_C2 = 217 .DUSR SHIFT_C3 = 218 .DUSR SHIFT_C4 = 219 .DUSR CMD_SHIFT_PRINT = 129 .DUSR CMD_PRINT = 145 .DUSR F1 = 241 .DUSR F2 = 242 .DUSR F3 = 243 .DUSR F4 = 244 .DUSR F5 = 245 .DUSR F6 = 246 .DUSR F7 = 247 .DUSR F8 = 248 .DUSR F9 = 249 .DUSR F10 = 250 .DUSR F11 = 251 .DUSR F12 = 252 .DUSR F13 = 253 .DUSR F14 = 254 .DUSR F15 = 240 .DUSR SHIFT_F1 = 225 .DUSR SHIFT_F2 = 226 .DUSR SHIFT_F3 = 227 .DUSR SHIFT_F4 = 228 .DUSR SHIFT_F5 = 229 .DUSR SHIFT_F6 = 230 .DUSR SHIFT_F7 = 231 .DUSR SHIFT_F8 = 232 .DUSR SHIFT_F9 = 233 .DUSR SHIFT_F10 = 234 .DUSR SHIFT_F11 = 235 .DUSR SHIFT_F12 = 236 .DUSR SHIFT_F13 = 237 .DUSR SHIFT_F14 = 238 .DUSR SHIFT_F15 = 224 .DUSR CTRL_F1 = 177 .DUSR CTRL_F2 = 178 .DUSR CTRL_F3 = 179 .DUSR CTRL_F4 = 180 .DUSR CTRL_F5 = 181 .DUSR CTRL_F6 = 182 .DUSR CTRL_F7 = 183 .DUSR CTRL_F8 = 184 .DUSR CTRL_F9 = 185 .DUSR CTRL_F10 = 186 .DUSR CTRL_F11 = 187 .DUSR CTRL_F12 = 188 .DUSR CTRL_F13 = 189 .DUSR CTRL_F14 = 190 .DUSR CTRL_F15 = 176 .DUSR CTRL_SHIFT_F1 = 161 .DUSR CTRL_SHIFT_F2 = 162 .DUSR CTRL_SHIFT_F3 = 163 .DUSR CTRL_SHIFT_F4 = 164 .DUSR CTRL_SHIFT_F5 = 165 .DUSR CTRL_SHIFT_F6 = 166 .DUSR CTRL_SHIFT_F7 = 167 .DUSR CTRL_SHIFT_F8 = 168 .DUSR CTRL_SHIFT_F9 = 169 .DUSR CTRL_SHIFT_F10 = 170 .DUSR CTRL_SHIFT_F11 = 171 .DUSR CTRL_SHIFT_F12 = 172 .DUSR CTRL_SHIFT_F13 = 173 .DUSR CTRL_SHIFT_F14 = 174 .DUSR CTRL_SHIFT_F15 = 160 ;Mnemonics for screen control characters, useful for MAIL_INDICATOR .DUSR BLINK_ON = 14 .DUSR BLINK_OFF = 15 .DUSR UNDER_ON = 20 .DUSR UNDER_OFF = 21 .DUSR DIM_ON = 28 .DUSR DIM_OFF = 29 ;Macro that defines the optional Alternate Exit Key that causes any Screen ; Demon hot key routine to exit ?SD_ALT_EXIT_KEY = -1 ;default is no alternate exit key .MACRO SD_ALTERNATE_EXIT_KEY? .IFG (.ARGCT) ?SD_ALT_EXIT_KEY = ^1 .ENDC % ;Macro that defines the special function key value that is to be returned ; whenever a console ?READ fails due to a DISCONNECT ERROR ON MODEM. ; Requires optional modem manager package. ?SD_MODEM_DISCONNECT_KEY = -1 ;default is no disconnect indicator .MACRO SD_MODEM_DISCONNECT_KEY? .IFG (.ARGCT) .IFG (^1-128.) ?SD_MODEM_DISCONNECT_KEY = ^1 .ENDC .ENDC % ;Macro that defines the amount of time in seconds that may elapse at any input ; before terminating the input and running the periodic routines. ?PERIODIC_INTERVAL = 60 ;default value .MACRO PERIODIC_INTERVAL? .IFG (.ARGCT) ?PERIODIC_INTERVAL = ^1 .ENDC % ;Macro that defines the amount of time in seconds that may elapse at any input ; before triggering the screen saver routine. ?SCREEN_SAVER_INTERVAL = -1 ;default is no screen saver .MACRO SCREEN_SAVER_INTERVAL? .IFG (.ARGCT) ?SCREEN_SAVER_INTERVAL = ^1 .ENDC % ;Macro that defines the amount of time in seconds that may elapse without a ; response to the SD_MAIN_MENU before before terminating the menu and ; returning from the hot key. ?HOT_TIMEOUT_INTERVAL = -1 ;default value (no timeout) .MACRO MAIN_MENU_TIMEOUT_INTERVAL? .IFG (.ARGCT) ?HOT_TIMEOUT_INTERVAL = ^1 .ENDC % ;Macro that defines the maximum amount of time in seconds that may elapse ; between screen updates. ; ?FLUSH_INTERVAL = 10 ;default value .MACRO FLUSH_INTERVAL? .IFG (.ARGCT) ?FLUSH_INTERVAL = ^1 .ENDC % ;Definitions of bits in user control word where turbo setting is located: ; (these bit numbers must match those in SD_DEFINES) .DUSR TURBO = 11. ;Turbo display ON (optimized displays) .DUSR PARTURBO = 10. ;Turbo level is Partial, not Full ; (Partial inhibits display buffering) ;Macros that define the default Turbo display setting .DUSR FULL = 1B(TURBO) .DUSR PARTIAL = 1B(PARTURBO)!1B(TURBO) .DUSR OFF = 0 .DUSR ON = FULL SD_CONFIG_TURBO_LEVEL = FULL ;default value .MACRO DEFAULT_TURBO_DISPLAY_SETTING? .IFG (.ARGCT) .IFE (^1-FULL) SD_CONFIG_TURBO_LEVEL = ^1 .ELSE .IFE (^1-PARTIAL) SD_CONFIG_TURBO_LEVEL = ^1 .ELSE .IFE (^1-OFF) SD_CONFIG_TURBO_LEVEL = ^1 .ENDC .ENDC .ENDC .ENDC % ;Macro that defines whether or not the /NRM characteristic is forced off SD_CONFIG_NRM_OFF = 1B(?CN ` RM) ;default value is YES .MACRO FORCE_NRM_CHARACTERISTIC_OFF? .IFG (.ARGCT) .IFE (^1-YES) SD_CONFIG_NRM_OFF = 1B(?CNRM) .ELSE SD_CONFIG_NRM_OFF = 0 .ENDC .ENDC % ;Macro that defines the amount of inactive time in seconds that may ; elapse at any input before logging the user off. ?LOGOFF_INTERVAL = -1 ;default value .MACRO LOGOFF_INTERVAL? .IFG (.ARGCT) ?LOGOFF_INTERVAL = ^1 .ENDC % ;Macros that define a period of time during the day when logoff timeouts ; will not occur. The times are specified in hours and minutes, but ; stored in the same format as the time returned by ?ITIME, which is ; the number of bi-seconds since midnight. .IFE .PASS ;only need to define default values in pass 1 ?LOGOFF_OK_AFTER_TIME = 0 ;Default is logoff is always OK ?LOGOFF_OK_BEFORE_TIME = 0 ;Default is logoff is always OK .ENDC ;Format: LOGOFF_OK_AFTER hh,mm .MACRO LOGOFF_OK_AFTER .IFN (.ARGCT>=2) ?LOGOFF_OK_AFTER_TIME = ((^1*60+^2)*30)S15 .ENDC % ;Format: LOGOFF_OK_BEFORE hh,mm .MACRO LOGOFF_OK_BEFORE .IFN (.ARGCT>=2) ?LOGOFF_OK_BEFORE_TIME = ((^1*60+^2)*30)S15 .ENDC % ;Macro that defines a list of usernames or username templates who ; are immune to automatic logoff termination .MACRO NO_LOGOFF_USERS .PART NO_LOGOFF_USERS_STRINGS_PART SHARED,DATA,LOCAL .IFE .MCALL SD_NO_LOGOFF_USERS: .ENDC .IFN (.ARGCT==1) .TXT "^1" .ELSE .IFN (.ARGCT==2.) .TXT "^1 ^2" .ELSE .IFN (.ARGCT==3.) .TXT "^1 ^2 ^3" .ELSE .IFN (.ARGCT==4.) .TXT "^1 ^2 ^3 ^4" .ELSE .IFN (.ARGCT==5.) .TXT "^1 ^2 ^3 ^4 ^5" .ELSE .IFN (.ARGCT==6.) .TXT "^1 ^2 ^3 ^4 ^5 ^6" .ELSE .IFN (.ARGCT==7.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7" .ELSE .IFN (.ARGCT==8.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8" .ELSE .IFN (.ARGCT==9.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9" .ELSE .IFN (.ARGCT==10.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a" .ELSE .IFN (.ARGCT==11.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b" .ELSE .IFN (.ARGCT==12.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c" .ELSE .IFN (.ARGCT==13.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d" .ELSE .IFN (.ARGCT==14.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e" .ELSE .IFN (.ARGCT==15.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f" .ELSE .IFN (.ARGCT==16.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g" .ELSE .IFN (.ARGCT==17.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h" .ELSE .IFN (.ARGCT==18.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i" .ELSE .IFN (.ARGCT==19.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j" .ELSE .IFN (.ARGCT==20.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k" .ELSE .IFN (.ARGCT==21.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l" .ELSE .IFN (.ARGCT==22.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m" .ELSE .IFN (.ARGCT==23.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n" .ELSE .IFN (.ARGCT==24.) .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n ^?o" .ELSE .TXT "^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^?a ^?b ^?c ^?d ^?e ^?f ^?g ^?h ^?i ^?j ^?k ^?l ^?m ^?n ^?o ^?p" .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 % ;Macro that obtains an answer to the question: ; "How should SCREEN DEMON compensate for the ^C^x character sequence ; echoed whenever the operator presses a console interrupt?" ;Possible answers are: .DUSR INTR_ERASE = 1 ;immediately space over the ^C^x, ; assuming that the cursor is just ; past the sequence, leaving the ; cursor at original pos as if ^C^x ; had never been displayed .DUSR INTR_REDRAW = 2 ;redraw the screen at the next flush ; to remove the ^C^x .DUSR INTR_ECHO = 3 ;monitor the ^C^x into image buffers, ; assuming that the cursor is just ; past the sequence, leaving the ; cursor past the sequence .DUSR INTR_NOTHING = 4 ;don't do anything about the echoed ; control sequence SD_CONSOLE_INTERRUPT_HANDLING = INTR_ERASE .MACRO CONSOLE_INTERRUPT_HANDLING? .IFG (.ARGCT) .IFG (^1) .IFL (^1-4) SD_CONSOLE_INTERRUPT_HANDLING = ^1 .ENDC .ENDC .ENDC % ;Macro that obtains an answer to the question: ; "For terminals that support variable cursor types, ; what should be the default cursor type?" ;Possible answers are: .DUSR CURSOR_INVISIBLE = "0 ;No cursor .DUSR CURSOR_BLINK_UNDERSCORE = "1 ;Blinking underscore .DUSR CURSOR_BLOCK = "2 ;Reverse video block .DUSR CURSOR_BLINK_BLOCK = "3 ;Blinking reverse video block .DUSR CURSOR_UNDERSCORE = "4 ;Nonblinking underscore ; (not available on all ; terminals) SD_DEFAULT_CURSOR_TYPE = CURSOR_BLOCK .MACRO DEFAULT_CURSOR_TYPE? .IFG (.ARGCT) .IFL ((^1&7)-5) SD_DEFAULT_CURSOR_TYPE = ("0)!(^1&7) .ENDC .ENDC % ;Macro that obtains an answer to the question: ; "For terminals that support adjustable scroll rates, ; what should be the default scroll rate?" ;Possible answers are: .DUSR SCROLL_JUMP = "0 ;Jump scroll .DUSR SCROLL_SMOOTH_SLOW = "1 ;Smooth scroll, 5 rows/sec .DUSR SCROLL_SMOOTH_FAST = "2 ;Smooth scroll, 10 rows/sec SD_DEFAULT_SCROLL_RATE = SCROLL_JUMP .MACRO DEFAULT_SCROLL_RATE? .IFG (.ARGCT) .IFL ((^1&3)-3) SD_DEFAULT_SCROLL_RATE = ("0)!(^1&3) .ENDC .ENDC % ;Macro that obtains an answer to the question: ; "For terminals that support selectable 7/8 bit mode, ; what should be the default character length?" ;Possible answers are: ; 7 or 8 SD_DEFAULT_7_OR_8_BIT_MODE = 7 .MACRO DEFAULT_7_OR_8_BIT_MODE? .IFG (.ARGCT) .IFG (^1-6) .IFL (^1-9) SD_DEFAULT_7_OR_8_BIT_MODE = ^1 .ENDC .ENDC .ENDC % ;Macro that obtains an answer to the question: ; "For terminals that support selectable keyboard language, ; what should be the default setting?" ;Possible answers are: .DUSR KEYBD_LANG_HARDWARE = "0 ;Matches keyboard hardware .DUSR KEYBD_LANG_INTERNATIONAL = "1 ;US ASCII in K1, ; DG International in K2 SD_DEFAULT_KEYBD_LANG = KEYBD_LANG_HARDWARE .MACRO DEFAULT_KEYBOARD_LANGUAGE? .IFG (.ARGCT) SD_DEFAULT_KEYBD_LANG = ("0)!(^1&1) .ENDC % ;Macro that obtains an answer to the question: ; "For terminals that support multiple character sets, ; what should be the default primary set?" ;Possible answers are: ; Any valid char set indicator, which will be ignored if ; not found in character set palette. ;The answer to this question will be used by END_CONFIGURATION ; to define SD_DEFAULT_PRIMARY_CHAR_SET as the palette slot ; where the specified default character set is listed. DEF_PRIMARY_CHAR_SET = 0 ;will be set at end ; if not specified .MACRO DEFAULT_PRIMARY_CHAR_SET? .IFG (.ARGCT) DEF_PRIMARY_CHAR_SET = '^1' .ENDC % ;Macro that obtains an answer to the question: ; "For terminals that support multiple character sets, ; what should be the default alternate set?" ;Possible answers are: ; Any valid char set indicator, which will be ignored ; if not found in character set palette. ;The answer to this question will be used by END_CONFIGURATION ; to define SD_DEFAULT_ALTERNATE_CHAR_SET as the palette slot ; where the specified default character set is listed. DEF_ALTERNATE_CHAR_SET = 0 ;will be set at end ; if not specified .MACRO DEFAULT_ALTERNATE_CHAR_SET? .IFG (.ARGCT) DEF_ALTERNATE_CHAR_SET = '^1' .ENDC % ;Define answer keywords for YES/NO options: .DUSR YES = 1 .DUSR NO = 0 ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON actually clear the screen when the host program ; outputs a clear screen command?" ?PHYSICAL_SCREEN_CLEAR = YES .MACRO PHYSICAL_SCREEN_CLEAR? .IFG (.ARGCT) .IFN (^1) ?PHYSICAL_SCREEN_CLEAR = YES .ELSE ?PHYSICAL_SCREEN_CLEAR = NO .ENDC .ENDC %   ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON automatically redraw the screen whenever the ; host program returns from a call to a nonSCREEN DEMON program?" ?AUTO_REDRAW_AFTER_NONSD_CALL = YES .MACRO AUTO_REDRAW_AFTER_NONSD_CALL? .IFG (.ARGCT) .IFN (^1) ?AUTO_REDRAW_AFTER_NONSD_CALL = YES .ELSE ?AUTO_REDRAW_AFTER_NONSD_CALL = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON ignore console interrupts (^C^B and ^C^E)?" ?IGNORE_CONSOLE_INTERRUPTS = NO .MACRO IGNORE_CONSOLE_INTERRUPTS? .IFG (.ARGCT) .IFN (^1) ?IGNORE_CONSOLE_INTERRUPTS = YES .ELSE ?IGNORE_CONSOLE_INTERRUPTS = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON trim trailing spaces and underscore ; characters from initial contents of input fields, thus ; permitting ^A and ^E screenedit functions to work properly?" ?TRIM_SPACE_UNDERSCORE_ON_INPUT = YES .MACRO TRIM_SPACE_UNDERSCORE_ON_INPUT? .IFG (.ARGCT) .IFN (^1) ?TRIM_SPACE_UNDERSCORE_ON_INPUT = YES .ELSE ?TRIM_SPACE_UNDERSCORE_ON_INPUT = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON use the Line Drawing character set for boxes ; if the terminal has this capability?" ?USE_LINE_DRAW_CHARSET_FOR_BOXES = YES .MACRO USE_LINE_DRAW_CHARSET_FOR_BOXES? .IFG (.ARGCT) .IFN (^1) ?USE_LINE_DRAW_CHARSET_FOR_BOXES = YES .ELSE ?USE_LINE_DRAW_CHARSET_FOR_BOXES = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON use the Line Drawing character set for lines ; if the terminal has this capability?" ?USE_LINE_DRAW_CHARSET_FOR_LINES = YES .MACRO USE_LINE_DRAW_CHARSET_FOR_LINES? .IFG (.ARGCT) .IFN (^1) ?USE_LINE_DRAW_CHARSET_FOR_LINES = YES .ELSE ?USE_LINE_DRAW_CHARSET_FOR_LINES = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should the SCREEN DEMON Print Screen hot key routine ask the user ; for an output filename?" ?SDSCREENPRINT_ASK_OUTPUT_NAME = YES .MACRO SDSCREENPRINT_ASK_OUTPUT_NAME? .IFG (.ARGCT) .IFN (^1) ?SDSCREENPRINT_ASK_OUTPUT_NAME = YES .ELSE ?SDSCREENPRINT_ASK_OUTPUT_NAME = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should the SCREEN DEMON Read Mail hot key routine ask the user ; for an output filename when the Print option is selected?" ?SD_READ_MAIL_ASK_OUTPUT_NAME = YES .MACRO SD_READ_MAIL_ASK_OUTPUT_NAME? .IFG (.ARGCT) .IFN (^1) ?SD_READ_MAIL_ASK_OUTPUT_NAME = YES .ELSE ?SD_READ_MAIL_ASK_OUTPUT_NAME = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON mail messages be deleted automatically after ; the operator has read them?" ?SD_READ_MAIL_AUTO_DELETE = NO .MACRO SD_READ_MAIL_AUTO_DELETE? .IFG (.ARGCT) .IFN (^1) ?SD_READ_MAIL_AUTO_DELETE = YES .ELSE ?SD_READ_MAIL_AUTO_DELETE = NO .ENDC .ENDC % ;Macro that declares a YES or NO answer to the question: ; "Should SCREEN DEMON mail messages always be delivered immediately, ; whether or not they are marked as Urgent?" ?SD_IMMEDIATE_MAIL_DELIVERY = NO .MACRO SD_IMMEDIATE_MAIL_DELIVERY? .IFG (.ARGCT) .IFN (^1) ?SD_IMMEDIATE_MAIL_DELIVERY = YES .ELSE ?SD_IMMEDIATE_MAIL_DELIVERY = NO .ENDC .ENDC % ;Macros that declare the default sizes returned by the SD_GET_IMAGE ;and SD_GET_IMAGE_BELOW_FLOAT calls. ; ; Revision 2.0 and below of Screen Demon returned a 24 line by 80 column ; image, followed by 4 more bytes containing the cursor offset and ; global attribute settings. For rev 3.0 - 3.5, the internal screen images ; are 24x162, and there are a number of additional fields following the ; image. Existing programs will be expecting the smaller image style ; if they are simply relinked with rev 3.0 - 3.5 Screen Demon. However, if ; a program is recompiled, it may or may not want the older image format. ; If the program defines its image buffer using the SDIMAGE.DEF or ; SCREEN_DEMON.H include files, then a recompile without source code ; changes results in the program expecting the new larger image format. ; However, if the image definition is hard-coded, then the program will ; still expect the older image format even after recompilation. Thus, ; this configuration file option is provided to allow the system ; manager to decide upon the most appropriate default behavior for the ; Get Image calls. Note that a specific Get Image call can declare ; the actual size of image buffer it wants; this overrides the default ; setting defined here. .DUSR ?SD_GET_IMAGE_DEFAULT_LINES = 24 .DUSR ?SD_GET_IMAGE_DEFAULT_COLUMNS = 162 .DUSR ?SD_GET_IMAGE_DEFAULT_PARAMS = 14 .MACRO SD_GET_IMAGE_DEFAULT_LINES? .IFG .ARGCT .DUSR ?SD_GET_IMAGE_DEFAULT_LINES = ^1 .ENDC % .MACRO SD_GET_IMAGE_DEFAULT_COLUMNS? .IFG .ARGCT .DUSR ?SD_GET_IMAGE_DEFAULT_COLUMNS = ^1 .ENDC % .MACRO SD_GET_IMAGE_DEFAULT_PARAMS? .IFG .ARGCT .DUSR ?SD_GET_IMAGE_DEFAULT_PARAMS = ^1 .ENDC % ;Macro that obtains an answer to the question: ; "Should the SD_RETURN_INPUT call function only to return input ; information from a hot key call to the input field where the ; hot key was pressed, or should return strings declared with ; this call be available at the next input(s) encountered?" ;Possible answers are: .DUSR RI_HOT_ONLY = 0 ;Only on return from a hot key .DUSR RI_ANY_INPUT = 1 ;Available at any input ?SD_RETURN_INPUT_MODE = RI_ANY_INPUT .MACRO SD_RETURN_INPUT_MODE? .IFG (.ARGCT) .IFL (^1-2) ?SD_RETURN_INPUT_MODE = ^1 .ENDC .ENDC % ;Macro that defines the rollover size in bytes for console logging files. ?MAX_CONLOG_SIZE = 65536 ;default value .MACRO MAX_CONLOG_SIZE? .IFG (.ARGCT) ?MAX_CONLOG_SIZE = ^1 .ENDC % ;Macro that defines the input history buffer size in bytes ?INPUT_HISTORY_BUFFER_SIZE = 0 ;default value (no history) .MACRO INPUT_HISTORY_BUFFER_SIZE? .IFG (.ARGCT) ?INPUT_HISTORY_BUFFER_SIZE = ^1 .ENDC % ;Macro that defines the scrollback buffer size in bytes ?SCROLLBACK_BUFFER_SIZE = 0 ;default value (no scrollback buffer) .MACRO SCROLLBACK_BUFFER_SIZE? .IFG (.ARGCT) ?SCROLLBACK_BUFFER_SIZE = ^1 .ENDC % ;Macros that allow various special handling requests to be specified for ; certain programs. These include downgrading Turbo level, and ; protection against automatic logoff. ; This allows an ICX interpreter or a SCREEN DEMON shared library to ; be linked for Full Turbo, but downgrade to Partial or No Turbo when ; necessary while running particular programs. ;Structure of each entry in the special programs list (also in SD_DEFINES.SR). ; The list is terminated by a SPECL_NAME_PTR value of zero. .DUSR SPECL_NAME_OFS = 0 ;Word offset from beginning of this ; entry to null-terminated program name .DUSR SPECL_FLAGS = 2 ;Flags word, why program is special .DUSR SPECL_UNUSED = 3 ;filler so entry size is even .DUSR SPECL_SIZE = 4 ;Size of an entry in words ;Bit #'s for flags in special program flags word (also in SD_DEFINES.SR): .DUSR SPECF_NOTURBO = 15. ;Program requires No Turbo .DUSR SPECF_PARTURBO = 14. ;Program requires Partial Turbo .DUSR SPECF_NO_LOGOFF = 13. ;Do not terminate this program ; by automatic logoff .DUSR SPECF_BYPASS = 12. ;Program requires Bypass mode .DUSR SPECF_LOG = 11. ;Activate console event logging ; while this program is running .DUSR SPECF_NO_WLI = 10. ;Do not automatically call the WHO ; LOCKED IT? routine from this program .DUSR SPECF_NOHOTKEYS = 9. ;Hot keys are disabled while this ; program is running ;Define macro that signals the beginning of special program declarations .MACRO BEGIN_SPECIAL_PROGRAMS ;Initialize total number of special programs to none, in such a way that ; it only happens on pass 1. .IFE .PASS ?SP_NUM = 0 .ENDC ;Define symbol that is the beginning  of this special programs list .PART SD_SPECIAL_PROGRAMS_LIST_PART SHARED,LOCAL,DATA SD_SPECIAL_PROGRAMS_LIST: % ;Define macro that signals the end of special program declarations .MACRO END_SPECIAL_PROGRAMS .IFN ?SP_NUM ;If there were any special programs... .PART SD_SPECIAL_PROGRAMS_LIST_PART SHARED,LOCAL,DATA ?I = 1 .DO ?SP_NUM ;For each special program... .DWORD ?SP_PTR\?I-. ;Store word offset ; to its name, .WORD ?SP_FLG\?I ; its special flags, .WORD 0 ; and a filler word ?I = ?I+1 .ENDC .ENDC ;Terminate the list of special programs, if any .PART SD_SPECIAL_PROGRAMS_LIST_PART SHARED,LOCAL,DATA .DWORD 0 % ;Define macro that declares programs as requiring Partial Turbo .MACRO PARTIAL_TURBO ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_PARTURBO) ?I = ?I+1 .ENDC % ;Define macro that declares programs as requiring No Turbo .MACRO NO_TURBO ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_NOTURBO) ?I = ?I+1 .ENDC % ;Define macro that declares programs to be protected from automatic logoff .MACRO NO_LOGOFF ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_NO_LOGOFF) ?I = ?I+1 .ENDC % ;Define macro that declares programs to require Screen Demon to be asleep .MACRO BYPASS ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_BYPASS) ?I = ?I+1 .ENDC % ;Define macro that declares programs to require automatic console event logging .MACRO LOG ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_LOG) ?I = ?I+1 .ENDC % ;Define macro that declares programs within which the automatic Who Locked It? ; call is not desired on locked records. .MACRO NO_WLI ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_NO_WLI) ?I = ?I+1 .ENDC % ;Define macro that declares programs that disallow hot keys .MACRO NO_HOT_KEYS ?I = 1 .DO .ARGCT ;For each program name supplied... SPECIAL_PROG ^?I,1B(SPECF_NOHOTKEYS) ?I = ?I+1 .ENDC % ;Macro to declare a special program and what's special about it .MACRO SPECIAL_PROG ;If this is the very first declaration for this program, assign ; it a slot in the list of special programs. .IFE ?SPX_^1 ;increment total number of special programs ?SP_NUM = ?SP_NUM+1 ;assign a special program number to this new program ?SPX_^1 = ?SP_NUM ;remember flag settings for new program until later ; in case more are declared for it ?SP_FLG\?SPX_^1 = ^2 ;define new program's name ptr and last pass # to be ; "not yet processed" - needed to store program name later ?SP_PTR\?SPX_^1 = 0 ?SP_PAS\?SPX_^1 = -1 ;Otherwise merge the new special flag with those already known .ELSE ?SP_FLG\?SPX_^1 = (?SP_FLG\?SPX_^1)!(^2) .ENDC ;If this is the first reference to this special program on ; this particular assembly pass, then add the program name ; to the list of special program names. This code is done ; here rather than in the ".IFE ?SPX_^1" block above because ; the .TXT pseudomacro needed won't output data until pass 2, ; and the above block won't execute on pass 2 because ?SPX_^1 ; will be nonzero from pass 1. .IFE (?SP_PAS\?SPX_^1==.PASS) .PART SD_SPECIAL_PROG_NAMES_PART SHARED,LOCAL,DATA ;remember where new program name begins for later ?SP_PTR\?SPX_^1 = . .TXT "^1" ;remember that this doesn't need to happen again this pass ?SP_PAS\?SPX_^1 = .PASS .ENDC % ;Macro that declares a character set palette to be used when alternate ; character sets are invoked by a program. ; ; Call format: ; ; CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ; ; where the arguments are the character set codes to be used. ; Note that the first argument is the standard primary set to use. ;Initial defaults for all palette slots (only need to assign in pass 1) .IFE .PASS ?CHAR_SET_0 = '00' ;Default char set #0 is Keyboard set ?CHAR_SET_1 = '10' ;Default char set #1 is Word Processing set ?CHAR_SET_2 = '11' ;Default char set #2 is Line Drawing set ?CHAR_SET_3 = '0>' ;Default char set #3 is DG International set ?CHAR_SET_4 = '01' ;Default char set #4 is U.S. set ?CHAR_SET_5 = '02' ;Default char set #5 is United Kingdom set ?CHAR_SET_6 = '13' ;Default char set #6 is DG Special Graphics set ?CHAR_SET_7 = '20' ;Default char set #7 is DLL set 0 .ENDC .MACRO CHAR_SET_PALETTE .IFN (.ARGCT>=1) ?CHAR_SET_0 = '^1' .ENDC .IFN (.ARGCT>=2) ?CHAR_SET_1 = '^2' .ENDC .IFN (.ARGCT>=3) ?CHAR_SET_2 = '^3' .ENDC .IFN (.ARGCT>=4) ?CHAR_SET_3 = '^4' .ENDC .IFN (.ARGCT>=5) ?CHAR_SET_4 = '^5' .ENDC .IFN (.ARGCT>=6) ?CHAR_SET_5 = '^6' .ENDC .IFN (.ARGCT>=7) ?CHAR_SET_6 = '^7' .ENDC .IFN (.ARGCT>=8.) ?CHAR_SET_7 = '^8' .ENDC % ;Macro that requests a chunk of unshared memory of a specified size in pages ; to be reserved for SD_MEM operations. SD_MEM will allocate memory ; from this chunk until it is full, and only then will it resort to a ; temporary shared memory file. The default size is sufficient for ; program start-up needs and the initial window, but not for additional ; pop-up windows. Note that excessively large values for this parameter ; may require that a larger KTOP or MTOP be declared at LINK time. ; This parameter can be set to zero to save space in the .PR file, at ; the expense of increased program start-up time. ;Default SD_MEM initial chunk size in pages: .DUSR SD_MEM_INITIAL_PAGES = 20 .MACRO SD_MEM_SIZE .IFN (.ARGCT>=1) .IFL (^1) .DUSR SD_MEM_INITIAL_PAGES = 0 .ELSE .DUSR SD_MEM_INITIAL_PAGES = ^1 .ENDC .ENDC % ;Macro that creates a chunk of code to run at initialization time that ; uses SD_PUT_VALUE to store a string into memory for later reference ; by COBOL programs. It expects as an argument a label where a ; null-terminated string is located. ; ; Usage: ; PUT_VALUE label .MACRO PUT_VALUE ;If this is the first PUT_VALUE, declare externals that will be needed .IFE .MCALL .EXTL SD_PUT_VALUE .EXTC EXTC_SD_INIT_CALLS .ENDC ;Create the literal name for this item .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS ?.PSN = . ;remember where the literal is .TXT "^1" ;Create the code .NREL 7 ?.PSC = . ;remember where this chunk of code begins WSAVR 0 ;Push stack frame LPEFB ^1*2,1 ;Arg2 is byte ptr to string LPEFB ?.PSN*2,1 ;Arg1 is byte ptr to item name LCALL SD_PUT_VALUE,1,2 ;Go store the string in ; PutValue space under ; that name WRTN ;Return to SD_INIT ;Add this new subroutine to the list of initialization calls .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 .DWORD EXTC_SD_INIT_CALLS .DWORD ?.PSC % ;Macro that creates a chunk of code to run at initialization time that ; uses SD_PUT_VALUE to store a one-word value into memory for later ; reference by COBOL programs. It expects as an argument a label ; where the word to be stored is located. ; ; Usage: ; PUT_WORD_VALUE label .MACRO PUT_WORD_VALUE ;If this is the first PUT_VALUE, declare externals that will be needed .IFE .MCALL .EXTL SD_PUT_VALUE .EXTC EXTC_SD_INIT_CALLS .ENDC ;Create the literal name for this item .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS ?.PSN = . ;remember where the literal is .TXT "^1" ;Create the code .NREL 7 ?.PSC = . ;remember where this chunk of code begins WSAVR 0 ;Push stack frame XPEFB (.+13.)*2,1 ;Push byte ptr to a word ; containing a 2 as Arg3, ; the put string length LPEFB ^1*2,1 ;Arg2 is byte ptr to string LPEFB ?.PSN*2,1 ;Arg1 is byte ptr to item name LCALL SD_PUT_VALUE,1,3 ;Go store the string in ; PutValue space under ; that name WRTN ;Return to SD_INIT .WORD 2 ;Add this new subroutine to the list of initialization calls .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS   .ALIGN 1 .DWORD EXTC_SD_INIT_CALLS .DWORD ?.PSC % ;Macro that obtains an answer to the question: ; "When running in a shared console environment, such as CEO, ; what special handling, if any, needs to occur when an IPC ; message is received?" ;Answers are a combination of the following bit flags, which are ; also defined in SD_DEFINES .DUSR SHCON_IPC_HANDLING.FLUSH = 15. ;Do a flush before proceeding ; with the IPC system call .DUSR SHCON_IPC_HANDLING.ENVR = 14. ;Reset console environment ; (characteristics, delimiter ; tables, timeout) after IPC ; system call returns .DUSR SHCON_IPC_HANDLING.REDRAW = 13. ;Redraw the screen at the next ; flush following the IPC call ;Actual answers: .DUSR SHCON_IPC_IGNORE = 0 ;No special handling .DUSR SHCON_IPC_FLUSH = 1B(SHCON_IPC_HANDLING.FLUSH) ;Flush only .DUSR SHCON_IPC_RESET = SHCON_IPC_FLUSH!1B(SHCON_IPC_HANDLING.ENVR) ;Flush and reset environment .DUSR SHCON_IPC_REDRAW = SHCON_IPC_RESET!1B(SHCON_IPC_HANDLING.REDRAW) ;Flush, reset environment, and redraw ;Default is same as how rev 3.00.03 handled this situation ?SHCON_IPC_HANDLING = SHCON_IPC_RESET .MACRO SHARED_CONSOLE_IPC_HANDLING? .IFG (.ARGCT) ?SHCON_IPC_HANDLING = ^1 .ENDC % ;Macro that creates a chunk of code to run at initialization time that ; obtains the PID for a given process name and adds it to the table ; SD_SHCON_IPC_IGNORE_PIDS. IPC's received from any of the PIDs ; listed in this table do not require resetting the terminal state. ; Expects a single argument - the process name (username:simple-proc-name) ; Usage: ; SHCON_IPC_IGNORE_IF_FROM process-name ;Set up the process name table, initially empty. During END_CONFIG processing, ; a zero PID will be appended to table, terminating it. .PART SD_SHCON_IPC_IGNORE_PIDS_PART ALIGN=1,DATA,LONG,UNSHARED,NORM,GLOBAL,MESS SD_SHCON_IPC_IGNORE_PIDS: .MACRO SHCON_IPC_IGNORE_IF_FROM ;If this is the first SHCON_IPC_IGNORE_IF_FROM, declare externals ; that will be referenced in the generated code .IFE .MCALL .EXTC EXTC_SD_INIT_CALLS .ENDC ;Store the given process name literal where code can access it .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS ?.SCIIIFN = . ;remember where the literal is .TXT "^1" ;Allocate a table slot where the PID can be stored .PART SD_SHCON_IPC_IGNORE_PIDS_PART ALIGN=1,DATA,LONG,UNSHARED,NORM,GLOBAL,MESS ?.SCIIIFP = . ;remember addr of this slot .WORD -1 ;init slot value to impossible PID ;Create the code .NREL 7 ?.SCIIIFC = . ;remember where this chunk of code begins WSAVR 0 ;Push stack frame LLEFB 0,?.SCIIIFN*2,1 ;Load byte ptr to name literal WSUB 1,1 ;Zero AC1 to request that PID ; of that process be returned WSUB 2,2 ;AC2 is reserved ?PNAME ;Ask system for that PID WADC 1,1 ;Error! Use a PID of -1 LNSTA 1,?.SCIIIFP ;Put returned PID into table ; slot previously allocated WRTN ;Return to SD_INIT ;Add this new subroutine to the list of initialization calls .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 .DWORD EXTC_SD_INIT_CALLS .DWORD ?.SCIIIFC % ;Final cleanup macro that finishes up any pending configuration definitions .MACRO END_CONFIGURATION .PART SD_UNSHARED_DATA_PART ALIGN=1,DATA,LONG,UNSHARED,NORM,GLOBAL,MESS .ALIGN 1 ;Periodic interval must be specified if there is a screen saver interval, ; and it must be less than or equal to the screen saver interval. .IFG ?SCREEN_SAVER_INTERVAL .IFG ?PERIODIC_INTERVAL .IFG (?PERIODIC_INTERVAL-?SCREEN_SAVER_INTERVAL) .DUSR ?PERIODIC_INTERVAL = ?SCREEN_SAVER_INTERVAL .ENDC .ELSE .DUSR ?PERIODIC_INTERVAL = ?SCREEN_SAVER_INTERVAL .ENDC .ENDC PERIODIC_INTERVAL: .WORD ?PERIODIC_INTERVAL SD_SCREEN_SAVER_INTERVAL: .WORD ?SCREEN_SAVER_INTERVAL SD_HOT_TIMEOUT_INTERVAL: .WORD ?HOT_TIMEOUT_INTERVAL FLUSH_INTERVAL: .WORD ?FLUSH_INTERVAL LOGOFF_INTERVAL: .WORD ?LOGOFF_INTERVAL LOGOFF_OK_AFTER_TIME: .DWORD ?LOGOFF_OK_AFTER_TIME LOGOFF_OK_BEFORE_TIME: .DWORD ?LOGOFF_OK_BEFORE_TIME .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS SD_INPUT_HISTORY_SIZE: .WORD ?INPUT_HISTORY_BUFFER_SIZE SD_SCROLLBACK_BUFFER_SIZE: .DWORD ?SCROLLBACK_BUFFER_SIZE ;If no scrollback buffer was declared, create dummy versions of the ; scrollback handler routines to prevent the SD_SCROLLBACK module ; from being linked into the program. .IFE ?SCROLLBACK_BUFFER_SIZE .ENT SD_APPEND_TO_SCROLLBACK_BUFFER .ENT SD_SHOW_SCROLLBACK_BUFFER SD_APPEND_TO_SCROLLBACK_BUFFER: WSSVR 0 WRTN SD_SHOW_SCROLLBACK_BUFFER: WSAVR 0 WRTN .ENDC ;Store the chosen Alternate Exit Key, and arrange for COBOL programs ; to be able to access this value. SD_ALT_EXIT_KEY: .WORD ?SD_ALT_EXIT_KEY PUT_WORD_VALUE SD_ALT_EXIT_KEY SD_MODEM_DISCONNECT_KEY: .WORD ?SD_MODEM_DISCONNECT_KEY ;Remember the length of the floating clock's format string, if any. ; If a format string was specified, force the clock module to ; be linked into the host program. .DUSR SD_FLOAT_CLOCK_FORMAT_LEN = (SD_FLOAT_CLOCK_LINE-SD_FLOAT_CLOCK_FORMAT)*2 .IFG SD_FLOAT_CLOCK_FORMAT_LEN .EXTL SD_FLOAT_CLOCK .ENDC ;Store Screenprint "Ask for Printer Name" flag SDSCREENPRINT_ASK_OUTPUT_NAME: .WORD ?SDSCREENPRINT_ASK_OUTPUT_NAME ;Store Read Mail "Ask for Printer Name" flag SD_READ_MAIL_ASK_OUTPUT_NAME: .WORD ?SD_READ_MAIL_ASK_OUTPUT_NAME ;Store "Automatic Message Delete" flag SD_READ_MAIL_AUTO_DELETE: .WORD ?SD_READ_MAIL_AUTO_DELETE ;Store "Immediate Mail Delivery" flag SD_IMMEDIATE_MAIL_DELIVERY: .WORD ?SD_IMMEDIATE_MAIL_DELIVERY ;Bit flags in SD_CONFIG_FLAGS word defined in SD_CONFIG: ; (must match definitions in SD_DEFINES) .DUSR CNF.PHYSCLR = 15. ;If set, really clear physical screen whenever ; host program outputs a clear screen command .DUSR CNF.REDOUT = 14. ;If set, do automatic redraw whenever host ; program returns from call to nonSD program .DUSR CNF.IGNINT = 13. ;If set, SCREEN DEMON will discard ^C^x events .DUSR CNF.LNDRBOX = 12. ;If set, boxes will be drawn with LineDraw ; chars if terminal supports alt char sets .DUSR CNF.LNDRLIN = 11. ;If set, horizontal and vertical lines will be ; drawn with LineDraw chars if terminal ; supports alt char sets .DUSR CNF.TRSPUNIN = 10. ;If set, trailing spaces and underscores will ; be truncated when determining initial field ; input buffer contents, allowing ^A and ^E ; to function more logically .DUSR CNF.NEWRETIN = 9. ;If set, new-style SD_RETURN_INPUT is in effect: ; (1) works at any input, not just across hot ; key calls ; (2) multiple fields can be returned, each ; with a delimiter ?CNF = (?PHYSICAL_SCREEN_CLEAR)B(CNF.PHYSCLR) ?CNF = ?CNF!(?AUTO_REDRAW_AFTER_NONSD_CALL)B(CNF.REDOUT) ?CNF = ?CNF!(?IGNORE_CONSOLE_INTERRUPTS)B(CNF.IGNINT) ?CNF = ?CNF!(?USE_LINE_DRAW_CHARSET_FOR_BOXES)B(CNF.LNDRBOX) ?CNF = ?CNF!(?USE_LINE_DRAW_CHARSET_FOR_LINES)B(CNF.LNDRLIN) ?CNF = ?CNF!(?TRIM_SPACE_UNDERSCORE_ON_INPUT)B(CNF.TRSPUNIN) ?CNF = ?CNF!(?SD_RETURN_INPUT_MODE)B(CNF.NEWRETIN) SD_CONFIG_FLAGS: .WORD ?CNF SD_GET_IMAGE_DEFAULTS: .WORD ?SD_GET_IMAGE_DEFAULT_LINES .WORD ?SD_GET_IMAGE_DEFAULT_COLUMNS .WORD ?SD_GET_IMAGE_DEFAULT_PARAMS MAX_CONLOG_SIZE: .DWORD ?MAX_CONLOG_SIZE ;Arrange for COBOL program to be able to access the HOT_TIMEOUT_INTERVAL? ; value declared earlier PUT_WORD_VALUE SD_HOT_TIMEOUT_INTERVAL ;If no default primary and/or alternate character sets were specified, ; select appropriate defaults depending on default 7/8 bit mode setting. ; Then determine the character set palette slots corresponding to the ; selected character sets, and define the external symbols for them. .IFE (SD_DEFAULT_7_OR_8_BIT_MODE-8) ;...if in 8-bit mode... .IFE DEF_PRIMARY_CHAR_SET .DUSR DEF_PRIMARY_CHAR_SET = '01' ;US set .ENDC .IFE DEF_ALTERNATE_CHAR_SET .DUSR DEF_ALTERNATE_CHAR_SET = '0>' ;DG International set .ENDC .ELSE .IFE DEF_PRIMARY_CHAR_SET .DUSR DEF_PRIMARY_CHAR_SET = '00' ;Key board set .ENDC .IFE DEF_ALTERNATE_CHAR_SET .DUSR DEF_ALTERNATE_CHAR_SET = '10' ;WP set .ENDC .ENDC ;Find primary character set palette slot .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 0 ;Default to first slot .IFE (?CHAR_SET_0-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 0 .ELSE .IFE (?CHAR_SET_1-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 1 .ELSE .IFE (?CHAR_SET_2-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 2 .ELSE .IFE (?CHAR_SET_3-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 3 .ELSE .IFE (?CHAR_SET_4-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 4 .ELSE .IFE (?CHAR_SET_5-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 5 .ELSE .IFE (?CHAR_SET_6-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 6 .ELSE .IFE (?CHAR_SET_7-DEF_PRIMARY_CHAR_SET) .DUSR SD_DEFAULT_PRIMARY_CHAR_SET = 7 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ;Find alternate character set palette slot .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 1 ;Default to 2nd slot .IFE (?CHAR_SET_0-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 0 .ELSE .IFE (?CHAR_SET_1-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 1 .ELSE .IFE (?CHAR_SET_2-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 2 .ELSE .IFE (?CHAR_SET_3-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 3 .ELSE .IFE (?CHAR_SET_4-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 4 .ELSE .IFE (?CHAR_SET_5-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 5 .ELSE .IFE (?CHAR_SET_6-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 6 .ELSE .IFE (?CHAR_SET_7-DEF_ALTERNATE_CHAR_SET) .DUSR SD_DEFAULT_ALTERNATE_CHAR_SET = 7 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ALIGN 1 ;Word immediately in front of character set palette contains word offset ; into the palette to slot where Line Draw char set is listed, or ; -1 if Line Draw char set is not in the palette. ?LINE_DRAW_SLOT = -1 .IFE (?CHAR_SET_0-'11') ?LINE_DRAW_SLOT = 0 .ELSE .IFE (?CHAR_SET_1-'11') ?LINE_DRAW_SLOT = 1 .ELSE .IFE (?CHAR_SET_2-'11') ?LINE_DRAW_SLOT = 2 .ELSE .IFE (?CHAR_SET_3-'11') ?LINE_DRAW_SLOT = 3 .ELSE .IFE (?CHAR_SET_4-'11') ?LINE_DRAW_SLOT = 4 .ELSE .IFE (?CHAR_SET_5-'11') ?LINE_DRAW_SLOT = 5 .ELSE .IFE (?CHAR_SET_6-'11') ?LINE_DRAW_SLOT = 6 .ELSE .IFE (?CHAR_SET_7-'11') ?LINE_DRAW_SLOT = 7 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .WORD ?LINE_DRAW_SLOT CHARACTER_SET_PALETTE: .WORD ?CHAR_SET_0 .WORD ?CHAR_SET_1 .WORD ?CHAR_SET_2 .WORD ?CHAR_SET_3 .WORD ?CHAR_SET_4 .WORD ?CHAR_SET_5 .WORD ?CHAR_SET_6 .WORD ?CHAR_SET_7 ;Finish up the list of users who are immune from automatic logoff termination NO_LOGOFF_USERS <127.> ;terminate the list ;Define desired initial memory element .ALIGN 1 .IFG SD_MEM_INITIAL_PAGES SD_MEM_INITIAL_AREA: .DWORD SD_MEM_INITIAL_CHUNK ;Addr of chunk .DWORD SD_MEM_INITIAL_PAGES*1024. ; and its size in words .PART SD_UNINITIALIZED_DATA_PART ALIGN=1,DATA,LONG,UNSHARED,NORM,GLOBAL,MESS .ALIGN 1 SD_MEM_INITIAL_CHUNK: .BLK SD_MEM_INITIAL_PAGES*1024 .ELSE SD_MEM_INITIAL_AREA: .DWORD 0 ;Zero addr means that there is no initial chunk .DWORD 0 ; and its size in words .ENDC ;If no mail hot key routines were declared, then define dummy versions of ; the mail routines so references to them will not be errors, and to ; prevent mail routines from being included in inner ring program or ; shared library due to references in interface modules. .IFE (?HOT?SD_READ_MAIL)!(?HOT?SD_MAIL_INBOX)!(?HOT?SD_INPUT_MAIL) .ENT SD_READ_MAIL .ENT SD_MAIL_INBOX .ENT SD_INPUT_MAIL .ENT SD_CLOSE_USERS_PO_BOX .ENT SD_SEND_MAIL SD_READ_MAIL: SD_MAIL_INBOX: SD_INPUT_MAIL: SD_SEND_MAIL: WSAVR 0 WRTN SD_CLOSE_USERS_PO_BOX: WSSVR 0 WRTN .ENDC ;If an older configuration file not containing remote view indicator ; parameters is being assembled, declare default parameters that ; result in no remote view indicator. .IFE SD_REMOTE_VIEW_INDICATOR-SD_REMOTE_VIEW_INDICATOR_SIZE SD_REMOTE_VIEW_INDICATOR: SD_REMOTE_VIEW_INDICATOR_SIZE: 0 SD_REMOTE_VIEW_INDICATOR_LINE: 1 SD_REMOTE_VIEW_INDICATOR_COLUMN: 1 SD_REMOTE_VIEW_INDICATOR_HEIGHT: 0 SD_REMOTE_VIEW_INDICATOR_WIDTH: 0 .ENDC ;Define the flag word describing how to handle IPC messages when running ; in a shared console environment: SD_SHCON_IPC_HANDLING: .WORD ?SHCON_IPC_HANDLING ;Terminate the "Shared Console IPC-Receive No Redraw If From" PID table ; with a zero entry. .PART SD_SHCON_IPC_IGNORE_PIDS_PART ALIGN=1,DATA,LONG,UNSHARED,NORM,GLOBAL,MESS .WORD 0 % .END .W${S$n$_FjSD_GATE_ARRAY_DEFINES.SR F;Screen Demon rev 3.52.01 inner ring gate array definitions .TITLE SD_GATE_ARRAY ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .NOLOC 1 ;List 'real' lines only .ESC ;Kill MASM's escape character ;Define the gate array header: .ENT SD_GATE_ARRAY .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 SD_GATE_ARRAY: .WORD 0 ;first word is undefined .WORD ?SD_MAX_GATES ;max number of gates ;Define a macro to add an entry for a specified routine to the gate array. ; ; Call format: ; GATE routinename ; "routinename" is the actual entry point for the routine. .DUSR ?SD_MAX_GATES = 0 .MACRO GATE .IFG .ARGCT ;List routine as an external symbol .EXTL ^1 ;Add gate for the routine, callable from any ring .GATE ^1,7S3 ;Increment number of gates that have been defined .DUSR ?SD_MAX_GATES = ?SD_MAX_GATES+1 .ENDC % ;Define a macro to create a dummy slot in the gate array. ; ; Call format: ; DUMMY_GATE .MACRO DUMMY_GATE ;Add gate for the routine, callable from any ring .GATE DUMMY_GATE_CALL,7S3 ;Increment number of gates that have been defined .DUSR ?SD_MAX_GATES = ?SD_MAX_GATES+1 ;Create the dummy routine that will be invoked if the dummy ; gate is referenced. .IFE .MCALL .NREL 7 .ENT DUMMY_GATE_CALL DUMMY_GATE_CALL: WSAVR 0 WRTN .PART SD_SHARED_DATA_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ENDC % ;Define the BEGIN_SD.CALLS macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so that it ; does nothing, since no special initialization is needed. .MACRO BEGIN_SD.CALLS % ;Define the SD.CALL macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so ; that it uses the GATE macro above to create an entry for ; a Screen Demon call. .MACRO SD.CALL GATE ^1 % ;Define the END_SD.CALLS macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so that it ; leaves extra gate numbers available between the Screen Demon ; call gates and first user gates. This allows new Screen Demon ; call gates to be added in future revisions without disturbing ; user gate numbers. .MACRO END_SD.CALLS .DO 32.-10. ;was 32 in rev 3.00.03, but 10 new gates ; were added in rev 3.5 DUMMY_GATE .ENDC % ;The first gate is reserved GATE SD_SYSCALL_GATE ;Gate 0 is the special gate for the ; system call interceptor .EOF .W$G$n$_SD_POSSESS_ICX_1.51.PAT ;The patches in this file activate the SCREEN DEMON routines. ; ;This file applies only to revisions 1.51 and 1.52 of the Interactive COBOL ; interpreter running under AOS/VS, using revision 3.52 of SCREEN DEMON ; for Interactive COBOL. %PROGRAM ;Catch beginning of initialization routine so that SCREEN DEMON can be ; initialized also. INIT+2 [LLEF 2,SCRPK,0] [LJMP SD_ICX_INIT,1] ^+1 [] [] ^+1 [] [] ;This patch allows Screen Demon to know when ICX has an ACCEPT ; in progress, and if multiple console ?READ's are actually ; part of the same ACCEPT. RDFD [WSSVR 10] [LJMP SD_ICX_RDFD,1] ^+1 [] [] ^+1 [NLDAI -1,1] [] ^+1 [] [WADC 1,1] ;This patch causes the ICOBOL interpreter to return an ESCAPE KEY ; value of 99 if a console timeout occurs, instead of aborting ; with a "Runtime System Panic". SETDLM+1135 [NLDAI 67,1] {LPSHJ #SD_PATCH,1} ^+1 [] [] ^+1 [SUB# 0,1,SZR] [] #SD_PATCH 0 [WSNEI 76,0] ^+1 0 [] ^+1 0 [WBR .+5] ^+1 0 [WSNEI 67,0] ^+1 0 [] ^+1 0 [ISZTS] ^+1 0 [WPOPJ] ^+1 0 [WPOP 1,1] ^+1 0 [XNLDA 1,10,2] ^+1 0 [] ^+1 0 [XWADD 1,4,2] ^+1 0 [] ^+1 0 [WSUB 0,0] ^+1 0 [WSTB 1,0] ^+1 0 [NLDAI 99.,0] ^+1 0 [] ^+1 0 [LJMP SETDLM+670,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+23\ ^+1 [] [] ;Intercept EXIT PROGRAM so that if the exiting ICOBOL program was called via ; a "hot" key, control can be returned to the original ACCEPT. A.XIT+3 [LJMP COBOL,0] [LJMP SD_ICX_EXIT_PROGRAM,1] ^+1 [] [] ^+1 [] [] ;Divert STOP RUN processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called ; from a hot key. OAT+232 A.STP-.\ SD_ICX_STOP_RUN_HANDLER-.\ ^+1 [] [] ;Divert CALL PROGRAM processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called from ; a hot key. CHNOP+13 [XJSR WUSIN,1] [LJMP SD_ICX_CALL_PROGRAM_HANDLER,1] ^+1 [] [] ^+1 [WBR CHNOP+153] [] ICX_CALL_PROG_WUSIN_ERR CHNOP+151\ CHNOP+153\ ^+1 [] [] ;Catch ICOBOL program loads so that the name of the new active program ; can be obtained and put into the SCREEN DEMON control file. ASPRG+62 [XJSR WRPGD,1] [LJMP SD_ICX_ASPRG,1] ^+1 [] [] ^+1 [WBR ASPRG+136] [] LDPRG+7 [XJSR RDPGD,1] [LJMP SD_ICX_LDPRG,1] ^+1 [] [] ^+1 [WBR LDPRG+35] [] ;Catch ICX Abort so that SCREEN DEMON can reset the window environment ; if control will return to LOGON. ; Note that the 341 in next line is actually ICX's STATUS address, ; which PATCH won't accept in the instruction format necessary. CSTOP+2 [LDA 0,341,0] [LJMP SD_ICX_CSTOP,1] ^+1 [ANDI 2,0] [] ^+1 [] [] CPERR+14 [WBR CSTOP+11] [WBR CSTOP+2] CSTOP+24 [LJSR WAIT,1] [LJMP SD_ICX_CSTOP_WAIT,1] ^+1 [] [] ^+1 [] [] ;Catch entry into the ICX Debugger so that debugger window can be activated DB0 [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] SBUGG [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] EBUGG [LDASB 3] [LPSHJ SD_ICX_ENTER_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] ;Catch exit from the ICX Debugger so that debugger window can be deactivated DB0+132 [LDASB 3] [LPSHJ SD_ICX_LEAVE_DEBUGGER,1] ^+1 [STASP 3] [] ^+1 [STAFP 3] [] ;Intercept ICX's attempt to input a debugger command so that this can be done ; in a proper screenedit fashion. SCAN0+354 [XJSR RDFD,1] [LJSR SD_ICX_READ_DEBUGGER_COMMAND,1] ^+1 [] [] ^+1 [WBR SCAN0+333] [] ICX_DEBUG_RESTART_ADDR 0 SCAN0+303\ ^+1 0 [] ;********** Optional Patches ********** ;This optional patch causes Screen Demon to catch ICX-generated error ; messages displayed on line 24 so that the original contents of ; the line can be restored after showing the error message. ; INVAL+14 [XJSR DSPER,1] [LJMP SD_ICX_ERROR_INVAL,0] ^+1 [] [] ^+1 [XWLDA 0,-6,3] [] ^+1 [] [NOP] DSPER+104 [XJSR PWRLN,1] [LJMP SD_ICX_ERROR_MPRE,0] ^+1 [] [] ^+1 [WRTN] [] DSPER+115 [XJSR WRLN,1] [LJMP SD_ICX_ERROR_MMSG,0] ^+1 [] [] ^+1 [WRTN] [] SETDLM+1255 [XNLDA 0,2,2] {LJMP #SD_PATCH,1} ^+1 [] [] ^+1 [XNSTA 0,3,3] [] ^+1 [] [NOP] #SD_PATCH 0 [XNLDA 0,2,2] ^+1 0 [] ^+1 0 [XNSTA 0,3,3] ^+1 0 [] ^+1 0 [LJMP SETDLM+1274,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+7\ ^+1 [] [] ;The following patch is not absolutely necessary, but will improve performance ; if the advanced features of SCREEN DEMON are used. It eliminates the ; unnecessary ?LEFE system call that is always performed on returning from ; an assembler CALL routine. This does mean that any assembler routine ; that issues a ?LEFD must do its own ?LEFE before returning to ICX. CALAS+116 [XJSR @16000000006,0] [WBR .+4] ^+1 [] [NOP] ^+1 265 [NOP] ^+1 [WBR CALAS+134] [NOP] ;***** The remaining patches fix bugs in the ICX interpreter ***** ; Note that these patches are not the same ones supplied by Data General. ; The DG patches must also be applied to the new ICX interpreter. ;Fix effective address problems GETSW+55 [BTO 2,1] [WBTO 2,1] RDSEC+410 [LDA 2,4,3] [XNLDA 2,4,3] ^+1 [ADD 1,2] [] ^+1 [NLDAI 0,1] [ADD 1,2] ^+1 [] [WSUB 1,1] CHNOP+100 [BTZ 2,1] [WBTZ 2,1] CHNOP+104 [BTO 2,1] [WBTO 2,1] ;Shutdown guard task is supposed to give the rest of the interpreter time ; to shut down by itself. However, parameters in AC0 and AC1 to its ; ?WDELAY system call are reversed, so it doesn't wait at all, which ; could result in corrupted MINISAM files. INITC+105 [NLDAI 0,0] [NLDAI 11610,0] ^+1 [] [] ^+1 [NLDAI 11610,1] [WSUB 1,1] ^+1 [] [WSUB 2,2] ;CPLOG routine jumps into the middle of CHNOP routine, but stack frame size ; of CPLOG is zero, leaving CHNOP frame data vulnerable to subsequent ; subroutine calls. CPLOG+1 0 @(CHNOP+1) ;End of patches .W$G$n$_SD_POSSESS_ICX_1.60.PAT ;The patches in this file activate the SCREEN DEMON routines. ; ;This file applies only to revision 1.60 of the Interactive COBOL ; interpreter running under AOS/VS, using revision 3.52 of SCREEN DEMON ; for Interactive COBOL. %PROGRAM ;Catch beginning of initialization routine so that SCREEN DEMON can be ; initialized also. INIT+2 [LLEF 2,SCRPK,0] [LJMP SD_ICX_INIT,1] ^+1 [] [] ^+1 [] [] ;This patch allows Screen Demon to know when ICX has an ACCEPT ; in progress, and if multiple console ?READ's are actually ; part of the same ACCEPT. RDFD [WSSVR 10] [LJMP SD_ICX_RDFD,1] ^+1 [] [] ^+1 [NLDAI -1,1] [] ^+1 [] [WADC 1,1] ;Intercept EXIT PROGRAM so that if the exiting ICOBOL program was called via ; a "hot" key, control can be returned to the original ACCEPT. A.XIT+3 [LJMP COBOL,0] [LJMP SD_ICX_EXIT_PROGRAM,1] ^+1 [] [] ^+1 [] [] ;Divert STOP RUN processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called ; from a hot key. OAT+232 A.STP-.\ SD_ICX_STOP_RUN_HANDLER-.\ ^+1 [] [] ;Divert CALL PROGRAM processing so that it can be forced to act like an ; EXIT PROGRAM if it is encountered in a program that was called from ; a hot key. CHNOP+13 [XJSR WUSIN,1] [LJMP SD_ICX_CALL_PROGRAM_HANDLER,1] ^+1 [] [] ^+1 [WBR CHNOP+140] [] ICX_CALL_PROG_WUSIN_ERR CHNOP+151\ CHNOP+153\ ^+1 [] [] ;Catch ICOBOL program loads so that the name of the new active program ; can be obtained and put into the SCREEN DEMON control file. ASPRG+71 [XJSR WRPGD,1] [LJMP SD_ICX_ASPRG,1] ^+1 [] [] ^+1 [WBR ASPRG+124] [] ICX_ASPRG_SUCCESSFUL ASPRG+65\ ASPRG+74\ ^+1 [] [] ICX_ASPRG_ERROR ASPRG+136\ ASPRG+124\ ^+1 [] [] LDPRG+7 [XJSR RDPGD,1] [LJMP SD_ICX_LDPRG,1] ^+1 [] [] ^+1 [WBR LDPRG+35] [] SD_ICX_LDPRG+11 312 276 ;Catch ICX Abort so that SCREEN DEMON can reset the window environment ; if control is returning to LOGON. ; Note that the 343 in next line is actually ICX's STATUS address, ; which PATCH won't accept in the instruction format necessary. CSTOP+2 [LDA 0,343,0] [LJMP SD_ICX_CSTOP,1] ^+1 [ANDI 2,0] [] ^+1 [] [] CPERR+14 [WBR CSTOP+11] [WBR CSTOP+2] CSTOP+24 [LJSR WAIT,1] [LJMP SD_ICX_CSTOP_WAIT,1] ^+1 [] [] ^+1 [] [] ICX_INITC_FAKE_CTRL_C_CTRL_B INITC+35\ INITC+41\ ^+1 [] [] ;********** Optional Patches ********** ;This optional patch causes Screen Demon to catch ICX-generated error ; messages displayed on line 24 so that the original contents of ; the line can be restored after showing the error message. INVAL+16 [XJSR DSPER,1] [LJMP SD_ICX_ERROR_INVAL,0] ^+1 [] [] ^+1 [XWLDA 0,-6,3] [] ^+1 [] [NOP] DSPER+104 [XJSR PWRLN,1] [LJMP SD_ICX_ERROR_MPRE,0] ^+1 [] [] ^+1 [WRTN] [] DSPER+115 [XJSR WRLN,1] [LJMP SD_ICX_ERROR_MMSG,0] ^+1 [] [] ^+1 [WRTN] [] ICX_INVAL_CONTINUE INVAL+22\ INVAL+24\ ^+1 [] [] SETDLM+1344 [XNLDA 0,2,2] {LJMP #SD_PATCH,1} ^+1 [] [] ^+1 [XNSTA 0,3,3] [] ^+1 [] [NOP] #SD_PATCH 0 [XNLDA 0,2,2] ^+1 0 [] ^+1 0 [XNSTA 0,3,3] ^+1 0 [] ^+1 0 [LJMP SETDLM+1363,1] ^+1 0 [] ^+1 0 [] SD_PATCH #SD_PATCH\ #SD_PATCH+7\ ^+1 [] [] ;The following patch is not absolutely necessary, but will improve performance ; if the advanced features of SCREEN DEMON are used. It eliminates the ; unnecessary ?LEFE system call that is always performed on returning from ; an assembler CALL routine. This does mean that any assembler routine ; that issues a ?LEFD must do its own ?LEFE before returning to ICX. CALAS+121 [XJSR @16000000006,0] [WBR .+4] ^+1 [] [NOP] ^+1 265 [NOP] ^+1 [WBR CACHR+22] [NOP] ;***** The remaining patches fix bugs in the ICX interpreter ***** ; Note that these patches are not the same ones supplied by Data General. ; The DG patches must also be applied to the new ICX interpreter. ;Fix effective address problems GETSW+55 [BTO 2,1] [WBTO 2,1] RDSEC+424 [LDA 2,4,3] [XNLDA 2,4,3] ^+1 [ADD 1,2] [] ^+1 [NLDAI 0,1] [ADD 1,2] ^+1 [] [WSUB 1,1] CHNOP+76 [BTZ 2,1] [WBTZ 2,1] CHNOP+102 [BTO 2,1] [WBTO 2,1] ;Shutdown guard task is supposed to give the rest of the interpreter time ; to shut down by itself. However, parameters in AC0 and AC1 to its ; ?WDELAY system call are reversed, so it doesn't wait at all, which ; could result in corrupted MINISAM files. INITC+171 [NLDAI 0,0] [NLDAI 11610,0] ^+1 [] [] ^+1 [NLDAI 11610,1] [WSUB 1,1] ^+1 [] [WSUB 2,2] ;CPLOG routine jumps into the middle of CHNOP routine, but stack frame size ; of CPLOG is zero, leaving CHNOP frame data vulnerable to subsequent ; subroutine calls. CPLOG+1 0 @(CHNOP+1) ;End of patches .W$Rb$n$_.SD_SEND_MAIL.CLI comment SD_SEND_MAIL.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] X SD_SEND_MAIL%0/% %1-% pop .W$Rb$n$`  SDCONTROL.WS *** SDCONTROL.WS Screen Demon rev 3.52.01 *** Copyright (C) 1993, Threshold, Inc., All Rights Reserved *** -------------------------------------------------------- ** Structure of the Screen Demon user control word. ** The value of this word can be set by the SD_CONTROL call, ** or obtained using the SD_GET_CONTROL call. ** This copy file is intended to be used to manipulate the bits ** in the control word via the SD_BITS_TO_DIGITS and the ** SD_DIGITS_TO_BITS calls. 01 SD-CONTROL-BITS-GROUP. 05 SD-CONTROL-RESERVED-BITS PIC X(5). 05 SD-CONTROL-FULL-COMPARE-FLUSH PIC X. 05 SD-CONTROL-NO-HOT-KEYS-BIT PIC X. 05 SD-CONTROL-UNDER-WP-BIT PIC X. 05 SD-CONTROL-UNDER-CEO-BIT PIC X. 05 SD-CONTROL-FLUSH-NEEDED-BIT PIC X. 05 SD-CONTROL-PARTIAL-TURBO-BIT PIC X. 05 SD-CONTROL-TURBO-BIT PIC X. 05 SD-CONTROL-RESERVED-1-BIT PIC X. 05 SD-CONTROL-REDRAW-BIT PIC X. 05 SD-CONTROL-RESERVED-2-BIT PIC X. 05 SD-CONTROL-DISABLE-BIT PIC X. ************************************************************************ * SD-CONTROL-RESERVED-BITS Undefined * SD-CONTROL-FULL-COMPARE-FLUSH Ignore "modified zones" when updating * the terminal screen, comparing the * entire image at every flush. Needed * if program modifies image buffers * directly, instead of through SD calls. * SD-CONTROL-NO-HOT-KEYS-BIT Hot keys are disabled * SD-CONTROL-UNDER-WP-BIT Successful connection established with * WordPerfect Office Shell * SD-CONTROL-UNDER-CEO-BIT Successful connection established with CEO_CP * SD-CONTROL-FLUSH-NEEDED-BIT Window image buffers have been modified since * the last terminal screen update * SD-CONTROL-PARTIAL-TURBO-BIT If the Turbo bit below is also set, then * Turbo mode is Partial, rather than Full * (OBSOLETE!) * SD-CONTROL-TURBO-BIT Optimized display processing is on * SD-CONTROL-RESERVED-1-BIT Undefined * SD-CONTROL-REDRAW-BIT A Redraw is needed at the next screen update * SD-CONTROL-RESERVED-2-BIT Undefined * SD-CONTROL-DISABLE-BIT Screen Demon is disabled - all functions off *** End of SDCONTROL.WS *** .C$h$n$|0SD_MAIL_CALL.ST   p?BOMB ?G.IXIT 0?G.IXMT 0?G.BKPT p3?NTOP p[.KILL- p&?UDP000000 pV?URTB p(?ZMAX p4?NMAX 0?G.UTSKG p(?ZBOT ?SBOT p?NBOT pm.UKIL p?UKIL p)CFALT p&SFALT 0?G.UKILL p/FFALT pa.UTSK p,IFALT 0?G.SYSCA p?UTSK pREPEAT_INTERVAL p}SD_MAIL_CALL pX.BOMB 0?G.UTSKB pMAIL_CHECK_DELAY ( .W$RbE$n$_-MAKE_SD_NO_VM_TERMCAPS_TBL.CLI comment MAKE_SD_NO_VM_TERMCAPS_TBL.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- [!equal,,COMMENT] This macro creates a new SD_NO_VM_TERMCAPS_TBL.OB file, which must be included when linking a program with the optional SD_INIT_NO_VM.OB module. This SD_NO_VM_TERMCAPS_TBL module should be recreated if the SD_TERMCAPS.SR file is modified. [!end] push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] x/s masm/ps=masm_32char.ps/o=SD_NO_VM_TERMCAPS_TBL & SD_NO_VM_TERMCAPS_TBL SD_TERMCAPS pop .W$RbH$n$_aNAMTB_DEFINES.SR a ;Definitions for building ICOBOL subroutine linkage table ; ; Screen Demon rev 3.52.01 .TITLE NAMTB ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .NOLOC 1 ;List 'real' lines only .ESC ;Kill MASM's escape character .RDX 10. ;Set decimal mode .ENABLE WORD,PCREL ;Data placement mode is by word, PC-relative ;Entry point referenced by ICX .ENT NAMTB ;Define the Name Table partitions: ;NAMTB_PART will be where the table itself is built .PART NAMTB_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .ALIGN 1 NAMTB: ;NAMTB_NAMES_PART will be where the routine names are stored .PART NAMTB_NAMES_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS ;Define a macro to add a specified routine to the table. ; ; Call format: ; NAME routinename {, referencename} ; "routinename" is the actual entry point for the routine. ; "referencename" is the name that will appear in CALL "" statements ; within ICOBOL programs. If not specified, "routinename" will be used. .MACRO NAME .IFG .ARGCT ;List routine as an external symbol .EXTL ^1 ;Add its name to the name storage area .PART NAMTB_NAMES_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS ?NM = . .IFG (.ARGCT-1) .TXT "^2" .ELSE .TXT "^1" .ENDC ;Add routine to the NAMTB itself .PART NAMTB_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .DWORD ?NM*2 .DWORD ^1 .ENDC % ;Define the BEGIN_SD.CALLS macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so that it ; does nothing, since no special initialization is needed. .MACRO BEGIN_SD.CALLS % ;Define the SD.CALL macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so ; that it uses the NAME macro above to create an entry for ; a Screen Demon call. .MACRO SD.CALL NAME ^1 % ;Define the END_SD.CALLS macro referenced in the SD_CALLS.SR file ; (which will be assembled with this definition file) so that it ; finishes up the NAMTB table properly. The end of the NAMTB ; is indicated by an entry consisting of a -1. .MACRO END_SD.CALLS .PART NAMTB_PART ALIGN=1,DATA,LONG,SHARED,NORM,GLOBAL,MESS .DWORD -1 % ;Declare the ?CB calls so that they will be placed in the Name Table. ; Note that Screen Demon provides compatible versions of these calls ; that do not require the LANG_RT.LB Common Language Runtimes. NAME ?CBADDR NAME ?CBBADDR NAME ?CBPEEK NAME ?CBPOKE ;;; NAME ?CBRUNTM ;Not implemented in SD_CBCALL NAME ?CBSYS .EOF .W$Vx%5t$_{SCREEN_DEMON.H /************************************************************************* *** screen_demon.h *** *** *** *** C declarations for SCREEN DEMON routines and data structures *** *************************************************************************/ /************************************************************************* *** *** *** Copyright (C) 1988 - 1991, *** *** Threshold, Inc. *** *** Auburn, Alabama U.S.A. *** *** All rights reserved. *** *** *** *** SCREEN DEMON and its associated hot-key routines *** *** are proprietary property of Threshold, Inc. *** *** Except as provided for by the License Agreement; these *** *** shall not be copied, used, or disclosed for any purpose or *** *** reason in whole or in part, without the express written *** *** consent of: *** *** *** *** Threshold, Inc. *** *** 118 North Ross Street *** *** Auburn, Alabama 36830 *** *** *** *************************************************************************/ /* Define macro to convert a narrow bit number into a mask value */ #define MASKOF(bitnum) (1 << (15-bitnum)) /* Define size of an MV word relative to the sizeof() operator */ #define WORDSIZE sizeof(short) #define DBLWORDSIZE sizeof(int) /* If PARU.H has not been included yet, the needed symbols will be defined */ /* here, which saves LOTS of compile time if PARU.H is not otherwise needed. */ #ifndef $MXFN #define $MXFN 32 #define $MXUN 16 #endif #ifndef NULL #define NULL 0 #endif /* Screen size constants */ #define CPL 162 /* Characters per line */ #define LPP 24 /* Lines per page */ #define CPS (CPL * LPP) /* Characters per screen */ /* User Control word (CTRL) flag bit numbers */ /* Bits not listed are reserved, and should not be assumed to be zero! */ #define BYPASS_B 15 /* Bypass mode - screen watching disabled */ /* bit 14 is reserved */ #define REFSCN_B 13 /* Refresh screen at next flush */ /* bit 12 is reserved */ #define TURBO_B 11 /* Turbo display mode (optimized displays) */ #define PARTURBO_B 10 /* Turbo level is only partial, not full */ /* Note that TURBO bit must also be set */ #define FLUSH_B 9 /* A flush is necessary because a display */ /* string has been mapped in cur VIB since */ /* last screen output occurred */ #define UNDER_CEO_B 8 /* This process is running as an integrated */ /* application under CEO or CEO Light */ #define UNDER_WPSHL_B 7 /* This process is running as a Shell-compatible */ /* application under WordPerfect Library or Office */ #define NO_HOT_KEYS_B 6 /* If set, hot keys are disabled */ #define IGNRDLMODMAP_B 5 /* Ignore RDL modification zone entries, * compare entire image at flush time. */ /* User Control word (CTRL) flag bit masks */ #define BYPASS MASKOF(BYPASS_B) /* Bypass mode - auto features */ /* are disabled */ #define REFSCNF MASKOF(REFSCN_B) /* Refresh screen before next flush */ #define TURBO MASKOF(TURBO_B) /* Turbo display mode (display */ /* optimization is active) */ #define PARTURBO MASKOF(PARTURBO_B) /* Turbo level is only partial, */ /* not full. TURBO bit must */ /* also be set. */ #define FLUSH MASKOF(FLUSH_B) /* A flush is necessary because */ /* a display string has been */ /* mapped into cur VIB since */ /* last screen output occurred. */ #define UNDER_CEO MASKOF(UNDER_CEO_B) /* This process is running as an */ /* integrated application under */ /* CEO or CEO Light. */ #define UNDER_WPSHL MASKOF(UNDER_WPSHL_B) /* This process is running */ /* as a Shell-compatible */ /* application under */ /* WordPerfect Library */ /* or Office. */ #define NO_HOT_KEYS MASKOF(NO_HOT_KEYS_B) /* If set, hot keys are disabled */ #define IGNRDLMODMAP MASKOF(IGNRDLMODMAP_B) /* Ignore RDL modification zone entries, * compare entire image at flush time. */ /* Attribute flag bit numbers */ /* Bits in high byte are global for entire window and are */ /* are not stored with individual character positions. */ /* Bits not listed are reserved, and should not be assumed to be zero! */ #define DIM_B 15 /* Dim on */ #define BLINK_B 14 /* Blink on */ #define UNDER_B 13 /* Underline on */ #define REVRS_B 12 /* Reverse video on */ #define CHSET_1B 11 /* Low char set palette slot # bit */ #define CHSET_2B 10 /* Mid char set palette slot # bit */ #define CHSET_3B 9 /* Hi char set palette slot # bit */ #define PROTF_B 8 /* Protect on */ #define PAGEMODE_B 0 /* Window is in page-mode (won't scroll) */ #define ALTSET_B 1 /* Window is now in alternate char set */ #define ALTMAR_B 2 /* Alternate margins are in effect */ #define NOHSCRL_B 3 /* Horizontal scrolling is disabled */ #define PROTEN_B 4 /* Character protection is ENabled */ #define NOBLINK_B 5 /* Blink is disabled */ #define EIGHTBIT_B 6 /* Window is in 8-bit mode, so the top bit * of chars mapped into window is significant */ /* Attribute flag bit masks */ #define NOATTRBS 0 /* All attributes off */ #define DIMF MASKOF(DIM_B) /* Dim on */ #define BLINKF MASKOF(BLINK_B) /* Blink on */ #define UNDERF MASKOF(UNDER_B) /* Underline on */ #define REVRSF MASKOF(REVRS_B) /* Reverse video on */ #define CHSET_M (MASKOF(CHSET_1B)+MASKOF(CHSET_2B)+MASKOF(CHSET_3B)) /* Char set palette slot # */ #define PROTF MASKOF(PROTF_B) /* Protect on */ #define PAGEMODE_M MASKOF(PAGEMODE_B) /* Window is in page-mode */ /* (won't scroll) */ #define ALTSET_M MASKOF(ALTSET_B) /* Window is in alt char set */ #define ALTMAR_M MASKOF(ALTMAR_B) /* Alternate margins are in effect */ #define NOHSCRL_M MASKOF(NOHSCRL_M) /* Horizontal scrolling is disabled */ #define PROTEN MASKOF(PROTEN_B) /* Character protection is ENabled */ #define NOBLINK MASKOF(NOBLINK_B) /* Blink is disabled */ #define EIGHTBIT MASKOF(EIGHTBIT_B) /* Window is in 8-bit mode, so * the top bit of chars mapped * into window is significant */ /* Virtual window buffer structure */ typedef struct { char SDcharacter[CPS]; /* character plane */ unsigned char SDattribute[CPS]; /* attribute plane */ short SDcur_offset; /* cur cursor offset */ /* within char plane */ unsigned short SDcur_attrb; /* current attributes */ short SDPrimCharSetNum; /* prim set palette slot # */ short SDAltCharSetNum; /* alt set palette slot # */ short SDCursorType; /* Cursor Type: */ /* 0 = no cursor */ /* 1 = blinking underscore */ /* 2 = reverse video block */ /* 3 = blinking reverse video block */ short SDKeybdLang; /* Keyboard Language: */ /* 0 = matches keyboard hardware */ /* 1 = US ASCII in K1, International in K2 */ short SDScrollRate; /* Scroll Rate: */ /* 0 = jump scroll */ /* 1 = smooth 5 rows/sec */ /* 2 = smooth 10 rows/sec */ /* The following definition of IMGSIZ must be maintained so as to */ /* match the aggregate size of the above fields. This is needed */ /* to have the entire  structure round up to an even page in size. */ #undef $padSize #define IMGSIZ (CPS + CPS + (sizeof(short) * 7)) #define $padSize (((IMGSIZ + 2047) / 2048) * 2048) - IMGSIZ #if $padSize char SDVIB_padding[$padSize]; #endif } SDVIB; /** Note that in rev 1.31, the SDVIB structure ended with SDcur_attrb. **/ /** In rev 2.01, it ended with SDAltCharSetNum. **/ /* Window view descriptor structure */ typedef struct SDVIEW_struct { short SDViewVIBLine; /* Line # where view begins in VIB */ short SDViewVIBCol; /* Column # where view begins in VIB */ short SDViewTIBLine; /* Line # where view begins in TIB */ short SDViewTIBCol; /* Column # where view begins in TIB */ short SDViewHeight; /* # of lines occupied by view */ short SDViewWidth; /* # of columns occupied by view */ struct SDVIEW_struct *SDViewNext; /* Addr of next view, or */ /* NULL if no more views */ /* rev 2.01 view descriptor ended at this point */ unsigned short SDViewFlags; /* Flags for this view */ /* The following definition of `$size' must be maintained to match */ /* the aggregate size of the above fields. This is needed so that */ /* the size of the entire structure rounds up to an even number of */ /* words. */ #undef $size #define $size ( (sizeof(short) * 6) + sizeof(struct SDVIEW_struct *) + sizeof(unsigned short) ) #if ( $size - (($size / DBLWORDSIZE) * DBLWORDSIZE) ) short SDView_padding; /* extra word of padding if needed */ #endif } SDVIEW; /* Definition of flag bits in view descriptor flags word */ #define VWFCOM 1 /* Compress mode is on for view */ /* Window descriptor structure */ typedef struct SDWINDOW_struct { char *SDWndVIB; /* Byte ptr to window's VIB */ /* really a (char *)(&SDVIB) */ struct SDWINDOW_struct *SDWndAbove; /* Addr of descriptor of window above this one */ struct SDWINDOW_struct *SDWndBelow; /* Addr of descriptor of window below this one */ struct SDWINDOW_struct *SDWndActUp; /* Addr of descriptor of window above this one in active list */ struct SDWINDOW_struct *SDWndActDown; /* Addr of descriptor of window below this one in active list */ unsigned short SDWndFlags; /* Flags, see below */ short SDW_unused; short SDWndTIBLineOffset; /* # of additional lines to add to SDViewTIBLine of all views in window */ short SDWndTIBColOffset; /* # of additional columns to add to SDViewTIBCol of all views in window */ short SDWndVIBLineOffset; /* # of additional lines to add to SDViewVIBLine of all views in window */ short SDWndVIBColOffset; /* # of additional columns to add to SDViewVIBCol of all views in window */ short SDWndHeight; /* # of lines in window image buffer */ short SDWndWidth; /* # of columns in window image buffer */ SDVIEW SDWndView1; /* First wnd view descrip is */ /* contained in wnd descrip */ /* rev 2.01 window descriptor ended at this point */ short SDWndLeftMargin; /* Column offset to window's left margin */ short SDWndRightMargin; /* Column offset to window's right margin */ short SDWndOldLeftMargin; /* Save area for old left margin while */ /* alternate margins are in effect */ short SDWndOldRightMargin; /* Save area for old right margin while */ /* alternate margins are in effect */ long SDWndClone; /* addr of clone area for this * window, or zero if none */ /* The following definition of `$size' must be maintained to match the aggregate size of the above fields. This is needed so that the size of the entire structure rounds up to an even number of words. The definition is split into several lines to avoid a line too long for SCOM to handle. */ #undef $size #undef $size1 #define $size1 ( sizeof(char *) + (sizeof(struct SDWINDOW_struct *) * 4) + sizeof(unsigned short) ) #define $size ( $size1 + (sizeof(short) * 11) + sizeof(SDVIEW) + sizeof(long) ) #if ( $size - (($size / DBLWORDSIZE) * DBLWORDSIZE) ) short SDWnd_padding; /* extra word of padding if needed */ #endif } SDWINDOW; /* Window flag bit masks */ #define WNDINTF 1 /* Internal (allocated memory) VIB area */ /* instead of caller-supplied variable */ #define WNDFLOATF 2 /* Window is a floating window */ #define WNDWRPF 4 /* The last displayable char monitored */ /* into this window caused cursor to */ /* wrap to beginning of next line. */ /* Nonbinary monitor should eat next */ /* . */ #define WNDD400F 8 /* Host program has sent D400 cmds to this */ /* window. View descriptors refer to */ /* hardware windows, not true SD views. */ /* Definition of optional input cache structure for SD_READ_CHAR */ /* and SD_GETCHAR calls. */ #define SD_INBUF_SIZE 32 /* This size is an arbitrary number */ typedef struct { short IBSIZE; /* Input cache buffer data area size */ short IBCHARS; /* # of chars currently in cache buf */ short IBUSED; /* # of chars used from cache buffer */ char IBDATA[SD_INBUF_SIZE]; /* Actual cache data area */ } SDINBF; /* Always initialize IBSIZE offset to the actual size of the input cache */ /* buffer before using this structure with SD_READ_CHAR or SD_GETCHAR */ /* Definition of packet for SD_INPUT_STRING calls */ typedef struct { char *ISBuf; /* Byte ptr to input buffer. If */ /* zero, buffer follows packet */ short ISSize; /* Input buffer size */ short ISChars; /* # of chars currently in input buf */ short ISLine; /* Screen line # */ short ISCol; /* Screen column # */ short ISCurOfs; /* Initial cursor offset within fld */ short ISTimeout; /* Timeout setting (-1 if none) */ char ISDelim; /* Returned delimiter */ char ISRtnFull; /* Return when full flag */ char ISNoEcho; /* Don't echo input flag */ } SDISPK; /* Menu packet definition used by SD_POP_UP_MENU call */ typedef struct { short SDPUM_line; /* 1st screen line used by menu */ short SDPUM_col; /* 1st screen col used by menu */ short SDPUM_default; /* Default selection's item # */ short SDPUM_sel; /* Selected item # */ char SDPUM_selstr[30]; /* Selected item's text */ char SDPUM_items; /* Menu items string, variable length */ } SDPOPUPMENU; /* Menu packet definition used by SD_MENU call */ typedef struct { short SDM_rev; /* Revision: use value of 2, 3, or 4, depending on the format used for the rev-dependent parts of packet */ short SDM_line; /* 1st screen line used by menu */ short SDM_col; /* 1st screen col used by menu */ short SDM_default; /* Default selection's item # */ char *SDM_items; /* Byte ptr to list of selections */ char *SDM_descs; /* Byte ptr to list of selection descriptions (NULL if none) */ short SDM_descline; /* Screen line where description goes */ short SDM_desccol; /* Screen column where description goes */ char *SDM_hdr; /* Byte ptr to header text for menu (NULL if none) */ char *SDM_ftr; /* Byte ptr to footer text for menu (NULL if none) */ char *SDM_keydefs; /* Byte ptr to key action definition table (NULL if none) */ char *SDM_inbuf; /* Byte ptr to SD_GETCHAR input buffer structure (NULL if none) */ char SDM_fmt; /* Menu format: H or V (horizontal or vertical) */ char SDM_wnd; /* Create new window for menu? Y or N */ char SDM_box; /* Draw box around menu selections? Y or N */ char SDM_dirsel; /* Allow direct selection? Y or N (typing 1st letter of an item selects and returns it) */ char SDM_cursm; /* Move cursor with highlight? Y or N (Y to keep cursor in front of hi-lighted item) */ char SDM_drawrtn; /* Display menu only, then return? Y or N (does not ask for selection) */ char SDM_topb; /* Top Boundary Type: W, R, I (wrap, return, or ignore on Up cmd at first item */ char SDM_botb; /* Top Boundary Type: W, R, I (wrap, return, or ignore on Down cmd at last item */ unsigned short SDM_hilon; /* Attributes that must be ON for highlighted item */ unsigned short SDM_hiloff; /* Attributes that must be  @ OFF for highlighted item */ short SDM_timeout; /* Timeout setting (-1 if none) */ /* The format of the next part of the packet (8 bytes) is packet rev-dependent: Packet rev 2: char *SDM_delim; Byte ptr to field where menu delimiter can be returned (NULL if none) char *SDM_sel; Byte ptr to a short where # of selected item can be returned (NULL if none) Packet rev 3: char SDM_unused[3]; char SDM_delimiterChar; Delimiter char that ended menu char SDM_unused2[2]; short SDM_selectedItem; Menu item # that was selected Disregard the following weirdness, which makes using the simple names above possible: */ union SDMrevdep_ut { struct SDMrev2_struct { char *SDM_delim_rev2; char *SDM_sel_rev2; } SDMrev2; struct SDMrev3_struct { char SDM_unused[3]; char SDM_delim_rev3; char SDM_unused2[2]; short SDM_sel_rev3; } SDMrev3; } SDMrevdep_u; #define SDM_delim SDMrevdep_u.SDMrev2.SDM_delim_rev2 #define SDM_sel SDMrevdep_u.SDMrev2.SDM_sel_rev2 #define SDM_delimiterChar SDMrevdep_u.SDMrev3.SDM_delim_rev3 #define SDM_selectedItem SDMrevdep_u.SDMrev3.SDM_sel_rev3 /* End of packet rev dependent part of packet */ char *SDM_seltxt; /* Byte ptr to a string where text of selected item can be returned (NULL if none) */ /* New fields added in revision 3.50 (packet rev 4): */ short SDM_maxSize; /* Max # of lines allowed for menu * items if vertical menu, or max # * of columns allowed for menu items * if horizontal. Does NOT include * space for box border or * header/footer, if any. */ char SDM_sort; /* Sort flag - "Y" if menu items are * to be sorted into alphabetic order */ char SDM_unused3; } SDMENU; /* Key action numbers for optional table that SDM_keydefs slot in menu */ /* packet above points to. This table is defined as "unsigned char[256]" */ #define KA_UNSPECIFIED 0 /* Table provides no info for key, */ /* do default action for that key */ #define KA_IGNORE 1 /* Ignore key completely */ #define KA_SELECT KA_IGNORE + 1 /* Return current selection */ #define KA_NEXT KA_SELECT + 1 /* Move to next selection */ #define KA_PREV KA_NEXT + 1 /* Move to previous selection */ #define KA_ABORT KA_PREV + 1 /* Abort menu, return nothing */ #define KA_MAX KA_ABORT /* Highest key action number */ /* Structure of a console event log file record header: */ typedef struct { short LR_EVENT; /* Event code from list below */ short LR_IDATE; /* Timestamp date from ?ITIME */ long LR_ITIME; /* Timestamp time from ?ITIME */ short LR_LEN; /* Size of data area in bytes */ /* char LR_DATA[]; Data area (variable length, */ /* rounded up to word boundary) */ /* short LR_LEN2; A second copy of the data area */ /* size follows the data area. */ } SDCONEV_HDR; /* Event type codes used when logging console events, with structures */ /* of the data logged for each event. */ #define CONEV_SYNC 0 /* Synchronizer record */ /* (must be code zero!) */ /* This record's data has the following structure: */ typedef struct { char LRSY_CON[$MXFN]; /* Console device name */ char LRSY_USER[$MXUN]; /* Username */ char LRSY_PROG[$MXFN*2]; /* Program name (with ICOBOL */ /* program name appended, */ /* if applicable */ SDVIB LRSY_IMAGE; /* Complete screen image */ /* rev 3.5 adds the following fields: */ SDWINDOW LRSY_TIBWND; /* TIB "fake" window descriptor */ SDVIEW LRSY_VIEWS[LPP - 1]; /* Add'l TIB view descriptors */ } SDCONEV_SYNC; #define CONEV_DISPLAY (CONEV_SYNC+1) /* Screen output */ /* Data is the string that was output to console */ #define CONEV_INPUT_AFTER (CONEV_DISPLAY+1) /* Screen input - After */ /* Data has the following structure: */ typedef struct { short LRIA_LINE; /* Screen line # where input occurred */ short LRIA_COL; /* Screen column # where input occurred */ short LRIA_CUROFS; /* Ending cursor offset in field */ char LRIA_unused; /* hi byte of word containing delim */ char LRIA_DELIM; /* Delimiter char */ short LRIA_LEN; /* # of printable chars input */ char LRIA_CHARS[2]; /* Actual input data chars, not * including delimiter. * Not really 2 chars long, but * variable length given by LRIA_LEN */ } SDCONEV_INPUT; #define CONEV_GETCHAR_AFTER (CONEV_INPUT_AFTER+1) /* Single char read, Afterward */ /* Data is the single character returned to caller of GETCHAR */ #define HI_CONEV (CONEV_GETCHAR_AFTER) /* Highest console */ /* log event code */ /* SCREEN DEMON data areas */ extern $ref unsigned short CTRL; /* User control word */ extern $ref SDVIB TIB; /* Terminal Image Buffer */ /* This can also be considered to be the beginning of a SDWINDOW */ /* structure that continues through CHARSETS below */ extern $ref unsigned char TIBATR[CPS]; /* attribute plane of TIB */ extern $ref unsigned short TIBOFS; /* current offset of cursor in TIB */ extern $ref unsigned short ATTRB; /* current attributes of TIB */ extern $ref short CHARSETS[2]; /* primary & alt char set palette */ /* slot #'s for TIB */ extern $ref long TIB_UPD_COUNT; /* Counter that must be incremented */ /* each time the TIB is updated */ extern $ref SDWINDOW *AWDSC; /* Word addr of active window descriptor */ extern $ref char *AWBUF; /* Byte ptr to active window image buffer (actually an SDVIB structure) */ extern $ref short *AWOFS; /* Word addr of short containing cur offset into active VIB */ extern $ref unsigned short *AWATR; /* Word addr of short containing attributes of active VIB */ extern $ref short *AWSET; /* Word addr of cur VIB's char set indicators */ extern $ref char *AWPOS; /* Byte ptr to cur pos in active VIB */ /* *AWPOS must == *AWBUF + *AWOFS !! */ extern $ref SDWINDOW *FLOAT_TOP_WINDOW; /* Addr of top floating */ /* window's descriptor */ extern $ref SDWINDOW *TOP_WINDOW; /* Addr of top nonfloating window's */ /* descriptor */ extern $ref SDWINDOW *BOTTOM_WINDOW; /* Addr of bottom window's descriptor */ extern $ref short SD_CUR_PID; /* PID of current process */ extern $ref short CON_ACTIVE_PID; /* PID of process in control of TIB */ /* Although they are actually character strings, the next two items are * defined as word addresses! Cast to (char *) before using. */ extern $ref short CON_PROG[$MXFN]; /* Name of cur process's program */ extern $ref short CON_USERNAME[($MXUN + 1) / 2]; /* Username of current process */ extern $ref unsigned short CON_TERMCAPS; /* Bit flags describing the */ /* capabilities of the terminal */ /* currently in use */ /* Terminal Capability bit flag definitions: */ /* Mnemonic Bit Mask Means that terminal supports: */ /* ======== ======== ============================= */ #define TC_UNDER 1 /* underscore attribute */ #define TC_REVERS 2 /* reverse video */ #define TC_ALTSET 4 /* alternate character sets */ #define TC_COMPRESS 8 /* compress mode */ #define TC_HDW 16 /* hardware windowing */ #define TC_VSCRL 32 /* scroll up and down */ #define TC_HSCRL 64 /* scroll left and right */ /* (implies that display memory */ /* is wider than display screen) */ #define TC_MARGINS 128 /* left and right margins */ #define TC_CHINDL 256 /* insert/delete character */ #define TC_LNINDL 512 /* insert/delete line */ /* Mnemonic for "all capabilities available" */ #define TC_ALL (~0) extern $ref short LOGOFF_INTERVAL; /* Inactivity time in sec */ /* before shutdown occurs. */ /* (-1 for unlimited) */ extern $ref short PERIODIC_INTERVAL; /* Time in sec between */ /* execution of periodic */ /* routines while an input */ /* is in progress. */ /* -1 = no `  periodic timeout */ extern $ref short FLUSH_INTERVAL; /* Max time in sec that can */ /* elapse between screen */ /* updates, which normally */ /* occur when an input */ /* begins when Turbo is on. */ /* -1 = no screen updates */ /* except at inputs */ extern $ref short ACCEPT_TIMEOUT; /* ICOBOL ACCEPT timeout setting */ /* SCREEN DEMON calls */ /************************************************************************/ /* NATIVE C CALLS */ /************************************************************************/ void SDControl(); /* Stores the given value into the Screen Demon user control word SDControl(ctrl); unsigned int ctrl; */ void SDSetAcceptTimeout(); /* Sets the timeout in seconds for the next console input to be executed. Use a value of -1 to indicate no timeout. SDSetAcceptTimeout(time); int time; */ void SDSetLogoffInterval(); /* Sets the maximum time in seconds that may elapse between input characters before the process is terminated due to inactivity. Use a value of -1 to indicate no logoff timeout. SDSetSetLogoffInterval(time); int time; */ unsigned int SDGetControl(); /* Returns the current state of the Screen Demon user control word. ctrl = SDGetControl(); unsigned int ctrl; */ unsigned int SDTurboOn(); /* Activates Turbo display optimization at either Full or Partial, depending upon which level was most recently in use. Returns previous state of Turbo setting, which can later be passed to the SDTurboReset() function to restore Turbo back to that. */ unsigned int SDTurboOff(); /* Deactivates Turbo display optimization. Returns previous state of Turbo setting, which can later be passed to the SDTurboReset() function to restore Turbo back to that. */ unsigned int SDTurboFull(); /* Activates Turbo display optimization at Full level. Returns previous state of Turbo setting, which can later be passed to the SDTurboReset() function to restore Turbo back to that. */ unsigned int SDTurboPartial(); /* Activates Turbo display optimization at Partial level. Returns previous state of Turbo setting, which can later be passed to the SDTurboReset() function to restore Turbo back to that. */ void SDTurboReset(); /* Restores Turbo setting to a previous state, as returned by one of the SDTurbo... functions above. SDTurboReset(prevTurboSetting); unsigned int prevTurboSetting; */ void SDBypassOn(); void SDDisable(); /* Disables Screen Demon. Hot keys, Turbo display, etc., will not function. */ void SDBypassOff(); void SDEnable(); /* Reenables Screen Demon if it is disabled. */ void SDDisableHotKeys(); /* Disables Screen Demon hot keys only. All other Screen Demon features remain operational. */ void SDEnableHotKeys(); /* Reenables Screen Demon hot key functionality, if it had been previously turned off using the SDDisableHotKeys() function above. */ void SDLoadTib(); /* Declares that the current terminal screen appearance matches the contents of the given image buffer. SDLoadTib(imgBuf); SDVIB *imgBuf; */ char SDReadChar(); char SDReadCharOnly(); /* Inputs a single character from the console. SDReadCharOnly is the same as SDReadChar except that it does not do hot key processing. An optional timeout argument can be specified for either version. If no timeout argument is given, no timeout is assumed. c = SDReadChar(); c = SDReadChar(timeout) char c; int timeout; */ void SDDrawBox(); /* Draws a box of a specified size into the current window at a specified location. The box drawing characters depend on the terminal model and whether or not line drawing characters are allowed for boxes (see USE_LINE_DRAW_CHARSET_FOR_BOXES? question in the SD_CONFIG file). The label argument is optional; if not supplied, the box will not have a label line. SDDrawBox(line, column, height, width); SDDrawBox(line, column, height, width, label); int line, column, height, width; char *label; */ void SDDrawVLine(); /* Draws a vertical line of a specified length into the current window at a specified position. The line drawing characters depend on the terminal model id and whether or not line draw characters are allowed for lines (see USE_LINE_DRAW_CHARSET_FOR_LINES? question in SD_CONFIG). SDDrawVLine(line, column, length); int line, column, length; */ void SDDrawHLine(); /* Draws a horizontal line of a specified length into the current window at a specified position. The line drawing characters depend on the terminal model id and whether or not line draw characters are allowed for lines (see USE_LINE_DRAW_CHARSET_FOR_LINES? question in SD_CONFIG). SDDrawVLine(line, column, length); int line, column, length; */ void SDSetLineDrawStyle(); /* Specifies whether double or single pixel LineDraw characters are to be used to create lines and box borders, and whether they are to be Bright, Dim, or Reverse Video. The declaration applies to the next SDDrawBox(), SDDrawVLine(), SDDrawHLine(), or window creation call that draws a box. After the drawing operation, the box style will be automatically set back to the default (double width, bright). SDSetLineDrawStyle(style) int style; Possible values for style are: #define LD_STYLE_DOUBLE_BRIGHT 0 #define LD_STYLE_SINGLE_BRIGHT 1 #define LD_STYLE_DOUBLE_DIM 2 #define LD_STYLE_SINGLE_DIM 3 #define LD_STYLE_DOUBLE_BRIGHT_RVID 4 #define LD_STYLE_SINGLE_BRIGHT_RVID 5 #define LD_STYLE_DOUBLE_DIM_RVID 6 #define LD_STYLE_SINGLE_DIM_RVID 7 Any other value for style is treated as double width, bright */ void SDSetBoxFillStyle(); /* Specifies a character and its attributes that is to be used to fill the interior of the next box to be drawn. If an unprintable character (such as a null) is given, the interior of the box will not be affected; this permits drawing a box around data already present on the screen without erasing that data. After the next box is drawn, the box fill style will automatically be set back to the default, which is normal spaces. SDSetBoxFillStyle(fillchar, fillattributes); char fillchar; unsigned short fillattributes; Values for fillattributes are the same as those for the attributes of a character in an image buffer. */ void SDDisplay(); /* Displays a given image to the terminal. SDDisplay(imgBuf); SDVIB *imgBuf; */ int SDDisplayIntoString(); /* Similar to SDDisplay, except that the characters that would be output to the terminal are returned in the given string instead. The return value of the function is the number of characters that were placed in the given string variable. There will not be a terminating null. count = SDDisplayIntoString(s, imgBuf); char *s; SDVIB *imgBuf; int count; */ void SDFlush(); /* Updates the terminal screen so that it matches the current virtual window images. Any screen output that Screen Demon has buffered will be sent to the terminal at this time. */ void SDRedraw(); /* Clears and repaints the entire screen. */ void SDGetImage(); /* Stores a picture of the current terminal image in the given image buffer. Floating windows are included in the picture. SDGetImage(imgBuf); SDVIB *imgBuf; */ void SDGetImageBelowFloat(); /* Stores a picture of the current terminal image in the given image buffer, but areas normally obscured by floating windows appear as if the floating windows were not present. SDGetImageBelowFloat(imgBuf); SDVIB *imgBuf; */ int SDGetPos(); /* Returns the offset of the cursor within the current window. This can be converted to a line and column with the calculations: line = offset / CPL; column = offset % CPL; The resulting line and column values are offsets from home position, so that the first line on the screen is line 0, and the first column in a line  is column 0. offset = SDGetPos(); int offset; */ SDWINDOW *SDNewWindow(); SDWINDOW *SDNewWindowUsingImage(); SDWINDOW *SDNewWindowNoInit(); SDWINDOW *SDNewWindowNoInitUsingImage(); SDWINDOW *SDCreateWindow(); SDWINDOW *SDCreateWindowUsingImage(); SDWINDOW *SDCreateWindowNoBox(); SDWINDOW *SDCreateWindowNoBoxUsingImage(); SDWINDOW *SDCreateWindowNoInit(); SDWINDOW *SDCreateWindowNoInitUsingImage(); /* The SDNewWindow and SDCreateWindow calls create a new Screen Demon window, possibly with a box. SDNewWindow always creates a full-screen window. SDCreateWindow creates a full-screen window internally, but only shows a portion of it on the terminal; the hidden parts of the window image can be ignored. All of these calls return a pointer to the descriptor of the newly created window. There are a few variations of these calls: (1) Full screen window without a box. Note that SDCreateWindow() with no arguments is equivalent to SDNewWindow(). SDNewWindow(); SDCreateWindow(); (2) Full screen window with a box drawn into it automatically at the location and of the size specified. SDNewWindow(line, column, height, width); int line, column, height, width; (3) Partial screen window with a box drawn as a border around it. The box parameters specify the position and size of the visible portion of the window on the terminal screen. The top left corner of the box represents line 1, column 1 of the window image, no matter where the box appears on the terminal screen. SDCreateWindow(line, column, height, width); int line, column, height, width; (4) Partial screen window with no border. The "box" parameters specify the position and size of the visible portion of the window on the terminal screen. The top left corner of the specified rectangular region represents line 1, column 1 of the window image, no matter where the region appears on the terminal screen. SDCreateWindowNoBox(line, column, height, width); int line, column, height, width; (5) The "...UsingImage" versions of the calls expect the first argument to be an (SDVIB *); other parameters, if any, are the same as specified for the non-"...UsingImage" versions. The specified image buffer will be used for the new window instead of an automatically allocated one. This allows the program to treat the window as if it were a memory-mapped display. Changes can be made directly to the image buffer, which will be updated to the terminal screen at the next flush. Note that a C program can access the current active window image buffer even without using the "...UsingImage" calls. The external variable AWBUF, defined as a (SDVIB *) always points to the current active window image buffer. SDNewWindowUsingImage(imgbuf); SDCreateWindowUsingImage(imgbuf); SDNewWindowUsingImage(imgbuf, line, column, height, width); SDCreateWindowUsingImage(imgbuf, line, column, height, width); SDVIB *imgbuf; int line, column, height, width; (6) The "...NoInit" versions of the calls function like the other versions, except that the contents of the new window image are not initialized to be the same as the current screen image. The "...NoInitUsingImage" calls retain the contents of the caller-supplied image buffer; a possible use for this is to display screens from a file. The "...NoInit" versions that do not supply image buffers start with a blank screen image. SDNewWindowNoInit(); SDCreateWindowNoInit(); SDNewWindowNoInit(line, column, height, width); SDCreateWindowNoInit(line, column, height, width); SDNewWindowNoInitUsingImage(imgbuf); SDCreateWindowNoInitUsingImage(imgbuf); SDNewWindowNoInitUsingImage(imgbuf, line, column, height, width); SDCreateWindowNoInitUsingImage(imgbuf, line, column, height, width); SDVIB *imgbuf; int line, column, height, width; */ void SDRemoveWindow(); /* With no arguments, the current active window is removed. SDRemoveWindow(); Otherwise, a pointer to the window descriptor of the window to be removed is specified. SDRemoveWindow(wndDsc); SDWINDOW *wndDsc; */ SDWINDOW *SDActiveWindow(); /* There are two calling formats/uses for this function: (1) Obtain a pointer to the currently active window's window descriptor. wndDsc = SDActiveWindow(); SDWINDOW *wndDsc; (2) Specify a pointer to the window descriptor of the window is to be made the current active window. SDActiveWindow(wndDsc); SDActiveWindow(wndDsc, offset); SDWINDOW *wndDsc; int offset; If a NULL window descriptor pointer is supplied, then a pointer to the current active window's descriptor will be returned in that field. The optional offset argument indicates the desired position of the cursor in the new active window. If the offset value is -1, then the position of the cursor in the former active window is used. If the offset argument is not supplied, then the cursor will be placed at the position specified by the new active window's image buffer cursor offset field. This second call format returns a pointer to the window descriptor of the window that was just made active as the function result. */ SDWINDOW *SDGetActiveWindow(); /* Equivalent to SDActiveWindow() above with no arguments. */ void SDSuspendWindow(); /* Deactivates the current active window, and makes the window that was previously active become the new active window. The deactivated window is not removed. */ SDWINDOW *SDTopWindow(); /* There are two calling formats/uses for this function: (1) Obtain a pointer to the window descriptor of the window that is currently the top nonfloating window. wndDsc = SDTopWindow(); SDWINDOW *wndDsc; (2) Specify a pointer to the window descriptor of the window is to be made the top nonfloating window. SDTopWindow(wndDsc); SDWINDOW *wndDsc; If a NULL window descriptor pointer is supplied, then a pointer to the current top nonfloating window's descriptor will be returned in that field. This second call format returns a pointer to the window descriptor of the window that was just placed on top as the function result. */ SDWINDOW *SDGetTopWindow(); /* Equivalent to SDTopWindow() above with no arguments. */ SDWINDOW *SDFloatWindow(); /* There are two calling formats/uses for this function: (1) Obtain a pointer to the window descriptor of the window that is currently the top floating window. Note that floating windows always remain above nonfloating windows. wndDsc = SDFloatWindow(); SDWINDOW *wndDsc; (2) Specify a pointer to the window descriptor of the window is to be made the top floating window. SDFloatWindow(wndDsc); SDWINDOW *wndDsc; If a NULL window descriptor pointer is supplied, then a pointer to the current top floating window's descriptor will be returned in that field. This second call format returns a pointer to the window descriptor of the window that was just placed on floating top as the function result. */ SDWINDOW *SDGetFloatWindow(); /* Equivalent to SDFloatWindow() above with no arguments. */ SDVIEW *SDNewWindowView(); /* Adds an additional view to a window. The new view is linked into the list of views for the window at a specified existing view. newView = SDNewWindowView(newViewDescription, existingView); SDVIEW *newViewDescription, *existingView, *newView; The returned result is a pointer to the descriptor of the new view. Note that Screen Demon allocates space for the new view descriptor, and copies the given newViewDescription into it; the caller's view descriptor structure is not made part of the view linked list. */ void SDShiftWindowRight(); void SDShiftWindowLeft(); void SDShiftWindowUp(); void SDShiftWindowDown(); /* Shifts the visible contents of current active window in the direction specified. The actual position of the window on the terminal screen does not change. If no argument is su pplied, the shift amount is one line or column, depending on direction. If an argument is supplied, it indicates the number of lines or columns to shift the window. SDShiftWindowRight(columns); SDShiftWindowLeft(columns); SDShiftWindowUp(lines); SDShiftWindowDown(lines); int lines, columns; */ void SDMoveWindowRight(); void SDMoveWindowLeft(); void SDMoveWindowUp(); void SDMoveWindowDown(); /* Moves the visible portion of the current active window in the direction specified on the terminal screen. The contents of the window do not shift. If no argument is supplied, the move amount is one line or column, depending on direction. If an argument is supplied, it indicates the number of lines or columns to move the window. SDMoveWindowRight(columns); SDMoveWindowLeft(columns); SDMoveWindowUp(lines); SDMoveWindowDown(lines); int lines, columns; */ void SDSetWindowSize(); /* Specifies the size of the portion of the current active window visible on the terminal screen. SDSetWindowSize(height, width); int height, width; */ void SDSetWindowPosition(); /* Specifies the position of the portion of the current active window visible on the terminal screen. SDSetWindowPosition(line, column); int line, column; */ void SDReturnInput(); /* Specifies input data to be returned to the input field where the hot key that invoked the current program (or subprogram) was pressed. If a hot key is not currently active, this function has no effect. In the call format where only the string is supplied, a strlen() function will be used automatically to obtain the length of the string; do not use this format if unprintable characters are being returned! To return only a delimiter character, pass a string length of zero. SDReturnInput(string); SDReturnInput(string, stringLen); SDReturnInput(string, stringLen, delimiterChar); char *string; int stringLen; char delimiterChar; */ int SDObtainInput(); char SDObtainHotKey(); /* Fetches the contents of the input field where the hot key that invoked the current program (or subprogram) was pressed. Can also obtain the hot key character itself if desired. returnLen = SDObtainInput(inputString, stringLen, hotKey); char *inputString; int stringLen; char hotKey; int returnLen; The hotKey argument is optional. The stringLen field indicates the maximum number of characters that can be returned to inputString. The return value of the function is the number of characters that were actually returned, or -1 if a hot key is not currently active. If only the hot key character is desired, and not the input area contents, use the alternate call hotKey = SDObtainHotKey(); char hotKey; */ void SDProcPr(); /* PROC's a specified program with arguments. SDProcPr(progcmd); char *progcmd; progcmd should be of the form "programname,arg1,arg2,...,argN\000" */ void SDSetCLIInitCmd(); /* Declares a CLI command string that will be executed whenever the CLI is accessed from the SD_CLI_INTERFACE hot key routine. SDSetCLIInitCmd(cmd); char *cmd; */ void SDCLICmd(); /* Calls CLI to execute a single command and then returns. Guaranteed not to leave the user at a CLI command prompt. SDCLICmd(cmd); char *cmd; */ void SDNotepad(); /* Without arguments, this function invokes the standard Notepad normalled accessed via hot key. Alternatively, a different notepad filename can be supplied as an argument. SDNotepad(); SDNotepad(filename); char *filename; */ void SDUserId(); void SDSetUserId(); /* Declares the name of the operator. Useful to differentiate between operators that sign on under the same AOS/VS name. The specified name remains in effect until the current program ends. SDUserId(username); SDSetUserId(username); char *username; */ void SDSetAndLockUserId(); void SDUnlockUserId(); /* SDSetAndLockUserID() is the same as SDSetUserID() above, except that the declared name will remain in effect for the current console until cancelled with the SDUnlockUserId() function. This allows the specified username to be passed across program CHAIN's and PROC's. SDSetAndLockUserId(username); char *username; */ void SDGetUserId(); /* Returns the username currently in use for the current console. This will be the username declared with the above calls if one has been made, or the AOS/VS username otherwise. The string where the username is to be returned should be at least 16 chars long. SDGetUserId(username); char *username; */ void SDSendMail(); /* Sends a Screen Demon mail message to a specified user under program control. SDSendMail(recipient, message, urgentflag, acknowledgeflag); char *recipient; char *message; char urgentflag; char acknowledgeflag; The urgentflag and acknowledgeflag are optional; if supplied, they should be either Y or N. If the string that "message" points to begins with an "@", the remainder of the message is assumed to be the name of a text file containing the actual message text. */ int SDPopUpMenu(); int SDMenu(); /* Invokes the Screen Demon pop-up menu routine. See the definitions of the SDPOPUPMENU and SDMENU structure typedefs above for a description of packet contents. SDPopUpMenu(popupmenupkt); SDPopUpMenu(popupmenupkt, label); SDPOPUPMENU *popupmenupkt; char *label; The label argument is optional. If not supplied, the menu box label will be "Select:". SDMenu(menupkt, items, header, footer, descs, selstring); SDMENU *menupkt; char *items, *header, *footer, *descs, *selstring; The string arguments are optional, and are simply an alternate way of specifying entries in the menu packet that are (char *) pointers. See COBOL SD_MENU call documentation for details. */ void SDMessage(); /* Creates a new window, displays a message in a box in that window, and waits for the operator to respond, then removes the window. SDMessage(msg); SDMessage(msg, line, column); SDMessage(msg, line, column, label); char *msg; int line, column; char *label; If no position is specified, the box will be centered. If no label is supplied, the box will not have a label. To supply a label but still have the box centered, pass line and column values of -1. */ void SDMessageOnly(); /* Same as SDMessage() above, except that the box is drawn into the current active window, and then returns. It is the caller's responsibility to remove the box, and to ask for user input if desired. SDMessageOnly(msg); SDMessageOnly(msg, line, column); SDMessageOnly(msg, line, column, label); char *msg; int line, column; char *label; */ void SDErrorMessage(); /* Same as SDMessage() above, except that there is no label argument. The box will always have a label of "Error!". SDErrorMessage(msg); SDErrorMessage(msg, line, column); char *msg; int line, column; */ void SDSysErrorMessage(); /* Similar to SDErrorMessage() above, except that the first argument is an AOS/VS system error code. This function will look up the text of the message associated with that error code (in :ERMES), and display that in the box. If a message is supplied with the call, this message will be displayed above the system error message in the box. A box label of "Error!" will always be used. SDSysErrorMessage(errorcode); SDSysErrorMessage(errorcode, msg); SDSysErrorMessage(errorcode, msg, line, column); int errorcode; char *msg; int line, column; */ int SDAskQuestion(); /* Creates a new window and displays the given question in a box in that window along with a menu listing the given answers with the specified default answer highlighted. When the operator selects one of the choices, the window is removed, and the value of the function is the number of the item selected, or zero if the operator aborted the question by pressing . SDAskQuestion(question, defaultsel, answers); SDAskQuestion(question, defaultsel, answers, line, column); SDAskQuestion(question, defaultsel, answers, line, column, boxlabel); char *question; int defa ultsel; char *answers; int line, col; char *boxlabel; answers is a string containing a list of allowed answers in the same form as the SDMenu items string. defaultsel is the item number within this list of answers that is the default selection to be initially highlighted. If no position is specified, the box will be centered. If no label is supplied, the box will not have a label. To supply a label but still have the box centered, pass line and column values of -1. */ void SDInputString(); /* Function that inputs a field on the screen. See the definition of the SDISPK packet typedef above for information about the parameters for this call. SDInputString(pkt); SDISPK *pkt; */ void SDSetAcceptUppercase(); void SDSetAcceptLowercase(); /* Specifies case conversion for the next field input to be executed. */ void SDSetAcceptCursorOffset(); /* Specifies the number of character positions from the beginning of the field where the cursor should be placed when the next field input starts. SDSetAcceptCursorOffset(offset); int offset; An offset value of zero implies the first position of the input field. If the offset value is negative, the cursor will be placed just after the last nonspace character in the field. */ int SDGetAcceptCursorOffset(); /* Returns the offset of the cursor within the input field when the most recently executed field input ended. offset = SDGetAcceptCursorOffset(); int offset; */ void SDDiscardTypeAhead(); /* Requests that the contents of the system ring buffer for the current console be discarded when the next input is executed. This applies to SDInputString(), SDReadChar(), SDGetChar(), in addition to standard C getchar() calls, etc. */ void SDGetHotCalledFromName(); /* Returns the name of the program or subprogram that invoked the current hot key routine, or spaces if a hot key is not currently active. SDGetHotCalledFromName(name); char *name; The name string must be at least 32 characters long. */ void SDSetSecondaryProgramName(); /* Declares the name of the currently active routine. This function can be used to identify different subprograms or linked-in subroutines as separate from the main .PR. These names will be visible in the SD_SPY program. If a second argument is supplied, this function will return the name of the previously active routine. This permits declaration of a new name on entry to a subprogram, and restoration of the old name on exit. SDSetSecondaryProgramName(newProgName); SDSetSecondaryProgramName(newProgName, oldProgName); char *newProgName; char *oldProgName; Note that oldProgName should be at least 32 characters long. */ void SDPutValue(); /* Stores an item of a given name with an arbitrary value. The value is treated as a raw string of bytes. If the item already exists, its value will be changed to the new value. SDPutValue(itemName, value, valueLen) char *itemName; char *value; int valueLen; */ int SDGetValue(); /* Retrieves the value of an item previously stored using SDPutValue(). returnLen = SDGetValue(itemName, value, maxLen); char *itemName; char *value; int maxLen; int returnLen; The maxLen argument specifies the maximum number of bytes that are allowed to be returned in the value argument. The returned function value is the number of bytes actually returned in the value string field. If the requested item was not found, a value of -1 will be returned as the function result. */ int SDTemplateMatch(); /* Compares a candidate string against a template string, and returns nonzero if the strings match. result = SDTemplateMatch(candidate, template); char *candidate; char *template; int result; */ unsigned int SDGetTermcaps(); /* Returns a set of bit flags indicating the capabilities of the current terminal. Optionally, the last three characters of the sequence that would be returned from a Read Model Id command sent to the terminal can be returned by this function. The first of those characters is the actual model id indicator. termcaps = SDGetTermcaps(); termcaps = SDGetTermcaps(modelid); char *modelid; unsigned int termcaps; */ void SDGetConsoleDeviceName(); /* Obtains the name of the process's console device. SDGetConsoleDeviceName(conname); char *conname; where conname is a pointer to a string at least 32 bytes long that will receive the name of the process's console device, which will be null-terminated. If the process has a console, the returned name will be that console; e.g., CON14 or VCON6. If the process is running in a batch stream, the returned name will be the first word of the batch stream name, followed by the stream number, if any; e.g., BATCH1. If the process is not running in batch and does not have a console, the returned name will be NOCON, where is a number from 0 to the maximum number of NOCON's declared in SCREEN_DEMON.CONTYPES. */ void SDMonitorString(); /* "Displays" a string of a specified length into the current active window. The terminal screen and the internal terminal image are not affected by this call. SDFlush() must be called to actually update the screen with the "displayed" string. SDMonitorString(string); SDMonitorString(string, stringLen); char *string; int stringLen; If the length argument is not supplied, a strlen() function will be automatically applied to the given string to obtain its length; do not use this format if unprintable characters exist in the given string! */ void SDMonitorStringIntoTIB(); /* Similar to SDMonitorString() above, except that the string is "displayeD" into the internal image of the terminal screen. The current active window image and the terminal screen are not affected by this call. The purpose of this call is to make Screen Demon aware of a change to the terminal screen that it would be otherwise unable to know about. This includes output sent to the terminal via the SDOutputString() function described below. SDMonitorStringIntoTIB(string); SDMonitorStringIntoTIB(string, stringLen); char *string; int stringLen; */ void SDOutputString(); /* Outputs the given string to the terminal without updating either the current active window image or the internal terminal image. SDOutputString(string); SDOutputString(string, stringLen); char *string; int stringLen; If the length argument is not supplied, a strlen() function will be automatically applied to the given string to obtain its length; do not use this format if unprintable characters exist in the given string! */ char SDGetChar(); /* Same as SDReadChar(), but allows optional cache buffer. See definition of the SDINBF structure typedef above for information on the cache buffer. c = SDGetChar(); c = SDGetChar(timeout); c = SDGetChar(timeout, cache); int timeout; SDINBF *cache; To pass a cache buffer without a timeout, pass a timeout value of -1. */ void SDSetFieldDelimiterTable(); /* Specifies a delimiter table to be used for subsequent console inputs. If no argument is supplied, the standard Screen Demon field input delimiters will be used. The table is an AOS/VS format 256-bit delimiter table where the first bit in the table corresponds to NUL, the next to ^A, etc. Bits are set for characters to be treated as delimiters, and clear otherwise. SDSetFieldDelimiterTable(); SDSetFieldDelimiterTable(table); short *table; It is probably most useful to define a delimiter table as unsigned short delimitertable[16]; */ void SDCompileRDL(); /* Tells Screen Demon to rebuild its window display map at the next flush. This call is needed only when window and/or view parameters have been altered directly, instead of through the various function calls. */ char *SDMalloc(); /* Allocates a chunk of memory from the Screen Demon memory allocator. Functions the same as the standard C malloc() routine. mem = SDMalloc(size); int size; char *mem; */ void SDFree(); /* Releases a chunk of memory previously allocated via SDMalloc. Functions the same as the standard C free()  routine. SDFree(mem); char *mem; */ /************************************************************************/ /* The COBOL callable routines described in the SCREEN DEMON manual */ /* can also be called from a C program if it invokes them in the */ /* same way that a COBOL program would. Since COBOL always passes */ /* byte pointers to arguments, a C program can pretend to be a */ /* COBOL program by casting all parameters to be passed to these */ /* routines into byte pointers. */ /* */ /* The following macro may be helpful: */ /* */ /* #define BYTE_PTR(x) ((char *)(&x)) {Uncomment if desired} */ /* */ /* For example, the SD_DRAW_BOX routine can be called from COBOL */ /* by using a statement of the form */ /* CALL "SD_DRAW_BOX" USING BOX-LINE, BOX-COL, BOX-HEIGHT, */ /* BOX-WIDTH, BOX-LABEL. */ /* with BOX-LINE, BOX-COL, BOX-HEIGHT, and BOX-WIDTH defined */ /* as PIC 9(4) COMP, and BOX LABEL defined as PIC X(80). */ /* */ /* The equivalent C call is */ /* SD_DRAW_BOX( BYTE_PTR(line), BYTE_PTR(col), BYTE_PTR(height), */ /* BYTE_PTR(width), BYTE_PTR(label) ); */ /* with the variables defined as */ /* short line, col, height, width; */ /* char label[80]; */ /* Note that it is not really necessary to use BYTE_PTR with label */ /* since C will pass a byte ptr in that case anyway (a pointer to a */ /* char is always a byte ptr). However, using BYTE_PTR with a char */ /* field doesn't generate extra code, and serves to emphasize that */ /* the called function expects byte ptrs to everything. */ /* */ /* Also, a field defined as PIC 9(4) COMP is equivalent to a short, */ /* although it may occasionally need to be an unsigned short, */ /* primarily with attribute words and flag words. */ /* A field defined as PIC S9(9) COMP is equivalent to a long. */ /* */ /************************************************************************/ /* The following calls cannot be accessed from COBOL, but are accessible */ /* to C programs. */ /** "Display" a string into the current active window's virtual image **/ $asm void SD_MONITOR_STRING(); /* SD_MONITOR_STRING(s, n); */ /* char *s; Byte ptr to string to "display" */ /* short n; Number of chars in string */ /** "Display" a string into the terminal image, but not physical screen **/ $asm void SD_MONITOR_STRING_INTO_TIB(); /* SD_MONITOR_STRING_INTO_TIB(s, n); */ /* char *s; Byte ptr to string to "display" */ /* short n; Number of chars in string */ /** Marks a specified region of a window to indicate it has changed, * and thus needs to be updated at the next flush. Use this call * if a window image buffer is modified directly, rather than via * a display or SD_MONITOR call. */ $asm void SD_ADJUST_WINDOW_MOD_ZONES(); /* SD_ADJUST_WINDOW_MOD_ZONES(vib, begofs, endofs); */ /* (char *)(SDVIB *vib); Byte ptr to image buffer */ /* that has been modified. */ /* short begofs; Offset from beginning of image */ /* to first modified position. */ /* short endofs; Offset from beginning of image */ /* to last modified position. */ /** Display a string to the physical screen without affecting memory images **/ $asm void SD_OUTPUT_STRING(); /* SD_OUTPUT_STRING(s, n); */ /* char *s; Byte ptr to string to display */ /* short n; Number of chars in string */ /** Get next input character (more efficient than SD_READ_CHAR) **/ $asm void SD_GETCHAR(); /* SD_GETCHAR(s, t, ib); */ /* char *s; Byte ptr to area where input char can be returned */ /* short t; Timeout setting in sec, or -1 if no timeout */ /* SDINBF *ib; Addr of special input buffer structure, NULL if none */ /** Set the console input delimiter table (this routine should be called **/ /** before calling the SD_INPUT_STRING routine) **/ $asm void SET_FLD_DELIM_TBL(); /* SET_FLD_DELIM_TBL(t); */ /* struct delim_tbl *t; Addr of 16-word AOS/VS delimiter table */ /** Rebuild the current Region Display List based on relationships of **/ /** current Windows and their views. This is necessary when windows **/ /** and/or views have been created, moved, or removed by direct **/ /** alterations to the data structures (not using the window calls). **/ $asm void SD_COMPILE_RDL(); /** Invoke a particular hot key routine based on its definition in SD_CONFIG **/ $asm void SD_CALL_HOT_KEY_ROUTINE(); /* SD_CALL_HOT_KEY_ROUTINE(n); */ /* short n; Hot key routine # */ /** Display a message in a box and wait for operator to acknowledge. This **/ /** has the same function as SD_MESSAGE, but is somewhat more efficient. **/ $asm void SD_MESSAGE_JSR(); /* SD_MESSAGE_JSR(s, p, l) */ /* char *s; Byte ptr to message string, null-terminated. */ /* short p; Screen position for box, column # in high byte, */ /* and line # in low byte. If position is -1, */ /* then default box position will be used. */ /* char *l; Byte ptr to box label, null-terminated, or -1 if */ /* no box label is desired. */ /** Display an error message in a box and wait for operator to acknowledge. **/ /** This routine has the same function as SD_ERROR_MESSAGE, but is **/ /** somewhat more efficient. It is equivalent to calling SD_MESSAGE_JSR **/ /** with a label string of "Error!". **/ $asm void SD_ERROR_MESSAGE_JSR(); /* SD_ERROR_MESSAGE_JSR(s, p) */ /* char *s; Byte ptr to message string, null-terminated. */ /* short p; Screen position for box, column # in high byte, */ /* and line # in low byte. If position is -1, */ /* then default box position will be used. */ /** Display a combined system and user error message in a box and wait for **/ /** operator to acknowledge. This routine has the same function as **/ /** SD_SYS_ERROR_MESSAGE, but is somewhat more efficient. **/ $asm void SD_SYS_ERROR_MESSAGE_JSR(); /* SD_SYS_ERROR_MESSAGE_JSR(e, p, s) */ /* short e; system error code */ /* short p; Screen position for box, column # in high byte, */ /* and line # in low byte. If position is -1, */ /* then default box position will be used. */ /* char *s; Byte ptr to user message string, null-terminated, */ /* or NULL if no user message. The user message will */ /* be placed above the system message in the box. */ /* Obtain the current screen appearance. This routine has the same */ /* function as SD_GET_IMAGE, but is simpler to use if a complete */ /* image buffer structure is desired, and is more efficient. */ /* Floating windows are included in the returned image. */ $asm void SD_GET_SCREEN_IMAGE_JSR(); /* SD_GET_SCREEN_IMAGE_JSR( (char *)(&imgbuf) ) */ /* SDVIB imgbuf; Standard image buffer structure */ /* where current screen image will */ /* be returned. */ /* Obtain the current screen appearance, ignoring floating windows. */ /* Similar to SD_GET_IMAGE_BELOW_FLOAT, but is simpler to use if */ /* a complete image buffer structure is desired, and is more */ /* efficient. */ $asm void SD_GET_IMAGE_BELOW_FLOAT_JSR(); /* SD_GET_IMAGE_BELOW_FLOAT_JSR( (char *)(&imgbuf) ) */ /* SDVIB imgbuf; Standard image buffer structure */ /* where current screen image will */ /* be returned. Areas actually */ /* obscured by floating windows */ /* will appear as if the floating */ /* windows were not present. */ /** Allocate memory using Screen Demon's memory allocator. This is **/ /** useful if C runtimes are not being linked with the C program. **/ char *SD_MALLOC(); { /* SD_MALLOC(n) */ /* int n; number of bytes of memory to be allocated */ /* Return value is a byte ptr to the allocated chunk, or NULL if */ /* the allocation failed. */ /** Release memory previously allocated using the SD_MALLOC call. **/ /** Useful if C runtimes are not being linked with the C program. **/ $asm void SD_MEM_FREE_BP(); /* SD_MEM_FREE_BP(p); */ /* char *p; byte ptr to memory chunk being deallocated */ /*** Last line of screen_demon.h ***/ .W$Rb$n$_h@SDCALENDAR.CO IDENTIFICATION DIVISION. PROGRAM-ID. SDCALENDAR. ************************************************************************** *** Screen Demon revision 3.52.01 *** ************************************************************************** *** *** *** Copyright (C) 1988 - 1993, *** *** Threshold, Inc. *** *** Auburn, Alabama U.S.A. *** *** All rights reserved. *** *** *** *** SCREEN DEMON and its associated hot-key routines *** *** are proprietary property of Threshold, Inc. *** *** Except as provided for by the License Agreement; these *** *** shall not be copied, used, or disclosed for any purpose or *** *** reason in whole or in part, without the express written *** *** consent of: *** *** *** *** Threshold, Inc. *** *** 118 North Ross Street *** *** Auburn, Alabama 36830 *** *** *** ************************************************************************** ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG-COBOL. OBJECT-COMPUTER. DG-COBOL. DATA DIVISION. WORKING-STORAGE SECTION. 01 PROGRAM-ID-NAME PIC X(12) VALUE "SDCALENDAR ". 01 ORIGINAL-TURBO-SETTING PIC 9(04) COMP VALUE ZERO. 01 SAV-TO-MEM-NM-LINE PIC X(10) VALUE "SD_CAL_L". 01 SAV-TO-MEM-NM-COL PIC X(10) VALUE "SD_CAL_C". 01 SAV-TO-MEM-NM-WIND PIC X(10) VALUE "SD_CAL_W". 01 SAV-TO-MEM-NM-DATA PIC X(10) VALUE "SD_CAL_D". 01 SAV-TO-MEM-LEN PIC 9(4) COMP. 01 SAV-TO-MEM-LEN-RET PIC S9(4) COMP. 01 SAV-TO-MEM. 05 CAL-BOX-MOVE-INCREMENT PIC 9(02) VALUE 2. 05 LEFT-WO-REMOVING PIC X VALUE "N". 05 DOW PIC 9(4). 05 CURRENT-DATE. 10 CURRENT-YEAR-MONTH. 15 CURRENT-YEAR PIC 9(4). 15 CURRENT-MONTH PIC 9(2). 10 CURRENT-DAY PIC 9(2). 05 CURRENT-DATE-R REDEFINES CURRENT-DATE. 10 CURRENT-CENT PIC 9(2). 10 CURRENT-YMD. 15 CURRENT-YY PIC 9(2). 15 CURRENT-MM PIC 9(2). 15 CURRENT-DD PIC 9(2). 05 WORKING-DATE. 10 WORKING-YEAR-MONTH. 15 WORKING-YEAR PIC 9(4) VALUE 0. 15 WORKING-MONTH PIC 9(2). 10 WORKING-DAY PIC 9(2). 05 WORKING-DATE-R REDEFINES WORKING-DATE. 10 WORKING-CENT PIC 9(2). 10 WORKING-YMD. 15 WORKING-YY PIC 9(2). 15 WORKING-MM PIC 9(2). 15 WORKING-DD PIC 9(2). 05 DAYS-IN-WORKING-MONTH PIC 9(2). 05 CAL-WEEKS. 10 CAL-WEEK-FIRST. 15 CAL-WEEK-1 PIC X(21). 10 CAL-WEEKS-REST. 15 CAL-WEEK-2 PIC X(21). 15 CAL-WEEK-3 PIC X(21). 15 CAL-WEEK-4 PIC X(21). 15 CAL-WEEK-5 PIC X(21). 15 CAL-WEEK-6 PIC X(12). 05 CAL-SHIFT-AREA REDEFINES CAL-WEEKS. 10 CAL-FIRST-REST. 15 CAL-FIRST-DAY PIC X(03). 15 CAL-REST-OF-MONTH PIC X(114). 01 CAL-BOX-LINE PIC 9(04) COMP VALUE 5. 01 CAL-BOX-COLUMN PIC 9(04) COMP VALUE 5. 01 CAL-BOX-HEIGHT PIC 9(04) COMP VALUE 11. 01 CAL-BOX-WIDTH PIC 9(04) COMP VALUE 24. 01 CAL-BOX-LABEL. 05 CAL-LABEL-CHAR OCCURS 40 TIMES PIC X. ** the following field's value must equal the length of CALC-BOX-LABEL above: 01 CAL-BOX-LABEL-LEN PIC 9(04) COMP VALUE 40. ** this field will receive the actual length of the Calendar title as * it was defined in the SD_CONFIG file: 01 CAL-TITLE-ACTUAL-LEN PIC S9(04) COMP VALUE ZERO. ** Name of Calendar Title item as it appears in the SD_CONFIG file: 01 CALENDAR-TITLE-NAME PIC X(18) VALUE "SDCALENDAR_TITLE ". 01 HELP-BOX-LINE PIC 9(04) COMP VALUE 8. 01 HELP-BOX-COLUMN PIC 9(04) COMP VALUE 12. 01 HELP-BOX-HEIGHT PIC 9(04) COMP VALUE 15. 01 HELP-BOX-WIDTH PIC 9(04) COMP VALUE 29. 01 HELP-BOX-LABEL PIC X(16) VALUE " Calendar Help| ". 01 PREVIOUS-WINDOW-ADDR PIC X(04). 01 CALENDAR-WINDOW-ADDR PIC X(04). 01 READ-CHAR-TIMEOUT PIC 9(04) COMP VALUE 2. 01 HORIZONTAL-MOVE-DISTANCE PIC 9(04) COMP VALUE 1. 01 VERTICAL-MOVE-DISTANCE PIC 9(04) COMP VALUE 1. 01 ALTERNATE-EXIT-KEY-VALUE PIC S9(04) COMP VALUE -1. 01 ALTERNATE-EXIT-KEY-REDEF REDEFINES ALTERNATE-EXIT-KEY-VALUE. 05 FILLER PIC X. 05 ALTERNATE-EXIT-KEY PIC X. 01 ALT-EXIT-KEY-ACTUAL-LEN PIC S9(04) COMP VALUE ZERO. 01 MAX-GET-VALUE-LEN PIC 9(04) COMP VALUE ZERO. * WORD ALIGNMENT STOPS HERE 01 ORIGINAL-SECONDARY-PROGRAM PIC X(32) VALUE SPACES. 01 CAL-BOX-TOP-MARGIN PIC 9(02) VALUE 2. 01 CAL-BOX-BOTTOM-MARGIN PIC 9(02) VALUE 13. 01 CAL-BOX-RIGHT-MARGIN PIC 9(02) VALUE 55. 01 CAL-BOX-LEFT-MARGIN PIC 9(02) VALUE 1. 01 CAL-BOX-TARGET PIC S9(02) VALUE 0. 01 READ-CHAR PIC X VALUE SPACE. 01 PREV-READ-CHAR PIC X VALUE SPACE. 01 DIM-DATE. 05 DIM-YEAR PIC 9(4). 05 DIM-MONTH PIC 9(2). 05 DIM-DAY PIC 9(2). 01 DIM-DATE-R REDEFINES DIM-DATE. 05 DIM-CENT PIC 9(2). 05 DIM-YMD. 10 DIM-YY PIC 9(2). 10 DIM-MM PIC 9(2). 10 DIM-DD PIC 9(2). 01 DIM-DAYS PIC 9(2). 01 DOW-YEAR PIC 9(4). 01 DOW-YEAR-R REDEFINES DOW-YEAR. 05 DOW-CENT PIC 9(2). 05 DOW-YY PIC 9(2). 01 DOW-MONTH PIC 9(4). 01 DOW-INT1 PIC 9(4). 01 DOW-INT2 PIC 9(4). 01 DOW-INT3 PIC 9(4). 01 LEAP-TEST-YEAR PIC 9(4). 01 LEAP-YEAR-RESULT PIC 9(4). 01 LEAP-YEAR-REMAINDER PIC 9(4). 01 LEAP-YEAR-FLAG PIC X. 88 LEAP-YEAR VALUE "Y". 01 SHORT-MONTH-NAME-ARRAY. 05 FILLER PIC X(36) VALUE "JanFebMarAprMayJunJulAugSepOctNovDec". 01 SHORT-MONTH-NAME-R REDEFINES SHORT-MONTH-NAME-ARRAY. 05 SHORT-MONTH-NAME OCCURS 12 TIMES PIC X(3). 01 LONG-MONTH-NAME-ARRAY. 05 FILLER PIC X(54) VALUE "January February March April May June ". 05 FILLER PIC X(54) VALUE "July August SeptemberOctober November December ". 01 LONG-MONTH-NAME-R REDEFINES LONG-MONTH-NAME-ARRAY. 05 LONG-MONTH-NAME OCCURS 12 TIMES PIC X(9). 01 DAY-LABELS PIC X(19) VALUE "S M T W T F S". 01 DAYS-TO-SHIFT PIC 9. 01 CAL-MONTH-FORMATS. 05 31-DAY-FORMAT. 10 30-DAY-FORMAT. 15 29-DAY-FORMAT. 20 28-DAY-FORMAT. 25 FILLER PIC X(21) VALUE " 1 2 3 4 5 6 7". 25 FILLER PIC X(21) VALUE " 8 9 10 11 12 13 14". 25 FILLER PIC X(21) VALUE " 15 16 17 18 19 20 21". 25 FILLER PIC X(21) VALUE " 22 23 24 25 26 27 28". 20 FILLER PIC X(03) VALUE " 29". 15 FILLER PIC X(03) VALUE " 30". 10 FILLER PIC X(03) VALUE " 31". 01 CURRENT-TIME. 05 CURRENT-HOUR PIC 99. 05 CURRENT-MIN PIC 99. 05 CURRENT-SEC PIC 99. 01 UNDERSCORE-ON. 05 FILLER PIC 99 COMP VALUE 20. 01 UNDERSCORE-OFF. 05 FILLER PIC 99 COMP VALUE 21. 01 COLON-LIT. 05 FILLER PIC X VALUE ":". 01 PARK-CURSOR-LOCATION. 05 FILLER PIC 99 COMP VALUE 16. 05 PARK-COLUMN PIC 99 COMP VA LUE 0. 05 PARK-LINE PIC 99 COMP VALUE 0. 01 WORKING-DAY-LIT. 05 FILLER PIC 9(02) COMP VALUE 30. 05 FILLER PIC X(01) VALUE "D". 05 WORKING-DAY-FORMAT PIC Z9. 05 FILLER PIC 9(02) COMP VALUE 30. 05 FILLER PIC X(01) VALUE "E". 01 WORKING-DAY-LINE PIC 9(02). 01 WORKING-DAY-COL PIC 9(02). 01 TODAYS-DAY-LINE PIC 9(02). 01 TODAYS-DAY-COL PIC 9(02). 01 DATE-ERROR-MESSAGE. 05 FILLER PIC X(20) VALUE "Invalid date.". 05 FILLER PIC 9(2) COMP VALUE 0. *** Item name used to access the CONFIG value for ALTERNATE-EXIT-KEY, * declared in the word-aligned section above. 01 SD-ALT-EXIT-KEY-NAME PIC X(16) VALUE "SD_ALT_EXIT_KEY ". 01 ESCAPE-KEY. 05 FILLER PIC 9(02) COMP VALUE 27. 01 INVALID-KEY. 05 FILLER PIC 9(02) COMP VALUE 0. ** Value returned from SD_READ_CHAR if a timeout occurred 01 TIMEOUT-OCCURRED-VALUE PIC 9(04) COMP VALUE 128. 01 TIMEOUT-OCCURRED-REDEF REDEFINES TIMEOUT-OCCURRED-VALUE. 05 FILLER PIC X. 05 TIMEOUT-OCCURRED PIC X. * SHIFT-C4 KEY 01 EXIT-WO-REMOVING-KEY-VALUE PIC 9(04) COMP VALUE 219. 01 EXIT-WO-REMOVING-KEY-REDEF REDEFINES EXIT-WO-REMOVING-KEY-VALUE. 05 FILLER PIC X(01). 05 EXIT-WO-REMOVING-KEY PIC X(01). * C1-KEY 01 HELP-KEY-VALUE PIC 9(04) COMP VALUE 220. 01 HELP-KEY-REDEF REDEFINES HELP-KEY-VALUE. 05 FILLER PIC X(01). 05 HELP-KEY PIC X(01). * LEFT-ARROW 01 PREV-DAY-KEY-VALUE PIC 9(04) COMP VALUE 025. 01 PREV-DAY-KEY-REDEF REDEFINES PREV-DAY-KEY-VALUE. 05 FILLER PIC X(01). 05 PREV-DAY-KEY PIC X(01). * RIGHT-ARROW 01 NEXT-DAY-KEY-VALUE PIC 9(04) COMP VALUE 024. 01 NEXT-DAY-KEY-REDEF REDEFINES NEXT-DAY-KEY-VALUE. 05 FILLER PIC X(01). 05 NEXT-DAY-KEY PIC X(01). * UP-ARROW 01 PREV-WEEK-KEY-VALUE PIC 9(04) COMP VALUE 023. 01 PREV-WEEK-KEY-REDEF REDEFINES PREV-WEEK-KEY-VALUE. 05 FILLER PIC X(01). 05 PREV-WEEK-KEY PIC X(01). * DOWN-ARROW 01 NEXT-WEEK-KEY-VALUE PIC 9(04) COMP VALUE 026. 01 NEXT-WEEK-KEY-REDEF REDEFINES NEXT-WEEK-KEY-VALUE. 05 FILLER PIC X(01). 05 NEXT-WEEK-KEY PIC X(01). * C2-KEY 01 PREV-MONTH-KEY-VALUE PIC 9(04) COMP VALUE 221. 01 PREV-MONTH-KEY-REDEF REDEFINES PREV-MONTH-KEY-VALUE. 05 FILLER PIC X(01). 05 PREV-MONTH-KEY PIC X(01). * C4-KEY 01 NEXT-MONTH-KEY-VALUE PIC 9(04) COMP VALUE 223. 01 NEXT-MONTH-KEY-REDEF REDEFINES NEXT-MONTH-KEY-VALUE. 05 FILLER PIC X(01). 05 NEXT-MONTH-KEY PIC X(01). * HOME-KEY 01 CUR-DATE-KEY-VALUE PIC 9(04) COMP VALUE 008. 01 CUR-DATE-KEY-REDEF REDEFINES CUR-DATE-KEY-VALUE. 05 FILLER PIC X(01). 05 CUR-DATE-KEY PIC X(01). * C3-KEY 01 SPECIFY-KEY-VALUE PIC 9(04) COMP VALUE 222. 01 SPECIFY-KEY-REDEF REDEFINES SPECIFY-KEY-VALUE. 05 FILLER PIC X(01). 05 SPECIFY-KEY PIC X(01). *SHIFT LEFT-ARROW 01 MOVE-LEFT-KEY-VALUE PIC 9(04) COMP VALUE 153. 01 MOVE-LEFT-KEY-REDEF REDEFINES MOVE-LEFT-KEY-VALUE. 05 FILLER PIC X(01). 05 MOVE-LEFT-KEY PIC X(01). *SHIFT RIGHT-ARROW 01 MOVE-RIGHT-KEY-VALUE PIC 9(04) COMP VALUE 152. 01 MOVE-RIGHT-KEY-REDEF REDEFINES MOVE-RIGHT-KEY-VALUE. 05 FILLER PIC X(01). 05 MOVE-RIGHT-KEY PIC X(01). *SHIFT UP-ARROW 01 MOVE-UP-KEY-VALUE PIC 9(04) COMP VALUE 151. 01 MOVE-UP-KEY-REDEF REDEFINES MOVE-UP-KEY-VALUE. 05 FILLER PIC X(01). 05 MOVE-UP-KEY PIC X(01). *SHIFT DOWN-ARROW 01 MOVE-DOWN-KEY-VALUE PIC 9(04) COMP VALUE 154. 01 MOVE-DOWN-KEY-REDEF REDEFINES MOVE-DOWN-KEY-VALUE. 05 FILLER PIC X(01). 05 MOVE-DOWN-KEY PIC X(01). SCREEN SECTION. 01 CALENDAR-SCREEN. 05 LINE 3 COLUMN 4 PIC X(12) USING LONG-MONTH-NAME(WORKING-MONTH). 05 COLUMN 19 PIC 9999 USING WORKING-YEAR. 05 LINE PLUS 1 COLUMN 4 PIC X(19) USING DAY-LABELS. 05 LINE PLUS 1 COLUMN 2 PIC X(21) FROM CAL-WEEK-1. 05 LINE PLUS 1 COLUMN 2 PIC X(21) FROM CAL-WEEK-2. 05 LINE PLUS 1 COLUMN 2 PIC X(21) FROM CAL-WEEK-3. 05 LINE PLUS 1 COLUMN 2 PIC X(21) FROM CAL-WEEK-4. 05 LINE PLUS 1 COLUMN 2 PIC X(21) FROM CAL-WEEK-5. 05 LINE PLUS 1 COLUMN 2 PIC X(12) FROM CAL-WEEK-6. 01 HIGHLIGHT-TODAYS-DAY. 05 LINE TODAYS-DAY-LINE COLUMN TODAYS-DAY-COL PIC Z9 USING CURRENT-DAY. 01 HIGHLIGHT-TODAYS-DAY-REV. 05 LINE TODAYS-DAY-LINE COLUMN TODAYS-DAY-COL PIC X(06) USING WORKING-DAY-LIT. 01 HIGHLIGHT-WORKING-DAY. 05 LINE WORKING-DAY-LINE COLUMN WORKING-DAY-COL PIC X(06) USING WORKING-DAY-LIT. 01 CURRENT-DATE-TIME. 05 LINE 12 COLUMN 2 PIC X FROM UNDERSCORE-ON. 05 COLUMN 3 PIC Z9 USING CURRENT-DAY. 05 COLUMN PLUS 1 PIC X(3) USING SHORT-MONTH-NAME(CURRENT-MONTH). 05 COLUMN PLUS 1 PIC 9999 USING CURRENT-YEAR. 05 COLUMN PLUS 1 PIC Z9 USING CURRENT-HOUR. 05 PIC X USING COLON-LIT. 05 PIC 99 USING CURRENT-MIN. 05 PIC X USING COLON-LIT. 05 PIC 99 USING CURRENT-SEC. 05 PIC X USING UNDERSCORE-OFF. 01 HELP-PROMPT. 05 LINE 11 COLUMN 2 " C1 for help". 01 HELP-SCREEN. 05 LINE 4 COLUMN 3 "Arrow keys:". 05 LINE PLUS 1 COLUMN 3 " move day pointer". 05 LINE PLUS 1 COLUMN 3 "Shifted Arrow keys:". 05 LINE PLUS 1 COLUMN 3 " move calendar". 05 LINE PLUS 1 COLUMN 3 "Home:". 05 LINE PLUS 1 COLUMN 3 " return to current date". 05 LINE PLUS 1 COLUMN 3 "C2: previous month". 05 LINE PLUS 1 COLUMN 3 "C4: next month". 05 LINE PLUS 1 COLUMN 3 "C3: enter month". 05 LINE PLUS 1 COLUMN 3 "ESC: exit". 05 LINE PLUS 2 COLUMN 3 "any key to continue". 01 SPECIFY-MONTH-SCREEN. 05 LINE 11 COLUMN 2 "Month:". 05 COLUMN PLUS 1 PIC Z9 USING WORKING-MONTH. 05 COLUMN PLUS 2 "Year:". 05 COLUMN PLUS 1 PIC 9999 USING WORKING-YEAR. 01 BOTTOM-LINE-CLEAR. 05 LINE 11 COLUMN 2 " ". 01 PARK-CURSOR-SCREEN. 05 LINE 12 COLUMN 22 PIC X(03) USING PARK-CURSOR-LOCATION. PROCEDURE DIVISION. MAIN-LOGIC SECTION. MAIN-PROGRAM. *** Declare that this is now the active secondary program, but * remember the former secondary program so it can be restored * when Calendar exits. CALL "SD_SET_SECONDARY_PROGRAM_NAME" USING PROGRAM-ID-NAME, ORIGINAL-SECONDARY-PROGRAM. *** Force Turbo to a Full setting while Calendar is running, but * remember what Turbo level was originally so it can be restored * when Calendar exits. CALL "SD_TURBO_FULL" USING ORIGINAL-TURBO-SETTING. ACCEPT CURRENT-YMD FROM DATE. MOVE 19 TO CURRENT-CENT. MOVE LOW-VALUES TO PREVIOUS-WINDOW-ADDR. IF WORKING-YEAR = ZERO MOVE 2 TO SAV-TO-MEM-LEN CALL "SD_GET_VALUE" USING SAV-TO-MEM-NM-LINE, CAL-BOX-LINE, SAV-TO-MEM-LEN, SAV-TO-MEM-LEN-RET IF SAV-TO-MEM-LEN-RET > 0 CALL "SD_GET_VALUE" USING SAV-TO-MEM-NM-COL, CAL-BOX-COLUMN, SAV-TO-MEM-LEN, SAV-TO-MEM-LEN-RET MOVE 4 TO SAV-TO-MEM-LEN CALL "SD_GET_VALUE" USING SAV-TO-MEM-NM-WIND, CALENDAR-WINDOW-ADDR, SAV-TO-MEM-LEN, SAV-TO-MEM-LEN-RET INSPECT SAV-TO-MEM TALLYING SAV-TO-MEM-LEN FOR CHARACTERS CALL "SD_GET_VALUE" USING SAV-TO-MEM-NM-DATA, SAV-TO-MEM, SAV-TO-MEM-LEN, SAV-TO-MEM-LEN-RET PERFORM RE-INIT ELSE PERFORM FIRST-TIME-INIT PERFORM DRAW-BOX-IN-WINDOW ELSE PERFORM RE-INIT. PERFORM DISPLAY-MONTH. MOVE INVALID-KEY TO READ-CHAR. PERFORM ACCEPT-COMMAND UNTIL READ-CHAR = ESCAPE-KEY. MOVE 2 TO SAV-TO-MEM-LEN. CALL "SD_PUT_VALUE" USING SAV-TO-MEM-NM-LINE, CAL-BOX-LINE, SAV-TO-MEM-LEN. CALL "SD_PUT_VALUE" USING SAV-TO-MEM-NM-COL, CAL-BOX-COLUMN, SAV-TO-MEM-LEN. MOVE 4 TO SAV-TO-MEM-LEN. CALL "SD_PUT_VALUE" USING SAV-TO-MEM-NM-WIND, CALENDAR-WINDOW-ADDR, SAV-TO-MEM-LEN. INSPECT SAV-TO-M @ EM TALLYING SAV-TO-MEM-LEN FOR CHARACTERS. CALL "SD_PUT_VALUE" USING SAV-TO-MEM-NM-DATA, SAV-TO-MEM, SAV-TO-MEM-LEN. *** Restore Turbo setting to its original value *** CALL "SD_TURBO_RESET" USING ORIGINAL-TURBO-SETTING. *** Declare that the former secondary program is now active again *** CALL "SD_SET_SECONDARY_PROGRAM_NAME" USING ORIGINAL-SECONDARY-PROGRAM. EXIT-PROGRAM. EXIT PROGRAM. STOP-RUN. STOP RUN. FIRST-TIME-INIT. PERFORM CUR-MONTH. PERFORM FORMAT-MONTH. *** Obtain the value defined in the configuration file for the alternate * exit key, which causes any Screen Demon hot key, including this one, * to exit. If not defined, set the alternate exit key to HIGH-VALUES, * which means that no key will act as the alternate exit key. MOVE 2 TO MAX-GET-VALUE-LEN. CALL "SD_GET_VALUE" USING SD-ALT-EXIT-KEY-NAME, ALTERNATE-EXIT-KEY-VALUE, MAX-GET-VALUE-LEN, ALT-EXIT-KEY-ACTUAL-LEN. IF ALT-EXIT-KEY-ACTUAL-LEN < 2 MOVE HIGH-VALUES TO ALTERNATE-EXIT-KEY. RE-INIT. IF LEFT-WO-REMOVING = "Y" CALL "SD_ACTIVE_WINDOW" USING CALENDAR-WINDOW-ADDR CALL "SD_TOP_WINDOW" USING CALENDAR-WINDOW-ADDR ELSE PERFORM DRAW-BOX-IN-WINDOW. ACCEPT-COMMAND. ACCEPT CURRENT-YMD FROM DATE. MOVE 19 TO CURRENT-CENT. ACCEPT CURRENT-TIME FROM TIME. DISPLAY CURRENT-DATE-TIME. DISPLAY PARK-CURSOR-SCREEN. MOVE READ-CHAR TO PREV-READ-CHAR. CALL "SD_READ_CHAR" USING READ-CHAR, READ-CHAR-TIMEOUT. PERFORM PROCESS-COMMAND. IF READ-CHAR NOT = ESCAPE-KEY IF READ-CHAR NOT = INVALID-KEY PERFORM DISPLAY-MONTH. FORMAT-MONTH. MOVE WORKING-MONTH TO DIM-MONTH. MOVE WORKING-YEAR TO DIM-YEAR. MOVE SPACES TO CAL-WEEKS. PERFORM CALC-DAYS-IN-MONTH. IF WORKING-DAY > DAYS-IN-WORKING-MONTH MOVE DAYS-IN-WORKING-MONTH TO WORKING-DAY. MOVE 1 TO DIM-DAY. PERFORM GET-FIRST-DAY. SUBTRACT DOW FROM 8 GIVING DAYS-TO-SHIFT. PERFORM SHIFT-DAY DAYS-TO-SHIFT TIMES. DISPLAY-MONTH. DISPLAY CALENDAR-SCREEN. COMPUTE WORKING-DAY-LINE = WORKING-DAY + DOW - 2. DIVIDE WORKING-DAY-LINE BY 7 GIVING WORKING-DAY-LINE REMAINDER WORKING-DAY-COL. ADD 5 TO WORKING-DAY-LINE. COMPUTE WORKING-DAY-COL = (WORKING-DAY-COL * 3) + 3. SUBTRACT 1 FROM WORKING-DAY-LINE GIVING PARK-LINE. ADD 1, WORKING-DAY-COL GIVING PARK-COLUMN. MOVE WORKING-DAY TO WORKING-DAY-FORMAT. DISPLAY HIGHLIGHT-WORKING-DAY. IF WORKING-YEAR-MONTH = CURRENT-YEAR-MONTH COMPUTE TODAYS-DAY-LINE = CURRENT-DAY + DOW - 2 DIVIDE TODAYS-DAY-LINE BY 7 GIVING TODAYS-DAY-LINE REMAINDER TODAYS-DAY-COL ADD 5 TO TODAYS-DAY-LINE COMPUTE TODAYS-DAY-COL = (TODAYS-DAY-COL * 3) + 3 IF WORKING-DATE = CURRENT-DATE DISPLAY HIGHLIGHT-TODAYS-DAY-REV ELSE DISPLAY HIGHLIGHT-TODAYS-DAY. LEAP-YEAR-CHECK. MOVE ZERO TO LEAP-YEAR-FLAG. DIVIDE LEAP-TEST-YEAR BY 4 GIVING LEAP-YEAR-RESULT REMAINDER LEAP-YEAR-REMAINDER. IF LEAP-YEAR-REMAINDER = ZERO MOVE "Y" TO LEAP-YEAR-FLAG. DIVIDE LEAP-TEST-YEAR BY 100 GIVING LEAP-YEAR-RESULT REMAINDER LEAP-YEAR-REMAINDER. IF LEAP-YEAR-REMAINDER = ZERO MOVE "N" TO LEAP-YEAR-FLAG. DIVIDE LEAP-TEST-YEAR BY 400 GIVING LEAP-YEAR-RESULT REMAINDER LEAP-YEAR-REMAINDER. IF LEAP-YEAR-REMAINDER = ZERO MOVE "Y" TO LEAP-YEAR-FLAG. GET-FIRST-DAY. IF DIM-MONTH > 2 SUBTRACT 2 FROM DIM-MONTH GIVING DOW-MONTH MOVE DIM-YEAR TO DOW-YEAR ELSE ADD 10, DIM-MONTH GIVING DOW-MONTH SUBTRACT 1 FROM DIM-YEAR GIVING DOW-YEAR. COMPUTE DOW-INT1 = (13 * DOW-MONTH - 1) / 5. COMPUTE DOW-INT2 = DOW-YY / 4. COMPUTE DOW-INT3 = DOW-CENT / 4. COMPUTE DOW = DOW-INT1 + DIM-DAY + DOW-YY + DOW-INT2 + DOW-INT3 - DOW-CENT - DOW-CENT + 77. * DIVIDE DOW-INT1 BY 7 GIVING DOW-INT2 REMAINDER DOW * ADD 1 TO DOW COMPUTE DOW-INT1 = DOW / 7. COMPUTE DOW = DOW - 7 * DOW-INT1 + 1. *** Obtain the title for the Calendar from the SD_CONFIG file, and then * create a window with a box using the title as its label. Use a * default label if no title is available from the SD_CONFIG file. DRAW-BOX-IN-WINDOW. CALL "SD_GET_VALUE" USING CALENDAR-TITLE-NAME, CAL-BOX-LABEL, CAL-BOX-LABEL-LEN, CAL-TITLE-ACTUAL-LEN. IF CAL-TITLE-ACTUAL-LEN NOT > ZERO MOVE " SCREEN DEMON Calendar |" TO CAL-BOX-LABEL MOVE 24 TO CAL-BOX-WIDTH ELSE IF CAL-TITLE-ACTUAL-LEN NOT < CAL-BOX-LABEL-LEN MOVE "|" TO CAL-LABEL-CHAR (CAL-BOX-LABEL-LEN) ADD 1, CAL-BOX-LABEL-LEN GIVING CAL-BOX-WIDTH ELSE ADD 1 TO CAL-TITLE-ACTUAL-LEN MOVE "|" TO CAL-LABEL-CHAR (CAL-TITLE-ACTUAL-LEN) ADD 1, CAL-TITLE-ACTUAL-LEN GIVING CAL-BOX-WIDTH IF CAL-BOX-WIDTH < 24 MOVE 24 TO CAL-BOX-WIDTH. CALL "SD_CREATE_WINDOW" USING CAL-BOX-LINE, CAL-BOX-COLUMN, CAL-BOX-HEIGHT, CAL-BOX-WIDTH, CAL-BOX-LABEL. MOVE LOW-VALUES TO CALENDAR-WINDOW-ADDR. CALL "SD_ACTIVE_WINDOW" USING CALENDAR-WINDOW-ADDR. DISPLAY HELP-PROMPT. PROCESS-COMMAND. IF READ-CHAR = PREV-MONTH-KEY PERFORM PREV-MONTH ELSE IF READ-CHAR = NEXT-MONTH-KEY PERFORM NEXT-MONTH ELSE IF READ-CHAR = PREV-DAY-KEY PERFORM PREV-DAY ELSE IF READ-CHAR = NEXT-DAY-KEY PERFORM NEXT-DAY ELSE IF READ-CHAR = PREV-WEEK-KEY PERFORM PREV-WEEK ELSE IF READ-CHAR = NEXT-WEEK-KEY PERFORM NEXT-WEEK ELSE IF READ-CHAR = CUR-DATE-KEY PERFORM CUR-MONTH ELSE IF READ-CHAR = SPECIFY-KEY PERFORM SPECIFY-MONTH ELSE IF READ-CHAR = HELP-KEY PERFORM DISPLAY-HELP-WINDOW ELSE IF READ-CHAR = MOVE-LEFT-KEY OR READ-CHAR = MOVE-RIGHT-KEY OR READ-CHAR = MOVE-UP-KEY OR READ-CHAR = MOVE-DOWN-KEY PERFORM MOVE-BOX ELSE IF READ-CHAR NOT LESS THAN "1" AND READ-CHAR NOT GREATER THAN "9" MOVE READ-CHAR TO CAL-BOX-MOVE-INCREMENT ELSE IF READ-CHAR = ESCAPE-KEY OR READ-CHAR = ALTERNATE-EXIT-KEY MOVE "N" TO LEFT-WO-REMOVING CALL "SD_REMOVE_WINDOW" MOVE ESCAPE-KEY TO READ-CHAR ELSE IF READ-CHAR = EXIT-WO-REMOVING-KEY MOVE "Y" TO LEFT-WO-REMOVING CALL "SD_SUSPEND_WINDOW" MOVE ESCAPE-KEY TO READ-CHAR ELSE MOVE INVALID-KEY TO READ-CHAR. PREV-DAY. SUBTRACT 1 FROM WORKING-DAY. IF WORKING-DAY = ZERO SUBTRACT 1 FROM WORKING-MONTH PERFORM CHECK-YEAR-END PERFORM FORMAT-MONTH MOVE DAYS-IN-WORKING-MONTH TO WORKING-DAY. NEXT-WEEK. ADD 7 TO WORKING-DAY. IF WORKING-DAY > DAYS-IN-WORKING-MONTH SUBTRACT DAYS-IN-WORKING-MONTH FROM WORKING-DAY ADD 1 TO WORKING-MONTH PERFORM CHECK-YEAR-END PERFORM FORMAT-MONTH. PREV-WEEK. IF WORKING-DAY > 7 SUBTRACT 7 FROM WORKING-DAY ELSE SUBTRACT 1 FROM WORKING-MONTH PERFORM CHECK-YEAR-END PERFORM FORMAT-MONTH COMPUTE WORKING-DAY = DAYS-IN-WORKING-MONTH + WORKING-DAY - 7. NEXT-DAY. ADD 1 TO WORKING-DAY. IF WORKING-DAY > DAYS-IN-WORKING-MONTH ADD 1 TO WORKING-MONTH PERFORM CHECK-YEAR-END PERFORM FORMAT-MONTH MOVE 1 TO WORKING-DAY. PREV-MONTH. SUBTRACT 1 FROM WORKING-MONTH. PERFORM CHECK-YEAR-END. PERFORM FORMAT-MONTH. NEXT-MONTH. ADD 1 TO WORKING-MONTH PERFORM CHECK-YEAR-END PERFORM FORMAT-MONTH. SPECIFY-MONTH. DISPLAY BOTTOM-LINE-CLEAR. DISPLAY SPECIFY-MONTH-SCREEN. ACCEPT SPECIFY-MONTH-SCREEN. IF WORKING-MONTH < 1 OR WORKING-MONTH > 12 OR WORKING-YEAR < 1 CALL "SD_ERROR_MESSAGE" USING DATE-ERROR-MESSAGE GO TO SPECIFY-MONTH. DISPLAY BOTTOM-LINE-CLEAR. DISPLAY HELP-PROMPT. PERFORM FORMAT-MONTH. CUR-MONTH. ACCEPT WORKING-YMD FROM DATE. MOVE 19 TO WORKING-CENT. PERFORM FORMAT-MONTH. *** Move calendar box in requested direction. If the same direction * key is pressed twice in succession, accelerate the movement. MOVE-BOX. IF READ-CHAR = PREV-READ-CH `@AR COMPUTE HORIZONTAL-MOVE-DISTANCE = 10 * CAL-BOX-MOVE-INCREMENT COMPUTE VERTICAL-MOVE-DISTANCE = 3 * CAL-BOX-MOVE-INCREMENT ELSE MOVE CAL-BOX-MOVE-INCREMENT TO HORIZONTAL-MOVE-DISTANCE, VERTICAL-MOVE-DISTANCE. IF READ-CHAR = MOVE-LEFT-KEY CALL "SD_MOVE_WINDOW_LEFT" USING HORIZONTAL-MOVE-DISTANCE ELSE IF READ-CHAR = MOVE-RIGHT-KEY CALL "SD_MOVE_WINDOW_RIGHT" USING HORIZONTAL-MOVE-DISTANCE ELSE IF READ-CHAR = MOVE-UP-KEY CALL "SD_MOVE_WINDOW_UP" USING VERTICAL-MOVE-DISTANCE ELSE IF READ-CHAR = MOVE-DOWN-KEY CALL "SD_MOVE_WINDOW_DOWN" USING VERTICAL-MOVE-DISTANCE. DISPLAY-HELP-WINDOW. CALL "SD_CREATE_WINDOW" USING HELP-BOX-LINE, HELP-BOX-COLUMN, HELP-BOX-HEIGHT, HELP-BOX-WIDTH, HELP-BOX-LABEL. DISPLAY HELP-SCREEN. CALL "SD_READ_CHAR" USING READ-CHAR. MOVE INVALID-KEY TO READ-CHAR. CALL "SD_REMOVE_WINDOW". SHIFT-DAY. MOVE CAL-REST-OF-MONTH TO CAL-FIRST-REST. CHECK-YEAR-END. IF WORKING-MONTH = ZERO MOVE 12 TO WORKING-MONTH SUBTRACT 1 FROM WORKING-YEAR ELSE IF WORKING-MONTH > 12 MOVE 1 TO WORKING-MONTH ADD 1 TO WORKING-YEAR. CALC-DAYS-IN-MONTH SECTION. CALC-DAYS-IN-MONTH-GOTO. GO TO 31-DAY-MONTH 28-29-DAY-MONTH 31-DAY-MONTH 30-DAY-MONTH 31-DAY-MONTH 30-DAY-MONTH 31-DAY-MONTH 31-DAY-MONTH 30-DAY-MONTH 31-DAY-MONTH 30-DAY-MONTH 31-DAY-MONTH DEPENDING ON DIM-MONTH. 31-DAY-MONTH. MOVE 31 TO DAYS-IN-WORKING-MONTH. MOVE 31-DAY-FORMAT TO CAL-WEEKS-REST. GO TO CALC-DAYS-IN-MONTH-EXIT. 30-DAY-MONTH. MOVE 30 TO DAYS-IN-WORKING-MONTH. MOVE 30-DAY-FORMAT TO CAL-WEEKS-REST. GO TO CALC-DAYS-IN-MONTH-EXIT. 28-29-DAY-MONTH. MOVE DIM-YEAR TO LEAP-TEST-YEAR. PERFORM LEAP-YEAR-CHECK. IF LEAP-YEAR MOVE 29 TO DAYS-IN-WORKING-MONTH MOVE 29-DAY-FORMAT TO CAL-WEEKS-REST ELSE MOVE 28 TO DAYS-IN-WORKING-MONTH MOVE 28-DAY-FORMAT TO CAL-WEEKS-REST. CALC-DAYS-IN-MONTH-EXIT. EXIT. *** End of SDCALENDAR.CO *** .W$Rb$n$_q SDIMAGE.DEF *** SDIMAGE.DEF Screen Demon rev 3.52.01 *** Copyright (C) 1993, Threshold, Inc., All Rights Reserved *** -------------------------------------------------------- ** Structure of a SCREEN DEMON image buffer ** * This copy file is intended to be copied after an 01 level group field * that names the image buffer. Individual fields within the image buffer * can be referenced via qualification if necessary. * Note that the copy file SDCONSTANTS.WS defines constant values for * the number of lines in an image buffer (SD-LPP), the number of * characters per line (SD-CPL), and the size of the parameter area * following the character and attribute sections (SD-IMAGE-PARAMETERS-SIZE). * It is recommended that these constant fieldnames be used instead of * hard-coded numeric values to provide compatibility with future revisions. *** Characters section *** 05 SD-IMAGE-CHAR-PLANE. 10 SD-IMAGE-LINE OCCURS 24 TIMES. 15 SD-IMAGE-CHAR OCCURS 162 TIMES PIC X. *** Character attributes section *** 05 SD-IMAGE-ATTR-PLANE. 10 SD-IMAGE-ATTR-LINE OCCURS 24 TIMES. 15 SD-IMAGE-ATTR-CHAR OCCURS 162 TIMES PIC X. *** Additional parameters section *** 05 SD-IMAGE-CURSOR-OFFSET PIC 9(04) COMP. 05 SD-IMAGE-CURRENT-ATTRIBUTES PIC S9(4) COMP. 05 SD-IMAGE-PRIM-CHAR-SET-NUM PIC 9(04) COMP. 05 SD-IMAGE-ALT-CHAR-SET-NUM PIC 9(04) COMP. 05 SD-IMAGE-CURSOR-TYPE PIC 9(04) COMP. 05 SD-IMAGE-KEYBOARD-LANGUAGE PIC 9(04) COMP. 05 SD-IMAGE-SCROLL-RATE PIC 9(04) COMP. 05 SD-IMAGE-RESERVED PIC X(402). * End of image buffer structure .@ g$n$_f&ISD_C_SCREEN_IO.H f/********************************************************************* * sd_c_screen_io.h *********************************************************************/ #include "screen_demon.h" #include "sd_key_defs.h" #define ATTR_SAME -1 #define ATTR_NORMAL 0 #define ATTR_DIM DIMF #define ATTR_ULINE UNDERF #define ATTR_BLINK BLINKF #define ATTR_REVERSE REVRSF #define BYTE_PTR(a) ((char *) &a) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) /* This structure is a convenient way to pass a representation of an area of the screen. R1, c1 is the top, left corner, and r2, c2 is the bottom, right corner of the screen area. */ typedef struct s_rect { short r1, c1; short r2, c2; } RECT; /* Macros to be applied to RECTangles */ #define RWIDTH(a) ((a)->c2 - (a)->c1 + 1) #define RHEIGHT(a) ((a)->r2 - (a)->r1 + 1) #define RASG(a, row1, col1, row2, col2) \ ((a)->r1 = row1, (a)->c1 = col1, (a)->r2 = row2, (a)->c2 = col2) #define RCPY(dst, src) memcpy((char *) dst, (char *) src, sizeof (RECT)) /* Base for ASCII <-> int conversions */ extern int UtoaBase; /* Convert a number to an ASCII string */ char *utoa (/* n, min, padc, str */); int clip (/* srcp, maxrow, maxcol, dstp */); void GetVertBarString (/* str, sel, ps, psize */); void GetMaxVertBarSize (/* str, pl, pc */); void Error (/* format, arg */); void MessageOnly (/* message, line, col */); int AskQuestion (/* question, answers, descriptions */); void SDsetcur (/* line, col */); void SDwrite (/* line, col, ncols, str, attr */); void SDfill (/* rectp, chr, attr */); int SDinput (/* line, col, maxlen, buffer, att */); .W$Q%$n$QL~ZSD_DEBUGGER_CONFIG.SR ; SCREEN DEMON Configuration file ; ; revision 3.52.01 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Copyright (C) 1988 - 1993, ;;; ;;; Threshold, Inc. ;;; ;;; Auburn, Alabama U.S.A. ;;; ;;; All rights reserved. ;;; ;;; ;;; ;;; SCREEN DEMON and its associated hot-key routines ;;; ;;; are proprietary property of Threshold, Inc. ;;; ;;; Except as provided for by the License Agreement; these ;;; ;;; shall not be copied, used, or disclosed for any purpose or ;;; ;;; reason in whole or in part, without the express written ;;; ;;; consent of: ;;; ;;; ;;; ;;; Threshold, Inc. ;;; ;;; 118 North Ross Street ;;; ;;; Auburn, Alabama 36830 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;This file provides definitions for the key codes that require intervention ;by SCREEN DEMON after an input. Certain keys may be defined to cause ;a special action to occur, such as redrawing the screen. Then the ;input is restarted exactly as it was when the special key was pressed. ;A translation table may be defined so that keys that are normally ;inaccessible to COBOL (i.e., the arrow keys and C* function keys) can ;be translated to specified standard function key codes. ;Also, miscellaneous items such as the mail message string, time out values, ;note pad filename, and log file size are defined in this file. ;The following sections associates particular keys with specific routines ;that should be called whenever those keys are pressed. ;NOTE: A key that has a subroutine attached to it will never be ;seen by the host program, since the input statement where the key ;was pressed will be automatically restarted when the subroutine returns. ;Each hot key definition has the following form: ; HOT_KEY ; ,,,... ; ; ; ... ; MENU menu description <--- this line is optional ; DIRECTORY initial directory <--- this line is optional ; ACL access control list <--- this line is optional ; ; where: ; ; is one of the following special keys: ; TAB, NEW_LINE, ERASE_EOL, ERASE_PAGE, CR, ESC, DEL, ; HOME, UP, RIGHT, LEFT, DOWN, ; SHIFT_HOME, SHIFT_UP, SHIFT_RIGHT, SHIFT_LEFT, SHIFT_DOWN, ; C1, C2, C3, C4, SHIFT_C1, SHIFT_C2, SHIFT_C3, SHIFT_C4, ; CMD_SHIFT_PRINT, CMD_PRINT ; F1, F2, ..., F14, F15, ; SHIFT_F1, SHIFT_F2, ..., SHIFT_F14, SHIFT_F15, ; CTRL_F1, CTRL_F2, ..., CTRL_F14, CTRL_F15, ; CTRL_SHIFT_F1, CTRL_SHIFT_F2, ..., CTRL_SHIFT_F15, ; ; any single printable character after a quote: ; "A, "a, "*, ..., ; ; or a decimal number (1-127) representing a control character ; or printable character: ; 1 (CTRL-A), 18 (CTRL-R), 64 ("@), ... ; ; ; and ,,... are one of the following: ; LINKED Entry name ; For linked in assembler, C, PL/1, or FORTRAN sub-programs. ; ; COBOL32 Entry name ; For linked in VS/COBOL sub-programs. ; ; ICOBOL Program name ; Use only for an ICX linked with SCREEN DEMON. ; ; PR Name, arg, arg, ... ; The named program will be PROC'ed with the given ; arguments. ; ; CLI Macro name, arg, arg, ... ; CLI will be PROC'ed to execute the given macro ; with the specified arguments. ; ; LINKED_IN_ROOT Name ; For linked-in assembler, VS/COBOL, C, PL/1, ; or FORTRAN sub-programs. ; Use only when the shared library (SL) version of ; SCREEN DEMON is used. At execution time the ; SCREEN DEMON hot key handler will search for ; the specified name in the list of hot key definitions ; that were linked into the root program. A root ; linked hot key definition may be created by ; running the MAKE_SD_HKD macro. ; ; ; 's are from the following list: ; ; SAVE_SCREEN ; If the sub-routine will not make SCREEN DEMON ; calls to save and restore the screen, then include ; this flag. ; ; REDRAW ; or REDRAW IMMEDIATE ; Set if the hot key routine is PR or CLI and it will ; display characters on the screen. SCREEN DEMON ; will not know about the displayed characters so ; the screen must be redrawn. For CLI type hot keys, ; a "Press Any Key To Continue..." message will appear ; on return from the hot key call if REDRAW is ; specified. To suppress this message, use the ; IMMEDIATE option. ; ; CANCEL ; Only for ICOBOL type hot key programs. When the ; hot key is pressed, SCREEN DEMON simulates a ; CALL "program" (not a CALL PROGRAM). If file ; statuses and variables must be in their initial ; state when the program executes, then include this ; flag. ; ; ; The optional MENU clause will place an entry for the hot key ; on the Screen Demon main menu. The description shown on the ; menu will be the text specified after the keyword MENU. ; NOTE: To add a hot key to the main menu without actually ; assigning it to a particular key, do not specify ; a key name on the HOT_KEY clause. For example: ; HOT_KEY ; LINKED SD_WP_SHELL ; MENU WordPerfect Office Shell ; ; ; The optional DIRECTORY clause allows the initial working directory ; for the hot key process to be specified. This clause effects ; only PR and CLI type hot keys. If no DIRECTORY clause is supplied ; in a hot key definition, the hot key process will start in the ; current working directory. ; ; ; The optional ACL clause allows access to the hot key to be ; restricted. Following the ACL keyword should be a list of ; usernames and/or username templates, similar to an AOS/VS ; file ACL. Like an AOS/VS file ACL, `*' matches any one ; character, and `+' matches any number of characters, including ; zero. However, unlike an AOS/VS file ACL, the FIRST character ; of an individual template may be an exclamation mark (!), which ; indicates that if a match occurs on that template, access is to ; be DENIED, rather than permitted. Also, there are no privilege ; letters following each template. Whenever a particular user ; attempts to access a hot key that has an ACL (either via the ; menu or assigned key), Screen Demon will scan the ACL looking ; for a match for the current username. If no template in the list ; matches the current username, Screen Demon will silently deny the ; user access to the hot key. If a match is found, then if the ; template started with `!', access is denied; otherwise, the ; hot key routine will be called. ; ; NOTE: If there is no ACL clause specified in a particular ; hot key definition, then all users will be able to ; access that hot key routine. ; ; For example, suppose the following ACL clause was specified ; as part of a hot key definition: ; ACL FRED !MARTHA MAR+ ; This indicates that FRED may access the hot key, and anyone ; whose username begins with the letters "MAR" except MARTHA ; can access the hot key. All other users will be denied access. ; ; As another example, the ACL clause ; ACL !ACCT+ + ; means that everyone except those whose usernames begin with ; the letters "ACCT" can access the associated hot key routine. BEGIN_HOT_KEYS ;This line (and the END_HOT_KEYS below) must exist ; even if there are no hot keys defined. ; Assign the SCREEN DEMON pop-up main menu to function key 11 (F11) HOT_KEY F11 LINKED SD_MAIN_MENU ; Redraw the Screen when the Erase Page key is pressed HOT_KEY ERASE_PAGE LINKED SD_REDRAW ;Word address of Redraw routine MENU Redraw Screen ; On CMD PRINT or CMD SHIFT PRINT, call the Print Screen program HOT_KEY CMD_PRINT, CMD_SHIFT_PRINT LINKED SDSCREENPR INT ;this is a C program, not COBOL32 MENU Print Screen ; On F14, call the Calculator HOT_KEY F14 PR SDCALCULATOR MENU Calculator ; On F12, Read Mail ; You can specify SD_READ_MAIL instead of SD_MAIL_INBOX if you ; want new messages to be displayed automatically when the hot ; key is pressed. HOT_KEY F12 LINKED SD_MAIL_INBOX MENU Read Mail ; On Shift F12, Send Mail HOT_KEY SHIFT_F12 LINKED SD_INPUT_MAIL ;Word address of Input Mail Routine MENU Send Mail ; On F13, call the Notepad HOT_KEY F13 LINKED SD_NOTEPAD ;Word address of Notepad routine MENU Notepad ; On F15, call the CLI Interface HOT_KEY F15 LINKED SD_CLI_INTERFACE ;Word address of CLI Interface routine MENU Call CLI ; On Shift F11, call the SCREEN DEMON Command routine (sets Turbo level) HOT_KEY SHIFT_F11 LINKED SD_COMMAND ;Word address of Command routine MENU Turbo On/Off ; On Shift F14, call the Calendar program HOT_KEY SHIFT_F14 PR SDCALENDAR MENU Calendar ; On Shift HOME, call the special routine that displays the ; current screen appearance of the program being debugged. HOT_KEY SHIFT_HOME LINKED SD_VIEW_TARGET_SCREEN MENU View Program Screen ; On Up-Arrow-key, call the special routine that obtains the ; previous entry from input history. HOT_KEY UP LINKED SD_GET_PREV_FROM_INPUT_HISTORY ; On Down-Arrow-key, call the special routine that obtains the ; next entry from input history. HOT_KEY DOWN LINKED SD_GET_NEXT_FROM_INPUT_HISTORY ; On Shift Up-Arrow-key, call the special routine that allows the ; scrollback buffer to be accessed. HOT_KEY SHIFT_UP LINKED SD_SHOW_SCROLLBACK_BUFFER ;Add more hot key routine definitions here as required... END_HOT_KEYS ;The following section is used to translate entered key codes to ;different ones. BEGIN_TRANSLATIONS ;This line is required even if there are no ;key translations specified ;For each key that is to be translated to another key, enter a line ;of the following format: ; ; TRANSLATE , ; ; where both key codes are of the form described for ; under the HOT KEY section above. ; ;For example, the following two lines (if the semicolons were removed ;to uncomment them) will translate the up and down arrow keys to F3 and F2, ;respectively: ; TRANSLATE UP,F3 ; TRANSLATE DOWN,F2 ;Insert key translations here END_TRANSLATIONS ;This line is required even if there are no ;key translations specified ;Sometimes it may be desirable to input a particular key to an application, ; even if that key has been assigned to be a hot key or is normally ; translated to appear as another key value. The following definition ; specifies an "escape" key that, if pressed, suppresses hot key processing ; and/or translation of the next key pressed. To pass the chosen "escape" ; key to the application, press it twice. If no "escape" key is desired, ; specify a value of -1. Note that the "escape" key can never be a hot key ; or be translated. HOT_ESCAPE_KEY: CTRL_SHIFT_F15 ;The standard Screen Demon hot key routines accept as the normal ; exit key. Users may be accustomed to pressing a different key to ; exit in their application programs; for example, CEO uses F11 as ; the Cancel/Exit key. To minimize user confusion, it is possible ; to designate an alternate exit key for Screen Demon hot key routines ; that will act the same as . This alternate exit key can be set ; to the same key that the user would press to exit their application ; programs. If no such alternate exit key is desired, set the answer ; to the following question to -1; otherwise, specify the key name: SD_ALTERNATE_EXIT_KEY? -1 ;none by default ;String that will be displayed whenever an input is completed to provide ; immediate feedback to the operator that the input operation is over. ; The next flush will undo whatever this string does to the screen. ; Special screen control characters can be included in the string by ; enclosing them inside <>. Predefined control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; ; If no such feedback is desired, set the INPUT_FEEDBACK_STRING_SIZE below ; to zero. Overall performance will be somewhat slower if the feedback ; string is output after inputs, but may make the system APPEAR faster ; to an operator. INPUT_FEEDBACK_STRING: .TXT "<13>" ;perhaps a CR ;Number of characters in the above string INPUT_FEEDBACK_STRING_SIZE: 0 ;default is no feedback string ;String that will be displayed whenever the user has unread mail. ; Special screen control characters can be included in the string by ; enclosing them inside <>. Predefined control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is a bright, blinking `Mail' in the top right corner of the screen. MAIL_INDICATOR: .TXT "Mail" ;Number of characters in the above string MAIL_INDICATOR_SIZE: 5 ;Location and size of region of screen occupied by above mail indicator string MAIL_VIEW_LINE: 1 MAIL_VIEW_COLUMN: 77 MAIL_VIEW_HEIGHT: 1 MAIL_VIEW_WIDTH: 4 ;String that will be displayed whenever a terminal is being viewed remotely ; through the SD_SPY program. Special screen control characters can be ; included in the string by enclosing them inside <>. Predefined control ; character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is no indicator. SD_REMOTE_VIEW_INDICATOR: .TXT "Remote View" ;Number of characters in the above string, or zero if no Remote View ; indicator is desired SD_REMOTE_VIEW_INDICATOR_SIZE: 0 ;set this to 12 ; to enable indicator ; string defined above ;Location and size of region of screen occupied by above indicator string SD_REMOTE_VIEW_INDICATOR_LINE: 1 SD_REMOTE_VIEW_INDICATOR_COLUMN: 1 SD_REMOTE_VIEW_INDICATOR_HEIGHT: 1 SD_REMOTE_VIEW_INDICATOR_WIDTH: 11 ;String that will be displayed whenever terminal inputs are being handled ; remotely through the SD_SPY program. Special screen control characters ; can be included in the string by enclosing them inside <>. Predefined ; control character names available: ; BLINK_ON, BLINK_OFF, UNDER_ON, UNDER_OFF, DIM_ON, DIM_OFF ; Default is a bright, blinking `Remote Input' in the top left corner ; of the screen. SD_REMOTE_INPUT_INDICATOR: .TXT "Remote Input" ;Number of characters in the above string SD_REMOTE_INPUT_INDICATOR_SIZE: 13 ;Location and size of region of screen occupied by above indicator string SD_REMOTE_INPUT_INDICATOR_LINE: 1 SD_REMOTE_INPUT_INDICATOR_COLUMN: 1 SD_REMOTE_INPUT_INDICATOR_HEIGHT: 1 SD_REMOTE_INPUT_INDICATOR_WIDTH: 12 ;If the CEO interface is to be used, the following two fields allow the ; location of the CEO mail status indicator to be specified. ; At runtime, the optional hot key routine SD_CEO_STATUS_MOVE (see ; the CEO interface documentation) can be used to move the status ; indicator to a different position as needed. These two fields ; are ignored if the CEO interface is not installed. CEO_MAIL_VIEW_LINE: 1 ;Normal default is first line CEO_MAIL_VIEW_COLUMN: 1 ; and first column ;If the WordPerfect Library or Office interface is to be used, the ; following field allows the letter code for the "Go To CLI" ; selection on the Shell menu to be specified. SCREEN DEMON needs ; to know this in order for the SD_CLI_INTERFACE hot key to work ; when running under WP Shell. SD_WP_SHELL_CLI_LETTER: .TXT "G" ;Amount of time in seconds that may elapse during a single input before ;the list of 'periodic calls' is executed. The input is restarted after ;those functions are called. The SCREEN DEMON mail check and CEO interface ;mail check are examples of these periodic calls. PERIODIC_INTERVAL? 60 ;once per minute ;Amount of time in seconds that may elapse during a single input before ;triggering the SCREEN DEMON screen saver. This routine will completely ;blank the screen, including the cu @ rsor, to avoid burn-in. Pressing any ;key will restore the original screen contents. Set this field to -1 ;to disable the screen saver. SCREEN_SAVER_INTERVAL? -1 ;default is no screen saver ;Amount of time in seconds that may elapse while the Screen Demon Main Menu ;is waiting for a response before automatically exiting the menu. ; ;Use a value of -1 to never terminate the Main Menu because of inactivity. MAIN_MENU_TIMEOUT_INTERVAL? -1 ;default is no timeout ;Amount of time in seconds that may elapse for a single input before ;the user is terminated (via orderly shutdown: files will be closed). ; ;Use a value of -1 to disable automatic logoff so that users will ; never be terminated because of inactivity. ; ;Note that specific programs can be protected against automatic logoff ; if desired. See Special Programs List below. LOGOFF_INTERVAL? -1 ;Default is to never terminate ; inactive users ;An optional time range during the day can be specified during which ; termination due to inactivity will not occur. Before and after ; this period, however, the time value specified in LOGOFF_INTERVAL ; above will apply. By default, logoff is permitted at any time, ; assuming LOGOFF_INTERVAL above is not -1. ; ; To specify a no-logoff time range, indicate the beginning and ending ; times (24-hour clock) of the protected period as follows: ; LOGOFF_OK_BEFORE hour,minute ; LOGOFF_OK_AFTER hour,minute ; ; For example, assuming that LOGOFF_INTERVAL contained an actual value, ; such as (15*60) to indicate 15 minutes, then the following statements ; would disable automatic logoffs between 8:00 am and 5:30 pm: ; LOGOFF_OK_BEFORE 8,00 ; LOGOFF_OK_AFTER 17,30 ; After 5:30 pm, users inactive for more than 15 minutes are to be logged ; off; the same applies to users inactive before 8:00 am. ;Specify optional no-logoff time period below: LOGOFF_OK_BEFORE 0,00 ;Default is LOGOFF_OK_AFTER 0,00 ; no protected period ;An optional list of users can be specified who are to be considered ; immune from automatic logoff. This list can contain exact usernames, ; username templates, or both. ; ; The NO_LOGOFF_USERS command is used to specify the list. There may ; be up to 25 usernames per NO_LOGOFF_USERS command, and there may be ; any number of NO_LOGOFF_USERS commands, provided each begins on a ; separate line. ; ; For example, ; ; NO_LOGOFF_USERS FRED MAR+ ; NO_LOGOFF_USERS ACCT+ ; ; indicates that all users whose names begin either with the letters MAR ; or ACCT should never be terminated due to inactivity, nor should the ; particular user named FRED. All other users can be terminated if ; their terminals become inactive, provided this is not prevented by ; other considerations, such as the logoff time range specified above, ; or the NO_LOGOFF special program declaration described later. ;Specify any users who should be immune from automatic logoff termination NO_LOGOFF_USERS ;no immune users by default ;The following question specifies the default value for the Turbo ; display setting. Turbo display offers two types of optimization ; of screen output: ; (1) System Call Buffering - Screen output is held until an input ; occurs, or until an specified amount of time has elapsed, ; as set with the FLUSH_INTERVAL? question below. ; (2) Discarding Redundant Characters - A given character will not ; be sent to the terminal if the screen position where it ; is to be displayed already shows that character. ; ; The allowable values for the Turbo display setting indicate what ; level of optimization is desired: ; ; Value Optimization ; ------- --------------- ; FULL Levels 1 and 2 ; PARTIAL Level 2 only ; this is equivalent to FULL with ; FLUSH_INTERVAL? set to zero, and ; is not recommended because it requires ; far more CPU resources ; OFF no optimization ; ON same as FULL ; ;Select an answer from the above list for the following question: DEFAULT_TURBO_DISPLAY_SETTING? FULL ;When running in FULL Turbo display mode, program screen output is normally ; held until the next input occurs, at which time the terminal screen ; is updated. Programs with many displays between inputs, such as a ; report program displaying a record count as it runs, need the screen ; updated more frequently. For this purpose, Screen Demon contains an ; optional Flush Timer which will force a screen update to occur if a ; specified amount of time has elapsed since the last flush, even if ; no input has occurred. ; ; The following field specifies the maximum time in seconds between ; screen updates. ; Use a value of -1 to disable the flush timer; this is equivalent ; to Full Turbo in rev 2 Screen Demon. ; Use a value of 0 to prevent buffering of program screen output; ; this is equivalent to Partial Turbo in rev 2 Screen Demon. FLUSH_INTERVAL? 10 ;flush at least once every ten seconds ;If Turbo mode is on, screen output is held until an input occurs, or ; the FLUSH_INTERVAL expires. If the screen scrolls, it may be ; desirable to update the screen at that time, rather than waiting ; for one of the other events to trigger a flush. The following ; field specifies the maximum number of scroll ups that can be ; held before forcing a flush. Set this field to -1 to prevent ; automatic flushing on scroll operations. MAX_SCROLL_BEFORE_FLUSH: 5 ;If the screen scrolls 5 lines, ; force a flush ;Miscellaneous options, answers are either YES or NO ;When Turbo mode is on, should SCREEN DEMON actually clear the screen ;whenever the host program outputs a clear screen command? ; ; Doing so is usually more efficient, and may be preferable to the ; operators. However, if the host program tends to blank the screen ; and repaint the same text a lot, it would probably be more efficient ; and would look better if SCREEN DEMON suppressed the actual clear ; screen command. PHYSICAL_SCREEN_CLEAR? YES ;Should SCREEN DEMON automatically redraw the screen whenever the ;host program returns from a call to a nonSCREEN DEMON program? ; ; When the host program calls out to a nonSCREEN DEMON program and then ; returns, SCREEN DEMON has no way to know what the nonSCREEN DEMON ; program did to the terminal screen. In order to resynchronize the ; screen with SCREEN DEMON's internal picture, a redraw is necessary. ; By default, this happens at the next flush after returning from ; the call. However, if the called program displayed some information ; that the user needs to see, an immediate redraw will clear this ; information before it can be read. In such cases, it might be ; preferable to set the following option to NO to inhibit the automatic ; redraw, and put code into the host program to call SD_REDRAW when a ; screen redraw is appropriate. Another case where it might be better ; to do the redraw under program control is when the called program ; doesn't actually affect the screen, and so a redraw is not really ; necessary. AUTO_REDRAW_AFTER_NONSD_CALL? YES ;Should SCREEN DEMON use the Line Drawing character set for boxes and ;lines on terminals that have this capability? ; ; The SCREEN DEMON calls SD_DRAW_BOX, SD_DRAW_HLINE, and SD_DRAW_VLINE ; allow the programmer to easily draw boxes and lines on the terminal. ; Boxes and lines created using the Line Drawing character set ; generally look better than the default boxes and lines created ; by using reverse video and underline screen attributes. However, ; there are some differences in the way boxes and lines must be ; built if the Line Drawing character set is used that could cause ; some incompatibilities with existing programs. The main difference ; is that horizontal lines built with Line Draw characters actually ; take up a character position, but horizontal lines created by ; underlining characters already present do not. If this is a problem, ; set the answer for one or both of the followi ` ng two questions to NO. USE_LINE_DRAW_CHARSET_FOR_BOXES? YES USE_LINE_DRAW_CHARSET_FOR_LINES? YES ;Should Screen Demon turn off the /NRM characteristic so that SENDs ;are not blocked? ; ; Some programs, such as those compiled with VS/COBOL, set the ; /NRM characteristic to protect their screens. However, blocking ; SENDs altogether is not the best solution because there are ; cases when a SEND is the only way of notifying a user of some ; event. Since Screen Demon provides a Redraw Screen capability, ; an application program's screen can easily be restored after a ; SEND message appears on the terminal. Consequently, it is not ; necessary for a program to set the /NRM characteristic. Answering ; this question YES tells Screen Demon to keep this characteristic ; off, even if the host program tries to turn it on. FORCE_NRM_CHARACTERISTIC_OFF? YES ;Should SCREEN DEMON trim trailing spaces and underscore characters ;from the initial contents of input fields, thus permitting ^A, ^E, ;and DELETE screenedit functions to work properly? ; ; Normally, COBOL input fields start off filled with underscore ; or space characters. This means that the "go to end of field" ; and "insert" screenedit functions will not work as expected, ; since PMGR treats the trailing spaces and/or underscores as ; real characters. Also, when DEL is used, trailing underscores ; will shift to the left, shortening the apparent length of the ; input area. Screen Demon can optionally trim these characters ; when the input begins, so that PMGR doesn't know about them. ; The characters will still be displayed before the input begins ; as always. The primary drawback is that when an input restarts, ; such as after a timeout or hot key, any trailing spaces or ; underscores will vanish, which may confuse some operators. ; ; NOTE: A bug in VS/COBOL rev 3.20 and below, and in rev 3.71, ; prevents function keys from working correctly if the ; underscores are removed, so this question MUST be answered ; NO for these revisions of VS/COBOL. The default for this ; question is NO for that reason. TRIM_SPACE_UNDERSCORE_ON_INPUT? NO ;Should SCREEN DEMON ignore console interrupts (^C^A, ^C^B, and ^C^E)? ; ; One of SCREEN DEMON's tasks catches console interrupts. By default, ; it handles the interrupts the same way that the host program would ; if SCREEN DEMON were not present. If the host program contains code ; to watch for console interrupts, SCREEN DEMON will pass the interrupt ; to the host program; otherwise, SCREEN DEMON will terminate the ; process gracefully. ; ; A YES answer to the following question will cause SCREEN DEMON ; to discard any console interrupt events. They will not be passed ; to the host program, and SCREEN DEMON will not terminate the process. ; This is an easy way to prevent operators from aborting out of ; programs that cannot defend themselves. IGNORE_CONSOLE_INTERRUPTS? NO ;How should SCREEN DEMON compensate for the ^C^x character sequence ; echoed whenever the operator presses a console interrupt? ; ; The ^C^x sequence normally echoed whenever a console interrupt ; is pressed is not visible to SCREEN DEMON. Consequently, SCREEN ; DEMON does not know where those echoed characters appeared on the ; screen. By default, SCREEN DEMON will update its image buffers ; to reflect the ^C^x characters by assuming that they are located ; immediately before the cursor position. However, if a display ; was occurring at the time, it is possible for this assumption to ; be incorrect. In order to definitely resynchronize the screen ; with SCREEN DEMON's internal picture, a redraw is necessary, but ; this can be annoying if done automatically; the Redraw hot key ; is available to force a redraw only when necessary. ; ; Select one of the following choices to answer this question: ; INTR_ERASE Immediately space over the ^C^x, assuming that ; the cursor is just past the sequence, leaving ; the cursor at its original position as if ^C^x ; had never been displayed. ; ; INTR_REDRAW Redraw the screen at the next flush to remove ; the ^C^x. This was the method used by rev 2.01.05 ; ; INTR_ECHO Update the ^C^x into the internal image buffers, ; assuming that the cursor is just past the sequence, ; leaving the cursor past the sequence. ; ; INTR_NOTHING Ignore the ^C^x sequence. ; CONSOLE_INTERRUPT_HANDLING? INTR_ECHO ;NOTE: The COBOL versions of the Print Screen hot key routine do not ; use the answers to the following two SDSCREENPRINT... questions, ; but the LINKED SDSCREENPRINT version does. ;Should the SCREEN DEMON Print Screen hot key routine ask the user ;for an output filename? ; ; Answer this question YES to allow the operator to specify a ; print destination for the screen image, with the default ; shown below as SDSCREENPRINT_OUTPUT_NAME. If this question ; is answered NO, then the operator will not be asked for an ; output filename, and the screen image will be printed to the ; default output filename as specified below. SDSCREENPRINT_ASK_OUTPUT_NAME? YES ;Default output filename for the SCREEN DEMON Print Screen hot key routine: SDSCREENPRINT_OUTPUT_NAME: .TXT "@LPT" ;Should the SCREEN DEMON Read Mail hot key routine ask the user ;for an output filename when the Print option is selected? ; ; Answer this question YES to allow the operator to specify a ; print destination for the printed message, with the default ; shown below as SD_READ_MAIL_OUTPUT_NAME. If this question ; is answered NO, then the operator will not be asked for an ; output filename, and the message will be printed to the ; default output filename as specified below. SD_READ_MAIL_ASK_OUTPUT_NAME? YES ;Default output filename for the SCREEN DEMON Read Mail hot key routine ; when the Print option is selected: SD_READ_MAIL_OUTPUT_NAME: .TXT "@LPT" ;Should SCREEN DEMON mail messages be deleted automatically after ;the operator has read them? ; ; Answer this question YES to force mail messages to be deleted ; automatically after the operator has acknowledged reading them. ; If this question is answered NO, previously read messages will ; remain in a user's inbox until deleted by the user. SD_READ_MAIL_AUTO_DELETE? NO ;Should SCREEN DEMON mail messages always be delivered immediately, ;whether or not they are marked as Urgent? ; ; Answer this question YES to force mail messages to appear ; immediately on the recipient's screen, even messages that ; are not Urgent. If this question is answered NO, only ; Urgent messages will appear immediately. Normal messages ; will simply trigger the Mail Indicator; the user must press ; the Read Mail hot key to view these messages. SD_IMMEDIATE_MAIL_DELIVERY? NO ;Declare the default sizes returned by the SD_GET_IMAGE and ; SD_GET_IMAGE_BELOW_FLOAT calls. ; ; Previous revisions of Screen Demon returned a 24 line by 80 column ; image, followed by 4 more bytes containing the cursor offset and ; global attribute settings. For rev 3.00, the internal screen images ; are 24x162, and there are a number of additional fields following the ; image. Existing programs will be expecting the smaller image style ; if they are simply relinked with rev 3.00 Screen Demon. However, if ; a program is recompiled, it may or may not want the older image format. ; If the program defines its image buffer using the SDIMAGE.DEF or ; SCREEN_DEMON.H include files, then a recompile without source code ; changes results in the program expecting the new larger image format. ; However, if the image definition is hard-coded, then the program will ; still expect the older image format even after recompilation. Thus, ; this configuration file option is provided to allow the system ; manager to decide which is the most appropriate default behavior for ; the Get Image calls. Note that a specific Get Image call can declare ; the actual size of image buffer it  wants; this overrides the default ; setting defined here. ;Default number of lines in returned image buffers SD_GET_IMAGE_DEFAULT_LINES? 24 ;Default number of columns in returned image buffers ; For rev 3.00 compatibility, specify 162 ; For rev 2.01 (and before) compatibility, specify 80 ; SD_GET_IMAGE_DEFAULT_COLUMNS? 162 ;Default size in bytes of additional parameters returned ; following the image characters and attributes ; For rev 3.00 compatibility, specify 14 ; For rev 2.01 (and before) compatibility, specify 4 ; ;Default additional parameters return size in bytes SD_GET_IMAGE_DEFAULT_PARAMS? 14 ; The functionality of the SD_RETURN_INPUT call was enhanced in ; revision 3.51. In previous revisions, this call functioned only ; in a program or subroutine invoked by pressing a hot key; the string ; of characters specified with this call was returned to the input field ; where the hot key was pressed. ; ; Beginning with revision 3.51, the specified string will be placed in the ; next encountered input field, whether or not a hot key is active. In ; addition, the string can contain multiple fields, separated by delimiters. ; At an input, the next chunk of the return input string will be loaded into ; the field as if the operator had entered it. If a delimiter follows the ; chunk, the input will be terminated as if the operator had pressed that ; key. This process is repeated at subsequent inputs until the contents of ; the return input string have been exhausted. ; ; Since this new functionality is potentially incompatible with that of ; older revisions, a configuration option is provided to allow the desired ; mode of operation to be specified. The new method will be incorrect in ; the situation where a hot key program calls SD_RETURN_INPUT, but then ; does an input before exiting. With the old method, this input would be ; unaffected by the SD_RETURN_INPUT call. With the new method, the returned ; characters would appear at that input, rather than the input field where ; the hot key was pressed. If you have programs that exhibit this behavior, ; you will need to modify them or set the following configuration option to ; "hot key only" mode. Otherwise, the new method should be satifactory. ; ; Choose the answer to the following question from this list of options: ; RI_HOT_ONLY SD_RETURN_INPUT valid only in hot key ; routines; the returned string is loaded ; into the field where the hot key was pressed. ; (Pre-revision 3.51 functionality) ; ; RI_ANY_INPUT SD_RETURN_INPUT works at any time; the ; returned string is loaded into the next ; encountered input field(s), and multiple ; input fields can be returned. ; (revision 3.51 functionality) ; ; Should the SD_RETURN_INPUT call function only to return input information ; from a hot key call to the input field where the hot key was pressed, or ; should return strings declared with this call be available at the next ; encountered input field(s)? SD_RETURN_INPUT_MODE? RI_ANY_INPUT ;default is new method ;If multiple character sets are to be used by programs running under ; SCREEN DEMON, a character set palette must be specified that ; lists the particular character sets to be used. SCREEN DEMON ; supports up to 8 simultaneously displayed character sets. ; Note that only some DG terminals support multiple character sets. ; ; Specify the character sets that will be invoked by listing their ; two-character codes, which can be found in the terminal's programming ; manual. The first code in the list should be the standard primary ; character set to be used (the code 00 is suggested, which is the set ; of the keyboard attached to the terminal). The order of the remaining ; codes is unimportant. If less than eight codes are listed, the default ; settings will be used for the unspecified palette slots. ; ; For example, (this is also the default palette) ; ; CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ; ; specifies that the following character sets are available: ; '00' char set #0 (primary) is Keyboard set ; '10' char set #1 is Word Processing set ; '11' char set #2 is Line Drawing set ; '0>' char set #3 is DG International set ; '01' char set #4 is U.S. set ; '02' char set #5 is United Kingdom set ; '13' char set #6 is DG Special Graphics set ; '20' char set #7 is DLL set 0 ;Indicate your desired character set palette here: CHAR_SET_PALETTE 00,10,11,0>,01,02,13,20 ;Which of the sets listed in the palette above should be the default ; primary set? DEFAULT_PRIMARY_CHAR_SET? 00 ;Which of the sets listed in the palette above should be the default ; alternate set? DEFAULT_ALTERNATE_CHAR_SET? 10 ;For terminals that support selectable 7/8 bit mode, what should be ; the default character length? ; ; Most Data General terminals that support multiple character sets ; also support either 7 or 8 bit mode. When in 7-bit mode, the high ; bit is a parity bit, so the terminal only looks at the lower 7 bits ; when determining what character to display, and the character is ; always selected from the currently active character set. When in ; 8-bit mode, all bits are significant. If the high bit for a received ; character is set, the terminal will display the character from the ; current alternate character set even if the primary set is active ; at the time. ; ; This question allows the default setting for this parameter to be ; specified. Screen Demon will force the terminal into this state ; on start-up. ; ; This question should be answered with a value of either 7 or 8. DEFAULT_7_OR_8_BIT_MODE? 7 ;For terminals that support selectable keyboard language, what should be ; the default setting? ; ; When the terminal is operating in 7-bit mode (see above), this ; parameter is ignored, and the keyboard language matches the ; keyboard hardware. When in 8-bit mode, the keyboard language ; can also be set to be the US ASCII character set for 7-bit ; characters, and the DG International character set for 8-bit ; characters. This may be necessary if the SPCL key is to be ; used to generate particular 8-bit characters. ; ; Select one of the following choices to answer this question: ; KEYBD_LANG_HARDWARE Matches the keyboard hardware ; KEYBD_LANG_INTERNATIONAL US ASCII in K0, DG International in K1 DEFAULT_KEYBOARD_LANGUAGE? KEYBD_LANG_HARDWARE ;For terminals that support variable cursor types, what should be ; the default cursor type? ; ; The more advanced Data General terminals support different cursor ; types. On newer terminals, the default cursor type can be adjusted ; in the set-up screens. There is also a local cursor type key on ; the keyboard. Screen Demon cannot determine the current cursor type ; of the terminal, so it must force the cursor to a particular type ; when a Redraw occurs. The desired default cursor type can be ; indicated here. ; ; Select one of the following choices to answer this question: ; CURSOR_INVISIBLE No cursor ; ; CURSOR_BLINK_UNDERSCORE Cursor is a blinking underscore ; ; CURSOR_BLOCK Cursor is a reverse video block ; ; CURSOR_BLINK_BLOCK Cursor is a blinking reverse ; video block ; ; CURSOR_UNDERSCORE Cursor is a nonblinking underscore ; (not supported on older terminals) ; DEFAULT_CURSOR_TYPE? CURSOR_BLOCK ;For terminals that support adjustable scroll rates, what should be ; the default scroll rate? ; ; The more advanced Data General terminals support different scroll ; rates. On newer terminals, the default scroll rate can be adjusted ; in the set-up screens. There is also a local scroll rate key on ; the keyboard. Screen Demon cannot determine the current scroll rate ; of the terminal, so it must force the scroll rate to a particular ; setting when a Redraw occurs. The desired default scroll rate can be ; indicated here. ; ; Select one of the following choices to answer this question: ; SCROLL_JUMP As fast as new lines are received ; ; SCROLL_SMOOTH_SLOW Smooth scroll, 5 lines per second ; ;  SCROLL_SMOOTH_FAST Smooth scroll, 10 lines per second ; DEFAULT_SCROLL_RATE? SCROLL_JUMP ;Initial command string for SD_CLI_INTERFACE hot key routine: ; (can be changed at runtime using the SD_SET_CLI_INIT_CMD call) SD_DEFAULT_CLI_INIT_CMD: .TXT "PREFIX,SCREEN,DEMON,CLI[!ASC 251]" ;Pathname of the CLI program to be called for CLI interface. ; If CLI32 is available, you may wish to change the pathname ; below to call that instead. Alternatively, you may want ; to call SD_CLI, if you have created a Screen Demon possessed ; version of CLI32. SD_CLI_PATHNAME: .TXT ":CLI" ;Screen Demon can maintain a list of the most recently entered ; input strings. This is similar to the HISTORY feature in CLI32, ; but Screen Demon's input history works at all input fields in ; any program. A separate input history is kept for each process. ; ; The input history is accessed via two hot key routines, which ; can be assigned to any two different keys on the keyboard. ; The hot key routine SD_GET_PREV_FROM_INPUT_HISTORY moves backward ; in the history list, displaying the input strings in the current ; input field each time the hot key is pressed. The hot key routine ; SD_GET_NEXT_FROM_INPUT_HISTORY works the same way, except that it ; moves forward through the history list. Both routines wrap around ; to the other end of the list when necessary. ; ; To maintain the input history, a buffer must be allocated where ; the input strings can be stored. Obviously, a larger buffer means ; more available input history. Unlike CLI32 HISTORY, where the ; history size is specified in lines, for Screen Demon's input history ; buffer, the size is specified in characters. If the input history ; feature is not desired, set the buffer size to zero. INPUT_HISTORY_BUFFER_SIZE? 2048 ;Screen Demon can maintain a copy of text that has recently been scrolled ; off the top of the screen, or cleared because of a form feed command. ; These lines are kept in a "scrollback" buffer. When the buffer becomes ; full, the oldest lines are discarded to make room for new additions. ; ; The scrollback buffer can be examined via the hot key routine ; SD_SHOW_SCROLLBACK_BUFFER, which can be assigned to any key on ; the keyboard. While viewing the scrollback buffer, press UP ARROW ; to move upward and see earlier lines, or press DOWN ARROW to move ; downward and see text that scrolled off more recently. ; ; The scrollback buffer will be allocated at runtime. The size ; of this buffer is declared in characters. Screen Demon will keep ; as many complete scrollback lines in this buffer as will fit; ; the actual number of lines stored will depend on the average line ; length. If the scrollback feature is not desired, set the buffer ; size to zero. SCROLLBACK_BUFFER_SIZE? 8192 ;default is no scrollback buf ;First part of pathname to user notepad files. A complete pathname to a ;user's notepad file is formed by taking the prefix string specified here ;(usually a directory pathname), appending the user's name, and then the ;string given below under PAD_PATH_SUFFIX. PAD_PATH_PREFIX: .TXT ":UDD:" ;Name extension of notepad file ready to be appended to Prefix/Username ;combination as described above. PAD_PATH_SUFFIX: .TXT ":NOTEPAD" ;Maximum size, in bytes, of a console logging file. MAX_CONLOG_SIZE? 65536 ;If Screen Demon should maintain a clock on the screen to display ; the current date, time, etc., describe the position, size, ; and format of this clock below. If no clock format string ; is specified, Screen Demon will not link the clock routine ; into your programs. ; ; ;Format string definitions: ; ; SD_FLOAT_CLOCK_FORMAT: ; .TXT "string" ; ; The text in the given string is displayed exactly except for ; constructs beginning with a percent sign (%). The character ; or characters following the percent sign indicate what parameter ; is to be displayed in place of the construct. In the list below, ; the examples of what would be displayed are based on the example ; point in history of 18-DEC-90 at 3:05 pm ; ; %% display a single percent sign ; % display a space. Use this in order to ; specify sequences of more than one SPACE, ; because " " looks like only one SPACE ; to the config file builder, but "% % % " ; will be seen as three consecutive SPACE ; characters. ; %cn display the upper two digits of complete year ; (e.g., 19) ; %yr display the lower two digits of complete year ; (e.g., 90) ; %mo display the month number within the year (e.g., 12) ; %nm display the full name of the month (e.g., December) ; %am display the abbreviated month name (e.g., Dec) ; %da display the day number within the month (e.g., 18) ; %nd display the full name of the day (e.g., Tuesday) ; %ad display the abbreviated day name (e.g., Tue) ; %hr display the hour in 12-hour format (e.g., 3) ; %mh display the hour in 24-hour format (e.g., 15) ; %mi display the minutes within the hour (e.g., 5) ; %ap display appropriate am/pm indicator (e.g., pm) ; ; ; For names, abbreviations, and the am/pm indicator, the case of ; the first character of the format specifier indicates the case ; of the first character of the displayed string. The case of the ; second character of the format specifier indicates the case of ; the remaining characters of the displayed string. ; e.g. %nm --> december ; %Nm --> December ; %NM --> DECEMBER ; ; For format specifiers that result in numeric displays, the case ; of the specifier is ignored. However, for these specifiers, ; a `0' character can be placed between the `%' character and the ; two-character code; this indicates that a leading zero should be ; included if necessary to pad the number out to two digits. ; e.g. %hr:%mi %ap --> 3:5 pm ; %hr:%0mi %ap --> 3:05 pm ; %0mh%0mi --> 1505 ; ; ; Note that screen control characters can be included in the ; format string if desired. See MAIL_INDICATOR above for ; information about these characters. ; ; As a more complex example, the format string ; "% It is now %hr:%0mi %ap on %Nd % %Nm %da, %cn%yr" ; would display the following underlined clock output: ; It is now 3:05 pm on Tuesday December 18, 1990 ; which would be updated at each input, and periodically ; during an input based on the time value indicated for ; the PERIODIC_INTERVAL? question above. ; ; ;Describe your desired clock format below. ; Leave this question blank if you do not want Screen Demon ; to display a clock. Otherwise, specify a format string ; of the form ; .TXT "string" ; following the label below: SD_FLOAT_CLOCK_FORMAT: ;default is no clock ;Specify the position and size of the clock on the screen. Note that ; the answers to the next four questions are ignored if the answer ; to the SD_FLOAT_CLOCK_FORMAT: question above is blank. The values ; shown here would match a Clock Format of "%mh:%0mi" SD_FLOAT_CLOCK_LINE: 1 SD_FLOAT_CLOCK_COLUMN: 76 SD_FLOAT_CLOCK_HEIGHT: 1 ;height in lines SD_FLOAT_CLOCK_WIDTH: 5 ;width in columns ;The names used by Screen Demon for months and weekdays are listed below. ; These lists can be modified to support languages other than English. ; Note that each of the two lists must appear on a single line, all ; names must be specified in uppercase, and there must be a vertical ; bar character (|) following each name in each of the lists. SD_MONTH_NAMES: .TXT "JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER|" SD_WEEKDAY_NAMES: .TXT "SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|" ;Under either the Interactive COBOL or Shared Library versions ; of SCREEN DEMON, all user programs will access the same copy ; of SCREEN DEMON, causing all programs to be treated alike. ; Since there will probably be some programs that should not ; be run with full Turbo Display, for example, this ; configuration file allows "special" programs to be declared. ; In this way, programs with  special requirements will be ; automatically recognized and handled appropriately by SCREEN ; DEMON when they execute; all other programs will run normally. ; ; One of the special requirements that may be declared is Turbo ; Display level. While the majority of user programs will perform ; best with Full Turbo, there may be a few situations where ; No Turbo might need to be selected. For compatibility with ; Screen Demon rev 2.01, Partial Turbo is still available, but ; is strongly discouraged because of the performance penalty. ; ; Also, if the automatic logoff feature is enabled (see ; LOGOFF_INTERVAL above), there may be critical programs that ; shouldn't be terminated, no matter how long an operator lets ; them remain idle. These programs can be declared in the ; Special Programs list below to protect them from the automatic ; logoff handler. ; ; In rare cases, it may be appropriate to have SCREEN DEMON turn ; itself off while a particular program runs. This can be ; accomplished by declaring these programs as BYPASS in the ; Special Programs list. ; ; There may be some programs where hot keys are not desirable, ; such as a logon program. Since hot keys could allow access ; to application programs before a user had entered a name and ; password, it might be wise to disable hot keys while the ; logon program is running. This can be accomplished by declaring ; such programs as NO_HOT_KEYS in the Special Programs list. ; ; By listing a program in the Special Programs list with the LOG ; option, console event logging will automatically activate whenever ; that program is running. This eliminates the need to use SPY to ; watch for someone to run the program, and then manually start ; Logging on that console. ; ; ; Entries in the Special Programs list are lines of the form: ; Keyword programname1,programname2,...,programnameN ; ; The possible Keywords are ; PARTIAL_TURBO ; NO_TURBO ; NO_LOGOFF ; BYPASS ; LOG ; NO_HOT_KEYS ; ; There may be any number of entries in the list. A program ; can appear in more than one entry if it has more than one ; special attribute. The only restrictions are that each line ; must begin with one of the above keywords, and that the program ; names must be simple filenames without the .PR or .PD extension ; (pathnames or pathname fragments are not allowed). ; ; For example, ; BEGIN_SPECIAL_PROGRAMS ; PARTIAL_TURBO CSMNUPRT,CSOPRPRT ; NO_TURBO CSDBFM4 ; PARTIAL_TURBO CSLOGUPD ; NO_LOGOFF CSLOGUPD, CSDBFM4 ; NO_HOT_KEYS CSLOGON ; END_SPECIAL_PROGRAMS ; declares that the programs called CSMNUPRT, CSOPRPRT, and ; CSLOGUPD are to be run in Partial Turbo, while the program ; called CSDBFM4 must be run with Turbo Display completely off. ; All other programs run at the default Turbo setting, probably ; Full. In addition, the programs called CSLOGUPD and CSDBFM4 ; are immune to automatic logoff, and while the program CSLOGON ; is running, hot keys are disabled. BEGIN_SPECIAL_PROGRAMS ;This line (and the END_SPECIAL_PROGRAMS below) must ; exist even if there are no special programs defined. ;Put special program declarations here END_SPECIAL_PROGRAMS ;Titles used for the various Screen Demon pop-up functions. Note that ; control characters cannot be included in these title strings. ;Main menu - SD_MAIN_MENU: SD_MAIN_MENU_TITLE: .TXT " SCREEN DEMON Menu " ;Note: The <60> and <62> characters in the string below are `<' and `>', ; respectively. They must be expressed in numeric form because these ; are special characters for the .TXT assembler pseudo-op. SD_MAIN_MENU_FOOTER: .TXT " <60>NL<62> to select" ;Notepad - SD_NOTEPAD: SD_NOTEPAD_TITLE: .TXT " SCREEN DEMON Notepad " ;Print Screen - SDSCREENPRINT: SDSCREENPRINT_TITLE: .TXT " SCREEN DEMON Screen Print " ;Calculator - SDCALCULATOR ; There are two title lines for the calculator, each of which ; may be up to 16 characters long. SDCALCULATOR_TITLE_ONE: .TXT "SCREEN DEMON" SDCALCULATOR_TITLE_TWO: .TXT " Calculator" ;Also store these titles in PutValue space so that COBOL programs ; can get to them: PUT_VALUE SDCALCULATOR_TITLE_ONE PUT_VALUE SDCALCULATOR_TITLE_TWO ;Calendar - SDCALENDAR: SDCALENDAR_TITLE: .TXT " SCREEN DEMON Calendar " ;Also store this title in PutValue space so that COBOL programs ; can get to it: PUT_VALUE SDCALENDAR_TITLE ;Read Mail - SD_READ_MAIL: SD_READ_MAIL_TITLE: .TXT " SCREEN DEMON Read Mail " ;Input (Send) Mail - SD_INPUT_MAIL: SD_INPUT_MAIL_TITLE: .TXT " SCREEN DEMON Send Mail " ;Turbo Control - SD_COMMAND: SD_COMMAND_TITLE: .TXT " SCREEN DEMON Turbo Control " ;Request a chunk of unshared memory of a specified size in pages (2 KB) ; to be reserved for initial Screen Demon memory allocation operations. ; Screen Demon will use memory from this chunk until it is exhausted, ; and only then will it resort to a temporary shared memory file. The ; default size of 24 is sufficient for program start-up needs and the ; initial window, but not for additional pop-up windows. Note that ; excessively large values for this parameter may require that a ; larger KTOP or MTOP be declared at LINK time. This parameter can ; be set to zero to save space in the .PR file, at the expense of ; increased program start-up time. ; ; NOTE: This parameter should be set to zero for ICOBOL revision 1.60 ; and below; unpredictable errors may occur otherwise. ;Default SD_MEM initial chunk size in pages: SD_MEM_SIZE 24 ;The following section applies primarily to CEO environments, but may ; be applicable to other shared console / multiple program situations. ; ; If some of the CEO programs, such as CEO_CP, have been possessed ; with Screen Demon, but others, such as CEO_WP, have not, then special ; handling is required to keep the terminal screen up-to-date. ; In this situation, the integrated programs transfer control of the ; console between each other by means of IPC messages. Screen Demon ; will need to monitor these messages, since the console parameters ; (characteristics, etc.) may need to be reset and the screen redrawn ; when an IPC message is received from a non-Screen Demon process to ; return control of the console to a Screen Demon program. However, ; there is other IPC message traffic to/from the CEO agents, such as ; CEO_POA, that can be safely ignored, since these processes will not ; affect the console. ; ; When running in a shared console environment, such as CEO, what ; special handling, if any, needs to occur for IPC messages? ; ; Possible answers to this question are ; SHCON_IPC_IGNORE No special handling ; SHCON_IPC_FLUSH Flush to make sure screen is up-to-date ; before processing the message ; SHCON_IPC_RESET Flush before processing the message, and ; reset console environment (characteristics, ; etc.) after a message is received ; SHCON_IPC_REDRAW Same as RESET plus redraw the screen after ; a message is received ; ; The SHCON_IPC_REDRAW answer is suggested in the CEO environment as ; described above. The IGNORE response should be used if your application ; runs in a shared console environment, and uses IPC messages, but not for ; the purpose of transferring control of the console between processes. ; Screen Demon rev 3.00.03 always used the RESET option. ; ; Answer the following question with one of the above responses: SHARED_CONSOLE_IPC_HANDLING? SHCON_IPC_RESET ;Default is same as rev 3.00.03 ;If IPC messages are not ignored in this situation (i.e., the above question ; was not answered with SHCON_IPC_IGNORE), then you may wish to specify the ; names of server processes that will not affect the console. IPC traffic ; to/from these processes can be ignored. ; ; Determine the full process names for each of the processes that are to ; be ignored. A full process name consists of a username, followed by a ; colon character, followed by the simple process name. The CLI WHO command ; shows this information. For example: ; ) WHO 15 ; PID: 15 CEO_MGR CEO_POA :UTIL:CEO_DIR:CEO_POA.PR ; ^ ^ ; | | ; userna me simple process name ; ; Declare that IPC messages to/from a process are to be ignored using ; the SHCON_IPC_IGNORE_IF_FROM command. For example, the following ; is suggested if your CEO environment is as described previously: ; ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_POA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_FSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_CSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_QMA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_NSA ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_LOG ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_OP ; SHCON_IPC_IGNORE_IF_FROM CEO_MGR:CEO_GPN_1 ; ; There may be any number of these commands, but only one process name can ; be specified per command. You do not need to specify any of these commands ; if this situation does not apply to your system. ; ; Specify any processes whose IPC messages are to be ignored when running ; in a shared console environment: ;none by default ; Custom user configuration data can also be stored in this file. There ; is no limit to the amount or type of information that can be included. ; User programs can retrieve this data using the SD_GET_VALUE call. ; ; The general format of user-defined configuration options is as follows: ; ; label: ; .TXT "value" ; ; PUT_VALUE label ; ; ; where 'label' is an identifier for the data item, and 'value' is the ; actual data itself. ; ; 'label' must consist only of letters, digits, and the special characters ; underscore (_), question mark (?), period (.), and dollar sign ($). ; The first character cannot be a digit. The exact name of 'label' must ; be known to a user program in order to retrieve the 'value' using ; SD_GET_VALUE. ; ; 'value' can be any string of ASCII characters. Control characters can ; be included by enclosing their decimal value within <>. ; ; For examples, see the declarations of the SDCALCULATOR and SDCALENDAR ; title strings elsewhere in this configuration file. ; ; Include any custom configuration options here: ;The following must be the last statement in this file (except for the .END) END_CONFIGURATION .END .nlnlSD_POSSESS_ICX_1.52.PATsd_possess_icx_1.51.pat.W$O%Omi$_ SD_POSSESS_ICX_1.70.PAT ;The patches in this file activate the SCREEN DEMON routines for ICOBOL. ; ;This file applies only to revision 1.70 of the Interactive COBOL ; interpreter running under AOS/VS or AOS/VS II, using Screen Demon ; revision 3.52 %PROGRAM ;These patches modify ICX's op code dispatch table so that appropriate ; functions are routed through Screen Demon handlers. DISPATCH_OP.ZERO 0 #dispatch\ ^+1 0 [] dispatch @. SD_OP.ZERO_INTERCEPTOR\ ^+1 @. [] DISPATCH_OP.STP 0 #(dispatch+(116*2))\ ^+1 0 [] dispatch+(116*2) @. SD_OP.STP_INTERCEPTOR\ ^+1 @. [] DISPATCH_OP.CHN 0 #(dispatch+(120*2))\ ^+1 0 [] dispatch+(120*2) @. SD_OP.CHN_INTERCEPTOR\ ^+1 @. [] DISPATCH_OP.XIT 0 #(dispatch+(171*2))\ ^+1 0 [] ;This patch prevents ICX from requesting BELL line discipline when it ; calls the UNIX emulation function ioctl() during initialization. ; This in turn prevents the undesirable single-character binary read ; task from starting. set_terminal_state+243 [LCALL ioctl,0,3] [LCALL SD_ICX_IOCTL_NO_BELL_LD,1,3] ^+1 [] [] ^+1 [] [] ^+1 [] [] ;This patch diverts control through Screen Demon when ICX attempts to call ; its standard prg_run() function. This allows the name of the ICOBOL ; program about to begin (or resume) executing to be obtained. prg_run [WSAVR 14] [LJMP SD_ICX_PRG_RUN,1] ^+1 [] [] ^+1 [LDASP 0] [] ;This patch allows Screen Demon to know when ICX has an ACCEPT ; in progress, and if multiple console ?READ's are actually ; part of the same ACCEPT. accept_field [WSAVR 33] [LJMP SD_ICX_ACCEPT_FIELD,1] ^+1 [] [] ^+1 [XCALL ensure_curses_initialized,1,0] [] ^+1 [] [NOP] ^+1 [] [NOP] ;Replace ICX's character entry loop in its accept_field() function with ; more efficient Screen Demon routine. accept_field+414 [XCALL fetch_key,1,0] [LJSR SD_ICX_INPUT_FIELD,1] ^+1 [] [] ^+1 [] [] ;Replace ICX's fetch_key() function. fetch_key [WSAVR 4] [LJMP SD_ICX_FETCH_KEY,1] ^+1 [] [] ^+1 [LDASP 0] [] ;These patches allow Screen Demon to know when the external debugger process ; ICDEB has control, so that screen flushes in ICX can be inhibited. send_disconnect_event+2 [LWLDA 2,debug_msbuf,0] [LPSHJ SD_ICX_DEBUGGER_DISCONNECT,1] ^+1 [] [] ^+1 [] [] send_disconnect_event+2151 [LCALL sys_irec,0,1] [LJMP SD_ICX_DEBUGGER_?IREC,1] ^+1 [] [] ^+1 [] [] ^+1 [] [NOP] ;End of patch .W$Rb$n$_dSPY.CLI dcomment SPY.CLI Screen Demon rev 3.52.01 comment Copyright (C) 1993, Threshold, Inc., All Rights Reserved comment -------------------------------------------------------- push prompt pop searchlist [!searchlist]& [!nequal,[!path =],[!path [!edirectory [!pathname %0\%.cli]]]]& [!edirectory [!pathname %0\%.cli]]& [!end] x sd_spy %1-% pop .J ]$n$|@z CSSCREAM.PR 1pp0&0&0&00JpV02000>02000J0>0 @ppp.Rp.Rp.Rۦp|UphP~t)p|p:p:pϦp০pފފފp0pߧ)x)4)5)6Y)p I TI t <xhYpvpujpnpx@ p} {-b} {port} S C R E A M Rev 2.0 Copyright (C) 1987, Threshold, Inc., Auburn, AL All rights reserved. Re-Entering command mode Command: Slave cannot enter terminal modeUsage: S{T} filenameUse the Send command, not remote ReceiveUsage: R{T} filename %dCurrent Record size = %dNew Record size = %drCan't open macro %s Command[.]: Commands: Q - quit ! T and TQ - Terminal mode. If Q given, terminate remote SCREAM first. S{T} - Send file(s) R{T} - Receive file(s) where = @ = If 'T' is specified, then file(s) are text - so NL <-> CR,NL processing is done. X {} - With no arg, displays current block size, else sets it @ .Unknown command, type 'H' for help Re-Entering slave moderCan't open indirect file %s%31sCan't open %sSendingReceiving%s %s file '%s', %ld bytes = %d packets textdataobjectError: %d bad pkts = %d%% error, %d max trys, %ld bytes in %d:%02d = %ld bytes/sec rrwwCan't open destination %5d %2ld%% .Can't write data@consolePort openGet characteristicsSet characteristicsSet time outRestore port characteristicsWriting portReading port@consoleConsole openGet console characteristicsSet console characteristicsRestore console characteristicsWriting termWriting portReading termReading portEntering terminal mode To exit, press CTRL-SHIFT-F8mtask (Port2Term)%s: Unknown error code of %d%s: %sCHAIN :CLI PREFIX SCREAM:@AAā@ A΁@ ˁ @ AAځ@߁@AՁ@AAЁ@01A32@67@54A<=@?>A:;A98@()@+*A./A-,@$%A'&@"#@! A`aAcb@fg@edAlm@onAjkAih@xy@{zA~A}|@tuAwv@rs@qpAPQ@SRAVWAUT@\]A_^@Z[@YXAHIAKJ@NO@MLADE@GFABCAA@@:CLI.PR0x0X0 pENDFILEENDPAGEKEY UNDEFINEDFILELOCKSYSERRORDBERRORDBENDSETDBKEY  ESTEDT !"""" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   p?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~class(1,2) abort;@NULL@OUTPUT@INPUT@ 0123456789abcdef0123456789ABCDEF@(#) AOS/VS C release 04.00.00.00.???????????????????????????????????$?????????.:0123456789:??????ABCDEFGHIJKLMNOPQRSTUVWXYZ????_?abcdefghijklmnopqrstuvwxyz????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@PDQLNKOYCECJMLLKKJBhVSUABdC>D'EjE$FG_^H;I%@@JHvJԥK*LZz@M8LhN#o@N#o[N[h)CvO? BS}u)pMܦpm6p ypm6pMpm6)yp)YpN$pm6pN y O8 􁉁8 8YypN&y y & 􀹁)p6p6YY)cypJpFxpC. +)  ypN.8)yp )ypz@ )ypz@)pJfpOFpPp~pn) pn9pnpn) yptMYyp!X ln~) )ypz@NpmpOpJfpDxpDypx~ yp@p)AIp@p )ypz@pnNpm6NpmpnNpm6)pnV) x) )ypɂ Cp6NpG8 < Y)ypɂQpOY)YypJpQ  Y)ypɂTxY))pO ) 8 ) xNڦpG8x  yypGd ׃p6NpG8  Y)ypɂTxY))pO ) 8 ) xpnOpm6   yypKpF {p6 YypGa8 yppSx YypT TpBV Yp8O0ypYp8yO4pcFpG8p8p8)p8p8yONpcFpG8  YOdypkpD YyOfpcFpG8xpD) ypmV) yp8) ypY9pnOzpm6 ypG8 y ~JxpDypx~YpD pO YypKDpF OpmOpmOpmOpmOpmOpmPpmPBpmPrpmPpmPʦpmPpmQ2pmQJpmQpmQpmQpm8QpG8CTm) )ypz@R pmpJfYY)cypJ yp@p)EIp6p@p )ypz@pnRpm6RpmYpFYypLw ؞))pMYpF y)pGd)YypJYypL-YY)cypJ )pN YpF)pCoY)YypJYypL-YY)cypJ YYYypJ) ))pM y)pH8)pMp:p68YYYypJ)cypL- pF 8p~pn)@pn9pnpn)@yptMpmpFYYpFypJpFYypK ) ypmp6pFpF YyypJpFpFypL-)) )@8R4 ypk yR6pcFpG8) RR ypYf8 y) ) 4 ypx~x)= ypY 9 Y y y    y ) ypIp< yRXpcFpG8   ypHpJf)   ypJ   yRh Yp8p: p8p: Y yypKn ypL-xpK8 p:8 ypL-)pMp:8 Y y p:)Yp:  y yRp a  y sY ypL@p8p:YY ypJ ypMjp:8 8 ypMjp: ypJ y  y Op:)Yyp~tpH xRx xR8Rp8p8ypJ  y  yRzpcYpNpL) 􅉋p8i IYyp~tXpHpHpH)pHpH)p8p8p28SʦpX:p)Yp))y) Yp))ΉpypS))XpɃpɃYpIp̃p̄pIpσpσpS؄pԃpԄpIpփpքpƉp䆉p)pppTBpȦpTBSpX:pptƉpypT)SpX:p) 44ypƉp~Yp~ƉႩƉpzƉpypT`T pX:pƉ ~&)pvY 8ptƉpypT`T(pX:pYpvppSpȦpSƉ })    I9 ypT8 pxTH8TVypX:)  I9  Y 9 ypTQ x >8  8 2x Չ8 pxTd8TrypX: )))p  8 y)pȎ d8) ~< )ypz@)TpmTpm )ypz@ Y ~!x) 8Y))y yp98TpX:))) 89Y)yyp "  899YY)   ) )()  ))X 8  yp ~x 8p  8 ~8 )ypz@)Y)I) ) ypV)ΉyypTxY ))p:p))))2 ypTx  yTpcF9Y9) yTpcF)TpT)  9  9) ) Y)i)  9X   9X  9) )  )i  )i )Y X򁹋 ) y Iyp*y 9։A%Y)YY Y)   Y)   Ɂ쇩Y)   ?Y)    8)Y)Y Y)Y €Y)   8)Y)   Y)Y À)YƂI9@) x 􀹂) ypo Y    Y X )   9    )9¹x   )8 ) yypt7y ) yypt7yy8 8 )iypr X) 򁹁x xY yYppvp> x 􀹂) ypo Y   xX )ypq*x 9Y  X )iypr )pp6pp6 pippMp> x 􀹂) ypoYp<  y Yiщ):)()) yp 9(I) 9 Y ypY(Yp<  y Yi Y ԹII Y yyyyi  Yy9(yyi   Y yyyyi ) 9p yyppippr)YY YΉY   Yy8YY9Y) yIppv 𴹕 y ypZ )iypr ) 𴹕9 )@x yyip> x 􀹂) ypoY&p< & y Yi )  ypZ[xRNLJJ>$5'%A)Ippp 򴹕pN y pVi8pNpr )w   8X)Yypq*xIY,p> x ) ypoy" ")"@  0   xX)Yx ,й   , p>8   8X)Yypq*yp>8 8 ypq*x p>9 Y999)9I)9 ")",) ")" *9 ")" p>)ix " IyIIII )9 Y)p>))"@X 晓y љi ") "Y"  lx)9 ") "I"h ~h8)9 ") "I"l  ~ @Z  p>i) ) I   9 8X)Yypq*yp>9 )I8 x r 晓y p> x)ypoy) )K 晓y )Yxp> )yypoyp> x)ypny 6) p>I @ ) ~  ~I)Iy. , ", " } 8 8I)  Y 9Ă 8  9Y  8X)Yypq*X  } }) 8 8I)  Y) ) )9Ȫ 8  9Y  8X)Yypq*yp>9 X x)ƌI8 8) }>Y 9 }8Y&$) ) 5 I-YiI9   X)Y ypq*yX  1yp>9 0Y9   8X)Yypq*X  yp>9  x   X )8 ypq*yp>9 )9 Y))9 Y&$) I I-YiI9   8X)Yypq*X  yp>9 8) i ) x)IYI9) i  ) x  8X)Yypq*yyp>9 ) 8xx $IyIIIX$x $Ź$x &IyIII ʉI&X 8) i8 x ) x &$) $i$) {) 8 $I9 {) $ { $ {Y$) )x I-YiI9   X ) Yx ypq*yX x )   08   8X)Yypq*X  x8   X )8 ypq*X x  /98Ј@F8ɂx`f $I$    8X)Yypq*X ) $i$) z) 8 $I9 z) $ z $ zz)9()) I I-YiI9   8X)Yypq*yp>9 X x )    /9Є(9y֠h9( x.8 xY8Y  8X)Yypq*X  8Y  e    xX)Y ypq*yp>9 X  Y9) )8 I-YiI9   8X)Yypq*yyp>9 X xY) )x) i IyIII   8X)Yypq*yp>9 X 8) x i   ( *ypc:9() 8(9() y2) (9 y&() y ")"I^YiI9 8 ")"9`)9I )9YYƙ8 ) IYI9 9]8-8Y9`I9 ")" ]x x "Y- ")]x ")Y)܆)Y9`Ič9 Y ")8 މ8)܆ Y9`I9 ") " ]x X" Y9`I) )   9 8  9Y  8X)Yypq*X Y9`I) 8)) xY 9 x )  9 8X)Yypq*) p>I8     8X)Yypq* w 8 )xX8 8I ) pB) 𴹕9 )@x`yyip> x 􀹂) ypo)  ypcY 9cxB"a)Ips^ 򴹕pn y pvi8pnpr )np> x 􀹂) ypoY2$& )% 2й &  2x&   X Y 9   9ʹ8  x ) Y8 ) yypt78 ypt7yxI   Y$ y  $i8)Y$$ _   $Y$ L$ H) 9 9IY 9 99999 )Y$8x-8+8 ) +8I9 8#80xI9 )YY Ι   IyIII)Y9)Ι y II  . @8*  IIy  8.8) ) Y i  l ) Y8hx ) Y  ixdox8u y *,) xI* ,Y,8qxs 晓y p> x)ypoy Y9 9  X 9 )() xxZ8ZY9 9X y y0 9) 9,)() Z 8 *8)-9 i,) ( xx|8 8 ,8Y99 ) 9 v ,  (Yѩ8ȩYiy )9  (Y҉Yiyy8 x ,  )09Y 8) ' (  ) x X 9 )0 )09Y Y9 9X y X 9 ܁Y9 9 X$Y  Y9 9 ҉։)Y   Y ) 晓y9.h8)-9 (9.) g8GY  y)n . 0yypz9n  ) Y)Y 8 ) x ).XI)Iy4 2 2  |X 晓y y" &p> йx)ypny  {X) ) X 9Y9 ) 9X)$ 99 +) x&   8XY)$ 9x x )$9)߉8  x ) Y8 ) yypt78)$ypt7xIX $) &   8 X) 9    ) 98  x ) Y ) yypt7 ) ypt7xIX $ )   ĈxX )Y ¥9x x  )9¹8  x ) Y8 ) yypt7y )yypt7yyxIX $ ) ) X x&   ʈX) Y ȥ9  ) 9¹8  x ) Y8 ) yypt78) ypt7xI$ Xx)  &    Y ҈xX )  ЪY Х9 J  )9 2   Ѝ99ʹ8  x ) Yx ) yypt7x yypt7xI  8 xY$ x $i8)Y$$88x $Y$ $Y$   B) yd X yU&   ڈX) Y إ9  ) 9¹8  x ) Y8 ) yypt78) ypt7xI$ Xx x)) ypkxY  yp* I9 xY9 9)yypvY 9 9p>  )) ypkyйxY I9 )yypvY 9 9p>  axS{~uҧ)p( 8pv) 􀹀 ͍)YX )  )b Y )+)  Y8)4 )b Y ))8))򳸁Y )b Y )+) Y8)3 )b Yx))8)) )b Y )+) Y8)4 )b Yx) ) 8"pxY 8pl8"JpxY9)@Z0yyi  )9 I9 )@9yyi ) )W뙁xiy 8Y)\)@y]y8)@yyIi \) yIpsj  Ipt )iyprY) p> x 􀹂) ypo Y 9  yYppv   xX )ypq* 9Y  8  )iyprY 9 x xY )YIps^pn Ipt΃ppnXpYpn) 9p~p) 9)爫pxppn)pnYpn8pn)pnypt7pn pt78Ipvi8pnpr ) Ipppp`pNXph)YpN8pNpq* 9YpVi8pNprY 9 x xY )) yIpsj) ypnIY )iypr )Y X828)y 8 x 򩉃x) p-8 x 򩉂x)yprI )8 x) I& y  )﹃8ypu) ™  xY  8)©  )i ) I& Yy)   YyxI      )Y )   Yy0xI           )  yyp) ʙI8 1x xY  I  ypr )     ZVcyypNx8yy  xy) x yy ) Xȉyȉ1h ƹ癣yIyy xi ߹Ɖ"C8Ɖ" yi@9Ɖ"By) )yZ yYypv)yyyyyiy))9 Y ) ))9 ) YY) )x) YII,I) 9 ) yx 8)YX8Y) ) y'mb1y)ۉx ) )pʒy pʇxy y )IY)9Y )Yʙ)Ii) X)2pG   yp љx *). 8"CpII * i 8 ypJ I&  yй8"CpI ;pF   ypyi9) yyi  )yx)Ϲx9)9Z(yyi  y)pF8  򱉁щ89)  ))) )i8)y xp68yp6  )x  8 ))i8) ) xI ) I&  ypJ I& xI )JxI) YyI ix@ I9JHryypnyypxyy  y)  yy ) V ȉyȉ ƹx Xyy0i) yV0i ߹Ɖ"C8Ɖ" yi@9Ɖ"Bxy) )yW y)y+)yy yyyiy))9 ) )9 )  )) YYx) )$x) YII I 9YX) x 詊x ㉢x8 8)  x)کy)ۉx ) )U7Ux.8iI)ʙ  ) i Uiy +yy   YI)yI 8iyy CxIiy) T㇩) )8 ) I& Yx)x XY 8) i)yyp) ©) )) )))8))) Y p( pN )x18h8 xypn   x) X ) I& y) x Y  ԹIIy  )   y yp y  XY  yyyyi) p( )p(p(p.p,xyp  p(p0xp0p( p,8p. p.p, p.8p, p,p. йxY XY) I&  ypJ I&  xI )yx))K8x)h  ) 28)Y IYI8)™)i  )yypf ) ʙI ) I&   y)i Y  )   Yy0 ) ™I pp.)™p, pN8p(p0 pn8p,p. yp 8 )8)™I9 )  ))x pIi Ɖ"C8Ɖ" iy) )yQ YiC?TRAP) _Ɖnpyщ 8"~vcщ8 hщ8 щ npyP Error from within SIGNAL@CONSOLE)Yypد ix Ipyx xpi  ʹʩIp&)8Iۂ)i p& xpظه ܇yy IƉ"@yp8)IY ( : 88YI :)S 0nI9mΉ)u)T)p͊   *)SYN( )-xpyщ8 >)Ip&)8Iۂ) 4I YYY )y 4 4)xɂi) )療 Hp&9 gn)uΉ񪙆)T)p͊ )YCIp&999 )9P Ippyxɤ 뒹IYp  0 0p8ЇYyp&l8pyYy .ЉO YYU(D(  鉁x (P h)YN(B(yI)IyyYY( y9Ip&IY y 0ʩ  IS( YI y)I 0 08YY8 0x\xyy YYYY癓 P y 癁Y) yy Y)  J.)pyΉ18։"YIYeIΉi8)xiCN) Ip"YpدyIyp 2~yy p癧)po "։Y癧)) "yyp)|-ppoY)g)Xp YI 896։?xY։Ȃ9V։ȁY$Aborted with a memory dump of format: ?.