Trailing-Edge
-
PDP-10 Archives
-
BB-JF18A-BM
-
sources/diu/diu.r36
There are 4 other files named diu.r36 in the archive. Click here to see a list.
%TITLE 'DIU.R36 - DIU Program Wide Definitions'
! COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1986.
! ALL RIGHTS RESERVED.
!
! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND
! COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH
! THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR
! ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE
! AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE
! SOFTWARE IS HEREBY TRANSFERRED.
!
! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
! NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
! EQUIPMENT CORPORATION.
!
! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF
! ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.
!
! FACILITY: DIU Data Interchange Utility
!
! ENVIRONMENT: TOPS-20 V6.1 or TOPS-10 V7.02
! XPORT V4.0
! BLISS-32 V4.0
!
! ABSTRACT: This file contains various literal, macro and data structure
! declarations used throughout the DIU system.
! HISTORY:
!
! 267 Add DIU$_KEY_OPTIONS_INVALID.
! Sandy Clemens 10-Jul-86
!
! 252 In DIU.R36: Remove library of CONDIT and add condition handing stuff.
! Sandy Clemens 1-Jul-86
!
! 241 In DIU.REQ, add DIU$_PAR_INFO for the new signal in DEFINE_DTYPE.
! Sandy Clemens 20-Jun-86
!
! 206 Add message DIU$_INVALID_RFM.
! Gregory A. Scott 27-May-86
!
! 172 Change $TRACE to do a call to S$TRACE to type its strings. (Note:
! S$TRACE will have to be added to DIUT10 later.)
! Gregory A. Scott 20-May-86
!
! 164 Remove $APPEND_FAO and $PUT_FAO from here.
! Gregory A. Scott 16-May-86
!
! 162 Change DIU$_USAGE_CONFLICT message so that is doesn't mention
! the now non-existent /USAGE switch.
! Sandy Clemens 14-May-86
!
! 160 Add DIU$_DAMAGED and DIU$_ANOTHER_VERSION.
! Gregory A. Scott 14-May-86
!
! 156 Remove unused DIU$G_SNAPSHOT, DIU$G_INITIATED, DIU$G_TRANSFER_START,
! DIU$G_TOTAL_XFER, DIU$G_CURR_XFER, DIU$B_SOURCE_USAGE_TYP,
! DIU$B_DEST_USAGE_TYP, DIU$H_TRIES, DIU$V_CHECKPOINT,
! DIU$V_MATCH_EITHER, DIU$V_DEFER, DIU$G_MAXTIME, DIU$G_REQUEUE_INTERVAL,
! DIU$G_STATUS_DELTA, DIU$V_CONVERSION, DIU$V_BLOCK_MODE,
! DIU$H_TOTAL_FILES, DIU$H_STATUS, DIU$G_TOTAL_WARNINGS, DIU$G_WARNINGS,
! DIU$G_REQUEUE_ERROR, DIU$G_FILE_SIZE, DIU$B_INPUT_OS, DIU$B_OUTPUT_OS,
! DIU$H_CURRENT_INPUT, DIU$H_CURRENT_OUTPUT, DIU$T_CURRENT_INPUT,
! DIU$T_CURRENT_OUTPUT.
! Gregory A. Scott 13-May-86
!
! 155 Add DIU$_IMAGE_INVALID message for /IMAGE specified for non-TOPS-20 or
! non-TOPS-10 file.
! Sandy Clemens 12-May-86
!
! 154 Add DIU$_REQUEUE_COUNT message, delete DIU$_NOT_DISK, DIU$_NEED_USAGE,
! DIU$_CHECKPOINT, DIU$_INVALID_ATTRIBUTES, DIU$_WILDCARD_NOT_ALLOWED.
! Gregory A. Scott 12-May-86
!
! 153 Remove DIU$_SRCDESMIS. The command parser tells the user of the
! missing source description so we don't have to signal it later.
! Sandy Clemens 12-May-86
!
! 152 Add DIU$_ILLEGAL_USER_LOG, DIU$_INIT_QUEUE, DIU$_REQ_CREATED,
! DIU$_SLAVE_ABNORMAL, DIU$_REQUEUE, DIU$_REQ_TIME_OUT, delete DIU$_HOLD.
! Gregory A. Scott 11-May-86
!
! 146 Add the following: DIU$_PREREQ_NOT_YOURS, DIU$_PREREQ_NON_EXIST,
! DIU$_PREREQ_LOOP, rename/modify DIU$_INVALID_DEPENDENCY to be
! DIU$_INVALID_PREREQ, rename/modify DIU$_NO_DEPENDENT to be
! DIU$_NO_PREREQ.
! Gregory A. Scott 7-May-86
!
! 145 Add message DIU$_RSZ_INVALID.
! Sandy Clemens 7-May-86
!
! 135 Remove DIU$$message macros since they are just so much baggage, and now
! the text string are in DIUDO. Add DIU$_CONNECTED_TO and
! DIU$_MAXIMUM_REQ_SET messages.
! Gregory A. Scott 1-May-86
!
! 133 Add message DIU$_SHUTDOWN_ABORTED.
! Gregory A. Scott 30-Apr-86
!
! 132 Add messages DIU$_PANIC_ILL_INST, DIU$_PANIC_ILL_READ, and
! DIU$_PANIC_ILL_WRIT, DIU$_SPOOLER_ABORTED.
! Gregory A. Scott 24-Apr-86
!
! 131 Change $TRACE and $TRACE_FAO to be conditional assembly based on the
! DEBUG switch, and remove refereced to diudbg.
! Gregory A. Scott 24-Apr-86
!
! 125 Add DIU$_SPOOLER_RESTARTED message, comment out the *_TOO_LONG and
! *_FILESPEC_MISSING errors since they are never used anywhere.
! Reorganize the various macro defs to make a little easier reading.
! Remove diu$$version macro since it was (1) wrong and (2) never used.
! $GET_FAO and $MSG_FAO shouldn't add an extra CRLF to the control
! string.
! Gregory A. Scott 24-Apr-86
!
! 122 Remove DIU$_NOT_MY_JOB_SENOR and DIU$_SYSTEM_FULL errors.
! Gregory A. Scott 17-Apr-86
!
! 117 Remove storage not used: DIU$H_COMMAND, DIU$T_COMMAND. Remove
! $STR_DESC_INIT of fao_rec in $APPEND_FAO so that more than one of them
! can be used at a time.
! Gregory A. Scott 17-Apr-86
!
! 116 Remove DIU$_NO_MESSAGE_PENDING.
! Gregory A. Scott 14-Apr-86
!
! 113 Remove error codes that have been replaced with parser error messages:
! DIU$_ARG_RANGE, DIU$_TOOMANY_KEYSEGS, DIU$_TOOMANY_KEYS,
! DIU$_INV_KEY_OPTION. Remove unreferenced literal DIU$K_ACCESS_PROMPT.
! Gregory A. Scott 7-Apr-86
!
! 75 Add new error codes for /KEY: parsing. Change /KEY: action routine so
! that the key command text is saved in a buffer in the REQBLK.
! Sandy Clemens 19-Mar-86
!
! V01-041 Sandy Clemens 10-Oct-85
! Implement PUSH, SPAWN and EXECUTE commands. New error
! message for PUSH/SPAWN.
!
! V01-01 DPR0001 Doug Rayner 14-Aug-85
! Minor modification for TOPS-10. Additional error messages.
! LINKAGE declaration for GLXLIB routines. PSOUT => OUTSTR in
! $TRACE macro definition. Modify text string definitions of
! system banner and version.
!
! V01-00 RDF0001 Rick Fricchione 30-Aug-1984
! Original version of DIU.R36. Convert over needed items
! from FTS.R36 and DIU.SDL.
!
! DIU Edit 2 Sandy Clemens 11-Jun-85
! Change 'FATAL' in MACRO $DIU$ERRORS to 'SEVERE' (sts$k_fatal
! is not defined).
!
! DIU Edit 10 Sandy Clemens 20-Jun-85
! Add FAO directive to DIU$_INVFLDDSC error condition.
!
! DIU Edit 11 Sandy Clemens 26-Jun-85
! Remove error table definition from ERROR.B36 and put it into
! DIU.R36 for the general world to use. Add DIU$CONVERR error
! to DIU.R36.
!
! DIU Edit 16 Andy Nourse 26-Jun-85
! Fix size of USERNAME and CONNECTED_DIRECTORY fields.
! (RDF had changed them to conform to VMS, not TOPS-20).
! Also add comments for XDUMP.
!
! DIU Edit 17 Sandy Clemens 16-Jul-85
! Make DIU$_INVDATTYP and DIU$_INVTYPSYS give the data
! type code which is invalid. FILES: DIUMAP.BLI, DIU.R36.
!
! DIU Edit 24 Andy Nourse 19-Jul-85
! Add DIU$_SRCDESMIS, Put FAO directive in DIU$_TEXT.
!
! DIU edit 25 Charlotte Richardson 2-Aug-85
! Add PAT parser error signalling, DIU$_PATPAR.
!
! 46 Remove /NOTIFY:FAILURE code.
! Sandy Clemens 4-Nov-85
!
! 64 Teach DIU about the signal codes DIU$_PARTRA and DIU$_PARDES.
! Sandy Clemens 15-Jan-86
!
! 65 New error codes.
! Sandy Clemens 12-Feb-86
!
! 70 New error codes.
! Sandy Clemens 25-Feb-86
!
! 73 Make all /WARNINGS and /USAGE information be stored in the REQBLK
! structure.
! Sandy Clemens 4-Mar-86
!--
LIBRARY 'BLI:XPORT';
LIBRARY 'RMS:RMSINT';
! Condition handling stuff
LITERAL
STS$K_NORMAL = 1,
STS$K_SUCCESS = 1,
STS$K_ERROR = 2,
STS$K_INFO = 3,
STS$K_FATAL = 4,
STS$K_SEVERE = 4,
STS$K_WARNING = 0;
LITERAL
SS$_NORMAL = STS$K_NORMAL,
SS$_ERROR = STS$K_ERROR,
SS$_FATAL = STS$K_FATAL,
SS$_WARNING = STS$K_WARNING;
LITERAL STS$K_RESIGNAL=0,
SS$_RESIGNAL=0,
STS$K_CONTINUE=1,
SS$_CONTINUE=1;
EXTERNAL LITERAL SS$UNW;
MACRO STS$K_UNWIND=SS$UNW %;
MACRO SS$_UNWIND=SS$UNW %;
! Request Block Definitions:
MACRO
lh = 18,18,0%,
rh = 0,18,0%;
LITERAL
DIU$K_MAX_TAGS = 100,
DIU$K_FAB_BKS = 1,
DIU$K_FAB_BLS = 2,
DIU$K_FAB_DEQ = 3,
DIU$K_FAB_DEV = 4,
DIU$K_FAB_FOP = 5,
DIU$K_FAB_FSZ = 6,
DIU$K_FAB_GBC = 7,
DIU$K_FAB_MRN = 8,
DIU$K_FAB_ORG = 9,
DIU$K_FAB_RAT = 10,
DIU$K_FAB_RFM = 11,
DIU$K_FAB_RTV = 12,
DIU$K_FAB_SDC = 13,
DIU$K_FAB_SHR = 14,
DIU$K_FAB_MRS = 15,
DIU$K_FAB_FAC = 16,
DIU$K_FAB_BSZ = 17,
! RMS RAB tag codes, to be used in logic for building RAB's
! at run time
DIU$K_RAB_RAC = 25,
DIU$K_RAB_ROP = 26,
DIU$K_RAB_RSZ = 27,
!* RMS RAB tag codes for use (base of 25)
DIU$K_XAB_ALQ = 51,
DIU$K_XAB_AOP = 52,
DIU$K_XAB_BKZ = 53,
DIU$K_XAB_DEQ = 54,
DIU$K_XAB_FLG = 55,
!* RMS XAB tag codes for use (base of 50)
DIU$K_DIU_ACCESS = 75,
DIU$K_DIU_ACCOUNT = 76,
DIU$K_DIU_PASSWORD = 77,
DIU$K_DIU_USER = 78,
DIU$K_DIU_DESCRIPTION = 79,
DIU$K_DIU_FILE_DATATYPE = 80;
!* DIU tag codes, to be used with base of 75
MACRO $DIU_BLOCK = BLOCK[DIU$K_LEN] FIELD(DIU$$REQUEST_FIELDS) %;
MACRO $ETG = %C'|'%; !m27
MACRO $NUL = %CHAR(0)%;
MACRO PROMPT_CHARACTER = '*'%;
MACRO PROMPT_STRING = '*'%;
LITERAL
DIU$K_NORMAL_FILE_SIZE = 100, ! 200 less than NAM$K_MAXRSS
DIU$K_FILE_BUFFER_MAX = 200, ! Size of filespec buffers
DIU$K_FILESPEC_MAXIMUM_LENGTH = 200, ! Characters in a filespec
DIU$K_NODE_NAME_LENGTH = 6, ! Characters in a node name
DIU$K_MAX_MJOB = 8, ! Max simultaneous transfers
DIU$K_NODESIZE = 6; ! Length of nodename
!
! DEF$ - Default block
! ^ Name used by XDUMP for block dump routine
!
$FIELD def_fields =
SET
def$a_nxt = [$ADDRESS], ! Address of next DEF
def$d_node = [$DESCRIPTOR(DYNAMIC)], ! Node name plus null
def$d_user = [$DESCRIPTOR(DYNAMIC)], ! User id for ACS
def$d_password = [$DESCRIPTOR(DYNAMIC)], ! Password for ACS
def$d_account = [$DESCRIPTOR(DYNAMIC)], ! Account for ACS
def$b_notify = [$BYTES(1)], ! Notify options
def$b_defer = [$BYTES(1)], ! Defer options
def$b_tries = [$BYTES(1)], ! Tries max
def$d_log = [$DESCRIPTOR(DYNAMIC)], ! Log file name
def$g_maxtime = [$INTEGER], ! Max elapsed time
def$g_requeue_interval = [$INTEGER], ! Requeue delta
def$g_status_delta = [$INTEGER] ! Status delta
TES;
!
! End of DEF$
! (Above comment used by XDUMP)
!
LITERAL def$k_bln = $FIELD_SET_SIZE,
def$k_end = 255;
MACRO $DEF_DECL = BLOCK[def$k_bln] FIELD (def_fields) %;
!
! DIU request block definition
!
LITERAL
DIU$K_VERSION = 3; ! Version no. of request block format
! IMPORTANT!! Update each time you
! change DIU$$REQUEST_FIELDS
LITERAL
%IF %SWITCHES(TOPS20)
%THEN
DIU$K_TOPS20_DIRECTORY_SIZE = 6 + 1 + RMS$K_USERID_SIZE + 2; !m16
%FI
%IF %SWITCHES(TOPS10)
%THEN
DIU$K_TOPS10_SEARCH_LIST_SIZE = (5 + 1) * 10 + 1;
! Max of ten (five char str names + ",") as ASCIZ string
%FI
!
! DIU$ -- Request block field definitions
! ^ This name is used by XDUMP for request block dump routine (debugging)
!
$FIELD
DIU$$REQUEST_FIELDS =
SET
! Request Accounting information
DIU$H_LENGTH = [$SHORT_INTEGER], ! Size of block
DIU$H_VERSION = [$SHORT_INTEGER], ! Version no.
DIU$H_NEXT_RECORD = [$SHORT_INTEGER], ! Record # of next
DIU$H_PREV_RECORD = [$SHORT_INTEGER], ! Record # of previous
! Global request information
DIU$H_REQUEST_ID = [$SHORT_INTEGER], ! Binary request ID number
DIU$H_FUNCTION = [$SHORT_INTEGER], ! COPY,APPEND,etc
DIU$H_JOBNAME = [$SHORT_INTEGER], ! Size of jobname
DIU$T_JOBNAME = [$STRING(6)], ! Six-character job name
DIU$G_CREATION = [$INTEGER], ! Date-time of creation
DIU$G_CTX = [$INTEGER], ! Supplied by user
DIU$H_OPTIONS = [$BITS(16)], ! Global options
$OVERLAY(DIU$H_OPTIONS)
DIU$Z_NOTIFY = [$BITS(3)], ! /NOTIFY bits
DIU$V_ACTIVE = [$BIT], ! Request is active
DIU$V_HOLDING = [$BIT], ! Request is being held
DIU$V_DELETED = [$BIT], ! Request has been deleted
DIU$V_SEQ_CONTINUE = [$BIT], ! Continue sequence in spite of
DIU$Z_LIST_LEVEL = [$BITS(2)], ! Level of directory listing
$CONTINUE
$OVERLAY(DIU$Z_NOTIFY)
DIU$V_NOTIFY_TERMINAL = [$BIT], ! /NOTIFY:TERMINAL
DIU$V_NOTIFY_MAIL = [$BIT], ! /NOTIFY:MAIL
DIU$V_NOTIFY_IPCF = [$BIT], ! /NOTIFY:IPCF
$CONTINUE
DIU$H_TERMINAL = [$SHORT_INTEGER], ! Terminal id
DIU$H_JOB_NUMBER = [$SHORT_INTEGER],
DIU$G_NOTIFY_PID = [$INTEGER],
DIU$H_ACCOUNT = [$SHORT_INTEGER],
DIU$T_ACCOUNT = [$STRING(RMS$K_ACCOUNT_SIZE)],
DIU$G_USER_NUMBER = [$INTEGER],
DIU$H_USERNAME = [$SHORT_INTEGER],
DIU$T_USERNAME = [$STRING(RMS$K_USERID_SIZE)],
DIU$G_CAPABILITIES = [$INTEGER],
$ALIGN (FULLWORD)
DIU$T_KEY_SWITCH = [$STRING(256)], ! Key switch info
DIU$H_KEY_SWITCH = [$SHORT_INTEGER],
DIU$H_CONNECTED_DIRECTORY = [$SHORT_INTEGER],
%IF %SWITCHES(TOPS20)
%THEN
DIU$T_CONNECTED_DIRECTORY = [$STRING(DIU$K_TOPS20_DIRECTORY_SIZE)],
%ELSE
DIU$T_CONNECTED_DIRECTORY = [$STRING(DIU$K_TOPS10_SEARCH_LIST_SIZE)],
%FI
! Processing options
DIU$B_PRIORITY = [$BYTE],
DIU$H_WARNING_MAX = [$SHORT_INTEGER],
DIU$H_PREREQUISITE_ID = [$SHORT_INTEGER],
DIU$H_DEPENDENT_ID = [$SHORT_INTEGER],
DIU$G_AFTER = [$INTEGER],
DIU$G_DEADLINE = [$INTEGER],
DIU$H_LOG_FILESPEC = [$SHORT_INTEGER],
DIU$T_LOG_FILESPEC = [$STRING(DIU$K_NORMAL_FILE_SIZE)],
DIU$H_TRANSFORM = [$SHORT_INTEGER],
DIU$T_TRANSFORM = [$STRING(DIU$K_NORMAL_FILE_SIZE)],
! Current request state
DIU$G_REQUEUE_COUNT = [$INTEGER], ! Tries so far
! Source filespec buffer
DIU$H_SOURCE_DESCRIPTION = [$SHORT_INTEGER],
DIU$T_SOURCE_DESCRIPTION = [$STRING(DIU$K_NORMAL_FILE_SIZE)],
DIU$H_SOURCE_FILESPEC = [$SHORT_INTEGER],
DIU$T_SOURCE_FILESPEC = [$STRING(DIU$K_FILESPEC_MAXIMUM_LENGTH)],
! Destination filespec buffer
DIU$H_DESTINATION_DESCRIPTION = [$SHORT_INTEGER],
DIU$T_DESTINATION_DESCRIPTION = [$STRING(DIU$K_NORMAL_FILE_SIZE)],
DIU$H_DESTINATION_FILESPEC = [$SHORT_INTEGER],
DIU$T_DESTINATION_FILESPEC = [$STRING(DIU$K_FILESPEC_MAXIMUM_LENGTH)]
TES;
!
! End of DIU$ -- Request block
! (Above comment is read by XDUMP)
!
LITERAL
DIU$K_SIZE = $FIELD_SET_SIZE,
DIU$K_LEN = $FIELD_SET_SIZE,
DIU$K_CHAR_COUNT = %BLISS36 ( 5* ) DIU$K_LEN;
LITERAL
DIU$K_COPY = 1,
DIU$K_APPEND = 2,
DIU$K_DELETE = 3,
DIU$K_RENAME = 4,
DIU$K_PRINT = 5,
DIU$K_SUBMIT = 6,
DIU$K_DIRECTORY = 7,
DIU$K_MIN_FUNCTION = 1,
DIU$K_MAX_FUNCTION = 7;
! Directory listing level (/BRIEF, /FULL, /LIST):
LITERAL
DIU$K_LIST_NONE = 0,
DIU$K_LIST_BRIEF = 1,
DIU$K_LIST_NORMAL = 2,
DIU$K_LIST_FULL = 3,
DIU$K_LIST_NAME_ONLY = 5; ! Used internally
! /QUEUE switch values: check DIUSHD.R36 whenever you change these.
LITERAL
DIU$K_NO_QUEUE = 0,
DIU$K_QUEUE = 1,
DIU$K_MAYBE_QUEUE = 2;
! Interprocess message codes
$LITERAL
DIUQ$K_ENTER = $DISTINCT, ! Enter a request in the queue
DIUQ$K_DELETE = $DISTINCT, ! Delete a request
DIUQ$K_FIND = $DISTINCT, ! Find a request or requests
DIUQ$K_MODIFY = $DISTINCT, ! Modify a request
DIUQ$K_LOG = $DISTINCT, ! Place text in log file
DIUQ$K_STATUS = $DISTINCT, ! Report status of a request
DIUQ$K_ACK = $DISTINCT, ! Acknowledgement message
DIUQ$K_NACK = $DISTINCT, ! Negative acknowledgement
DIUQ$K_CONNECT_ME = $DISTINCT; ! Connect me (slave) to a directory
! DIUQBK - Interprocess queue manipulation messages
$FIELD
DIUQ$$MESSAGE_FIELDS =
SET
DIUQ$B_FUNCTION = [$BYTE],
DIUQ$B_ITEM_CODE = [$BYTE],
DIUQ$H_LENGTH = [$SHORT_INTEGER],
DIUQ$G_COMP_CODE = [$INTEGER],
$OVERLAY (DIUQ$G_COMP_CODE)
DIUQ$G_REQ_ID = [$INTEGER], ! For MODIFY and DELETE
$CONTINUE
DIUQ$G_NEW_VALUE = [$INTEGER], ! For MODIFY only
$OVERLAY (DIUQ$G_NEW_VALUE)
DIUQ$G_2ND_CODE = [$INTEGER], ! For STATUS and ACK/NACK only
$CONTINUE
DIUQ$H_SEQUENCE_NUMBER = [$SHORT_INTEGER],
DIUQ$H_SENDER_JOB = [$SHORT_INTEGER],
DIUQ$Z_REQ_BLOCK = [$SUB_BLOCK (DIU$K_LEN)],
$OVERLAY (DIUQ$Z_REQ_BLOCK) ! For STATUS and CONNECT msgs
DIUQ$G_JOB_HANDLE = [$INTEGER],
DIUQ$H_STATUS_TEXT = [$SHORT_INTEGER],
DIUQ$T_STATUS_TEXT = [$STRING (255)],
$CONTINUE
DIUQ$G_CTX = [$INTEGER]
TES;
!
! End of DIUQBK
!
! The message cannot be larger than one page
!
%IF $FIELD_SET_SIZE GTR 512
%THEN %ERROR ('DIUQ IPCF message exceeds one page')
%FI
!
! Item number codes for MODIFY messages.
!
$LITERAL
DIUQ$K_AFTER = $DISTINCT,
DIUQ$K_DEADLINE = $DISTINCT,
DIUQ$K_PRIORITY = $DISTINCT,
DIUQ$K_HOLDING = $DISTINCT,
DIUQ$K_DEPENDENT_ID = $DISTINCT,
DIUQ$K_PREREQUISITE_ID = $DISTINCT,
DIUQ$K_SEQUENCE = $DISTINCT,
DIUQ$K_LOG_FILESPEC = $DISTINCT,
DIUQ$K_NOTIFY = $DISTINCT;
!
! DIUJBK - Scheduler job status block
!
$FIELD
DIUJ$$JOBSTAT_FIELDS =
SET
DIUJ$V_BITS = [$BITS (16)],
$OVERLAY (DIUJ$V_BITS)
DIUJ$V_INUSE = [$BIT],
DIUJ$V_SIGNED_ON = [$BIT],
DIUJ$V_STATUS_REPORTED = [$BIT],
DIUJ$V_ERROR_LOGOUT_PENDING = [$BIT],
DIUJ$V_FORCED_LOGOUT_PENDING = [$BIT],
DIUJ$V_FLUSH_REQUEST = [$BIT],
DIUJ$V_REQ_COMPLETED = [$BIT],
DIUJ$V_NOTIFY_MAIL = [$BIT],
DIUJ$V_NOTIFY_TERMINAL = [$BIT],
DIUJ$V_NOTIFY_IPCF = [$BIT],
DIUJ$V_ALREADY_DELETED = [$BIT],
DIUJ$V_ALREADY_NOTIFIED = [$BIT],
%IF %SWITCHES (TOPS10) %THEN
DIUJ$V_PID_INVALID = [$BIT], ! TOPS-10 ONLY
%FI
$CONTINUE
DIUJ$H_JOB_NUMBER = [$SHORT_INTEGER],
DIUJ$H_REQUEST_ID = [$SHORT_INTEGER],
! Request status
DIUJ$V_CONVERSION = [$BIT],
DIUJ$V_BLOCK_MODE = [$BIT],
DIUJ$H_TOTAL_FILES = [$SHORT_INTEGER],
DIUJ$G_LAST_ERROR = [$INTEGER],
DIUJ$G_TOTAL_WARNINGS = [$INTEGER],
DIUJ$G_BLOCKS_READ = [$INTEGER],
DIUJ$G_BLOCKS_WRITTEN = [$INTEGER],
DIUJ$G_PACKETS_XFERRED = [$INTEGER],
DIUJ$G_FILE_SIZE = [$INTEGER],
DIUJ$H_CURRENT_INPUT = [$SHORT_INTEGER],
DIUJ$T_CURRENT_INPUT = [$STRING(DIU$K_FILESPEC_MAXIMUM_LENGTH)],
DIUJ$H_CURRENT_OUTPUT = [$SHORT_INTEGER],
DIUJ$T_CURRENT_OUTPUT = [$STRING(DIU$K_FILESPEC_MAXIMUM_LENGTH)],
DIUJ$A_REQ_BLOCK = [$ADDRESS],
DIUJ$G_JOB_CREATE_TIME = [$INTEGER],
DIUJ$G_USER_NUMBER = [$INTEGER],
DIUJ$G_RUNTIME = [$INTEGER],
DIUJ$G_2ND_CODE = [$INTEGER],
DIUJ$T_EXTRA_TEXT = [$DESCRIPTOR (DYNAMIC)],
DIUJ$G_SERIAL_NUMBER = [$INTEGER],
DIUJ$G_JOB_RUNTIME = [$INTEGER]
%IF %SWITCHES (TOPS10) %THEN ,
DIUJ$G_SLAVE_PID = [$INTEGER] ! TOPS-10 ONLY
%FI
TES;
!
! End of DIUJBK
!
LITERAL
DIUJ$K_LEN = $FIELD_SET_SIZE;
!
! Some bits for NOTIFY
!
LITERAL
DIU$$V_NOTIFY_MAIL = 1,
DIU$$V_NOTIFY_TERMINAL = 2,
DIU$$V_NOTIFY_FAILURE = 3,
DIU$$V_NOTIFY_IPCF = 4;
!
! Some handy definitons to make my life easier
!
LITERAL
TRUE = 1, ! used for flags to indicate TRUE
FALSE = 0; ! used for flags to indicate FALSE
! Macro to return a pointer to the furnished ASCIZ string
MACRO PP(STR)=CH$PTR(UPLIT(%ASCIZ %STRING(STR))) %;
! Macro to count the characters in an ASCIZ string and return the length
! of that string. The null at the end of the string is NOT counted.
MACRO
ASCIZ_LEN(ASCIZ)=(LOCAL TPTR;
TPTR=ASCIZ;
INCR I FROM 0
DO IF CH$RCHAR_A(TPTR) EQL 0 THEN EXITLOOP .I) %;
! macro to return two arguments (length,addr) for used in $STR macros
MACRO ASCIZ_STR(ASCIZ)=(ASCIZ_LEN(ASCIZ),ASCIZ) %;
! macro to cause a vector of storage to be zeroed
MACRO CLEARV(var) = CH$FILL(0,%ALLOCATION(var),CH$PTR(var,0,36))%;
! Define linkage to RMS and GLXLIB
LINKAGE
RMS$ERCAL = PUSHJ (REGISTER=1) : LINKAGE_REGS(15,14,1);
%IF %SWITCHES(TOPS10)
%THEN ! TOPS-10 only
BUILTIN
UUO;
LINKAGE
GLXLIB = PUSHJ (REGISTER = 1, REGISTER = 2 ; REGISTER = 1, REGISTER = 2) :
LINKAGE_REGS(15, 14, 0)
NOPRESERVE (0, 1, 2, 3, 4, 5, 6)
PRESERVE (7, 8, 9, 10, 11, 12, 13);
%FI ! end TOPS-10 only
!
! Define DIU error message text table
!
$FIELD DIU_ERROR_TABLE_FIELDS =
SET
DIU$G_ERRTAB_CODE = [$INTEGER],
DIU$T_ERRTAB_TEXT = [$DESCRIPTOR (FIXED)],
$OVERLAY (DIU$T_ERRTAB_TEXT)
DIU$B_ERRTAB_DTYPE = [$SUB_FIELD (DIU$T_ERRTAB_TEXT,STR$B_DTYPE)],
DIU$B_ERRTAB_CLASS = [$SUB_FIELD (DIU$T_ERRTAB_TEXT,STR$B_CLASS)],
DIU$H_ERRTAB_LENGTH = [$SUB_FIELD (DIU$T_ERRTAB_TEXT,STR$H_LENGTH)],
DIU$A_ERRTAB_POINTER = [$SUB_FIELD (DIU$T_ERRTAB_TEXT,STR$A_POINTER)]
$CONTINUE
TES;
LITERAL DIU$K_ERRTAB_WIDTH = $FIELD_SET_SIZE;
MACRO DIU_ERROR_TABLE (size) = BLOCKVECTOR [size, DIU$K_ERRTAB_WIDTH]
FIELD (DIU_ERROR_TABLE_FIELDS) %;
!
! Define DIU error codes and related strings
!
MACRO
$DIU$errors =
$DIU$error
(
DIU$_NORMAL, NORM, 1, SUCCESS, 'Successful completion',
DIU$_MORE, MORE, 2, SUCCESS, 'Successful partial completion',
DIU$_REQ_NOT_FOUND, RQNF, 3, WARNING, 'Request not found',
DIU$_REQ_CREATED, RCRE, 4, INFO, 'Request created',
DIU$_INVALID_REQUEST, INVR, 5, ERROR, 'Invalid request block format',
DIU$_RMS_ERROR, RMSE, 6, ERROR, 'Unexpected RMS error',
DIU$_ACTIVE, ACTI, 7, ERROR, 'Request already active',
DIU$_INV_BLK_LEN, INVL, 8, ERROR, 'Invalid request block length',
DIU$_INV_FUN_CODE, INVC, 9, ERROR, 'Invalid request function code',
DIU$_INV_FLAGS, INVF, 10, ERROR, 'Invalid request flags',
DIU$_NO_SPOOLER, NSPL, 11, ERROR, 'Spooler not started',
DIU$_MJOB_EXCEEDED, MJOB, 12, ERROR, 'Mjob exceeded',
DIU$_NO_MEMORY, NMEM, 13, ERROR, 'Insufficient dynamic memory',
DIU$_NO_MASTER, NMAS, 14, ERROR, 'DIU spooler job not running',
DIU$_NO_SEND, NSEN, 15, ERROR, 'Cannot send IPCF to DIU spooler',
DIU$_NO_RECEIVE, NREC, 16, ERROR, 'Cannot receive IPCF from DIU spooler',
DIU$_INSUFF_PRIVS, NPRV, 17, ERROR, 'Insufficient privileges',
DIU$_BUG, BUG, 18, SEVERE, 'Internal DIU error',
DIU$_TWO_MASTERS, TMAS, 19, ERROR, 'Another spooler already active',
DIU$_ALREADY_STARTED, ASTA, 20, ERROR, 'Spooler already active',
DIU$_NO_JOB_SLOTS, NJOB, 21, ERROR, 'No free job slots',
DIU$_SHUTDOWN, SHUT, 22, ERROR, 'Spooler has been shut down',
DIU$_SPOOLER_STOP_NOW, SPSN, 23, INFO, 'Immediate spooler shutdown initiated',
DIU$_UNSOLICITED_STATUS, USTA, 24, ERROR, 'Status message received from non-slave job',
DIU$_REQUEST_COMPLETED, OK, 25, SUCCESS, 'Request completed OK',
DIU$_REQUEUED, REQU, 26, INFO, 'Request requeued',
DIU$_REQUEST_STARTED, STAR, 27, SUCCESS, 'Request started',
DIU$_NOT_STARTED, NSTA, 29, ERROR, 'Spooler not (yet) started',
DIU$_NO_MAILER, NMAI, 30, ERROR, 'Cannot get PID for MAILER or MAILEX',
DIU$_NO_MAIL_CPY, NWMC, 31, ERROR, 'Cannot write MAIL.CPY',
DIU$_CANT_MAIL, CMAI, 32, ERROR, 'Cannot notify user via mail',
DIU$_INV_IPCF_MSG, IIPC, 33, ERROR, 'Invalid IPCF message received',
DIU$_USER_LOG_FAULT, ULGF, 34, WARNING, 'Error writing to user log file',
DIU$_NOT_IMPLEMENTED, NIMP, 35, ERROR, 'Function not implemented',
DIU$_KILLED_BY_USER, KBUS, 36, ERROR, 'Request killed',
DIU$_SPOOLER_RESTARTED, SRST, 37, INFO, 'Spooler version !V restarted',
DIU$_SPOOLER_STARTED, SSTA, 38, INFO, 'Spooler version !V started',
DIU$_SPOOLER_STOP, SSTO, 39, INFO, 'Spooler shutdown initiated',
DIU$_SPOOLER_DOWN, SDWN, 40, INFO, 'Spooler shutdown completed',
DIU$_MISSED_MESSAGE, MMES, 41, INFO, 'Missed IPCF message from master DIU job',
DIU$_DEADLINE_EXPIRED, DEXP, 42, ERROR, 'Deadline expired',
DIU$_DEPENDENT_ABORTED, DEPA, 43, ERROR, 'Prerequisite in a sequence aborted or failed',
DIU$_INVALID_PREREQ, IPRQ, 44, ERROR, 'Invalid prerequisite specified',
DIU$_TOO_MANY_OKINT, TMOK, 45, SEVERE, 'S$OKINT invoked while OKINT',
DIU$_SYS_LOG_FAULT, SLGF, 46, SEVERE, 'Can''t open system log file',
DIU$_INVALID_PRIORITY, IPRI, 47, ERROR, 'Invalid priority specified',
DIU$_INV_REQ_BLK_VER, IRQV, 48, ERROR, 'Invalid request block version',
DIU$_INV_STR_LENGTH, ISTL, 49, ERROR, 'Invalid length string in request block',
DIU$_DEADLINE_CONFLICT, DEDC, 50, ERROR, 'Deadline and after parameters conflict',
DIU$_TEXT, TEXT, 51, INFO, '!AD',
DIU$_STRUCTURE_NOT_UP, NSTR, 52, ERROR, 'File structure not mounted',
DIU$_QUEUE_EMPTY, QEMP, 53, WARNING, 'The queue is empty',
DIU$_DEADLINE_PAST, DEDP, 54, ERROR, 'Deadline cannot be in the past',
DIU$_NO_CONNECT, NCON, 55, ERROR, 'Cannot connect to directory',
DIU$_ARG_MISSING, ARGM, 57, ERROR, 'Argument missing',
DIU$_NO_HELP_FILE, NHLP, 58, ERROR, 'Cannot open help file (HLP:DIU.HLP)',
DIU$_HAS_DEPENDENT, HDEP, 59, ERROR, 'Request specified as prerequisite already has a dependent',
DIU$_NO_PREREQ, NDEP, 60, ERROR, 'Request specified does not have a prerequisite',
DIU$_QUEUE_FULL, QFUL, 61, ERROR, 'DIU queue is full',
DIU$_CANT_GET_TOP_INT, CGTP, 62, INFO, 'Cannot enable network topology change interrupts',
DIU$_REQ_TIME_OUT, RTIO, 63, WARNING, 'Request time out',
DIU$_REQUEUE_COUNT, RQCT, 64, INFO, 'Request requeued !SL time!%S',
DIU$_SLAVE_ABNORMAL, SABN, 65, ERROR, 'Slave job terminated abnormally',
DIU$_CANT_CREATE_JOB, CJOB, 66, ERROR, 'Can''t create slave job',
DIU$_CANT_GET_DIU, CGFT, 67, ERROR, 'Can''t get SYS:DIU.EXE',
DIU$_SPACE_NOT_ALLOWED, SPCN, 68, ERROR, 'Spaces not allowed in USER, PASSWORD, or ACCOUNT fields',
DIU$_PANIC_ILL_INST, IILI, 69, ERROR, 'Illegal instruction trap at PC !OW',
DIU$_PANIC_ILL_READ, IIRD, 70, ERROR, 'Illegal memory read at PC !OW',
DIU$_PANIC_ILL_WRIT, IIWR, 71, ERROR, 'Illegal memory write at PC !OW',
DIU$_SPOOLER_ABORTED, SABT, 72, ERROR, 'Spooler version !V restart aborted',
DIU$_SHUTDOWN_ABORTED, SSAB, 73, WARNING, 'Spooler shutdown aborted',
DIU$_CONNECTED_TO, SCON, 74, INFO, 'Connected to directory',
DIU$_MAXIMUM_REQ_SET, SMAX, 75, INFO, 'Maximum simultaneous requests set to !SL',
DIU$_PREREQ_NON_EXIST, PNXM, 76, ERROR, 'Prerequisite request does not exist',
DIU$_PREREQ_NOT_YOURS, PNYR, 77, ERROR, 'Prerequisite request is not yours',
DIU$_PREREQ_LOOP, PLUP, 78, ERROR, 'Prerequisite loop detected',
DIU$_ILLEGAL_USER_LOG, IULF, 79, ERROR, 'Illegal user log file specified',
DIU$_TEMPORARY_RMS_ERROR, TRMS, 80, ERROR, 'Temporary RMS error, try later',
DIU$_ACJ_DENIED_ACCESS, ACJD, 81, ERROR, 'Access control facility denied access',
DIU$_INVDATTYP, DTYP, 82, ERROR, 'Datatype !SL invalid or not supported by DIU',
DIU$_INVTYPSYS, TSYS, 83, WARNING, 'Datatype !SL not supported by specified system type',
DIU$_INVFLDDSC, FDSC, 84, ERROR, 'Invalid field description for !AS',
DIU$_MOVPREV, MPRV, 85, INFO, 'Field moved explicitly has been moved again by MOVE_MATCHING',
DIU$_VARFLDSKP, SKPV, 86, INFO, 'VARIANT fields are being skipped by MOVE_MATCHING',
DIU$_CONVERR, CONV, 87, INFO, 'Record !SL: Error converting field !AS to !AS',
DIU$_DEPITMINV, DITM, 88, INFO, '!AS depend item invalid in rec !SL, used min occurs instead',
DIU$_IMAGE_INVALID, IMAI, 89, ERROR, '/IMAGE switch invalid with non-TOPS-10 or non-TOPS-20 system type',
DIU$_PATPAR, PPAR, 90, INFO, ' !AS',
DIU$_KILLED_BY_SPOOLER, JKBS, 91, SEVERE,'Job killed by spooler',
DIU$_NO_DETACH, NDET, 92, ERROR, 'Job could not be detached',
DIU$_CANT_CREATE_FORK, NFRK, 93, SEVERE, 'Can not create inferior fork',
DIU$_PARDES, PDES, 94, ERROR, 'Error parsing description, cannot process request ',
DIU$_PARTRA, PTRA, 95, ERROR, 'Error parsing transform, cannot process request ',
DIU$_USAGE_CONFLICT, UCFL, 96, ERROR, 'Conflicting datatypes specified in record description',
DIU$_INIT_QUEUE, INIQ, 97, INFO, 'Initializing queue file',
DIU$_INVALID_ISAM_REQUEST, IISM, 98, ERROR, 'If dest file is ISAM, src must be ISAM, and a transform is illegal',
DIU$_INVALID_NONRMS_REQUEST, INRM, 99, ERROR, 'If dest file is non-RMS, src must be non-RMS, and a transform is illegal',
DIU$_RMS_FILE_FOUND, RFFO, 100, WARNING, 'User specified NONRMS for source file actually in RMS format',
DIU$_NONRMS_FILE_FOUND, NRFF, 101, WARNING, 'User specified RMS for source file actually in NONRMS format',
DIU$_KEY_NAME_INVALID, KNAM, 105, ERROR, 'Key "!AS" is not defined in record description',
DIU$_KEY_DATATYPE_INVALID, KDTP, 106, ERROR, 'Datatype of key field is invalid',
DIU$_KEY_DTP_CONFLICT, KDCF, 107, ERROR, 'Conflict between key segment datatypes detected',
DIU$_SEGMENT_KEY_INVALID, SEGK, 108, ERROR, 'Segments invalid for keys with packed decimal or numeric datatypes',
DIU$_KEY_SIZE_INVALID, KSIZ, 109, ERROR, 'Key size out of range for key datatype',
DIU$_RSZ_INVALID, IRSZ, 110, ERROR, 'Computed record size: !SL conflicts with user record size: !SL',
DIU$_DAMAGED, DAMA, 111, FATAL, 'Queue file is damaged',
DIU$_ANOTHER_VERSION, AVER, 112, FATAL, 'Queue file is written by another version',
DIU$_INVALID_RFM, IRFM, 113, ERROR, 'Record format is not supported by destination system',
DIU$_PAR_INFO, PARI, 114, INFO, '!AS',
DIU$_KEY_OPTIONS_INVALID, KOPT, 115, ERROR, 'Alternate key with NODUPLICATES and CHANGES not allowed on VMS'
) %;
!
! Now define the symbolic names
!
COMPILETIME
DIU$K_ERRTAB_LENGTH = 0,
DIU$K_FACILITY_CODE = %O'1000000';
MACRO
$DIU$ERROR[CODE,SCODE,VALUE,SEVERITY,TEXT] =
%ASSIGN (DIU$K_ERRTAB_LENGTH, %COUNT + 1)
CODE = (VALUE ^ 3) + DIU$K_FACILITY_CODE + %NAME (STS$K_, SEVERITY)
%;
LITERAL
$DIU$ERRORS;
!
! Log file hacking macros
!
MACRO
!
! Place a line of text into the log file
!
$DIU_LOG (text) =
BEGIN
%IF NOT %DECLARED (l$text)
%THEN
EXTERNAL ROUTINE
l$text : NOVALUE;
%FI
EXTERNAL
mst_flag : VOLATILE;
LOCAL
log_descr : $STR_DESCRIPTOR ();
IF .mst_flag
THEN
BEGIN
$STR_DESC_INIT (DESCRIPTOR=log_descr,CLASS=DYNAMIC);
$STR_COPY (STRING=%REMOVE(text),TARGET=log_descr);
l$text(log_descr);
$XPO_FREE_MEM(STRING=log_descr);
END;
END %,
!
! Place a line of text pertaining to a particular slave job in the log
!
$DIU_JOB_LOG (jobhandle, text) =
BEGIN
EXTERNAL ROUTINE
lj$text : NOVALUE;
EXTERNAL
mst_flag;
LOCAL
log_descr : $STR_DESCRIPTOR ();
IF .mst_flag
THEN
BEGIN
$STR_DESC_INIT (DESCRIPTOR = log_descr,
CLASS = DYNAMIC);
$STR_COPY (STRING = %REMOVE (text), TARGET = log_descr);
lj$text (log_descr, jobhandle);
$XPO_FREE_MEM (STRING = log_descr);
END;
END % ;
! $MSG_FAO prints the following FAO argument list on the terminal if running
! interactive, and the user log file and system log if running as a slave job.
MACRO $MSG_FAO (control) =
BEGIN
EXTERNAL
interactive,
tty : $XPO_IOB();
EXTERNAL ROUTINE
Lj$UTxt: NOVALUE,
Ip_Status;
LOCAL
fao_len,
fao_buf : VECTOR[CH$ALLOCATION(200)],
fao_desc : $STR_DESCRIPTOR(CLASS=BOUNDED),
fao_ctl : $STR_DESCRIPTOR(STRING=control);
! Init the descriptor. $STR_DESC_INIT wouldn't seem to work..
fao_desc[STR$H_LENGTH] = 0;
fao_desc[STR$H_MAXLEN] = 200;
fao_desc[STR$H_PFXLEN] = 0;
fao_desc[STR$B_DTYPE] = STR$K_DTYPE_T;
fao_desc[STR$B_CLASS] = STR$K_CLASS_B;
fao_desc[STR$A_POINTER] = CH$PTR(fao_buf);
! Format the text
$FAO(fao_ctl,fao_len,fao_desc,%REMAINING);
! Write it to the terminal if any
IF .tty[IOB$V_OPEN] ! If TTY open use it
THEN $XPO_PUT(IOB=tty,STRING=fao_desc);
! to user and system log file if needed
IF .interactive EQL 0
THEN BEGIN
Lj$utxt(fao_desc);
Ip_Status(DIU$_TEXT,0,fao_desc);
END;
END%;
MACRO $GET_FAO (control,result) =
BEGIN
LOCAL
fao_len,
fao_buf : VECTOR[CH$ALLOCATION(200)],
fao_ctl : $STR_DESCRIPTOR(STRING=control),
fao_desc : $STR_DESCRIPTOR(CLASS=BOUNDED);
! Init the descriptor. $STR_DESC_INIT wouldn't seem to work..
fao_desc[STR$H_LENGTH] = 0;
fao_desc[STR$H_MAXLEN] = 200;
fao_desc[STR$H_PFXLEN] = 0;
fao_desc[STR$B_DTYPE] = STR$K_DTYPE_T;
fao_desc[STR$B_CLASS] = STR$K_CLASS_B;
fao_desc[STR$A_POINTER] = CH$PTR(fao_buf);
! Format the text
$FAO(fao_ctl,fao_len,fao_desc,%REMAINING);
! Copy it to the user
$STR_COPY(STRING=fao_desc,TARGET=result);
END%;
!
! Macro to produce trace messages on the terminal if we are debugging
!
MACRO $TRACE(text) = %IF %SWITCHES(DEBUG)
%THEN BEGIN
EXTERNAL ROUTINE S$TRACE : NOVALUE;
S$TRACE(CH$PTR(UPLIT(%STRING(text,%CHAR(13,10,0)))))
END;
%FI %;
MACRO $TRACE_FAO(text) = %IF %SWITCHES(DEBUG)
%THEN $MSG_FAO(%STRING(text,'!/'),%remaining)
%FI %;
! define macros that are standardized strings
MACRO diu$$system_banner =
%IF %SWITCHES(TOPS20)
%THEN CH$PTR(UPLIT(%ASCIZ'TOPS-20 Data Interchange Utility'))
%ELSE CH$PTR(UPLIT(%ASCIZ'TOPS-10 Data Interchange Utility'))
%FI
%;
!
! The below macros were pulled out of DAP.REQ in order to not pull in DAP
! sources for DIU usage.
!
MACRO Str_Exclude( Desc, Chars )=
( BIND excl$$chars=(Chars);
Desc[Str$a_Pointer]=CH$PLUS(.desc[Str$a_Pointer],excl$$chars);
Desc[Str$h_Length]=MAX((.desc[Str$h_Length]-excl$$chars),0);
Desc[Str$h_Pfxlen]=.desc[Str$h_Pfxlen]+excl$$chars ) %;
MACRO Str_Include( Desc, Chars)=
(Desc[Str$h_Length]=.desc[Str$h_Length]+Chars ) %;
MACRO Str_Prefix( Desc )=
( .desc[Str$h_Pfxlen],
CH$PLUS(.desc[Str$a_Pointer],-.desc[Str$h_Pfxlen]) ) %;
MACRO Str_String_Plus_Prefix( Desc )=
( .desc[Str$h_Pfxlen]+.desc[Str$h_Length],
CH$PLUS(.desc[Str$a_Pointer], -.desc[Str$h_Pfxlen]) ) %;
MACRO Str_String_Plus_Remainder( Desc )=
( .desc[Str$h_Maxlen]-.desc[Str$h_Pfxlen], .desc[Str$a_Pointer] ) %;
MACRO Str_Remainder( Desc ) =
( .desc[Str$h_Maxlen]-(.desc[Str$h_Length]+.desc[Str$h_Pfxlen]),
CH$PLUS(.desc[Str$a_Pointer], .desc[Str$h_Length]) ) %;
MACRO Str_String( Desc ) =
( .desc[Str$h_Length], .desc[Str$a_Pointer] ) %;
MACRO
ASCIZ_TO_DESCRIPTOR(ASCIZ,DESC)=$STR_DESC_INIT(DESCRIPTOR=DESC,
STRING=(ASCIZ_LEN(ASCIZ),
ASCIZ),
CLASS=BOUNDED) %;
MACRO ASCIZ_TO_FIXED_DESCRIPTOR(ASCIZ,DESC)=
$STR_DESC_INIT(DESCRIPTOR=DESC,
STRING=(ASCIZ_LEN(ASCIZ), ASCIZ),
CLASS=FIXED) %;
UNDECLARE %QUOTE STR_STRING;