*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 CARGPTR NQ 0 DO BEGIN # LOOP TO CHECK EACH CHAR # LEFTSYM = CARGPTR; 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 = LOC(ARGM0[ERRCODE]); DLDFM(DUMMY); DLABEND; END END TERM