cdc:nos2.source:nam5871:dlarg
Table of Contents
DLARG
Table Of Contents
- [00006] PROC DLARG
- [00059] PROC DLABEND
- [00060] PROC DLDFM
Source Code
- DLARG.txt
- *DECK DLARG
- USETEXT DLFPDEF
- USETEXT ARGERR
- USETEXT ARGTBL
- USETEXT VDPARM
- PROC DLARG; # SCAN PARAMETERS FROM PROGRAM CALL #
- *IF DEF,IMS
- #
- *1DC DLARG
- *
- * 1. PROC NAME AUTHOR DATE.
- * DLARG P.C.TAM 78/06/18
- *
- * 2. FUNCTIONAL DESCRIPTION.
- * SCAN ARGUMENTS FROM PROGRAM CALL.
- *
- * 3. METHOD USED.
- * GET EACH ARGUMENT, CHECK WITH VALID PARAMETER LIST,
- * SET PARAMETER TABLE.
- *
- * 4. ENTRY PARAMETERS.
- * RA+2 THRU RA+22 WORDS.
- *
- * 5. EXIT PARAMETERS.
- * VALUES SET IN ARGTBL COMMON BLOCK.
- *
- * 6. COMDECKS CALLED AND SYMPL TEXTS USED.
- * ARGERR ARGTBL DLFPDEF VDPARM
- *
- * 7. ROUTNES CALLED.
- * DLABEND ABORT MAIN LINE
- * DLDFM DAYFILE MESSAGE PROCESSOR
- *
- * 8. DAYFILE MESSAGES.
- * NONE.
- *
- #
- *ENDIF
- CONTROL PRESET;
- #
- EXTERNAL VARIABLES
- #
- XREF
- BEGIN # RA COMMUNICATION AREA #
- ARRAY ARGRW [1:22] S(1);
- BEGIN # RA.ARGR #
- ITEM PSYMBO U(0,0,NL);# ACTUAL PARAMETER #
- ITEM PSEPAR U(0,ZL,AL);# ACTUAL PARAMETER SEPARATOR #
- END
- ARRAY ACTRW;
- BEGIN # RA.ACTR #
- ITEM ACTR U(0,ZL,AL);# NUMBER OF ARGUMENTS #
- END
- END
- XREF
- BEGIN
- PROC DLABEND; # ABORT MAIN LINE #
- PROC DLDFM; # DAYFILE MESSAGE PROCESSOR #
- END
- #
- LOCAL VARIABLES
- #
- BASED ARRAY DUMMY; ;
- SWITCH PARMTYPE
- , INTYPE, OTYPE, BTYPE, NTYPE, DTYPE;
- ITEM
- ERRCODE I = 0, # ERROR RETURN CODE #
- ARGPTR I = 0, # POINTER TO AVAILABLE ARGUMENT ENTRY #
- LEFTSYM U, # LEFT PART SAVE AREA #
- I I, # TEMPORARY VARIABLE #
- K I, # TEMPORARY VARIABLE #
- MATCH B = TRUE; # SYMBOL MATCHED FLAG #
- #**********************************************************************#
- BEGIN
- #
- LOOP TO READ ALL PARAMETERS
- #
- FOR ARGPTR = ARGPTR WHILE ARGPTR LS ACTR[0] AND ERRCODE EQ 0
- DO
- BEGIN
- ARGPTR = ARGPTR + 1; # MOVE POINTER TO NEXT ARG #
- LEFTSYM = PSYMBO[ARGPTR];# GET CURRENT ACTUAL PARAMETER #
- MATCH = FALSE;
- #
- LOOP TO MATCH ACTUAL PARAMETER WITH FORMAL PARAMETER
- #
- FOR I = 1 STEP 1 WHILE I LQ PARMNO AND NOT MATCH
- DO
- BEGIN
- IF LEFTSYM EQ VDPARM[I]
- THEN
- BEGIN
- MATCH = TRUE;
- K = I;
- END
- END
- IF MATCH
- THEN
- BEGIN # FOUND A MATCH #
- I = ARGPTR + 1;
- IF (VDPMLEN[K] EQ 1 AND # PARAMETER OF LENGTH 1 #
- (PSEPAR[ARGPTR] EQ 1 OR # SEPARATOR IS , #
- PSEPAR[ARGPTR] EQ 15)) OR# SEPARATOR IS .) #
- (VDPMLEN[K] EQ 2 AND # PARAMETER OF LENGTH 2 #
- PSEPAR[ARGPTR] EQ 2 AND # SEPARATOR IS = #
- I LQ ACTR[0] AND # VALUE PRESENT #
- (PSEPAR[I] EQ 1 OR # NEXT SEP IS , #
- PSEPAR[I] EQ 15)) # NEXT SEP IS .) #
- THEN # PARAMETER CHECKED OK #
- BEGIN
- IF VDPMLEN[K] NQ 1
- THEN
- ARGPTR = I; # UPDATE ARGUMENT PTR #
- #
- SWITCH TO DIFFERENT PROCESSING CASES
- #
- GOTO PARMTYPE[K];
- INTYPE: # INPUT FILE NAME #
- I = INFILE; # SET INPUT FILE INDEX #
- GOTO ENDP;
- OTYPE: # OUTPUT FILE NAME #
- I = OFILE; # SET OUTPUT FILE NAME #
- GOTO ENDP;
- BTYPE: # ZZZZZDN FILE NAME #
- I = ZFILE; # SET ZZZZZDN FILE INDEX #
- GOTO ENDP;
- NTYPE: # NEW DEBUG LOG FILE OPTION #
- I = NFILE;
- GOTO ENDP;
- DTYPE: # IGNORE ERROR #
- I = DOPTION; # SET D OPTION INDEX #
- ENDP:
- IF NOT ARGFLAG[I]
- THEN # OPTION HAS NOT BEEN SELECTED #
- BEGIN
- IF VDPMLEN[K] EQ 1
- THEN
- ARGENTR[I] = 1;
- ELSE
- ARGENTR[I] = PSYMBO[ARGPTR];
- ARGFLAG[I] = TRUE;
- END
- ELSE # DUPLICATE PARAMETER SELECT #
- ERRCODE = A$DUPERR;
- END
- ELSE # PARAMETER FORMAT ERROR #
- ERRCODE = A$FMERR;
- END
- ELSE # ILLEGAL PARAMETER #
- ERRCODE = A$ILLERR;
- END
- FOR I = 1 STEP 1 WHILE I LQ DOPTION-1 AND ERRCODE EQ 0
- DO
- BEGIN
- LEFTSYM = ARGENTR[I];
- FOR K = I+1 STEP 1 WHILE K LQ DOPTION AND ERRCODE EQ 0
- DO
- BEGIN
- IF LEFTSYM EQ ARGENTR[K]
- THEN
- ERRCODE = A$DUFERR;
- END
- END
- FOR I = 1 STEP 1 WHILE I LS DOPTION AND ERRCODE EQ 0
- DO # LOOP TO CHECK ALL FILE NAMES #
- BEGIN
- ARGPTR = 0;
- B<0, NL>ARGPTR = ARGENTR[I];
- IF ARGFLAG[I] AND # PARAMETER HAS BEEN SET #
- (I NQ INFILE OR # FOR INPUT FILE, IT CAN BE 0 #
- I EQ INFILE AND ARGPTR NQ O"33000000000000000000")
- THEN
- BEGIN
- FOR K = 0 STEP 1 WHILE K LS NC AND
- C<K, NC-K>ARGPTR NQ 0
- DO
- BEGIN # LOOP TO CHECK EACH CHAR #
- LEFTSYM = C<K, 1>ARGPTR;
- IF (K EQ 0 AND # 1ST CHAR MUST BE LETTER #
- (1 GR LEFTSYM OR LEFTSYM GR O"32")) OR
- (K NQ 0 AND # ALL OTHERS MUST BE ALPHANUMERIC #
- (1 GR LEFTSYM OR LEFTSYM GR O"44"))
- THEN
- ERRCODE = A$ILFERR;
- END
- END
- END
- IF ERRCODE NQ 0
- THEN
- BEGIN
- P<DUMMY> = LOC(ARGM0[ERRCODE]);
- DLDFM(DUMMY);
- DLABEND;
- END
- END
- TERM
cdc/nos2.source/nam5871/dlarg.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator