TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN' 52000020 * GENERATE; 52000120 LCLA &T,&SPN 52000220 LCLC &LUPDAT DEFINE VARIABLE FOR DATE OF LAST MODULE *52000320 UPDATE 52000420 &SPN SETA 0 OBTAIN DSA FROM SUBPOOL 0 52000520 &LUPDAT SETC '70226' DATE OF LAST MODULE UPDATE 52000620 VSCN TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- MODULE PROLOGUE' 52000720 * /* START OF SPECIFICATIONS **** 52000820 ******** MODULE PROLOGUE -- A BRIEF DESCRIPTION OF THE MODULE *******/ 52000920 * /*******************************************************************/ 52001020 * /* */ 52001120 * /* STATUS -- */ 52001220 * /* RELEASE 20, MODIFICATION LEVEL 01 */ 52001320 * /* A 0-999999 S20029 */ 52001420 * /* C 21974 */ 52001520 * /* */ 52001620 * /* FUNCTION -- */ 52001720 * /* ROUTINE TO PERFORM A STRICT LEFT-TO-RIGHT SCAN ACROSS A */ 52001820 * /* BUFFER OF ASSEMBLER/JCL FORMAT TEXT, PASSING CONTROL TO AN */ 52001920 * /* INVOKER-SPECIFIED PROCESSOR AS EACH WELL-FORMED KEYWORD OR */ 52002020 * /* POSITIONAL OPERAND IS ENCOUNTERED. RETURN AN ARRAY OF */ 52002120 * /* SUMMARY DATA REGARDING THE SCAN TO THE INVOKER ALONG WITH AN */ 52002220 * /* INDICATIVE RETURN CODE. */ 52002320 * /* */ 52002420 * /* ENTRY POINTS -- */ 52002520 * /* IEFVSCAN, IEFVSCN1 */ 52002620 * /* */ 52002720 * /* INPUT -- */ 52002820 * /* R1 = ADDRESS OF A TYPE I PARAMETER LIST CONTAINING 5 */ 52002920 * /* POINTERS. THE FIRST POINTER MUST CONTAIN THE ADDRESS OF A */ 52003020 * /* STRING DOPE VECTOR DESCRIBING THE BUFFER TO BE SCANNED. THE */ 52003120 * /* SECOND POINTER MUST CONTAIN THE ADDRESS OF AN ARRAY OF */ 52003220 * /* HALFWORD OFFSETS TO OPERAND PROCESSORS. THE THIRD POINTER */ 52003320 * /* MUST CONTAIN THE ADDRESS OF A DESCRIPTION OF THE ADMISSIBLE */ 52003420 * /* SYNTAX FOR THE BUFFER. THE FOURTH POINTER MUST CONTAIN THE */ 52003520 * /* ADDRESS OF AN ARRAY OF HALFWORD INTEGERS TO CONTROL THE SCAN */ 52003620 * /* AND PROVIDE FOR A SUMMARY OF IEFVSCAN PROCESSING. THE FIFTH */ 52003720 * /* POINTER MAY CONTAIN ANY VALUE THAT THE INVOKER OF IEFVSCAN */ 52003820 * /* DESIRES; THAT VALUE WILL BE PASSED AS PART OF THE PARAMETER */ 52003920 * /* LIST TO EACH OF THE OPERAND PROCESSORS. */ 52004020 * /* R13 = THE ADDRESS OF A 72-BYTE SAVE AREA */ 52004120 * /* R14 = THE ADDRESS TO WHICH CONTROL SHOULD BE PASSED AFTER */ 52004220 * /* IEFVSCAN PROCESSING HAS CONCLUDED */ 52004320 * /* R15 = THE ADDRESS OF THE IEFVSCAN ENTRY POINT INVOKED */ 52004420 * /* */ 52004520 * /* OUTPUT -- */ 52004620 * /* R0-R14 = SAME AS ON INPUT */ 52004720 * /* R15 = RETURN CODE */ 52004820 * /* */ 52004920 * /* EXTERNAL REFERENCES -- */ 52005020 * /* NONE */ 52005120 * /* */ 52005220 * /* EXITS, NORMAL -- */ 52005320 * /* INVOKER */ 52005420 * /* */ 52005520 * /* EXITS, ERROR -- */ 52005620 * /* INVOKER */ 52005720 * /* */ 52005820 * /* TABLE/WORK AREAS -- */ 52005920 * /* PARAM, SAVEAREA */ 52006020 * /* */ 52006120 * /* ATTRIBUTES -- */ 52006220 * /* REENTRANT, REFRESABLE, LOCATION-INDEPENDENT */ 52006320 * /* */ 52006420 * /* NOTES -- */ 52006520 * /* SEE THE FOLLOWING SPECIFICATIONS FOR A MORE DETAILED */ 52006620 * /* DESCRIPTION OF THE INPUT, OUTPUT, AND OPERATION OF THIS */ 52006720 * /* MODULE. THIS MODULE IS CHARACTER DEPENDENT IN THAT THE */ 52006820 * /* TRANSLATE AND TEST TABLE DEPENDS ON THE INTERNAL */ 52006920 * /* CONFIGURATION OF THE EBCDIC CHARACTERS TO FUNCTION */ 52007020 * /* PROPERLY. REASSEMBLY IS NECESSARY IF A DIFFERENT */ 52007120 * /* CHARACTER SET IS TO BE USED DURING EXECUTION. */ 52007220 * /* */ 52007320 * /*******************************************************************/ 52007420 * /***** MODULE SPECIFICATIONS -- A MORE DETAILED DESCRIPTION ******** 52007520 *1MODULE-NAME = IEFVSCAN 52007620 * 2PROCESSOR = BSL 52007720 **********************************************************************/ 52007820 * /******************************************************************** 52007920 ***** THE RELEASE FOR WHICH THIS MODULE WAS MOST RECENTLY UPDATED ***** 52008020 *1STATUS = 20 MODIFICATION LEVEL 00 52008120 **********************************************************************/ 52008220 * /******************************************************************** 52008320 *1DESCRIPTIVE-NAME = TABLE-DRIVEN SYNTAX SCAN 52008420 **********************************************************************/ 52008520 * /******************************************************************** 52008620 *1DESCRIPTION = ROUTINE TO PERFORM A STRICT LEFT-TO-RIGHT SCAN - 52008720 *ACROSS A BUFFER OF ASSEMBLER/JCL FORMAT TEXT, PASSING CONTROL TO AN - 52008820 *INVOKER-SPECIFIED PROCESSOR AS EACH WELL-FORMED KEYWORD OR - 52008920 *POSITIONAL OPERAND IS ENCOUNTERED. RETURN AN ARRAY OF SUMMARY DATA - 52009020 *REGARDING THE SCAN TO THE INVOKER ALONG WITH AN INDICATIVE RETURN - 52009120 *CODE. 52009220 **********************************************************************/ 52009320 * /******************************************************************** 52009420 *1ASSUMPTIONS = OS/360 OPERATING ENVIRONMENT 52009520 **********************************************************************/ 52009620 * /******************************************************************** 52009720 *1PERFORMANCE = CPU-BOUND 52009820 **********************************************************************/ 52009920 * /******************************************************************** 52010020 *1FUNCTION = SEE DESCRIPTION 52010120 **********************************************************************/ 52010220 * /******************************************************************** 52010320 *1RESTRICTIONS = NONE 52010420 **********************************************************************/ 52010520 * /******************************************************************** 52010620 *1MODULE-TYPE = PROCEDURE 52010720 **********************************************************************/ 52010820 * /******************************************************************** 52010920 *1MODULE-SIZE = 2048 BYTES 52011020 **********************************************************************/ 52011120 * /******************************************************************** 52011220 *1CODE-ATTRIBUTES = REENTERABLE, RECURSIVE 52011320 **********************************************************************/ 52011420 * /******************************************************************** 52011520 *1LOAD-ATTRIBUTES = CONTIGUOUS, REFRESHABLE, LOCATION-INDEPENDENT 52011620 **********************************************************************/ 52011720 * /******************************************************************** 52011820 *1ENTRY-POINT = IEFVSCAN 52011920 * 2LINKAGE = ATTACH, CALL, LINK, SYNCH 52012020 * *******************************************************************/ 52012120 * /******************************************************************* 52012220 * * THE FOLLOWING DESCRIBES THE REQUIRED INPUT TO THIS ENTRY. 52012320 * * DATA MADE AVAILABLE THROUGH THE STANDARD INVOCATION SEQUENCE 52012420 * * BUT NOT USED IN ANY WAY IS NOT NECESSARILY MENTIONED HERE. 52012520 * 2PARAMETER-RECEIVED = POINTER-TO-PARAMETER-LIST 52012620 * 2HOW-PASSED = REGISTER 1 52012720 * 2NAME-OF-LIST = PARM 52012820 * 2LENGTH-OF-LIST = 20 BYTES 52012920 * *****************************************************************/ 52013020 * /***************************************************************** 52013120 * 3FIELD = PARMBDV 52013220 * 4REFERENCE-TYPE = READ 52013320 * 4FIELD-DISPLACEMENT = 0 BYTES 52013420 * 4TYPE = ADDRESS 52013520 * 4ADDRESS-LENGTH = 32 BITS 52013620 * 4ADDRESS-OF = BDV 52013720 * 5REFERENCE-TYPE = READ 52013820 * 5TYPE-ADDRESSED = TABLE 52013920 * 5PURPOSE = DESCRIBE THE BUFFER TO BE SCANNED 52014020 * 5SCOPE = INTERNAL 52014120 * 5TABLE-SIZE = 8 BYTES 52014220 * *************************************************************/ 52014320 * /************************************************************* 52014420 * 5FIELD = BDVBUF 52014520 * 6REFERENCE-TYPE = READ 52014620 * 6FIELD-DISPLACEMENT = 0 BYTES 52014720 * 6FIELD-TYPE = ADDRESS 52014820 * 6ADDRESS-LENGTH = 32 BITS 52014920 * 6ADDRESS-OF = BUFFER 52015020 * 7REFERENCE-TYPE = READ 52015120 * 7TYPE-ADDRESSED = CHARACTER STRING 52015220 * 7LENGTH+MODE = VARIABLE 52015320 * 7LENGTH-VARIABLE = BDVLEN 52015420 * 8LENGTH-VARIABLE-TYPE = ARITHMETIC 52015520 * 7STRING-VALUE = THE DATA TO BE SCANNED BEGINNING WITH - 52015620 * THE FIRST CHARACTER OF THE BUFFER 52015720 * *************************************************************/ 52015820 * /************************************************************* 52015920 * 5FIELD = BDVMX 52016020 * 6REFERENCE-TYPE = READ 52016120 * 6FIELD-DISPLACEMENT = 4 BYTES 52016220 * 6FIELD-TYPE = ARITHMETIC 52016320 * 6MODE = BINARY 52016420 * 6LENGTH = 15 BITS 52016520 * 6SIGN = SIGNED 52016620 * 6SCALING = 0 52016720 * 6VALUE = THE NUMBER OF BYTES IN THE DATA BUFFER WHICH - 52016820 * CONTAINS THE INPUT TO BE SCANNED 52016920 * *************************************************************/ 52017020 * /************************************************************* 52017120 * 5FIELD = BDVLEN 52017220 * 6REFERENCE-TYPE = READ 52017320 * 6FIELD-DISPLACEMENT = 6 BYTES 52017420 * 6FIELD-TYPE = ARITHMETIC 52017520 * 6MODE = BINARY 52017620 * 6LENGTH = 15 BITS 52017720 * 6SIGN = SIGNED 52017820 * 6SCALING = 0 52017920 * 6VALUE = THE NUMBER OF BYTES OF TEXT ELIGIBLE TO BE - 52018020 * SCANNED IN THE BUFFER 52018120 * *****************************************************************/ 52018220 * /***************************************************************** 52018320 * 3FIELD = PARMPROC 52018420 * 4REFERENCE-TYPE = READ 52018520 * 4FIELD-DISPLACEMENT = 4 BYTES 52018620 * 4TYPE = ADDRESS 52018720 * 4ADDRESS-LENGTH = 32 BITS 52018820 * 4ADDRESS-OF = PROCCA 52018920 * 5REFERENCE-TYPE = READ 52019020 * 5TYPE-ADDRESSED = OFFSET 52019120 * 5OFFSET-REPLICATION = VARIABLE 52019220 * 5TERMINATOR = NOT KNOWN EXPLICITLY BY IEFVSCAN. THE INVOKER - 52019320 * OF IEFVSCAN MUST TAKE THE RESPONSIBILITY TO ASSURE THAT THE - 52019420 * SYNTAX DESCRIPTION REFERENCES ONLY DEFINED ENTRIES IN THIS - 52019520 * ARRAY. 52019620 * 5OFFSET-FROM = PROCCA 52019720 * 5OFFSET-LENGTH = 15 BITS 52019820 * 5SIGN = SIGNED 52019920 * 5OFFSET-SCALING = 0 52020020 * 5OFFSET-OF = OPERPROC 52020120 * 6TYPE-ADDRESSED = ENTRY 52020220 * *****************************************************************/ 52020320 * /***************************************************************** 52020420 * 3FIELD = PARMSCAD 52020520 * 4REFERENCE-TYPE = READ 52020620 * 4FIELD-DISPLACEMENT = 8 BYTES 52020720 * 4TYPE = ADDRESS 52020820 * 4ADDRESS-LENGTH = 32 BITS 52020920 * 4ADDRESS-OF = SCADV 52021020 * 5REFERENCE-TYPE = READ 52021120 * 5TYPE-ADDRESSED = TABLE 52021220 * 5PURPOSE = DESCRIBE A SYNTAX CONTROL ARRAY. 52021320 * 5SCOPE = INTERNAL 52021420 * 5TABLE-SIZE = 4 BYTES 52021520 * *************************************************************/ 52021620 * /************************************************************* 52021720 * 5FIELD = SCADVSCA 52021820 * 6REFERENCE-TYPE = READ 52021920 * 6FIELD-DISPLACEMENT = 0 BYTES 52022020 * 6FIELD-TYPE = OFFSET 52022120 * 6OFFSET-FROM = SCADV 52022220 * 6OFFSET-LENGTH = 15 BITS 52022320 * 6SIGN = SIGNED 52022420 * 6OFFSET-SCALING = 0 52022520 * 6OFFSET-OF = SCA 52022620 * 7REFERENCE-TYPE = READ 52022720 * 7TYPE-ADDRESSED = TABLE 52022820 * 7PURPOSE = DESCRIBE A POSITIONAL CONTROL ARRAY AND A - 52022920 * SYNTAX CONTROL ARRAY FOR EACH ADMISSIBLE SYNTACTIC - 52023020 * ENVIRONMENT 52023120 * 7SCOPE = INTERNAL 52023220 * 7TABLE-REPLICATION = VARIABLE 52023320 * 7REPLICATION-COUNT = SCADVMX 52023420 * 8COUNT-TYPE = ARITHMETIC 52023520 * 7TABLE-SIZE = 8 BYTES 52023620 * *********************************************************/ 52023720 * /********************************************************* 52023820 * 7FIELD = SCAPD 52023920 * 8REFERENCE-TYPE = READ 52024020 * 8FIELD-DISPLACEMENT = 0 BYTES 52024120 * 8FIELD-TYPE = TABLE 52024220 * 8PURPOSE = DEFINE THE POSITIONAL CONTROL ARRAY FOR - 52024320 * ONE SYNTACTIC ENVIRONMENT 52024420 * 8SCOPE = INTERNAL 52024520 * 8TABLE-SIZE = 4 BYTES 52024620 * *******************************************************/ 52024720 * /******************************************************* 52024820 * 8FIELD = SCAPDO 52024920 * 9REFERENCE-TYPE = READ 52025020 * 9FIELD-DISPLACEMENT = 0 BYTES 52025120 * 9FIELD-TYPE = OFFSET 52025220 * 9OFFSET-FROM = SCADV 52025320 * 9OFFSET-LENGTH = 15 BITS 52025420 * 9SIGN = SIGNED 52025520 * 9OFFSET-SCALING = 0 52025620 * 9OFFSET-OF = PCA 52025720 * 10REFERENCE-TYPE = READ 52025820 * 10TYPE-ADDRESSED = TABLE 52025920 * 10PURPOSE = DEFINE ADMISSIBLE AND INADMISSIBLE - 52026020 * POSITIONAL OPERANDS FOR A SYNTACTIC ENVIRONMENT 52026120 * 10SCOPE = INTERNAL 52026220 * 10TABLE-REPLICATION = VARIABLE 52026320 * 10REPLICATION-COUNT = SCAPDMX 52026420 * 11COUNT-TYPE = ARITHMETIC 52026520 * 10TABLE-SIZE = 4 BYTES 52026620 * ****************************************************/ 52026720 * /**************************************************** 52026820 * 10FIELD = PCAPROC 52026920 * 11REFERENCE-TYPE = READ 52027020 * 11FIELD-DISPLACEMENT = 0 BYTES 52027120 * 11FIELD-TYPE = ARITHMETIC 52027220 * 11MODE = BINARY 52027320 * 11LENGTH = 15 BITS 52027420 * 11SIGN = SIGNED 52027520 * 11SCALING = 0 52027620 * 11VALUE = INDEX OF THE PROCCA ENTRY WHICH POINTS - 52027720 * TO THE OPERAND PROCESSOR WHICH SHOULD BE INVOKED - 52027820 * WHEN THIS POSITIONAL OPERAND IS ENCOUNTERED IN - 52027920 * THE SPECIFIED SYNTACTIC ENVIRONMENT 52028020 * ****************************************************/ 52028120 * /**************************************************** 52028220 * 10FIELD = PCASNO 52028320 * 11REFERENCE-TYPE = READ 52028420 * 11FIELD-DISPLACEMENT = 2 BYTES 52028520 * 11FIELD-TYPE = ARITHMETIC 52028620 * 11MODE = BINARY 52028720 * 11LENGTH = 15 BITS 52028820 * 11SIGN = SIGNED 52028920 * 11SCALING = 0 52029020 * 11VALUE = INDEX OF THE SCA ENTRY WHICH DEFINES - 52029120 * THE SYNTAX FOR THE SUBFIELD OF THE POSITIONAL - 52029220 * OPERAND 52029320 * *******************************************************/ 52029420 * /******************************************************* 52029520 * 8FIELD = SCAPDMX 52029620 * 9REFERENCE-TYPE = READ 52029720 * 9FIELD-DISPLACEMENT = 2 BYTES 52029820 * 9FIELD-TYPE = ARITHMETIC 52029920 * 9MODE = BINARY 52030020 * 9LENGTH = 15 BITS 52030120 * 9SIGN = SIGNED 52030220 * 9SCALING = 0 52030320 * 9VALUE = THE NUMBER OF OPERANDS IN THE POSITIONAL - 52030420 * CONTROL ARRAY FOR THIS SYNTACTIC ENVIRONMENT 52030520 * *********************************************************/ 52030620 * /********************************************************* 52030720 * 7FIELD = SCAKLD 52030820 * 8REFERENCE-TYPE = READ 52030920 * 8FIELD-DISPLACEMENT = 4 BYTES 52031020 * 8FIELD-TYPE = TABLE 52031120 * 8PURPOSE = DESCRIBE A KEYWORD LENGTH CONTROL ARRAY - 52031220 * FOR THIS SYNTACTIC ENVIRONMENT 52031320 * 8SCOPE = INTERNAL 52031420 * 8TABLE-SIZE = 4 BYTES 52031520 * *******************************************************/ 52031620 * /******************************************************* 52031720 * 8FIELD = SCAKLDO 52031820 * 9REFERENCE-TYPE = READ 52031920 * 9FIELD-DISPLACEMENT = 0 BYTES 52032020 * 9FIELD-TYPE = OFFSET 52032120 * 9OFFSET-FROM = SCADV 52032220 * 9OFFSET-LENGTH = 15 BITS 52032320 * 9SIGN = SIGNED 52032420 * 9OFFSET-SCALING = 0 52032520 * 9OFFSET-OF = KLCA 52032620 * 10REFERENCE-TYPE = READ 52032720 * 10TYPE-ADDRESSED = TABLE 52032820 * 10PURPOSE = DESCRIBE KEYWORD CONTROL ARRAYS FOR - 52032920 * KEYWORDS OF EACH ADMISSIBLE LENGTH IN THIS - 52033020 * SYNTACTIC ENVIRONMENT 52033120 * 10SCOPE = INTERNAL 52033220 * 10TABLE-REPLICATION = VARIABLE 52033320 * 10REPLICATION-COUNT = SCAKLDMX 52033420 * 11COUNT-TYPE = ARITHMETIC 52033520 * 10TABLE-SIZE = 4 BYTES 52033620 * ****************************************************/ 52033720 * /**************************************************** 52033820 * 10FIELD = KLCAKCA 52033920 * 11REFERENCE-TYPE = READ 52034020 * 11FIELD-DISPLACEMENT = 0 BYTES 52034120 * 11FIELD-TYPE = OFFSET 52034220 * 11OFFSET-FROM = SCADV 52034320 * 11OFFSET-LENGTH = 15 BITS 52034420 * 11SIGN = SIGNED 52034520 * 11OFFSET-SCALING = 0 52034620 * 11OFFSET-OF = KCA 52034720 * 12REFERENCE-TYPE = READ 52034820 * 12TYPE-ADDRESSED = TABLE 52034920 * 12PURPOSE = DESCRIBE ALL ADMISSIBLE KEYWORDS OF - 52035020 * A SINGLE LENGTH FOR A SYNTACTIC ENVIRONMENT 52035120 * 12SCOPE = INTERNAL 52035220 * 12TABLE-REPLICATION = VARIABLE 52035320 * 12REPLICATION-COUNT = KLCAMX 52035420 * 13COUNT-TYPE = ARITHMETIC 52035520 * 12TABLE-SIZE = VARIABLE 52035620 * 12TERMINATOR = THE LENGTH OF THE KEYWORDS - 52035720 * REPRESENTED IN THIS ARRAY PLUS THE LENGTH OF THE - 52035820 * HEADER 52035920 * **************************************************/ 52036020 * /************************************************** 52036120 * 12FIELD = KCAPROC 52036220 * 13REFERENCE-TYPE = READ 52036320 * 13FIELD-DISPLACEMENT = 0 BYTES 52036420 * 13FIELD-TYPE = ARITHMETIC 52036520 * 13MODE = BINARY 52036620 * 13LENGTH = 15 BITS 52036720 * 13SIGN = SIGNED 52036820 * 13SCALING = 0 52036920 * 13VALUE = INDEX OF THE PROCCA ARRAY WHICH - 52037020 * POINTS TO THE OPERAND PROCESSOR WHICH SHOULD BE - 52037120 * INVOKED WHEN THIS KEYWORD OR AN UNAMBIGUOUS - 52037220 * TRUNCATION OF THE KEYWORD IS ENCOUNTERED IN THE - 52037320 * SPECIFIED SYNTACTIC ENVIRONMENT 52037420 * **************************************************/ 52037520 * /************************************************** 52037620 * 12FIELD = KCASNO 52037720 * 13REFERENCE-TYPE = READ 52037820 * 13FIELD-DISPLACEMENT = 2 BYTES 52037920 * 13FIELD-TYPE = ARITHMETIC 52038020 * 13MODE = BINARY 52038120 * 13LENGTH = 15 BITS 52038220 * 13SIGN = SIGNED 52038320 * 13SCALING = 0 52038420 * 13VALUE = INDEX OF THE SCA ENTRY WHICH - 52038520 * SPECIFIES THE SYNTAX FOR THE SUBFIELD OF THE - 52038620 * KEYWORD 52038720 * **************************************************/ 52038820 * /************************************************** 52038920 * 12FIELD = KCAIMAG 52039020 * 13REFERENCE-TYPE = READ 52039120 * 13FIELD-DISPLACEMENT = 4 BYTES 52039220 * 13FIELD-TYPE = CHARACTER STRING 52039320 * 13LENGTH+MODE = VARIABLE 52039420 * 13TERMINATOR = CALCULATED. EQUAL TO THE INDEX - 52039520 * OF THE KEYWORD LENGTH CONTROL ARRAY ENTRY WHICH - 52039620 * IS USED TO LOCATE THIS KEYWORD CONTROL ARRAY 52039720 * 13STRING-VALUE = THE IMAGE OF THE ADMISSIBLE - 52039820 * KEYWORD 52039920 * ****************************************************/ 52040020 * /**************************************************** 52040120 * 10FIELD = KLCAMX 52040220 * 11REFERENCE-TYPE = READ 52040320 * 11FIELD-DISPLACEMENT = 2 BYTES 52040420 * 11FIELD-TYPE = ARITHMETIC 52040520 * 11MODE = BINARY 52040620 * 11LENGTH = 15 BITS 52040720 * 11SIGN = SIGNED 52040820 * 11SCALING = 0 52040920 * 11VALUE = THE NUMBER OF ENTRIES IN THE KEYWORD - 52041020 * CONTROL ARRAY REFERENCED BY KLCAKCA. THIS IS - 52041120 * ALSO THE LENGTH OF THE LONGEST ADMISSIBLE KEYWORD - 52041220 * IN THIS SYNTACTIC ENVIRONMENT 52041320 * *******************************************************/ 52041420 * /******************************************************* 52041520 * 8FIELD = SCAKLDMN 52041620 * 9REFERENCE-TYPE = READ 52041720 * 9FIELD-DISPLACEMENT = 2 BYTES 52041820 * 9FIELD-TYPE = ARITHMETIC 52041920 * 9MODE = BINARY 52042020 * 9LENGTH = 8 BITS 52042120 * 9SIGN = UNSIGNED 52042220 * 9SCALING = 0 52042320 * 9VALUE = THE INDEX OF THE FIRST ENTRY ACTUALLY - 52042420 * PRESENT IN THE KEYWORD LENGTH CONTROL ARRAY - 52042520 * REFERENCED BY SCAKLDO. THIS IS GENERALLY ALSO THE - 52042620 * LENGTH OF THE SHORTEST ADMISSIBLE KEYWORD IN THIS - 52042720 * SYNTACTIC ENVIRONMENT. 52042820 * *******************************************************/ 52042920 * /******************************************************* 52043020 * 8FIELD = SCAKLDMX 52043120 * 9REFERENCE-TYPE = READ 52043220 * 9FIELD-DISPLACEMENT = 3 BYTES 52043320 * 9FIELD-TYPE = ARITHMETIC 52043420 * 9MODE = BINARY 52043520 * 9LENGTH = 8 BITS 52043620 * 9SIGN = UNSIGNED 52043720 * 9SCALING = 0 52043820 * 9VALUE = INDEX OF THE LAST ENTRY PRESENT IN THE - 52043920 * KEYWORD LENGTH CONTROL ARRAY REFERENCED BY KCAKLDO. - 52044020 * THIS IS ALSO GENERALLY THE LENGTH OF THE LONGEST - 52044120 * ADMISSIBLE KEYWORD IN THIS SYNTACTIC ENVIRONMENT 52044220 * *****************************************************************/ 52044320 * /***************************************************************** 52044420 * 3FIELD = PARMNUM 52044520 * 4REFERENCE-TYPE = READ 52044620 * 4FIELD-DISPLACEMENT = 12 BYTES 52044720 * 4TYPE = ADDRESS 52044820 * 4ADDRESS-LENGTH = 32 BITS 52044920 * 4ADDRESS-SIGN = UNSIGNED 52045020 * 4ADDRESS-OF = NUM 52045120 * 5REFERENCE-TYPE = READ-WRITE 52045220 * 5TYPE-ADDRESSED = TABLE 52045320 * 5PURPOSE = PROVIDE CONTROL DATA FOR IEFVSCAN AND PROVIDE - 52045420 * FOR THE RETURN OF SUMMARY DATA REGARDING THE SCAN 52045520 * 5SCOPE = INTERNAL 52045620 * 5TABLE-SIZE = 12 BYTES 52045720 * *************************************************************/ 52045820 * /************************************************************* 52045920 * 5FIELD = NUMA 52046020 * 6REFERENCE-TYPE = READ-WRITE 52046120 * 6FIELD-DISPLACEMENT = 0 BYTES 52046220 * 6FIELD-TYPE = TABLE 52046320 * 6SCOPE = INTERNAL 52046420 * 6TABLE-SIZE = 8 BYTES 52046520 * ***********************************************************/ 52046620 * /*********************************************************** 52046720 * 6FIELD = NUMLEVEL 52046820 * 7REFERENCE-TYPE = READ-WRITE 52046920 * 7FIELD-DISPLACEMENT = 0 BYTES 52047020 * 7FIELD-TYPE = ARITHMETIC 52047120 * 7MODE = BINARY 52047220 * 7LENGTH = 15 BITS 52047320 * 7SIGN = SIGNED 52047420 * 7SCALING = 0 52047520 * 7VALUE = THE SYNTACTIC LEVEL NUMBER. THIS MAY BE - 52047620 * INITIALIZED TO ANY VALUE UPON ENTRY TO IEFVSCAN; - 52047720 * IEFVSCAN WILL INCREMENT THIS NUMBER BY ONE EACH TIME - 52047820 * THAT A NEW KEYWORD LEVEL IS ENCOUNTERED AND DECREMENT - 52047920 * AGAIN AT THE NORMAL CONCLUSION OF PROCESSING FOR - 52048020 * THAT LEVEL. IF PROCESSING DOES NOT CONCLUDE NORMALLY - 52048120 * AT A LEVEL, THE LEVEL NUMBER OF THAT LEVEL IS RETAINED - 52048220 * AND RETURNED TO THE INVOKER. 52048320 * ***********************************************************/ 52048420 * /*********************************************************** 52048520 * 6FIELD = NUMOPER 52048620 * 7REFERENCE-TYPE = READ-WRITE 52048720 * 7FIELD-DISPLACEMENT = 2 BYTES 52048820 * 7FIELD-TYPE = ARITHMETIC 52048920 * 7MODE = BINARY 52049020 * 7LENGTH = 15 BITS 52049120 * 7SIGN = SIGNED 52049220 * 7SCALING = 0 52049320 * 7VALUE = THE NUMBER OF OPERANDS SCANNED. THIS MAY BE - 52049420 * INITIALIZED TO ANY VALUE UPON ENTRY TO IEFVSCAN; - 52049520 * IEFVSCAN WILL INCREMENT THIS NUMBER BY ONE EACH TINE - 52049620 * THAT A NEW OPERAND IS SCANNED AT THE INPUT SYNTACTIC - 52049720 * LEVEL; THIS WILL ALSO BE DONE, BEGINNING WITH AN - 52049820 * INITIAL VALUE OF ZERO FOR ALL OTHER LEVELS SCANNED. THE - 52049920 * VALUE RETURNED IN THIS FIELD WILL BE THE SUM OF THE - 52050020 * INITIAL VALUE AND THE NUMBER OF OPERANDS ENCOUNTERED AT - 52050120 * THE INPUT SYNTACTIC LEVEL IF PROCESSING COMPLETES - 52050220 * NORMALLY; OTHERWISE, THE NUMBER OF OPERANDS SCANNED - 52050320 * WITHIN THE SUBFIELD UNDER CONSIDERATION WHEN AN - 52050420 * ABNORMAL CONDITION WAS DETECTED WILL BE RETURNED. 52050520 * ***********************************************************/ 52050620 * /*********************************************************** 52050720 * 6FIELD = NUMPOPER 52050820 * 7REFERENCE-TYPE = READ-WRITE 52050920 * 7FIELD-DISPLACEMENT = 4 BYTES 52051020 * 7FIELD-TYPE = ARITHMETIC 52051120 * 7MODE = BINARY 52051220 * 7LENGTH = 15 BITS 52051320 * 7SIGN = SIGNED 52051420 * 7SCALING = 0 52051520 * 7VALUE = THE NUMBER OF POSITIONAL OPERANDS SCANNED. - 52051620 * THIS MAY BE INITIALIZED TO ANY VALUE UPON ENTRY TO - 52051720 * IEFVSCAN; IEFVSCAN WILL INCREMENT THIS NUMBER BY ONE - 52051820 * EACH TIME THAT A NEW POSITIONAL OPERAND IS SCANNED AT - 52051920 * THE INPUT SYNTACTIC LEVEL; THIS WILL ALSO BE DONE, - 52052020 * BEGINNING WITH AN INITIAL VALUE OF ZERO FOR ALL OTHER - 52052120 * LEVELS SCANNED. THE VALUE RETURNED IN THIS FIELD WILL - 52052220 * BE THE SUM OF THE INITIAL VALUE AND THE NUMBER OF - 52052320 * POSITIONAL OPERANDS ENCOUNTERED AT THE INPUT SYNTACTIC - 52052420 * LEVEL IF PROCESSING COMPLETES NORMALLY; OTHERWISE THE - 52052520 * NUMBER OF OPERANDS SCANNED WITHIN THE SUBFIELD UNDER - 52052620 * CONSIDERATION WHEN AN ABNORMAL CONDITION WAS DETECTED - 52052720 * WILL BE RETURNED. 52052820 * ***********************************************************/ 52052920 * /*********************************************************** 52053020 * 6FIELD = NUMSNTX 52053120 * 7REFERENCE-TYPE = READ-WRITE 52053220 * 7FIELD-DISPLACEMENT = 6 BYTES 52053320 * 7FIELD-TYPE = ARITHMETIC 52053420 * 7MODE = BINARY 52053520 * 7LENGTH = 15 BITS 52053620 * 7SIGN = SIGNED 52053720 * 7SCALING = 0 52053820 * 7VALUE = THE SYNTAX NUMBER. THIS MUST BE INITIALIZED TO - 52053920 * THE NUMBER OF THE SYNTAX IEFVSCAN IS TO USE FOR THE - 52054020 * INPUT SYNTACTIC LEVEL AND THE SAME VALUE WILL BE - 52054120 * RETURNED IN THIS FIELD IF PROCESSING CONCLUDES - 52054220 * NORMALLY; OTHERWISE, THE SYNTAX NUMBER BEING USED AT - 52054320 * THE SYNTACTIC LEVEL INDICATED BY NUMLEVEL WILL BE - 52054420 * RETURNED. 52054520 * *************************************************************/ 52054620 * /************************************************************* 52054720 * 5FIELD = NUMB 52054820 * 6REFERENCE-TYPE = READ-WRITE 52054920 * 6FIELD-DISPLACEMENT = 8 BYTES 52055020 * 6FIELD-TYPE = RES: CHOOSE: TABLE=SPC16; 52055120 *1RESUME = RES: CHOOSE: REFETCH=SPC1; 52055220 * 52055320 **** END OF SPECIFICATIONS ***/ 52055420 * GENERATE; 52055520 ** /* 52055620 IEFVSCAN START 0 52055720 ENTRY IEFVSCN1 52055820 SCAN0001 B SCAN0003-SCAN0001(0,R15) BRANCH AROUND IDENTIFIER 52055920 DC AL1(L'SCAN0002) LENGTH OF IDENTIFIER 52056020 SCAN0002 DC C'IEFVSCAN&LUPDAT' ENTRY NAME AND DATE OF LAST UPDATE 52056120 SCAN0003 DS 0H BRANCH TARGET 52056220 AGO .@001 52056320 ** */ 52056420 */*IEFVSCAN: CHART (AMODE,IBM68,NSAVE,NSEQ) */ 52056520 */* HEADER 52056620 */*IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN */ 52056720 */*IEFVSCAN: E MULTIPLE OPERAND SCAN FUNCTION */ 52056820 *IEFVSCAN: PROC/*(BDV, PROCCA, SCADV, NUM, COMM)*/ 52056920 * OPTIONS(REENTRANT, CODEREG(0), DATAREG(0)); 52057020 LCLA &T,&SPN 0003 52057120 .@001 ANOP 0003 52057220 IEFVSCAN CSECT , 0003 52057320 STM @E,@C,12(@D) 0003 52057420 * GENERATE; 52057520 TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- DEFINITIONS OF V52057620 ARIABLES' 52057720 DS 0H 52057820 * 52057920 * 52058020 * 52058120 * 52058220 * /*******************************************************************/ 52058320 * /* DEFINE THE GENERAL PURPOSE REGISTERS */ 52058420 * /*******************************************************************/ 52058520 * DECLARE 52058620 * R0FIXED POINTER(31) REGISTER(0) UNRESTRICTED, 52058720 * /***********************************************************/ 52058820 * /* STANDARD LINKAGE CONVENTION PARAMETER LIST POINTER */ 52058920 * /***********************************************************/ 52059020 * R1PTR24 POINTER(24) REGISTER(1) RESTRICTED, 52059120 * R2FIXED FIXED(31) REGISTER(2) RESTRICTED, 52059220 * R3FIXED FIXED(31) REGISTER(3) RESTRICTED, 52059320 * R4PTR24 POINTER(24) REGISTER(4) RESTRICTED, 52059420 * R5PTR24 POINTER(24) REGISTER(5) RESTRICTED, 52059520 * R6PTR24 POINTER(24) REGISTER(6) RESTRICTED, 52059620 * R7PTR24 POINTER(24) REGISTER(7) UNRESTRICTED, 52059720 * R8 POINTER(31) REGISTER(8) UNRESTRICTED, 52059820 * R9 POINTER(31) REGISTER(9) UNRESTRICTED, 52059920 * R10 POINTER(31) REGISTER(10) UNRESTRICTED, 52060020 * R11 POINTER(31) REGISTER(11) UNRESTRICTED, 52060120 * R12 POINTER(31) REGISTER(12) UNRESTRICTED, 52060220 * /***********************************************************/ 52060320 * /* STANDARD LINKAGE CONVENTION SAVE AREA POINTER */ 52060420 * /***********************************************************/ 52060520 * R13 POINTER(31) REGISTER(13) UNRESTRICTED, 52060620 * /***********************************************************/ 52060720 * /* STANDARD LINKAGE CONVENTION RETURN POINTER */ 52060820 * /***********************************************************/ 52060920 * R14 POINTER(31) REGISTER(14) UNRESTRICTED, 52061020 * /***********************************************************/ 52061120 * /* STANDARD LINKAGE CONVENTION SUBROUTINE ENTRY POINTER */ 52061220 * /***********************************************************/ 52061320 * R15 POINTER(31) REGISTER(15) UNRESTRICTED; 52061420 * 52061520 * /*******************************************************************/ 52061620 * /* DEFINE A SAVE AREA */ 52061720 * /*******************************************************************/ 52061820 * DECLARE 52061920 * 1 SAVEAREA BASED( R13) BOUNDARY( WORD), 52062020 * /***********************************************************/ 52062120 * /* PL/I USES THIS WORD TO INDICATE THE LENGTH OF THE */ 52062220 * /* DYNAMIC STORAGE AREA REPRESENTED BY THIS SAVE AREA */ 52062320 * /***********************************************************/ 52062420 * 2 SAVEWRD1 POINTER(32), 52062520 * 3 SAVEPFLG POINTER(8), 52062620 * 3 SAVEPLGH POINTER(24), 52062720 * /***********************************************************/ 52062820 * /* POINTER TO THE PREVIOUS SAVE AREA, THE SAVE AREA OF */ 52062920 * /* THE INVOKER UNLESS THIS SUBROUTINE PROVIDES NO SAVE */ 52063020 * /* AREA OF ITS OWN */ 52063120 * /***********************************************************/ 52063220 * 2 SAVELAST POINTER(32), 52063320 * /***********************************************************/ 52063420 * /* POINTER TO THE NEXT SAVE AREA FOR ALL BUT THE LOWEST */ 52063520 * /* LEVEL SUBROUTINE ON THE STACK */ 52063620 * /***********************************************************/ 52063720 * 2 SAVENEXT POINTER(32), 52063820 * /***********************************************************/ 52063920 * /* SAVE AREA WORD FOR INPUT REGISTER 14, THE ADDRESS TO */ 52064020 * /* WHICH CONTROL IS NORMALLY TO BE RETURNED AFTER A */ 52064120 * /* SUBROUTINE HAS CONCLUDED PROCESSING. THE HIGH-ORDER */ 52064220 * /* BYTE OF THIS POINTER SHOULD BE SET TO 'FF'X IF THIS */ 52064320 * /* ROUTINE HAS CONTROL AFTER A RETURN HAS BEEN MADE FROM*/ 52064420 * /* A SUBROUTINE. */ 52064520 * /***********************************************************/ 52064620 * 2 SAVER14 POINTER(32), 52064720 * 3 SAVERETF POINTER(8), 52064820 * /***********************************************************/ 52064920 * /* SAVE AREA FOR INPUT REGISTERS 15 THROUGH 12 */ 52065020 * /***********************************************************/ 52065120 * 2 SAVER15 POINTER(32), 52065220 * 2 SAVER0 POINTER(32), 52065320 * 2 SAVER1 POINTER(32), 52065420 * 2 SAVER2 POINTER(32), 52065520 * 2 SAVER3 POINTER(32), 52065620 * 2 SAVER4 POINTER(32), 52065720 * 2 SAVER5 POINTER(32), 52065820 * 2 SAVER6 POINTER(32), 52065920 * 2 SAVER7 POINTER(32), 52066020 * 2 SAVER8 POINTER(32), 52066120 * 2 SAVER9 POINTER(32), 52066220 * 2 SAVER10 POINTER(32), 52066320 * 2 SAVER11 POINTER(32), 52066420 * 2 SAVER12 POINTER(32), 52066520 * /***********************************************************/ 52066620 * /* AREA USED BY PL/I AND BSL FOR TEMPORARY AND AUTOMATIC */ 52066720 * /* STORAGE AREAS */ 52066820 * /***********************************************************/ 52066920 * 2 SAVEXTNT CHARACTER( 8); 52067020 * 52067120 * /*******************************************************************/ 52067220 * /* DEFINE A TYPE I PARAMETER LIST */ 52067320 * /*******************************************************************/ 52067420 * DECLARE 52067520 * 1 PARAM BASED( R1PTR24) BOUNDARY( WORD), 52067620 * 2 PARAM1 POINTER(32), 52067720 * 2 PARAM2 POINTER(32), 52067820 * 2 PARAM3 POINTER(32), 52067920 * 2 PARAM4 POINTER(32), 52068020 * 2 PARAM5 POINTER(32), 52068120 * 2 PARAM6 POINTER(32), 52068220 * 2 PARAM7 POINTER(32), 52068320 * 2 PARAM8 POINTER(32), 52068420 * 2 PARAM9 POINTER(32), 52068520 * 2 PARAM10 POINTER(32), 52068620 * 2 PARAM11 POINTER(32), 52068720 * 2 PARAM12 POINTER(32), 52068820 * 2 PARAM13 POINTER(32), 52068920 * 2 PARAM14 POINTER(32), 52069020 * 2 PARAM15 POINTER(32), 52069120 * 2 PARAM16 POINTER(32), 52069220 * 2 PARAM17 POINTER(32), 52069320 * 2 PARAM18 POINTER(32), 52069420 * 2 PARAM19 POINTER(32), 52069520 * 2 PARAM20 POINTER(32), 52069620 * 2 PARAM21 POINTER(32), 52069720 * 2 PARAM22 POINTER(32), 52069820 * 2 PARAM23 POINTER(32), 52069920 * 2 PARAM24 POINTER(32), 52070020 * 2 PARAM25 POINTER(32), 52070120 * 2 PARAM26 POINTER(32), 52070220 * 2 PARAM27 POINTER(32), 52070320 * 2 PARAM28 POINTER(32), 52070420 * 2 PARAM29 POINTER(32), 52070520 * 2 PARAM30 POINTER(32); 52070620 * 52070720 * /************************************************************/ 52070820 * /* DEFINE AN AUTOMATIC STORAGE IMAGE OF THE PARAMETER */ 52070920 * /* LIST TO IEFVSCAN */ 52071020 * /************************************************************/ 52071120 * DECLARE 52071220 * 1 PARM AUTOMATIC BOUNDARY(WORD), 52071320 * 2 PARMBDV POINTER(31), /* POINTER TO A BUFFER DOPE 52071420 * VECTOR DESCRIBING AN EBCDIC INPUT 52071520 * BUFFER TO BE SCANNED */ 52071620 * 2 PARMPROC POINTER(31), /* POINTER TO A PROCEDURE 52071720 * ARRAY CONSISTING OF HALFWORD OFFSETS 52071820 * TO OPERAND PROCESSORS, THE OFFSETS 52071920 * BEING COMPUTED FROM THE ORIGIN OF 52072020 * THE PROCEDURE CONTROL ARRAY */ 52072120 * 2 PARMSCAD POINTER(31), /* POINTER TO A SYNTAX CON- 52072220 * TROL ARRAY DOPE VECTOR DESCRIBING 52072320 * THE SYNTAX TO WHICH THE BUFFER MUST 52072420 * CONFORM */ 52072520 * 2 PARMNUM POINTER(31), /* POINTER TO A STRUCTURE 52072620 * CONSISTING OF FOUR HALFWORD CURRENT 52072720 * SYNTACTIC LEVEL NUMBER, THE NUMBER 52072820 * OF OPERANDS SCANNED FROM THE LEVEL, 52072920 * THE NUMBER OF POSITIONAL OPERANDS 52073020 * SCANNED FROM THE LEVEL, AND THE 52073120 * INDEX OF THE SYNTAX WHICH APPLIES 52073220 * TO THE CURRENT LEVEL */ 52073320 * 2 PARMCOMM POINTER(31), /* POINTER AVAILABLE TO THE 52073420 * INVOKER OF SCAN FOR COMMUNICATION 52073520 * WITH OPERAND PROCESSORS */ 52073620 * 2 PARMODV POINTER(31); /* ADDITIONAL VARIABLES TO 52073720 * FORM A PARAMETER LIST TO OPERAND 52073820 * PROCESSORS */ 52073920 * 52074020 * 52074120 * /************************************************************/ 52074220 * /* DEFINE A PROCESSOR CONTROL ARRAY */ 52074320 * /************************************************************/ 52074420 * DECLARE 52074520 * PROCCA(32767) BASED(PARMPROC) FIXED(15) BOUNDARY(HWORD); 52074620 * 52074720 * /************************************************************/ 52074820 * /* DEFINE A STRUCTURE CONSISTING OF NUMERIC OPERANDS */ 52074920 * /* DESCRIBING A SYNTACTIC ENVIRONMENT */ 52075020 * /************************************************************/ 52075120 * DECLARE 52075220 * 1 NUM BASED(R6PTR24) BOUNDARY(HWORD), 52075320 * 2 NUMA BOUNDARY(HWORD), 52075420 * 3 NUMLEVEL FIXED(15) BOUNDARY(HWORD), 52075520 * 3 NUMOPER FIXED(15) BOUNDARY(HWORD), 52075620 * 3 NUMPOPER FIXED(15) BOUNDARY(HWORD), 52075720 * 3 NUMSNTX FIXED(15) BOUNDARY(HWORD), 52075820 * 2 NUMB BOUNDARY(HWORD), 52075920 * 3 NUMSCAN FIXED(15) BOUNDARY(HWORD), 52076020 * 3 NUMRCODE FIXED(15) BOUNDARY(HWORD); 52076120 * 52076220 * /************************************************************/ 52076320 * /* DEFINE A STRUCTURE CONSISTING OF NUMERIC OPERANDS */ 52076420 * /* DESCRIBING THE SYNTACTIC ENVIRONMENT IN WHICH THE */ 52076520 * /* NEXT LEVEL OF IEFVSCAN OR IEFVSCN1 WILL BE INVOKED */ 52076620 * /************************************************************/ 52076720 * DECLARE 52076820 * 1 LNUM AUTOMATIC BOUNDARY(HWORD), 52076920 * 2 LNUMA BOUNDARY(HWORD), 52077020 * 3 LNUMLEVL FIXED(15) BOUNDARY(HWORD), 52077120 * 3 LNUMOPER FIXED(15) BOUNDARY(HWORD), 52077220 * 3 LNUMPOPR FIXED(15) BOUNDARY(HWORD), 52077320 * 3 LNUMSNTX FIXED(15) BOUNDARY(HWORD), 52077420 * 2 LNUMB BOUNDARY(HWORD), 52077520 * 3 LNUMSCAN FIXED(15) BOUNDARY(HWORD), 52077620 * 3 LNUMRCOD FIXED(15) BOUNDARY(HWORD); 52077720 * 52077820 * /************************************************************/ 52077920 * /* DEFINE A BUFFER DOPE VECTOR */ 52078020 * /************************************************************/ 52078120 * DECLARE 52078220 * 1 BDV BASED(PARMBDV) BOUNDARY(WORD), 52078320 * 2 BDVBUF POINTER(31), 52078420 * 2 BDVMX POINTER(15), 52078520 * 2 BDVLEN POINTER(15); 52078620 * 52078720 * /************************************************************/ 52078820 * /* DEFINE A LOCAL BUFFER DOPE VECTOR */ 52078920 * /************************************************************/ 52079020 * DECLARE 52079120 * 1 LBDV AUTOMATIC BOUNDARY(WORD), 52079220 * 2 LBDVBUF POINTER(31), 52079320 * 2 LBDVMX POINTER(15), 52079420 * 2 LBDVLEN POINTER(15); 52079520 * 52079620 * /************************************************************/ 52079720 * /* DEFINE AN OPERAND BUFFER DOPE VECTOR */ 52079820 * /************************************************************/ 52079920 * DECLARE 52080020 * 1 ODV AUTOMATIC BOUNDARY(WORD), 52080120 * 2 ODVOPER POINTER(31), 52080220 * 2 ODVMX POINTER(15), 52080320 * 2 ODVLEN POINTER(15); 52080420 * 52080520 * /************************************************************/ 52080620 * /* DEFINE A BUFFER */ 52080720 * /************************************************************/ 52080820 * DECLARE 52080920 * BUFFER CHAR(32767) BASED(BDVBUF) BOUNDARY(BYTE); 52081020 * 52081120 * /************************************************************/ 52081220 * /* DEFINE AN OPERAND */ 52081320 * /************************************************************/ 52081420 * DECLARE 52081520 * OPERAND CHAR(32767) BASED(ODVOPER) BOUNDARY(BYTE); 52081620 * 52081720 * /************************************************************/ 52081820 * /* DEFINE A TRANSLATE AND TEST TABLE FOR SCANNING */ 52081920 * /* BUFFERS CONTAINING DATA IN ASSEMBLER/JCL LANGUAGE */ 52082020 * /* SYNTAX */ 52082120 * /************************************************************/ 52082220 * DECLARE 52082320 * TRTTAB(256) POINTER(8) STATIC BOUNDARY(BYTE) 52082420 * INIT((64)255, /* THE FIRST 64 EBCDIC CODES ARE 52082520 * INVALID CHARACTERS EXCEPT WHEN 52082620 * ENCLOSED WITHIN APOSTROPHES */ 52082720 * 0, /* BLANK GENERATES CHARACTER CODE 1 */ 52082820 * (12)255, /* THE EBCDIC CODES FROM '41'X TO 52082920 * '4C'X ARE INVALID CHARACTERS EXCEPT 52083020 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52083120 * 4, /* LEFT PARENTHESIS GENERATES CHARACTER 52083220 * CODE 4 */ 52083320 * (13)255, /* THE EBCDIC CODES FROM '4E'X TO 52083420 * '5A'X ARE INVALID CHARACTERS EXCEPT 52083520 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52083620 * 0, /* THE DOLLAR SIGN IS A LEGAL, NATIONAL 52083720 * CHARACTER */ 52083820 * 255, /* ASTERISK IS AN INVALID CHARACTER 52083920 * EXCEPT WHEN ENCLOSED WITHIN 52084020 * APOSTROPHES */ 52084120 * 5, /* RIGHT PARENTHESIS GENERATES CHAR- 52084220 * ACTER CODE 5 */ 52084320 * (13)255, /* THE EBCDIC CODES FROM '5E'X TO 52084420 * '6A'X ARE INVALID CHARACTERS EXCEPT 52084520 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52084620 * 2, /* COMMA GENERATES CHARACTER CODE 2 */ 52084720 * (15)255, /* THE EBCDIC CODES FROM '6C'X TO 52084820 * '7A'X ARE INVALID CHARACTERS EXCEPT 52084920 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52085020 * 0, /* THE POUND SIGN IS A LEGAL, NATIONAL 52085120 * CHARACTER */ 52085220 * 0, /* THE 'AT SIGN' IS A LEGAL, NATIONAL 52085320 * CHARACTER */ 52085420 * 6, /* APOSTROPHE GENERATES CHARACTER 52085520 * CODE 6 */ 52085620 * 3, /* THE EQUAL SIGN GENERATES CHARACTER 52085720 * CODE 3 */ 52085820 * (66)255, /* THE EBCDIC CODES FROM '7F'X TO 52085920 * 'C0'X ARE INVALID CHARACTERS EXCEPT 52086020 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52086120 * (9)0, /* 'A' THROUGH 'I' ARE LEGAL CHAR- 52086220 * ACTERS */ 52086320 * (7)255, /* THE EBCDIC CODES FROM 'CA'X TO 52086420 * 'D0'X ARE ILLEGAL CHARACTERS EXCEPT 52086520 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52086620 * (9)0, /* 'J' THROUGH 'R' ARE LEGAL CHAR- 52086720 * ACTERS */ 52086820 * (8)255, /* THE EBCDIC CODES FROM 'DA'X TO 52086920 * 'E1'X ARE ILLEGAL CHARACTERS EXCEPT 52087020 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52087120 * (8)0, /* 'S' THROUGH 'Z' ARE LEGAL CHAR- 52087220 * ACTERS */ 52087320 * (6)255, /* THE EBCDIC CODES FROM 'EA'X TO 52087420 * 'EF'X ARE ILLEGAL CHARACTERS EXCEPT 52087520 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52087620 * (10)0, /* '0' THROUGH '9' ARE LEGAL CHAR- 52087720 * ACTERS */ 52087820 * (6)255); /* THE EBCDIC CODES FROM 'FA'X TO 52087920 * 'FF'X ARE ILLEGAL CHARACTERS EXCEPT 52088020 * WHEN ENCLOSED WITHIN APOSTROPHES */ 52088120 * 52088220 * /************************************************************/ 52088320 * /* DEFINE A SYNTAX CONTROL ARRAY DOPE VECTOR */ 52088420 * /************************************************************/ 52088520 * DECLARE 52088620 * 1 SCADV BASED(PARMSCAD) BOUNDARY(HWORD), 52088720 * 2 SCADVSCA POINTER(15), 52088820 * 2 SCADVMX POINTER(15); 52088920 * 52089020 * /************************************************************/ 52089120 * /* DEFINE A SYNTAX CONTROL ARRAY */ 52089220 * /************************************************************/ 52089320 * DECLARE 52089420 * 1 SCA(32767) BASED(R5PTR24) BOUNDARY(HWORD), 52089520 * /* ADDR(SCADV) + SCADVSCA */ 52089620 * 2 SCAPD BOUNDARY(HWORD), /* SYNTAX CONTROL ARRAY 52089720 * POSITIONAL OPERAND ARRAY DOPE 52089820 * VECTOR */ 52089920 * 3 SCAPDO FIXED(15) BOUNDARY(HWORD), /* OFFSET OF 52090020 * A POSITIONAL OPERAND CONTROL ARRAY 52090120 * FROM THE SYNTAX CONTROL ARRAY DOPE 52090220 * VECTOR */ 52090320 * 3 SCAPDMX POINTER(15) BOUNDARY(HWORD), /* MAXI- 52090420 * MUM INDEX INTO THE POSITIONAL OPER- 52090520 * AND CONTROL ARRAY. IF THIS INDEX 52090620 * IS ZERO, NO POSITIONAL OPERANDS ARE 52090720 * SUPPORTED. IF IT IS NON-ZERO AND THE 52090820 * LAST POSITIONAL PROCESSOR CODE IN THE 52090920 * POSITIONAL OPERAND CONTROL ARRAY IS 52091020 * ZERO, EXACTLY THAT NUMBER OF POSI- 52091120 * TIONAL OPERANDS ARE SUPPORTED BY THE 52091220 * SYNTAX. IF THE INDEX IS NON-ZERO AND 52091320 * THE LAST POSITIONAL PROCESSOR CODE IN 52091420 * THE POSITIONAL OPERAND CONTROL ARRAY 52091520 * IS NON-ZERO, THE FINAL POSITIONAL 52091620 * OPERAND PROCESSOR WILL BE INVOKED FOR 52091720 * ALL POSITIONAL OPERANDS FOLLOWING THE 52091820 * LAST ONE FOR WHICH A PROCESSOR IS 52091920 * EXPLICITLY SPECIFIED */ 52092020 * 2 SCAKLD BOUNDARY(HWORD), /* SYNTAX CONTROL ARRAY 52092120 * KEYWORD OPERAND LENGTH CONTROL ARRAY 52092220 * DOPE VECTOR */ 52092320 * 3 SCAKLDO FIXED(15) BOUNDARY(HWORD), /* OFFSET 52092420 * OF THE LOGICAL ORIGIN OF A KEYWORD 52092520 * LENGTH CONTROL ARRAY FROM THE 52092620 * SYNTAX CONTROL ARRAY DOPE VECTOR */ 52092720 * 3 SCAKLDMN POINTER(8) BOUNDARY(BYTE), /* MINIMUM 52092820 * KEYWORD LENGTH */ 52092920 * 3 SCAKLDMX POINTER(8) BOUNDARY(BYTE); /* MINIMUM 52093020 * KEYWORD LENGTH */ 52093120 * 52093220 * /************************************************************/ 52093320 * /* DEFINE A SINGLE ELEMENT IN THE SYNTAX CONTROL ARRAY */ 52093420 * /************************************************************/ 52093520 * DECLARE 52093620 * 1 SCEPTR POINTER(31) AUTOMATIC, 52093720 * 1 SCE BASED(SCEPTR) BOUNDARY(HWORD), 52093820 * 2 SCEPD BOUNDARY(HWORD), 52093920 * 3 SCEPDO FIXED(15) BOUNDARY(HWORD), 52094020 * 3 SCEPDMX POINTER(15) BOUNDARY(HWORD), 52094120 * 2 SCEKLD BOUNDARY(HWORD), 52094220 * 3 SCEKLDO FIXED(15) BOUNDARY(HWORD), 52094320 * 3 SCEKLDMN POINTER(8) BOUNDARY(BYTE), 52094420 * 3 SCEKLDMX POINTER(8) BOUNDARY(BYTE); 52094520 * 52094620 * /************************************************************/ 52094720 * /* DEFINE A BASED STRUCTURE TO MAP AN OPTIONS POSITIONAL */ 52094820 * /* CONTROL ARRAY */ 52094920 * /************************************************************/ 52095020 * DECLARE 52095120 * 1 PCA(32767) BASED(R1PTR24) BOUNDARY(BYTE), 52095220 * /* (ADDR(SCADV) + SCAPDO(I)) */ 52095320 * 2 PCAPROC POINTER(15) BOUNDARY(BYTE), /* CODE REPRE- 52095420 * SENTING THE PROCESSOR TO HANDLE THE 52095520 * POSITIONAL OPERAND */ 52095620 * 2 PCASNO POINTER(15) BOUNDARY(BYTE); /* CODE REPRE- 52095720 * SENTING THE PREPROCESSOR TO HANDLE 52095820 * THE OPERAND VALUE VALIDITY CHECKING*/ 52095920 * 52096020 * /************************************************************/ 52096120 * /* DEFINE A BASED STRUCTURE TO MAP AN OPTIONS KEYWORD */ 52096220 * /* LENGTH CONTROL ARRAY */ 52096320 * /************************************************************/ 52096420 * DECLARE 52096520 * 1 KLCA(32767) BASED(R1PTR24) BOUNDARY(HWORD), 52096620 * /* (ADDR(SCADV) + SCAKLCA(I)) */ 52096720 * 2 KLCAKCA FIXED(15) BOUNDARY(HWORD), /* OFFSET OF A 52096820 * KEYWORD CONTROL ARRAY FROM THE 52096920 * ORIGIN OF THE SYNTAX CONTROL ARRAY 52097020 * DOPE VECTOR */ 52097120 * 2 KLCAMX POINTER(15) BOUNDARY(HWORD); /* NUMBER OF 52097220 * KEYWORDS OF THIS LENGTH */ 52097320 * 52097420 * /************************************************************/ 52097520 * /* DEFINE A BASED STRUCTURE MAPPING A SINGLE ELEMENT IN */ 52097620 * /* AN OPTIONS KEYWORD CONTROL ARRAY. */ 52097720 * /* NOTE: AN ACTUAL ENTRY IN A KEYWORD CONTROL ARRAY */ 52097820 * /* FOR KEYWORDS OF LENGTH = N WILL BE N+4 BYTES IN */ 52097920 * /* LENGTH RATHER THAN THE NUMBER OF BYTES MAPPED HERE*/ 52098020 * /* FOR THIS REASON ALL COMPUTATION OF ARRAY INDICES */ 52098120 * /* IS HANDLED EXPLICITLY IN LINE. */ 52098220 * /************************************************************/ 52098320 * DECLARE 52098420 * 1 KCA BASED(R4PTR24) BOUNDARY(BYTE),/* (DYNAMIC) */ 52098520 * 2 KCAPROC POINTER(15) BOUNDARY(BYTE), /* CODE REPRE- 52098620 * SENTING THE PROCESSOR TO HANDLE THE 52098720 * KEYWORD OPERAND */ 52098820 * 2 KCASNO POINTER(15) BOUNDARY(BYTE), /* CODE REPRE- 52098920 * SENTING THE PREPROCESSOR TO HANDLE 52099020 * THE OPERAND VALUE VALIDITY CHECKING*/ 52099120 * 2 KCAIMAG CHAR(32767) BOUNDARY(BYTE); /* KEYWORD 52099220 * IMAGE */ 52099320 * 52099420 * 52099520 * /************************************************************/ 52099620 * /* DEFINE AN OPERAND PROCESSOR */ 52099720 * /************************************************************/ 52099820 * DECLARE 52099920 * OPERPROC BASED(R15) ENTRY; 52100020 * 52100120 * /************************************************************/ 52100220 * /* DEFINE THE ENTRY POINTS TO IEFVSCAN AND THE ENTRY */ 52100320 * /* POINTS FOR INTERNAL FUNCTIONS */ 52100420 * /************************************************************/ 52100520 * DECLARE 52100620 * SCAN BASED(R15) ENTRY, /* BASED ENTRY NAME USED TO INVOKE 52100720 * IEFVSCAN */ 52100820 * IEFVSCN1 STATIC GENERATED ENTRY, /* ENTRY POINT TO SCAN A 52100920 * SINGLE OPERAND AT A LEVEL */ 52101020 * SCN10003 STATIC LOCAL ENTRY INTERNAL, /* ENTRY POINT DEFINED 52101120 * TO BSL FOR ENTRY IEFVSCN1 */ 52101220 * SCN1 BASED(R15) ENTRY, /* BASED ENTRY NAME USED TO INVOKE 52101320 * IEFVSCN1 */ 52101420 * PROLOGUE STATIC LOCAL ENTRY INTERNAL, /* INTERNAL INITIALI- 52101520 * ZATION FUNCTION */ 52101620 * DELIMIT STATIC LOCAL ENTRY INTERNAL, /* INTERNAL FUNCTION TO 52101720 * LOCATE A DELIMITER */ 52101820 * UPDATREG STATIC LOCAL ENTRY INTERNAL; /* INTERNAL FUNCTION TO 52101920 * UPDATE THE GENERAL REGISTERS USED 52102020 * WITHIN THE OPERAND SCAN FUNCTION */ 52102120 * 52102220 * /************************************************************/ 52102320 * /* DEFINE THE LABEL VARIABLES WHICH APPEAR WITHIN THE */ 52102420 * /* MODULE */ 52102520 * /************************************************************/ 52102620 * DECLARE 52102720 * SCAN0001 STATIC GENERATED LABEL INTERNAL, 52102820 * SCAN0002 STATIC GENERATED LABEL INTERNAL, 52102920 * SCAN0003 STATIC GENERATED LABEL INTERNAL, 52103020 * SCAN0200 STATIC LOCAL LABEL INTERNAL, 52103120 * SCAN0400 STATIC LOCAL LABEL INTERNAL, 52103220 * SCN10001 STATIC GENERATED LABEL INTERNAL, 52103320 * SCN10002 STATIC GENERATED LABEL INTERNAL, 52103420 * SCN10020 STATIC LOCAL LABEL INTERNAL, 52103520 * SCN10040 STATIC LOCAL LABEL INTERNAL, 52103620 * SCN10060 STATIC LOCAL LABEL INTERNAL, 52103720 * SCN10080 STATIC GENERATED LABEL INTERNAL, 52103820 * SCN10100 STATIC LOCAL LABEL INTERNAL, 52103920 * SCN11100 STATIC LOCAL LABEL INTERNAL, 52104020 * SCN12100 STATIC LOCAL LABEL INTERNAL, 52104120 * SCN12120 STATIC LOCAL LABEL INTERNAL, 52104220 * SCN12140 STATIC LOCAL LABEL INTERNAL, 52104320 * SCN12160 STATIC LOCAL LABEL INTERNAL, 52104420 * SCN12180 STATIC LOCAL LABEL INTERNAL, 52104520 * SCN12200 STATIC LOCAL LABEL INTERNAL, 52104620 * SCN12220 STATIC LOCAL LABEL INTERNAL, 52104720 * SCN12240 STATIC LOCAL LABEL INTERNAL, 52104820 * SCN12242 STATIC LOCAL LABEL INTERNAL, 52104920 * SCN12244 STATIC LOCAL LABEL INTERNAL, 52105020 * SCN12248 STATIC LOCAL LABEL INTERNAL, 52105120 * SCN12252 STATIC LOCAL LABEL INTERNAL, 52105220 * SCN12256 STATIC LOCAL LABEL INTERNAL, 52105320 * SCN12260 STATIC LOCAL LABEL INTERNAL, 52105420 * SCN12264 STATIC LOCAL LABEL INTERNAL, 52105520 * SCN12272 STATIC LOCAL LABEL INTERNAL, 52105620 * SCN12276 STATIC LOCAL LABEL INTERNAL, 52105720 * SCN12300 STATIC LOCAL LABEL INTERNAL, 52105820 * SCN12320 STATIC LOCAL LABEL INTERNAL, 52105920 * SCN12340 STATIC LOCAL LABEL INTERNAL, 52106020 * SCN12360 STATIC LOCAL LABEL INTERNAL, 52106120 * SCN12380 STATIC GENERATED LABEL INTERNAL, 52106220 * SCN12400 STATIC LOCAL LABEL INTERNAL, 52106320 * SCN12420 STATIC LOCAL LABEL INTERNAL, 52106420 * SCN12430 STATIC LOCAL LABEL INTERNAL, 52106520 * SCN12440 STATIC GENERATED LABEL INTERNAL, 52106620 * SCN12500 STATIC LOCAL LABEL INTERNAL, 52106720 * SCN12510 STATIC LOCAL LABEL INTERNAL, 52106820 * SCN12520 STATIC LOCAL LABEL INTERNAL, 52106920 * SCN12540 STATIC LOCAL LABEL INTERNAL, 52107020 * SCN12560 STATIC LOCAL LABEL INTERNAL, 52107120 * SCN12600 STATIC LOCAL LABEL INTERNAL, 52107220 * SCN13100 STATIC LOCAL LABEL INTERNAL, 52107320 * SCN13120 STATIC LOCAL LABEL INTERNAL, 52107420 * SCN13140 STATIC LOCAL LABEL INTERNAL, 52107520 * SCN14100 STATIC LOCAL LABEL INTERNAL, 52107620 * SCN14140 STATIC LOCAL LABEL INTERNAL, 52107720 * SCN14160 STATIC LOCAL LABEL INTERNAL, 52107820 * SCN14180 STATIC GENERATED LABEL INTERNAL, 52107920 * SCN14200 STATIC LOCAL LABEL INTERNAL, 52108020 * SCN14220 STATIC LOCAL LABEL INTERNAL, 52108120 * SCN14240 STATIC LOCAL LABEL INTERNAL, 52108220 * SCN14260 STATIC LOCAL LABEL INTERNAL, 52108320 * SCN14280 STATIC LOCAL LABEL INTERNAL, 52108420 * SCN14300 STATIC LOCAL LABEL INTERNAL, 52108520 * SCN14320 STATIC LOCAL LABEL INTERNAL, 52108620 * SCN14360 STATIC LOCAL LABEL INTERNAL, 52108720 * SCN15100 STATIC LOCAL LABEL INTERNAL, 52108820 * SCN15150 STATIC LOCAL LABEL INTERNAL, 52108920 * SCN15200 STATIC LOCAL LABEL INTERNAL, 52109020 * SCN15250 STATIC LOCAL LABEL INTERNAL, 52109120 * SCN16100 STATIC LOCAL LABEL INTERNAL, 52109220 * SCN16150 STATIC LOCAL LABEL INTERNAL, 52109320 * SCN16200 STATIC LOCAL LABEL INTERNAL, 52109420 * SCN16300 STATIC LOCAL LABEL INTERNAL, 52109520 * SCN16400 STATIC LOCAL LABEL INTERNAL, 52109620 * SCN16500 STATIC LOCAL LABEL INTERNAL, 52109720 * SCN1R000 STATIC LOCAL LABEL INTERNAL, 52109820 * SCN1R004 STATIC LOCAL LABEL INTERNAL, 52109920 * SCN1R008 STATIC LOCAL LABEL INTERNAL, 52110020 * SCN1R00C STATIC LOCAL LABEL INTERNAL, 52110120 * SCN1R010 STATIC LOCAL LABEL INTERNAL, 52110220 * SCN1R400 STATIC LOCAL LABEL INTERNAL, 52110320 * SCN1R404 STATIC LOCAL LABEL INTERNAL, 52110420 * SCN1R408 STATIC LOCAL LABEL INTERNAL, 52110520 * SCN1R40C STATIC LOCAL LABEL INTERNAL, 52110620 * SCN1RSCN STATIC LOCAL LABEL INTERNAL, 52110720 * SCN1RC STATIC LOCAL LABEL INTERNAL; 52110820 * 52110920 * RESTRICT(R1PTR24, R2FIXED, R3FIXED, R4PTR24, R5PTR24, R6PTR24, 52111020 *R12); /* RESERVE SEVERAL 52111120 * REGISTERS FOR EXPLICIT CODE 52111220 * REFERENCES */ 52111320 * GENERATE; 52111420 TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- MULTIPLE OPERA N52111520 D SCAN FUNCTION' 52111620 DS 0H 52111720 * R12 = R15; /* ESTABLISH ADDRESSIBILITY FOR ENTRY 52111820 * POINT IEFVSCAN */ 52111920 LR @C,@F 0029 52112020 * GENERATE(USING IEFVSCAN,R12 TELL THE ASSEMBLER); 52112120 USING IEFVSCAN,R12 TELL THE ASSEMBLER 52112220 DS 0H 52112320 * 52112420 */* S PROLOGUE: COMMON INITIALIZATION */ 52112520 * 52112620 * CALL PROLOGUE; /* PERFORM INITIALIZATION COMMON TO 52112720 * IEFVSCAN AND IEFVSCN1 ENTRY POINTS */ 52112820 BAL @E,PROLOGUE 0031 52112920 * GENERATE(USING @DATD,R13 TELL THE ASSEMBLER); /* THE 52113020 * PROLOGUE FUNCTION HAS NOW ESTAB- 52113120 * LISHED ADDRESSIBILITY TO THE DYNAMIC 52113220 * SAVE AREA THROUGH REGISTER 13 */ 52113320 USING @DATD,R13 TELL THE ASSEMBLER 52113420 DS 0H 52113520 * 52113620 */* M IEFVSCAN INITIALIZATION */ 52113720 * 52113820 * R5PTR24 = PARMBDV; /* SET THE BUFFER DOPE VECTOR POINTER 52113920 * TO THE ADDRESS OF THE INPUT BUFFER 52114020 * DOPE VECTOR */ 52114120 L @5,PARM 0033 52114220 * RESPECIFY BDV BASED(R5PTR24);/* IN THIS PORTION OF THE MODULE 52114320 * THE BUFFER DOPE VECTOR SHOULD BE 52114420 * LOCATED USING THE BUFFER DOPE 52114520 * VECTOR POINTER */ 52114620 * PARMBDV = ADDR(LBDV); /* SET THE PARAMETER LIST POINTER TO 52114720 * THE BUFFER DOPE VECTOR TO POINT TO 52114820 * THE LOCAL BUFFER DOPE VECTOR */ 52114920 LA @F,LBDV 0035 52115020 ST @F,PARM 0035 52115120 * R1PTR24 = ADDR(PARM); /* SET REGISTER 1 TO POINT TO THE 52115220 * LOCAL COPY OF THE PARAMETER LIST */ 52115320 LA @1,PARM 0036 52115420 * 52115520 */*SCAN0200: S IEFVSCN1: SCAN NEXT OPERAND */ 52115620 *SCAN0200: 52115720 * R15 = ADDR(IEFVSCN1); /* INVOKE IEFVSCN1 PASSING THAT 52115820 * PARAMETER LIST */ 52115920 SCAN0200 LA @F,IEFVSCN1 0037 52116020 * CALL SCN1; /* (LBDV, PROCCA, SCADV, NUM, COMM) */ 52116120 BALR @E,@F 0038 52116220 * R3FIXED = R15; /* SAVE IEFVSCN1 RETURN CODE AS THE 52116320 * SCAN CODE */ 52116420 LR @3,@F 0039 52116520 * 52116620 */* D (YES,SCAN0400,NO,SCN1RSCN) IEFVSCN1 RETURN CODE = 4 */ 52116720 * 52116820 * /************************************************************/ 52116920 * /* CONTINUE PROCESSING ACCORDING TO THE RETURN CODE */ 52117020 * /* RECEIVED FROM IEFVSCN1 */ 52117120 * /************************************************************/ 52117220 * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/ 52117320 * /* IF THE RETURN CODE WAS NOT EQUAL TO 4, SET THE RETURN */ 52117420 * /* CODE EQUAL TO THE RETURN CODE RETURNED BY IEFVSCN1. */ 52117520 * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/ 52117620 * IF R3FIXED ^= 4 52117720 * THEN 52117820 CH @3,@D1 0040 52117920 * GO TO SCN1RSCN; /* RETURN TO THE INVOKER WITH A RETURN 52118020 * CODE EQUAL TO THE SCAN CODE */ 52118120 BC 07,SCN1RSCN 0041 52118220 * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/ 52118320 * /* IF THE RETURN CODE WAS PRECISELY 4, ITERATE THE CALL */ 52118420 * /* TO IEFVSCN1 */ 52118520 * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/ 52118620 * 52118720 */*SCAN0400: P (,SCAN0200) 52118820 */* LBUFFER = SUBSTR( LBUFFER, NUMSCAN) */ 52118920 * 52119020 * ELSE 52119120 *SCAN0400: DO; 52119220 * /*******************************************************/ 52119320 * /* UPDATE THE LOCAL BUFFER DOPE VECTOR TO REFLECT */ 52119420 * /* THE UNSCANNED PORTION OF THE BUFFER */ 52119520 * /*******************************************************/ 52119620 * LBDVBUF = BDVBUF + NUMSCAN; /* THE ORIGIN OF THE BUF- 52119720 * FER IS THE ORIGINAL ORIGIN PLUS 52119820 * THE NUMBER OF BYTES WHICH HAVE 52119920 * BEEN SCANNED */ 52120020 SCAN0400 LH @F,8(0,@6) 0043 52120120 A @F,0(0,@5) 0043 52120220 ST @F,LBDV 0043 52120320 * LBDVLEN = BDVLEN - NUMSCAN; /* THE LENGTH OF THE BUFFER 52120420 * IS THE ORIGINAL LENGTH MINUS THE 52120520 * NUMBER OF BYTES WHICH HAVE BEEN 52120620 * SCANNED */ 52120720 LH @F,8(0,@6) 0044 52120820 LCR @F,@F 0044 52120920 AH @F,6(0,@5) 0044 52121020 STH @F,LBDV+6 0044 52121120 * LBDVMX = LBDVLEN; /* THE BUFFER PASSED TO IEFVSCN1 NEXT 52121220 * SHOULD CONTAIN ONLY THOSE BYTES 52121320 * WHICH HAVE NOT YET BEEN SCANNED. */ 52121420 MVC LBDV+4(2),LBDV+6 0045 52121520 * GO TO SCAN0200; /* ITERATE THE CALL TO IEFVSCN1 */ 52121620 BC 15,SCAN0200 0046 52121720 * END SCAN0400; 52121820 */*IEFVSCN1: E SINGLE OPERAND SCAN FUNCTION */ 52121920 * 52122020 * /************************************************************/ 52122120 * /* PRODUCE AN IDENTIFIER FOR ENTRY POINT IEFVSCN1 */ 52122220 * /************************************************************/ 52122320 * GENERATE; 52122420 ** /* 52122520 TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- SINGLE OPERAND S52122620 CAN FUNCTION' 52122720 IEFVSCN1 DS 0H SINGLE OPERAND SCAN ENTRY POINT 52122820 SCN10001 B SCN10003-SCN10001(0,R15) BRANCH AROUND IDENTIFIER 52122920 DC AL1(L'SCN10002) LENGTH OF IDENTIFIER 52123020 SCN10002 DC C'IEFVSCN1&LUPDAT' IDENTIFIER 52123120 ** */ 52123220 DS 0H 52123320 BC 15,@9FF 0049 52123420 *SCN10003:/***********************************************************/ 52123520 */* ENTRY POINT IEFVSCN1 */ 52123620 */********************************************************************/ 52123720 * ENTRY; /* (BDV, PROCCA, SCADV, NUM, COMM) */ 52123820 SCN10003 STM @E,@C,12(@D) 0049 52123920 @9FF EQU * 0049 52124020 * RELEASE(R5PTR24); /* ALLOW IMPLICIT USE OF REGISTER 5 */ 52124120 * RESPECIFY BDV BASED(PARMBDV); /* IN THIS PORTION OF THE MOD- 52124220 * ULE THE BUFFER DOPE VECTOR SHOULD 52124320 * BE LOCATED USING REGISTER 5. */ 52124420 * /************************************************************/ 52124520 * /* ESTABLISH ADDRESSIBILITY FOR ENTRY POINT IEFVSCN1 */ 52124620 * /************************************************************/ 52124720 * GENERATE; 52124820 DROP R12,R13 INDICATE REGISTERS 12 AND 13 NOT VALID 52124920 LR R12,R15 LOAD ADDRESS OF IEFVSCN1 52125020 LA R15,IEFVSCN1-IEFVSCAN LOAD OFFSET OF IEFVSCN1 52125120 SR R12,R15 ESTABLISH IEFVSCAN ADDRESS AS BASE 52125220 USING IEFVSCAN,R12 TELL THE ASSEMBLER 52125320 DS 0H 52125420 * 52125520 */* S PROLOGUE: COMMON INITIALIZATION */ 52125620 * 52125720 * CALL PROLOGUE; /* PERFORM INITIALIZATION COMMON TO 52125820 * IEFVSCAN AND IEFVSCN1 ENTRY POINTS */ 52125920 BAL @E,PROLOGUE 0053 52126020 * GENERATE(USING @DATD,R13 TELL THE ASSEMBLER); /* THE 52126120 * PROLOGUE FUNCTION HAS NOW ESTAB- 52126220 * LISHED ADDRESSIBILITY TO THE DYNAMIC 52126320 * SAVE AREA THROUGH REGISTER 13 */ 52126420 USING @DATD,R13 TELL THE ASSEMBLER 52126520 DS 0H 52126620 * 52126720 */* M DBUF1 = BUFFER */ 52126820 * 52126920 * /************************************************************/ 52127020 * /* INITIALIZE REGISTERS FOR OPERAND LOCATION */ 52127120 * /************************************************************/ 52127220 * R4PTR24 = LBDVBUF; /* DELIMITER BUFFER POINTER 1 CONTAINS 52127320 * THE ADDRESS OF THE BUFFER SEGMENT 52127420 * BEING SCANNED. THIS IS INITIALLY 52127520 * THE ADDRESS OF THE BUFFER */ 52127620 L @4,LBDV 0055 52127720 * R3FIXED = LBDVLEN - 1; /* DELIMITER BUFFER RESIDUE 1 52127820 * CONTAINS THE LENGTH OF THE REMAINING 52127920 * BUFFER MINUS 1 (TO FACILITATE ITS 52128020 * USE IN SYSTEM/360 INSTRUCTIONS). 52128120 * THIS VARIABLE IS INITIALLY SET TO 52128220 * THE LENGTH OF THE BUFFER MINUS 1. */ 52128320 LH @3,@D2 0056 52128420 AH @3,LBDV+6 0056 52128520 * 52128620 */* M OPERAND = DBUF1 */ 52128720 * 52128820 * ODVOPER = R4PTR24; /* THE FIRST CHARACTER OF THE NEXT 52128920 * OPERAND SHOULD BE THE FIRST CHARAC- 52129020 * TER OF THE BUFFER */ 52129120 ST @4,ODV 0057 52129220 * 52129320 */*SCN10020: S DELIMIT: LOCATE NEXT DELIMITER CHARACTER */ 52129420 *SCN10020: 52129520 * CALL DELIMIT; /* INVOKE THE DELIMIT INTERNAL SUBROU- 52129620 * TINE TO LOCATE THE NEXT DELIMITER */ 52129720 SCN10020 BAL @E,DELIMIT 0058 52129820 * 52129920 */*SCN10040: D (YES,SCN1R40C,NO,SCN10060) 52130020 */* CHARACTER CODE = INVALID */ 52130120 * 52130220 *SCN10040:/***********************************************************/ 52130320 * /* USE A BRANCH TABLE UNLESS A HIGH CODE WAS OBTAINED FROM*/ 52130420 * /* THE TRANSLATE AND TEST INSTRUCTION. IN THAT CASE SET A */ 52130520 * /* RETURN CODE OF 1036 AND RETURN TO THE INVOKER. */ 52130620 * /************************************************************/ 52130720 * IF R2FIXED > 6 52130820 * THEN 52130920 SCN10040 CH @2,@D3 0059 52131020 * GO TO SCN1R40C; /* SET THE RETURN CODE TO 1036 AND 52131120 * RETURN TO THE INVOKER */ 52131220 BC 02,SCN1R40C 0060 52131320 * 52131420 */*SCN10060: D (00,SCN10100,01,SCN11100,02,SCN12100, 52131520 */* 03,SCN13100,04,SCN14100,05,SCN15100, 52131620 */* 06,SCN16100) 52131720 */* GO TO PROCESSOR(CHARACTER CODE) */ 52131820 * 52131920 * ELSE 52132020 *SCN10060: DO; 52132120 * R2FIXED = R2FIXED * 4; /* SET REGISTER 2 FOR USE 52132220 * AS AN INDEX INTO A BRANCH TABLE */ 52132320 SCN10060 SLA @2,2 0062 52132420 * /* CHARACTER CODE LESS THAN CODELUB. USE A BRANCH TABLE 52132520 * TO INVOKE THE APPROPRIATE PROCESSOR, GIVEN THE LAST 52132620 * CHARACTER CODE OBTAINED */ 52132720 * GENERATE; 52132820 B SCN10080(R2FIXED) INVOKE APPROPRIATE PROCESSOR 52132920 SCN10080 B SCN10100 CHARACTER CODE 0 PROCESSOR 52133020 B SCN11100 CHARACTER CODE 1 PROCESSOR 52133120 B SCN12100 CHARACTER CODE 2 PROCESSOR 52133220 B SCN13100 CHARACTER CODE 3 PROCESSOR 52133320 B SCN14100 CHARACTER CODE 4 PROCESSOR 52133420 B SCN15100 CHARACTER CODE 5 PROCESSOR 52133520 B SCN16100 CHARACTER CODE 6 PROCESSOR 52133620 DS 0H 52133720 * END SCN10060; 52133820 */*SCN10100: P (,SCN12120) 52133920 */* DELIMITER CODE = 0 */ 52134020 *SCN10100: 52134120 * GO TO SCN12120; /* END OF BUFFER ENCOUNTERED WITHOUT 52134220 * LOCATING A DELIMITER CHARACTER. 52134320 * SIMULATE LOCATING A CODE 1 CHARACTER 52134420 * IN THE BYTE DIRECTLY FOLLOWING THE 52134520 * BUFFER. */ 52134620 BC 15,SCN12120 0065 52134720 */*SCN11100: P (,SCN12120) 52134820 */* DELIMITER CODE = 0 */ 52134920 * 52135020 *SCN11100:/***********************************************************/ 52135120 * /* A CODE 1 CHARACTER ENCOUNTERED. SET THE DELIMITER */ 52135220 * /* CODE TO 0 AND PROCESS THE OPERAND. SIMPLY DROP THROUGH */ 52135320 * /* TO SCN12100 */ 52135420 * /************************************************************/ 52135520 * 52135620 */*SCN12100: P (,SCN12120) 52135720 */* DELIMITER CODE = 4 */ 52135820 * 52135920 *SCN12100:/***********************************************************/ 52136020 * /* A CODE 2 CHARACTER ENCOUNTERED. SET THE DELIMITER CODE */ 52136120 * /* TO 4 AND PROCESS THE OPERAND. */ 52136220 * /************************************************************/ 52136320 * R2FIXED = R2FIXED - 4; 52136420 SCN11100 EQU * 0066 52136520 SCN12100 SH @2,@D1 0066 52136620 * 52136720 */*SCN12120: P OPERAND = SUBSTR( OPERAND, 1, DLMTPTR) */ 52136820 *SCN12120: 52136920 * ODVLEN = R1PTR24 - ODVOPER; /* SET THE OPERAND LENGTH TO THE 52137020 * DIFFERENCE OF THE DELIMITER POINTER 52137120 * AND THE LOCATION OF THE INITIAL 52137220 * CHARACTER OF THE OPERAND */ 52137320 SCN12120 LR @F,@1 0067 52137420 S @F,ODV 0067 52137520 STH @F,ODV+6 0067 52137620 * ODVMX = ODVLEN; /* THE BUFFER CONTAINING THE OPERAND 52137720 * IS THE SAME LENGTH AS THE OPERAND */ 52137820 MVC ODV+4(2),ODV+6 0068 52137920 * 52138020 */*SCN12140: S UPDATREG: UPDATE SCAN VARIABLES */ 52138120 *SCN12140: 52138220 * CALL UPDATREG; /* SET THE LOCAL BUFFER DOPE VECTOR TO 52138320 * DESCRIBE THE UNSCANNED BYTES OF THE 52138420 * BUFFER. UPDATE DELIMITER POINTER 1 52138520 * AND DELIMITER BUFFER RESIDUE 1 TO 52138620 * DESCIBE THE UNSCANNED PORTION OF THE 52138720 * BUFFER. */ 52138820 SCN12140 BAL @E,UPDATREG 0069 52138920 * 52139020 */*SCN12160: P LBUFFER = DBUF1 */ 52139120 *SCN12160: 52139220 * LBDVBUF = R4PTR24; /* SET THE LOCAL BUFFER DOPE VECTOR 52139320 * ORIGIN POINTER TO POINT TO THE FIRST 52139420 * UNSCANNED BYTE OF THE BUFFER */ 52139520 SCN12160 ST @4,LBDV 0070 52139620 * LBDVLEN = R3FIXED + 1; /* SET THE LOCAL BUFFER DOPE VECTOR 52139720 * LENGTH FIELD TO THE LENGTH OF THE 52139820 * UNSCANNED BUFFER */ 52139920 LA @F,1 0071 52140020 AR @F,@3 0071 52140120 STH @F,LBDV+6 0071 52140220 * LBDVMX = LBDVLEN; /* THE BUFFER PASSED TO IEFVSCAN OR 52140320 * IEFVSCN1 NEXT SHOULD CONTAIN ONLY 52140420 * THOSE BYTES WHICH HAVE NOT YET BEEN 52140520 * MOVED */ 52140620 MVC LBDV+4(2),LBDV+6 0072 52140720 * 52140820 */* P NUMRCODE = DLMTCODE */ 52140920 * 52141020 * NUMRCODE = R2FIXED; /* SET THE NUMERIC ARRAY RETURN CODE TO 52141120 * THE DELIMITER CODE */ 52141220 STH @2,10(0,@6) 0073 52141320 * 52141420 */* P NUMOPER = NUMOPER + 1 */ 52141520 * 52141620 * NUMOPER = NUMOPER + 1; /* INCREMENT THE NUMBER OF OPERANDS 52141720 * ENCOUNTERED AT THIS LEVEL */ 52141820 LA @F,1 0074 52141920 AH @F,2(0,@6) 0074 52142020 STH @F,2(0,@6) 0074 52142120 * 52142220 */* P NUMSCAN = NUMSCAN + LENGTH( LBUFFER) - LENGTH( BUFFER) */ 52142320 * 52142420 * NUMSCAN = NUMSCAN + LBDVBUF - BDVBUF; /* INCREMENT THE NUMBER 52142520 * OF BYTES SCANNED DURING THIS INVO- 52142620 * CATION OF IEFVSCN1 */ 52142720 L @5,PARM 0075 52142820 L @F,0(0,@5) 0075 52142920 LCR @F,@F 0075 52143020 A @F,LBDV 0075 52143120 AH @F,8(0,@6) 0075 52143220 STH @F,8(0,@6) 0075 52143320 * PARMBDV = ADDR(LBDV); /* ALTER THE LOCAL COPY OF THE PARAME- 52143420 * TER LIST TO POINT TO THE LOCAL BUFFER 52143520 * DOPE VECTOR INSTEAD OF THE BUFFER 52143620 * DOPE VECTOR WHICH WAS PASSED INTO 52143720 * IEFVSCN1 */ 52143820 LA @F,LBDV 0076 52143920 ST @F,PARM 0076 52144020 * 52144120 */* P SCE = SCA( NUMSNTX) */ 52144220 * 52144320 * RESTRICT(R5PTR24);/* SET THE POINTER TO THE SYNTAX CON- 52144420 * TROL ARRAY ELEMENT FOR THE INPUT 52144520 * SYNTAX. RESERVE THE SYNTAX CONTROL 52144620 * ARRAY POINTER FOR EXPLICIT REFER- 52144720 * ENCES. */ 52144820 * R5PTR24 = ADDR(SCADV) + SCADVSCA;/* SET THE SYNTAX CON- 52144920 * TROL ARRAY POINTER TO THE ADDRESS 52145020 * OF THE SYNTAX CONTROL ARRAY */ 52145120 L @7,PARM+8 PARM 0078 52145220 LH @F,0(0,@7) 0078 52145320 ALR @F,@7 0078 52145420 LR @5,@F 0078 52145520 * SCEPTR = ADDR(SCA(NUMSNTX)); /* SET THE SYNTAX CONTROL 52145620 * ARRAY ELEMENT POINTER TO ADDRESS OF 52145720 * THE SYNTAX CONTROL ARRAY ELEMENT 52145820 * FOR THE INPUT SYNTAX. */ 52145920 LH @B,6(0,@6) 0079 52146020 BCTR @B,0 0079 52146120 SLA @B,3 0079 52146220 LA @F,0(@B,@5) 0079 52146320 ST @F,SCEPTR 0079 52146420 * RELEASE(R5PTR24);/* RELEASE THE SYNTAX CONTROL ARRAY 52146520 * POINTER FOR IMPLICIT REFERENCES */ 52146620 * 52146720 */* D (YES,SCN1R404,NO,SCN12180) 52146820 */* NUMSNTX > HBOUND(SCA) */ 52146920 * 52147020 * /************************************************************/ 52147120 * /* IF THE SYNTAX INDICATED IS EXCESSIVE, SET THE RETURN */ 52147220 * /* CODE TO 1028 AND RETURN TO THE INVOKER */ 52147320 * /************************************************************/ 52147420 * IF NUMSNTX > SCADVMX 52147520 * THEN 52147620 LH @F,2(0,@7) 0081 52147720 CH @F,6(0,@6) 0081 52147820 * GO TO SCN1R404; /* SET THE RETURN CODE TO 1028 AND RE- 52147920 * TURN TO THE INVOKER */ 52148020 BC 04,SCN1R404 0082 52148120 * /************************************************************/ 52148220 * /* IF THE SYNTAX INDICATED IS VALID, DETERMINE HOW THE */ 52148320 * /* OPERAND ENCOUNTERED IS TO BE PROCESSED. */ 52148420 * /************************************************************/ 52148520 * 52148620 */*SCN12180: D (YES,SCN12200,NO,SCN12240) 52148720 */* LENGTH( OPERAND) > HBOUND( SCEKLDO -> KLCA) */ 52148820 * 52148920 * ELSE 52149020 *SCN12180: DO; 52149120 * R1PTR24 = ADDR(SCADV) + SCEKLDO; /* SET THE KEYWORD 52149220 * LENGTH CONTROL ARRAY POINTER TO THE 52149320 * KEYWORD LENGTH CONTROL ARRAY APPRO- 52149420 * PRIATE TO THE SPECIFIED SYNTAX */ 52149520 SCN12180 L @5,SCEPTR 0084 52149620 LH @F,4(0,@5) 0084 52149720 L @7,PARM+8 PARM 0084 52149820 ALR @F,@7 0084 52149920 LR @1,@F 0084 52150020 * /*******************************************************/ 52150120 * /* IF THERE IS NO KEYWORD DEFINED WITH THE LENGTH */ 52150220 * /* OF THIS OPERAND, THEN PROCESS THE OPERAND AS A */ 52150320 * /* POSITIONAL. */ 52150420 * /*******************************************************/ 52150520 * IF ODVLEN > SCEKLDMX 52150620 * THEN 52150720 SR @F,@F 0085 52150820 IC @F,7(0,@5) 0085 52150920 CH @F,ODV+6 0085 52151020 BC 10,@9FE 0085 52151120 * 52151220 */*SCN12200: D (YES,SCN12220,NO,SCN1R400) 52151320 */* HBOUND( SCEPDO -> PCA) = 0 */ 52151420 * 52151520 *SCN12200: DO; 52151620 * R2FIXED = SCEPDMX;/* 52151720 * SET REGISTER 2 TO THE NUMBER OF 52151820 * POSITIONAL OPERAND ENTRIES WHICH 52151920 * ARE CONTAINED IN THE POSITIONAL 52152020 * CONTROL ARRAY FOR THIS SYNTAX */ 52152120 SCN12200 L @5,SCEPTR 0087 52152220 LH @2,2(0,@5) 0087 52152320 * IF R2FIXED = 0/* 52152420 * IF THERE ARE NO ENTRIES IN THE 52152520 * POSITIONAL CONTROL ARRAY, SET THE 52152620 * RETURN CODE TO 1024 AND RETURN TO 52152720 * THE CALLER. */ 52152820 * THEN 52152920 LTR @2,@2 0088 52153020 * GO TO SCN1R400; /* SET THE RETURN CODE TO 1024 52153120 * AND RETURN TO THE INVOKER. */ 52153220 BC 08,SCN1R400 0089 52153320 * ELSE /* IF SOME ENTRY EXISTS IN THE POSI- 52153420 * TIONAL CONTROL ARRAY, THEN DETERMINE 52153520 * HOW THE OPERAND SHOULD BE PROCESSED*/ 52153620 * 52153720 */*SCN12220: P NUMPOPER = NUMPOPER + 1 */ 52153820 * 52153920 *SCN12220: DO; 52154020 * NUMPOPER = NUMPOPER + 1; /* INCREMENT THE 52154120 * NUMBER OF POSITIONAL OPERANDS EN- 52154220 * COUNTERED AT THIS LEVEL */ 52154320 SCN12220 LA @F,1 0091 52154420 AH @F,4(0,@6) 0091 52154520 STH @F,4(0,@6) 0091 52154620 * R1PTR24 = ADDR(SCADV) + SCEPDO;/* SET THE 52154720 * POSITIONAL CONTROL ARRAY POINTER 52154820 * TO THE ADDRESS OF THE POSITIONAL 52154920 * CONTROL ARRAY FOR THIS SYNTAX */ 52155020 L @5,SCEPTR 0092 52155120 LH @F,0(0,@5) 0092 52155220 L @7,PARM+8 PARM 0092 52155320 ALR @F,@7 0092 52155420 LR @1,@F 0092 52155520 * 52155620 */* D (YES,,NO,SCN12230) 52155720 */* NUMPOPER > HBOUND( SCEPDO -> PCA) */ 52155820 * 52155920 * IF NUMPOPER > R2FIXED 52156020 * THEN /* DETERMINE WHETHER MORE POSITIONAL 52156120 * OPERANDS HAVE BEEN ENCOUNTERED THAN 52156220 * THERE ARE ENTRIES IN THE POSITIONAL 52156320 * CONTROL ARRAY */ 52156420 CH @2,4(0,@6) 0093 52156520 BC 10,@9FD 0093 52156620 * 52156720 */* P (,SCN12300) 52156820 */* ADDR( SCEPDO -> PCA( HBOUND( 52156920 */* SCEPDO -> PCA))) */ 52157020 * 52157120 * R4PTR24 = ADDR(PCA(R2FIXED));/* 52157220 * IF SO, PROCESS 52157320 * THE OPERAND USING THE FINAL ENTRY 52157420 * IN THE POSITIONAL OPERAND CONTROL 52157520 * ARRAY */ 52157620 LR @B,@2 0094 52157720 BCTR @B,0 0094 52157820 SLA @B,2 0094 52157920 LA @4,0(@B,@1) 0094 52158020 BC 15,@9FC 0095 52158120 * ELSE /* IF NOT, PROCESS THE OPERAND USING 52158220 * THE SPECIFIC ENTRY SPECIFIED FOR THE 52158320 * (NUMPOPER)TH POSITIONAL OPERAND */ 52158420 * 52158520 */* P (,SCN12300) 52158620 */* ADDR( SCEPDO -> PCA( NUMPOPER)) */ 52158720 * 52158820 * R4PTR24 = ADDR(PCA(NUMPOPER)); 52158920 @9FD LH @8,4(0,@6) 0095 52159020 BCTR @8,0 0095 52159120 SLA @8,2 0095 52159220 LA @4,0(@8,@1) 0095 52159320 * GO TO SCN12300; /* GO TO A COMMON SUBROUTINE TO 52159420 * INVOKE THE USER-SUPPLIED PROCESSOR */ 52159520 BC 15,SCN12300 0096 52159620 * END SCN12220; 52159720 * END SCN12200; 52159820 * /*******************************************************/ 52159920 * /* DETERMINE WHETHER THE OPERAND SHOULD BE PROCESSED */ 52160020 * /* AS A KEYWORD. */ 52160120 * /*******************************************************/ 52160220 * ELSE 52160320 * 52160420 */*SCN12240: P KCAPTR2 = NULL */ 52160520 * 52160620 *SCN12240: DO; 52160720 @9FE EQU * 0099 52160820 * RESTRICT(R5PTR24, R7PTR24);/* 52160920 * RESERVE REGISTERS FOR EXPLICIT 52161020 * REFERENCE WITHIN THE ELSE CLAUSE */ 52161120 * KCAPTR2 = 0; /* INITIALIZE THE POINTER TO THE 52161220 * LAST KEYWORD CONTROL ARRAY ELEMENT 52161320 * WHERE A MATCH WAS FOUND TO A NULL 52161420 * VALUE. */ 52161520 SCN12240 SR @F,@F 0101 52161620 ST @F,KCAPTR2 0101 52161720 * 52161820 */* D (YES,,NO,SCN12241) 52161920 */* LENGTH( OPERAND) < LBOUND( SCEKLDO -> KLCA) */ 52162020 * 52162120 * /**************************************************/ 52162220 * /* IF THE OPERAND IS SHORTER THAN ANY KEYWORD */ 52162320 * /* DEFINED, BEGIN THE KEYWORD CHECK WITH THE */ 52162420 * /* SHORTEST LENGTH KEYWORD(S) DEFINED. */ 52162520 * /**************************************************/ 52162620 * IF ODVLEN < SCEKLDMN 52162720 * THEN 52162820 L @B,SCEPTR 0102 52162920 IC @F,6(0,@B) 0102 52163020 CH @F,ODV+6 0102 52163120 BC 12,@9FB 0102 52163220 * 52163320 */* P (,SCN12242) 52163420 */* KEYLEN = LBOUND( SCEKLDO -> KLCA) */ 52163520 * 52163620 * R3FIXED = SCEKLDMN;/* INITIALIZE THE KEYWORD 52163720 * LENGTH VARIABLE TO THE LENGTH OF 52163820 * THE SHORTEST KEYWORD(S) DEFINED. */ 52163920 SR @3,@3 0103 52164020 IC @3,6(0,@B) 0103 52164120 * /**************************************************/ 52164220 * /* OTHERWISE, BEGIN THE KEYWORD CHECK WITH */ 52164320 * /* KEYWORDS HAVING THE SAME LENGTH AS THE */ 52164420 * /* OPERAND. */ 52164520 * /**************************************************/ 52164620 * ELSE 52164720 * 52164820 */*SCN12241: P (,SCN12242) 52164920 */* KEYLEN = LENGTH( OPERAND) */ 52165020 * 52165120 * R3FIXED = ODVLEN;/* INITIALIZE THE KEYWORD 52165220 * LENGTH VARIABLE TO THE LENGTH OF 52165320 BC 15,@9FA 0104 52165420 * THE OPERAND. */ 52165520 @9FB LH @3,ODV+6 0104 52165620 * 52165720 */*SCN12242: D (YES,SCN12244,NO,SCN12276) 52165820 */* KEYLEN > HBOUND( SCEKLDO -> KLCA) */ 52165920 * 52166020 *SCN12242: /**************************************************/ 52166120 * /* SEARCH FOR A MATCHING KEYWORD BEGINNING WITH */ 52166220 * /* KEYWORDS OF LENGTH = KEYLEN AND CONTINUE THE */ 52166320 * /* SEARCH UNTIL EITHER A PRECISE MATCH IS FOUND */ 52166420 * /* OR UNTIL ALL KEYWORDS FOR THIS SYNTAX HAVE */ 52166520 * /* BEEN CHECKED. */ 52166620 * /**************************************************/ 52166720 * DO R3FIXED = R3FIXED 52166820 * TO SCEKLDMX 52166920 * BY 1; 52167020 @9FA EQU * 0105 52167120 SCN12242 EQU * 0105 52167220 @DO9F9 L @B,SCEPTR 0105 52167320 SR @F,@F 0105 52167420 IC @F,7(0,@B) 0105 52167520 CR @F,@3 0105 52167620 BC 04,@DO9F6 0105 52167720 BC 15,@DO9F7 0105 52167820 @DO9F8 LA @F,1 0105 52167920 AR @3,@F 0105 52168020 BC 15,@DO9F9 0105 52168120 @DO9F7 EQU * 0105 52168220 * 52168320 */*SCN12244: P KCAPTR = 52168420 */* ADDR( SCEKLDO -> KLCAKCA( KEYLEN) -> KCA(1) */ 52168520 * 52168620 *SCN12244: R4PTR24 = 52168720 * ADDR(SCADV) + KLCAKCA(R3FIXED);/* INITIALIZE THE 52168820 * KEYWORD CONTROL ARRAY POINTER TO 52168920 * POINT TO THE FIRST ELEMENT IN THE 52169020 * KEYWORD CONTROL ARRAY FOR KEYWORDS 52169120 * IN THIS SYNTAX AND HAVING LENGTH 52169220 * = KEYLEN */ 52169320 SCN12244 LR @B,@3 0106 52169420 BCTR @B,0 0106 52169520 SLA @B,2 0106 52169620 LH @F,0(@B,@1) 0106 52169720 L @8,PARM+8 PARM 0106 52169820 ALR @F,@8 0106 52169920 LR @4,@F 0106 52170020 * 52170120 */*SCN12248: P R2 = 52170220 */* HBOUND( SCEKLDO -> KLCAKCA( KEYLEN) -> KCA) */ 52170320 */*SCN12249: D (YES,SCN12276,NO,SCN12252) 52170420 */* R2 = 0 */ 52170520 * 52170620 *SCN12248: /***********************************************/ 52170720 * /* PREPARE TO CHECK ALL KEYWORDS IN THE */ 52170820 * /* KEYWORD CONTROL ARRAY AGAINST THE OPERAND.*/ 52170920 * /***********************************************/ 52171020 * DO R2FIXED = KLCAMX(R3FIXED) 52171120 * TO 1 52171220 * BY -1; 52171320 SCN12248 LR @B,@3 0107 52171420 BCTR @B,0 0107 52171520 SLA @B,2 0107 52171620 LH @F,2(@B,@1) 0107 52171720 LTR @2,@F 0107 52171820 BC 12,@DO9F4 0107 52171920 @DO9F5 EQU * 0107 52172020 * 52172120 */*SCN12252: D (>,SCN12272,=,SCN12260,<,SCN12276) 52172220 */* OPERAND = KCAPTR -> SUBSTR( KCEIMAG, 1, 52172320 */* LENGTH( OPERAND)) */ 52172420 * 52172520 *SCN12252: DO R5PTR24 = 1 52172620 * TO ODVLEN 52172720 * BY 256; /* CHECK AS MANY BYTES OF THE 52172820 * OPERAND AGAINST THE KEYWORD MODEL 52172920 * AS THE HARDWARE PERMITS IN ONE 52173020 * COMPARISON. */ 52173120 SCN12252 LA @5,1 0108 52173220 BC 15,@DO9F0 0108 52173320 * IF R5PTR24 + 256 > ODVLEN 52173420 * THEN 52173520 @DO9F1 LA @F,256 0109 52173620 AR @F,@5 0109 52173720 CH @F,ODV+6 0109 52173820 BC 12,@9ED 0109 52173920 *SCN12256: DO; /* IF NO MORE BYTES REMAIN TO BE COM- 52174020 * PARED THAN THE HARDWARE PERMITS IN A 52174120 * SINGLE COMPARISON, THIS COMPARISON 52174220 * WILL ALLOW A FINAL CONCLUSION WHE- 52174320 * THER THE KEYWORD AND THE OPERAND 52174420 * MATCH. */ 52174520 * /*****************************************/ 52174620 * /* IF THE OPERAND IS GREATER THAN THE */ 52174720 * /* KEYWORD IMAGE, CHECK THE NEXT KEY- */ 52174820 * /* WORD DEFINED WHICH HAS THIS LENGTH. */ 52174920 * /*****************************************/ 52175020 * IF OPERAND(R5PTR24: 52175120 * R5PTR24 + ODVLEN - 1) > 52175220 * KCAIMAG(R5PTR24: 52175320 * R5PTR24 + ODVLEN - 1) 52175420 * THEN 52175520 SCN12256 LR @B,@5 0111 52175620 LA @E,3(@B,@4) 0111 52175720 LH @8,@D2 0111 52175820 AH @8,ODV+6 0111 52175920 AR @8,@5 0111 52176020 SR @8,@B 0111 52176120 L @9,ODV 0111 52176220 LA @A,0(@B,@9) 0111 52176320 BCTR @A,0 0111 52176420 EX @8,@CLC 0111 52176520 * GO TO SCN12272; /* ITERATE DO LOOP 52176620 * SCN12248 */ 52176720 BC 02,SCN12272 0112 52176820 * /*****************************************/ 52176920 * /* IF THE OPERAND IS LESS THAN THE */ 52177020 * /* KEYWORD IMAGE, THERE ARE NO MORE */ 52177120 * /* KEYWORDS WHICH HAVE LENGTH = KEYLEN */ 52177220 * /* AND WHICH ARE AS LOW IN THE COLLAT- */ 52177320 * /* ING SEQUENCE AS THE OPERAND. INCRE- */ 52177420 * /* MENT KEYLEN AND CHECK FOR KEYWORDS */ 52177520 * /* OF A NEW LENGTH. */ 52177620 * /*****************************************/ 52177720 * ELSE IF 52177820 * OPERAND(R5PTR24: 52177920 * R5PTR24 + ODVLEN - 1) < 52178020 * KCAIMAG(R5PTR24: 52178120 * R5PTR24 + ODVLEN - 1) 52178220 * THEN 52178320 LH @8,@D2 0113 52178420 AH @8,ODV+6 0113 52178520 AR @8,@5 0113 52178620 SR @8,@B 0113 52178720 EX @8,@CLC 0113 52178820 * GO TO SCN12276; /* ITERATE DO LOOP 52178920 * SCN12242 */ 52179020 BC 04,SCN12276 0114 52179120 * /*****************************************/ 52179220 * /* IF THE OPERAND IS EQUAL TO THE */ 52179320 * /* PORTION OF THE KEYWORD IMAGE */ 52179420 * /* AGAINST WHICH IT WAS COMPARED, */ 52179520 * /* ONE OF TWO CIRCUMSTANCES PREVAIL. */ 52179620 * /* 1. IF THE KEYWORD AND THE OPERAND */ 52179720 * /* ARE THE SAME LENGTH, THEN THE */ 52179820 * /* OPERAND SHOULD DEFINITELY BE */ 52179920 * /* TREATED AS THIS KEYWORD. */ 52180020 * /* 2. IF THE OPERAND IS CONTAINED */ 52180120 * /* WITHIN THE KEYWORD BUT IS ALSO */ 52180220 * /* CONTAINED WITHIN ANOTHER */ 52180320 * /* KEYWORD, IT SHOULD BE TREATED */ 52180420 * /* AS A POSITIONAL. HOWEVER, IF */ 52180520 * /* THE OPERAND IS CONTAINED */ 52180620 * /* WITHIN ONLY ONE KEYWORD, THEN */ 52180720 * /* IT IS A VALID ABBREVIATION FOR */ 52180820 * /* THAT KEYWORD AND SHOULD BE */ 52180920 * /* TREATED AS THAT KEYWORD. */ 52181020 * /*****************************************/ 52181120 * ELSE 52181220 * 52181320 */*SCN12260: D (YES,SCN12300,NO,) 52181420 */* KEYLEN = LENGTH( OPERAND) */ 52181520 * 52181620 *SCN12260: DO; 52181720 * IF R3FIXED = ODVLEN/* IF THE KEYWORD AND 52181820 * THE OPERAND HAVE IDENTICAL LENGTHS, 52181920 * THEN THE OPERAND SHOULD DEFINITELY 52182020 * BE TREATED AS THE KEYWORD. */ 52182120 * THEN 52182220 SCN12260 CH @3,ODV+6 0116 52182320 * GO TO SCN12300; /* PROCESS THE OP- 52182420 * ERAND AS THE KEYWORD */ 52182520 BC 08,SCN12300 0117 52182620 * ELSE /* IF THE OPERAND IS A STRICT 52182720 * SUBSET OF THE KEYWORD IMAGE AND A 52182820 * SIMILAR MATCH HAS BEEN ENCOUNTERED 52182920 * PREVIOUSLY, TREAT THE OPERAND AS A 52183020 * POSITIONAL. OTHERWISE, RETAIN THE 52183120 * POSITION WHERE A MATCHING KEYWORD 52183220 * WAS FOUND AND CONTINUE TO SEARCH 52183320 * FOR OTHER MATCHES. */ 52183420 * 52183520 */* D (YES,,NO,SCN12200) 52183620 */* KCAPTR2 = NULL */ 52183720 * 52183820 * IF KCAPTR2 ^= 0 /* IF ANOTHER 52183920 * MATCH HAS ALREADY BEEN FOUND, PRO- 52184020 * CESS THE OPERAND AS A POSITIONAL. */ 52184120 * THEN 52184220 SR @F,@F 0118 52184320 C @F,KCAPTR2 0118 52184420 * GO TO SCN12200; /* PROCESS THE 52184520 * OPERAND AS A POSITIONAL. */ 52184620 BC 07,SCN12200 0119 52184720 * ELSE /* IF THIS IS THE FIRST KEYWORD 52184820 * FOR WHICH THIS OPERAND IS A MATCH, 52184920 * SAVE THE POSITION OF ITS KEYWORD 52185020 * CONTROL ARRAY AND CONTINUE TO SEARCH 52185120 * FOR OTHER MATCHING KEYWORDS */ 52185220 * 52185320 */* P KCAPTR2 = KCAPTR */ 52185420 * 52185520 * KCAPTR2 = R4PTR24;/* SET THE 52185620 * POINTER TO THE KEYWORD CONTROL 52185720 * ARRAY WHERE A MATCH WAS FOUND.*/ 52185820 ST @4,KCAPTR2 0120 52185920 * END SCN12260; 52186020 * END SCN12256; 52186120 * /********************************************/ 52186220 * /* IF MORE BYTES REMAIN TO BE COMPARED */ 52186320 * /* THAN THE HARDWARE PERMITS IN A SINGLE */ 52186420 * /* COMPARISON, THIS COMPARISON WILL ONLY */ 52186520 * /* PERMIT ACTION BASED UPON AN UNEQUAL */ 52186620 * /* COMPARISON WHILE DEFERRING ANY ACTION */ 52186720 * /* TO BE TAKEN GIVEN A MATCH. */ 52186820 * /********************************************/ 52186920 * ELSE 52187020 *SCN12264: DO; 52187120 BC 15,@9EC 0123 52187220 @9ED EQU * 0123 52187320 * /*****************************************/ 52187420 * /* IF THE OPERAND IS GREATER THAN THE */ 52187520 * /* KEYWORD IMAGE,CHECK THE NEXT KEYWORD*/ 52187620 * /* DEFINED WHICH HAS THIS LENGTH. */ 52187720 * /*****************************************/ 52187820 * IF OPERAND(R5PTR24: 52187920 * R5PTR24 + 255) 52188020 * > KCAIMAG(R5PTR24: 52188120 * R5PTR24 + 255) 52188220 * THEN 52188320 SCN12264 LR @B,@5 0124 52188420 LA @E,3(@B,@4) 0124 52188520 L @8,ODV 0124 52188620 LA @A,0(@B,@8) 0124 52188720 BCTR @A,0 0124 52188820 CLC 0(256,@A),0(@E) 0124 52188920 * GO TO SCN12272; /* ITERATE DO LOOP 52189020 * SCN12248 */ 52189120 BC 02,SCN12272 0125 52189220 * /*****************************************/ 52189320 * /* IF THE OPERAND IS LESS THAN THE KEY-*/ 52189420 * /* WORD IMAGE, THERE ARE NO MORE KEY- */ 52189520 * /* WORDS WHICH HAVE LENGTH = KEYLEN AND*/ 52189620 * /* WHICH ARE AS LOW IN THE COLLATING */ 52189720 * /* SEQUENCE AS THE OPERAND. INCREMENT */ 52189820 * /* KEYLEN AND CHECK FOR KEYWORDS OF A */ 52189920 * /* NEW LENGTH. */ 52190020 * /*****************************************/ 52190120 * ELSE IF OPERAND(R5PTR24: 52190220 * R5PTR24 + 255) 52190320 * < KCAIMAG(R5PTR24: 52190420 * R5PTR24 + 255) 52190520 * THEN 52190620 CLC 0(256,@A),0(@E) 0126 52190720 * GO TO SCN12276; /* ITERATE DO LOOP 52190820 * SCN12242 */ 52190920 BC 04,SCN12276 0127 52191020 * /*****************************************/ 52191120 * /* IF THE PORTION OF THE KEYWORD */ 52191220 * /* AND THE OPERAND WHICH HAVE BEEN */ 52191320 * /* COMPARED MATCH, CONTINUE THE */ 52191420 * /* COMPARISON. */ 52191520 * /*****************************************/ 52191620 * ELSE; /* NO PROCESSING */ 52191720 * END SCN12264; 52191820 * END SCN12252; /* END OF LOOP TO PERFORM 52191920 * COMPARISON OF AN OPERAND AND ONE 52192020 * KEYWORD IMAGE */ 52192120 * 52192220 */*SCN12272: P KCAPTR = KCAPTR + LENGTH( KCE) */ 52192320 *SCN12272: 52192420 * R4PTR24 = R4PTR24 + R3FIXED 52192520 * + 4; /* UPDATE KEYWORD CONTROL ARRAY 52192620 * ELEMENT POINTER TO POINT TO THE NEXT 52192720 * ELEMENT IN THE ARRAY. */ 52192820 @9EC AH @5,@D4 0130 52192920 @DO9F0 CH @5,ODV+6 0130 52193020 BC 12,@DO9F1 0130 52193120 SCN12272 LA @4,4(@3,@4) 0131 52193220 * 52193320 */* P (,SCN12249) 52193420 */* R2 = R2 - 1 */ 52193520 * 52193620 * END SCN12248; /* END OF LOOP TO PERFORM COMPAR- 52193720 * ISON OF AN OPERAND AND THE KEYWORD 52193820 * IMAGES WITHIN ONE KEYWORD CONTROL 52193920 * ARRAY. */ 52194020 * 52194120 */*SCN12276: P (,SCN12242) 52194220 */* KEYLEN = KEYLEN + 1 */ 52194320 *SCN12276: 52194420 * END SCN12242; /* END OF LOOP TO PERFORM A COMPAR- 52194520 * ISON OF AN OPERAND AND THE KEYWORD 52194620 * IMAGES FOR THE INPUT SYNTAX. */ 52194720 BCT @2,@DO9F5 0132 52194820 @DO9F4 EQU * 0132 52194920 SCN12276 EQU * 0133 52195020 * 52195120 */* D (YES,SCN12200,NO,) 52195220 */* KCAPTR2 = NULL */ 52195320 * 52195420 * /**************************************************/ 52195520 * /* IF THE OPERAND IS NEITHER AN IMAGE NOR AN */ 52195620 * /* UNAMBIGUOUS TRUNCATION FOR A KEYWORD OF THIS */ 52195720 * /* SYNTAX, IT SHOULD BE PROCESSED AS A */ 52195820 * /* POSITIONAL OPERAND. */ 52195920 * /**************************************************/ 52196020 BC 15,@DO9F8 0133 52196120 * IF KCAPTR2 = 0 52196220 * THEN 52196320 @DO9F6 SR @F,@F 0134 52196420 C @F,KCAPTR2 0134 52196520 * GO TO SCN12200; /* PROCESS THE OPERAND AS A 52196620 * POSITIONAL */ 52196720 BC 08,SCN12200 0135 52196820 * /**************************************************/ 52196920 * /* IF THE OPERAND IS AN UNAMBIGUOUS TRUNCATION */ 52197020 * /* FOR A KEYWORD OF THIS SYNTAX, PROCESS THE */ 52197120 * /* OPERAND AS THAT KEYWORD. */ 52197220 * /**************************************************/ 52197320 * ELSE 52197420 * 52197520 */* P KCAPTR = KCAPTR2 */ 52197620 * 52197720 * R4PTR24 = KCAPTR2;/* SET THE KEYWORD CONTROL 52197820 * ARRAY ELEMENT POINTER TO POINT TO 52197920 * THE KEYWORD CONTROL ARRAY ELEMENT 52198020 * FOR THE KEYWORD WHICH CONTAINED THE 52198120 * OPERAND. */ 52198220 L @4,KCAPTR2 0136 52198320 * RELEASE(R5PTR24, R7PTR24);/* 52198420 * ALLOW IMPLICIT REFERENCES TO A 52198520 * REGISTER */ 52198620 * END SCN12240; 52198720 * END SCN12180; 52198820 * 52198920 */*SCN12300: P PROCNDX = KCAPTR -> KCAPROC */ 52199020 * 52199120 *SCN12300:/***********************************************************/ 52199220 * /* DETERMINE OPERAND PROCESSOR */ 52199320 * /************************************************************/ 52199420 * R3FIXED = KCAPROC; /* SET THE PROCESSOR INDEX TO THE 52199520 * PROCESSOR CODE FOR THE OPERAND 52199620 * PROCESSOR */ 52199720 SCN12300 MVC @TEMP2+2(2),0(@4) 0140 52199820 L @3,@TEMP2 0140 52199920 * 52200020 */* D (YES,SCN1R400,NO,SCN12320) 52200120 */* PROCNDX = 0 */ 52200220 * 52200320 * IF R3FIXED = 0 /* IF NO PROCESSOR IS SPECIFIED TO 52200420 * HANDLE THE OPERAND, SET THE RETURN 52200520 * CODE TO 1024 AND RETURN TO THE 52200620 * CALLER */ 52200720 * THEN 52200820 LTR @3,@3 0141 52200920 * GO TO SCN1R400; /* SET THE RETURN CODE TO 1024 AND 52201020 * RETURN TO THE CALLER */ 52201120 BC 08,SCN1R400 0142 52201220 * ELSE /* IF A PROCESSOR IS SPECIFIED TO 52201320 * HANDLE THE OPERAND, INVOKE THE 52201420 * PROCESSOR. */ 52201520 * 52201620 */*SCN12320: S OPERPROC: CALL PROCCA( PROCNDX) */ 52201720 *SCN12320: 52201820 * DO; 52201920 * PARMODV = ADDR(ODV); /* SET THE OPERAND DOPE VECTOR 52202020 * POINTER IN THE PARAMETER LIST TO THE 52202120 * OPERAND PROCESSOR TO THE ADDRESS OF 52202220 * THE OPERAND DOPE VECTOR. */ 52202320 SCN12320 LA @F,ODV 0144 52202420 ST @F,PARM+20 0144 52202520 * R1PTR24 = ADDR(PARMNUM);/* 52202620 * SET REGISTER 1 TO POINT TO THE 52202720 * PARAMETER LIST TO THE OPERAND 52202820 * PROCESSOR */ 52202920 LA @1,PARM+12 0145 52203020 * R15 = PROCCA(R3FIXED) + ADDR(PROCCA); /* OBTAIN THE 52203120 * ADDRESS OF THE PROCESSOR TO BE 52203220 * INVOKED IN REGISTER 15. */ 52203320 L @5,PARM+4 PARM 0146 52203420 LR @F,@5 0146 52203520 LR @7,@3 0146 52203620 BCTR @7,0 0146 52203720 SLA @7,1 0146 52203820 AH @F,0(@7,@5) 0146 52203920 * CALL OPERPROC; /* (NUM, COMM, ODV) */ 52204020 BALR @E,@F 0147 52204120 * /* INVOKE THE OPERAND PROCESSOR */ 52204220 * 52204320 */* P SCAN CODE = OPERPROC RETURN CODE */ 52204420 * 52204520 * /*******************************************************/ 52204620 * /* IF THE RETURN CODE FROM THE OPERAND PROCESSOR */ 52204720 * /* WAS ZERO, CONTINUE PROCESSING ACCORDING TO THE */ 52204820 * /* DELIMITER CODE FOR THE RIGHT DELIMITER OF THE */ 52204920 * /* OPERAND. OTHERWISE, RETURN TO THE INVOKER WITH */ 52205020 * /* A RETURN CODE OF 1028 IF THE PROCESSOR RETURN */ 52205120 * /* CODE WAS LESS THAN OR EQUAL TO 2048, THE */ 52205220 * /* PROCESSOR RETURN CODE OTHERWISE. */ 52205320 * /*******************************************************/ 52205420 * R3FIXED = R15; 52205520 LR @3,@F 0148 52205620 * 52205720 */* D (YES,SCN12340,NO,SCN12350) 52205820 */* SCAN CODE = 0 */ 52205920 * 52206020 * IF R3FIXED ^= 0 /* IF THE RETURN CODE FROM THE 52206120 * OPERAND PROCESSOR WAS NON-ZERO, 52206220 * RETURN TO THE INVOKER OF IEFVSCN1 52206320 * WITH THE SAME RETURN CODE AS THAT 52206420 * SET BY THE OPERAND PROCESSOR */ 52206520 * 52206620 */*SCN12340: D (YES,SCN1RSCN,NO,SCN1R404) 52206720 */* OPERPROC RETURN CODE > 2044 */ 52206820 * 52206920 * THEN 52207020 LTR @3,@3 0149 52207120 BC 08,@9EB 0149 52207220 *SCN12340: DO; 52207320 * IF R3FIXED <= 2044 /* IF THE EXIT ROUTINE 52207420 * PASSED AN INVALID RETURN CODE, SET 52207520 * THE SCAN CODE TO 1028 AND RETURN TO 52207620 * THE INVOKER */ 52207720 * THEN 52207820 SCN12340 CH @3,@D5 0151 52207920 * GO TO SCN1R404; /* SET THE RETURN CODE TO 1028 52208020 * AND RETURN TO THE INVOKER */ 52208120 BC 12,SCN1R404 0152 52208220 * ELSE /* IF THE EXIT ROUTINE PASSED A VALID, 52208320 * NON-ZERO RETURN CODE, RETURN TO THE 52208420 * INVOKER WITH THE RETURN CODE PASSED 52208520 * BY THE EXIT ROUTINE */ 52208620 * GO TO SCN1RSCN; /* SET THE RETURN CODE TO THE 52208720 * SCAN CODE AND RETURN TO THE INVOKER*/ 52208820 BC 15,SCN1RSCN 0153 52208920 * END SCN12340; 52209020 * 52209120 */*SCN12250: P SCANCODE = NUMRCODE */ 52209220 * 52209320 * R3FIXED = NUMRCODE; /* SET THE SCAN CODE TO THE LAST 52209420 * DELIMITER CODE */ 52209520 @9EB LH @3,10(0,@6) 0155 52209620 * 52209720 */* D (YES,SCN1RSCN,NO,SCN12360) 52209820 */* SCANCODE > 24 */ 52209920 * 52210020 * /*******************************************************/ 52210120 * /* IF THE DELIMITER CODE FOR THE LAST OPERAND WAS */ 52210220 * /* HIGHER THAN 24, SET THE RETURN CODE EQUAL TO */ 52210320 * /* THAT DELIMITER CODE AND RETURN CONTROL TO THE */ 52210420 * /* INVOKER */ 52210520 * /*******************************************************/ 52210620 * IF R3FIXED > 24 52210720 * THEN 52210820 CH @3,@D6 0156 52210920 * GO TO SCN1RSCN; /* BRANCH TO A COMMON ROUTINE TO 52211020 * CLEAN UP AND RETURN TO THE INVOKER */ 52211120 BC 02,SCN1RSCN 0157 52211220 * /*******************************************************/ 52211320 * /* IF THE LAST DELIMITER CODE WAS LESS THAN 24, */ 52211420 * /* CONTINUE PROCESSING ACCORDING TO THE DELIMITER */ 52211520 * /* CODE */ 52211620 * /*******************************************************/ 52211720 * ELSE 52211820 * 52211920 */*SCN12360: P LNUMLEVEL = LNUMLEVEL + 1 */ 52212020 * 52212120 *SCN12360: DO; 52212220 * LNUMLEVL = NUMLEVEL + 1; /* SET THE LEVEL NUMBER 52212320 * FOR THE NEXT IEFVSCAN OR IEFVSCN1 52212420 * TO BE RECURSIVELY INVOKED */ 52212520 SCN12360 LA @F,1 0159 52212620 AH @F,0(0,@6) 0159 52212720 STH @F,LNUM 0159 52212820 * PARMNUM = ADDR(LNUM); /* SET THE NUMERIC ARRAY 52212920 * POINTER IN THE PARAMETER LIST TO 52213020 * IEFVSCAN OR IEFVSCN1 TO POINT TO 52213120 * THE LOCAL NUMERIC ARRAY. */ 52213220 LA @F,LNUM 0160 52213320 ST @F,PARM+12 0160 52213420 * 52213520 */* P LNUMSNTX = KCAPTR -> KCASNO */ 52213620 * 52213720 * LNUMSNTX = KCASNO; /* SET THE SYNTAX NUMBER FOR 52213820 * THE NEXT IEFVSCAN OR IEFVSCN1 TO 52213920 * BE INVOKED */ 52214020 MVC LNUM+6(2),2(@4) 0161 52214120 * 52214220 */* D (000,SCN1R000,004,SCN1R004,008,SCN12400, 52214320 */* 00C,SCN12420,010,SCN1R008,014,SCN1R00C, 52214420 */* 018,SCN1R010) GO TO PROCESSOR( SCAN CODE) */ 52214520 * 52214620 * /* BRANCH TO AN APPROPRIATE PROCESSOR FOR EACH 52214720 * DELIMITER */ 52214820 * GENERATE; 52214920 B SCN12380(R3FIXED) INVOKE APPROPRIATE PROCESSOR 52215020 SCN12380 B SCN1R000 DELIMITER CODE 0 PROCESSOR 52215120 B SCN1R004 DELIMITER CODE 4 PROCESSOR 52215220 B SCN12400 DELIMITER CODE 8 PROCESSOR 52215320 B SCN12420 DELIMITER CODE 12 PROCESSOR 52215420 B SCN1R008 DELIMITER CODE 16 PROCESSOR 52215520 B SCN1R00C DELIMITER CODE 20 PROCESSOR 52215620 B SCN1R010 DELIMITER CODE 24 PROCESSOR 52215720 DS 0H 52215820 * 52215920 */*SCN12400: S IEFVSCN1: SCAN A SINGLE OPERAND */ 52216020 *SCN12400: 52216120 * /**************************************************/ 52216220 * /* IF THE LAST DELIMITER CODE WAS 8, SET */ 52216320 * /* REGISTER 1 TO POINT TO THE PARAMETER LIST */ 52216420 * /* AND INVOKER IEFVSCN1; THEN RETURN CONTROL */ 52216520 * /* TO THE INVOKER OF IEFVSCN1 WITH THE SAME */ 52216620 * /* RETURN CODE AS THAT PASSED BY IEFVSCN1 */ 52216720 * /**************************************************/ 52216820 * R1PTR24 = ADDR(PARM);/* 52216920 * SET REGISTER 1 TO THE AD- 52217020 * DRESS OF THE LOCAL COPY OF THE PA- 52217120 * RAMETER LIST TO IEFVSCN1 */ 52217220 SCN12400 LA @1,PARM 0163 52217320 * R15 = ADDR(IEFVSCN1); 52217420 LA @F,IEFVSCN1 0164 52217520 * CALL SCN1; /* INVOKE IEFVSCN1 */ 52217620 BALR @E,@F 0165 52217720 * 52217820 */* P SCAN CODE = IEFVSCN1 RETURN CODE */ 52217920 * 52218020 * R3FIXED = R15; /* SET THE SCAN CODE TO THE 52218120 * VALUE RETURNED BY IEFVSCN1 AS A 52218220 * RETURN CODE */ 52218320 LR @3,@F 0166 52218420 * 52218520 */* D (YES,,NO,SCN1RSCN) 52218620 */* SCAN CODE > 16 */ 52218720 * 52218820 * /***********************************************/ 52218920 * /* IF THE RETURN CODE TO BE RETURNED IS TO */ 52219020 * /* BE HIGHER THAN 16, TRANSCRIBE PART OF */ 52219120 * /* THE LOCAL NUMERIC ARRAY TO THE NUMERIC */ 52219220 * /* ARRAY TO FLAG THE SITUATION WHERE THE */ 52219320 * /* PROBLEM AROSE. */ 52219420 * /***********************************************/ 52219520 * IF R3FIXED > 16 52219620 * THEN 52219720 CH @3,@D7 0167 52219820 BC 12,@9EA 0167 52219920 * 52220020 */* P (,SCN1RSCN) NUMA = LNUMA */ 52220120 * 52220220 * NUMA = LNUMA; /* COPY THE A-PORTION OF THE 52220320 * LOCAL NUMERIC ARRAY TO THE NUMERIC 52220420 * ARRAY */ 52220520 MVC 0(8,@6),LNUM 0168 52220620 * GO TO SCN1RSCN; /* RETURN TO THE INVOKER 52220720 * WITH THE SAME RETURN CODE AS THAT 52220820 * JUST RETURNED BY IEFVSCN1 */ 52220920 BC 15,SCN1RSCN 0169 52221020 * 52221120 */*SCN12420: S IEFVSCAN: SCAN MULTIPLE OPERANDS */ 52221220 * 52221320 *SCN12420: /**************************************************/ 52221420 * /* IF THE LAST DELIMITER CODE WAS 12, SET */ 52221520 * /* REGISTER 1 TO POINT TO THE PARAMETER LIST */ 52221620 * /* AND INVOKE IEFVSCAN; THEN RETURN CONTROL */ 52221720 * /* TO THE INVOKER OF IEFVSCN1 WITH A RETURN */ 52221820 * /* CODE DEPENDENT UPON THAT RETURNED BY IEFVSCAN*/ 52221920 * /**************************************************/ 52222020 * R1PTR24 = ADDR(PARM);/* 52222120 * SET REGISTER 1 TO THE 52222220 * ADDRESS OF THE LOCAL COPY OF THE 52222320 * PARAMETER LIST TO IEFVSCN1 */ 52222420 SCN12420 LA @1,PARM 0170 52222520 * R15 = R12; /* R15 = ADDR(IEFVSCAN) */ 52222620 LR @F,@C 0171 52222720 * CALL SCAN; /* INVOKE IEFVSCAN */ 52222820 BALR @E,@F 0172 52222920 * 52223020 */* P SCAN CODE = IEFVSCAN RETURN CODE */ 52223120 * 52223220 * R3FIXED = R15; /* SAVE THE RETURN CODE FROM 52223320 * IEFVSCAN IN THE SCAN CODE */ 52223420 LR @3,@F 0173 52223520 * 52223620 */* D (YES,SCN12430,NO,SCN12440) 52223720 */* SCAN CODE > 16 */ 52223820 * 52223920 * /***********************************************/ 52224020 * /* IF THE RETURN CODE FROM IEFVSCAN WAS */ 52224120 * /* GREATER THAN 16, THEN RETURN TO THE */ 52224220 * /* INVOKER OF IEFVSCN1 WITH THE SAME */ 52224320 * /* RETURN CODE JUST PASSED BY IEFVSCAN */ 52224420 * /***********************************************/ 52224520 * IF R3FIXED > 16 52224620 * THEN 52224720 CH @3,@D7 0174 52224820 BC 12,@9E9 0174 52224920 * 52225020 */*SCN12430: P (,SCN1RSCN) NUMA = LNUMA */ 52225120 * 52225220 *SCN12430: DO; 52225320 * NUMA = LNUMA; /* COPY THE A-PORTION OF THE 52225420 * LOCAL NUMERIC ARRAY TO THE NUMERIC 52225520 * ARRAY */ 52225620 SCN12430 MVC 0(8,@6),LNUM 0176 52225720 * GO TO SCN1RSCN; /* SET THE RETURN CODE TO THE 52225820 * SCAN CODE AND RETURN TO THE INVOKER*/ 52225920 BC 15,SCN1RSCN 0177 52226020 * END SCN12430; 52226120 * 52226220 */*SCN12440: D (000,SCN1R408,004,SCN1R408,008,SCN1R004, 52226320 */* 00C,SCN1R000,010,SCN12500) 52226420 */* GO TO PROCESSOR( SCAN CODE) */ 52226520 * 52226620 * /***********************************************/ 52226720 * /* IF THE RETURN CODE FROM IEFVSCAN WAS */ 52226820 * /* LESS THAN OR EQUAL TO 16, BRANCH TO */ 52226920 * /* AN APPROPRIATE PROCESSOR ACCORDING */ 52227020 * /* TO THE IEFVSCAN RETURN CODE */ 52227120 * /***********************************************/ 52227220 * GENERATE; 52227320 @9E9 EQU * 0179 52227420 B SCN12440(R3FIXED) INVOKE APPROPRIATE PROCESSOR 52227520 SCN12440 B SCN1R408 RETURN CODE 0 PROCESSOR 52227620 B SCN1R408 RETURN CODE 4 PROCESSOR 52227720 B SCN1R004 RETURN CODE 8 PROCESSOR 52227820 B SCN1R000 RETURN CODE 12 PROCESSOR 52227920 * FINAL BRANCH NO-OP BECAUSE DESTINATION DIRECTLY FOLLOWS 52228020 * B SCN12500 RETURN CODE 16 PROCESSOR 52228120 DS 0H 52228220 * 52228320 */*SCN12500: P DBUF1 = SUBSTR( LBUFFER, LNUMSCAN) */ 52228420 * 52228520 *SCN12500: R4PTR24 = LBDVBUF + LNUMSCAN; /* SET DELIMITER 52228620 * BUFFER POINTER 1 TO POINT TO THE 52228720 * FIRST UNSCANNED BYTE OF THE INPUT 52228820 * BUFFER. */ 52228920 SCN12500 LH @4,LNUM+8 0180 52229020 A @4,LBDV 0180 52229120 * R3FIXED = LBDVLEN - LNUMSCAN - 1; /* SET 52229220 * DELIMITER BUFFER RESIDUE 1 TO THE 52229320 * NUMBER OF UNSCANNED BYTES IN THE 52229420 * INPUT BUFFER LESS ONE */ 52229520 LH @3,@D2 0181 52229620 SH @3,LNUM+8 0181 52229720 AH @3,LBDV+6 0181 52229820 * 52229920 */* S DELIMIT: LOCATE NEXT DELIMITER CHARACTER */ 52230020 * 52230120 * CALL DELIMIT; /* INVOKE THE DELIMIT INTERNAL 52230220 * SUBROUTINE ORDER TO LOCATE THE NEXT 52230320 * DELIMITER CHARACTER */ 52230420 BAL @E,DELIMIT 0182 52230520 * 52230620 */* D (YES,SCN12510,NO,SCN12520) 52230720 */* DLMTPTR = 1 | CHARACTER CODE ^= 5 */ 52230820 * 52230920 * /***********************************************/ 52231020 * /* IF THE DELIMITER CHARACTER WAS NOT IN */ 52231120 * /* THE FIRST POSITION IN THE REMAINING */ 52231220 * /* BUFFER OR THE DELIMITER CHARACTER WAS */ 52231320 * /* NOT A CODE 5 CHARACTER, RETURN TO THE */ 52231420 * /* INVOKER INDICATING A DELIMITER ERROR. */ 52231520 * /***********************************************/ 52231620 * IF R1PTR24 > R4PTR24 | 52231720 * R2FIXED ^= 5 52231820 * THEN 52231920 CR @1,@4 0183 52232020 BC 02,@9E8 0183 52232120 CH @2,@D8 0183 52232220 BC 08,@9E7 0183 52232320 * 52232420 */*SCN12510: P (,SCN12600) SCAN CODE = 1032 */ 52232520 * 52232620 *SCN12510: DO; 52232720 @9E8 EQU * 0184 52232820 * R3FIXED = 1032; /* SET THE SCAN CODE 52232920 * TO INDICATE A DELIMITER ERROR */ 52233020 SCN12510 LA @3,1032 0185 52233120 * GO TO SCN12600; /* UPDATE THE LOCAL NUMERIC 52233220 * ARRAY TO INDICATE THE STATUS OF THE 52233320 * SCAN AT THE TIME THAT THE DELIMITER 52233420 * ERROR WAS ENCOUNTERED, SET THE RETURN 52233520 * CODE TO INDICATE A DELIMITER ERROR, 52233620 * AND RETURN TO THE INVOKER */ 52233720 BC 15,SCN12600 0186 52233820 * END SCN12510; 52233920 * /***********************************************/ 52234020 * /* IF THE DELIMITER CHARACTER APPEARED IN */ 52234120 * /* THE FIRST REMAINING POSITION IN THE */ 52234220 * /* BUFFER AND THE CHARACTER WAS A CODE 5 */ 52234320 * /* DELIMITER CHARACTER, CONTINUE TO SCAN */ 52234420 * /* IN ORDER TO DETERMINE WHICH DELIMITER */ 52234520 * /* TERMINATES THE FIELD. */ 52234620 * /***********************************************/ 52234720 * ELSE 52234820 * 52234920 */*SCN12510: S UPDATREG: UPDATE SCAN VARIABLES */ 52235020 * 52235120 *SCN12520: DO; 52235220 @9E7 EQU * 0188 52235320 * CALL UPDATREG; /* RESET THE SCAN VARIABLES 52235420 * TO REFLECT THE REMAINING, UNSCANNED 52235520 * BUFFER */ 52235620 SCN12520 BAL @E,UPDATREG 0189 52235720 * 52235820 */* S DELIMIT: LOCATE NEXT DELIMITER CHARACTER */ 52235920 * 52236020 * CALL DELIMIT; /* INVOKE THE DELIMIT INTERNAL 52236120 * SUBROUTINE IN ORDER TO LOCATE THE 52236220 * NEXT DELIMITER CHARACTER. */ 52236320 BAL @E,DELIMIT 0190 52236420 * 52236520 */* D (YES,SCN12540,NO,SCN12560) 52236620 */* DLMTPTR > 1 | CHARACTER CODE ^= 02 */ 52236720 * 52236820 * IF R1PTR24 > R4PTR24 52236920 * | R2FIXED ^= 2 52237020 * THEN /* IF NO DELIMITER CHARACTER WAS LO- 52237120 * CATED IN THE FIRST REMAINING BYTE 52237220 * OF THE BUFFER, RETURN TO THE WITH 52237320 * RETURN CODE 16 */ 52237420 CR @1,@4 0191 52237520 BC 02,@9E6 0191 52237620 CH @2,@D9 0191 52237720 BC 08,@9E5 0191 52237820 * 52237920 */*SCN12540: P (,SCN12600) SCAN CODE = 16 */ 52238020 * 52238120 *SCN12540: DO; 52238220 @9E6 EQU * 0192 52238320 * R3FIXED = 16; /* SET THE SCAN CODE 52238420 * TO 16 */ 52238520 SCN12540 LA @3,16 0193 52238620 * GO TO SCN12600; /* UPDATE THE LOCAL NU- 52238720 * MERIC ARRAY TO INCICATE THE STATUS 52238820 * OF THE SCAN AT THE TIME THAT THE 52238920 * DELIMITER ERROR WAS ENCOUNTERED, 52239020 * SET THE RETURN CODE TO INDICATE A 52239120 * DELIMITER ERROR, AND RETURN TO THE 52239220 * INVOKER */ 52239320 BC 15,SCN12600 0194 52239420 * END SCN12540; 52239520 * /********************************************/ 52239620 * /* IF A DELIMITER CHARACTER WAS LOCATED */ 52239720 * /* IN THE FIRST REMAINING POSITION IN */ 52239820 * /* THE BUFFER, DETERMINE THE DELIMITER */ 52239920 * /* ENCOUNTERED. */ 52240020 * /********************************************/ 52240120 * ELSE 52240220 * 52240320 */*SCN12560: P SCAN CODE = 16 */ 52240420 * 52240520 *SCN12560: DO; 52240620 @9E5 EQU * 0196 52240720 * R3FIXED = 16; /* SET THE SCAN CODE 52240820 * TO 16 */ 52240920 SCN12560 LA @3,16 0197 52241020 * 52241120 */*SCN12600: P (,SCN1RSCN) 52241220 */* LNUMSCAN = 52241320 */* LENGTH( BUFFER) - LENGTH( LBUFFER) */ 52241420 * 52241520 *SCN12600: LNUMSCAN = 52241620 * R1PTR24 - LBDVBUF + 1; /* UPDATE THE 52241720 * LOCAL NUMERIC ARRAY TO REFLECT ALL 52241820 * BYTES SCANNED DURING THE NEXT LEVEL 52241920 * OF IEFVSCAN OR IEFVSCN1 AND DURING 52242020 * THE PERIOD SUBSEQUENT TO THE RETURN 52242120 * FROM THEM */ 52242220 SCN12600 LA @F,1 0198 52242320 S @F,LBDV 0198 52242420 AR @F,@1 0198 52242520 STH @F,LNUM+8 0198 52242620 * GO TO SCN1RSCN; /* SET THE RETURN CODE 52242720 * TO THE SCAN CODE AND RETURN TO THE 52242820 * INVOKER */ 52242920 BC 15,SCN1RSCN 0199 52243020 * END SCN12560; 52243120 * END SCN12520; 52243220 * END SCN12360; 52243320 * END SCN12320; 52243420 *SCN13100:/***********************************************************/ 52243520 * /* A CODE 3 CHARACTER ENCOUNTERED. DETERMINE DELIMITER */ 52243620 * /* CODE AND PROCESS THE OPERAND */ 52243720 * /************************************************************/ 52243820 * ODVLEN = R1PTR24 - ODVOPER; /* SET THE OPERAND LENGTH TO THE 52243920 * DIFFERENCE OF THE DELIMITER POINTER 52244020 * AND THE LOCATION OF THE INITIAL 52244120 * CHARACTER OF THE OPERAND */ 52244220 SCN13100 LR @F,@1 0204 52244320 S @F,ODV 0204 52244420 STH @F,ODV+6 0204 52244520 * ODVMX = ODVLEN; /* SET THE BUFFER LENGTH EQUAL TO THE 52244620 * OPERAND LENGTH */ 52244720 MVC ODV+4(2),ODV+6 0205 52244820 * CALL UPDATREG; /* RESET THE SCAN VARIABLES TO REFLECT 52244920 * THE REMAINING, UNSCANNED BUFFER */ 52245020 BAL @E,UPDATREG 0206 52245120 * CALL DELIMIT; /* LOCATE THE NEXT DELIMITER CHARACTER 52245220 * WITHIN THE BUFFER */ 52245320 BAL @E,DELIMIT 0207 52245420 * /************************************************************/ 52245520 * /* IF A CODE 4 CHARACTER WAS ENCOUNTERED IN THE POSITION */ 52245620 * /* ADJACENT TO THE CODE 3 CHARACTER, SET THE DELIMITER */ 52245720 * /* CODE TO 12. PROCESS THE OPERAND. */ 52245820 * /************************************************************/ 52245920 * IF R2FIXED = 4 52246020 * & R1PTR24 <= R4PTR24 52246120 * THEN 52246220 CH @2,@D1 0208 52246320 BC 07,@9E4 0208 52246420 CR @1,@4 0208 52246520 BC 02,@9E3 0208 52246620 *SCN13120: DO; 52246720 * R2FIXED = 12; /* SET THE DELIMITER CODE TO 12 */ 52246820 SCN13120 LA @2,12 0210 52246920 * GO TO SCN12140; /* PROCESS THE OPERAND */ 52247020 BC 15,SCN12140 0211 52247120 * END SCN13120; 52247220 * /************************************************************/ 52247320 * /* IF A CODE 4 CHARACTER WAS NOT ENCOUNTERED OR THE */ 52247420 * /* POSITION IN WHICH IT WAS ENCOUNTERED WAS NOT ADJACENT */ 52247520 * /* TO THE CODE 3 CHARACTER, SET THE DELIMITER CODE TO */ 52247620 * /* 8 AND PROCESS THE OPERAND. */ 52247720 * /************************************************************/ 52247820 * ELSE 52247920 *SCN13140: DO; 52248020 @9E3 EQU * 0213 52248120 @9E4 EQU * 0213 52248220 * R2FIXED = 8; /* SET THE DELIMITER CODE TO 8 */ 52248320 SCN13140 LA @2,8 0214 52248420 * GO TO SCN12160; /* PROCESS THE OPERAND. */ 52248520 BC 15,SCN12160 0215 52248620 * END SCN13140; 52248720 *SCN14100:/***********************************************************/ 52248820 * /* A CODE 4 CHARACTER ENCOUNTERED. SCAN TO A BALANCING */ 52248920 * /* CODE 5 CHARACTER TO IDENTIFY AN OPERAND. */ 52249020 * /************************************************************/ 52249120 * CALL UPDATREG; /* UPDATE THE DELIMITER SCAN INPUT 52249220 * VARIABLES TO REFLECT THE REMAINING 52249320 * UNSCANNED BUFFER */ 52249420 SCN14100 BAL @E,UPDATREG 0217 52249520 * RESTRICT(R5PTR24); /* RESERVE REGISTER 5 FOR EXPLICIT 52249620 * REFERENCES */ 52249720 * R5PTR24 = 1; /* SET THE NUMBER OF CODE 4 CHARACTERS 52249820 * ENCOUNTERED TO 1 */ 52249920 LA @5,1 0219 52250020 * ODVOPER = R1PTR24; /* INDICATE THAT THE OPERAND ORIGIN 52250120 * IS THE CODE 4 CHARACTER */ 52250220 ST @1,ODV 0220 52250320 *SCN14140: CALL DELIMIT; /* INVOKE THE DELIMIT FUNCTION TO LOCATE 52250420 * THE NEXT DELIMITER IN THE STREAM */ 52250520 SCN14140 BAL @E,DELIMIT 0221 52250620 * IF R2FIXED >= 6 52250720 * THEN /* TAKE ACTION ACCORDING TO THE CHAR- 52250820 * ACTER CODE ENCOUNTERED NEXT WITHIN 52250920 * THE TEXT */ 52251020 CH @2,@D3 0222 52251120 * GO TO SCN1R40C; /* RETURN TO THE INVOKER INDICATING 52251220 * THAT AN INVALID CHARACTER WAS 52251320 * ENCOUNTERED */ 52251420 BC 10,SCN1R40C 0223 52251520 * /*******************************************************/ 52251620 * /* IF A VALID CHARACTER WAS LOCATED WITHIN THE */ 52251720 * /* BUFFER, USE A BRANCH TABLE TO INVOKE AN APPRO- */ 52251820 * /* PRIATE PROCESSOR FOR THE DELIMITER CHARACTER */ 52251920 * /*******************************************************/ 52252020 * ELSE 52252120 *SCN14160: DO; 52252220 * R2FIXED = R2FIXED * 4; /* ADJUST THE CHARACTER 52252320 * CODE FOR USE IN A BRANCH TABLE */ 52252420 SCN14160 SLA @2,2 0225 52252520 * /* BRANCH TO A PROCESSOR TO HANDLE THE DELIMITER 52252620 * CHARACTER ENCOUNTERED */ 52252720 * GENERATE; 52252820 B SCN14180(R2FIXED) INVOKE APPROPRIATE PROCESSOR 52252920 SCN14180 B SCN1R408 CHARACTER CODE 0 PROCESSOR 52253020 B SCN1R408 CHARACTER CODE 1 PROCESSOR 52253120 B SCN14200 CHARACTER CODE 2 PROCESSOR 52253220 B SCN14200 CHARACTER CODE 3 PROCESSOR 52253320 B SCN14220 CHARACTER CODE 4 PROCESSOR 52253420 B SCN14240 CHARACTER CODE 5 PROCESSOR 52253520 B SCN14280 CHARACTER CODE 6 PROCESSOR 52253620 DS 0H 52253720 * END SCN14160; 52253820 *SCN14200: /*******************************************************/ 52253920 * /* COMMON PROCESSING FUNCTION TO CONTINUE THE SCAN */ 52254020 * /* FOR A BALANCING CODE 5 CHARACTER WITHIN AN */ 52254120 * /* OPERAND WITH A CODE 4 CHARACTER AS ITS INITIAL */ 52254220 * /* CHARACTER. THIS FUNCTION IS INVOKED IMMEDIATELY */ 52254320 * /* AFTER A CODE 2 OR 3 CHARACTER IS ENCOUNTERED */ 52254420 * /* WITHIN SUCH AN OPERAND, AFTER PRELIMINARY */ 52254520 * /* PROCESSING FOR OTHER DELIMITERS. */ 52254620 * /*******************************************************/ 52254720 * CALL UPDATREG; /* INVOKE UPDATREG */ 52254820 SCN14200 BAL @E,UPDATREG 0228 52254920 * GO TO SCN14140; /* ITERATE THE DELIMITER SCAN FOR THE 52255020 * END OF THE OPERAND */ 52255120 BC 15,SCN14140 0229 52255220 *SCN14220: /*******************************************************/ 52255320 * /* A CODE 4 CHARACTER ENCOUNTERED WITHIN AN OPERAND */ 52255420 * /* BOUNDED ON THE LEFT BY A CODE 4 CHARACTER. */ 52255520 * /*******************************************************/ 52255620 * R5PTR24 = R5PTR24 + 1; /* INCREMENT PARENTHESIS COUNTER*/ 52255720 SCN14220 LA @5,1(0,@5) 0230 52255820 * GO TO SCN14200; /* ITERATE THE DELIMITER SCAN */ 52255920 BC 15,SCN14200 0231 52256020 *SCN14240: /*******************************************************/ 52256120 * /* A CODE 5 CHARACTER ENCOUNTERED WITHIN AN OPERAND */ 52256220 * /* BOUNDED ON THE LEFT BY A CODE 4 CHARACTER. */ 52256320 * /*******************************************************/ 52256420 * R5PTR24 = R5PTR24 - 1; /* DECREMENT THE CODE 4 CHARACTER 52256520 * COUNTER */ 52256620 SCN14240 BCTR @5,0 0232 52256720 * IF R5PTR24 > 0 52256820 * THEN /* IF THE CODE 4 CHARACTER COUNT IS 52256920 * GREATER THAN ZERO, THEN LOOP BACK 52257020 * TO FIND THE NEXT DELIMITER. */ 52257120 LTR @5,@5 0233 52257220 * GO TO SCN14200; /* SCAN FOR THE NEXT DELIMITER 52257320 * CHARACTER */ 52257420 BC 02,SCN14200 0234 52257520 * ELSE /* IF THE CODE 4 CHARACTER COUNT IS 52257620 * ZERO OR LESS, FIND THE TERMINAL 52257720 * DELIMITER FOR THE OPERAND. */ 52257820 *SCN14260: DO; 52257920 * CALL UPDATREG; /* RESET THE SCAN REGISTERS FOR A 52258020 * CONTINUED SCAN */ 52258120 SCN14260 BAL @E,UPDATREG 0236 52258220 * GO TO SCN10020; /* RESUME THE SCAN FOR THE TERMINAL 52258320 * FIELD DELIMITER */ 52258420 BC 15,SCN10020 0237 52258520 * END SCN14260; 52258620 * RESPECIFY 52258720 * R7PTR24 RESTRICTED; /* RESERVE A REGISTER FOR 52258820 * EXPLICIT REFERENCE */ 52258920 *SCN14280: /*******************************************************/ 52259020 * /* A CODE 6 CHARACTER ENCOUNTERED WITHIN AN OPERAND */ 52259120 * /* BOUNDED ON THE LEFT BY A CODE 4 CHARACTER */ 52259220 * /*******************************************************/ 52259320 * R7PTR24 = R1PTR24; /* SAVE THE LOCATION OF THE CODE 6 52259420 * CHARACTER */ 52259520 SCN14280 LR @7,@1 0240 52259620 * CALL UPDATREG; /* RESET THE SCAN VARIABLES FOR A 52259720 * CONTINUED SCAN */ 52259820 BAL @E,UPDATREG 0241 52259920 *SCN14300: CALL DELIMIT; /* SCAN FOR THE NEXT DELIMITER 52260020 * CHARACTER */ 52260120 SCN14300 BAL @E,DELIMIT 0242 52260220 * IF R2FIXED = 0 52260320 * THEN /* IF NO DELIMITER IS PRESENT IN THE 52260420 * REMAINING BUFFER, RETURN TO THE IN- 52260520 * VOKER INDICATING A DELIMITER ERROR */ 52260620 LTR @2,@2 0243 52260720 * GO TO SCN1R408; /* SET THE RETURN CODE TO INDICATE 52260820 * A DELIMITER ERROR AND RETURN TO THE 52260920 * INVOKER */ 52261020 BC 08,SCN1R408 0244 52261120 * ELSE /* IF A DELIMITER CHARACTER IS PRESENT 52261220 * IN THE REMAINING BUFFER, DETERMINE 52261320 * WHETHER IT IS A MATCHING CODE 6 52261420 * CHARACTER */ 52261520 *SCN14320: DO; 52261620 * CALL UPDATREG; /* RESET THE SCAN VARIABLES FOR A 52261720 * CONTINUED SCAN */ 52261820 SCN14320 BAL @E,UPDATREG 0246 52261920 * IF R2FIXED = 6 & 52262020 * R1PTR24 -> BUFFER(1:1) = 52262120 * R7PTR24 -> BUFFER(1:1) 52262220 * THEN /* IF A MATCHING CODE 6 CHARACTER WAS 52262320 * FOUND, RESUME THE SCAN FOR A BAL- 52262420 * ANCING CODE 5 CHARACTER */ 52262520 CH @2,@D3 0247 52262620 BC 07,@9E2 0247 52262720 CLC 0(1,@1),0(@7) 0247 52262820 * GO TO SCN14140; /* RESUME THE SCAN FOR A BAL- 52262920 * ANCING CODE 5 CHARACTER */ 52263020 BC 08,SCN14140 0248 52263120 * ELSE /* IF NO MATCHING CODE 6 CHARACTER WAS 52263220 * FOUND, CHECK FOR THE END OF BUFFER 52263320 * AND RESUME THE SCAN IF IT HAS NOT 52263420 * BEEN REACHED. */ 52263520 *SCN14360: DO; 52263620 @9E1 EQU * 0249 52263720 @9E2 EQU * 0249 52263820 * IF R3FIXED < 0 52263920 * THEN /* IF THE ENTIRE BUFFER HAS BEEN SCANNED 52264020 * WITHOUT LOCATING A BALANCING CODE 6 52264120 * CHARACTER, RETURN TO THE INVOKER 52264220 * INDICATING A DELIMITER ERROR */ 52264320 SCN14360 LTR @3,@3 0250 52264420 * GO TO SCN1R408; /* SET THE RETURN CODE TO 52264520 * INDICATE A DELIMITER ERROR AND 52264620 * RETURN TO THE INVOKER */ 52264720 BC 04,SCN1R408 0251 52264820 * ELSE /* IF THE ENTIRE BUFFER HAS NOT BEEN 52264920 * SCANNED, CONTINUE TO SEARCH FOR A 52265020 * BALANCING CODE 6 CHARACTER */ 52265120 * GO TO SCN14300; /* CONTINUE THE SCAN FOR A 52265220 * MATCHING CODE 6 CHARACTER */ 52265320 BC 15,SCN14300 0252 52265420 * END SCN14360; 52265520 * END SCN14320; 52265620 * RESPECIFY 52265720 * (R7PTR24, 52265820 * R5PTR24) UNRESTRICTED;/* ALLOW IMPLICIT REFERENCES 52265920 * TO SEVERAL REGISTERS */ 52266020 *SCN15100:/***********************************************************/ 52266120 * /* A CODE 5 CHARACTER ENCOUNTERED. DETERMINE DELIMITER */ 52266220 * /* CODE AND PROCESS THE OPERAND. */ 52266320 * /************************************************************/ 52266420 * ODVLEN = R1PTR24 - ODVOPER; /* SET THE OPERAND LENGTH TO THE 52266520 * DIFFERENCE OF THE DELIMITER POINTER 52266620 * AND THE LOCATION OF THE INITIAL 52266720 * CHARACTER OF THE OPERAND */ 52266820 SCN15100 LR @F,@1 0256 52266920 S @F,ODV 0256 52267020 STH @F,ODV+6 0256 52267120 * ODVMX = ODVLEN; /* SET THE OPERAND BUFFER LENGTH EQUAL 52267220 * TO THE LENGTH OF */ 52267320 MVC ODV+4(2),ODV+6 0257 52267420 * CALL UPDATREG; /* RESET THE SCAN REGISTERS TO REFLECT 52267520 * THE REMAINING UNSCANNED BUFFER */ 52267620 BAL @E,UPDATREG 0258 52267720 * CALL DELIMIT; /* LOCATE THE NEXT DELIMITER CHARACTER 52267820 * WITHIN THE BUFFER */ 52267920 BAL @E,DELIMIT 0259 52268020 * IF R1PTR24 > R4PTR24 52268120 * THEN 52268220 CR @1,@4 0260 52268320 * GO TO SCN15250; 52268420 BC 02,SCN15250 0261 52268520 * ELSE 52268620 * IF R2FIXED <= 1 52268720 * THEN 52268820 CH @2,@D10 0262 52268920 BC 02,@9E0 0262 52269020 *SCN15150: DO; 52269120 * R2FIXED = 20; 52269220 SCN15150 LA @2,20 0264 52269320 * GO TO SCN12140; 52269420 BC 15,SCN12140 0265 52269520 * END SCN15150; 52269620 * ELSE 52269720 * IF R2FIXED = 2 52269820 * THEN 52269920 @9E0 CH @2,@D9 0267 52270020 BC 07,@9DF 0267 52270120 *SCN15200: DO; 52270220 * R2FIXED = 16; 52270320 SCN15200 LA @2,16 0269 52270420 * GO TO SCN12140; 52270520 BC 15,SCN12140 0270 52270620 * END SCN15200; 52270720 * ELSE 52270820 *SCN15250: DO; 52270920 @9DF EQU * 0272 52271020 * R2FIXED = 24; 52271120 SCN15250 LA @2,24 0273 52271220 * GO TO SCN12160; 52271320 BC 15,SCN12160 0274 52271420 * END SCN15250; 52271520 * RESPECIFY 52271620 * R7PTR24 RESTRICTED; /* RESERVE A REGISTER FOR EXPLICIT 52271720 * REFERENCES */ 52271820 *SCN16100:/***********************************************************/ 52271920 * /* A CODE 6 CHARACTER ENCOUNTERED. SCAN TO A BALANCING */ 52272020 * /* CODE 6 CHARACTER */ 52272120 * /************************************************************/ 52272220 * R7PTR24 = R1PTR24; 52272320 SCN16100 LR @7,@1 0277 52272420 * CALL UPDATREG; 52272520 BAL @E,UPDATREG 0278 52272620 *SCN16150: CALL DELIMIT; 52272720 SCN16150 BAL @E,DELIMIT 0279 52272820 * IF R2FIXED = 0 52272920 * THEN 52273020 LTR @2,@2 0280 52273120 * GO TO SCN1R408; 52273220 BC 08,SCN1R408 0281 52273320 * ELSE 52273420 *SCN16200: DO; 52273520 * CALL UPDATREG; 52273620 SCN16200 BAL @E,UPDATREG 0283 52273720 * IF R2FIXED = 6 & 52273820 * R1PTR24 -> BUFFER(1:1) = 52273920 * R7PTR24 -> BUFFER(1:1) 52274020 * THEN 52274120 CH @2,@D3 0284 52274220 BC 07,@9DE 0284 52274320 CLC 0(1,@1),0(@7) 0284 52274420 BC 07,@9DD 0284 52274520 *SCN16300: DO; 52274620 * IF R3FIXED < 0 52274720 * THEN 52274820 SCN16300 LTR @3,@3 0286 52274920 BC 10,@9DC 0286 52275020 *SCN16400: DO; 52275120 * R2FIXED = 0; 52275220 SCN16400 SR @2,@2 0288 52275320 * ODVLEN = R1PTR24 - ODVOPER; 52275420 LR @F,@1 0289 52275520 S @F,ODV 0289 52275620 STH @F,ODV+6 0289 52275720 * ODVMX = ODVLEN; 52275820 MVC ODV+4(2),ODV+6 0290 52275920 * GO TO SCN12160; 52276020 BC 15,SCN12160 0291 52276120 * END SCN16400; 52276220 * ELSE 52276320 * GO TO SCN10020; 52276420 * END SCN16300; 52276520 * ELSE 52276620 *SCN16500: DO; 52276720 @9DD EQU * 0295 52276820 @9DE EQU * 0295 52276920 * IF R3FIXED < 0 52277020 * THEN 52277120 SCN16500 LTR @3,@3 0296 52277220 * GO TO SCN1R408; 52277320 BC 04,SCN1R408 0297 52277420 * ELSE 52277520 * GO TO SCN16150; 52277620 BC 15,SCN16150 0298 52277720 * END SCN16500; 52277820 * END SCN16200; 52277920 @9DB EQU * 0300 52278020 * RESPECIFY 52278120 * R7PTR24 UNRESTRICTED; /* ALLOW IMPLICIT REFERENCES TO 52278220 * A REGISTER */ 52278320 *SCN1R000: R3FIXED = 0; /* SET SCAN CODE TO 0 AND BRANCH 52278420 * TO A COMMON EXIT FUNCTION */ 52278520 SCN1R000 SR @3,@3 0302 52278620 * GO TO SCN1RSCN; 52278720 BC 15,SCN1RSCN 0303 52278820 *SCN1R004: R3FIXED = 4; /* SET SCAN CODE TO 4 AND BRANCH 52278920 * TO A COMMON EXIT FUNCTION */ 52279020 SCN1R004 LA @3,4 0304 52279120 * GO TO SCN1RSCN; 52279220 BC 15,SCN1RSCN 0305 52279320 *SCN1R008: R3FIXED = 8; /* SET SCAN CODE TO 8 AND BRANCH 52279420 * TO A COMMON EXIT FUNCTION */ 52279520 SCN1R008 LA @3,8 0306 52279620 * GO TO SCN1RSCN; 52279720 BC 15,SCN1RSCN 0307 52279820 *SCN1R00C: R3FIXED = 12; /* SET SCAN CODE TO 12 AND BRANCH 52279920 * TO A COMMON EXIT FUNCTION */ 52280020 SCN1R00C LA @3,12 0308 52280120 * GO TO SCN1RSCN; 52280220 BC 15,SCN1RSCN 0309 52280320 *SCN1R010: R3FIXED = 16; /* SET SCAN CODE TO 16 AND BRANCH 52280420 * TO A COMMON EXIT FUNCTION */ 52280520 SCN1R010 LA @3,16 0310 52280620 * GO TO SCN1RSCN; 52280720 BC 15,SCN1RSCN 0311 52280820 *SCN1R400: R3FIXED = 1024; /* SET SCAN CODE TO 1024 AND BRANCH 52280920 * TO A COMMON EXIT FUNCTION */ 52281020 SCN1R400 LA @3,1024 0312 52281120 * GO TO SCN1RSCN; 52281220 BC 15,SCN1RSCN 0313 52281320 *SCN1R404: R3FIXED = 1028; /* SET SCAN CODE TO 1028 AND BRANCH 52281420 * TO A COMMON EXIT FUNCTION */ 52281520 SCN1R404 LA @3,1028 0314 52281620 * GO TO SCN1RSCN; 52281720 BC 15,SCN1RSCN 0315 52281820 *SCN1R408: R3FIXED = 1032; /* SET SCAN CODE TO 1032 AND BRANCH 52281920 * TO A COMMON EXIT FUNCTION */ 52282020 SCN1R408 LA @3,1032 0316 52282120 * GO TO SCN1RSCN; 52282220 BC 15,SCN1RSCN 0317 52282320 *SCN1R40C: R3FIXED = 1036; /* SET SCAN CODE TO 1036 AND BRANCH 52282420 * TO A COMMON EXIT FUNCTION */ 52282520 SCN1R40C LA @3,1036 0318 52282620 * GO TO SCN1RSCN; 52282720 *SCN1RSCN:/***********************************************************/ 52282820 * /* SET THE RETURN CODE TO THE VALUE CONTAINED IN SCAN */ 52282920 * /* CODE AND RESTORE THE NUMERIC ARRAY TO THE LEVEL WHICH */ 52283020 * /* SHOULD BE RETURNED TO THE INVOKER */ 52283120 * /************************************************************/ 52283220 * NUMRCODE = R3FIXED; /* SET THE RETURN CODE TO THE VALUE 52283320 * CONTAINED IN SCAN CODE. */ 52283420 SCN1RSCN STH @3,10(0,@6) 0320 52283520 *SCN1RC: /************************************************************/ 52283620 * /* COMMON EXIT ROUTINE FOR IEFVSCN1 AND FOR IEFVSCAN */ 52283720 * /************************************************************/ 52283820 * NUMSCAN = NUMSCAN + LNUMSCAN; /* UPDATE THE NUMBER OF BYTES 52283920 * WHICH HAVE BEEN SCANNED DURING THIS 52284020 * INVOCATION OF THE SCAN */ 52284120 SCN1RC LH @F,LNUM+8 0321 52284220 AH @F,8(0,@6) 0321 52284320 STH @F,8(0,@6) 0321 52284420 * R3FIXED = NUMRCODE; /* SET SCAN CODE TO THE VALUE WHICH IS 52284520 * TO BE USED AS A RETURN CODE */ 52284620 LH @3,10(0,@6) 0322 52284720 * SAVELAST -> SAVER15 = R3FIXED; /* SET UP RETURN CODE FOR 52284820 * REGISTER 15 */ 52284920 L @5,4(0,@D) 0323 52285020 ST @3,16(0,@5) 0323 52285120 * /************************************************************/ 52285220 * /* PERFORM EPILOGUE FUNCTIONS */ 52285320 * /************************************************************/ 52285420 * R0FIXED = SAVEWRD1; /* LOAD DSA SPECIFICATION */ 52285520 L @0,0(0,@D) 0324 52285620 * R1PTR24 = R13; /* LOAD DSA ADDRESS */ 52285720 LR @1,@D 0325 52285820 * R13 = SAVELAST; /* RELOAD OLD SAVE AREA POINTER */ 52285920 L @D,4(0,@D) 0326 52286020 * GENERATE; 52286120 ** /* 52286220 DROP R13 INDICATE R13 NO LONGER VALID 52286320 FREEMAIN R,LV=(0),A=(1) RELEASE DSA 52286420 ** */ 52286520 DS 0H 52286620 * SAVERETF = 'FF'X; /* INDICATE RETURN */ 52286720 MVI 12(@D),X'FF' 0328 52286820 * 52286920 */* R RETURN TO INVOKER */ 52287020 * 52287120 * RETURN; /* RETURN TO THE INVOKER */ 52287220 BC 15,@EL01 0329 52287320 *PROLOGUE:/***********************************************************/ 52287420 */* PROLOGUE -- COMMON INITIALIZATION FUNCTION FOR IEFVSCAN AND */ 52287520 */* IEFVSCN1 */ 52287620 */* */ 52287720 */* INPUT -- REGISTER 13 POINTS TO A SAVE AREA WHICH IS */ 52287820 */* BACK-CHAINED IN A STANDARD MANNER TO THE SAVE AREA */ 52287920 */* WHICH WAS INPUT TO IEFVSCAN OR IEFVSCN1 */ 52288020 */* */ 52288120 */* OUTPUT -- A COPY OF THE INPUT PARAMETER LIST TO IEFVSCAN */ 52288220 */* OR IEFVSCN1 WILL HAVE BEEN TRANSCRIBED TO THE LOCAL */ 52288320 */* STRUCTURE PARM. A LOCAL COPY OF THE BUFFER DOPE */ 52288420 */* VECTOR INPUT TO THE MODULE WILL BE PLACED IN LBDV. */ 52288520 */* THE NUMERIC ARRAY POINTER WILL BE SET TO THE ADDRESS */ 52288620 */* OF THE NUMERIC INPUT ARRAY. */ 52288720 */********************************************************************/ 52288820 * PROCEDURE OPTIONS(NOSAVEAREA, DONTSAVE); 52288920 @EL01 LM @E,@C,12(@D) 0330 52289020 BCR 15,@E 0330 52289120 PROLOGUE EQU * 0330 52289220 * GENERATE; 52289320 ** /* 52289420 TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- INTERNAL COMM O52289520 N INITIALIZATION FUNCTION' 52289620 ** */ 52289720 DS 0H 52289820 * RESTRICT(R1PTR24, R2FIXED, R3FIXED, 52289920 * R4PTR24, R5PTR24, R6PTR24, R12);/* 52290020 * RESERVE SEVERAL REGISTERS FOR 52290120 * EXPLICIT CODE REFERENCES */ 52290220 * R5PTR24 = R14; /* SAVE RETURN ADDRESS IN REGISTER 5 */ 52290320 LR @5,@E 0333 52290420 * R4PTR24 = R1PTR24; /* SAVE PARAMETER LIST POINTER IN 52290520 * REGISTER 4 */ 52290620 LR @4,@1 0334 52290720 * GENERATE; 52290820 ** /* 52290920 L R0FIXED,@SIZ001 LOAD DSA SPECIFICATION 52291020 GETMAIN R,LV=(0) OBTAIN DSA 52291120 MVC SAVEWRD1-SAVEAREA(4,R1PTR24),@SIZ001 DSA DESCRIPTOR 52291220 ** */ 52291320 DS 0H 52291420 * R1PTR24 -> SAVELAST = R13;/* 52291520 * CHAIN NEW SAVE AREA */ 52291620 ST @D,4(0,@1) 0336 52291720 * SAVENEXT = R1PTR24; /* CHAIN OLD SAVE AREA */ 52291820 ST @1,8(0,@D) 0337 52291920 * R13 = R1PTR24; /* LOAD DSA POINTER */ 52292020 LR @D,@1 0338 52292120 * GENERATE; 52292220 ** /* 52292320 USING @DATD,R13 TELL THE ASSEMBLER 52292420 XC @TEMPS(@L),@TEMPS CLEAR TEMPORARIES FOR ALIGNMENT 52292520 ** */ 52292620 DS 0H 52292720 * PARM(1:20) = 52292820 * R4PTR24 -> PARAM(1:20); /* OBTAIN A LOCAL COPY 52292920 * OF THE PARAMETER LIST */ 52293020 MVC PARM(20),0(@4) 0340 52293120 * LNUM = LNUM && LNUM; /* CLEAR THE LOCAL NUMERIC ARRAY */ 52293220 XC LNUM(12),LNUM 0341 52293320 * LBDV = BDV; /* OBTAIN A LOCAL COPY OF THE INPUT 52293420 * BUFFER DOPE VECTOR */ 52293520 L @7,PARM 0342 52293620 MVC LBDV(8),0(@7) 0342 52293720 * R6PTR24 = PARMNUM; /* SET THE NUMERIC ARRAY POINTER TO 52293820 * POINT TO THE INPUT NUMERIC ARRAY */ 52293920 L @6,PARM+12 0343 52294020 * R14 = R5PTR24; /* RELOAD RETURN ADDRESS */ 52294120 LR @E,@5 0344 52294220 * RETURN; /* RETURN TO THE INVOKER */ 52294320 * END PROLOGUE; /* END OF PROLOGUE INTERNAL FUNCTION */ 52294420 @EL02 BCR 15,@E 0346 52294520 *UPDATREG:/***********************************************************/ 52294620 */* UPDATREG -- INTERNAL FUNCTION RESPONSIBLE FOR RESETTING */ 52294720 */* DELIMITER BUFFER POINTER 1 AND DELIMITER BUFFER */ 52294820 */* RESIDUE 1 FOR CONTINUED SCAN GIVEN THE ADDRESS OF THE */ 52294920 */* LAST BYTE SCANNED IN DELIMITER POINTER, THE STATUS OF */ 52295020 */* THE SCAN DIRECTLY BEFORE REFLECTED IN DELIMITER */ 52295120 */* BUFFER POINTER 1 AND DELIMITER BUFFER RESIDUE 1. */ 52295220 */* */ 52295320 */* INPUT -- THE DELIMITER POINTER MUST CONTAIN THE ADDRESS OF */ 52295420 */* THE LAST BYTE SCANNED. DELIMITER BUFFER RESIDUE 1 */ 52295520 */* MUST CONTAIN THE NUMBER OF BYTES WHICH REMAINED TO BE */ 52295620 */* SCANNED BEFORE THE LAST SCAN WAS MADE, AND DELIMITER */ 52295720 */* BUFFER POINTER 1 MUST CONTAIN THE ADDRESS OF THE FIRST */ 52295820 */* BYTE SCANNED DURING THE PREVIOUS SCAN. */ 52295920 */* */ 52296020 */* OUTPUT -- DELIMIT BUFFER RESIDUE 1 WILL CONTAIN THE NUMBER */ 52296120 */* OF BYTES WHICH REMAIN TO BE SCANNED IN THE BUFFER, AND */ 52296220 */* DELIMITER BUFFER POINTER 1 WILL CONTAIN A POINTER TO */ 52296320 */* THE FIRST UNSCANNED BYTE OF THE BUFFER. */ 52296420 */********************************************************************/ 52296520 * PROCEDURE OPTIONS(NOSAVEAREA, DONTSAVE(3,4)); 52296620 UPDATREG STM @E,@2,12(@D) 0347 52296720 STM @5,@C,40(@D) 0347 52296820 * RESTRICT(R1PTR24 ,R2FIXED ,R3FIXED, 52296920 * R4PTR24, R5PTR24, R6PTR24, R12);/* 52297020 * RESERVE REGISTERS FOR EXPLICIT 52297120 * REFERENCES */ 52297220 * GENERATE; 52297320 TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- INTERNAL REGIST E52297420 R UPDATE FUNCTION' 52297520 DS 0H 52297620 * R3FIXED = R3FIXED + R4PTR24 52297720 * - R1PTR24 - 1; /* UPDATE THE BUFFER RESIDUE 1 TO 52297820 * REFLECT THE BYTES SCANNED DURING 52297920 * THE LAST CALL TO DELIMIT. */ 52298020 LH @F,@D2 0350 52298120 SR @F,@1 0350 52298220 AR @F,@4 0350 52298320 AR @3,@F 0350 52298420 * R4PTR24 = R1PTR24 + 1; /* UPDATE DELIMITER BUFFER POINTER 52298520 * 1 TO REFLECT THE BYTES SCANNED 52298620 * DURING THE LAST CALL TO DELIMIT. */ 52298720 LA @4,1(0,@1) 0351 52298820 * RETURN; /* RETURN TO THE INVOKER */ 52298920 * END UPDATREG; /* END OF UPDATREG INTERNAL FUNCTION */ 52299020 @EL03 LM @E,@2,12(@D) 0353 52299120 LM @5,@C,40(@D) 0353 52299220 BCR 15,@E 0353 52299320 *DELIMIT:/************************************************************/ 52299420 */* DELIMIT -- INTERNAL FUNCTION RESPOSIBLE FOR DRIVING A */ 52299520 */* TRANSLATE AND TEST ACROSS A VARIABLE LENGTH BUFFER */ 52299620 */* */ 52299720 */* INPUT -- DELIMIT BUFFER POINTER 1 MUST CONTAIN THE ADDRESS */ 52299820 */* OF THE BUFFER WHICH IS TO BE SCANNED. DELIMIT BUFFER */ 52299920 */* RESIDUE 1 MUST CONTAIN THE LENGTH OF THE BUFFER MINUS */ 52300020 */* 1. */ 52300120 */* */ 52300220 */* OUTPUT -- DELIMIT BUFFER POINTER 1 WILL BE UNCHANGED AS */ 52300320 */* WILL BE DELIMIT BUFFER RESIDUE 1. THE CHARACTER CODE */ 52300420 */* WILL CONTAIN ZERO IF NO DELIMITER WAS ENCOUNTERED, THE */ 52300520 */* TRANSLATE AND TEST CODE FOR THE DELIMITER IF ONE WAS. */ 52300620 */* THE DELIMITER POINTER WILL CONTAIN THE ADDRESS OF THE */ 52300720 */* BYTE FOLLOWING THE LAST BYTE OF THE BUFFER IF NO */ 52300820 */* DELIMITER WAS */ 52300920 */* ENCOUNTERED, THE ADDRESS OF THE DELIMITER ITSELF */ 52301020 */* IF ONE WAS ENCOUNTERED. ALL OTHER VARIABLES WILL BE */ 52301120 */* RETURNED TO THE INVOKER UNALTERED. */ 52301220 */********************************************************************/ 52301320 * PROCEDURE 52301420 * OPTIONS(NOSAVEAREA, 52301520 * DONTSAVE(1,2)); 52301620 DELIMIT STM @E,@0,12(@D) 0354 52301720 STM @3,@C,32(@D) 0354 52301820 * GENERATE; 52301920 TITLE 'IEFVSCAN -- TABLE-DRIVEN SYNTAX SCAN -- INTERNAL DELIMI T52302020 ER CHARACTER LOCATION FUNCTION' 52302120 DS 0H 52302220 * /************************************************************/ 52302320 * /* DEFINE THOSE VARIABLES KNOWN ONLY WITHIN THE DELIMIT */ 52302420 * /* SUBROUTINE */ 52302520 * /************************************************************/ 52302620 * DECLARE 52302720 * DLMT0050 STATIC LOCAL LABEL INTERNAL, 52302820 * DLMT0100 STATIC LOCAL LABEL INTERNAL, 52302920 * DLMT0200 STATIC LOCAL LABEL INTERNAL, 52303020 * DLMT0300 STATIC LOCAL LABEL INTERNAL, 52303120 * DLMT9990 STATIC LOCAL LABEL INTERNAL; 52303220 * RESTRICT(R1PTR24, R2FIXED, R3FIXED, 52303320 * R4PTR24, R5PTR24, R6PTR24, R12);/* 52303420 * RESERVE SEVERAL REGISTERS FOR 52303520 * EXPLICIT CODE REFERENCES */ 52303620 * R1PTR24 = R4PTR24; /* SET DELIMIT BUFFER POINTER 2 TO THE 52303720 * ADDRESS OF THE BUFFER. DURING THE 52303820 * EXECUTION OF THIS ROUTINE THIS 52303920 * VARIABLE SHOULD ALWAYS CONTAIN THE 52304020 * ADDRESS OF THE NEXT PART OF THE BUF- 52304120 * FER TO WHICH THE TRANSLATE AND TEST 52304220 * INSTRUCTION SHOULD BE DIRECTED */ 52304320 LR @1,@4 0358 52304420 * R6PTR24 = R3FIXED; /* SET DELIMIT BUFFER RESIDUE 2 TO THE 52304520 * LENGTH OF THE BUFFER MINUS 1. DURING 52304620 * THE EXECUTION OF THIS ROUTINE THIS 52304720 * VARIABLE SHOULD CONTAIN THE NUMBER 52304820 * OF BYTES REMAINING TO BE SCANNED 52304920 * MINUS 1. */ 52305020 LR @6,@3 0359 52305120 * R2FIXED = 0; /* THE CHARACTER CODE IS SET BY THE 52305220 * TRANSLATE AND TEST INSTRUCTION TO 52305320 * THE CODE FOR THE DELIMITER. THIS 52305420 * IS INITIALLY ZERO, A VALUE WHICH 52305520 * WILL BE RETAINED IF NO DELIMITER IS 52305620 * ENCOUNTERED DURING THE TRANSLATE AND 52305720 * TEST OPERATION */ 52305820 SR @2,@2 0360 52305920 * GO TO DLMT0270; /* ENTER THE SCAN LOOP */ 52306020 BC 15,DLMT0270 0361 52306120 *DLMT0050:/***********************************************************/ 52306220 * /* IF THE REMAINING BUFFER EQUAL TO 256 BYTES IN LENGTH, */ 52306320 * /* SET A TRANSLATE AND TEST TO SCAN ONLY THE REMAINING */ 52306420 * /* BYTES OF THE BUFFER */ 52306520 * /************************************************************/ 52306620 * IF R6PTR24 < 256 THEN 52306720 DLMT0050 CH @6,@D4 0362 52306820 BC 10,@9DA 0362 52306920 *DLMT0100: DO; 52307020 * R1PTR24 = R5PTR24 + R6PTR24 + 1; /* SET THE DELIMI- 52307120 * TER POINTER AS IF THE SCAN HAD ENDED 52307220 * ON THE BYTE FOLLOWING THE BUFFER */ 52307320 DLMT0100 LA @1,1(@6,@5) 0364 52307420 * GENERATE(EX R6PTR24,DLMT9990); /* EXECUTE A TRANSLATE 52307520 * AND TEST INSTRUCTION TO ATTEMPT TO 52307620 * LOCATE A DELIMITER WITHIN THE FINAL 52307720 * BYTES OF THE BUFFER */ 52307820 EX R6PTR24,DLMT9990 52307920 DS 0H 52308020 BC 15,@9D9 0367 52308120 * END DLMT0100; 52308220 * /************************************************************/ 52308320 * /* IF THE REMAINING BUFFER CONTAINS AT LEAST 256 BYTES */ 52308420 * /* OF DATA, TRANSLATE AND TEST THE NEXT 256 BYTES OF THE */ 52308520 * /* BUFFER IN SEARCH OF A DELIMITER. */ 52308620 * /************************************************************/ 52308720 * ELSE 52308820 *DLMT0200: DO; 52308920 @9DA EQU * 0367 52309020 * R1PTR24 = R4PTR24 + 256; /* SET THE DELIMITER 52309120 * POINTER TO POINT TO THE BYTE 52309220 * FOLLOWING THE LAST ONE TO BE 52309320 * TRANSLATED. */ 52309420 DLMT0200 LA @1,256(0,@4) 0368 52309520 * GENERATE(TRT 0(256,R5PTR24),TRTTAB); /* TRANSLATE AND 52309620 * TEST OVER 256 BYTES OF THE BUFFER 52309720 * IN SEARCH OF A DELIMITER */ 52309820 TRT 0(256,R5PTR24),TRTTAB 52309920 DS 0H 52310020 * END DLMT0200; 52310120 * /************************************************************/ 52310220 * /* COMMON ROUTINE TO PROCESS THE RESULTS OF BOTH */ 52310320 * /* TRANSLATE AND TEST BRANCHES */ 52310420 * /************************************************************/ 52310520 * IF R2FIXED ^= 0 THEN /* IF A NON-ZERO FUNCTION BYTE 52310620 * WAS LOCATED BY THE TRANSLATE AND 52310720 * TEST INSTRUCTION, RETURN THE 52310820 * RESULT TO THE INVOKER */ 52310920 @9D9 LTR @2,@2 0371 52311020 * RETURN; /* RETURN TO THE INVOKER */ 52311120 BC 07,@EL04 0372 52311220 * R6PTR24 = R6PTR24 + R5PTR24 - R1PTR24; /* CALCULATE THE 52311320 * NUMBER OF BYTES IN THE BUFFER WHICH 52311420 * REMAIN TO BE SCANNED. PLACE THE 52311520 * RESULT, LESS 1 INTO DELIMITER BUFFER 52311620 * RESIDUE 2. */ 52311720 @9D8 LCR @F,@1 0373 52311820 AR @F,@5 0373 52311920 AR @6,@F 0373 52312020 *DLMT0270:/***********************************************************/ 52312120 * /* IF BYTES REMAIN TO BE SCANNED IN THE BUFFER, ITERATE */ 52312220 * /* THE SEARCH FOR A DELIMITER CHARACTER */ 52312320 * /************************************************************/ 52312420 * IF R6PTR24 >= 0 THEN 52312520 DLMT0270 LTR @6,@6 0374 52312620 BC 04,@9D7 0374 52312720 *DLMT0300: DO; 52312820 * R5PTR24 = R1PTR24; /* SET DELIMIT BUFFER POINTER 2 TO 52312920 * THE ADDRESS OF THE FIRST BYTE WHICH 52313020 * HAS NOT BEEN SCANNED AS YET */ 52313120 DLMT0300 LR @5,@1 0376 52313220 * GO TO DLMT0050; /* LOOP BACK TO SCAN MORE OF THE BUFFER 52313320 * FOR A DELIMITER */ 52313420 BC 15,DLMT0050 0377 52313520 * END DLMT0300; 52313620 * /************************************************************/ 52313720 * /* IF THE ENTIRE BUFFER HAS BEEN SCANNED WITHOUT */ 52313820 * /* LOCATING A DELIMITER, RETURN TO THE INVOKER WITH A */ 52313920 * /* CHARACTER CODE OF ZERO. */ 52314020 * /************************************************************/ 52314120 * ELSE RETURN; 52314220 *DLMT9990: GENERATE(TRT 0(1,R5PTR24),TRTTAB); /* TRANSLATE AND TEST 52314320 * INSTRUCTION FOR REMOTE EXECUTION */ 52314420 DLMT9990 TRT 0(1,R5PTR24),TRTTAB 52314520 DS 0H 52314620 * END DELIMIT; /* END OF THE DELIMIT SUBROUTINE */ 52314720 @EL04 LM @E,@0,12(@D) 0381 52314820 LM @3,@C,32(@D) 0381 52314920 BCR 15,@E 0381 52315020 * 52315120 */*IEFVSCAN: END */ 52315220 * 52315320 * END IEFVSCAN /* END OF IEFVSCAN */ 52315420 */* THE FOLLOWING INCLUDE STATEMENTS WERE FOUND IN THIS PROGRAM. * 52315520 */*%INCLUDE SYSLIB (IEFDCL1 ) * 52315620 */*%INCLUDE SYSLIB (IEFDCL2 ) * 52315720 *; 52315820 @DATA1 EQU * 52315920 @0 EQU 00 EQUATES FOR REGISTERS 0-15 52316020 @1 EQU 01 52316120 @2 EQU 02 52316220 @3 EQU 03 52316320 @4 EQU 04 52316420 @5 EQU 05 52316520 @6 EQU 06 52316620 @7 EQU 07 52316720 @8 EQU 08 52316820 @9 EQU 09 52316920 @A EQU 10 52317020 @B EQU 11 52317120 @C EQU 12 52317220 @D EQU 13 52317320 @E EQU 14 52317420 @F EQU 15 52317520 @D1 DC H'4' 52317620 @D2 DC H'-1' 52317720 @D3 DC H'6' 52317820 @D4 DC H'256' 52317920 @D5 DC H'2044' 52318020 @D6 DC H'24' 52318120 @D7 DC H'16' 52318220 @D8 DC H'5' 52318320 @D9 DC H'2' 52318420 @D10 DC H'1' 52318520 @CLC CLC 0(1,@A),0(@E) 52318620 DS 0F 52318720 @SIZ001 DC AL1(&SPN) 52318820 DC AL3(@DATEND-@DATD) 52318920 DS 0F 52319020 DS 0D 52319120 @DATA EQU * 52319220 R0FIXED EQU 00000000 FULLWORD POINTER REGISTER 52319320 R1PTR24 EQU 00000001 3 BYTE POINTER REGISTER 52319420 R2FIXED EQU 00000002 FULLWORD INTEGER REGISTER 52319520 R3FIXED EQU 00000003 FULLWORD INTEGER REGISTER 52319620 R4PTR24 EQU 00000004 3 BYTE POINTER REGISTER 52319720 R5PTR24 EQU 00000005 3 BYTE POINTER REGISTER 52319820 R6PTR24 EQU 00000006 3 BYTE POINTER REGISTER 52319920 R7PTR24 EQU 00000007 3 BYTE POINTER REGISTER 52320020 R8 EQU 00000008 FULLWORD POINTER REGISTER 52320120 R9 EQU 00000009 FULLWORD POINTER REGISTER 52320220 R10 EQU 00000010 FULLWORD POINTER REGISTER 52320320 R11 EQU 00000011 FULLWORD POINTER REGISTER 52320420 R12 EQU 00000012 FULLWORD POINTER REGISTER 52320520 R13 EQU 00000013 FULLWORD POINTER REGISTER 52320620 R14 EQU 00000014 FULLWORD POINTER REGISTER 52320720 R15 EQU 00000015 FULLWORD POINTER REGISTER 52320820 SAVEAREA EQU 00000000 80 BYTE(S) ON WORD 52320920 SAVEWRD1 EQU SAVEAREA+00000000 FULLWORD POINTER 52321020 SAVEPFLG EQU SAVEAREA+00000000 1 BYTE POINTER 52321120 SAVEPLGH EQU SAVEAREA+00000001 3 BYTE POINTER ON WORD+1 52321220 SAVELAST EQU SAVEAREA+00000004 FULLWORD POINTER 52321320 SAVENEXT EQU SAVEAREA+00000008 FULLWORD POINTER 52321420 SAVER14 EQU SAVEAREA+00000012 FULLWORD POINTER 52321520 SAVERETF EQU SAVEAREA+00000012 1 BYTE POINTER 52321620 SAVER15 EQU SAVEAREA+00000016 FULLWORD POINTER 52321720 SAVER0 EQU SAVEAREA+00000020 FULLWORD POINTER 52321820 SAVER1 EQU SAVEAREA+00000024 FULLWORD POINTER 52321920 SAVER2 EQU SAVEAREA+00000028 FULLWORD POINTER 52322020 SAVER3 EQU SAVEAREA+00000032 FULLWORD POINTER 52322120 SAVER4 EQU SAVEAREA+00000036 FULLWORD POINTER 52322220 SAVER5 EQU SAVEAREA+00000040 FULLWORD POINTER 52322320 SAVER6 EQU SAVEAREA+00000044 FULLWORD POINTER 52322420 SAVER7 EQU SAVEAREA+00000048 FULLWORD POINTER 52322520 SAVER8 EQU SAVEAREA+00000052 FULLWORD POINTER 52322620 SAVER9 EQU SAVEAREA+00000056 FULLWORD POINTER 52322720 SAVER10 EQU SAVEAREA+00000060 FULLWORD POINTER 52322820 SAVER11 EQU SAVEAREA+00000064 FULLWORD POINTER 52322920 SAVER12 EQU SAVEAREA+00000068 FULLWORD POINTER 52323020 SAVEXTNT EQU SAVEAREA+00000072 8 BYTE(S) 52323120 PARAM EQU 00000000 120 BYTE(S) ON WORD 52323220 PARAM1 EQU PARAM+00000000 FULLWORD POINTER 52323320 PARAM2 EQU PARAM+00000004 FULLWORD POINTER 52323420 PARAM3 EQU PARAM+00000008 FULLWORD POINTER 52323520 PARAM4 EQU PARAM+00000012 FULLWORD POINTER 52323620 PARAM5 EQU PARAM+00000016 FULLWORD POINTER 52323720 PARAM6 EQU PARAM+00000020 FULLWORD POINTER 52323820 PARAM7 EQU PARAM+00000024 FULLWORD POINTER 52323920 PARAM8 EQU PARAM+00000028 FULLWORD POINTER 52324020 PARAM9 EQU PARAM+00000032 FULLWORD POINTER 52324120 PARAM10 EQU PARAM+00000036 FULLWORD POINTER 52324220 PARAM11 EQU PARAM+00000040 FULLWORD POINTER 52324320 PARAM12 EQU PARAM+00000044 FULLWORD POINTER 52324420 PARAM13 EQU PARAM+00000048 FULLWORD POINTER 52324520 PARAM14 EQU PARAM+00000052 FULLWORD POINTER 52324620 PARAM15 EQU PARAM+00000056 FULLWORD POINTER 52324720 PARAM16 EQU PARAM+00000060 FULLWORD POINTER 52324820 PARAM17 EQU PARAM+00000064 FULLWORD POINTER 52324920 PARAM18 EQU PARAM+00000068 FULLWORD POINTER 52325020 PARAM19 EQU PARAM+00000072 FULLWORD POINTER 52325120 PARAM20 EQU PARAM+00000076 FULLWORD POINTER 52325220 PARAM21 EQU PARAM+00000080 FULLWORD POINTER 52325320 PARAM22 EQU PARAM+00000084 FULLWORD POINTER 52325420 PARAM23 EQU PARAM+00000088 FULLWORD POINTER 52325520 PARAM24 EQU PARAM+00000092 FULLWORD POINTER 52325620 PARAM25 EQU PARAM+00000096 FULLWORD POINTER 52325720 PARAM26 EQU PARAM+00000100 FULLWORD POINTER 52325820 PARAM27 EQU PARAM+00000104 FULLWORD POINTER 52325920 PARAM28 EQU PARAM+00000108 FULLWORD POINTER 52326020 PARAM29 EQU PARAM+00000112 FULLWORD POINTER 52326120 PARAM30 EQU PARAM+00000116 FULLWORD POINTER 52326220 PROCCA EQU 00000000 32767*HALFWORD INTEGER 52326320 NUM EQU 00000000 12 BYTE(S) ON HWORD 52326420 NUMA EQU NUM+00000000 8 BYTE(S) ON HWORD 52326520 NUMLEVEL EQU NUM+00000000 HALFWORD INTEGER 52326620 NUMOPER EQU NUM+00000002 HALFWORD INTEGER 52326720 NUMPOPER EQU NUM+00000004 HALFWORD INTEGER 52326820 NUMSNTX EQU NUM+00000006 HALFWORD INTEGER 52326920 NUMB EQU NUM+00000008 4 BYTE(S) ON HWORD 52327020 NUMSCAN EQU NUM+00000008 HALFWORD INTEGER 52327120 NUMRCODE EQU NUM+00000010 HALFWORD INTEGER 52327220 BDV EQU 00000000 8 BYTE(S) ON WORD 52327320 BDVBUF EQU BDV+00000000 FULLWORD POINTER 52327420 BDVMX EQU BDV+00000004 HALFWORD POINTER 52327520 BDVLEN EQU BDV+00000006 HALFWORD POINTER 52327620 BUFFER EQU 00000000 32767 BYTE(S) 52327720 OPERAND EQU 00000000 32767 BYTE(S) 52327820 TRTTAB EQU * 256*1 BYTE POINTER 52327920 DC 00064AL1(255) 52328020 DC AL1(0) 52328120 DC 00012AL1(255) 52328220 DC AL1(4) 52328320 DC 00013AL1(255) 52328420 DC AL1(0) 52328520 DC AL1(255) 52328620 DC AL1(5) 52328720 DC 00013AL1(255) 52328820 DC AL1(2) 52328920 DC 00015AL1(255) 52329020 DC AL1(0) 52329120 DC AL1(0) 52329220 DC AL1(6) 52329320 DC AL1(3) 52329420 DC 00066AL1(255) 52329520 DC 00009AL1(0) 52329620 DC 00007AL1(255) 52329720 DC 00009AL1(0) 52329820 DC 00008AL1(255) 52329920 DC 00008AL1(0) 52330020 DC 00006AL1(255) 52330120 DC 00010AL1(0) 52330220 DC 00006AL1(255) 52330320 SCADV EQU 00000000 4 BYTE(S) ON HWORD 52330420 SCADVSCA EQU SCADV+00000000 HALFWORD POINTER 52330520 SCADVMX EQU SCADV+00000002 HALFWORD POINTER 52330620 SCA EQU 00000000 32767*8 BYTE(S) ON HWORD 52330720 SCAPD EQU SCA+00000000 4 BYTE(S) ON HWORD 52330820 SCAPDO EQU SCA+00000000 HALFWORD INTEGER 52330920 SCAPDMX EQU SCA+00000002 HALFWORD POINTER 52331020 SCAKLD EQU SCA+00000004 4 BYTE(S) ON HWORD 52331120 SCAKLDO EQU SCA+00000004 HALFWORD INTEGER 52331220 SCAKLDMN EQU SCA+00000006 1 BYTE POINTER 52331320 SCAKLDMX EQU SCA+00000007 1 BYTE POINTER 52331420 SCE EQU 00000000 8 BYTE(S) ON HWORD 52331520 SCEPD EQU SCE+00000000 4 BYTE(S) ON HWORD 52331620 SCEPDO EQU SCE+00000000 HALFWORD INTEGER 52331720 SCEPDMX EQU SCE+00000002 HALFWORD POINTER 52331820 SCEKLD EQU SCE+00000004 4 BYTE(S) ON HWORD 52331920 SCEKLDO EQU SCE+00000004 HALFWORD INTEGER 52332020 SCEKLDMN EQU SCE+00000006 1 BYTE POINTER 52332120 SCEKLDMX EQU SCE+00000007 1 BYTE POINTER 52332220 PCA EQU 00000000 32767*4 BYTE(S) 52332320 PCAPROC EQU PCA+00000000 2 BYTE POINTER 52332420 PCASNO EQU PCA+00000002 2 BYTE POINTER 52332520 KLCA EQU 00000000 32767*4 BYTE(S) ON HWORD 52332620 KLCAKCA EQU KLCA+00000000 HALFWORD INTEGER 52332720 KLCAMX EQU KLCA+00000002 HALFWORD POINTER 52332820 KCA EQU 00000000 32765 BYTE(S) 52332920 KCAPROC EQU KCA+00000000 2 BYTE POINTER 52333020 KCASNO EQU KCA+00000002 2 BYTE POINTER 52333120 KCAIMAG EQU KCA+00000004 32767 BYTE(S) 52333220 ORG @DATA 52333320 DS 00000256C 52333420 @L EQU 2 52333520 @DATD DSECT 52333620 @SAV001 EQU @DATD+00000000 72 BYTE(S) ON WORD 52333720 PARM EQU @DATD+00000072 24 BYTE(S) ON WORD 52333820 PARMBDV EQU PARM+00000000 FULLWORD POINTER 52333920 PARMPROC EQU PARM+00000004 FULLWORD POINTER 52334020 PARMSCAD EQU PARM+00000008 FULLWORD POINTER 52334120 PARMNUM EQU PARM+00000012 FULLWORD POINTER 52334220 PARMCOMM EQU PARM+00000016 FULLWORD POINTER 52334320 PARMODV EQU PARM+00000020 FULLWORD POINTER 52334420 LNUM EQU @DATD+00000096 12 BYTE(S) ON HWORD 52334520 LNUMA EQU LNUM+00000000 8 BYTE(S) ON HWORD 52334620 LNUMLEVL EQU LNUM+00000000 HALFWORD INTEGER 52334720 LNUMOPER EQU LNUM+00000002 HALFWORD INTEGER 52334820 LNUMPOPR EQU LNUM+00000004 HALFWORD INTEGER 52334920 LNUMSNTX EQU LNUM+00000006 HALFWORD INTEGER 52335020 LNUMB EQU LNUM+00000008 4 BYTE(S) ON HWORD 52335120 LNUMSCAN EQU LNUM+00000008 HALFWORD INTEGER 52335220 LNUMRCOD EQU LNUM+00000010 HALFWORD INTEGER 52335320 LBDV EQU @DATD+00000108 8 BYTE(S) ON WORD 52335420 LBDVBUF EQU LBDV+00000000 FULLWORD POINTER 52335520 LBDVMX EQU LBDV+00000004 HALFWORD POINTER 52335620 LBDVLEN EQU LBDV+00000006 HALFWORD POINTER 52335720 ODV EQU @DATD+00000116 8 BYTE(S) ON WORD 52335820 ODVOPER EQU ODV+00000000 FULLWORD POINTER 52335920 ODVMX EQU ODV+00000004 HALFWORD POINTER 52336020 ODVLEN EQU ODV+00000006 HALFWORD POINTER 52336120 SCEPTR EQU @DATD+00000124 FULLWORD POINTER 52336220 KCAPTR2 EQU @DATD+00000128 FULLWORD INTEGER 52336320 DS 00000132C 52336420 @TEMPS DS 0F 52336520 @TEMP2 DC F'0' 52336620 @DATEND EQU * 52336720 IEFVSCAN CSECT , 52336820 SCN10100 EQU SCN12120 52336920 @9FC EQU SCN12300 52337020 @9EA EQU SCN1RSCN 52337120 @9DC EQU SCN10020 52337220 @9D7 EQU @EL04 52337320 END IEFVSCAN 52337420