$SAVE GENONLY %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' TITLE: EJOBCF.MAC %' %' DATE: 15 MARCH 1982 %' %' ABSTRACT: %' THIS FILE DEFINES THE INTERNAL_TASKS_PRIORITY, IO_USER %' IO_JOB AND END_IO_JOB_CONFIG MACROS USED IN CONFIGURING %' IO JOBS INTO THE EIOS. %' %' INTERNAL_TASKS_PRIORITY( PRIORITY ) %' %' IO_USER(USER_NAME, %' IDENTIFYING_ID, %' USER_ID2, %' USER_ID3, %' USER_ID4, %' USER_ID5) %' %' IO_JOB(DEFAULT_PREFIX, %' DEFAULT_USER_NAME, %' POOL_MIN, %' POOL_MAX, %' EXCEP_HANDLER_ADDRESS, %' EXCEP_MODE, %' JOB_FLAGS, %' TASK_PRIORITY, %' TASK_START_ADDRESS, %' DATA_SEGMENT, %' STACK_ADDRESS, %' STACK_SIZE, %' TASK_FLAGS) %' %' END_IO_JOB_CONFIG(EIOS_DEFAULT_DIR_SIZE) %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' EXTENDED I/O SYSTEM USER INFORMATION BLOCK DEFINITION. %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %DEFINE(N_IOUSERS) (0) %DEFINE(N_IOJOBS) (0) %' $SAVE NOLIST IO_USER_BLOCK STRUC DB 0 ; USER NAME LENGTH DB ' ' ; USER NAME DW 0 ; INDENTIFYING ID DW 0 ; USER ID2 DW 0 ; USER ID3 DW 0 ; USER ID4 DW 0 ; USER ID5 DW 0 ; NUMBER OF IDS IO_USER_BLOCK ENDS %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' EXTENDED I/O SYSTEM JOB INFORMATION BLOCK DEFINITION. %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' IO_JOB_BLOCK STRUC DB 0 ; DEFAULT PREFIX NAME LENGTH DB ' ' ; DEFAULT PREFIX NAME DB 0 ; DEFAULT USER NAME LENGTH DB ' ' ; DEFAULT USER NAME DW 0 ; POOL MINIMUM DW 0 ; POOL MAXIMUM DW 0 ; EXCEPTION HANDLER OFFSET DW 0 ; EXCEPTION HANDLER BASE DB 0 ; EXCEPTION MODE DW 0 ; JOB FLAGS DB 0 ; TASK PRIORITY DW 0 ; TASK START OFFSET DW 0 ; TASK START BASE DW 0 ; DATA BASE DW 0 ; STACK OFFSET DW 0 ; STACK BASE DW 0 ; STACK SIZE DW 0 ; TASK FLAGS IO_JOB_BLOCK ENDS $RESTORE %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%' %' %' STRIP (IN_STR) RETURNS "IN_STR" STRIPPED OF LEADING BLANKS. %' %' "$GEN" LISTINGS SHOULD BE AVOIDED FOR THIS MACRO !!! %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(NIL(X))(%EQS(%0,%X)) %' %*DEFINE(BLNK(S))(%EQS(%( ),%SUBSTR(%S,1,1))) %' %*DEFINE(CDR(C))(%SUBSTR(%C,2,%LEN(%C))) %' %*DEFINE(STRIP(STR)) LOCAL Y%' (%DEFINE(Y)(%STR)%' %WHILE(%BLNK(%Y))%' %' '(%DEFINE(Y)(%CDR(%Y)))%Y) %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' TRIM (STR) TRIMS OFF TRAILING BLANKS %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(TRIM(STR)) LOCAL A B (%MATCH(A%( )B)(%STR)%A) %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' NOCRS (S) REPLACES ALL CR/LFS AND TABS IN S WITH SPACES %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %DEFINE(CRLF)( )%' %DEFINE(TAB)( ) %*DEFINE(REMOVE(CHR,STR))(%' %MATCH(SOME_MORE %CHR REST)(%STR)%' %DEFINE(RSLT)(%SOME_MORE)%' %WHILE(NOT %NIL(%REST))(%MATCH(SOME_MORE %CHR REST)(%REST)%' %' '%DEFINE(RSLT)(%RSLT %SOME_MORE))%' %RSLT) %' %*DEFINE(NOCRS(S))(%' %DEFINE(A)(%REMOVE(%CRLF,%S))%' %DEFINE(A)(%REMOVE(%TAB,%A))%' %A) %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' ARGUMENT GETS THE NEXT COMMA-DELIMITED ARGUMENT, STRIPPED, %' TRIMMED AND LESS ONE POSSIBLE LEADING AND TRAILING CRLFS %' DO NOT USE $GEN ON ANY MACRO THAT CALLS ARGUMENT !! %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %DEFINE(MORE_ARGS)(-1) %' TRUE %' %SET(TOTAL_ARGS,0) %' SET TO 0 THE FIRST TIME THRU %' %*DEFINE(ARGUMENT)(%' %MATCH(A,TAIL)(%TAIL)%' %TRIM(%STRIP(%A))%' %' %IF(%NIL(%TAIL))%' THEN (%DEFINE(MORE_ARGS)(0))%' ELSE (%SET(TOTAL_ARGS,%TOTAL_ARGS+1))FI)%' %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' SOME OTHER STUFF %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(GET(PARM))(%DEFINE(%PARM)(%ARGUMENT)) %' %*DEFINE(BASE)(%(0)%ARGUMENT%(H)) %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' STRING GETS ANARGUMENT THAT MUST BE A STRING OF CHARACTERS %' AND DETERMINES ITS LENGTH %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(STRING) LOCAL NAME(%' %DEFINE(NAME) (%ARGUMENT)%' %EVAL(%LEN(%NAME)-2), %NAME) %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' ADDRESS GETS ANARGUMENT THAT MUST BE AN ADDRESS %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(ADDRESS)(%' %DEFINE(ADDR)(%ARGUMENT)%' %DEFINE(FIRST_CHAR)(%SUBSTR(%ADDR,1,1))%' %' %IF (%GES(%FIRST_CHAR,0) AND %LES(%FIRST_CHAR,9))%' THEN (%MATCH(BASE_PART:OFFSET_PART)(%ADDR)%' %' '%(0)%OFFSET_PART%(H),%(0)%BASE_PART%(H))%' ELSE (OFFSET(%ADDR),SEG(%ADDR))FI%' )%' END OF ADDRESS MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' INTERNAL_TASKS_PRIORITY MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(INTERNAL_TASKS_PRIORITY(ARG_LIST))(%' %DEFINE(TAIL)(%NOCRS(%ARG_LIST))%' %' CODE SEGMENT WORD PUBLIC 'CODE' INTERNAL_TASKS_PRIORITY DB %ARGUMENT PUBLIC INTERNAL_TASKS_PRIORITY %' %' NOW START THE JOB INFO TABLE FOR THE IO_USER AND IO_JOB MACROS %' JOBINFOTABLE LABEL BYTE PUBLIC JOBINFOTABLE )%' END OF THE END_IO_JOB_CONFIG MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' IO_USER MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(IO_USER(ARG_LIST))(%DEFINE(TAIL)(%NOCRS(%ARG_LIST))%' %' %SET(N_IOUSERS,%N_IOUSERS+1)%' %' IO_USER_BLOCK < & %STRING, ; USER NAME & %ARGUMENT, ; IDENTIFYING ID & %ARGUMENT, ; USER ID2 & %ARGUMENT, ; USER ID3 & %ARGUMENT, ; USER ID4 & %ARGUMENT, ; USER ID5 & %TOTAL_ARGS ; NUMBER OF IDS & > %' %SET(TOTAL_ARGS,0) )%' END OF THE IO_USER MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' IO_JOB MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(IO_JOB(ARG_LIST))(%DEFINE(TAIL)(%NOCRS(%ARG_LIST))%' %' %SET(N_IOJOBS,%N_IOJOBS+1)%' %' IO_JOB_BLOCK < & %STRING, ; DEFAULT PREFIX & %STRING, ; DEFAULT USER & %ARGUMENT, ; MINIMUM MEMORY POOL & %ARGUMENT, ; MAXIMUM MEMORY POOL & %ADDRESS, ; EXCEPTION HANDLER ADDRESS & %ARGUMENT, ; EXCEPTION MODE & %ARGUMENT, ; JOB FLAGS & %ARGUMENT, ; TASK PRIORITY & %ADDRESS, ; TASK ADDRESS & %BASE, ; DATA SEGMENT & %ADDRESS, ; STACK ADDRESS & %ARGUMENT, ; STACK SIZE & %ARGUMENT ; TASK FLAGS & > %' %SET(TOTAL_ARGS,0) %' SET TO ZERO JUST TO CLEAN IT UP )%' END OF THE IO_JOBS MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %' END_IO_JOB_CONFIG MACRO %' %';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %' %*DEFINE(END_IO_JOB_CONFIG(DEFAULT_DIR_SIZE)) ( EIOSDEFAULTDIRSIZE DW %DEFAULT_DIR_SIZE PUBLIC EIOSDEFAULTDIRSIZE NUMUSERINFOBLOCK DW %N_IOUSERS PUBLIC NUMUSERINFOBLOCK NUMJOBINFOBLOCK DW %N_IOJOBS PUBLIC NUMJOBINFOBLOCK %' %' NOW CLOSE THE CODE SEGMENT FOR ALL IO OB CONFIGURATION %' MACROS INVOKED. %' CODE ENDS )%' END OF THE END_IO_JOB_CONFIG MACRO