MACRO 00050037 &NAME TRKCALC &FUNCTN=,&DEVTAB=,&TYPE=,&UCB=,&BALANCE=,&REMOVE=, C00100037 &MAXSIZE=,®SAVE=,&RKDD=,&R=,&K=,&DD=,&LAST=,&MF=I 00150037 .***** START OF SPECIFICATIONS **************************************** 00200037 .* 00250037 .* MODULE NAME - TRKCALC 00300037 .* 00350037 .* DESCRIPTIVE NAME - 00400037 .* SYSTEM TRACK ALGORITHM ROUTINE (STAR) SERVICE MACRO 00450037 .* 00500037 .* COPYRIGHT - NONE 00550037 .* 00600037 .* STATUS - NEW 00650037 .* 00700037 .* FUNCTION - 00750037 .* THIS MACRO, DEPENDING ON THE VALUE OF THE "MF" PARAMETER, 00800037 .* PERFORMS ONE OF FOUR BASIC FUNCTIONS RELATED TO ESTABLISHING 00850037 .* OR MAPPING THE INPUT PARAMETER LIST FOR THE SYSTEM TRACK 00900037 .* ALGORITHM ROUTINE (STAR). THE FOUR FUNCTIONS ARE DESCRIBED 00950037 .* BELOW: 01000037 .* 01050037 .* MF=I - DEFAULT - WITH A SPECIFICATION OF MF=I, THIS MACRO 01100037 .* WILL ALLOCATE STORAGE FOR THE STAR PARAMETER LIST AND 01150037 .* INITIALIZE IT ACCORDING TO THE OPTIONS SELECTED VIA THE 01200037 .* ALLOWABLE KEYWORDS (SEE BELOW FOR KEYWORD DESCRIPTIONS). 01250037 .* THIS IS CALLED THE STANDARD-FORM (INSTRUCTION FORMAT) OF 01300037 .* THE MACRO. 01350037 .* MF=E - THIS SPECIFICATION WILL RESULT IN THE INITIALIZATION 01400037 .* OF AN ALREADY EXISTING STAR PARAMETER LIST. THE ADDRESS 01450037 .* OF THE EXISTING PARAMETER LISTS IS PROVIDED VIA A SECOND 01500037 .* SUBPARAMETER OF THE "MF" KEYWORD. (SEE THE SECTION BELOW 01550037 .* ON KEYWORDS FOR THE SOURCE OF THE INITIALIZATION DATA). 01600037 .* THIS IS CALLED THE EXECUTE-FORM OF THE MACRO. 01650037 .* 01700037 .* NOTE - NO KEYWORDS ARE PROCESSED FOR THE FOLLOWING MACRO FORMS. 01750037 .* 01800037 .* MF=L - THIS SPECIFICATION WILL RESULT IN THE ALLOCATION 01850037 .* OF THE STAR PARAMETER LIST WITHOUT INITIALIZATION. THIS IS 01900037 .* CALLED THE LIST-FORM OF THE MACRO. 01950037 .* MF=D - THIS SPECIFICATION WILL RESULT IN THE GENERATION OF A 02000037 .* MAPPING OF THE SYMBOLS USED TO ADDRESS THE FIELDS AND 02050037 .* FLAGS OF THE STAR PARAMETER LIST. THE CALLER MUST PROVIDE 02100037 .* A "DSECT" STATEMENT IN ORDER TO OBTAIN SYMBOLIC ADDRESSING 02150037 .* WITHOUT STORAGE ALLOCATION. THIS IS CALLED THE DSECT-FORM 02200037 .* OF THE MACRO. 02250037 .* 02300037 .* KEYWORDS- (APPLICABLE ONLY FOR MF=I AND MF=E FORMS) 02350037 .* FUNCTN - USED TO REQUEST TRACK BALANCE (TRKBAL) OR TRACK 02400037 .* CAPACITY (TRKCAP) FUNCTIONS. 02450037 .* NOTE 1 - A SPECIAL OPTION IS PROVIDED TO ALLOW A TRKCALC CALL 02500037 .* WITH THE 'FUNCTN' KEYWORD OMITTED. THIS OPTION IS 02550037 .* ALLOWED ONLY IF THE KEYWORD MF=E IS CODED. IF THE 02600037 .* 'FUNCTN' KEYWORD IS OMITTED, NO INSTRUCTION WILL BE 02650037 .* GENERATED TO SET THE PARAMETER LIST FLAGS. THUS, 02700037 .* THE MUTUALLY EXCLUSIVE TEST FOR FUNCTN=TRKCAP AND 02750037 .* REMOVE=YES, MAXSIZE=YES, AND LAST=YES IS BYPASSED. 02800037 .* ALSO, THE FOLLOWING NOTE (2) DOES NOT APPLY. 02850037 .* NOTE 2 - ONE OF THE FOLLOWING THREE KEYWORDS (DEVTAB, 02900037 .* TYPE, OR UCB) MUST BE PROVIDED WHEN THE 'FUNCTN' 02950037 .* KEYWORD IS CODED. THIS IS TO ENSURE A SOURCE FOR THE 03000037 .* DEVICE CHARACTERISTICS TABLE. IF THE PARAMETER LIST 03050037 .* HAS BEEN PREVIOUSLY SET WITH A SOURCE, THEN AN '*' 03100037 .* SHOULD BE CODED AS THE INPUT VALUE FOR THE PROPER 03150037 .* SOURCE KEYWORD. THIS WILL RESULT IN THE PROPER SOURCE 03200037 .* FLAG SETTING WITHOUT ACTUALLY GENERATING THE CODE TO 03250037 .* STORE THE DVCT. 03300037 .* DEVTAB - USED TO SUPPLY THE ADDRESS OF THE DEVICE CHARACTER- 03350037 .* ISTICS TABLE ENTRY. 03400037 .* TYPE - USED TO SUPPLY THE UCB DEVICE TYPE VIA THE LOW ORDER 03450037 .* BYTE OF A REGISTER OR AN ADDRESS. UCB TYPE IS USED BY STAR 03500037 .* TO FIND THE DEVICE CHARACTERISTICS TABLE ENTRY. 03550037 .* UCB - USED TO PROVIDE THE ADDRESS OF THE UCB. STAR WILL 03600037 .* EXTRACT THE DEVICE TYPE TO FIND THE PROPER DEVICE CHAR- 03650037 .* ACTERISTICS TABLE ENTRY. 03700037 .* BALANCE - USED TO PROVIDE THE ADDRESS OF A TRACK BALANCE TO BE 03750037 .* USED BY STAR IN THE CAPACITY AND BALANCE ALGORITHMS. 03800037 .* RKDD - USED TO SUPPLY THE ADDRESS OF A FULL WORD CONTAINING 03850037 .* A RECORD NUMBER, KEY LENGTH, AND DATA LENGTH OR TO DESIG- 03900037 .* NATE A REGISTER CONTAINING SAME. THE FOLLOWING THREE KEY- 03950037 .* WORDS SUPPLY THE SAME DATA, BUT FROM SEPARATE SOURCES. 04000037 .* 04050037 .* NOTE - THE FOLLOWING THREE KEYWORDS PROVIDE THE CAPABILITY 04100037 .* FOR THE CALLER TO CODE THE RECORD NUMBER, KEY LENGTH, 04150037 .* AND DATA LENGTH AS SELF-DEFINING DECIMAL VALUES 04200037 .* (REFERRED TO HERE AS IMMEDITATE DATA). 04250037 .* 04300037 .* R - USED TO PROVIDE THE SUBJECT RECORD NUMBER VIA THE LOW- 04350037 .* ORDER BYTE OF A REGISTER, A STORAGE ADDRESS, OR IMMEDIATE 04400037 .* DATA. 04450037 .* K - USED TO PROVIDE THE SUBJECT KEY LENGTH VIA THE LOW-ORDER 04500037 .* BYTE OF A REGISTER, A STORAGE ADDRESS, OR IMMEDIATE 04550037 .* DATA. 04600037 .* DD - USED TO PROVIDE THE SUBJECT DATA LENGTH VIA THE LOW-ORDER 04650037 .* BYTE OF A REGISTER, A STORAGE ADDRESS, OR IMMEDIATE 04700037 .* DATA. 04750037 .* 04800037 .* NOTE - THE FOLLOWING THREE KEYWORDS (REMOVE, MAXSIZE, AND 04850037 .* LAST) ARE VALID ONLY WHEN 'FUNCTN=TRKBAL' IS CODED. 04900037 .* THEY ARE IGNORED IF 'FUNCTN' IS OMITTED. 04950037 .* 05000037 .* REMOVE - USED TO OPTIONALLY REQUEST THE DELETION OF A RECORD 05050037 .* DURING A TRACK BALANCE REQUEST. 05100037 .* MAXSIZE - USED TO OPTIONALLY REQUEST A COUNT OF THE RESIDUAL 05150037 .* DATA BYTES ON A TRACK AFTER IT IS FOUND THAT ANOTHER WHOLE 05200037 .* RECORD WILL NOT FIT DURING A TRACK BALANCE REQUEST. 05250037 .* LAST - A SPECIAL OPTION MADE AVAILABLE FOR ISAM. IF SPECIFIED, 05300037 .* THE OVERHEAD FOR THE LAST RECORD IS USED IN CALCULATING 05350037 .* A NEW TRACK BALANCE. 05400037 .* REGSAVE - USED TO OPTIONALLY REQUEST SAVING AND RESTORING 05450037 .* REGISTERS 1 - 14 ACROSS THE INVOCATION OF STAR. 05500037 .* MF - USED TO SPECIFY WHICH FORM OF THE TRKCALC MACRO IS 05550037 .* DESIRED. SEE OPENING PARAGRAPH ABOVE. 05600037 .* 05650037 .* INTERNAL PROCESSING FOR THE I AND E FORMS OF THE MACRO IS 05700037 .* CONTROLLED BY A NUMBER OF LOCAL BINARY AND CHARACTER 05750037 .* VARIABLES. THE L AND D FORMS OF THE MACRO ARE HANDLED BY 05800037 .* DIRECT PATHS THROUGH THE MACRO AND AS SUCH DO NOT INVOLVE THE 05850037 .* USE OF LOCAL VARIABLES. FOLLOWING ARE THE DESCRIPTIONS OF THE 05900037 .* THE LOCAL VARIABLES USED FOR THE I AND E FORMS: 05950037 .* 06000037 .* LCLC'S - 06050037 .* &FUNFLG - 'B' = TRKBAL FUNCTION REQUESTED 06100037 .* - 'C' = TRKCAP FUNCTION REQUESTED 06150037 .* - (OMITTED) = USE FUNCTION FLAGS FROM LAST CALL 06200037 .* &SAVAREA - 'NO' = DON'T SAVE AND RESTORE REGISTERS 06250037 .* 'YES' = SAVE AND RESTORE REGISTERS 06300037 .* &SET(1) - DVCT SOURCE WITH POSSIBLE PARENTHESES REMOVED: DVCT 06350037 .* ADDRESS, UCB ADDRESS, OR DEVICE TYPE (ADDRESS 06400037 .* OR IMMEDIATE DATA) 06450037 .* &SET(2) - RKDD PARAMETER VALUE WITH POSSIBLE PARENTHESES 06500037 .* REMOVED 06550037 .* &SET(3) - R PARAMETER VALUE WITH POSSIBLE PARENTHESES REMOVED 06600037 .* &SET(4) - K PARAMETER VALUE WITH POSSIBLE PARENTHESES REMOVED 06650037 .* &SET(5) - DD PARAMETER VALUE WITH POSSIBLE PARENTHESES REMOVED 06700037 .* &SET(6) - BALANCE PARAMETER VALUE WITH POSSIBLE PARENTHESES 06750037 .* REMOVED 06800037 .* &SKIP - 'P3' = RKDD PARAMETER NOT SPECIFIED 06850037 .* &FLGA(1) - 'R' = &SET(1) (DVCT SOURCE PARAMETER) IS IN 06900037 .* REGISTER FORMAT 06950037 .* - 'A' = &SET(1) (DVCT SOURCE PARAMETER) IS IN ADDRESS 07000037 .* FORMAT 07050037 .* &FLGA(2) - 'R' = RKDD PARAMETER IS IN REGISTER FORMAT 07100037 .* - 'A' = RKDD PARAMETER IS IN ADDRESS FORMAT 07150037 .* &FLGA(3) - 'R' = BALANCE PARAMETER IS IN REGISTER OR IMMED- 07200037 .* IATE DATA FORMAT 07250037 .* - 'A' = BALANCE PARAMETER IS IN ADDRESS FORMAT 07300037 .* &FLGA(4) - 'R' = R PARAMETER IS IN REGISTER FORMAT 07350037 .* &FLGA(5) - 'R' = K PARAMETER IS IN REGISTER FORMAT 07400037 .* &FLGA(6) - 'R' = DD PARAMETER IS IN REGISTER FORMAT 07450037 .* &LABEL - AID TO VARIABLE LABEL ASSIGNMENT 07500037 .* &BITS - USED TO COLLECT BIT SWITCHES FOR STAR PARM FLAGS 07550037 .* 07600037 .* LCLB'S 07650037 .* &BIT(1) - 0 = TRKBAL REQUESTED OR FUNCTN WAS OMITTED 07700037 .* - 1 = TRKCAP REQUESTED 07750037 .* &BIT(2) - 0 = REMOVE OPTION NOT REQUESTED 07800037 .* - 1 = REMOVE OPTION REQUESTED 07850037 .* &BIT(3) - 0 = MAXSIZE OPTION NOT REQUESTED 07900037 .* - 1 = MAXSIZE OPTION REQUESTED 07950037 .* &BIT(4) - 0 = BALANCE NOT PROVIDED CALLER 08000037 .* - 1 = BALANCE PROVIDED BY CALLER 08050037 .* &BIT(5) - 0 = LAST OPTION NOT REQUESTED 08100037 .* - 1 = LAST OPTION REQUESTED 08150037 .* &BIT(6&7) - 00 = DVCT ENTRY ADDRESS PROVIDED 08200037 .* 01 = NOT USED 08250037 .* 10 = UCB ADDRESS PROVIDED 08300037 .* 11 = DEVICE TYPE (ADDRESS OR IMMEDIATE) PROVIDED 08350037 .* &QUIT - 0 = SUCCESSFUL PARAMETER LIST CONSTRUCTION 08400037 .* - 1 = ERRORS DETECTED. DO NOT GENERATE ANY CODE 08450037 .* &MSG - 0 = NO INFORMATION/WARNING MESSAGES ISSUED 08500037 .* 1 = INFORMATION/WARNING MESSAGES ISSUED 08550037 .* 08600037 .* NOTES - N/A 08650037 .* 08700037 .* MODULE TYPE - MACRO 08750037 .* 08800037 .* ENTRY POINT - N/A 08850037 .* 08900037 .* INPUT - SEE DESCRIPTION OF KEYWORDS UNDER "FUNCTION". 08950037 .* 09000037 .* OUTPUT - SEE OPENING PARAGRAPH UNDER "FUNCTION". 09050037 .* 09100037 .* EXIT, NORMAL - RETURN TO CALLER WITH A SEVERITY CODE OF 0 09150037 .* 09200037 .* EXIT, ERROR - RETURN TO CALLER WITH A SEVERITY CODE OF: 09250037 .* 4 - IF ASSUMPTIONS HAD TO BE MADE REGARDING 09300037 .* KEYWORD VALUES. 09350037 .* 8 - IF UNRECOVERABLE ERRORS ARE DETECTED. 09400037 .* 09450037 .* EXTERNAL REFERENCES - N/A 09500037 .* 09550037 .* TABLES - N/A 09600037 .* 09650037 .* MACROS - IHBINNRA 09700037 .* 09750037 .* CHANGE ACTIVITY - NONE 09800037 .* 09850037 .***** END OF SPECIFICATIONS ****************************************** 09900037 LCLC &FUNFLG,&SAVAREA,&SET(6),&SKIP,&FLGA(6),&LABEL,&BITS 09950037 LCLB &BIT(7),&QUIT,&MSG 10000037 &LABEL SETC '&NAME' 10050037 AIF ('&MF' EQ 'L').LIST BR IF LIST OPTION 10100037 AIF ('&MF' EQ 'D').DSECT BR IF DSECT OPTION 10150037 * 10200037 * STAR USES REGISTERS; 0(OUTPUT),1,9,10,11,14, AND 15(RETURN CODE) 10250037 * 10300037 .********************************************************************** 10350037 .* KEYWORD SYNTAX CHECKING FOLLOWS 10400037 .********************************************************************** 10450037 .* 10500037 .********************************************************************** 10550037 .* CHECK SYNTAX OF REGSAVE KEYWORD 10600037 .********************************************************************** 10650037 AIF (T'®SAVE EQ 'O').NOSAVE 10700037 AIF ('®SAVE' EQ 'NO').NOSAVE 10750037 AIF ('®SAVE' EQ 'YES').SAVE 10800037 SPACE 1 10850037 MNOTE 4,'REGSAVE= OPERAND NOT RECOGNIZED; ''NO'' IS ASSUMED' 10900037 &MSG SETB 1 INDICATE MESSAGE ISSUED 10950037 .NOSAVE ANOP 11000037 &SAVAREA SETC 'NO' INDICATE REG SAVING NOT REQ'D 11050037 AGO .SYNTAX 11100037 .SAVE ANOP 11150037 * REGSAVE OPTION SPECIFIED; ALL REGISTERS BUT 0 AND 15 WILL BE 11200037 * SAVED AND RESTORED. 11250037 * 11300037 &SAVAREA SETC 'YES' INDICATE REG SAVING REQ'D 11350037 .********************************************************************** 11400037 .* SYNTAX CHECK OF FUNCTN KEYWORD 11450037 .********************************************************************** 11500037 .SYNTAX ANOP 11550037 AIF (T'&FUNCTN EQ 'O').NOFUNC 11600037 AIF ('&FUNCTN' EQ 'TRKBAL').BALFUN 11650037 AIF ('&FUNCTN' EQ 'TRKCAP').CAPFUN 11700037 SPACE 1 11750037 MNOTE 8,'FUNCTN= OPERAND INVALID; PROCESSING TERMINATED' 11800037 SPACE 1 11850037 MEXIT ABORT - CAN'T VALIDATE 11900037 .* REMAINING KEYWORD CONFLICTS 11950037 .NOFUNC ANOP 12000037 AIF ('&MF' NE 'I').NOPROBM FUNCTN OMITTED AND MF=E IS OK 12050037 SPACE 1 12100037 MNOTE 8,'FUNCTN= CAN NOT BE OMITTED WITH MF=I; PROCESSING TERMI12150037 INATED' 12200037 SPACE 1 12250037 MEXIT 12300037 .BALFUN ANOP 12350037 &FUNFLG SETC 'B' INDICATE TRKBAL REQ'D 12400037 .NOPROBM ANOP 12450037 &BIT(1) SETB 0 SET TRKBAL/OMITTED FLG FOR 12500037 .* STAR PARMS 12550037 AGO .TRKC010 12600037 .CAPFUN ANOP 12650037 &FUNFLG SETC 'C' INDICATE TRKCAP REQ'D 12700037 &BIT(1) SETB 1 SET TRKCAP FLG FOR STAR PARMS 12750037 .********************************************************************** 12800037 .* CHECK SYNTAX OF DEVTAB KEYWORD 12850037 .********************************************************************** 12900037 .TRKC010 ANOP 12950037 &BIT(6) SETB 0 INIT SOURCE FLAGS 13000037 &BIT(7) SETB 0 FOR DVCT ADDR 13050037 AIF (T'&DEVTAB EQ 'O').TRKC020 13100037 AIF ('&DEVTAB'(1,1) NE '(').DEVADDR 13150037 AIF (N'&DEVTAB GT 1).DEVBAD 13200037 &SET(1) SETC '&DEVTAB(1)' SAVE KEYW VALUE W/O PARENS 13250037 &FLGA(1) SETC 'R' INDICATE REG-FORM 13300037 AGO .TRKC020 ON TO NEXT KEYW 13350037 .DEVADDR ANOP 13400037 &SET(1) SETC '&DEVTAB' SAVE KEYW VALUE 13450037 &FLGA(1) SETC 'A' INDICATE ADDR-FORM 13500037 AGO .TRKC020 ON TO NEXT KEYW 13550037 .DEVBAD ANOP 13600037 SPACE 1 13650037 MNOTE 8,'DEVTAB= OPERAND INVALID; NO CODE PRODUCED' 13700037 &QUIT SETB 1 DEFER TERMINATION 13750037 .********************************************************************** 13800037 .* CHECK SYNTAX OF TYPE KEYWORD 13850037 .********************************************************************** 13900037 .TRKC020 ANOP 13950037 AIF (T'&TYPE EQ 'O').TRKC030 14000037 AIF ('&FLGA(1)' NE '').DEVBAD2 HAVE DVCT SOURCE ALREADY? 14050037 AIF ('&TYPE'(1,1) NE '(').TYPADDR 14100037 AIF (N'&TYPE GT 1).TYPEBAD 14150037 &SET(1) SETC '&TYPE(1)' SAVE KEYW VALUE W/O PARENS 14200037 &FLGA(1) SETC 'R' INDICATE REG-FORM 14250037 AGO .SETTYPE ON TO SETTING OF TYPE FLG 14300037 .TYPADDR ANOP 14350037 &SET(1) SETC '&TYPE' SAVE KEYW VALUE 14400037 &FLGA(1) SETC 'A' INDICATE ADDR-FORM 14450037 .SETTYPE ANOP 14500037 &BIT(6) SETB 1 SET TYPE FLGS FOR 14550037 &BIT(7) SETB 1 STAR PARMS 14600037 AGO .TRKC030 ON TO NEXT KEYW 14650037 .TYPEBAD ANOP 14700037 SPACE 1 14750037 MNOTE 8,'TYPE= OPERAND INVALID; NO CODE PRODUCED' 14800037 &QUIT SETB 1 DEFER TERMINATION 14850037 .********************************************************************** 14900037 .* CHECK SYNTAX OF UCB KEYWORD 14950037 .********************************************************************** 15000037 .TRKC030 ANOP 15050037 AIF (T'&UCB EQ 'O').TRKC040 15100037 AIF ('&FLGA(1)' NE '').DEVBAD2 HAVE DVCT SOURCE ALREADY? 15150037 AIF ('&UCB'(1,1) NE '(').UCBADDR 15200037 AIF (N'&UCB GT 1).UCBBAD 15250037 &SET(1) SETC '&UCB(1)' SAVE KEYW VALUE W/O PARENS 15300037 &FLGA(1) SETC 'R' INDICATE REG-FORM 15350037 AGO .SETUCB ON TO SETTING UCB FLG 15400037 .UCBADDR ANOP 15450037 &SET(1) SETC '&UCB' SAVE KEYW VALUE 15500037 &FLGA(1) SETC 'A' INDICATE ADDR-FORM 15550037 .SETUCB ANOP 15600037 &BIT(6) SETB 1 SET UCB FLG FOR STAR PARMS 15650037 AGO .TRKC040 ON TO NEXT KEYW 15700037 .DEVBAD2 ANOP 15750037 SPACE 1 15800037 MNOTE 8,'DEVTAB=, TYPE=, AND UCB= OPERANDS ARE MUTUALLY EXCLUSI15850037 IVE; NO CODE PRODUCED' 15900037 &QUIT SETB 1 DEFER TERMINATION 15950037 AGO .TRKC040 ON TO NEXT KEYW 16000037 .UCBBAD ANOP 16050037 SPACE 1 16100037 MNOTE 8,'UCB= OPERAND INVALID; NO CODE PRODUCED' 16150037 &QUIT SETB 1 DEFER TERMINATION 16200037 .********************************************************************** 16250037 .* ENSURE THAT A SOURCE (DEVTAB, UCB, OR TYPE) FOR THE DEVICE CHAR- 16300037 .* ACTERISTICS TABLE WAS PROVIDED. IF NOT, DEFAULT TO A RESIDUAL 16350037 .* DEVTAB ADDRESS AS THE DVCT SOURCE. 16400037 .********************************************************************** 16450037 .TRKC040 ANOP 16500037 AIF (T'&FUNCTN EQ 'O').TRKC045 BR, IF FUNCTN NOT PROVIDED - 16550037 .* SOURCE ASSUMED, FLGS NOT SET 16600037 AIF ('&FLGA(1)' NE '').TRKC045 BR, IF DVCT SOURCE GIVEN 16650037 .* AT THIS POINT IF &QUIT=1, THE CALLER PROVIDED A SOURCE FOR THE 16700037 .* DVCT BUT IT WAS IN ERROR. 16750037 AIF (&QUIT).TRKC045 BR, IF &QUIT=1 16800037 SPACE 1 16850037 MNOTE 4,'DVCT SOURCE (DEVTAB=, UCB=, OR TYPE=) IS MISSING; X16900037 DEVTAB=* IS ASSUMED' 16950037 &SET(1) SETC '*' INDICATE A RESIDUAL DEVTAB 17000037 &MSG SETB 1 INDICATE MESSAGE ISSUED 17050037 .********************************************************************** 17100037 .* CHECK SYNTAX OF RKDD KEYWORD 17150037 .********************************************************************** 17200037 .TRKC045 ANOP 17250037 AIF (T'&RKDD EQ 'O').TRKC050 17300037 AIF ('&RKDD'(1,1) NE '(').DORKDD 17350037 AIF (N'&RKDD GT 1).RKDDBAD 17400037 &SET(2) SETC '&RKDD(1)' SAVE KEYW VALUE W/O PARENS 17450037 &FLGA(2) SETC 'R' INDICATE REG-FORM 17500037 AGO .TSTDUP 17550037 .DORKDD ANOP 17600037 AIF (T'&RKDD EQ 'N').RKDDBAD BR IF IMMEDIATE-FORM; ERROR 17650037 &SET(2) SETC '&RKDD' SAVE KEYW VALUE 17700037 &FLGA(2) SETC 'A' INDICATE ADDR-FORM 17750037 AGO .TSTDUP 17800037 .RKDDBAD ANOP 17850037 SPACE 1 17900037 MNOTE 8,'RKDD= OPERAND INVALID; NO CODE PRODUCED' 17950037 &QUIT SETB 1 DEFER TERMINATION 18000037 .********************************************************************** 18050037 .* SYNTAX CHECK FOR R, K, AND DD KEYWORDS 18100037 .********************************************************************** 18150037 .TSTDUP AIF (T'&R NE 'O' OR T'&K NE 'O').MLTXERR RKDD AND R, K, OR 18200037 AIF (T'&DD EQ 'O').TRKC060 DD ARE MUTUALLY EXCLUSIVE 18250037 .MLTXERR ANOP 18300037 SPACE 1 18350037 MNOTE 4,'R=, K=, OR DD= CAN NOT BE CODED WITH RKDD=; R=, K=, AN18400037 ND DD= ARE IGNORED' 18450037 &MSG SETB 1 INDICATE MESSAGE ISSUED 18500037 AGO .TRKC060 ON TO NEXT KEYW 18550037 .TRKC050 ANOP 18600037 &SKIP SETC 'P3' INDICATE R/K/DD PROVIDED 18650037 AIF (T'&R EQ 'O').NORXX 18700037 AIF ('&R'(1,1) NE '(').NORXX 18750037 AIF (N'&R GT 1).BADPARM 18800037 &FLGA(4) SETC 'R' INDICATE REG-FORM 18850037 .NORXX AIF (T'&K EQ 'O').NOKXX 18900037 AIF ('&K'(1,1) NE '(').NOKXX 18950037 AIF (N'&K GT 1).BADPARM 19000037 &FLGA(5) SETC 'R' INDICATE REG-FORM 19050037 .NOKXX AIF (T'&DD EQ 'O').NODDXX 19100037 AIF ('&DD'(1,1) NE '(').NODDXX 19150037 AIF (N'&DD GT 1).BADPARM 19200037 &FLGA(6) SETC 'R' INDICATE REG-FORM 19250037 .NODDXX ANOP 19300037 &SET(3) SETC '&R(1)' SAVE KEYW VALUES AND 19350037 &SET(4) SETC '&K(1)' STRIP AWAY 19400037 &SET(5) SETC '&DD(1)' POSSIBLE PARENS 19450037 AGO .TRKC060 ON TO NEXT KEYW 19500037 .BADPARM ANOP 19550037 SPACE 1 19600037 MNOTE 8,'R=, K=, OR DD= OPERAND INVALID; NO CODE PRODUCED' 19650037 &QUIT SETB 1 DEFER TERMINATION 19700037 .********************************************************************** 19750037 .* SYNTAX CHECKING OF REMOVE KEYWORD 19800037 .********************************************************************** 19850037 .TRKC060 ANOP 19900037 AIF (T'&REMOVE EQ 'O').NOREMV 19950037 AIF ('&REMOVE' EQ 'NO').NOREMV 20000037 AIF ('&REMOVE' NE 'YES').GARMSG1 20050037 AIF ('&FUNFLG' EQ 'C').WARN1 20100037 &BIT(2) SETB 1 SET REMOVE FLG FOR STAR PARMS 20150037 AGO .TRKC070 ON TO NEXT KEYW 20200037 .GARMSG1 ANOP 20250037 SPACE 1 20300037 MNOTE 4,'REMOVE= OPERAND NOT RECOGNIZED; ''NO'' IS ASSUMED' 20350037 &MSG SETB 1 INDICATE MESSAGE ISSUED 20400037 AGO .NOREMV 20450037 .WARN1 ANOP 20500037 SPACE 1 20550037 MNOTE 4,'REMOVE=YES AND FUNCTN=TRKCAP ARE MUTUALLY EXCLUSIVE; X20600037 REMOVE=YES IS IGNORED' 20650037 &MSG SETB 1 INDICATE MESSAGE ISSUED 20700037 .NOREMV ANOP 20750037 &BIT(2) SETB 0 RESET REMOVE FLG FOR STAR PARMS 20800037 .********************************************************************** 20850037 .* SYNTAX CHECKING OF MAXSIZE KEYWORD 20900037 .********************************************************************** 20950037 .TRKC070 ANOP 21000037 AIF ('&MAXSIZE' EQ 'NO').NOMAX 21050037 AIF (T'&MAXSIZE EQ 'O').NOMAX 21100037 AIF ('&MAXSIZE' NE 'YES').GARMSG2 21150037 AIF ('&FUNFLG' EQ 'C').WARN2 21200037 &BIT(3) SETB 1 SET MAXSIZE FLG FOR STAR PARMS 21250037 AGO .TRKC080 ON TO NEXT KEYW 21300037 .GARMSG2 ANOP 21350037 SPACE 1 21400037 MNOTE 4,'MAXSIZE= OPERAND NOT RECOGNIZED; ''NO'' IS ASSUMED' 21450037 &MSG SETB 1 INDICATE MESSAGE ISSUED 21500037 AGO .NOMAX 21550037 .WARN2 ANOP 21600037 SPACE 1 21650037 MNOTE 4,'MAXSIZE=YES AND FUNCTN=TRKCAP ARE MUTUALLY EXCLUSIVE;X21700037 MAXSIZE=YES IS IGNORED' 21750037 &MSG SETB 1 INDICATE MESSAGE ISSUED 21800037 .NOMAX ANOP 21850037 &BIT(3) SETB 0 RESET MAXSIZE FLG FOR 21900037 .* STAR PARMS 21950037 .********************************************************************** 22000037 .* SYNTAX CHECKING OF LAST KEYWORD 22050037 .********************************************************************** 22100037 .TRKC080 ANOP 22150037 AIF ('&LAST' EQ 'NO').NOLAST 22200037 AIF (T'&LAST EQ 'O').NOLAST 22250037 AIF ('&LAST' NE 'YES').GARMSG3 22300037 AIF ('&FUNFLG' EQ 'C').WARN3 22350037 &BIT(5) SETB 1 SET LAST FLG FOR STAR PARMS 22400037 AGO .TRKC090 ON TO NEXT KEYW 22450037 .GARMSG3 ANOP 22500037 SPACE 1 22550037 MNOTE 4,'LAST= OPERAND NOT RECOGNIZED; ''NO'' IS ASSUME' 22600037 &MSG SETB 1 INDICATE MESSAGE ISSUED 22650037 AGO .NOLAST 22700037 .WARN3 ANOP 22750037 SPACE 1 22800037 MNOTE 4,'LAST=YES AND FUNCTN=TRKCAP ARE MUTUALLY EXCLUSIVE; X22850037 LAST=YES IS IGNORED' 22900037 &MSG SETB 1 INDICATE MESSAGE ISSUED 22950037 .NOLAST ANOP 23000037 &BIT(5) SETB 0 RESET LAST FLG FOR STAR PARMS 23050037 .********************************************************************** 23100037 .* SYNTAX CHECKING OF BALANCE KEYWORD 23150037 .********************************************************************** 23200037 .TRKC090 ANOP 23250037 AIF (T'&BALANCE EQ 'O').BALOFF 23300037 AIF ('&BALANCE'(1,1) EQ '(').BALREG 23350037 &SET(6) SETC '&BALANCE' SAVE KEYW VALUE 23400037 &FLGA(3) SETC 'A' INDICATE ADDR-FORM 23450037 AGO .BALON ON TO SETTING BALANCE FLG 23500037 .BALREG ANOP 23550037 AIF (N'&BALANCE GT 1).BADBAL 23600037 &SET(6) SETC '&BALANCE(1)' SAVE KEYW VALUE W/O PARENS 23650037 &FLGA(3) SETC 'R' INDICATE REG-FORM 23700037 AGO .BALON ON TO SETTING BALANCE FLG 23750037 .BADBAL ANOP 23800037 SPACE 1 23850037 MNOTE 8,'BALANCE= OPERAND INVALID; NO CODE PRODUCED' 23900037 &QUIT SETB 1 DEFER TERMINATION 23950037 .BALOFF ANOP 24000037 &BIT(4) SETB 0 RESET BALANCE FLG FOR 24050037 .* STAR PARMS 24100037 AGO .TSTERR 24150037 .BALON ANOP 24200037 &BIT(4) SETB 1 SET BALANCE FLG FOR STAR PARMS 24250037 .********************************************************************** 24300037 .* TEST TO SEE IF ANY SERIOUS (TERMINATING) ERRORS WERE FOUND 24350037 .********************************************************************** 24400037 .TSTERR AIF (&MSG EQ 0 AND &QUIT EQ 0).SETBITS DON'T SPACE IF CLEAN 24450037 SPACE 1 24500037 AIF (&QUIT EQ 0).SETBITS CONTINUE IF NO TERMINAL ERRORS 24550037 MEXIT OTHERWISE, GIVE IT UP 24600037 .********************************************************************** 24650037 .* SET STAR PARM FLAGS FOR CODE GENERATION 24700037 .********************************************************************** 24750037 .SETBITS ANOP 24800037 &BITS SETC '&BIT(1).&BIT(3).&BIT(2).&BIT(4).&BIT(5).&BIT(6).&BIT(7)-24850037 .0' 24900037 .********************************************************************** 24950037 .* CHECK SYNTAX OF MF KEYWORD 25000037 .********************************************************************** 25050037 .MFCHECK AIF ('&MF' EQ 'I').DOCNOP 25100037 AIF (N'&MF NE 2).MFBAD 25150037 AIF ('&MF(1)' NE 'E').MFBAD 25200037 AGO .TSTSA GO TEST FOR REG SAVE REQ 25250037 .DOCNOP ANOP 25300037 CNOP 0,4 BOUNDARY ALIGNMENT 25350037 .TSTSA AIF ('&SAVAREA' NE 'YES').NOSA 25400037 &LABEL STM 14,12,12(13) SAVE REGISTERS 25450037 &LABEL SETC '' CAN USE A LABEL ONLY ONCE 25500037 .NOSA AIF ('&MF' EQ 'I').STNDARD 25550037 &LABEL IHBINNRA &MF(2) GO LOAD PARM REG 25600037 AGO .XECUTE GO GEN CODE TO INIT PARM LIST 25650037 .MFBAD ANOP 25700037 MNOTE 8,'MF= OPERAND INVALID; PROCESSING TERMINATED' 25750037 SPACE 1 25800037 MEXIT A BAD MF KEYW IS FATAL 25850037 .STNDARD ANOP 25900037 &LABEL BAL 1,*+16 BRANCH AROUND LIST 25950037 &LABEL SETC '' CAN USE A LABEL ONLY ONCE 26000037 .LIST ANOP 26050037 &LABEL DC A(0) DVCT OR UCB ADDR, OR DEVTYPE 26100037 AIF ('&MF' EQ 'L').SKIPFLG IF LIST, GEN ONLY ZERO'S 26150037 DC B'&BITS' FLAG BYTE 26200037 AGO .TRKC100 GO AROUND LIST CODE 26250037 .SKIPFLG ANOP 26300037 DC X'00' FLAG BYTE 26350037 .TRKC100 ANOP 26400037 DC X'00' RESERVED 26450037 DC AL2(0) TRACK BALANCE 26500037 AIF ('&MF' EQ 'L').SKIPR GEN ZERO FOR 26550037 AIF ('&FLGA(4)' EQ 'R').SKIPR RECORD NUMBER UNLESS 26600037 AIF (T'&R NE 'N').SKIPR IT'S THE IMMEDIATE-FORM 26650037 DC AL1(&R) RECORD NUMBER 26700037 AGO .TRKC110 26750037 .SKIPR ANOP 26800037 DC AL1(0) RECORD NUMBER 26850037 .TRKC110 ANOP 26900037 AIF ('&MF' EQ 'L').SKIPK GEN ZERO FOR 26950037 AIF ('&FLGA(5)' EQ 'R').SKIPK KEY LENGTH UNLESS 27000037 AIF (T'&K NE 'N').SKIPK IT'S THE IMMEDIATE-FORM 27050037 DC AL1(&K) KEY LENGTH 27100037 AGO .TRKC120 27150037 .SKIPK ANOP 27200037 DC AL1(0) KEY LENGTH 27250037 .TRKC120 ANOP 27300037 AIF ('&MF' EQ 'L').SKIPDD GEN ZERO FOR 27350037 AIF ('&FLGA(6)' EQ 'R').SKIPDD DATA LENGTH UNLESS 27400037 AIF (T'&DD NE 'N').SKIPDD IT'S THE IMMEDIATE-FORM 27450037 DC AL2(&DD) DATA LENGTH 27500037 AGO .TRKC130 27550037 .SKIPDD ANOP 27600037 DC AL2(0) DATA LENGTH 27650037 .TRKC130 ANOP 27700037 AIF ('&MF' EQ 'L').FINISH GEN NO INSTRUCTION IF LIST REQ 27750037 .XECUTE ANOP 27800037 AIF ('&SET(1)' EQ '*').TRKC140 IF *, THEN DVCT SOURCE IS 27850037 .* ALREADY IN THE STAR LIST 27900037 AIF (&BIT(7)).GOTTYPE BR IF TYPE PROVIDED 27950037 AIF ('&FLGA(1)' EQ 'R').BR1 BR IF REG-FORM 28000037 AIF ('&FLGA(1)' NE 'A').TRKC140 BR IF NOT ADDR-FORM 28050037 L 15,&SET(1) MOVE ADDR OF DEVTAB OR 28100037 ST 15,0(0,1) UCB TO LIST 28150037 AGO .TRKC140 28200037 .BR1 ANOP 28250037 ST &SET(1),0(0,1) ST @ OF DEVTAB OR UCB IN LIST 28300037 AGO .TRKC140 28350037 .GOTTYPE AIF ('&FLGA(1)' EQ 'R').TYPER BR IF REG-FORM 28400037 .* OTHERWISE, IT'S ADDR-FORM 28450037 IC 15,&SET(1) MOVE DEVICE TYPE 28500037 STC 15,3(0,1) TO LIST 28550037 AGO .TRKC140 28600037 .TYPER ANOP 28650037 STC &SET(1),3(0,1) ST DEVICE TYPE IN LIST 28700037 .TRKC140 ANOP 28750037 AIF ('&MF' EQ 'I').NOFLAG FLGS ARE DC'D FOR I-FORM 28800037 AIF (T'&FUNCTN EQ 'O').NOFLAG USE RESIDUAL FLGS IF NO FUNCT 28850037 MVI 4(1),B'&BITS' FLAGS TO LIST 28900037 .NOFLAG ANOP 28950037 AIF (&BIT(4) NE 1).TRKC150 BR IF NO BALANCE PROVIDED 29000037 AIF ('&SET(6)' EQ '*').TRKC150 IF '*', BAL IS IN STAR 29050037 .* PARM LIST ALREADY 29100037 AIF ('&FLGA(3)' EQ 'R').BR2 BR IF REG-FORM 29150037 LH 15,&SET(6) TRK BALANCE 29200037 STH 15,6(0,1) TO LIST 29250037 AGO .TRKC150 29300037 .BR2 ANOP 29350037 STH &SET(6),6(0,1) ST TRK BALANCE IN LIST 29400037 .TRKC150 ANOP 29450037 AIF ('&SKIP' EQ 'P3').RKDD3 BR IF RKDD WAS NOT PROVIDED 29500037 AIF ('&FLGA(2)' EQ 'R').BR3 BR IF REG-FORM 29550037 L 15,&SET(2) MOVE RKDD 29600037 ST 15,8(0,1) TO LIST 29650037 AGO .EXITBR 29700037 .BR3 ANOP 29750037 ST &SET(2),8(0,1) ST RKDD IN LIST 29800037 AGO .EXITBR 29850037 .RKDD3 ANOP 29900037 AIF (T'&R EQ 'O').AKY BR IF R NOT PROVIDED 29950037 AIF ('&FLGA(4)' NE 'R').RADDR BR IF NOT REG-FORM 30000037 STC &SET(3),8(0,1) ST REC NO. IN LIST 30050037 AGO .AKY 30100037 .RADDR ANOP 30150037 AIF (T'&R EQ 'N').NRX BR IF IMMEDIATE-FORM 30200037 IC 15,&SET(3) MOVE REC NO. 30250037 STC 15,8(0,1) TO LIST 30300037 AGO .AKY 30350037 .NRX ANOP 30400037 AIF ('&MF' EQ 'I').AKY IF I-FORM, R IS DC'D 30450037 MVI 8(1),&R ST REC NO. IN LIST 30500037 .AKY ANOP 30550037 AIF (T'&K EQ 'O').ADDY BR IF K NOT PROVIDED 30600037 AIF ('&FLGA(5)' NE 'R').KADDR BR IF NOT REG-FORM 30650037 STC &SET(4),9(0,1) ST KEY LENGTH IN LIST 30700037 AGO .ADDY 30750037 .KADDR ANOP 30800037 AIF (T'&K EQ 'N').NKX BR IF IMMEDIATE-FORM 30850037 IC 15,&SET(4) MOVE KEY LENGTH 30900037 STC 15,9(0,1) TO LIST 30950037 AGO .ADDY 31000037 .NKX ANOP 31050037 AIF ('&MF' EQ 'I').ADDY IF I-FORM, K IS DC'D 31100037 MVI 9(1),&K ST KEY LENGTH IN LIST 31150037 .ADDY ANOP 31200037 AIF (T'&DD EQ 'O').EXITBR BR IF DD NOT PROVIDED 31250037 AIF ('&FLGA(6)' NE 'R').DDADDR BR IF NOT REG-FORM 31300037 STH &SET(5),10(0,1) ST DATA LENGTH IN LIST 31350037 AGO .EXITBR 31400037 .DDADDR ANOP 31450037 AIF (T'&DD EQ 'N').NDDX BR IF IMMEDIATE-FORM 31500037 LH 15,&SET(5) MOVE DATA LENGTH 31550037 STH 15,10(0,1) TO LIST 31600037 AGO .EXITBR 31650037 .NDDX ANOP 31700037 AIF ('&MF' EQ 'I').EXITBR IF I-FORM, DD IS DC'D 31750037 MVI 10(1),&DD/256 ST DATA LENGTH(1) IN LIST 31800037 MVI 11(1),&DD-((&DD/256)*256) ST DATA LENGTH(2) IN LIST 31850037 .EXITBR ANOP 31900037 L 15,16 ADDRESS OF CVT 31950037 L 15,232(0,15) ADDRESS OF SECTOR CONV. RTN 32000037 BAL 14,12(0,15) USE STAR ENTRY ON CALL 32050037 AIF ('&SAVAREA' EQ 'NO').FINISH BR IF REGSAVE NOT REQ'D 32100037 LM 1,12,24(13) RESTORE REGS 1-12 32150037 L 14,12(0,13) RESTORE REG 14 32200037 .FINISH MEXIT 32250037 .DSECT ANOP 32300037 DS 0F ALIGN TO FULL WORD BOUNDARY 32350037 &NAME DS 0CL12 STAR PARM LIST MAP 32400037 STARUCBA DS 0F UCB ADDRESS 32450037 STARDCTA DS 0F DEVICE TABLE ADDRESS 32500037 DS XL3 32550037 STARTYPE DS XL1 DEVICE TYPE 32600037 STARFLGS DS XL1 FUNCTION AND OPTIONS 32650037 STARFUNC EQU B'10000000' FUNCTION: 0=TRKBAL, 1=TRKCAP 32700037 STARMAXS EQU B'01000000' 1=MAXSIZE REQUESTED 32750037 STARREMV EQU B'00100000' 1=REMOVE REQUESTED 32800037 STARUBAL EQU B'00010000' 1=CALLER PROVIDED BALANCE 32850037 STARLAST EQU B'00001000' 1=SPECIAL LAST RCD REQUEST 32900037 STARDTU EQU B'00000110' DVCT ENTRY SOURCE FLAGS: 32950037 * 00=DVCT ENTRY ADDRESS PROVIDED 33000037 * 01=RESERVED 33050037 * 10=UCB ADDRESS PROVIDED 33100037 * 11=DEVICE TYPE PROVIDED 33150037 * EQU B'00000001' RESERVED - MUST BE ZERO 33200037 DS XL1 RESERVED 33250037 STARBAL DS H TRACK BALANCE 33300037 STARRKDD DS 0F RECORD INFO AS DEFINED BELOW 33350037 STARR DS XL1 RECORD NUMBER 33400037 STARKL DS XL1 KEY LENGTH 33450037 STARDL DS H DATA LENGTH 33500037 MEND 33550037