DIR TITLE 'DMKDIR (CP) VM/370 - RELEASE 6' 00001000 *. 00002000 * MODULE NAME 00003000 * 00004000 * DMKDIR DIRECTORY CREATION MODULE 00005000 * 00006000 * FUNCTION 00007000 * 00008000 * TO BUILD A USER DIRECTORY ON A SYSTEM ONWED VOLUME 00009000 * USING PREALLOCATED CYLINDERS. A NEW DIRECTORY 00010000 * MAY BE BUILT SO AS NOT TO OVERLAY AN EXISTING 00011000 * DIRECTORY. THE USER MUST ALLOW SPACE FOR TWO 00012000 * DIRECTORIES OR ALLOCATE A NEW DIRECTORY EACH 00013000 * TIME THE DIRECTORY IS CREATED. THIS PROGRAM 00014000 * WILL RUN STAND-ALONE, WITH A CARD DECK AS INPUT. 00015000 * OR UNDER CMS USING A CMS FILE. 00016000 * 00017000 * THE INPUT WILL BE OF THE FOLLOWING FORMAT, WITH ONE 00018000 * OR MORE BLANKS AS DELIMITERS. ALL ENTRIES ARE 00019000 * POSITIONAL FROM LEFT TO RIGHT. IF ANY ENTRIES ARE 00020000 * DEFAULTED ALL REMAINING ENTRIES ON THAT INPUT LINE 00021000 * MUST BE DEFAULTED, WITH THE EXCEPTION OF THE 00022000 * OPTION STATEMENT, ITS ENTRIES ARE SELF DEFINING 00023000 * AND NOT POSITIONAL. 00024000 * 00025000 * IF ANY INPUT STATEMENT IS FOUND TO BE IN ERROR THE 00026000 * PROGRAM WILL CONTINUE TO BUILD THE DIRECTORY CHECKING 00027000 * ALL INPUT STATEMENTS FOR VALIDITY BEFORE TERMINATION. 00028000 * AFTER AN ABNORMOL TERMINATION OR AN EDIT RUN, 00029000 * THE OLD DIRECTORY WILL NOT BE ALTERED, AND THE NEW 00030000 * DIRECTORY WILL NOT BE IN EVIDENCE. 00031000 * 00032000 * IF RUNNING UNDER VM/370 A NORMAL COMPLETION WILL 00033000 * RESULT IN THE NEWLEY CREATED DIRECTORY BEING 00034000 * DYNAMICALLY SWAPPED, AND PLACED IN USE BY VM/370. 00035000 * PROVIDING THE USER'S CLASS IS A,B OR C AND THE 00036000 * DIRECTORY VOLUME IS PRESENT IN THE SYSTEM OWNED 00037000 * LIST. IN ETHER CASE THE DIRECTORY WILL HAVE BEEN 00038000 * UPDATED ON THE DIRECTORY VOLUME. 00039000 * 00040000 * ONLY COLUMN 1 TO 71 WILL BE INSPECTED BY THE 00041000 * PROGRAM. ALL DATA AFTER THE LAST POSSIBLE PARAMETER 00042000 * ON ANY STATEMENT, WILL BE IGNORED. ALSO BLANK STATEMENT 00043000 * AND STATEMENTS WITH THE FIRST PARAMETER AN * WILL ALSO 00044000 * BE IGNORED. 00045000 * 00046000 EJECT 00047000 * COMMAND LINE UNDER CMS 00048000 * 00049000 * +------------------------------------------------------+ 00050000 * | DIRECT >> ( EDIT | 00051000 * +------------------------------------------------------+ 00052000 * 00053000 * THE DIRECT COMMAND WILL DEFAULT TO A CMS FILE 00054000 * IDENTIFICATION OF ' USER DIRECT * '. ANY OR ALL 00055000 * OF THE DEFAULT CAN BE OVERRIDEN BY THE COMMAND LINE. 00056000 * THE EDIT OPTION WILL ALLOW THE USER TO RUN THE 00057000 * PROGRAM WITHOUT UPDATING THE DIRECTORY ON DISK. 00058000 * 00059000 * +-----------------------------------+ 00060000 * | DIRECTORY CCU DEVTYPE VOLSER | 00061000 * | DIR | 00062000 * +-----------------------------------+ 00063000 * 00064000 * DIRECTORY STATEMENT DEFINES THE DEVICE ON WHICH THE DIRECTORY 00065000 * IS ALLOCATED. IT MUST BE THE FIRST STATEMENT. 00066000 * 00067000 * CCU THE DEVICE ADDRESS ON WHICH THE DIRECTORY 00068000 * WILL RESIDE. 00069000 * 00070000 * DEVTYPE 00071000 * 2314 00072000 * 2319 00073000 * 3340 00074000 * 3330 00075000 * 3350 00076000 * 3375 HRC106DK 00076100 * 3380 HRC106DK 00076200 * 2305 00077000 * 00078000 * VOLSER THE VOLUME SERIAL NUMBER OF THE DIRECTORY 00079000 * DEVICE. 00080000 * 00081000 * +-----------------------------------------------------------------+ 00082000 * | USER USERID PASS >>>>>>> | 00083000 * | U ON ON ON ON | 00084000 * | OFF OFF OFF OFF | 00085000 * +-----------------------------------------------------------------+ 00086000 * 00087000 * USER STATEMENT INITIATES A USER MACHINE BLOCK AND CREATES 00088000 * A USER DIRECTORY BLOCK. IT DELIMITS THE USER DIRECTORY 00089000 * ENTRIES FOR ONE USER. 00090000 * 00091000 * USERID ONE TO EIGHT CHARACTER USER ID 00092000 * 00093000 * PASS ONE TO EIGHT CHARACTER USER PASSWORD 00094000 * 00095000 * STOR ONE TO EIGHT DECIMAL DIGITS THAT IS THE 00096000 * VIRTUAL USER'S STORAGE SIZE. IT IS A 00097000 * MULTIPLE OF 4K. THE LAST DIGIT MUST BE 00098000 * K OR M. THE DEFAULT IS 128K. THE MINIMUM 00099000 * SIZE IS 8K. ALL ENTRIES NOT ON A 4K BOUNDARY 00100000 * WILL BE ROUNDED UP TO THE NEXT 4K BOUNDARY. 00101000 * THE MAXIMUM SIZE IS 16M. 00102000 * 00103000 EJECT 00104000 * MSTOR ONE TO EIGHT DECIMAL DIGITS THAT IS THE 00105000 * MAXIMUM STORAGE SIZE THIS USER CAN DEFINE 00106000 * HIS STORAGE AS AFTER LOGGING ON THE SYSTEM. 00107000 * IT IS A MULTIPLE OF 4K. THE LAST DIGIT 00108000 * MUST BE K OR M. THE DEFAULT SIZE IS 1M. 00109000 * ALL ENTRIES NOT ON A 4K BOUNDARY WILL 00110000 * BE ROUNDED UP TO THE NEXT 4K BOUNDARY AND THE 00111000 * MAXIMUM SIZE IS 16M. THE MINIMUM SIZE IS 8K. 00112000 * 00113000 * CL ONE TO EIGHT LETTERS FROM A TO H DENOTING 00114000 * THE OPERATING CLASS GIVEN TO THIS USER. THE 00115000 * DEFAULT IS G. 00116000 * 00117000 * PRI A NUMBER FROM ONE TO NINETY-NINE. USED BY 00118000 * THE DISPATCHING SCHEME. ONE IS THE HIGHEST 00119000 * PRIORITY AND FIFTY IS THE DEFAULT. 00120000 * 00121000 * LE A ONE CHARACTER TERMINAL LINE END SYMBOL OR A 00122000 * TWO CHARACTER HEX REPRESENTATION OF THE SYMBOL. 00123000 * ON WILL GIVE THE SYSTEM DEFAULT #. OFF WILL 00124000 * TURN THE FEATURE OFF. 00125000 * 00126000 * LD A ONE CHARACTER TERMINAL LINE DELETE SYMBOL 00127000 * OR A TWO CHARACTER HEX REPRESENTATION OF THE 00128000 * SYMBOL. ON WILL GIVE THE SYSTEM DEFAULT ยข . 00129000 * OFF WILL TURN THE FEATURE OFF. 00130000 * 00131000 * CD A ONE CHARACTER TERMINAL CHARACTER DELETE SYMBOL 00132000 * OR A TWO CHARACTER HEX REPRESENTATION OF THE 00133000 * SYMBOL. ON WILL GIVE THE SYSTEM DEFAULT @ . OFF 00134000 * WILL TURN THE FEATURE OFF. 00135000 * 00136000 * ES A ONE CHARACTER EDIT EXCAPE CHARACTER OR A TWO 00137000 * CHARACTER HEX REPRESENTATION OF THE SYMBOL. 00138000 * ON WILL GIVE THE SYSTEM DEFAULT " . OFF WILL 00139000 * TURN THE FEATURE OFF. 00140000 * 00141000 * 00142000 * +-----------------------------------+ 00143000 * | ACCOUNT NUMBER | 00144000 * | A | 00145000 * +-----------------------------------+ 00146000 * 00147000 * ACCOUNT STATEMENT DEFINES AN EIGHT CHARACTER ACCOUNT NUMBER, 00148000 * AND A ONE TO EIGHT CHARACTER DISTRIBUTION IDENTIFICATION. 00149000 * THIS STATEMENT MUST FOLLOW THE USER STATEMENT AND PRECEDE THE FIRST 00150000 * DEVICE STATEMENT. THE ACCOUNT STATEMENT IS OPTIONAL. 00151000 * 00152000 EJECT 00153000 * +-------------------------------------------------------------------+ 00154000 * |OPTION REALTIMER ECMODE ISAM VIRT=REAL ACCT SVCOFF BMX CPUID BBBBBB| 00155000 * |O R E I V A S B C | 00156000 * +-------------------------------------------------------------------+ 00157000 * 00158000 * +-------------------------------------------------------------------+ 00159000 * |OPTION AFFINITY AA LNKNOPAS STFIRST HRC068DK 00160590 * |O AF L ST HRC068DK 00161180 * +-------------------------------------------------------------------+ 00162000 * 00163000 * OPTION STATEMENT SELECTS SPECIFIC OPTIONS AVAILABLE TO 00164000 * THE USER. THIS STATEMENT MUST FOLLOW THE USER STATEMENT AND 00165000 * PRECEDE THE FIRST DEVICE STATEMENT, THE OPTION STATEMENT 00166000 * IS OPTIONAL. MULTIPLE OPTION STATEMENTS ARE PERMITTED. 00167000 * 00168000 * +---------------+ 00169000 * | IPL IPLSYS | 00170000 * | I | 00171000 * +---------------+ 00172000 * 00173000 * IPL STATEMENT WILL CONTAIN A ONE TO EIGHT CHARACTER NAME OF 00174000 * THE SYSTEM OR DEVICE TO BE IPL'D ,FOR THE USER, 00175000 * AT LOGON TIME. THIS STATEMENT MUST BE AFTER THE USER STATEMENT 00176000 * AND BEFORE THE FIRST DEVICE STATEMENT, THE IPL STATEMENT 00177000 * IS OPTIONAL. 00178000 * 00179000 * +----------------------------------+ 00180000 * | CONSOLE CCU DEVTYPE | 00181000 * | C | 00182000 * +----------------------------------+ 00183000 * 00184000 * CONSOLE STATEMENT SPECIFIES THE CONSOLE DEVICE. 00185000 * 00186000 * CCU THE VIRTUAL DEVICE ADDERSS. 00187000 * 00188000 * DEVTYPE 00189000 * 1052 00190000 * 3210 00191000 * 3215 00192000 * 3278 00193000 * 00194000 * CLASS IS A ONE CHARACTER OUTPUT CLASS, THE DEFAULT IS CLASS T. 00195000 * 00196000 * +------------------------------------------------------------------+ 00197000 * | MDISK CCU TYPE CYLR CYLS VOLSER >>> | 00198000 * | M T-DISK | 00199000 * | T | 00200000 * +------------------------------------------------------------------+ 00201000 * 00202000 * MDISK STATEMENT DESCRIBES A PHYICAL EXTENT ON A DASD DEVICE TO BE 00203000 * OWNED BY THAT USER. 00204000 * 00205000 * CCU VIRTUAL DEVICE ADDRESS. 00206000 * 00207000 * TYPE 00208000 * 2305 00209000 * 2311 TOP (TOP HALF OF A 2314-2319) 00210000 * T 00211000 * BOTTOM (BOTTOM HALF OF A 2314-2319) 00212000 * B 00213000 * 2314 00214000 * 2319 00215000 * 3340 00216000 * 3330 00217000 * 3350 00218000 * 3375 HRC106DK 00218100 * 3380 HRC011DK 00218500 * 00219000 * CYLR A THREE DIGIT DECIMAL CYLINDER RELOCATION 00220000 * FACTOR. OR IF T-DISK, DISK SPACE IS OBTAINED 00221000 * AT LOGON TIME. 00222000 * 00223000 * CYLS A THREE DIGIT DECIMAL NUMBER SPECIFYING THE 00224000 * NUMBER OF CYLINDERS. 00225000 * 00226000 * VOLSER THE VOLUME SERIAL NUMBER OF THE DASD UNIT 00227000 * 00228000 * MODE SPECIFIES THE PRIMARY ACCESS REQUESTED (READ/ONLY, 00229000 * WRITE, OR MULTIPLE), AND THE ALTERNATE ACCESS 00230000 * (READ/ONLY OR WRITE) DESIRED (IF ANY), AND OPTIONALLY 00231000 * A CHARACTER 'V' WHICH IF SPECIFIED INDICATES THAT 00232000 * VIRTUAL RESERVE/RELEASE PROCESSING SHOULD BE DONE. 00233000 * 00234000 * R SPECIFIES THAT READ/ONLY (R/O) ACCESS IS REQUESTED. 00235000 * THE LINK WILL NOT BE GIVEN IF ANY OTHER USER HAS THE 00236000 * DISK IN WRITE STATUS. 00237000 * 00238000 * RR SPECIFIES THAT READ/ONLY ACCESS IS REQUESTED, EVEN IF 00239000 * ANOTHER USER HAS THE DISK IN WRITE STATUS. 00240000 * 00241000 * W SPECIFIES THAT WRITE ACCESS IS REQUESTED. THE DISK WILL 00242000 * NOT BE DEFINED IF ANY OTHER USER HAS THE DISK IN READ OR 00243000 * WRITE STATUS. 00244000 * 00245000 * WR SPECIFIES THAT WRITE ACCESS IS REQUESTED IF NO OTHER 00246000 * USER HAS THE DISK IN READ OR WRITE STATUS, BUT THAT AN 00247000 * ALTERNATE ACCESS OF READ/ONLY IS ACCEPTABLE IF OTHER(S) 00248000 * DO HAVE A LINK TO THE DISK; IN THIS EVENT, A READ/ONLY 00249000 * MODE IS TO BE GIVEN. 00250000 * 00251000 * M SPECIFIES THAT "MULTIPLE" ACCESS IS REQUESTED. THIS 00252000 * MEANS THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00253000 * UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT, 00254000 * IN WHICH EVENT NO LINK IS TO BE GIVEN. 00255000 * 00256000 * MR SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00257000 * UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT; 00258000 * IN THIS EVENT, A READ-LINK IS TO BE GIVEN, WITH AN 00259000 * ERROR 1 OR 2, AND THE 'DEV XXX FORCED R/O' MESSAGE. 00260000 * 00261000 * MW SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00262000 * IN ANY EVENT. 00263000 * 00264000 * IF THE MODE IS OMITTED FROM THE STATEMENT, THE 00265000 * DEFAULT IS TO "W". 00266000 * 00267000 EJECT 00268000 * PR ONE TO EIGHT CHARACTER PASSWORD THAT ALLOWS LINKING 00269000 * IN READ MODE. 00270000 * 00271000 * PR ONE TO EIGHT CHARACTER PASSWORD THAT ALLOWS LINKING 00272000 * IN WRITE MODE. 00273000 * 00274000 * PM ONE TO EIGHE CHARACTER PASSWORD THAT ALLOWS LINKING 00275000 * IN MULT-WRITE. 00276000 * 00277000 * +--------------------------------+ 00278000 * | SPOOL CCU DEVTYPE | 00279000 * | S | 00280000 * +--------------------------------+ 00281000 * 00282000 * SPOOL STATEMENT SPECIFIES THE OUTPUT UNIT RECORD DEVICE TO SPOOL. 00283000 * 00284000 * CCU THE VIRTUAL DEVICE ADD. 00285000 * 00286000 * DEVTYPE 00287000 * 1403 00288000 * 1443 00289000 * 3211 00290000 * 3203 00291000 * 2540 PUNCH 00292000 * P 00293000 * READER 00294000 * R 00295000 * 3525 00296000 * 2501 00297000 * 3505 00298000 * 00299000 * CLASS IS A ONE CHARACTER OUTPUT CLASS, THE DEFAULT IS CLASS A. 00300000 * 00301000 * +---------------------------------+ 00302000 * | DEDICATE CCU RDEV <3330V> | 00303000 * | D VOLSER | 00304000 * +------------------------------------------+ 00305000 * 00306000 * DEDICATE STATEMENT SPECIFICES THAT A DEVICE IS TO BE 00307000 * DEDICATED TO THIS USER. 00308000 * 00309000 * CCU THE VIRTUAL DEVICE ADD FOR THIS USER. 00310000 * 00311000 * RDEV THE REAL DEVICE ADD OF THE DEVICE TO BE DEDICATED. 00312000 * 00313000 * VOLID OPTIONAL KEYWORD USED IF THE VOLSER IS LESS THAN 00314000 * 4 CHARACTERS. 00315000 * 00316000 * VOLSER THE VOLUME SERIAL NUMBER OF THE DISK PACK, 00317000 * ON A REAL DEVICE, TO BE DEDICATED. 00318000 * 00319000 * 3330V AN OPTIONAL KEYWORD. IF SPECIFIED, INDICATES THAT 00320000 * THE VIRTUAL DEVICE ADDRESS IS TO BE TREATED AS AN 00321000 * MSS VUA. 00322000 * 00323000 EJECT 00324000 * +-------------------------------------+ 00325000 * | LINK USERID LDEV > | 00326000 * | L | 00327000 * +-------------------------------------+ 00328000 * 00329000 * LINK STATEMENT SPECIFIES THAT THIS USER IS TO BE LINKED 00330000 * AT LOGON TIME. 00331000 * 00332000 * USERID THE USER ID OF THE USER TO LINK TO. 00333000 * 00334000 * LDEV THE DEVICE ADDRESS OF THE DEVICE TO LINK TO. 00335000 * 00336000 * CCU THE VIRTUAL DEVICE ADDRESS OF THE USERS 00337000 * DEVICE. IT WILL DEFAULT TO THE SAME ADD AS 00338000 * LINK TO DEVICE. 00339000 * 00340000 * MODE SPECIFIES THE PRIMARY ACCESS REQUESTED (READ/ONLY, 00341000 * WRITE, OR MULTIPLE), AND THE ALTERNATE ACCESS 00342000 * (READ/ONLY OR WRITE) DESIRED (IF ANY), AS FOLLOWS: 00343000 * 00344000 * R SPECIFIES THAT READ/ONLY (R/O) ACCESS IS REQUESTED. 00345000 * THE LINK WILL NOT BE GIVEN IF ANY OTHER USER HAS THE 00346000 * DISK IN WRITE STATUS. 00347000 * 00348000 * RR SPECIFIES THAT READ/ONLY ACCESS IS REQUESTED, EVEN IF 00349000 * ANOTHER USER HAS THE DISK IN WRITE STATUS. 00350000 * 00351000 * W SPECIFIES THAT WRITE ACCESS IS REQUESTED. THE LINK WILL 00352000 * NOT BE GIVEN IF ANY OTHER USER HAS THE DISK IN READ OR 00353000 * WRITE STATUS. 00354000 * 00355000 * WR SPECIFIES THAT WRITE ACCESS IS REQUESTED IF NO OTHER 00356000 * USER HAS THE DISK IN READ OR WRITE STATUS, BUT THAT AN 00357000 * ALTERNATE ACCESS OF READ/ONLY IS ACCEPTABLE IF OTHER(S) 00358000 * DO HAVE A LINK TO THE DISK; IN THIS EVENT, A READ/ONLY 00359000 * LINK IS TO BE GIVEN. 00360000 * 00361000 * M SPECIFIES THAT "MULTIPLE" ACCESS IS REQUESTED. THIS 00362000 * MEANS THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00363000 * UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT, 00364000 * IN WHICH EVENT NO LINK IS TO BE GIVEN. 00365000 * 00366000 * MR SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00367000 * UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT; 00368000 * IN THIS EVENT, A READ-LINK IS TO BE GIVEN, WITH AN 00369000 * ERROR 1 OR 2, AND THE 'DEV XXX FORCED R/O' MESSAGE. 00370000 * 00371000 * MW SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00372000 * IN ANY EVENT. 00373000 * 00374000 * IF THE MODE IS OMITTED FROM THE STATEMENT, THE 00375000 * DEFAULT IS TO "R". 00376000 * 00377000 EJECT 00378000 * +-------------------------+ 00379000 * | SPECIAL CCU DEVTYPE | 00380000 * | SPE | 00381000 * +-------------------------+ 00382000 * 00383000 * SPECIAL STATEMENT SPECIFIES THE I/O UNITS AVAILABLE TO THE USER 00384000 * THAT NEED NOT HAVE A REAL I/O UNIT AVAILABLE. SPECIAL DEVICES 00385000 * ARE PROGRAM SIMULATED DEVICES THAT MAY OR MAY NOT BE CONNECTED 00386000 * TO REAL OR VIRTUAL DEVICES AFTER THE USER HAS COMPLETED 'LOGON'. 00387000 * 00388000 * CCU THE VIRTUAL DEVICE ADDRESS. 00389000 * 00390000 * DEVTYPE 00391000 * 2701 IBM (VIRTUAL 270X ONLY) 00392000 * I 00393000 * TELE 00394000 * T 00395000 * 2702-2703 (SAME AS 2701) 00396000 * CTCA (CHANNEL TO CHANNEL ADAPTER) 00397000 * TIMER (PSEUDO-TIMER DEVICE) 00398000 * 00399000 * 3270 - VIRTUAL 3270 DEVICE 00400000 * 3138 VIRTUAL CONSOLE 00401000 * 3148 VITRUAL CONSOLE 00402000 * 3158 VIRTUAL CONSOLE 00403000 EJECT 00404000 * ATTRIBUTES 00405000 * 00406000 * NOT SERIALLY REUSABLE, 00407000 * 00408000 * ENTRY POINTS 00409000 * 00410000 * DMKDIRCT DIRECTORY ENTRY POINT 00411000 * 00412000 * DMKDIRED END OF THE LOAD MODULE FOR CMS 00413000 * 00414000 * ENTRY CONDITIONS 00415000 * 00416000 * NONE IF ON THE BARE MACHINE 00417000 * 00418000 * UNDER CMS REG 1 WILL POINT TO A PARAMITER LIST 00419000 * CONTAINING THE FILE NAME, TYPE AND MODE OF A 00420000 * CMS FILE CONTAINING THE CONTROL STATEMENTS. 00421000 * THE DEFAULT NAME WILL BE "USER DIRECT *" 00422000 * 00423000 * EXIT CONDITIONS 00424000 * 00425000 * NONE IF ON THE BARE MACHINE 00426000 * 00427000 * UNDER CMS REG 15 WILL CONTAIN A RETURN CODE: 00428000 * 00429000 * 1 = INVALID FILE NAME OR FILE NOT FOUND 00430000 * 2 = ERROR LOADING THE DIRECTORY 00431000 * 3 = INVALID OPTION FROM CMS 00432000 * 4 = DIRECTORY NOT SWAPED, USER NOT CLASS A,B OR C. 00433000 * 5 = DIRECTORY NOT SWAPED, OLD DIRECTORY LOCKED. 00434000 * 6 = DIRECTORY NOT SWAPED, DIRECTORY IN USE BY THE 00435000 * SYSTEM IS NOT THE DIRECTORY UPDATED. 00436000 * 1XX = ERROR IN THE CMS RDBUF ROUTINE 00437000 * 2XX = ERROR IN THE CMS TYPLIN ROUTINE 00438000 * XX = THE CMS ROUTINE RETURN CODE 00439000 * 00440000 * EXTERNAL REFERENCES 00441000 * 00442000 * NONE 00443000 * 00444000 * TABLES / WORK AREAS 00445000 * 00446000 * NAMETABLE LIST OF VALID KEYWORDS FROM INPUT 00447000 * 00448000 * 00449000 * 00450000 EJECT 00451000 * REGISTER USAGE 00452000 * 00453000 * 00454000 * R0 = WORK 00455000 * R1 = POINTER TO INPUT FIELD 00456000 * POINTER TO IOB 00457000 * POINTER TO OUTPUT BUFFER 00458000 * WORK 00459000 * R2 = INPUT COUNT FROM SCANSTATEMENT 00460000 * DASD ADDRESS 00461000 * WORK 00462000 * R3 = WORK 00463000 * R4 = WORK 00464000 * R5 = BRANCH AND LINK RETURN ADDRESS 00465000 * POINTER TO THE NEXT UDEVBLOK 00466000 * WORK 00467000 * R6 = RDIRBUF = POINTER TO THE UDIRBLOK BUFFER 00468000 * R7 = RMACBUF = POINTER TO THE UMACBLOK BUFFER 00469000 * R8 = RDEVBUF = POINTER TO THE UMDEVBLOK BUFFER 00470000 * R9 = RDIR = POINTER TO UDIRBLOK 00471000 * R10 = RMAC = POINTER TO UMACBLOK 00472000 * R11 = RDEV = POINTER TO UDEVBLOK 00473000 * R12 = BASE 1 00474000 * R13 = BASE 2 00475000 * R14 = RETURN ADDRESS 00476000 * R15 = ENTRY ADDRESS 00477000 * 00478000 EJECT 00479000 * MESSAGES 00480000 * 00481000 * DMKDIR751E INVALID OPERAND - XXXXXX 00482000 * XXXXXX = THE PARAMETER IN ERROR FROM THE 00483000 * LAST INPUT LINE. 00484000 * 00485000 * DMKDIR752E CONTROL STATMENT SEQUENCE ERROR 00486000 * 00487000 * DMKDDR753E OPERAND MISSING 00488000 * 00489000 * DMKDIR754E DEV CCU NOT OPERATIONAL 00490000 * CCU = THE ADDRESS OF THE UNIT 00491000 * 00492000 * DMKDIR755E IO ERROR CCU CSW XXXXXXXXXXXXXXXX SENSE XXXXXXXXXXX 00493000 * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 00494000 * CCU = THE UNIT ADIRESS OF THE DEVICE 00495000 * SENSE XX = UP TO 32 SENSE BYTES HRC011DK 00496490 * CSW XX = THE CSW FROM THE ERROR 00497000 * 00498000 * DMKDIR756E PROGRAM CHECK PSW = XXXXXXXXXXXXXXXX 00499000 * XXXX = THE PROGRAM CKECK OLD PSW 00500000 * 00501000 * DMKDIR757E MACHINE CHECK RUN SEREP AND SAVE OUTPUT FOR CE 00502000 * 00503000 * DMKDIR758E DUPLICATE UNIT DEFINITION 00504000 * 00505000 * DMKDIR760E NOT ENOUGH SPACE ALLOCATED FOR DIRECTORY 00506000 * 00507000 * DMKDIR761E VOLID READ IS VOLID1 NOT VOLID2 00508000 * VOLID1 = THE VOLUME SERIAL NUMBER FROM 00509000 * THE DASD DEVICE. 00510000 * VOLID2 = THE VOLUME SERIAL NUMBER FROM 00511000 * DIRECTORY STATMENT. 00512000 * 00513000 * DMKDIR762E DIRECTORY STATEMENT MISSING 00514000 * 00515000 * DMKDIR763E INVALID FILENAME OR FILE NOT FOUND 00516000 * 00517000 * DMKDIR764E ERROR IN XXXXXXXX 00518000 * XXXXXXX = THE NAME OF THE CMS ROUTINE 00519000 * IN ERROR. 00520000 * 00521000 * EOJ DIRECTORY NOT UPDATED 00522000 * 00523000 * EOJ DIRECTORY UPDATED 00524000 * 00525000 * EOJ DIRECTORY UPDATED AND ON LINE 00526000 * 00527000 * VM/370 USER DIRECTORY CREATION PROGRAM RELEASE 6 00528000 * 00529000 * ENTER CARD READER ADDRESS AND OPTIONS 00530000 * 00531000 * OPERATION SEE ROUTINES 00532000 * 00533000 *. 00534000 EJECT 00535000 MACRO 00536000 &SYMBOL TABLE &NAME,&MIN,&CLASS,&TYPE,&FET,&LAST 00537000 LCLC &C 00538000 &C SETC '&NAME'(1,4) 00539000 AIF (T'&TYPE EQ 'O').POINT 00540000 AIF ('&LAST' EQ 'LAST').LASTCON 00541000 &SYMBOL DC XL.4'4',AL.4(&MIN-1) FLAG = CONSTANT+LENGTH 00542000 AGO .CON 00543000 .LASTCON ANOP 00544000 &SYMBOL DC XL.4'C',AL.4(&MIN-1) FLAG = LAST CONSTANT+LENGTH 00545000 .CON DC AL1(&CLASS) CLASS OF DEVICE 00546000 DC AL1(&TYPE) TYPE OF DEVICE 00547000 AIF (T'&FET EQ 'O').FET 00548000 DC AL1(&FET) FEATURE CODE 00549000 AGO .NAME 00550000 .FET DC AL1(0) NO FEATURE CODE 00551000 AGO .NAME 00552000 .POINT AIF ('&CLASS' EQ 'LAST').LASTPT 00553000 DC XL.4'0',AL.4(&MIN-1) FLAG = POINTER TO ROUTINE + LENGTH 00554000 AGO .PT 00555000 .LASTPT ANOP 00556000 &SYMBOL DC XL.4'8',AL.4(&MIN-1) FLAG = LAST POINTER+LENGTH 00557000 .PT DC AL3(SCAN&C) ADDRESS OF THE ROUTINE 00558000 .NAME ANOP 00559000 CON&C DC CL8'&NAME' NAME 00560000 SPACE 00561000 MEND 00562000 SPACE 00563000 MACRO 00564000 &SYMBOL COMP &NAME 00565000 &SYMBOL LA R3,&NAME 00566000 BAL R14,COMPARE . GO COMPARE THE KEYWORD RETURN WITH CC SET 00567000 MEND 00568000 SPACE 00569000 MACRO 00570000 &SYMBOL MOVE &NAME 00571000 &SYMBOL BCT R2,*+10 00572000 MVC &NAME(1)(1),0(R1) 00573000 EX R2,*-6 00574000 MEND 00575000 SPACE 00576000 MACRO 00577000 &SYMBOL MSG &MESSAGE,&RETURN 00578000 AIF ( T'&RETURN EQ 'O').YES 00579000 &SYMBOL LA R5,&RETURN 00580000 BAL R2,MSGWRITE 00581000 AGO .CONT 00582000 .YES ANOP 00583000 &SYMBOL BAL R2,MSGWRITE 00584000 .CONT DC AL2(L&SYSNDX) 00585000 M&SYSNDX DC C&MESSAGE 00586000 L&SYSNDX EQU *-M&SYSNDX 00587000 SPACE 00588000 MEND 00589000 EJECT 00590000 SPACE 3 00591000 DMKDIR START 0 00592000 USING *,R0 00593000 USING IOB,R1 00594000 USING NAMETABL,R4 00595000 USING UMACBLOK,R10 00596000 USING UDEVBLOK,R11 00597000 USING DMKDIRCT+2,R12 00598000 USING DMKDIRCT+4096,R13 00599000 USING DMKDIRCT+8190,R9 @V200731 00600000 SPACE 3 00601000 RDIRBUF EQU 6 REGISTER POINTING TO DIRECTORY PAGE BUF 00602000 RMACBUF EQU 7 REGISTER POINTING TO MACHINE PAGE BUFFER 00603000 RDEVBUF EQU 8 REGISTER POINTING TO DEVICE PAGE BUFFER 00604000 RDIR EQU 15 REGISTER POINTING TO UDIRBLOK @V200731 00605000 RMAC EQU 10 REGISTER POINTING TO UMACBLOK 00606000 RDEV EQU 11 REGISTER POINTING TO UDEVBLOK 00607000 SPACE 3 00608000 IPLUSE DS 3D 00609000 EXTOLD DC D'0' 00610000 SUPOLD DC D'0' 00611000 PROOLD DC D'0' 00612000 MCOLD DC D'0' 00613000 IOOLD DC D'0' 00614000 CSW DS 1D 00615000 CAW DS 1F 00616000 DC F'0' 00617000 TIMER DC X'7FFFFFFF' 00618000 DC F'0' 00619000 EXTNEW DC X'0104000000' 00620000 DC AL3(EXTINT) 00621000 SVCNEW DC X'0106000000000000' 00622000 PRONEW DC X'0104000000' 00623000 DC AL3(ERROR56) 00624000 MCNEW DC X'0000000000' 00625000 DC AL3(ERROR57) 00626000 IONEW DC X'0104000000' 00627000 DC AL3(IOINT) 00628000 EJECT 00629000 ****************************************************************** 00630000 *. 00631000 * DMKDIRCT HOUSEKEEPING ROUTINE 00632000 * 00633000 * 1. IF UNDER CMS GO TO STEP 6. 00634000 * 00635000 * 2. PRINT HEADER AND READ FROM CONSOLE. 00636000 * 00637000 * 3. IF NULL LINE USE IPL DEV ADD, ELSE 00638000 * SET UP ADD FROM CONSOLE. 00639000 * 00640000 * 4. IF THE EDIT OPTION WAS ENTERED SET THE 00641000 * EDIT BIT ON. 00642000 * 00643000 * 5. GO TO READ THE FIRST CARD. 00644000 * 00645000 * 6. SET UP THE PARM LIST AND STATE THE FILE. 00646000 * 00647000 * 7. IF NOT FOUND GO TO EXIT. ELSE GO TO READ. 00648000 * 00649000 *. 00650000 ****************************************************************** 00651000 ENTRY DMKDIRCT 00652000 DMKDIRCT BALR R12,0 SET UP BASE 1 00653000 LA R12,0(,R12) CLEAR HIGH ORDER BYTE FOR BARE MAC COMP 00654000 LA R13,4094(,R12) SET UP BASE 2 00655000 LA R9,4094(,R13) SET UP BASE 3 @V200731 00656000 L RDIR,POINTERS GET BUFFER ADDRESS FOR UDIRBLOK @V200731 00657000 ST RDIR,DIRPTR SAVE BUFFER ADDRESS @V200731 00658000 L RMAC,POINTERS+4 GET BUFFER ADDRESS FOR UMACBLOK @V200731 00659000 LR RDEV,RMAC POINT TO FIRST UDEVBLOK 00660000 LM RDIRBUF,RDEVBUF,POINTERS LOAD POINTERS TO BUFFERS 00661000 STIDP CPUID STORE CPU ID 00662000 CL R12,BAREMAC IS THIS A BARE MACHINE 00663000 BNE CMS1 NO- GO TO CMS ROUTINE 00664000 SSM =X'01' ENABLED TO ACCEPT EXT INTERRUPT 00665000 B NEWADD 00666000 EXTINT DS 0H 00667000 MVI TIMER,X'7F' SET HI TIMER FOR ANY EXT INTERRUPT 00668000 TM EXTOLD+3,X'40' WAS EXT INT KEY PUSHED 00669000 BO NEWADD BRANCH IF SO 00670000 LPSW EXTOLD IGNORE EXT INT IF NOT 00671000 NEWADD LA R15,CONIOB POINT TO IOB 00672000 BAL R5,MSG02 GO PRINT MSG 00673000 MSGRET EQU * @V200731 00674000 LA R2,CONERROR SET UP ADDRESS FOR ERROR ROUTINE @V200731 00675000 ST R2,IOBERROR AND PUT ADDRESS IN IOB @V200731 00676000 LA R2,CONCCWR POINT TO THE CONSOLE READ CCW @V200731 00677000 BAL R5,GRAPHID GO READ CONSOLE @V200731 00678000 LA R1,READBUF1 * GET IO ADD OF CARD READER 00679000 ST R1,CURPOINT * AND STORE IT IN THE IOB 00680000 LA R4,72 * 00681000 STH R4,CURCOUNT * 00682000 BAL R14,SCANCARD * 00683000 BC 4,DEFAUL13 * 00684000 BAL R14,HEXCONV * 00685000 STOREADD STH R2,READADD * 00686000 BAL R14,SCANCARD GO FIND THE EDIT PARM 00687000 BNE READ IF NO INPUT THAN GO READ THE CARD 00688000 CLC =C'EDIT ',0(R1) IS THIS EDIT 00689000 BNE ERROR51 NO- ERROR 00690000 OI DIRFLAG,EDITMODE TURN ON THE EDIT SWITCH 00691000 B READ GO GET THE FIRST CARD 00692000 DEFAUL13 LH R2,IPLUSE+2 USE IPL UNIT ADD 00693000 B STOREADD 00694000 SETUPERR TM IOBSTAT,IOBNOPER WAS THE UNIT NOT OPER 00695000 BO CONPARM YES, GO TEST FOR CORRECT DEVICE @V200731 00696000 TM IOBCSW+4,UC IS UNIT CHECK INDICATED ? @V200731 00697000 BZ CONERROR NO, GO TO ERROR HANDLER @V200731 00698000 CONPARM EQU * @V200731 00699000 TM PARM,PARM321 IS THIS A 3215/3210/1052 @V200731 00700000 BO DDRLPSW YES, GO WAIT FOR I/O INTERRUPT @V200731 00701000 TM PARM,PARM01F IS THIS ADDRESS 01F ? @V200731 00702000 BO TESTGRAP YES, GO CHECK FOR GRAPHIC @V200731 00703000 * DEVICE ? 00704000 OI PARM,PARM01F SET INDICATOR FOR 01F @V200731 00705000 MVI CONIOB+((IOBUADD+1)-IOB),X'1F' SET DEVICE ADDR @V200731 00706000 * TO 1F 00707000 B NEWADD GO TRY THIS ADDRESS - 01F @V200731 00708000 TESTGRAP EQU * @V200731 00709000 TM PARM,PARMGRP IS THIS A GRAPHIC DEVICE ? @V200731 00710000 BO TES3270T YES, GO TEST FOR 3270 DEVICE @V200731 00711000 OI PARM,PARMGRP+PARMCLE SET GRAPHIC & ERASE @V200731 00712000 * INDICATORS 00713000 DDRLPSW EQU * @V200731 00714000 LPSW CONWAIT WAIT FOR I/O INTERRUPT @V200731 00715000 TES3270T EQU * @V200731 00716000 TM PARM,PARMGRP+PARM327 IS THIS A 3270 DEVICE ? @V200731 00717000 BO TEST3278 YES, GO TEST FOR 3278 @V60A6B6 00718000 OI PARM,PARM327 SET THE 3270 INDICATOR @V60A6B6 00719000 ********************************************************************** 00720000 * THE FOLLOWING WILL ENSURE THE LINE/COL LOCATION FOR THE DATA STREAM* 00721000 * FOR THE 3277. THIS IS A 24 LINE OPERATOR CONSOLE SCREEN. * 00722000 ********************************************************************** 00723000 MVC LAB3270A+2(2),ADDR1 @V60A6B6 00724000 MVC LAB3270A+8(2),ADDR2 @V60A6B6 00725000 MVC LAB3270B+2(2),ADDR1 @V60A6B6 00726000 MVC LAB3270B+8(2),ADDR2 @V60A6B6 00727000 MVC LAB3270C+2(2),ADDR2 @V60A6B6 00728000 MVC LAB3270D+2(2),ADDR1 @V60A6B6 00729000 MVC LAB3270E+5(2),ADDR1 @V60A6B6 00730000 MVC LAB3270E+12(2),ADDR2 @V60A6B6 00731000 MVC ADDR5,ADDR6 ADDR TO CHECK FOR CURSOR MOVE @V60A6B6 00732000 MVC MAXLEN,LEN3270 @V60A6B6 00733000 B NEWADD GO TRY THIS WITH GRAPHIC SUP. @V60A6B6 00734000 TEST3278 EQU * @V60A6B6 00735000 CLC LAB3270A+2(2),ADDR3 HAVE WE TRIED IT AS 3278 @V60A6B6 00736000 BE TEST3215 MUST BE 3210-3215 @V60A6B6 00737000 ********************************************************************** 00738000 * THE FOLLOWING WILL ENSURE THE LINE/COL LOCATION FOR THE DATA STREAMS 00739000 * FOR THE 3278 MOD2A. THIS IS A 20 LINE OPERATOR CONSOLE SCREEN. * 00740000 ********************************************************************** 00741000 MVC LAB3270A+2(2),ADDR3 @V60A6B6 00742000 MVC LAB3270A+8(2),ADDR4 @V60A6B6 00743000 MVC LAB3270B+2(2),ADDR3 @V60A6B6 00744000 MVC LAB3270B+8(2),ADDR4 @V60A6B6 00745000 MVC LAB3270C+2(2),ADDR4 @V60A6B6 00746000 MVC LAB3270D+2(2),ADDR3 @V60A6B6 00747000 MVC LAB3270E+5(2),ADDR3 @V60A6B6 00748000 MVC LAB3270E+12(2),ADDR4 @V60A6B6 00749000 MVC ADDR5,ADDR7 EST. ADDR FOR CURSOR CHECK @V60A6B6 00750000 MVC MAXLEN,LEN3278 @V60A6B6 00751000 B NEWADD GO TRY THIS ADDRESS WITH @V200731 00752000 * GRAPHIC SUPPORT 00753000 TEST3215 EQU * @V200731 00754000 MVI PARM,PARM321 SET THE 3210-3215-1052 FLAG @V200731 00755000 B NEWADD GO TRY THIS ADDRESS WITH 3215 @V200731 00756000 * SUPPORT 00757000 CONRET EQU * @V200731 00758000 MVC IOBUADD,IOOLD+2 GET DEVICE ADDRESS FROM PSW @V200731 00759000 B NEWADD GO AND TRY THIS ADDRESS @V200731 00760000 CMS1 ST R14,CMSSAVE SAVE RETURN ADD 00761000 BAL R5,TSTPLIST * SET UP P LIST FROM THE 00762000 MVC INFCB+8(8),0(R1) * INPUT P LIST 00763000 BAL R5,TSTPLIST * 00764000 MVC INFCB+16(8),0(R1) * 00765000 BAL R5,TSTPLIST * 00766000 MVC INFCB+24(2),0(R1) * 00767000 BAL R5,TSTPLIST * 00768000 EDITTEST CLC =C'EDIT ',0(R1) IS THIS EDIT 00769000 BE EDITON YES- BRANCH 00770000 MVC ERRORRET,=F'3' SET UP CMS RETURM CODE OF 3 00771000 OI DIRFLAG,ERROR TURN ON THE ERROR BIT 00772000 B EXIT 00773000 EDITON OI DIRFLAG,EDITMODE TURN ON THE EDIT FLAG 00774000 STATE LA R1,INFCB POINT TO THE INPUT FCB 00775000 SVC 202 STATE THE FILE 00776000 DC AL4(ERROR63) ERROR RETURN 00777000 MVC INFCB(8),=CL8'RDBUF' SET UP FOR FIRST READ 00778000 B READ GO READ THE CMS FILE 00779000 TSTPLIST LA R1,8(,R1) ADD 8 00780000 CLI 0(R1),X'FF' IS THIS THE END OF THE P LIST 00781000 BE STATE YES- GO 00782000 CLI 0(R1),C'(' IS IT ( 00783000 BCR 7,R5 NO- RETURN TO THE CALLING ROUTINE 00784000 LA R1,8(,R1) POINT TO THE NEXT PARM 00785000 B EDITTEST GO TEST FOR EDIT 00786000 EJECT 00787000 *************************************************************** 00788000 *. 00789000 * SUBROUTINE TO SCAN NAME TABLE 00790000 * 00791000 * 1. SCAN TABLE POINTED TO BY R4, IS NOT EQ GO TO ERROR51 00792000 * 00793000 * 2. IF NAME IS A CONSTANT MOVE IT INTO THE UDEVBLOK 00794000 * AND RETURN TO THE CALLER. 00795000 * 00796000 * 3. IF NAME IS AN ADDRESS GO TO THAT ADDRESS. 00797000 * 00798000 *. 00799000 * 00800000 *************************************************************** 00801000 SCANNAME STM R3,R5,SAVEREGS SAVE REG 00802000 BCTR R2,0 -1 00803000 RESCAN L R3,NAMEFLAG GET THE FLAG AND POINTER TO THE ROUTINE 00804000 EX R2,COMPNAME COMPARE THE NAME TO THE CON 00805000 BE GOODNAME GET OUT IF EQ 00806000 ADDSIZE LA R4,NAMESIZE(,R4) POINT TO NEXT NAME TABLE ENTRY 00807000 LTR R3,R3 IS THIS THE LAST NAME 00808000 BNM RESCAN LOOP 00809000 LA R2,1(,R2) +1 00810000 B ERROR51 ERROR IF NOT FOUND 00811000 GOODNAME SLL R3,4 DROP THE FLAGS 00812000 SRL R3,28 SET UP THE COUNT 00813000 CR R2,R3 COMPARE THE MIN COUNT 00814000 BL ADDSIZE IF COUNT IS LOW CONT SCAN 00815000 TM NAMEFLAG,X'40' IS THIS AN ADDRESS 00816000 BO MOVECODE NO MOVE IN DEVICE CODE 00817000 ST R14,SAVERET SAVE RETURN REGISTER 00818000 L R15,NAMEFLAG SET UP TO GO TO SUBROUTINE 00819000 LM R3,R5,SAVEREGS RETURN REG 00820000 BR R15 GO TO SUBROUTINE 00821000 MOVECODE MVC UDEVTYPC(3),NAMETYPC MOVE IN DEV TYPE CLASS AND FEAT 00822000 CLC NAME-NAMETABL(8,R4),NAM3138 IS IT A 3138 ?? @V3M4036 00823000 BE IND3158 INDICATE A 3158 @V386298 00824000 CLC NAME-NAMETABL(8,R4),NAM3148 IS IT A 3148 ?? @V3M4036 00825000 BE IND3158 INDICATE A 3158 @V386298 00826000 CLC NAME-NAMETABL(8,R4),=CL8'3158' IS THIS A 3158? @VA02100 00827000 BNE *+8 NO, SKIP IT @VA02100 00828000 IND3158 EQU * @V386298 00829000 OI UDEVSTAT,UDEV3158 FLAG AS 3158 @VA02100 00830000 TM NAMEFLAG,X'40' RESTORE COND. CODE AS ABOVE. @VA02100 00831000 LM R3,R5,SAVEREGS RETURN REG 00832000 BR R14 RETURN TO CALLER 00833000 COMPNAME CLC NAME-NAMETABL(0,R4),0(R1) COMP NAME TO INPUT 00834000 SPACE 00835000 DS 0F 00836000 SPACE 3 00837000 TABLE1 EQU * 00838000 TABLE USER,1 00839000 TABLE ACCOUNT,1 00840000 TABLE OPTION,1 00841000 TABLE MDISK,1 00842000 TABLE SPOOL,1 00843000 TABLE DEDICATE,1 00844000 TABLE LINK,1 00845000 TABLE IPL,1 00846000 TABLE SPECIAL,3 00847000 TABLE CONSOLE,1 00848000 TABLE DIRECTORY,3,LAST 00849000 DC CL4'Y ' LAST LETTER IN DIRECTORY 00850000 TABLE2 EQU * 00851000 TABLE CTCA,4 00852000 TABLE TIMER,5,CLASURI,TYPTIMER 00853000 TABLE 3270,4,CLASGRAF,TYP3277 @V200730 00854000 TABLE 3158,4,CLASGRAF,TYP3158 @VA02100 00855000 TABLE 3138,4,CLASGRAF,TYP3138 @VA06315 00856000 TABLE 3148,4,CLASGRAF,TYP3148 @VA06315 00857000 TABLE 2701,4 00858000 TABLE 2702,4 00859000 TABLE 2703,4,LAST 00860000 TABLE3 EQU * 00861000 TABLE 1052,4,CLASTERM,TYP1052 00862000 TABLE 3210,4,CLASTERM,TYP3210 00863000 TABLE 3215,4,CLASTERM,TYP3215,,LAST 00864000 TABLE4 EQU * 00865000 TABLE 2305,4,CLASDASD,TYP2305 00866000 TABLE 2311,4 00867000 TABLE 2314,4,CLASDASD,TYP2314 00868000 TABLE 2319,4,CLASDASD,TYP2314 00869000 TABLE 3340,4,CLASDASD,TYP3340 @V2A2029 00870000 TABLE 3350,4,CLASDASD,TYP3350 @V304498 00871000 TABLE 3375,4,CLASDASD,TYP3375 HRC106DK 00871100 TABLE 3380,4,CLASDASD,TYP3380 HRC011DK 00871500 TABLE 3330,4,CLASDASD,TYP3330,,LAST 00872000 TABLE5 EQU * 00873000 TABLE 2540,4 00874000 TABLE 2501,4,CLASURI,TYP2501 00875000 TABLE 1403,4,CLASURO,TYP1403 00876000 TABLE 1443,4,CLASURO,TYP1443 00877000 TABLE 3211,4,CLASURO,TYP3211 00878000 TABLE 3203,4,CLASURO,TYP3203 @V386298 00879000 TABLE 3505,4,CLASURI,TYP3505 00880000 TABLE 3525,4,CLASURO,TYP3525,,LAST 00881000 SPACE 3 00882000 ****************************************************************** 00883000 *. 00884000 * DIRECTORY CARD SCAN ROUTINE 00885000 * 00886000 * 1. IF NOT FIRST CARD GO TO ERROR52. 00887000 * 00888000 * 2. FILL IN THE IOB FROM THE INPUT CARD. 00889000 * 00890000 * 3. READ THE VOL1 AND ALLOCATION RECORD FROM THE 00891000 * DIRECTORY VOLUME. 00892000 * 00893000 * 4. GET A DASD PAGE ADDRESS FOT THE UDIR AND UMAC 00894000 * BUFFERS, SET UP POINTERS AND GOTO READ. 00895000 *. 00896000 ****************************************************************** 00897000 SCANDIRE CLI LASTCARD,X'00' IS THIS THE FIRST CARD 00898000 BNE ERROR52 NO- ERROR 00899000 BAL R14,SCANCARD GET DEVICE ADD 00900000 BC 4,ERROR53 ERROR IF NO INPUT 00901000 CL R2,=F'4' IS IT OVER 4 00902000 BH ERROR51 YES- ERROR 00903000 BAL R14,HEXCONV 00904000 STH R2,DASDADD STORE OUTPUT ADDRESS 00905000 BAL R14,SCANCARD GET DEVICE TYPE 00906000 BC 4,ERROR53 ERROR IF NO INPUT 00907000 CL R2,=F'4' IS IT UNDER 4 00908000 BL ERROR51 YES- ERROR 00909000 COMP CON2319 IS IT 2319 00910000 BE SET2314 YES- BRANCH 00911000 COMP CON2314 IS IT A 2314 00912000 BNE TEST3330 NO- BRANCH 00913000 SET2314 OI DIRFLAG,OUT2314 INDICATE THE OUTPUT IS A 2314 - 2319 00914000 LA R4,32 SET UP THE MAX RECORD COUNT 00915000 B SAVEMAX 00916000 TEST3330 COMP CON3330 IS IT A 3330 00917000 LA R4,57 SET UP THE MAX RECORD COUNT 00918000 BE FLAG GO TURN ON THE 3330 FLAG 00919000 COMP CON3350 IS IT A 3350 ? @V304498 00920000 LA R4,120 SET UP THE MAX RECORD COUNT @V304498 00921000 BE FLAG3350 YES, SET 3350 FLAG @V304498 00922000 COMP CON3375 Is it a 3375 ? HRC106DK 00922100 LA R4,96 Set up the max record count HRC106DK 00922200 BE FLAG3375 Yes, set 3375 flag HRC106DK 00922300 COMP CON3380 Is it a 3380 ? HRC106DK 00922400 LA R4,150 Set up the max record count HRC106DK 00922500 BE FLAG3380 Yes, set 3380 flag HRC106DK 00922600 COMP CON3340 IS IT A 3340 ? @V2A2029 00923000 LA R4,24 SET UP THE MAX RECORD COUNT @V2A2029 00924000 BNE TEST2305 BRANCH IF NOT 3340 @V2A2029 00925000 OI DIRFLAG1,OUT3340 INDICATE 3340 @V2A2029 00926000 B SAVEMAX .. @V2A2029 00927000 FLAG3350 OI DIRFLAG1,OUT3350 INDICATE 3350 @V304498 00928000 B SAVEMAX .. @V304498 00929000 FLAG3375 OI DIRFLAG1,OUT3375 Indicate 3375 HRC106DK 00929100 B SAVEMAX .. HRC106DK 00929200 FLAG3380 OI DIRFLAG1,OUT3380 Indicate 3380 HRC106DK 00929300 B SAVEMAX .. HRC106DK 00929400 TEST2305 COMP CON2305 IS IT A 2305 @V2A2029 00930000 LA R4,24 SET UP THE MAX RECORD COUNT 00931000 BNE ERROR51 NO- ERROR 00932000 FLAG OI DIRFLAG,OUT3330 FLAG OUTPUT AS A 3330 OR 2305 00933000 SAVEMAX STH R4,MAXREC SAVE THE MAX RECORD COUNT 00934000 GETVS BAL R14,SCANCARD GET VOL SER NO 00935000 BC 4,ERROR53 ERROR IF NO INPUT 00936000 CL R2,=F'6' IS IT EQ 6 00937000 BH ERROR51 NO- ERROR 00938000 MVC DASDVSER,0(R1) MOVE IN VOL SER NO 00939000 READDASD LA R1,DASDIOB POINT TO IOB 00940000 TM DIRFLAG,EDITMODE EDIT RUN 00942000 BO EDITON1 YES- BRANCH (DO NOT READ THE DISK) 00943000 TM DIRFLAG1,OUT3380 Is this a 3380? HRC106DK 00943010 BZ SKIP3380 Some other device HRC106DK 00943020 L R3,IOB Get device address HRC106DK 00943030 LA R2,SNSE4CCW Point to sense CCW HRC106DK 00943040 CLI CPUID,X'FF' Is this a virtual machine? HRC106DK 00943050 BNE SKIPDIAG Running standalone - use SIO HRC106DK 00943060 SSM *+1 Lock out CMS HRC106DK 00943070 DC X'83320020' Diagnose call to to VM/370 HRC106DK 00943080 BNE SKIP3380 Error - give up on sense HRC106DK 00943090 B SKIPSIO Skip over SIO/TIO HRC106DK 00943100 SKIPDIAG EQU * HRC106DK 00943110 ST R2,CAW Store in CAW HRC106DK 00943120 XC SENSE,SENSE Zero out sense HRC106DK 00943130 SIO 0(R3) Do sense HRC106DK 00943140 TIO3380 TIO 0(R3) Clear any interrupt HRC106DK 00943150 BC 2,TIO3380 Loop if channel is busy HRC106DK 00943160 SKIPSIO EQU * HRC106DK 00943170 CLC CSW+6(2),=H'0' Got all sense bytes wanted? HRC106DK 00943180 BNE SKIP3380 No, something wrong here HRC106DK 00943190 CLC SENSE+4(2),=X'3380' Is this really a 3380? HRC106DK 00943200 BNE SKIP3380 No, continue HRC106DK 00943210 TM SENSE+6,RDEVMD82 Is it a 3380E or 3380K? HRC106DK 00943220 BZ SKIP3380 No - 1024 byte allocation map HRC106DK 00943230 MVC RCCW7+6,=H'2048' 3380E - 2048 byte alloc map HRC106DK 00943240 TM SENSE+6,RDEVMD83 Is it a 3380K? HRC106DK 00943250 BNO SKIP3380 No, leave it at 2048 bytes HRC106DK 00943260 MVC RCCW7+6,=H'4096' 3380K - 4096 byte alloc map HRC106DK 00943270 SKIP3380 EQU * HRC106DK 00943280 LA R2,RCCW1 Address of CCW string HRC106DK 00943290 BAL R5,STARTIO GO READ THE RECORDS 00944000 CLC DASDVSER(6),VOLLABLE+4 IS THIS THE PROPER DISK 00945000 BNE ERROR61 NO- ERROR 00946000 EDITON1 BAL R14,GETPAGE * GET A DASD ADDRESS AND 00947000 ST R2,UDIRPAGE * SAVE POINTER TO FIRST 00948000 ST R2,VOLLABLE+52 * PAGE OF THE DIRECTORY 00949000 BAL R14,GETPAGE 00950000 ST R2,UMACPAGE POINT TO DASD ADD OF FIRST MAC PAGE 00951000 B READ 00952000 EJECT 00953000 ***************************************************************** 00954000 *. 00955000 * USER CARD SCAN ROUTINE 00956000 * 00957000 * 1. IF THE LAST CARD WAS USER, ACCO, OPT OR IPL GO 00958000 * TO ERROR52. 00959000 * 00960000 * 2. MASK OFF THE LAST UDIR AND UMAC BLOCKS. 00961000 * 00962000 * 3 IF THE UDEV BUFFER WAS USED WRITE IT OUT. 00963000 * AND ZERO THE DASD ADDRESS POINTER. 00964000 * 00965000 * 4. SET UP POINTERS TO THE NEXT UMAC UDEV AND 00966000 * UDIR BLOCKS. 00967000 * 00968000 * 5. IF THE UDIR BUFFER IS FULL WRITE IT OUT 00969000 * AND GET A NEW DASD PAGE ADDRESS FOR THE BUFFER. 00970000 * 00971000 * 6. FILL IN THE UDIRBLOK AND SET UP POINTER TO 00972000 * THE UMACBLOK. 00973000 * 00974000 * 7. IF THE UMAC BUFFER IS FULL WRITE IT OUT AND 00975000 * GET AN NEW DASD ADDRESS FOR THE BUFFER. 00976000 * 00977000 * 8. POINT TO THE UDIRBLOK IN THE UMAC BUFFER. IF 00978000 * THE UMAC BUFFER IS FULL, GET A DASD ADDRESS 00979000 * FOR THE UDEV BUFFER AND USE IT. 00980000 * 00981000 * 9. FILL IN THE UMACBLOK AND GO TO READ, TO READ THE 00982000 * NEXT CARD. 00983000 *. 00984000 ************************************************************** 00985000 SCANUSER EQU * @VM08715 00986000 TM DIRFLAG,SPECID WAS LAST USER A 'SPECIAL'? @VM08715 00987000 BZ CHKPREQ NO - CHECK NORM. PREREQS @VM08715 00988000 NI DIRFLAG,255-SPECID YES - TURN OFF FLAG @VM08715 00989000 B MSKLST AND CONTINUE @VM08715 00990000 CHKPREQ EQU * @VM08715 00991000 CLI LASTCARD,C'U' WAS LAST CARD A USER CARD? @VM08715 00992000 BE ERROR52 YES- ERROR 00993000 CLI LASTCARD,C'A' WAS THE LAST CARD AN ACCOUNT CARD 00994000 BE ERROR52 YES- ERROR 00995000 CLI LASTCARD,C'O' WAS THE LAST CARD AN OPTION CARD 00996000 BE ERROR52 YES- ERROR 00997000 CLI LASTCARD,C'I' WAS THE LAST CARD AN IPL CARD 00998000 BE ERROR52 YES- ERROR 00999000 USING UDIRBLOK,R15 SETUP ADDRESSABILITY FOR UDIRBLOK@V200731 01000000 MSKLST EQU * @VM08715 01001000 TM DIRFLAG,FLUSH SYNTAX CHECKING AFTER EOF? @VA01066 01002000 BO EXIT YES, GO FINISH UP @VA01066 01003000 L RDIR,DIRPTR GET BUFFER ADDRESS FOR UDIRBLOK @V200731 01004000 XC UDIRUSER,MASK * MASK OFF THE UDIR AND 01005000 XC UDIRPASS,MASK * UMAC BLOCK'S 01006000 XC UMACBLOK+8(8),MASK * 01007000 XC UMACBLOK+16(8),MASK * 01008000 XC UMACBLOK+24(8),MASK * 01009000 XC UMACBLOK+32(8),MASK * 01010000 XC UMACBLOK+40(8),MASK * 01011000 SR R0,R0 ZERO OUT REG 01012000 CL R0,UDEVPAGE WAS UDEV BUFFER USED 01013000 BE NOTUSED NO BRANCH OVER CODE 01014000 *** IF DEVICE BUFFER WAS USED THAN THE MACHINE BUFFER IS FULL ! 01015000 LR R1,RMACBUF SET UP POINTER TO UMAC BUFFER 01016000 L R2,UMACPAGE SET UP DASD ADD OF BUFFER PAGE 01017000 BAL R14,WRITE WRITE OUT BUFFER 01018000 MVC UMACPAGE,UDEVPAGE SET DASD ADD EQ 01019000 ST R0,UDEVPAGE ZERO OUT DASD ADD (PAGE NOT IN BUFFER) 01020000 XR RMACBUF,RDEVBUF * 01021000 XR RDEVBUF,RMACBUF * REVERSE POINTERS 01022000 XR RMACBUF,RDEVBUF * 01023000 NOTUSED LR RMAC,RDEV POINT TO NEXT MACHINE BLOCK 01024000 L RDIR,DIRPTR GET BUFFER ADDRESS FOR UDIRBLOK @V200731 01025000 LA RDEV,UMACSIZE*8(,RDEV) POINT TO NEXT UDEVBLOK 01026000 LA RDIR,UDIRSIZE*8(,RDIR) POINT TO NEXT UDEVBLOK 01027000 ST RDIR,DIRPTR SAVE THE BUFFER ADDRESS FOR @V200731 01028000 * UDIRBLOK 01029000 LA R1,4096-UDIRSIZE*8(,RDIRBUF) POINT TO END OF BUFFER 01030000 CLR RDIR,R1 IS THE BUFFER FULL 01031000 BNH BILDUDIR NO- GO TO BUILD ENTRY 01032000 USERBFUL BAL R14,GETPAGE GET NEW DASD ADD OF A PAGE 01033000 L RDIR,DIRPTR GET BUFFER ADDRESS FOR UDIRBLOK @V200731 01034000 LR R1,RDIR SAVE POINTER TO UDIRBLOK 01035000 LR RDIR,RDIRBUF POINT TO FIRST UDIRBLOK 01036000 ST RDIR,DIRPTR SAVE THE BUFFER ADDRESS FOR @V200731 01037000 * UDIRBLOK 01038000 SR R1,RDIR CONVERT TO DISPLACEMENT 01039000 SL R1,DIRSIZE AJUST TO POINT TO LAST BLOCK 01040000 STH R1,UDIRDISP POINT TO LAST DIR BLOCK IN PAGE 01041000 LR R1,RDIRBUF POINT TO BUFFER 01042000 ST R2,UDIRDASD POINT TO NEXT DIRECTORY PAGE 01043000 L R3,UDIRPAGE PICK UP OLD PAGE DASD ADD 01044000 ST R2,UDIRPAGE STORE NEW PAGE DASD ADD 01045000 LTR R2,R3 LOAD OLD ADD TO WRITE IT OUT 01046000 BZ *+8 THEN SKIP THE WRITE @VA02180 01047000 BAL R14,WRITE 01048000 L RDIR,DIRPTR GET BUFFER ADDRESS FOR UDIRBLOK @V200731 01049000 BAL R5,CLEARBUF GO CLEAR THE BUFFER TO ZEROES @VA02180 01050000 LA RDIR,UDIRSIZE*8(,RDIR) POINT TO NEXT BLOCK 01051000 ST RDIR,DIRPTR SAVE CURRENT BUFFER ADDR @VA01711 01052000 BILDUDIR MVI UDIRBLOK,X'40' CLEAR FIRST 01053000 MVC UDIRBLOK+1(UDIRSIZE*8-1),UDIRBLOK CLEAR IT OUT 01054000 BAL R14,SCANCARD GET USER ID 01055000 BC 4,ERROR53 ERROR IF NO USER ID 01056000 LA R0,8 SET UP TO TEST LENGTH 01057000 CLR R2,R0 IS IT OVER 8 01058000 BH ERROR51 YES- GET OUT 01059000 MOVE UDIRUSER 01060000 BAL R14,SCANCARD GET PASSWORD 01061000 BC 4,ERROR52 ERROR IF NO PASSWORD 01062000 L RDIR,DIRPTR GET THE BUFFER ADDRESS FOR @V200731 01063000 * UDIRBLOK 01064000 CLR R2,R0 IS LENGTH OVER 8 01065000 BH ERROR51 YES- GET OUT 01066000 CLC 0(6,R1),=C'NOLOG ' IS IT 'NOLOG'?? @VM08715 01067000 BNE *+8 NOPE @VM08715 01068000 OI DIRFLAG,SPECID YES - THIS IS A SPECIAL ID. @VM08715 01069000 MOVE UDIRPASS 01070000 MOVEDISP LR R1,RMAC * LOAD DISPLACEMENT OF UMACBLOK 01071000 L RDIR,DIRPTR GET THE BUFFER ADDRESS FOR @V200731 01072000 * UDIRBLOK 01073000 SLR R1,RMACBUF * INTO UDIRBLOK 01074000 STH R1,UDIRDISP * 01075000 L R2,UMACPAGE * MOVE IN DASD ADD ALSO 01076000 ST R2,UDIRDASD * 01077000 LA R2,4096-UMACSIZE*8 SET UP TO SEE IF MACHINE BUF FULL 01078000 CLR R1,R2 IS RMACBUF FULL 01079000 BNH TESTUDEV NO- GO AND BUILD BLOCK 01080000 LR R1,RMACBUF POINT AT PAGE BUFFER 01081000 L R2,UMACPAGE GET DASD ADD OF PAGE 01082000 BAL R14,WRITE WRITE OUT PAGE 01083000 BAL R14,GETPAGE 01084000 ST R2,UMACPAGE POINT TO NEW PAGE 01085000 LR RMAC,RMACBUF POINT TO RMACBUF 01086000 LA RDEV,UMACSIZE*8(,RMAC) POINT TO FIRST UDEVBLOK 01087000 B MOVEDISP SET UP POINTER AGAIN 01088000 TESTUDEV LR R1,RDEV SAVE POINTER TO RDEV 01089000 SR R1,RMACBUF GET DISPLACEMENT OF BLOCK 01090000 L R2,UMACPAGE GET DASD ADD 01091000 LA R3,4096-UDEVSIZE*8 POINT TO LAST BLOCK 01092000 CLR R1,R3 IS BUFFER FULL 01093000 BNH BILDUMAC NO- BRANCH 01094000 BAL R14,GETPAGE GET NEW PAGE 01095000 ST R2,UDEVPAGE SAVE DASD ADD 01096000 LR RDEV,RDEVBUF POINT TO BUFFER 01097000 SR R1,R1 SET TO PROPER DISPLACEMENT 01098000 BILDUMAC MVI UMACBLOK,X'00' SET UP TO CLEAR BLOCK 01099000 MVC UMACBLOK+1(UMACSIZE*8-1),UMACBLOK CLEAR IT @V407466 01100000 MVI UMACACCT,C' ' SET UP TO BLANK 01101000 MVC UMACACCT+1(23),UMACACCT BLANK BLOCK 01102000 MVC UMACACCT(8),UDIRUSER MOVE INTO ACCOUNT NUMDER @VA08113 01103000 MVC UMACDIST(8),UDIRUSER MOVE INTO DIST. CODE @VA08113 01104000 DROP R15 DROP BASE REGISTER FOR UDIRBLOK @VA08113 01105000 STH R1,UMACDISP SET UP DISP 01106000 ST R2,UMACDASD SET UP DASD ADD 01107000 L R3,=F'262144' SET UP DEFAULT CORE SIZE = 256K 01108000 BAL R5,GETCORE LINK TO SUBROUTINE 01109000 ST R3,UMACCORE SAVE CORE SIZE 01110000 L R3,=F'1048576' SET UP DEFAULT MAX CORE SIZE = 1M 01111000 BAL R5,GETCORE LINK TO SUBROUTINE 01112000 ST R3,UMACMCOR SAVE CORE SIZE 01113000 B SETCMLV 01114000 GETCORE BAL R14,SCANCARD GET CORE SIZE 01115000 BCR 4,R5 IS THERE ANY INPUT -NO- RETURN 01116000 CL R2,=F'2' IS IT LESS THAN 2 01117000 BL ERROR51 01118000 CL R2,=F'8' IS IT OVER 8 01119000 BH ERROR51 YES- ERROR 01120000 BCTR R2,0 -1 01121000 LA R3,0(R2,R1) POINT TO THE LAST BYTE 01122000 BAL R14,BINCONV CONVERT TO BINARY 01123000 SLL R2,10 MULTIPLY BY 1K 01124000 CLI 0(R3),C'K' IS THE LAST DIGIT 'K' 01125000 BE MOVECORE YES- GET OUT 01126000 SLL R2,10 SET UP FOR 'M' 01127000 CLI 0(R3),C'M' IS IT A 'M' 01128000 BNE ERROR51 IF NOT 'K' OR 'M' GO TO ERROR 01129000 MOVECORE LA R3,4095 * ADD 4K-1 01130000 ALR R3,R2 * 01131000 N R3,=X'FFFFF000' SET TO 4K 01132000 CL R3,=F'16777216' IS IT OVER THE MAX SIZE 01133000 BH ERROR51 YES- GO TO THE ERROR ROUTINE 01134000 CL R3,=F'8192' IS IT OVER 8K 01135000 BCR 11,R5 YES- RETURN TO CALLER 01136000 L R3,=F'8192' NO- SET TO 8K 01137000 BR R5 RETURN TO CALLER 01138000 SETCMLV BAL R14,SCANCARD GET COMMAND LEVEL 01139000 BC 4,DEFAULT2 DEFAULT IF NO INPUT 01140000 CL R2,=F'8' IS IT OVER 8 01141000 BH ERROR51 YES- ERROR 01142000 MVI UMACCLEV,X'00' CLEAR OUT COMMAND LEVEL 01143000 LOOP1 LA R3,8 SET UP TO LOOP CMD TABLE FROM A-H 01144000 LOOP2 LA R4,CMDTABLE-1(R3) POINT AT LETTER IN TABLE 01145000 LA R5,0(R2,R1) POINT AT LETTER IN INPUT + 1 01146000 BCTR R5,0 POINT TO LETTER 01147000 CLC 0(1,R4),0(R5) IS IT EQ 01148000 BE TURNON YES- TURN ON BIT 01149000 BCT R3,LOOP2 DO IT 8 TIMES 01150000 B ERROR51 LETTER IS NOT IN TABLE 01151000 TURNON OC UMACCLEV(0),8(R4) TURN ON BIT 01152000 BCT R2,LOOP1 DO IT FOR EACH INPUT LETTER 01153000 B SETPRI 01154000 DEFAULT2 MVI UMACCLEV,X'02' DEFAULT IS 'G' 01155000 SETPRI BAL R14,SCANCARD GET PRIORITY 01156000 BC 4,DEFAULT3 DEFAULT IF NO INPUT 01157000 CL R2,=F'2' IS IT OVER 2 01158000 BH ERROR51 YES GET OUT 01159000 BAL R14,BINCONV CONVERT TO BINARY 01160000 STC R2,UMACPRIR STORE PRIORITY 01161000 B SETCODES GO TO NEXT ROUTINE 01162000 DEFAULT3 MVI UMACPRIR,X'32' SET UP DEFAULT 01163000 SETCODES LA R3,UMACLEND POINT TO LINE END BYTE 01164000 BAL R4,LOOP3 SET UP LINE END 01165000 LA R3,UMACLDEL POINT TO LINE DELETE BYTE 01166000 BAL R4,LOOP3 SET UP LINE DELETE 01167000 LA R3,UMACCDEL POINT TO CHARACTER DELETE BYTE 01168000 BAL R4,LOOP3 SET UP CHARACTER DELETE 01169000 LA R3,UMACES POINT TO THE EDIT SYMBOL 01170000 BAL R4,LOOP3 SET UP EDIT SYMBOL 01171000 BAL R14,READ GET THE NEXT CARD 01172000 LOOP3 BAL R14,SCANCARD GET THE CODE 01173000 BC 4,DEFAULT4 DEFAULT IF NO INPUT 01174000 CL R2,=F'2' IS IT 2 01175000 BH TESTOFF NO- GO TO TEST FOR OFF 01176000 BE TESTON YES- GO TO ON 01177000 MVC 0(1,R3),0(R1) IT IS ONLY 1 BYTE SO MOVE IT IN 01178000 BR R4 GO BACK TO CALLER 01179000 TESTON CLC 0(3,R1),=C'ON ' IS IT ON 01180000 BNE HEX NO- IT MUST BE HEX INPUT 01181000 DEFAULT4 MVI 0(R3),X'FF' YES- INDICATE THAT THE DEF IS TO BE USED 01182000 BR R4 RETURN TO CALLER 01183000 TESTOFF CLC 0(4,R1),=C'OFF ' IS IT OFF 01184000 BNE ERROR51 NO- ERROR GET OUT 01185000 MVI 0(R3),X'00' YES- INDICATE THAT THE FEATURE IS OFF 01186000 BR R4 RETURN TO CALLER 01187000 HEX BAL R14,HEXCONV CONVERT FROM HEX 01188000 STC R2,0(R3) MOVE IN BYTE 01189000 BR R4 RETURN TO CALLER 01190000 CLEARBUF EQU * @VA02180 01191000 STM R2,R5,REGSAVE SAVE THE REGS @VA02180 01192000 LR R2,R15 PUT BUFF. START ADDRESS IN R2 @VA02180 01193000 L R3,F4096 LOAD LENGTH OF BUFFER @VA02180 01194000 SLR R4,R4 DUMMY ADDRESS FOR MVCL @VA02180 01195000 SLR R5,R5 LENGTH AND PADDING @VA02180 01196000 MVCL R2,R4 CLEAR THE BUFFER @VA02180 01197000 LM R2,R5,REGSAVE RESTORE THE REGS @VA02180 01198000 BR R5 RETURN @VA02180 01199000 EJECT 01200000 ****************************************************************** 01201000 *. 01202000 * ACCOUNT CARD SCAN ROUTINE 01203000 * 01204000 * 1. IF THE LAST CARD WAS NOT A USER, OPTION OR 01205000 * IPL CARD GO TO ERROR52. 01206000 * 01207000 * 2. FILL IN THE ACCOUNT NUMBER AND DISTRIBUTION CODE. 01208000 * 01209000 * 3. GO TO READ AND GET THE NEXT CARD. 01210000 *. 01211000 ****************************************************************** 01212000 SCANACCO CLI LASTCARD,C'U' WAS THE LAST CARD A USER CARD 01213000 BE GETACCO 01214000 CLI LASTCARD,C'O' WAS THE LAST CARD AN OPTION CARD 01215000 BE GETACCO 01216000 CLI LASTCARD,C'I' WAS IT AN IPL CARD 01217000 BNE ERROR52 NO- ERROR 01218000 GETACCO BAL R14,SCANCARD GET ACCOUNT NUMBER 01219000 BC 4,READ ERROR IF NO INPUT 01220000 CL R2,=F'8' IS IT OVER 8 01221000 BH ERROR51 YES- ERROR 01222000 MVI UMACACCT,C' ' BLANK OUT FIELD BEFORE @VA08113 01223000 MVC UMACACCT+1(7),UMACACCT MOVE @VA08113 01224000 MOVE UMACACCT 01225000 BAL R14,SCANCARD GET DISTRIBUTION CODE 01226000 BC 4,READ NO INPUT GET OUT 01227000 CL R2,=F'8' IS IT OVER 8 01228000 BH ERROR51 YES- ERROR 01229000 MVI UMACDIST,C' ' BLANK OUT FIELD BEFORE @VA08113 01230000 MVC UMACDIST+1(7),UMACDIST MOVE @VA08113 01231000 MOVE UMACDIST 01232000 B READ GO GET THE NEXT CARD 01233000 EJECT 01234000 ****************************************************************** 01235000 *. 01236000 * OPTION CARD SCAN ROUTINE 01237000 * 01238000 * 1. IF THE LAST CARD WAS NOT A USER, ACCOUNT OR 01239000 * IPL CARD GO TO ERROR52. 01240000 * 01241000 * 2. FILL IN THE OPTIONS IN THE UMACBLOK. 01242000 * 01243000 * 3. GO TO READ TO READ IN THE NEXT CARD. 01244000 *. 01245000 ****************************************************************** 01246000 SCANOPTI CLI LASTCARD,C'U' WAS THE LAST CARD A USER CARD 01247000 BE OPT1 YES- GO 01248000 CLI LASTCARD,C'A' WAS THE LAST CARD AN ACCOUNT CARD 01249000 BE OPT1 01250000 CLI LASTCARD,C'I' WAS THE LAST CARD A IPL CARD 01251000 BE OPT1 YES, KEEP GOING @V407466 01252000 CLI LASTCARD,C'O' ANOTHER 'OPTION' CARD @V407466 01253000 BNE ERROR52 NO, ERROR @V407466 01254000 OPT1 BAL R14,SCANCARD GET OPTION 01255000 BC 4,READ NO INPUT GO TO READ NEXT CARD 01256000 COMP =C'REALTIMER ' * SET ON OPTION BIT 01257000 BNE OPT2 * SET OPTION BIT IF INPUT 01258000 OI UMACOPT,UMACRT * IS EQ TO KEYWORD. 01259000 B OPT1 * ERROR IF NOT EQ. 01260000 OPT2 COMP =C'ECMODE ' * 01261000 BNE OPT3 * 01262000 OI UMACOPT,UMACECOP * 01263000 B OPT1 * 01264000 OPT3 COMP =C'ISAM ' * 01265000 BNE OPT4 * 01266000 OI UMACOPT,UMACISAM * 01267000 B OPT1 * 01268000 OPT4 COMP =C'VIRT=REAL ' * 01269000 BNE OPT5 01270000 OI UMACOPT,UMACVROP * 01271000 B OPT1 * 01272000 OPT5 COMP =C'ACCT ' 01273000 BNE OPT6 @V201537 01274000 OI UMACOPT,UMACACC SET THE ACCOUNTING OPTION 01275000 B OPT1 01276000 OPT6 COMP =C'SVCOFF ' * @V407466 01277000 BNE OPT7 @VA01771 01278000 OI UMACOPT,UMACNSVC SET THE SVCOFF BIT @V201537 01279000 B OPT1 @V201537 01280000 OPT7 COMP =C'BMX ' BMX OPTION ? @V407466 01281000 BNE OPT8 NO BRANCH @V407466 01282000 OI UMACOPT,UMACBMX SET BLOCK MULTIPLEXER OPTION @VA01771 01283000 B OPT1 @VA01771 01284000 OPT8 COMP =C'CPUID' CPUID OPTION? @V407466 01285000 BNE OPT9 @V407546 01286000 BAL R14,SCANCARD GET CPUID SERIAL @V407466 01287000 BC 4,ERROR53 MISSING 'BBBBBB' FIELD @V407466 01288000 CL R2,=F'6' GREATER THAN 6 - ERROR @V407466 01289000 BH ERROR51 ERROR @V407466 01290000 BAL R14,HEXCONV CVT 'BBBBBB' FROM HEX TO BIN @V407466 01291000 STCM R2,B'0111',UMACPUID STORE CONVERTED CPUID @V407466 01292000 OI UMACOPT2,UMACCPU TURN BIT ON IN UMACBLOK @V407466 01293000 B OPT1 GET NEXT INPUT CARD @V407466 01294000 OPT9 COMP =C'AFFINITY' @V407546 01295000 BNE OPT10 NO HRC011DK 01296490 BAL R14,SCANCARD GET AFFINITY CPU ADDRESS @V407546 01297000 BC 4,ERROR53 MISSING AFFINITY 'AA' @V407546 01298000 CL R2,=F'2' GREATER THAN 2 --ERROR @V407546 01299000 BH ERROR51 @V407546 01300000 BAL R14,BINCONV CVT 'AA' TO BINARY @V407546 01301000 CL R2,=F'63' GREATER THAN 63 --ERROR @V407546 01302000 BNH OPT9OK @V407546 01303000 LM R1,R2,SAVEREGS RESTORE POINTER AND LENGTH @V407546 01304000 B ERROR51 HANDLE ERROR @V407546 01305000 OPT9OK STC R2,UMACAFF STORE CPU ADDR IN UMACBLOK @V407546 01306000 OI UMACAFF,UMACFFON SET AFFINITY FLAG @V407546 01307000 B OPT1 GET NEXT OPTION @V407546 01308000 OPT10 COMP =C'LNKNOPAS ' HRC011DK 01308200 BNE OPT11 NO HRC068DK 01308410 OI UMACOPT2,UMADLNKN TURN BIT ON IN UMACBLOK HRC011DK 01308600 B OPT1 GET NEXT INPUT CARD HRC011DK 01308800 OPT11 COMP =C'STFIRST ' HRC068DK 01308900 BNE ERROR51 NO,INVALID KEYWORD HRC068DK 01308910 OI UMACOPT2,UMAST1ST TURN BIT ON IN UMACBLOK HRC068DK 01308920 B OPT1 GET NEXT INPUT CARD HRC068DK 01308930 EJECT 01309000 ****************************************************************** 01310000 *. 01311000 * IPL CARD SCAN ROUTINE 01312000 * 01313000 * 1. IF THE LAST WAS NOT A USER, ACCOUNT OR 01314000 * OPTION CARD GO TO ERROR52. 01315000 * 01316000 * 2. FILL IN THE UMACIPL FIELD IN THE UMACBLOK. 01317000 * 01318000 * 3. GO TO READ TO READ IN THE NEXT CARD. 01319000 *. 01320000 ****************************************************************** 01321000 SCANIPL CLI LASTCARD,C'U' WAS THE LAST CARD A USER CARD 01322000 BE GETNAME YES- BRANCH 01323000 CLI LASTCARD,C'A' WAS IT AN ACCO CARD 01324000 BE GETNAME YES- BRANCH 01325000 CLI LASTCARD,C'O' WAS IT AN OPTI CARD 01326000 BNE ERROR52 NO- ERROR 01327000 GETNAME BAL R14,SCANCARD GET IPL SYSTEM 01328000 BC 4,READ GET OUT IF NO INPUT 01329000 CL R2,=F'8' IS IT OVER 8 01330000 BH ERROR51 YES- ERROR 01331000 MOVE UMACIPL 01332000 B READ 01333000 SPACE 3 01334000 ****************************************************************** 01335000 *. 01336000 * CONSOLE CARD SCAN ROUTINE 01337000 * 01338000 * 1. SET UP VIRTUAL DEVICE ADDRESS. 01339000 * 01340000 * 2. FILL IN THE DEVICE CLASS FROM TABLE3. 01341000 * 01342000 * 3. SET UP THE SPOOL CLASS. 01343000 * 01344000 * 4. GO TO CHAINDEV IN SCANMDIS TO CHAIN IN THE UDEVBLOK. 01345000 *. 01346000 ****************************************************************** 01347000 SCANCONS MVI UDEVBLOK,X'0' * ZERO OUT BLOCK 01348000 MVC UDEVBLOK+1(UDEVSIZE*8-25),UDEVBLOK * 01349000 BAL R14,SCANCARD GET DEVICE ADD 01350000 BC 4,ERROR53 ERROR IF NO INPUT 01351000 CL R2,=F'4' IS SIZE OVER 4 01352000 BH ERROR51 YES- ERROR 01353000 BAL R14,HEXCONV GET DEVICE ADD AND CONVERT IT TO DEC 01354000 STH R2,UDEVADD STORE DEVICE ADD 01355000 BAL R14,SCANCARD GET DEVICE TYPE 01356000 BC 4,ERROR53 ERROR IF NO INPUT 01357000 LA R4,TABLE3 POINT TO THE TABLE 01358000 BAL R14,SCANNAME SUBROUTINE WILL MOVE DEVICE TYPE X01359000 AND CLASS INTO UDEVTYPE AND UDEVTYPC 01360000 BC 4,CONCLASS BRANCH IF INPUT WAS PRESCANED @V200930 01361000 BAL R14,SCANCARD GET OUTPUT CLASS @V200930 01362000 BC 4,DEFAULT9 DEFAULT TO T IF NO INPUT @V200930 01363000 CONCLASS CL R2,=F'1' IS COUNT EQ 1 @V200930 01364000 BNE ERROR51 NO - ERROR @V200930 01365000 MVC UDEVCLAS(1),0(R1) MOVE IN SPOOL CLASS @V200930 01366000 B CHAINDEV @V200930 01367000 DEFAULT9 MVI UDEVCLAS,C'T' DEFAULT TO CLASS T @V200930 01368000 B CHAINDEV 01369000 SPACE 3 01370000 ****************************************************************** 01371000 *. 01372000 * MDISK CARD SCAN ROUTINE 01373000 * 01374000 * 1. SET UP THE VIRTUAL DEVICE ADDRESS. 01375000 * 01376000 * 2. FILL IN THE DEVICE CLASS FROM TABLE4. 01377000 * 01378000 * 3. IF THIS IS A T-DISK TURN ON THE T-DISK FLAG, 01379000 * ELSE TURN ON THE LONG BLOCK FLAG AND FILL IN THE 01380000 * CYLINDER RELOCATION. 01381000 * 01382000 * 5. FILL IN THE CYLINDER SIZE, IF T-DISK GO TO 01383000 * CHAINDEV IN STEP 7. 01384000 * 01385000 * 6. FILL IN VOL SER NO, MODE AND PASSWORDS. 01386000 * 01387000 * CHAINDEV & CHAINCU - COMMON SUBROUTINE 01388000 * 01389000 * 7. IF DEVICE(S) IS(ARE) DEFINED TWICE GO TO ERROR58. 01390000 * 01391000 * 8. MASK OFF THE UDEVBLOK. 01392000 * 01393000 * 9. IF THE BUFFER IS FULL AND THE UDEV BUFFER IS NOT 01394000 * USED, GO TO STEP 10. ELSE WRITE OUT THE UDEV BUFFER. 01395000 * 01396000 * 10. GET A DASD ADDRESS FOR THE UDEV BUFFER. 01397000 * 01398000 * 11. UPDATE POINTERS TO THE NEXT UDEVBLOK AND GOTO READ. 01399000 *. 01400000 ***************************************************************** 01401000 SCANMDIS MVI UDEVBLOK,X'0' * ZERO OUT BLOCK 01402000 MVC UDEVBLOK+1(UDEVSIZE*8-1),UDEVBLOK * 01403000 MVI UDEVVSER,C' ' * BLANK IT 01404000 MVC UDEVVSER+1(29),UDEVVSER * 01405000 SR R0,R0 01406000 BAL R14,SCANCARD GET DEVICE ADD 01407000 BC 4,ERROR53 ERROR IF NO INPUT 01408000 CL R2,=F'4' IS SIZE OVER 4 01409000 BH ERROR51 YES- ERROR 01410000 BAL R14,HEXCONV GET DEVICE ADD AND CONVERT IT TO DEC 01411000 STH R2,UDEVADD STORE DEVICE ADD 01412000 BAL R14,SCANCARD GET DEVICE TYPE 01413000 BC 4,ERROR53 ERROR IF NO INPUT 01414000 LA R4,TABLE4 POINT TO THE TABLE 01415000 BAL R14,SCANNAME SUBROUTINE WILL MOVE DEVICE TYPE X01416000 AND CLASS INTO UDEVTYPE AND UDEVTYPC 01417000 BC 4,TESTCYLR BRANCH IF INPUT CARD WAS PRESCANED 01418000 BAL R14,SCANCARD 01419000 BC 4,ERROR53 BUILD SHORT UDIRBLOK IF LAST INPUT LINE 01420000 TESTCYLR COMP =C'T-DISK' IS IT THE KEYWORD T-DISK 01421000 BNE LONG NO- BRANCH 01422000 MVI UDEVSTAT,UDEVTDSK INDICATE THIS IS A T-DISK 01423000 B GETCYLNO 01424000 LONG MVI UDEVSTAT,UDEVLONG INDICATE THIS IS A LONG BLOCK 01425000 CL R2,=F'4' IS IT OVER 4 DIGITS? HRC011DK 01426270 BH ERROR51 YES- ERROR 01427000 SAVESTRT DS 0H HRC011DK 01427500 BAL R14,BINCONV CONVERT TO BINARY 01428000 STH R2,UDEVRELN SET IN CYL RELOCATION 01429000 GETCYLNO BAL R14,SCANCARD GET SIZE OF DISK 01430000 BC 4,ERROR53 ERROR IF NO INPUT 01431000 CL R2,=F'4' IS IT OVER 4 DIGITS? HRC011DK 01432270 BH ERROR51 YES- ERROR 01433000 SAVESIZE DS 0H HRC011DK 01433500 BAL R14,BINCONV * CONVERT TO BINARY 01434000 STH R2,UDEVNCYL * 01435000 LTR R2,R2 IS IT 0 CYLINDERS? @VA12689 01435030 BNZ NOTZERO NO-CONTINUE @VA12689 01435060 L R2,SAVEREGS+4 RESTORE LENGTH @VA12689 01435090 B ERROR51 AND PRINT ERROR MESSAGE @VA12689 01435120 NOTZERO EQU * @VA12689 01435150 TM UDEVSTAT,UDEVTDSK IS THIS A T-DISK 01436000 BO CHAINDEV YES- EXIT 01437000 BAL R14,SCANCARD 01438000 BC 4,ERROR53 ERROR IF NO INPUT 01439000 CL R2,=F'6' 01440000 BH ERROR51 NO- ERROR 01441000 MOVE UDEVVSER SET UP VOL SER NO 01442000 BAL R14,SCANCARD GET FILE MODE 01443000 BC 4,DEFAULT5 DEFAULT IF NO MODE 01444000 BAL R5,MODESCAN GO FILL IN THE MODE 01445000 B GETPASS 01446000 DEFAULT5 OI UDEVMODE,UDEVW INDICATE DISK IS TO BE IN WRITE MODE 01447000 GETPASS LA R4,SCANPASS * LINK TO PASSWORD SUBROUTINE 01448000 BALR R3,R4 * AND MOVE IT TO THE UDEVBLOK 01449000 MOVE UDEVPASR * 01450000 OI UDEVMODE,UDEVLR * 01451000 BALR R3,R4 * 01452000 MOVE UDEVPASW * 01453000 OI UDEVMODE,UDEVLW * 01454000 BALR R3,R4 * 01455000 MOVE UDEVPASM * 01456000 OI UDEVMODE,UDEVLM * 01457000 B BLANKALL GO MASK THE PASSWORDS 01458000 SCANPASS BAL R14,SCANCARD 01459000 BC 4,BLANKALL EXIT IF NO INPUT 01460000 CL R2,=F'8' IS IT OVER 8 01461000 BH ERROR51 YES- ERROR 01462000 BR R3 RETURN TO CALLER 01463000 BLANKALL XC UDEVPASR,MASK * MASK THE PASSWORD 01464000 XC UDEVPASW,MASK * 01465000 XC UDEVPASM,MASK * 01466000 CHAINDEV SR R0,R0 * SET UP THE DEVICE 01467000 BCTR R0,0 * COMPARE MASK. 01468000 CHAINCU DS 0H THE CONTROL UNIT MASK WILL BE SET UP BY *01469000 THE CALLING ROUTINE. 01470000 LH R1,UDEVADD * CHECK TO SEE IF THIS 01471000 LH R2,UMACDISP * UNIT WAS DEFINED. IF 01472000 LR R3,RMACBUF * DEFINED THEN GO TO 01473000 SCAN LTR R2,R2 * THE ERROR ROUTINE. 01474000 BNZ COMPUADD * 01475000 CR R3,RDEVBUF * 01476000 BE SKIPLOOP * 01477000 LR R3,RDEVBUF * NOTE: IF THE NUMBER 01478000 COMPUADD AR R2,R3 * OF UDEVBLOK'S EXCEEDS 01479000 LH R4,UDEVADD-UDEVBLOK(R2) * THE CAPACITY OF THE 01480000 NR R4,R0 * RDEVBUF, CHECKING 01481000 CLR R1,R4 * WILL BE TERMINATED. 01482000 BE TESTSAME * BUFFERS WRITTEN OUT 01483000 LH R2,UDEVDISP-UDEVBLOK(R2) * ONTO THE DISK WILL 01484000 B SCAN * NOT BE CHECKED. 01485000 TESTSAME CLR R2,RDEV * (OVER 90 UDEVBLOK'S) 01486000 BNE ERROR58 * 01487000 SKIPLOOP SR R0,R0 ZERO REG 0 TO USE LATER 01488000 LA R5,UDEVSIZE*8-24(,RDEV) * POINT TO NEXT UDEVBLOK 01489000 TM UDEVSTAT,UDEVLONG * 01490000 BZ SETPOINT 01491000 LA R5,UDEVSIZE*8(,RDEV) * 01492000 SETPOINT XC UDEVBLOK+8(8),MASK * MASK THE BLOCK 01493000 XC UDEVBLOK+16(8),MASK * 01494000 LR R4,RDEVBUF * SET POINTERS TO THE BUFFER THE 01495000 L R2,UDEVPAGE * UDEVBLOK IS IN. POINT TO RDEVBUF 01496000 LTR R2,R2 * IF THE BUFFER WAS USED OR RMACBUF 01497000 BNZ SETDISP * IF RDEVBUF WAS NOT USED. 01498000 LR R4,RMACBUF * 01499000 L R2,UMACPAGE *** 01500000 SETDISP LR R3,R5 * GET DISPLACEMANT OF NEXT UDEVBLOK 01501000 SR R3,R4 * 01502000 CLI NEXTCARD,C'U' IS THE NEXT CARD A USER CARD 01503000 BE LASTDEV YES- BRANCH 01504000 STH R3,UDEVDISP SET UP DASP OF NEXT BLOCK 01505000 ST R2,UDEVDASD SET UP DASD ADD OF PAGE 01506000 B UPDATECT 01507000 LASTDEV STH R0,UDEVDISP ZERO OUT DISP 01508000 ST R0,UDEVDASD ZERO OUT DASD ADD 01509000 UPDATECT LH R1,UMACDVCT * UPDATE DEVICE COUNT IN UMACBLOK 01510000 LA R1,1(,R1) * 01511000 STH R1,UMACDVCT * 01512000 LA R1,4096-(UDEVSIZE*8)+24 * POINT TO END OF BUFFER 01513000 CLI NEXTCARD,C'M' * 01514000 BNE TESTBUF * 01515000 LA R1,4096-UDEVSIZE*8 * 01516000 TESTBUF CLR R3,R1 IS THE BUFFER FULL 01517000 BNH UPDATE NO- BRANCH 01518000 BAL R14,GETPAGE 01519000 CLI NEXTCARD,C'U' IS THE NEXT CARD A USER CARD 01520000 BE TESTBUFF YES- BRANCH 01521000 STH R0,UDEVDISP SET UP NEW DISP 01522000 ST R2,UDEVDASD SET UP NEW DASD ADD OF BUFFER 01523000 TESTBUFF L R1,UDEVPAGE * REVERSE POINTERS AND TEST TO SEE 01524000 ST R2,UDEVPAGE * IF UDEVBUF WAS USED. IF NOT USED 01525000 LTR R2,R1 * DO NOT WRITE BUFFER OUT. 01526000 BZ POINTDEV * 01527000 LR R1,RDEVBUF POINT AT BUFFER TO WRITE OUT 01528000 BAL R14,WRITE WRITE OUT FULL RDEVBUF 01529000 POINTDEV LR R5,RDEVBUF UPDATE POINTER TO NEXT UDEVBLOK 01530000 UPDATE LR RDEV,R5 POINT TO NEXT UDEVBLOK 01531000 B READ 01532000 SPACE 3 01533000 ******************************************************************* 01534000 *. 01535000 * SPOOL CARD SCAN ROUTINE 01536000 * 01537000 * 1. SET UP THE VIRTUAL DEVICE ADDRESS. 01538000 * 01539000 * 2. SCAN TABLE5 TO FILL IN THE DEVICE CLASS. 01540000 * 01541000 * 3. SET UP THE SPOOL CLASS. 01542000 * 01543000 * 4. GO TO CHAINDEV IN SCANMDIS TO CHAIN IN THE UDEVBLOK. 01544000 *. 01545000 ****************************************************************** 01546000 SCANSPOO MVI UDEVBLOK,X'00' SET UP TO ZERO BLOCK 01547000 MVC UDEVBLOK+1(UDEVSIZE*8-25),UDEVBLOK ZERO IT 01548000 MVI UDEVSTAT,UDEVSPOO TURN ON SPOOL BIT 01549000 BAL R14,SCANCARD GET DEVICE ADDRESS 01550000 BC 4,ERROR53 ERROR IF NO INPUT 01551000 CL R2,=F'3' IS SIZE OVER 3 01552000 BH ERROR51 YES- ERROR 01553000 BAL R14,HEXCONV 01554000 STH R2,UDEVADD STORE DEVICE ADD 01555000 BAL R14,SCANCARD GET DEVICE TYPE 01556000 BC 4,ERROR53 ERROR IF NO INPUT 01557000 LA R4,TABLE5 POINT TO THE TABLE 01558000 BAL R14,SCANNAME GET OUTPUT CLASS AND TYPE 01559000 BC 4,TESTCLAS BRANCH IF INPUT WAS PRESCANED 01560000 BAL R14,SCANCARD GET OUTPUT CLASS 01561000 BC 4,DEFAULT8 DEFAULT TO A IF NO INPUT 01562000 TESTCLAS CL R2,=F'1' IS COUNT EQ 1 01563000 BNE ERROR51 NO- ERROR 01564000 MVC UDEVCLAS(1),0(R1) MOVE IN SPOOL CLASS 01565000 B CHAINDEV 01566000 DEFAULT8 DS 0H @VA09980 01567000 CLI UDEVTYPC,CLASURI TEST FOR INPUT @VA09980 01567100 BE DEFAUL14 GO TO INPUT DEFAULT @VA09980 01567200 MVI UDEVCLAS,C'A' DEFAULT TO CLASS A @VA09980 01567300 B CHAINDEV @VA09980 01567400 DEFAUL14 DS 0H @VA09980 01567500 MVI UDEVCLAS,C'*' DEFAULT TO CLASS * @VA09980 01567600 B CHAINDEV 01568000 EJECT 01569000 ****************************************************************** 01570000 *. 01571000 * DEDICATE CARD SCAN ROUTINE 01572000 * 01573000 * 1. TURN ON THE DEDICATE BIT AND SET UP THE VIRTUAL 01574000 * DEVICE ADDRESS. 01575000 * 01576000 * 2. SET UP THE VIRTUAL DEVICE ADDRESS OR MOVE IN THE 01577000 * DASD VOL SER NO. 01578000 * 01579000 * 3. GO TO CHAINDEV IN SCANMDIS TO CHAIN IN THE UDEVBLOK. 01580000 *. 01581000 ******************************************************************* 01582000 SCANDEDI MVI UDEVBLOK,X'00' SET UP TO ZERO UDEVBLOK 01583000 MVC UDEVBLOK+1(UDEVSIZE*8-25),UDEVBLOK DO IT 01584000 MVI UDEVVSER,C' ' * BLANK OUT BLOCK 01585000 MVC UDEVVSER+1(5),UDEVVSER * 01586000 MVI UDEVSTAT,UDEVDED TURN ON DEDICATE BIT 01587000 MVI UDEVLINK,UDEVNORA INITIALIZE TO 8000 @VA11411 01587010 BAL R14,SCANCARD GET DEVICE ADD 01588000 BC 4,ERROR53 ERROR IF NO INPUT 01589000 CL R2,=F'3' IS SIZE OVER 3 01590000 BH ERROR51 YES- ERROR 01591000 BAL R14,HEXCONV CONVERT FROM HEX 01592000 STH R2,UDEVADD STORE DEVICE ADD 01593000 BAL R14,SCANCARD GET REAL DEVICE ADD OR VOL SER NO 01594000 BC 4,ERROR53 ERROR IF NO INPUT 01595000 CL R2,=F'3' IS IT A VOLUME SERIAL NUMBER 01596000 BNH TESTRDEV NO- BRANCH 01597000 CLC VOLID,0(R1) 'VOLID' SPECIFIED @VA11371 01598010 BNE SKIPVS1 NO SKIP GOING TO NEXT PARM @VA11371 01598020 BAL R14,SCANCARD YES- GO GET THE VOLID 01600000 SKIPVS1 DS 0H @VA11371 01600010 CL R2,=F'6' TOO BIG 01601000 BH ERROR51 YES- ERROR 01602000 MOVE UDEVVSER 01603000 B TEST333V CHECK FOR STATUS DESIRED @V60B6B8 01604000 TESTRDEV BAL R14,HEXCONV GET DEVICE ADD AND ALINE IT IN R2 01605000 STH R2,UDEVLINK STORE LINK DEVICE ADDRESS 01606000 B TESTVOL1 GO TEST FOR VOLSER @V60B6B8 01607000 TESTREAD BAL R14,SCANCARD LOOK FOR ANOTHER PARM @VA02483 01608000 CL R2,=F'1' IS THERE ONE? @VA02483 01609000 BL WRTSTAT NO, DEFAULT IS WRITE STATUS @VA02483 01610000 TESTRO EQU * TEST FOR 'R/O' PARAMETER @V60B6B8 01611000 CLC RONLY,0(R1) WAS 'R/O' SPECIFIED @VA11371 01612010 BE CHAINDEV YES, DON'T SET WRITE STATUS @VA02483 01613000 B ERROR51 ALL OTHERS ARE INVALID @VA02483 01614000 TESTVOL1 EQU * TEST FOR THE VOLSER PARAMETER @V60B6B8 01615000 * 01616000 * HAVE FOUND 'VADDR' AND 'RADDR' SO FAR. TEST 01617000 * TO SEE IF THERE IS ALSO A 'VOLSER'. 01618000 * 01619000 BAL R14,SCANCARD SCAN FOR THE NEXT PARAMETER @V60B6B8 01620000 CL R2,FONE IS THERE ANOTHER? @V60B6B8 01621000 BL WRTSTAT NO, SET DEFAULT ACCESS TYPE @V60B6B8 01622000 CLC VIRTC,0(R1) WAS '3330V' SPECIFIED @VA11371 01623010 BE SETFTR YES, SET FEATURE=VIRTUAL @V60B6B8 01624000 CLC RONLY,0(R1) WAS R/O SPECIFIED @VA11371 01625010 BE CHAINDEV YES, DO NOT SET WRITE STATUS @V60B6B8 01626000 * 01627000 * THIS PARAMETER MUST BE A VOLUME SERIAL 01628000 * 01629000 CLC VOLID,0(R1) WAS 'VOLID' SPECIFIED @VA11371 01630010 BNE SKIPVS2 NO SKIP SKIPPING TO NEXT PARM @VA11371 01630020 BAL R14,SCANCARD YES,GO GET THE VOLID @V60B6B8 01632000 SKIPVS2 DS 0H @VA11371 01632010 CL R2,FONE WAS THERE A PARAMETER? @V60B6B8 01633000 BL ERROR51 NO, ERROR @V60B6B8 01634000 CL R2,=F'6' TOO BIG? @V60B6B8 01635000 BH ERROR51 YES,ERROR @V60B6B8 01636000 MOVE UDEVVSER MOVE IN VOLID @V60B6B8 01637000 TEST333V EQU * SEE IF THE NEXT PARAMETER IS @V60B6B8 01638000 * '3330V' 01639000 BAL R14,SCANCARD GET NEXT PARAMETER @V60B6B8 01640000 CL R2,FONE WAS THERE ONE @V60B6B8 01641000 BL WRTSTAT NO, SET DEFAULT ACCESS TYPE @V60B6B8 01642000 CLC VIRTC,0(R1) WAS 3330V SPECIFIED @VA11371 01643010 BNE TESTRO NO, TEST FOR 'R/O' @V60B6B8 01644000 SETFTR EQU * SET FEATURE = FTRVIRT @V60B6B8 01645000 MVI UDEVFTR,VIRTUAL SET FEATURE CODE IN UDEVBLOK @V60B6B8 01646000 BAL R14,SCANCARD GET NEXT PARAMETER @V60B6B8 01647000 CL R2,FONE WAS THERE ONE? @V60B6B8 01648000 BL WRTSTAT NO, SET DEFAULT ACCESS TYPE @V60B6B8 01649000 B TESTRO NOW TEST FOR 'R/O' @V60B6B8 01650000 WRTSTAT OI UDEVMODE,UDEVW SET WRITE STATUS @VA02483 01651000 B CHAINDEV 01652000 EJECT 01653000 ****************************************************************** 01654000 *. 01655000 * LINK CARD SCAN ROUTINE 01656000 * 01657000 * 1. SET UP THE USERID, LINK DEVICE ADDRESS AND 01658000 * TURN ON THE LINK BIT. 01659000 * 01660000 * 2. SET UP THE VIRTUAL DEVICE ADDERSS AND MODE. 01661000 * 01662000 * 3. GO TO CHAINDEV IN SCANMDIS TO CHAIN IN THE UDEVBLOK. 01663000 *. 01664000 ****************************************************************** 01665000 SCANLINK MVI UDEVBLOK,X'00' SET UP TO ZERO BLOCK 01666000 MVC UDEVBLOK+1(UDEVSIZE*8-25),UDEVBLOK DO IT 01667000 MVI UDEVLKID,C' ' * BLANK BLOCK 01668000 MVC UDEVLKID+1(7),UDEVLKID * 01669000 MVI UDEVSTAT,UDEVLKDV TURN ON LINK DEVICE BIT 01670000 BAL R14,SCANCARD GET USER ID 01671000 BC 4,ERROR53 ERROR IF NO INPUT 01672000 CL R2,=F'8' IS IT OVER 8 01673000 BH ERROR51 YES- ERROR 01674000 MVI UDEVLKID,X'40' SET UP TO BLANK USER ID 01675000 MVC UDEVLKID+1(7),UDEVLKID BLANK OUT BLOCK 01676000 MOVE UDEVLKID 01677000 BAL R14,SCANCARD GET LINK DEVICE ADD 01678000 BC 4,ERROR53 ERROR IF NO INPUT 01679000 CL R2,=F'3' IS IT OVER 3 01680000 BH ERROR51 YES- ERROR 01681000 BAL R14,HEXCONV GET DEVICE ADD AND ALINE IT IN R2 01682000 STH R2,UDEVLINK STORE LINK DEVICE ADDRESS 01683000 BAL R14,SCANCARD GET DEVICE ADDRESS 01684000 BC 4,DEFAULT6 DEFAULT TO LINK DEVICE IF NO INPUT 01685000 CL R2,=F'3' IS IT OVER 3 01686000 BH ERROR51 YES- ERROR 01687000 BAL R14,HEXCONV CONVERT FROM HEX 01688000 STH R2,UDEVADD STORE DEVICE ADDRESS 01689000 BAL R14,SCANCARD GET FILE MODE 01690000 BC 4,DEFAULT7 DEFAVLT TO R IF NO INPUT 01691000 LA R5,CHAINDEV SET RETURN ADDRESS FOR MODESCAN 01692000 SPACE 2 01693000 MODESCAN BCTR R2,0 -1 01694000 LA R3,MODETABL POINT TO THE TABLE 01695000 LA R4,14 14 ENTRIES IN MODETABLE @V407466 01696000 LOOP12 EX R2,EXECOMP COMPARE THE TABLE ENTRY TO THE INPUT 01697000 BE MODEOK BRANCH IF IT IS EQ 01698000 LA R3,4(,R3) POINT TO NEXT ENTRY IN TABLE @V407466 01699000 BCT R4,LOOP12 DO IT UP TO 7 TIMES 01700000 LA R2,1(,R2) ADD ONE FOR THE ERROR MSG 01701000 B ERROR51 GO TYPE THE MSG 01702000 MODEOK OC UDEVMODE(1),3(R3) OR IN MODE @V407466 01703000 CH R4,=H'7' IF R4 < OR = 7 - VIRT. RES/REL. @V407466 01704000 BCR 2,R5 HIGH - NO VIRTUAL RES/REL @V407466 01705000 OI UDEVSTAT,UDEVVRR VIRTUAL RES/REL REQUESTED @V407466 01706000 BR R5 RETURN TO THE CALLER 01707000 DEFAULT6 MVC UDEVADD,UDEVLINK 01708000 DEFAULT7 OI UDEVMODE,UDEVR TURN ON READ BIT 01709000 B CHAINDEV 01710000 SPACE 3 01711000 ****************************************************************** 01712000 *. 01713000 * SPECIAL CARD SCAN ROUTINE 01714000 * 01715000 * 1. SET UP THE VIRTUAL DEVICE ADDRESS. 01716000 * 01717000 * 2. SCAN TABLE3 TO GET THE DEVICE CLASS. 01718000 * 01719000 * 3. GO TO CHAINDEV IN SCANMDIS TO CHAIN IN THE UDEVBLOK. 01720000 *. 01721000 ****************************************************************** 01722000 SCANSPEC MVI UDEVBLOK,X'0' * ZERO OUT BLOCK 01723000 MVC UDEVBLOK+1(UDEVSIZE*8-25),UDEVBLOK * 01724000 BAL R14,SCANCARD GET DEVICE ADD 01725000 BC 4,ERROR53 ERROR IF NO INPUT 01726000 CL R2,=F'3' IS SIZE OVER 3 01727000 BH ERROR51 YES- ERROR 01728000 STM R1,R2,CTCASAVE SAVE THE POINTER'S TO DEV ADD FOR CTCA 01729000 BAL R14,HEXCONV GET DEVICE ADD AND CONVERT IT TO DEC 01730000 STH R2,UDEVADD STORE DEVICE ADD 01731000 BAL R14,SCANCARD GET DEVICE TYPE 01732000 BC 4,ERROR53 ERROR IF NO INPUT 01733000 LA R4,TABLE2 POINT TO THE TABLE 01734000 BAL R14,SCANNAME SUBROUTINE WILL MOVE DEVICE TYPE X01735000 AND CLASS INTO UDEVTYPE AND UDEVTYPC 01736000 B CHAINDEV 01737000 SPACE 3 01738000 ********************************************************************** 01739000 *. 01740000 * CTCA DEVICE TYPE SCAN SUBROUTINE 01741000 * 01742000 * 1. FILL IN THE CLASS. 01743000 * 01744000 * 01745000 * 2. GOTO CHAINCU IN SCANMDIS TO CHAIN IN THE UDEVBLOK 01746000 *. 01747000 ********************************************************************** 01748000 SCANCTCA MVI UDEVTYPC,CLASSPEC SET UP THE DEVICE CLASS 01749000 MVI UDEVTYPE,TYPCTCA AND THE TYPE 01750000 LH R0,=X'FFF0' SET UP THE CONTROL UNIT MASK 01751000 B CHAINCU GO CHAIN IN THE CU; @VA03128 01752000 EJECT 01753000 ****************************************************************** 01754000 *. 01755000 * 2311 DEVICE TYPE SCAN SUBROUTINE 01756000 * 01757000 * 1. FILL IN THE CLASS. 01758000 * 01759000 * 2. RETURN CC = 1 IF NOT TOP OR BOTTOM. ELSE 01760000 * RETURN CC = 0. 01761000 *. 01762000 ****************************************************************** 01763000 SCAN2311 MVI UDEVTYPC,CLASDASD SET UP DASD CLASS 01764000 MVI UDEVTYPE,TYP2311 SET UP TYPE 01765000 BAL R14,SCANCARD 01766000 BC 4,ERROR53 ERROR IF NO INPUT 01767000 COMP =C'TOP ' IS IT TOP 01768000 BNE TESTBOT NO- BRANCH 01769000 MVI UDEVFTR,FTR2311T SET IN FEATURE 01770000 B RETURNC0 RETURN TO CALLER CC = 0 01771000 TESTBOT COMP =C'BOTTOM ' IS IT BOTTOM 01772000 BNE RETURNC1 NO- BRANCH 01773000 MVI UDEVFTR,FTR2311B SET IN FEATURE 01774000 RETURNC0 TM *,X'00' SET CC = 0, CARD IS NOT PRESCANER 01775000 L R14,SAVERET SET UP RETURN ADDRESS 01776000 BR R14 RETURN TO CALLER 01777000 RETURNC1 TM *,X'FF' SET CC = 1, CARD IS PRESCANED 01778000 L R14,SAVERET SET UP RETURN ADDRESS 01779000 BR R14 RETURN TO CALLER 01780000 EJECT 01781000 ***************************************************************** 01782000 *. 01783000 * 2540 DEVICE TYPE SCAN SUBROUTINE 01784000 * 01785000 * 1. SET UP DEVICE CLASS AND RETURN CC = 0. 01786000 *. 01787000 ***************************************************************** 01788000 SCAN2540 BAL R14,SCANCARD 01789000 BC 4,ERROR53 ERROR IF NO INPUT 01790000 COMP =C'READER ' IS IT READER 01791000 BNE TESTPUN NO- BRANCH 01792000 MVI UDEVTYPC,CLASURI SET UP CLASS 01793000 MVI UDEVTYPE,TYP2540R SET TO READER 01794000 B RETURNC0 RETURN TO CALLER 01795000 TESTPUN COMP =C'PUNCH ' IS IT PUNCH 01796000 BNE ERROR51 ERROR IF NOT READER OR PUNCH 01797000 MVI UDEVTYPC,CLASURO SET UP CLASS 01798000 MVI UDEVTYPE,TYP2540P SET IT TO PUNCH 01799000 B RETURNC0 RETURN TO CALLER 01800000 SPACE 3 01801000 ****************************************************************** 01802000 *. 01803000 * 2701 2702 2703 DEVICE TYPE SCAN SUBROUTINE 01804000 * 01805000 * 1. FILL IN THE DEVICE CLASS AND RETURN CC = 0. 01806000 *. 01807000 ****************************************************************** 01808000 SCAN2701 EQU * 01809000 SCAN2702 EQU * 01810000 SCAN2703 MVI UDEVTYPC,CLASTERM SET IN CLASS 01811000 BAL R14,SCANCARD 01812000 BC 4,ERROR53 ERROR IF NO INPUT 01813000 COMP =C'IBM ' IS IT IBM 01814000 BNE TESTTELE 01815000 MVI UDEVTYPE,TYPIBM1 SET TO IBM 01816000 B RETURNC0 RETURN TO CALLER 01817000 TESTTELE COMP =C'TELE ' IS IT TELE 01818000 BNE ERROR51 NO- ERROR 01819000 MVI UDEVTYPE,TYPTELE2 01820000 B RETURNC0 RETURN TO CALLER 01821000 EJECT 01822000 ****************************************************************** 01823000 *. 01824000 * START IO ROUTINE 01825000 * 01826000 * 1. IF RUNNING UNDER VM/370 GO TO STEP 10. 01827000 * 01828000 * 2. IF AN ERROR IS STACKED, UNSTACK IT AND GO TO 01829000 * STEP 5. 01830000 * 01831000 * 3. START THE DEVICE. 01832000 * 01833000 * 4. IF CHANNEL STATUS IS ZERO AND IF NO UC, UE OR 01834000 * ATTN IS IN THE UNIT STATUS GO TO STEP 7. 01835000 * 01836000 * 5. IF THIS IS THE DEVICE I STARTED GO TO DO A SENSE, 01837000 * ELSE STACK THE ERROR IN THE IOB. 01838000 * 01839000 * 6. GO TO THE ERROR ROUTINE IF PROVIDED, ELSE CHECK 01840000 * THE OPTION SWITCHES TO STOP, REPEAT OR RETURN. 01841000 * 01842000 * 7. IF THIS IS THE DEVICE I STARTED CONTINUE, ELSE WAIT 01843000 * FOR THE NEXT IO INTERRUPT. (RENTER AT STEP 4) 01844000 * 01845000 * 8. IF PROPER ENDING STATUS, CE AND/OR DE, RETURN TO 01846000 * CALLER. ELSE RETURN TO CALLER. 01847000 * 01848000 * 9. IF THIS IS A DASD DEVICE CONTINUE, ELSE GO TO 01849000 * STEP 2. 01850000 * 01851000 * 10. DO A DIAGNOSE CALL TO VM/370 AND LET CP DO THE 01852000 * 01853000 * 11. IF ERROR GO TO THE ERROR ROUTINE, ELSE RETURN 01854000 * TO THE CALLER. 01855000 *. 01856000 ****************************************************************** 01857000 STARTIO ST R2,IOBCCW SAVE POINTER TO THE CCWS @V56BDA8 01858000 RETRYIO L R3,IOB GET FIRST WORD OF IOB @V56BDA8 01859000 RESTART CLI CPUID,X'FF' IS THIS A VIRTUAL MACHINE ? 01860000 BE DIAGNOSE YES, LET CP DO THE WORK 01861000 RETSIO TM IOBSTAT,IOBSTACK IS AN IO ERROR STACKED FOR THIS UNIT 01862000 BO UNSTACK YES- BRANCH TO UNSTACK IT 01863000 ST R2,CAW SET UP CAW 01864000 XC CSW,CSW ZERO THE CSW 01865000 SIO 0(R3) 01866000 BC 4,CSWSTORE GO AND TEST STATUS 01867000 BC 2,IOWAIT GO AND WAIT FOR AN IO INTERRUPT 01868000 BC 1,NOTOPER GO TO THE NOT OPER ERROR ROUTINE 01869000 LA R3,0(,R3) INDICATE IO STARTED 01870000 IOWAIT LPSW IOWPSW INABLE IO INTERRUPTIONS 01871000 IOINT MVI IOOLD,X'01' TURN OFF ALL BUT EXTERNAL INTERRUPT 01872000 NI IOOLD+1,X'FD' TURN OFF WAIT BIT 01873000 LPSW IOOLD LOAD IO OLD PSW 01874000 CSWSTORE EQU * 01875000 TM CSW+4,BUSY IS THE UNIT BUSY 01876000 BZ LOOKATCE NO- GO LOOK AT CE 01877000 TM CSW+4,DE+ATTN+CUE+CE IS THIS ENDING STATUS 01878000 BNZ STUADD YES- BRANCH 01879000 LPSW IOWPSW WAIT FOR ENDING STATUS 01880000 LOOKATCE TM CSW+4,CE IS THIS CHANNEL END 01881000 BZ STUADD NO- BRANCH 01882000 LA R3,0(,R3) INDICATE IO STARTED 01883000 LA R4,8(,R2) POINT TO THE FIRST CCW + 8 01884000 ST R4,CSW AND SAVE IT IN THE CSW 01885000 STUADD STH R3,IOOLD+2 POINT TO THE INTERRUPTING DEVICE 01886000 TESTSTAT TM CSW+5,X'FF' TEST ALL CHANNEL STATUS. IS IT ZERO? 01887000 BNZ IOERROR NO- ERROR 01888000 TM CSW+4,UC+UE+ATTN TEST UNIT STATUS, IS IT BAD? 01889000 BNZ IOERROR YES- ERROR 01890000 TESTDEV LR R4,R3 GET THE ADDRESS OF THE DEVICE WAITING FOR 01891000 TM CSW+4,X'20' IS THIS A CU END INT 01892000 BZ TESTADD NO- GO TEST THE ADD 01893000 LTR R3,R3 WAS THE UNIT STARTED @VA01134 01894000 BM RESTART NO-RESTART @VA01134 01895000 B IOWAIT GO WAIT FOR NEXT INTERRUPT @VA01134 01896000 TESTADD CLM R4,3,IOOLD+2 IS THIS THE DEVICE WAITING FOR 01897000 BNE IOWAIT NO- GO WAIT FOR THE NEXT INT 01898000 LTR R3,R3 WAS THE UNIT STARTED 01899000 BM RESTART NO- RESTART THE UNIT 01900000 TM IOBOPT,IOBDEW MUST I WAIT FOR DEVICE END 01901000 BZ TESTCE NO- BRANCH 01902000 TM CSW+4,DE IS IT DEVICE END 01903000 BCR 1,R5 YES- RETURN TO CALLER 01904000 LPSW IOWPSW WAIT FOR THE NEXT IO INTERRUPT 01905000 TESTCE TM CSW+4,CE+DE IS IT CHANEL END OR DEVICE END 01906000 BCR 7,R5 YES- RETURN 01907000 LPSW IOWPSW WAIT 01908000 IOERROR CLC IOBUADD,IOOLD+2 IS THIS THE DEVICE I AM WORKING WITH 01909000 BNE STACK NO- BRANCH TO STACK THE IO ERROR 01910000 MVC IOBCSW(8),CSW MOVE IN CSW 01911000 UNSTACK NI IOBSTAT,255-IOBSTACK TURN IOBSTACK BIT OFF 01912000 LA R4,SENSECCW POINT TO SENSE CCW 01913000 ST R4,CAW SET UP CAW 01914000 XC SENSE,SENSE ZERO OUT SENSE 01915000 SIO 0(R3) DO A SENSE 01916000 TIO TIO 0(R3) CLEAR ANY INTERRUPT 01917000 BC 2,TIO LOOP IF CHANNEL IS BUSY 01918000 LA R4,32 CAL THE NUMBER OF SENSE BYTES HRC011DK 01919490 SH R4,CSW+6 .. @V2B3729 01920000 STC R4,SNSCNT .. @V2B3729 01921000 L R4,IOBERROR GET THE ADDRESS OF THE ERROR ROUTINE 01922000 LTR R4,R4 DO I HAVE AN IO ERROR ROUTINE 01923000 BCR 7,R4 YES- GO TO IT 01924000 IORETURN TM IOBOPT,IOBEEXIT DO I REPEAT THE CCW STRING 01925000 BNO TESTSTOP NO- BRANCH 01926000 L R3,IOB SET UP TO REPEAT CCW STRING 01927000 TESTSTOP TM IOBOPT,IOBERST DO I STOP ON ERROR 01928000 BNO TESTST NO- BRANCH 01929000 LPSW IOWPSW 01930000 TESTST LTR R3,R3 IS DEVICE STARTED 01931000 BM RESTART NO- BRANCH TO START DEVICE 01932000 BR R5 RETURN TO CALLER 01933000 USING IOB,R4 01934000 STACK LA R4,READIOB 01935000 SCANIOBS CLC IOBUADD,IOOLD+2 IS THIS THE ERROR IOB 01936000 BNE UPDATE2 NO- BRANCH 01937000 MVC IOBCSW(8),CSW MOVE ERROR CSW INTO IOB 01938000 OI IOBSTAT,IOBSTACK TURN ON ERROR STACKED BIT 01939000 LPSW IOWPSW NOW WAIT FOR MY INTERRUP 01940000 UPDATE2 TM IOBSTAT,IOBLAST IS THIS THE LAST IOB 01941000 LA R4,IOBSIZE(,R4) POINT TO THE NEXT IOB. @V56BDA8 01942000 BNO SCANIOBS NO- BRANCH IF THIS IS NOT THE LAST IOB 01943000 LPSW IOWPSW INTERRUP WAS NOT FROM A UNIT I X01944000 STARTED SO IGNORE IT AND WAIT FOR MINE 01945000 DROP R4 01946000 USING IOB,R1 01947000 NOTOPER OI IOBSTAT,IOBNOPER TURN ON THE NOT OPER BIT 01948000 L R4,IOBERROR GET THE ADDRESS OF THE IO ERROR ROUTINE 01949000 LTR R4,R4 IS THERE AN ERROR ROUTINE 01950000 BCR 2,R4 YES- GO TO IT 01951000 B ERROR54 01952000 DIAGNOSE CL R1,=A(DASDIOB) IS THIS A START IO TO A DASD DEV 01953000 BNE RETSIO NO- RETURN TO SIO 01954000 SSM *+1 LOCK OUT CMS 01955000 DC X'83320020' DIAGNOSE CALL TO VM/370 01956000 BCR 8,R5 IF CC = 0 ALL OK (RETURN TO CALLER) 01957000 LA R3,0(,R3) INDICATE IO STARTED 01958000 CL R15,=F'1' IS THE RETURN CODE 1 01959000 BE NOTOPER YES- THE UNIT IS NOT OPERATIONAL 01960000 XC SENSE,SENSE CLEAN UP THE SENSE 01961000 MVC IOBCSW(8),CSW MOVE IN THE CSW 01962000 CL R15,=F'13' IS THE RETURN CODE 13 01963000 BNE RET NO- BRANCH 01964000 STH R2,SENSE SAVE THE SENSE 01965000 MVI SNSCNT,2 INDICATE 2 SENSE BYTES @V2B3729 01966000 L R2,IOBCCW REPOINT TO CCWS JUST IN CASE @V56BDA8 01967000 RET L R4,IOBERROR POINT TO THE ERROR ROUTINE 01968000 LTR R4,R4 DO I HAVE AN ERROR ROUTINE 01969000 BCR 2,R4 YES- GO TO IT 01970000 B IORETURN NO- RETURN TO IO RETURN 01971000 EJECT 01972000 ******************************************************************** 01973000 GRAPHID EQU * @V200731 01974000 TM PARM,PARMGRP IS THE GRAPHIC INDICATOR ACTIVE ?@V200731 01975000 BZ STARTIO NO, GO START THE I/O REQUEST @V200731 01976000 STM R14,R5,GRAPHSAV SAVE THE REGISTERS @V200731 01977000 LR R4,R2 GET THE ADDRESS OF THE CCW STRING@V200731 01978000 GETCCW EQU * @V200731 01979000 LH R3,6(R4) GET THE DATA COUNT FROM THE CCW @V200731 01980000 STM R3,R4,SAVEAREA SAVE THE DATA REGISTERS @V200731 01981000 NI PARM,X'FF'-(PARMREA+PARMNDA) CLEAR THE READ @V200731 01982000 * REQUEST 01983000 * AND NO DATA INDICATOR 01984000 LA R2,5 SET THE LOOP COUNT @V200731 01985000 LA R14,TABLGRAP GET THE ADDRESS OF THE COMMAND @V200731 01986000 * OP TABLE 01987000 ICM R5,1,0(R4) GET THE OP CODE @V200731 01988000 CCWEXEC EQU * @V200731 01989000 EX R5,CLIP TEST THE COMMAND OP CODE WITH @V200731 01990000 * TABLE CODE 01991000 BE GRAPHADD YES, FOUND THE COMMAND OP CODE @V200731 01992000 LA R14,4(R14) UPDATE THE ADDRESS IN THE TABLE @V200731 01993000 BCT R2,CCWEXEC GO TEST THE NEXT OP CODE @V200731 01994000 OI DIRFLAG,ERROR SET ERROR MESSAGE FLAG @V200731 01995000 B EXIT INVALID OP CODE - GO EXIT @V200731 01996000 CLIP CLI 0(R14),X'00' TEST THE OP CODE IN THE TABLE @V200731 01997000 GRAPHADD EQU * @V200731 01998000 ICM R2,7,1(R14) GET THE ADDRESS OF THE OP CODE @V200731 01999000 * ROUTINE 02000000 BR R2 GO TO THE ROUTINE @V200731 02001000 SPACE 2 02002000 READ66 EQU * @V200731 02003000 OI PARM,PARMREA+PARMATT INDICATE READ AND ATTENTION@V200731 02004000 * REQUESTS 02005000 LA R5,GRAPHIC0 RETURN ADDRESS FROM I/O HANDLER @V200731 02006000 XC BLNKLINE(140),BLNKLINE CLEAR THE READ AREA @VM08604 02007000 MVI IOBCSW+4,X'00' CLEAR THE CSW STATUS @V200731 02008000 XC RDMIDATA(6),RDMIDATA CLEAR THE READ DATA FIELD @V200731 02009000 MVC CPXYSTAT(20),REALABEL @V200731 02010000 LA R2,REQREAD GET THE ADDRESS OF THE CHANNEL @V200731 02011000 * PROGRAM 02012000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02013000 BZ STARTIO NO, GO ISSUE SIO @V200731 02014000 LA R2,REQREAD1 GET THE ADDRESS OF THE CHANNEL @V200731 02015000 * PROGRAM 02016000 B STARTIO GO TO THE I/O HANDLER @V200731 02017000 SPACE 2 02018000 WRT66 EQU * @V200731 02019000 MVC CPXYSTAT(20),RUNLABEL @V200731 02020000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02021000 BO YES3270 YES, GO TO 3270 SUPPORT @V200731 02022000 MVC WRT3066+1(3),1(R4) GET THE MESSAGE ADDRESS @V200731 02023000 STH R3,WRT3066+6 SAVE THE DATA COUNT IN THE CCW @V200731 02024000 LA R2,WRTCRTXY GET THE ADDRESS OF THE CHANNEL @V200731 02025000 * PROGRAM 02026000 TM PARM,PARMCLE IS THE ERASE INDICATOR ON ? @V200731 02027000 BZ GRAPWRT NO, GO TO SIO SECTION @V200731 02028000 LA R2,ERSE3066 GET THE ADDRESS OF THE CHANNEL @V200731 02029000 * PROGRAM 02030000 MVI SBADDR,X'00' CLEAR LINE POINTER @V200731 02031000 GRAPWRT EQU * @V200731 02032000 LA R5,GRAPHIC1 RETURN ADDRESS FROM I/O HANDLER @V200731 02033000 B STARTIO GO TO THE I/O HANDLER @V200731 02034000 YES3270 EQU * @V200731 02035000 SR R5,R5 CLEAR REGISTER 5 @V200731 02036000 LA R2,WRTCRT70 GET THE ADDRESS OF THE CHANNEL @V200731 02037000 * PROGRAM 02038000 TM PARM,PARMCLE IS THE ERASE INDICATOR ON ? @V200731 02039000 BZ NOCL3270 NO, DON'T CLEAR SCREEN @V200731 02040000 MVI SBADDR,X'00' CLEAR LINE POINTER @V200731 02041000 LA R2,ERSE3270 GET THE ADDRESS OF THE CHANNEL @V200731 02042000 * PROGRAM 02043000 NOCL3270 EQU * @V200731 02044000 IC R5,SBADDR GET THE CURRENT LINE POINTER @V200731 02045000 SLL R5,1 SETUP THE INDEX INTO THE TABLE @V200731 02046000 LH R5,TABLE70(R5) GET THE LINE ADDRESS @V200731 02047000 STCM R5,3,LAB3270+2 SAVE THE CURRENT LINE POINTER @V200731 02048000 MVC WRTCR70+1(3),1(R4) GET THE MESSAGE ADDRESS @V200731 02049000 STH R3,WRTCR70+6 SAVE THE BYTE COUNT IN THE CCW @V200731 02050000 B GRAPWRT GO GET THE RETURN ADDRESS @V200731 02051000 SPACE 2 02052000 GRAPHIC1 EQU * @V200731 02053000 LM R3,R4,SAVEAREA GET THE DATA REGISTERS @V200731 02054000 NI PARM,X'FF'-PARMCLE CLEAR THE ERASE INDICATOR @V200731 02055000 SR R2,R2 CLEAR REGISTER 2 @V200731 02056000 IC R2,SBADDR GET THE Y COORDINATE @V200731 02057000 LA R2,1(R2) UPDATE THE Y COORDINATE @V200731 02058000 CH R3,=H'80' IS THE DATA COUNT LONGER THAN 1 @V200731 02059000 * LINE 02060000 BNH *+8 NO, GO SAVE Y COORDINATE @V200731 02061000 LA R2,1(R2) UPDATE THE Y COORDINATE AGAIN @V200731 02062000 STC R2,SBADDR SAVE THE Y COORDINATE @V200731 02063000 MH R2,=H'80' GET THE BYTE LENGTH @V200731 02064000 L R14,=F'2640' GET THE MAX. LENGTH @V200731 02065000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02066000 BZ TEST3066 NO, GO TEST FOR END OF CRT @V200731 02067000 L R14,MAXLEN GET THE MAX. LEN. FOR 3270/3278 @V60A6B6 02068000 TEST3066 EQU * @V200731 02069000 CR R2,R14 IS THE Y COORDINATE AT THE END @V200731 02070000 * OF THE 02071000 * CRT 02072000 BL RETWORD NO, CHECK FOR CMD CHAINING @VA08599 02073000 OI PARM,PARMATT SET THE ATTENTION REQUEST @V200731 02074000 MVI IOBCSW+4,X'00' CLEAR THE CSW STATUS @V200731 02075000 MVC CPXYSTAT(20),MORLABEL @V200731 02076000 LA R5,GRAPHIC3 RETURN ADDRESS FROM I/O HANDLER @V200731 02077000 LA R2,CRTWORD GET THE ADDRESS OF THE CHANNEL @V200731 02078000 * PROGRAM 02079000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02080000 BZ STARTIO NO, GO ISSUE SIO @V200731 02081000 LA R2,MORECCW1 GET THE ADDRESS OF THE CHANNEL @V200731 02082000 * PROGRAM 02083000 B STARTIO GO ISSUE SIO @V200731 02084000 GRAPHIC3 EQU * @V200731 02085000 TM IOBCSW+4,ATTN IS THE ATTENTION FLAG ACTIVE ? @V200731 02086000 BZ GRAPPSW NO, GO WAIT FOR AN ATTENTION @V200731 02087000 * INTERRUPT 02088000 NI PARM,X'FF'-PARMATT CLEAR THE ATTENTION INDICATOR@V200731 02089000 CANCEL1 EQU * @V200731 02090000 LM R3,R4,SAVEAREA GET THE DATA REGISTERS @V200731 02091000 MVI SBADDR,X'00' SET THE Y COORDINATE TO ZERO @V200731 02092000 MVC CPXYSTAT(20),RUNLABEL CRT DISPLAY RUN STATUS @V200731 02093000 LA R2,CNCL3066 GET THE ADDRESS OF THE CHANNEL @V200731 02094000 * PROGRAM 02095000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02096000 BZ RETURNCN NO, GO GET RETURN ADDRESS @V200731 02097000 LA R2,CNCL3270 GET THE ADDRESS OF THE CHANNEL @V200731 02098000 * PROGRAM 02099000 RETURNCN EQU * @V200731 02100000 LA R5,READ66 GET THE ADDRESS OF THE READ @V200731 02101000 * SECTION 02102000 TM PARM,PARMREA IS THIS A READ REQUEST ? @V200731 02103000 BO STARTIO YES, GO TO THE I/O HANDLER @V200731 02104000 LA R5,RETWORD RETURN ADDRESS FROM I/O HANDLER @V200731 02105000 B STARTIO GO TO THE I/O HANDLER @V200731 02106000 SPACE 1 02107000 GRAPHIC0 EQU * @V200731 02108000 TM IOBCSW+4,ATTN IS THE ATTENTION FLAG ACTIVE ? @V200731 02109000 BO GRAPATTN YES, GO SETUP CCW FOR READ @V200731 02110000 * MANUAL INPUT 02111000 GRAPPSW EQU * @V200731 02112000 LPSW IOWPSW GO WAIT FOR INTERRUPT @V200731 02113000 SPACE 1 02114000 GRAPATTN EQU * @V200731 02115000 LM R3,R4,SAVEAREA GET THE DATA REGISTERS @V200731 02116000 NI PARM,X'FF'-PARMATT CLEAR ATTENTION REQUEST @V200731 02117000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02118000 BO YES3270A YES, GO TO 3270 SUPPORT @V200731 02119000 STH R3,RD3066DA+6 STORE THE COUNT IN THE CCW @V200731 02120000 MVC RD3066DA+1(3),1(R4) MOVE THE ADDRESS OF THE READ@V200731 02121000 * BUFFER INTO THE CCW 02122000 LA R2,RDMI3066 GET THE ADDRESS OF THE CHANNEL @V200731 02123000 * PROGRAM 02124000 RETURNAD EQU * @V200731 02125000 LA R5,RET66MI RETURN ADDRESS FROM I/O HANDLER @V200731 02126000 B STARTIO GO TO THE I/O HANDLER @V200731 02127000 YES3270A EQU * @V200731 02128000 LA R14,6(R3) ADD 6 T0 THE TOTAL COUNT @V200731 02129000 STH R14,RD3270DA+6 STORE THE COUNT IN THE CCW @V200731 02130000 LA R14,BLNKLINE GET THE ADDRESS OF THE BUFFER @V200731 02131000 STCM R14,7,RD3270DA+1 MOVE THE ADDRESS OF THE READ @V200731 02132000 * BUFFER INTO THE CCW 02133000 LA R2,RDMI3270 GET THE ADDRESS OF THE CHANNEL @V200731 02134000 * PROGRAM 02135000 B RETURNAD GO GET THE RETURN ADDRESS @V200731 02136000 SPACE 2 02137000 RET66MI EQU * @V200731 02138000 LM R3,R4,SAVEAREA GET THE DATA REGISTERS @V200731 02139000 MVC CPXYSTAT(20),RUNLABEL CRT DISPLAY RUN STATUS @V200731 02140000 LA R2,CRTWORD GET THE ADDRESS OF THE CHANNEL @V200731 02141000 * PROGRAM 02142000 LA R5,RETINPUT RETURN ADDRESS FROM I/O HANDLER @V200731 02143000 TM PARM,PARM327 IS THIS A 3270 GRAPHIC ? @V200731 02144000 BO YES3270B YES, GO CHECK 3270 SUPPORT @V200731 02145000 TM RDMIDATA+2,X'40' DID THE OPERATOR HIT THE @V200731 02146000 * CANCEL KEY 02147000 BO CANCEL1 YES, GO CLEAR SCREEN @V200731 02148000 CLC RDMIDATA(2),SBAREAD DID THE CURSOR MOVE ? @V200731 02149000 BNE STARTIO YES, GO WRITE STATUS @V200731 02150000 OI PARM,PARMNDA SET INDICATOR FOR NO DATA @V200731 02151000 B STARTIO GO WRITE OUT STATUS @V200731 02152000 YES3270B EQU * @V200731 02153000 CLI BLNKLINE,X'6E' DID THE OPERATOR HIT THE CANCEL @V200731 02154000 * KEY 02155000 BE CANCEL1 YES, GO CLEAR SCREEN @V200731 02156000 CLI BLNKLINE,X'6D' DID THE OPERATOR HIT THE CLEAR @V200731 02157000 * KEY 02158000 BE CANCEL1 YES, GO CLEAR SCREEN @V200731 02159000 CLI BLNKLINE,X'6C' DID OPERATOR HIT PA1 KEY @V200731 02160000 BE CANCEL1 YES, GO CLEAR SCREEN @V200731 02161000 OI PARM,PARMNDA SET INDICATOR FOR NO DATA @V200731 02162000 CLI BLNKLINE,X'01' DID OPERATOR HIT TEST REQ. KEY @VM08604 02163000 BE ENT3270 YES, GO WRITE STATUS @VM08604 02164000 CLI BLNKLINE,X'E6' IS THIS THE CARD READER @VM08604 02165000 BE ENT3270 YES, GO WRITE STATUS @VM08604 02166000 CLC BLNKLINE+6,X'00' DATA IN INPUT AREA ? @VM08604 02167000 BNE DATA3270 YES, GO DISPLAY DATA @VM08604 02168000 CLC BLNKLINE+1(2),ADDR5 DID CURSOR MOVE @V60A6B6 02169000 BE ENT3270 NO, GO WRITE STATUS @V200731 02170000 DATA3270 EQU * @VM08604 02171000 NI PARM,X'FF'-PARMNDA SET INDICATOR FOR NO DATA @V200731 02172000 ICM R14,7,1(R4) GET ADDRESS OF USER'S BUFFER @V200731 02173000 BCTR R3,R0 SUBTRACT ONE FROM COUNT (EX @V200731 02174000 * INSTR.) 02175000 EX R3,MOV3270 MOVE DATA INTO USER'S BUFFER @V200731 02176000 LA R3,1(,R3) UPDATE THE DATA COUNT @VM08921 02177000 MOVEBLNK EQU * @VM08921 02178000 OI 0(R14),X'40' SET UP FOR UPPERCASE LETTER @VM08921 02179000 LA R14,1(,R14) UPDATE THE BUFFER ADDRESS BY ONE @VM08921 02180000 BCT R3,MOVEBLNK GO SET CHARACTERS TO UPPERCASE @VM08921 02181000 ENT3270 EQU * @V200731 02182000 LA R2,CRTWORD1 GET THE ADDRESS OF THE CHANNEL @V200731 02183000 * PROGRAM 02184000 B STARTIO GO ISSUE SIO @V200731 02185000 SPACE 2 02186000 ********************************************************************* 02187000 MOV3270 MVC 0(0,R14),BLNKLINE+6 MOVE THE DATA INTO THE @V200731 02188000 * USER'S BUFFER 02189000 ********************************************************************* 02190000 SPACE 2 02191000 RETINPUT EQU * @V200731 02192000 LM R3,R4,SAVEAREA GET THE DATA REGISTERS @V200731 02193000 TM PARM,PARMNDA IS NO DATA INDICATED ? @V200731 02194000 BZ WRT66 NO, GO DISPLAY INPUT ON CRT @V200731 02195000 RETWORD EQU * @V200731 02196000 TM 4(R4),CC IS COMMAND CHAINING ON ? @V200731 02197000 LA R4,8(R4) UPDATE THE CCW ADDRESS TO NEXT @V200731 02198000 * CCW 02199000 BO GETCCW YES, GET DATA COUNT FROM CCW @V200731 02200000 LM R14,R5,GRAPHSAV GET CALLER'S REGISTERS @V200731 02201000 BR R5 RETURN TO CALLER @V200731 02202000 EJECT 02203000 ****************************************************************** 02204000 *. 02205000 * INPUT CARD READ ROUTINE 02206000 * 02207000 * 1. SET UP THE NEXT AND LAST CARD POINTERS. 02208000 * 02209000 * 2. IF UNDER CMS USE SVC 202 TO GET THE NEXT CARD, 02210000 * ELSE USE STARTIO TO READ IT IN. 02211000 * 02212000 * 3. IF AN * OR A BLANK CARD GO TO STEP 2. 02213000 * 02214000 * 4. IF NOT FIRST CARD, SET UP CURRENT CARD POINTER 02215000 * AND EXIT TO SCANNAME POINTING AT TABLE1. 02216000 * 02217000 * 5. IF FIRST CARD IS NOT A DIRECTORY CARD GO TO 02218000 * ERROR62. ELSE GO TO STEP 1 TO READ THE NEXT 02219000 * CARD. 02220000 *. 02221000 ****************************************************************** 02222000 READ LA R1,READIOB POINT TO THE INPUT IOB 02223000 MVC LASTCARD,CURRCARD SET UP LAST CARD POINTER @VA01066 02224000 MVC CURRCARD,NEXTCARD SET UP NEXT CARD POINTER 02225000 LM R2,R3,CURBUF * REVERSE POINTERS TO INPUT BUFFERS 02226000 XR R2,R3 * 02227000 XR R3,R2 * 02228000 XR R2,R3 * 02229000 STM R2,R3,CURBUF * 02230000 REREAD ST R3,CURPOINT POINT TO CURRANT CARD BUFFER 02231000 LA R4,71 SET UP INPUT COUNT 02232000 STH R4,CURCOUNT STORE COUNT 02233000 STCM R3,7,READCCW+1 POINT TO THE BUFFER 02234000 LA R2,READCCW POINT TO THE CCW 02235000 TM DIRFLAG,READEOF HIT EOF YET? @VA01066 02236000 BO BUFLUSH YES, GO SYNTAX LAST USER @VA01066 02237000 CL R12,BAREMAC IS THIS A BARE MACHINE? @VA01066 02238000 BNE CMS3 NO- GO 02239000 BAL R5,STARTIO READ IN CARD 02240000 RET1 BAL R14,SCANCARD * SET UP NEXT CARD INDICATOR 02241000 BNE SKIP1 * IF IT IS A BLANK CARD OR AN * 02242000 MVC NEXTCARD,0(R1) * SKIP THE CARD 02243000 CLI NEXTCARD,C'*' * 02244000 BNE MOVECPT * 02245000 SKIP1 L R3,NEXTBUF * 02246000 LA R1,READIOB * 02247000 B REREAD * 02248000 MOVECPT MVC CURPOINT,CURBUF * 02249000 LA R4,71 * SET UP COUNT 02250000 STH R4,CURCOUNT * 02251000 CLI CURRCARD,X'00' WAS THAT THE FIRST CARD 02252000 BNE SCAN1 NO- BRANCH 02253000 CLC NEXTCARD(3),CONDIRE IS THE FIRST CARD A DIRECTORY CARD 02254000 BE READ YES- BRANCH TO READ THE NEXT CARD 02255000 OI DIRFLAG,ERROR TURN ON THE ERROR FLAG 02256000 B ERROR62 PRINT OUT ERROR 02257000 SCAN1 BAL R14,SCANCARD POINT TO THE FIRST FIELD 02258000 LA R4,TABLE1 02259000 BAL R14,SCANNAME GO TO PROPER ROUTINE 02260000 B ERROR51 ERROR IF RETURN FROM SCANNAME 02261000 EJECT 02262000 READERR TM IOBCSW+4,UE IS ERROR UNIT EXCEPTION 02263000 BO EOF YES- BRANCH 02264000 STM R1,R5,SAVEERR SAVE RETURN REGS 02265000 TM IOBSTAT,IOBNOPER IS THE NOT OPER BIT ON 02266000 BO ERROR54 YES- BRANCH 02267000 BAL R5,ERROR55 GO AND PRINT THE ERROR 02268000 RESTORE LM R1,R5,SAVEERR RETURN ERROR REGS 02269000 B IORETURN GO BACK TO IO ROUTINE 02270000 SPACE 1 02271010 * THIS UPDATE BUFFERS DIRECTORY READ OPERATIONS TO IMPROVE 02271020 * I/O PERFORMANCE. 02271030 CMS3 STM R2,R4,FIORSAV SAVE SOME REGISTERS @VA09965 02271040 LA R4,FIOFCB SET UP ADDRESSABILITY TO FCB @VA09965 02271050 USING FSCBD,R4 @VA09965 02271060 TM FIOFLAGS,FIOINIT SHOULD INITIALIZATION BE DONE @VA09965 02271070 BO FIONOM BR IF NOT @VA09965 02271080 * INITIALIZE FOR FAST I/O PROCESSING 02271090 OI FIOFLAGS,FIOINIT SET INIT. DONE @VA09965 02271100 LA R1,INFCB REFERENCE OLD FCB @VA09965 02271110 MVC FSCBFN(18),8(R1) MOVE FILEID TO NEW FCB @VA09965 02271120 * GET BUFFER FOR FAST I/O. USER VARIABLE REQUEST WITH MAX. 02271130 * OF 12,000 BYTES AND MINIMUM OF 800 BYTES. 02271140 GETMAIN VU,LA=FIOMNMX,A=FIOGMANS @VA09965 02271150 MVC FSCBBUFF(8),FIOGMANS BUFF ADDR & SIZE IN FCB @VA09965 02271160 * CALCULATE THE NUMBER OF BYTES TO READ AND PUT IN FCB 02271170 * (= BUFF. SIZE DIVIDED BY LOGICAL RECORD SIZE OF 80 BYTES) 02271180 SR R0,R0 ZERO FOR DIVIDE @VA09965 02271190 L R1,FIOGMSZ GET BUFF. SIZE @VA09965 02271200 D R0,=F'80' CALC. NO. OF RECORDS TO READ @VA09965 02271210 * IGNORE ANY REMAINDER...JUST DON'T USE IT 02271220 STH R1,FSCBNOIT STORE IN FCB @VA09965 02271230 SPACE 1 02271240 * PERFORM PHYSICAL READ VIA CMS RDBUF 02271250 FIOREAD FSREAD FSCB=FIOFCB,ERROR=FIOEREND @VA09965 02271260 LR R1,R0 GET CT. OF BYTES READ FROM FCB @VA09965 02271270 SR R0,R0 ZERO HIGH DIVIDEND @VA09965 02271280 D R0,=F'80' CALC. NO. OF 80 BYTE RECS. READ @VA09965 02271290 LTR R0,R0 ANY REMAINDER? @VA09965 02271300 BZ FIOOK BR IF NO REMAINDER @VA09965 02271310 * ERROR, THERE SHOULD BE NO REMAINDER 02271320 LA R15,8 SET UP WRONG LENGTH ERROR @VA09965 02271330 LA R1,FIOFCB RESTORE PLIST FOR USE BY ERR MSG @VA09965 02271340 B FIOEREND @VA09965 02271350 SPACE 1 02271360 FIOOK L R2,FIOGMAD GET ADDRESS OF FIO INPUT BUFFER @VA09965 02271370 LA R3,1 SET UP VALUE OF 1 @VA09965 02271380 STM R1,R3,FIORECCT STORE NEW REC CT, PTR, + CUR CT @VA09965 02271390 B FIOMOVE GO TO MOVE RECORD @VA09965 02271400 SPACE 1 02271410 * EXCEPTION ENDING 02271420 FIOEREND DS 0H @VA09965 02271430 LM R2,R4,FIORSAV RESTORE REGISTERS @VA09965 02271440 B TESTEOF GO CHECK OUT ERROR @VA09965 02271450 SPACE 1 02271460 * PROCESSING WHEN PHYSICAL READ NOT REQUIRED 02271470 * R1= FIORECCT, R2= FIOCURPT, R3= FIOCURCT 02271480 FIONOM LM R1,R3,FIORECCT SET UP REGISTERS @VA09965 02271490 LA R3,1(,R3) COUNT ONE MORE RECORD @VA09965 02271500 CR R3,R1 COMPARE NEW COUNT TO MAX. @VA09965 02271510 BH FIOREAD BR IF BUFF USED UP, NEED READ @VA09965 02271520 LA R2,80(,R2) POINT TO NEXT RECORD @VA09965 02271530 STM R1,R3,FIORECCT SAVE NEW VALUES IN CTL. BLOCK @VA09965 02271540 FIOMOVE LM R3,R4,FIORSAV+4 RESTORE R3 AND R4 @VA09965 02271550 MVC 0(80,R3),0(R2) MOVE DATA TO EXPECTED BUFFER @VA09965 02271560 L R2,FIORSAV RESTORE REGISTER @VA09965 02271570 SPACE 1 02271580 DROP R4 @VA09965 02271590 SPACE 1 02271600 B RET1 RETURN 02275000 TESTEOF CL R15,=F'12' IS IT EOF 02276000 BE EOF YES, NOT AN ERROR @VA07951 02277000 OI DIRFLAG,ERROR SHOW WE HAD AN ERROR @VA07951 02278000 B ERROR1 @VA07951 02279000 EOF OI DIRFLAG,READEOF TURN ON END OF FILE BIT 02280000 L R2,NEXTBUF POINT TO INPUT BUFFER 02281000 MVC 0(4,R2),CONUSER FAKE A USER CARD 02282000 B RET1 RETURN TO READ 02283000 BUFLUSH OI DIRFLAG,FLUSH INDICATE LAST BUFFER FLUSHED @VA01066 02284000 B SCANUSER GO CHECK OUT THE LAST RECORD @VA01066 02285000 EJECT 02286000 ***************************************************************** 02287000 *. 02288000 * DASD WRITE ROUTINE 02289000 * 02290000 * 1. IF ERROR OR EDIT BIT ON RETURN TO CALLER. 02291000 * 02292000 * 2. BUILG THE CCW STRING AND CALL STARTIO TO WRITE 02293000 * THE BUFFER OUT. 02294000 * 02295000 * 3. RETURN TO THE CALLER. 02296000 *. 02297000 ***************************************************************** 02298000 WRITE TM DIRFLAG,ERROR+EDITMODE IS THE ERROR OR EDIT BIT ON 02299000 BCR 7,R14 YES- RETURN TO THE CALLER (DO NOT WRITE) 02300000 STM R1,R3,SAVEWREG SAVE REG 02301000 ST R1,WCCW4 POINT TO BUFFER 02302000 MVI WCCW4,5 SET UP WRITE CCW 02303000 ST R2,SKSERCC SET IN CYLINDER LOCATION 02304000 STH R2,SKSERR SET IN RECORD NO 02305000 LA R1,512 SET UP TO DIVIDE BY 2.0 (3340) @V2A2029 02306000 TM DIRFLAG1,OUT3340 IS THIS A 3340 @V2A2029 02307000 BO DEVIDE YES - BRANCH @V2A2029 02308000 LA R1,1024 SET UP TO DIVIDE BY 4.0 (3350) @V304498 02309000 TM DIRFLAG1,OUT3350 IS THIS A 3350 @V304498 02310000 BO DEVIDE YES - BRANCH @V304498 02311000 LA R1,8*256 Set up to divide by 8.0 (3375) HRC106DK 02311100 TM DIRFLAG1,OUT3375 Is this a 3375 HRC106DK 02311200 BO DEVIDE Yes - branch HRC106DK 02311300 LA R1,10*256 Set up to divide by 10.0 (3380) HRC106DK 02311400 TM DIRFLAG1,OUT3380 Is this a 3380 HRC106DK 02311500 BO DEVIDE Yes - branch HRC106DK 02311600 LA R1,409 SET UP TO DEVIDE BY 1.6 (2314-2319) 02312000 TM DIRFLAG,OUT3330 IS THIS A 3330 02313000 BZ DEVIDE NO- BRANCH 02314000 LA R1,768 SET UP TO DEVIDE BY 3.0 (3330) 02315000 DEVIDE N R2,=X'0000FF00' ZERO OUT ALL BUT RECORD NO. 02316000 SL R2,=F'256' SUBTRACT BY ONE 02317000 SRDA R2,32 SLIDE RECORD NO INTO R3 02318000 DR R2,R1 DEVIDE THE RECORD NUMBER BY THE NUMBER X02319000 OF RECORDS PER TRACK. 02320000 STH R3,SKSERHH STORE THE TRACK NO 02321000 LA R1,DASDIOB POINT TO THE IOB 02322000 LA R2,WCCW1 GET ADD OF CCW STRING 02323000 BAL R5,STARTIO GO TO START IO ROUTINE 02324000 LM R1,R3,SAVEWREG RETURN REG 02325000 BR R14 02326000 SPACE 3 02327000 * THE STARTIO ROUTINE COMES HERE IN THE EVENT OF AN IO ERROR 02328000 * ON THE DASDIOB. 02329000 DASDERR TM IOBSTAT,IOBNOPER IS THE DEVICE NOT OPERATIONAL 02330000 BO ERROR54 YES- ERROR 02331000 CLI CPUID,X'FF' IS THIS A VIRTUAL MACHINE ? 02332000 BE BADERR YES, GET OUT 02333000 TM SENSE,X'2C' TEST FOR BUSOUT, DATA OR OVERRUN 02334000 BNZ SUB1 BRANCH IF ON 02335000 TM SENSE,X'01' SEEK CHECK ? 02336000 BZ MAYBTRKC NO, MAYBE TRACK CONDITION CHECK @V56BDA8 02337000 CL R2,=A(DASDERR1) IS THIS THE RECALIBRATE CCW 02338000 BE SUB1 YES- BRANCH 02339000 MVC DASDERR2+1(3),IOBCCW+1 CHAIN THE RECALIBRATE TO MY CCW 02340000 LA R2,DASDERR1 SET UP TO POINT TO THE ERROR CCW STRING 02341000 SUB1 L R4,DASDERCT PICK UP ERROR COUNT 02342000 BCT R4,RETURNER IS IT ZERO 02343000 BADERR OI DIRFLAG,ERROR YES- TURN ON THE ERROR BIT 02344000 BAL R5,ERROR55 PRINT OUT IO ERROR 02345000 B READ GO GET THE NEXT CARD 02346000 RETURNER ST R4,DASDERCT STORE ERROR COUNT 02347000 B RETRYIO RETRY THE SIO @V56BDA8 02348000 SPACE 1 02349000 MAYBTRKC TM SENSE,X'02' TRACK CONDITION CHECK? @V56BDA8 02350000 BZ BADERR NO, GET OUT @V56BDA8 02351000 TM DIRFLAG1,OUT3340 IS IT A 3340? @V56BDA8 02352000 BZ BADERR NO. @V56BDA8 02353000 SPACE 02354000 ST R5,ALTRECUR SAVE CALLER'S RETURN ADDRESS. @V56BDA8 02355000 IC R5,SENSE+6 COMPUTE CCHH OF DEFECTIVE TRACK @V56BDA8 02356000 * FROM SENSE DATA. NEED IT FOR SEEK IN 02357000 * RESTART CCWS. 02358000 SRL R5,5 ISOLATE 512 + 256. @V56BDA8 02359000 STC R5,ALTSKADD+2 STORE HIGH C AND SOME GARBAGE. @V56BDA8 02360000 NI ALTSKADD+2,X'03' GET RID OF THE GARBAGE. @V56BDA8 02361000 MVC ALTSKADD+3(1),SENSE+5 STORE LOW C. @V56BDA8 02362000 MVN ALTSKADD+5(1),SENSE+6 STORE LOW ORDER HEAD. @V56BDA8 02363000 L R2,IOBCSW FAILING CCW + 8. @V56BDA8 02364000 S R2,=F'8' GET ADDR OF FAILING CCW. @V56BDA8 02365000 STCM R2,7,ALTTIC+1 STORE IN TIC. @V56BDA8 02366000 LA R2,READHAR0 CCWS TO READ R0 (PTR TO ALT TRK).@V56BDA8 02367000 BAL R5,RETRYIO READ R0, THEN RETURN HERE. @V56BDA8 02368000 L R5,ALTRECUR RTN ADDR OF ORIG STARTIO CALLER. @V56BDA8 02369000 LA R2,ALTSEEK CCWS (SEEK TO ALTERNATE AND @V56BDA8 02370000 * SEARCH FOR BACKWARD POINTING R0) 02371000 * APPENDED IN FRONT OF FAILING CCW. 02372000 B STARTIO FIRST PART OF USERS CHAN PROG @V56BDA8 02373000 * RAN OKAY. RESTART 2ND PART AS IF IT WAS 02374000 * A NEW, SEPARATE, REQUEST. USERS RETURN 02375000 * ADDR IS IN R5. 02376000 EJECT 02377000 ***************************************************************** 02378000 *. 02379000 * ROUTINE TO ASSIGN A DASD PAGE ADDRESS 02380000 * 02381000 * 1. IF THE LAST DASD ADDRESS IN THIS CYL IS NOT USED 02382000 * GO TO STEP 3. 02383000 * 02384000 * 2. GET THE NEXT AVAILABLE CYLINDER, IF CYL ZERO SET DASD 02385000 * ADDRESS TO 3, ELSE SET TO ZERO. 02386000 * 02387000 * 3. ADD 1 TO DASD ADDRESS AND RETURN TO CALLER. 02388000 *. 02389000 ****************************************************************** 02390000 GETPAGE STM R3,R4,SAVEREGS SAVE REG 02391000 RET2 LH R3,MAXREC GET THE MAX RECORD COUNT 02392000 TESTFULL SR R4,R4 02393000 IC R4,PAGENUM PICK UP POINTER TO LAST PAGE USED 02394000 CLR R4,R3 WAS THE LAST PAGE USED 02395000 BL ADDONE NO- BRANCH 02396000 L R3,ALLOCATE POINT TO THE ALLOCATION TABLE 02397000 TM DIRFLAG,EDITMODE+ERROR ERROR OR EDIT FLAG ON @VA03013 02398000 BNZ EDITON2 YES- BRANCH 02399000 LH R4,RCCW7+6 Set up max size of the table HRC106DK 02400100 LOOP8 CLI 0(R3),X'04' IS THIS CYLINDER AVAILABUL 02401000 BE SETON YES- GO GET IT 02402000 CLI 0(R3),X'FF' IS THIS THE END OF THE LIST 02403000 LA R3,1(,R3) POINT TO THE NEXT BYTE 02404000 BE NOSPACE YES- BRANCH (END OF THE TABLE) 02405000 BCT R4,LOOP8 Loop up to 4096 times HRC106DK 02406100 NOSPACE BAL R5,ERROR60 GO PRINT THE ERROR 02407000 EDITON2 MVC DASDCYL(4),=X'3FFF0000' SET UP DUMMEY DASD ADD 02408000 B RET2 GO SET UP 02409000 SETON OI 0(R3),X'F0' ALLOCATE THIS CYL 02410000 SL R3,ALLOCATE CONVERT TO CYL NO 02411000 STH R3,DASDCYL POINT TO CYL NO 02412000 LA R4,3 SET R4 TO 3 (FIRST RECORD ON CYL 0) 02413000 TM DIRFLAG1,OUT3350+OUT3375+OUT3380 3350/75/80? HRC106DK 02414100 BZ SETON5 No, bypass 3350/3375/3380 init. HRC106DK 02414200 LA R4,4 INITIALIZE 1ST 3350 PAGE CYL 0 @V304498 02416000 SETON5 EQU * CONTINUE CYL 0 INITIALIZATION @V304498 02417000 LTR R3,R3 IS THIS CYL 0 02418000 BZ ADDONE YES- BRANCH 02419000 SR R4,R4 NO- SET TO 0 02420000 ADDONE LA R4,1(,R4) ADD ONE TO PAGE NUMBER 02421000 STC R4,PAGENUM POINT TO PAGE NUMBER 02422000 L R2,DASDCYL POINT TO PAGE 02423000 LM R3,R4,SAVEREGS RETURN REG 02424000 BR R14 02425000 EJECT 02426000 ***************************************************************** 02427000 *. 02428000 * ROUTINE TO SCAN CURRANT INPUT BUFFER FOR NEXT FIELD 02429000 * 02430000 * 1. IF END OF CARD, COL NUMBER 71, RETURN CC = 1. 02431000 * 02432000 * 2. FIND NEXT COLLUM NOT A COMMA OR BLANK, 02433000 * IF NONE RETURN CC = 1. 02434000 * 02435000 * 3. COUNT THE NUMBER OF CHARACTERS UNTIL THE NEXT 02436000 * BLANK. 02437000 * 02438000 * 4. RETURN CC = 0. 02439000 *. 02440000 ****************************************************************** 02441000 SCANCARD STM R3,R4,SAVEREGS SAVE REG 02442000 L R1,CURPOINT 02443000 SR R2,R2 SET COUNT TO ZERO 02444000 LH R3,CURCOUNT GET COUNT OF BYTES LEFT IN BUFFER 02445000 LTR R3,R3 IS IT ZERO 02446000 BZ SETCC1 YES END OF INPUT 02447000 LOOP5 CLI 0(R1),C' ' IS INPUT EQ BLANK 02448000 BNE UPDATE4 NO- BRANCH 02449000 UPDATE3 LA R1,1(,R1) UPDATE POINTER TO INPUT 02450000 BCT R3,LOOP5 BRANCH IF END OF CARD 02451000 B SETCC1 DO IT AGAIN 02452000 UPDATE4 TR 0(1,R1),UPCASE ALPHA TRANS - LOWER CASE => UPPER@VA12884 02453100 LA R2,1(,R1) POINT TO INPUT 02454000 BCT R3,LOOP6 DECREMENT CURCOUNT AND LOOP @VA03397 02455000 B SETCC0 SET CC=0 IF CURRENT COUNT ZERO @VA03397 02456000 LOOP6 CLI 0(R2),C' ' IS INPUT A BLANK 02457000 BE SETCC0 YES- BRANCH 02458000 TR 0(1,R2),UPCASE ALPHA TRANS - LOWER CASE => UPPER@VA12884 02459100 LA R2,1(,R2) POINT TO NEXT INPUT BYTE 02460000 BCT R3,LOOP6 DO IT AGAIN 02461000 SETCC0 ST R2,CURPOINT SET UP CURRANT POINTER 02462000 MVI 0(R2),C' ' SET DILIMITER TO BLANK 02463000 SR R2,R1 SET UP COUNT 02464000 TM *,X'00' SET CC = 0 02465000 RETURN STH R3,CURCOUNT SET UP REMAINING COUNT 02466000 LM R3,R4,SAVEREGS RETURN REG 02467000 BR R14 RETURN TO CALLER 02468000 SETCC1 TM *,X'FF' SET CC = 1 (NO INPUT) 02469000 ST R1,CURPOINT SET UP CURRANT POINTER 02470000 B RETURN 02471000 EJECT 02472000 ***************************************************************** 02473000 * 02474000 * SUBROUTINE TO CONVERT HEXADECIMAL DIGITS TO DECIMAL 02475000 * 02476000 ***************************************************************** 02477000 HEXCONV STM R3,R7,SAVEREGS SAVE REG @V407466 02478000 LR R6,R1 POINT TO BEGINNING OF OPERAND @V407466 02479000 LR R7,R2 LENGTH @V407466 02480000 SR R3,R3 02481000 LA R5,15 SET UP FOR AND 02482000 CONVERT TM 0(R1),X'F0' IS IT NUMERIC 02483000 BO NUMERIC YES- BRANCH 02484000 BZ ERROR51B NO, ERROR IF ALL BITS OFF @V407466 02485000 TM 0(R1),X'38' IS IT ALPHA 02486000 BNZ ERROR51B NO, ERROR IF BITS ON @V407466 02487000 TM 0(R1),X'07' IS IT G 02488000 BO ERROR51B YES, ERROR IF BITS ON @V407466 02489000 IC R4,0(R1) PICK UP ALPHA INPUT BYTE 02490000 LA R4,9(,R4) ADD 9 TO CONVERT FROM ALPHA INPUT 02491000 B SAVEIT 02492000 NUMERIC IC R4,0(,R1) PICK UP NUMERIC INPUT 02493000 SAVEIT NR R4,R5 ZERO OUT ZONE 02494000 SLL R3,4 SHIFT TO MAKE ROOM FOR INPUT 02495000 OR R3,R4 MOVE IN NUMERICS 02496000 LA R1,1(,R1) POINT AT THE NEXT INPUT BYTE 02497000 BCT R2,CONVERT DO IT TO EVERY INPUT BYTE 02498000 LR R2,R3 PLACE CONVERTED DATA INTO R2 02499000 LM R3,R7,SAVEREGS RETURN REGISTERS @V407466 02500000 BR R14 RETURN TO CALLER 02501000 SPACE 3 02502000 **************************************************************** 02503000 * 02504000 * SUBROUTINE TO CONVERT DECIMAL DIGITS TO BINARY 02505000 * 02506000 **************************************************************** 02507000 BINCONV STM R1,R3,SAVEREGS SAVE REGS 02508000 STM R6,R7,SAVEOPER SAVE CONTENTS OF R6 & R7 @V407466 02509000 LR R6,R1 SAVE POINT TO BEGIN OF OPERAND @V407466 02510000 LR R7,R2 FULL LENGTH OF OPERAND @V407466 02511000 LOOP9 TM 0(R1),X'F0' IS IT NUM 02512000 BNO ERROR51B NO - ERROR @V407466 02513000 LA R1,1(,R1) POINT TO THE NEXT BYTE 02514000 BCT R2,LOOP9 DO IT TO ALL INPUT 02515000 LM R1,R3,SAVEREGS RETURN REGS 02516000 BCTR R2,0 SUB 1 FROM COUNT 02517000 EX R2,PACK PACK DATA INTO WORK1 02518000 CVB R2,WORK1 SET UP DATA IN R2 02519000 LM R6,R7,SAVEOPER RESTORE ORIGINAL REGISTERS @V407466 02520000 BR R14 02521000 PACK PACK WORK1,0(1,R1) 02522000 EJECT 02523000 ***************************************************************** 02524000 * 02525000 * SUBROUTINE TO CONVERT DECIMAL DIGITS TO HEXADECIMAL 02526000 * 02527000 ***************************************************************** 02528000 DECCONV STM R3,R5,SAVEREGS SAVE REGS 02529000 BCTR R1,0 SET UP INPUT AND OUTPUT ADD 02530000 LA R3,0(R2,R2) DOBBLE THE COUNT 02531000 LA R3,0(R3,R1) ADD COUNT TO INPUT ADDRESS (ALSO OUTPUT) 02532000 SR R4,R4 02533000 LOOP4 IC R4,0(R2,R1) GET BYTE (INPUT + COUNT) 02534000 N R4,=F'15' ZERO OUT ALL BUT LAST 4 BITS 02535000 LA R5,DECTABLE(R4) POINT TO BYTE TO BE MOVED 02536000 MVC 0(1,R3),0(R5) MOVE IN BYTE 02537000 BCTR R3,0 POINT TO NEXT OUTPUT BYTE 02538000 IC R4,0(R2,R1) GET BYTE (INPUT + COUNT) 02539000 SRL R4,4 SET UP ZONE 02540000 LA R5,DECTABLE(R4) POINT AT BYTE TO BE MOVED 02541000 MVC 0(1,R3),0(R5) MOVE IN BYTE 02542000 BCTR R3,0 POINT TO NEXT OUTPUT BYTE 02543000 BCT R2,LOOP4 DO IT FOR ALL INPUT BYTES 02544000 LM R3,R5,SAVEREGS RETURN REG 02545000 BR R14 RETURN TO CALLER 02546000 SPACE 3 02547000 ***************************************************************** 02548000 * 02549000 * SUBROUTINE TO COMPARE KEYWORDS 02550000 * 02551000 ***************************************************************** 02552000 COMPARE BCTR R2,0 -1 02553000 EX R2,EXECOMP DO THE COMPARE 02554000 LA R2,1(,R2) +1 02555000 BR R14 RETURN WITH THE CC SET 02556000 EXECOMP CLC 0(0,R3),0(R1) COMPARE R1 TO R3 USING R2 02557000 EJECT 02558000 ****************************************************************** 02559000 *. 02560000 * MESSAGE WRITER SUBROUTINE 02561000 * 02562000 * 1. IF UNDER CMS USE SVC 202 ELSE SET 02563000 * UP THE CCW AND CALL STARTIO. 02564000 * 02565000 * 2. RETURN USING R5. 02566000 *. 02567000 ****************************************************************** 02568000 MSGWRITE CL R12,BAREMAC IS THIS A BARE MACHINE 02569000 BNE CMS5 02570000 LA R1,CONIOB POINT TO IOB 02571000 LH R3,0(,R2) MSG LENGTH INTO R3 @VA01388 02572000 LA R2,2(,R2) MSG TEXT ADDR INTO R2 @VA01388 02573000 CLI CPUID,X'FF' IS THIS A VIRTUAL MACHINE? @VA01388 02574000 BNE NODIAG NO, DON'T EDIT THE MSG @VA01388 02575000 CLC 0(3,R2),=C'DMK' IS THIS AN ERROR MSG? @VA01388 02576000 BNE NODIAG NO, DON'T EDIT THE MSG @VA01388 02577000 DC X'83',X'23',XL2'005C' YES, DO DIAGNOSE TO EDIT @VA01388 02578000 * MSG ACCORDING TO USER'S EMSG SETTING 02579000 LTR R3,R3 LENGTH OF 0 (I.E., EMSG OFF)? @VA01388 02580000 BCR 8,R5 YES, NO MSG TO SEND. JUST RETURN @VA01388 02581000 NODIAG ST R3,CONCCW+4 BUILD CCWS: LENGTH @VA01388 02582000 MVI CONCCW+4,X'60' CC + SILI @VA01388 02583000 ICM R2,8,=X'09' WRITE OP CODE @VA01388 02584000 ST R2,CONCCW * 02585000 MVC CONCCW1,SPACECCW * 02586000 LA R2,CONCCW * 02587000 B GRAPHID GO TO START I/O ROUTINE (RETURN @V200731 02588000 * ON R5) 02589000 CMS5 CLC 2(3,R2),=C'DMK' IS THIS AN ERROR MSG 02590000 BE CMSERMSG YES- GO TO ERROR MSG ROUTINE 02591000 LA R1,2(,R2) POINT TO THE MSG 02592000 LH R2,0(R2) GET THE LENGTH 02593000 CMS6 STCM R1,7,CONFCB+9 SET UP THE POINTER TO THE MSG IN THE FCB 02594000 STH R2,CONFCB+14 SET UP THE LENGTH ALSO 02595000 LA R1,CONFCB POINT TO THE FCB 02596000 SVC 202 GO TO CMS 02597000 DC AL4(ERROR2) ERROR RETURN 02598000 BR R5 RETURN TO THE CALLER 02599000 CMSERMSG LA R2,1(,R2) POINT TO A ONE BYTE COUNT AND TEXT 02600000 LINEDIT DISP=ERRMSG,TEXTA=(R2),RENT=NO,DOT=NO 02601000 BR R5 RETURN TO THE CALLER 02602000 PRINTBUF OI DIRFLAG,ERROR TURN ON ERROR BIT 02603000 L R1,CURBUF POINT TO THE CURRENT CARD BUFFER 02604000 LR R2,R1 * BUILD THE CONCOLE CCW 02605000 LA R2,79(,R2) * DO NOT PRINT TRAILING 02606000 LOOP7 CLI 0(R2),C' ' * BLANKS. IF BUFFER IS 02607000 BNE SETCOUNT * ALL BLANKS RETURN TO 02608000 BCT R2,LOOP7 * CALLER. (USING R5) 02609000 SETCOUNT SR R2,R1 * 02610000 LA R2,1(,R2) * 02611000 LTR R2,R2 * 02612000 BCR 12,R5 * 02613000 CL R12,BAREMAC * 02614000 BNE CMS6 * 02615000 ST R2,CONCCW+4 * 02616000 MVI CONCCW+4,SILI * 02617000 MVC CONCCW+1(3),CURBUF+1 * 02618000 MVI CONCCW,X'09' * 02619000 LA R1,CONIOB * 02620000 LA R2,CONCCW * 02621000 B GRAPHID GO TO START I/O ROUTINE (RETURN @V200731 02622000 * ON R14) 02623000 CONERROR EQU * @V200731 02624000 TM IOBCSW+4,ATTN IS THIS AN ATTENTION INTERRUPT ? @V200731 02625000 BNO CONUNITE NO, GO CHECK FOR UNIT EXECPTION @V200731 02626000 TM PARM,PARMGRP IS THE GRAPHIC SUPPORT ACTIVE ? @V200731 02627000 BZ CONUNITE NO, GO CLEAR CARD FLAG @V200731 02628000 TM PARM,PARMATT IS THIS A ATTENTION REQUEST ? @V200731 02629000 BCR 1,R5 YES, GO CHECK FOR ATTENTION @V200731 02630000 * INTERRUPT 02631000 CONUNITE EQU * @V200731 02632000 TM IOBCSW+4,UE IS THIS A UNIT EXECPTION ? @V200731 02633000 BO STARTIO YES- REPEAT 02634000 TM SENSE,X'80' COMMAND REJECT 02635000 BO EXIT YES - BAD BAD BAD @VA01388 02636000 ERRORCT L R4,CONERCT GET THE ERROR COUNT 02637000 BCT R4,RETCON IS IT ZERO 02638000 LA R5,EXIT YES- POINT TO EXIT ROUTINE 02639000 OI DIRFLAG,ERROR TURN ON ERROR FLAG 02640000 B ERROR55 PRINT OUT ERROR 02641000 RETCON ST R4,CONERCT SAVE COUNT 02642000 B IORETURN RETURN TO START IO ROUTINE 02643000 SPACE 3 02644000 ***** MESSAGE TABLE 02645000 SPACE 2 02646000 ERROR51B LR R1,R6 POINT TO BEGIN OF OPERAND @V407466 02647000 LR R2,R7 LENGTH INTO R2 @V407466 02648000 LM R6,R7,SAVEOPER RESTORE ORIG. R6 VALUE @V407466 02649000 ERROR51 MVI ERROR51A+39,C' ' * BLANK IT OUT 02650000 MVC ERROR51A+40(11),ERROR51A+39 * 02651000 CL R2,=F'12' IS IT OVER 12 02652000 BNH MOVE NO- BRANCH 02653000 LA R2,12 SET COUNT TO 12 02654000 MOVE MOVE ERROR51A+39 MOVE IN ERROR WORD 02655000 BAL R5,PRINTBUF PRINT OUT CARD 02656000 ERROR51A MSG 'DMKDIR751E INVALID OPERAND - XXXXXXXXXXXX',READ 02657000 USING UDIRBLOK,R15 @VA01066 02658000 ERROR52 L R15,DIRPTR ADDRESS LAST USER @VA01066 02659000 MVC ERROR52A+61(8),UDIRUSER MOVE IN LAST ID @VA01066 02660000 ERROR52A MSG 'DMKDIR752E STATEMENT SEQUENCE ERROR FOLLOWING USER XXXX*02661000 XXXX',ERROR52B @VA01066 02662000 ERROR52B TM DIRFLAG,FLUSH EOF PROCESSING? @VA01066 02663000 BZ ERROR52C NOPE, BUFFERS ARE OK AS IS @VA01066 02664000 L R5,CURBUF+4 SET BACK TO BAD RECORD @VA01066 02665000 ST R5,CURBUF FOR PRINTING @VA01066 02666000 ERROR52C BAL R5,PRINTBUF WRITE OUT BAD RECORD @VA01066 02667000 TM DIRFLAG,READEOF DID IT HAPPEN AT EOF? @VA01066 02668000 BO EXIT YES, FINISH UP @VA01066 02669000 B READ NO, CONTINUE WITH OUR BUSINESS @VA01066 02670000 DROP R15 @VA01066 02671000 ERROR53 BAL R5,PRINTBUF PRINT OUT ERROR CARD 02672000 MSG 'DMKDIR753E OPERAND MISSING',READ 02673000 ERROR54 OI DIRFLAG,ERROR TURN ON ERROR FLAG 02674000 STH R3,ERROR54A+26 SET UP FIELD TO BE CONVERTED 02675000 LA R1,ERROR54A+26 SET UP POINTER TO FIELD 02676000 LA R2,2 SET UP COUNT 02677000 BAL R14,DECCONV 02678000 ERROR54A MSG 'DMKDIR754E DEV XXXX NOT OPERATIONAL',EXIT 02679000 ERROR55 MVC ERROR55A+35(8),IOBCSW * SET UP THE CSW 02680000 LA R1,ERROR55A+35 * 02681000 LA R2,8 * 02682000 BAL R14,DECCONV * 02683000 STH R3,ERROR55A+26 * MOVE IN CONVERTED IO ADDRESS 02684000 LA R1,ERROR55A+26 * 02685000 LA R2,2 * 02686000 BAL R14,DECCONV * 02687000 LA R1,SNSWORK SET UP SENSE DATA @V2B3729 02688000 LA R2,32 NUMBER OF SENSE BYTES HRC011DK 02689590 MVC SNSWORK(32),SENSE MOVE IN SENSE DATA HRC011DK 02690180 BAL R14,DECCONV CONVERT SENSE DATA @V2B3729 02691000 MVC ERROR55A+58(12),SNSWORK SENSE TO MSG @V2B3729 02692000 MVC ERROR55B+6(52),SNSWORK+12 .. HRC011DK 02693490 CLI SNSCNT,2 ONLY 2 SENSE BYTES PRESENT ? @V2B3729 02694000 BNE WRMSG55 NO- @V2B3729 02695000 MVC ERROR55A+62(8),=C' ' BLANK LAST 4 BYTES @V2B3729 02696000 WRMSG55 ST R5,MSGRET SAVE RETURN ADDRESS @V2B3729 02697000 LA R5,MSG55B SET NEW RETURN ADDRESS @V2B3729 02698000 ERROR55A MSG 'DMKDIR755E IO ERROR XXXX CSW XXXXXXXXXXXXXXXX SENSE XXX*02699000 XXXXXXXXX' 02700000 MSG55B L R5,MSGRET RESTORE ORIGINAL RETURN ADDRESS @V2B3729 02701000 CLI SNSCNT,6 BYTE COUNT GREATER THAN 6 @V2B3729 02702000 BNHR R5 NO, RETURN TO CALLER @V2B3729 02703000 ERROR55B MSG 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' ,*02704290 ROOM FOR 32 SENSE BYTES HRC011DK 02704580 ERROR56 OI DIRFLAG,ERROR 02705000 MVC ERROR56A+41(8),PROOLD MOVE IN OLD PSW AND CONVERT 02706000 LA R1,ERROR56A+41 * IT TO DEC 02707000 LA R2,8 * 02708000 BAL R14,DECCONV * 02709000 ERROR56A MSG 'DMKDIR756E PROGRAM CHECK PSW = XXXXXXXXXXXXXXXX',EXIT 02710000 ERROR57 OI DIRFLAG,ERROR SET ON ERROR BIT 02711000 MSG 'DMKDIR757E MACHINE CHECK RUN SEREP AND SAVE OUTPUT FOR X02712000 CE',EXIT 02713000 ERROR58 BAL R5,PRINTBUF PRINT OUT THE CARD 02714000 MSG 'DMKDIR758E DUPLICATE UNIT DEFINITION',READ 02715000 ERROR60 OI DIRFLAG,ERROR TURN ON THE ERROR FLAG 02716000 MSG 'DMKDIR760E NOT ENOUGH SPACE ALLOCATED FOR DIRECTORY' 02717000 ERROR61 MVC ERROR61A+35(6),VOLLABLE+4 MOVE IN LABLE 02718000 MVC ERROR61A+46(6),DASDVSER THIS ONE TO 02719000 BAL R5,PRINTBUF PRINT INPUT BUFFER 02720000 ERROR61A MSG 'DMKDIR761E VOLID READ IS XXXXXX NOT XXXXXX',READ 02721000 ERROR62 MSG 'DMKDIR762E DIRECTORY STATEMENT MISSING',READ 02722000 ERROR63 MVC ERRORRET,=F'1' SET THE RETURN CODE TO 1 02723000 MSG 'DMKDIR763E INVALID FILENAME OR FILE NOT FOUND',MSG04 02724000 ERROR2 AL R15,=F'100' ADD 100 TO THE ERROR RETURN CODE 02725000 ERROR1 AL R15,=F'100' ADD 100 TO THE ERROR RETURN CODE 02726000 ST R15,ERRORRET 02727000 MVC ERROR64+30(8),0(R1) MOVE IN THE CMS ROUTINE NAME 02728000 ERROR64 MSG 'DMKDIR764E ERROR IN XXXXXXXX',EXIT 02729000 MSG01 MSG 'EOJ DIRECTORY UPDATED' 02730000 MSG02 MSG 'VM/370 USER DIRECTORY CREATION PROGRAM RELEASE 6',MSG02A 02731000 MSG02A MSG 'ENTER CARD READER DEVICE ADDRESS AND OPTIONS',MSGRET 02732000 MSG03 MSG 'EOJ DIRECTORY UPDATED AND ON LINE',TERM 02733000 MSG04 MSG 'EOJ DIRECTORY NOT UPDATED',TERM 02734000 EJECT 02735000 ****************************************************************** 02736000 *. 02737000 * EXIT HOUSEKEEPING ROUTINE 02738000 * 02739000 * 1. IF THE ERROR OR EDIT FLAG IS ON GO TO MSG04 . 02740000 * 02741000 * 2. MASK OFF THE LAST UDIR AND UMAC BLOCKS. 02742000 * 02743000 * 3. WRITE OUT ALL USED BUFFERS. 02744000 * 02745000 * 4. REWRITE THE VOL1 AND ALLOCATION RECORDS. 02746000 * 02747000 * 5. IF UNDER VM/370 USE DIAG 3C TO SWAP DIRECTORIES. 02748000 * 02749000 * 6. PRINT OUT THE PROPRE EOJ MSG. 02750000 * 02751000 * 7. IF NOT UNDER CMS LOAD A DISABLED PSW, ELSE 02752000 * SET UP CMS RETURN CODE AND RETURN TO CMS. 02753000 *. 02754000 ****************************************************************** 02755000 * FREE THE FAST I/O BUFFER IN ALL CASES IF UNDER CMS 02756050 EXIT DS 0H @VA09965 02756100 CL R12,BAREMAC UNDER REAL OR VIRT. BARE MACH.? @VA09965 02756150 BE FIOBF BR IF YES, DON'T FREE BUFFER @VA09965 02756200 FREEMAIN V,A=FIOGMANS @VA09965 02756250 SPACE 1 02756300 FIOBF TM DIRFLAG,ERROR+EDITMODE ERROR OR EDIT FLAG ON @VA09965 02756350 BNZ MSG04 YES- PRINT OUT ERROR MSG AND EXIT 02757000 USING UDIRBLOK,RDIR SETUP ADDRESSABILITY FOR UDIRBLOK@V200731 02758000 L RDIR,DIRPTR GET THE BUFFER ADDRESS FOR @V200731 02759000 * UDIRBLOK 02760000 XC UDIRUSER,MASK * MASK OFF THE UDIR AND 02761000 XC UDIRPASS,MASK * UMAC BLOCK'S 02762000 XC UMACBLOK+8(8),MASK * 02763000 XC UMACBLOK+16(8),MASK * 02764000 XC UMACBLOK+24(8),MASK * 02765000 XC UMACBLOK+32(8),MASK * 02766000 XC UMACBLOK+40(8),MASK * 02767000 SR RDIR,RDIRBUF SET UP POINTER TO LAST UDIRBLOK 02768000 STH RDIR,2(,RDIRBUF) STORE IT IN FIRST UDIRBLOK 02769000 ST RDIR,DIRPTR SAVE THE ADDRESS OF THE UDIRBLOK @V200731 02770000 DROP R15 DROP BASE REGISTER FOR UDIRBLOK @V200731 02771000 SR R1,R1 * ZERO OUT THE POINTER TO THE NEXT 02772000 ST R1,4(,RDIRBUF) * UDIR BUFFER 02773000 L R2,UDIRPAGE GET DASD ADD 02774000 LR R1,RDIRBUF GET BUFFER ADD 02775000 BAL R14,WRITE 02776000 L R2,UMACPAGE GET DASD ADD 02777000 LR R1,RMACBUF GET BUFFER ADD 02778000 BAL R14,WRITE 02779000 L R2,UDEVPAGE GET DASD ADD 02780000 LTR R2,R2 WAS IT USED 02781000 BZ SCANALLO YES- BRANCH 02782000 LR R1,RDEVBUF GET BUFFER ADD 02783000 BAL R14,WRITE 02784000 SCANALLO L R3,ALLOCATE 02785000 LOOP10 CLI 0(R3),X'0C' IS THIS CYLINDER ALLOCATED 02786000 BNE TESTF4 NO- BRANCH 02787000 MVI 0(R3),X'04' MARK THIS CYLINDER NOT ALLOCATED 02788000 TESTF4 CLI 0(R3),X'F4' IS THIS CYLINDER TEMPERALY ALLOCATED 02789000 BNE TESTFF NO- BRANCH 02790000 MVI 0(R3),X'0C' MARK THIS CYLINDER ALLOCATED 02791000 TESTFF CLI 0(R3),X'FF' IS THIS THE END OF THE TABLE 02792000 LA R3,1(,R3) POINT TO THE NEXT BYTE 02793000 BNE LOOP10 NO- LOOP 02794000 LA R1,DASDIOB POINT TO IOB 02795000 LA R2,RCCW1 POINT TO CCW STRING 02796000 MVI RCCW4,05 SET UP TO WRITE OUT VOL1 RECORD 02797000 MVI RCCW7,05 SET UP TO WRITE OUT ALLOCATION RECORD 02798000 BAL R5,STARTIO WRITE THEM OUT 02799000 CLI CPUID,X'FF' IS THIS A VIRTUAL MACHINE ? 02800000 BNE BARE NO, DON'T SWAP DIRECTORIES 02801000 LA R3,100 SET UP ERROR COUNT 02802000 LPSW CMSPSW SET PROTECTION KEY AND SYSTEM MASK *02803000 TO ZERO SO THAT CMS WILL NOT GET SICK *02804000 AND RETURN TO THE NEXT INSTRUCTION 02805000 MOVEPSW MVC SAVEPNEW(8),PRONEW SAVE THE PROGRAM CHECK NEW PSW *02806000 THE DIAG IO WILL PROGRAM CHECK IF THE *02807000 USER IS NOT CLASS A,B OR C 02808000 MVC PRONEW(8),RETPSW SET UP THE RETURN PSW 02809000 LM R1,R2,DASDVSER POINT TO THE VOLUME SERIAL NUMBER 02810000 LOOP11 DC X'8312003C' DIAG CALL TO VM/370 (USER DIRECTORY *02811000 DYNAMIC SWAP 'DMKUDRDS' ) 02812000 MVC PRONEW(8),SAVEPNEW RETURN THE PROGRAN NEW PSW 02813000 BC 3,RET6 VOLUNE NOT IN THE OWNDLIST OR IO ERROR *02814000 UNDER CP 02815000 BZ MSG03 PRINT MSG IF CC = 0 02816000 BCT R3,LOOP11 TRY 100 TIMES IF THE DIRECTORY IS LOCKED 02817000 LA R3,5 SET THE CMS RETURN CODE TO 5 02818000 B RETERROR 02819000 UNOTABC MVC PRONEW(8),SAVEPNEW RETURN THE PROGRAM NEW PSW THE USER *02820000 IS NOT CLASS A,B OR C 02821000 LA R3,4 SET THE CMS RETURM CODE TO 4 02822000 B RETERROR 02823000 RET6 LA R3,6 SET THE CMS RETURN CODE TO 6 02824000 RETERROR ST R3,ERRORRET SAVE THE CMS RETURN CODE 02825000 BARE BAL R5,MSG01 02826000 TERM CL R12,BAREMAC IS THIS UNDER CMS 02827000 BNE CMS8 YES- BRANCH 02828000 LPSW SVCNEW STOP!!! 02829000 CMS8 EQU * 02830000 LA R1,INFCB POINT TO THE FCB 02831000 MVC 0(8,R1),=CL8'FINIS' CLOSE THE INPUT FILE 02832000 SVC 202 02833000 DC AL4(*+4) NO ERROR RETURN 02834000 LM R14,R15,CMSSAVE GET THE RETURN ADDRESS AND CODE 02835000 LTR R15,R15 DID I HAVE AN ERROR 02836000 BCR 7,R14 YES- RETURN WITH IT 02837000 TM DIRFLAG,ERROR DID I HAVE AN ERROR IN THE CMS X02838000 INPUT FILE 02839000 BCR 14,R14 NO- RETURN TO CMS 02840000 LA R15,2 SET RETURN CODE TO 2 02841000 BR R14 RETURN TO CMS 02842000 EJECT 02843000 LTORG 02844000 EJECT 02845000 DECTABLE DC C'0123456789ABCDEF' 02846000 DS 0H @V60A6B6 02847000 ADDR1 DC X'5B5F' LINE 22 COL 80 @V60A6B6 02848000 ADDR2 DC X'5D6B' LINE 24 COL 60 @V60A6B6 02849000 ADDR3 DC X'D65F' LINE 18 COL 80 @V60A6B6 02850000 ADDR4 DC X'D86B' LINE 20 COL 60 @V60A6B6 02851000 ADDR5 DC X'4040' INITIAL AREA FOR CURSOR CHECK @V60A6B6 02852000 ADDR6 DC X'5B60' LINE 23 COL 01 @V60A6B6 02853000 ADDR7 DC X'D660' LINE 19 COL 01 @V60A6B6 02854000 MAXLEN DC F'0000' @V60A6B6 02855000 LEN3270 DC F'1760' SCREEN SIZE FOR 24 LINE CONSOLE @V60A6B6 02856000 LEN3278 DC F'1440' SCREEN SIZE FOR 20 LINE CONSOLE @V60A6B6 02857000 BLANK DC C' ' 02858000 DIRFLAG DC X'00' 02859000 ATTNINT EQU X'80' AN ATTENTION INTERRUPT WAS RECEVED 02860000 ERROR EQU X'40' ERROR BIT 02861000 EDITMODE EQU X'20' EDIT MODE 02862000 OUT2314 EQU X'10' OUTPUT UNIT IS A 2314 OR A 2319 02863000 OUT3330 EQU X'08' OUTPUT UNIT IS A 3330 OR 2305 02864000 READEOF EQU X'04' END IF FILE ON CARD READER 02865000 SPECID EQU X'02' SPECIAL USERID FOUND @VM08715 02866000 FLUSH EQU X'01' LAST BUFFER HAS BEEN FLUSHED @VA01066 02867000 SPACE 02868000 DIRFLAG1 DC X'00' DIRECT FLAG BYTE TWO @V2A2029 02869000 OUT3340 EQU X'80' OUTPUT UNIT IS A 3340 @V2A2029 02870000 OUT3350 EQU X'40' OUTPUT UNIT IS A 3350 @V304498 02871000 OUT3375 EQU X'20' Output unit is a 3375 HRC106DK 02871100 OUT3380 EQU X'10' Output unit is a 3380 HRC106DK 02871200 SPACE 02872000 SPACE 02873000 MODETABL DC C'R ',AL1(UDEVR) MODE TABLE @V407466 02874000 DC C'W ',AL1(UDEVW) @V407466 02875000 DC C'M ',AL1(UDEVM) @V407466 02876000 DC C'RR ',AL1(UDEVRR) @V407466 02877000 DC C'WR ',AL1(UDEVWR) @V407466 02878000 DC C'MR ',AL1(UDEVMR) @V407466 02879000 DC C'MW ',AL1(UDEVMW) @V407466 02880000 DC C'RV ',AL1(UDEVR) @V407466 02881000 DC C'WV ',AL1(UDEVW) @V407466 02882000 DC C'MV ',AL1(UDEVM) @V407466 02883000 DC C'RRV',AL1(UDEVRR) @V407466 02884000 DC C'WRV',AL1(UDEVWR) @V407466 02885000 DC C'MRV',AL1(UDEVMR) @V407466 02886000 DC C'MWV',AL1(UDEVMW) @V407466 02887000 VOLID DC CL6'VOLID ' @VA11371 02888010 RONLY DC CL4'R/O ' @VA11371 02888020 VIRTC DC CL6'3330V ' @VA11371 02888030 FONE DC F'1' @V60B6B8 02890000 SPACE 02891000 MAXREC DC H'57' MAX RECORD COUNT(DEFAULT - 3330) @VA03013 02892000 CNOP 2,4 02893000 SKSERID DC X'0000' 02894000 SKSERCC DC X'0000' 02895000 SKSERHH DC X'0000' 02896000 SKSERR DC X'0000' 02897000 VOLSKSR DC X'00000000000003' 02898000 ALLSKSR DC X'00000000000004' 02899000 DASDERCT DC F'50' 02900000 CONERCT DC F'5' 02901000 BAREMAC DC A(DMKDIRCT+2-DMKDIR) 02902000 CMSSAVE DC A(0) 02903000 ERRORRET DC A(0) 02904000 DASDVSER DC CL6' ' OUTPUT VOL SER NO 02905000 SENSE DC XL32'0' SENSE AREA HRC011DK 02906590 SNSWORK DC XL67'0' SENSE WORK AREA HRC011DK 02907180 SNSCNT DC X'00' NUMBER OF SENSE BYTES PRESENT @V2B3729 02908000 SENRET DC F'0' RETURN ADDRESS OF CALLER @V2B3729 02909000 WORK1 DS 1D 02910000 DIRPTR DC A(0) SAVE ADDRESS OF UDIRBLOK @V200731 02911000 SAVEREGS EQU * 02912000 POINTERS DC A(BUFFER1) 02913000 DC A(BUFFER2) 02914000 DC A(BUFFER3) 02915000 SAVEOPER DC 1F'0' POINTER TO OPERAND BEGIN @V407466 02916000 SAVELEN DC 1F'0' POINTER TO OPERAND LENGTH @V407466 02917000 SAVENAME DC 1F'0' 02918000 SAVERET DC 1F'0' 02919000 SAVEERR DC 5F'0' 02920000 SAVEWREG DC 3F'0' 02921000 CTCASAVE DC 2F'0' 02922000 REGSAVE DS 4F @VA02180 02923000 F4096 DC F'4096' @VA02180 02924000 ALTRECUR DS F ALTERNATE TRACK R5 SAVEAREA 02925000 ALTSKAD2 DC XL6'0' 00CCHH ADDR OF ALTERNATE TRACK.@V56BDA8 02926000 ALTSKADD DC XL7'0' 00CCHH0 ADDR OF DEFECTIVE TRACK.@V56BDA8 02927000 DS 0D 02928000 EJECT 02929000 ********************************************************************** 02930000 * GRAPHIC SUPPORT CCWS 02931000 ********************************************************************** 02932000 CRTWORD CCW X'27',SBACP,SILI+CC,2 SET BAR TO (STATUS WORD) @V200731 02933000 CCW X'01',CPXYSTAT,SILI+CC,20 WRITE 'RUNNING' ON @V200731 02934000 * SCREEN 02935000 CCW X'27',SBAREAD,SILI+CC,2 SET BUFFER ADDR FOR @V200731 02936000 * WRITE 02937000 CCW X'01',BLNKZERO,SILI+CC,140 CLEAR INPUT AREA @VM08604 02938000 CURS3066 CCW X'0F',SBAREAD,SILI+CC,2 REPOSITION CURSOR @V200731 02939000 CCW X'03',*-*,SILI,3 END OF READ CCW STRING @V200731 02940000 SPACE 2 02941000 CRTWORD1 CCW X'01',LAB3270A,SILI+CC,LEN THE CONTROL DATA @VM08630 02942000 CCW X'03',*-*,SILI,2 @V200731 02943000 SPACE 2 02944000 REQREAD CCW X'27',SBACP,SILI+CC,2 SET BUFFER ADDR TO CP X-Y @V200731 02945000 CCW X'01',CPXYSTAT,SILI+CC,20 WRITE SCREEN STATUS @V200731 02946000 CCW X'08',CURS3066,SILI,1 RESET CURSOR POSITION @V200731 02947000 SPACE 2 02948000 REQREAD1 CCW X'01',LAB3270B,SILI+CC,LEN1 THE CONTROL DATA @VM08630 02949000 CCW X'03',*-*,SILI,2 @V200731 02950000 SPACE 2 02951000 ERSE3066 CCW X'07',*-*,SILI+CC,1 ERASE ENTIRE SCREEN @V200731 02952000 WRTCRTXY CCW X'27',SBADDR,SILI+CC,2 SET CORRECT LINE IN @V200731 02953000 * BUFFER 02954000 WRT3066 CCW X'01',*-*,SILI+CC,140 WRITE OUT USER DATA @V200731 02955000 CCW X'08',CRTWORD,SILI,1 NOW DISPLAY STATUS @V200731 02956000 SPACE 2 02957000 ERSE3270 CCW X'05',LAB3270E,SILI+CD,LEN3 ERASE THE SCREEN @V200731 02958000 CCW X'00',CPXYSTAT,SILI+CC,20 WRITE SCREEN STATUS @V200731 02959000 WRTCRT70 CCW X'01',LAB3270,SILI+CD,4 THE CONTROL DATA @V200731 02960000 WRTCR70 CCW X'00',*-*,SILI+CD,0 THE WRITE CCW @V200731 02961000 CCW X'00',LAB3270A+1,SILI+CC,LEN-1 WRITE SCREEN @V200731 02962000 * STATUS 02963000 CCW X'03',*-*,SILI,2 @V200731 02964000 SPACE 2 02965000 RDMI3066 CCW X'0E',RDMIDATA,SILI+CC,3 READ CCW FOR MI COMMAND@V200731 02966000 RD3066 CCW X'27',SBAREAD,SILI+CC,2 SET BUFFER ADDR FOR READ@V200731 02967000 RD3066DA CCW X'06',*-*,SILI+CC,140 READ INPUT DATA @V200731 02968000 CCW X'08',CURS3066,SILI,1 REPOSITION CURSOR @V200731 02969000 SPACE 2 02970000 RDMI3270 CCW X'01',LAB3270D,SILI+CC,4 @V200731 02971000 RD3270DA CCW X'06',*-*,SILI+CC,0 THE CCW FOR READ @V200731 02972000 CCW X'03',*-*,SILI,2 @V200731 02973000 SPACE 2 02974000 CNCL3270 CCW X'01',LAB3270E,SILI+CD,LEN3 THE CONTROL DATA @V200731 02975000 CCW X'00',CPXYSTAT,SILI+CC,20 WRITE SCREEN STATUS @V200731 02976000 CCW X'03',*-*,SILI,2 @V200731 02977000 SPACE 2 02978000 CNCL3066 CCW X'07',*-*,SILI+CC,1 ERASE SCREEN @V200731 02979000 CCW X'08',CRTWORD,SILI,1 NOW DISPLAY STATUS @V200731 02980000 SPACE 2 02981000 MORECCW1 CCW X'01',LAB3270C,SILI+CC,LEN2 THE CONTROL DATA @V200731 02982000 CCW X'03',*-*,SILI,2 @V200731 02983000 SPACE 2 02984000 ********************************************************************** 02985000 * FIRST DC ARE ADDRESSES FOR LINES 1 -6 02986000 * SECOND DC ARE ADDRESSES FOR LINES 17 - 12 02987000 * THIRD DC ARE ADDRESSES FOR LINES 13 - 18 02988000 * FOURTH DC ARE ADDRESSES FOR LINES 19 - 24 02989000 ********************************************************************* 02990000 SPACE 2 02991000 TABLE70 DS 0D @V200731 02992000 DC X'4040C150C260C3F0C540C650' @V200731 02993000 DC X'C760C8F04A404B504C604DF0' @V200731 02994000 DC X'4F405050D160D2F0D440D550' @V200731 02995000 DC X'D660D7F0D9405A505B605CF0' @V200731 02996000 SPACE 2 02997000 TABLGRAP EQU * @V200731 02998000 DC X'0A',AL3(READ66) ADDRESS OF THE READ SECTION @V200731 02999000 DC X'01',AL3(WRT66) ADDRESS OF THE WRITE SECTION @V200731 03000000 DC X'09',AL3(WRT66) ADDRESS OF THE WRITE SECTION @V200731 03001000 DC X'05',AL3(WRT66) ADDRESS OF THE WRITE SECTION @V200731 03002000 DC X'03',AL3(RETWORD) ADDRESS OF THE RETURN SECTION@V200731 03003000 SPACE 2 03004000 * X'5B60' - LINE 23, COL. 1 03005000 * X'5D6A' - LINE 24, COL. 59 03006000 SPACE 2 03007000 ********************************************************************** 03008000 WC6 EQU X'C2' WRITE CONTROL BIT 6 @V200731 03009000 AT7 EQU X'C1' ATTRIBUTE BIT 7 @V200731 03010000 AT2 EQU X'E0' ATTRIBUTE BIT 2 @V200731 03011000 LAC EQU X'C0' @V200731 03012000 SF EQU X'1D' START OF FIELD CONTROL @V200731 03013000 SBA EQU X'11' SET BUFFER ADDRESS @V200731 03014000 IC EQU X'13' INSERT CURSOR @V200731 03015000 EUA EQU X'12' ERASE UNPROTECTED @V200731 03016000 RA EQU X'3C' REPEAT TO ADDRESS @V200731 03017000 V EQU C'V' VIRTUAL RESERVE/RELEASE @V407466 03018000 SPACE 2 03019000 LAB3270A DC AL1(WC6),AL1(SBA),X'5B60',AL1(SF),AL1(AT7) @V200731 03020000 DC AL1(IC),AL1(EUA),X'5D6B',AL1(SF),AL1(AT2) @V200731 03021000 RUNLABEL DC CL20'RUNNING' @V200731 03022000 LEN EQU *-LAB3270A @V200731 03023000 LAB3270B DC AL1(WC6),AL1(SBA),X'5B60',AL1(SF),AL1(AT7) @V200731 03024000 DC AL1(IC),AL1(SBA),X'5D6B',AL1(SF),AL1(AT2) @V200731 03025000 REALABEL DC CL20'CP READ' @V200731 03026000 LEN1 EQU *-LAB3270B @V200731 03027000 LAB3270C DC AL1(WC6),AL1(SBA),X'5D6B',AL1(SF),AL1(AT2) @V200731 03028000 MORLABEL DC CL20'HOLDING' @V200731 03029000 LEN2 EQU *-LAB3270C @V200731 03030000 LAB3270D DC AL1(LAC),AL1(SBA),X'5B60' @V200731 03031000 LAB3270 DC AL1(WC6),AL1(SBA),X'0000' @V200731 03032000 LAB3270E DC AL1(WC6),AL1(SBA),X'4040',AL1(RA),X'5B60',X'00' @V200731 03033000 DC AL1(SF),AL1(AT7),AL1(IC),AL1(SBA) @V200731 03034000 DC X'5D6B',AL1(SF),AL1(AT2) @V200731 03035000 LEN3 EQU *-LAB3270E @V200731 03036000 SPACE 2 03037000 ********************************************************************* 03038000 PARM DC X'00' THE GRAPHIC FLAG BYTE @V200731 03039000 PARMATT EQU X'80' ATTENTION REQUEST @V200731 03040000 PARMGRP EQU X'40' GRAPHIC SUPPORT @V200731 03041000 PARMREA EQU X'20' READ REQUEST @V200731 03042000 PARMCLE EQU X'10' CLEAR/ERASE REQUEST @V200731 03043000 PARM327 EQU X'08' 3270 GRAPHIC @V200731 03044000 PARMNDA EQU X'04' NO DATA INDICATED @V200731 03045000 PARM01F EQU X'02' 01F REQUESTED @V200731 03046000 PARM321 EQU X'01' 3215/3210/1052 @V200731 03047000 ********************************************************************** 03048000 SPACE 2 03049000 ********************************************************************* 03050000 SBADDR DC AL1(00,00) CURRENT OUTPUT LINE COORDINATES @V200731 03051000 * FOR THE 03052000 * 3066 03053000 SBACP DC AL1(34,60) COORDINATES FOR SCREEN 'STATUS' @V200731 03054000 * WORD 03055000 SBAREAD DC AL1(33,00) COORDINATES FOR CURSOR POSITION @V200731 03056000 RDMIDATA DC XL6'00' READ DATA FROM 'MI' COMMAND @V200731 03057000 CPXYSTAT DC CL20' ' SCREEN 'STATUS' WORD @V200731 03058000 BLNKLINE DC XL140'00' CLEAR INPUT AREA FOR DATA @VM08604 03059000 BLNKZERO DC CL140' ' BLANKS FOR READ AREA @VM08604 03060000 GRAPHSAV DC 8F'00' SAVE AREA FOR GRAPHIC SUPPORT @V200731 03061000 SAVEAREA DC 2F'00' SAVE AREA FOR GRAPHIC DATA @V200731 03062000 * REGISTERS 03063000 ********************************************************************* 03064000 SAVEPNEW DC D'0' SAVE AREA FOR THE PROGRAN NEW PSW 03065000 RETPSW DC X'00040000',A(UNOTABC) PROGRAM CHECK RETURN PSW 03066000 MASK DC XL8'AAAAAAAAAAAAAAAA' 03067000 CONWAIT DC X'FF06000000' 03068000 DC AL3(CONRET) 03069000 IOWPSW DC X'FF06000000' 03070000 DC AL3(TESTSTAT) 03071000 CMSPSW DC X'00040000' 03072000 DC A(MOVEPSW) 03073000 READCCW CCW 2,READBUF1,X'20',80 03074000 CONCCW CCW X'09',MSG02+6,X'60',44 03075000 CONCCW1 CCW X'0A',READBUF1,X'20',72 03076000 SNSE4CCW CCW X'E4',SENSE,SILI,7 HRC106DK 03076100 SENSECCW CCW 04,SENSE,SILI,32 HRC011DK 03077490 SPACECCW CCW X'09',BLANK,X'20',1 03078000 CONCCWR CCW X'0A',READBUF1,X'20',72 03079000 WCCW1 CCW 7,SKSERID,CC,6 03080000 WCCW2 CCW 49,SKSERID+2,CC,5 03081000 WCCW3 CCW 8,WCCW2,CC,1 03082000 WCCW4 CCW 5,BUFFER1,0,4096 03083000 RCCW1 CCW 7,VOLSKSR,CC,6 03084000 RCCW2 CCW 49,VOLSKSR+2,CC,5 03085000 RCCW3 CCW 8,RCCW2,CC,1 03086000 RCCW4 CCW 6,VOLLABLE,CC,80 03087000 RCCW5 CCW 49,ALLSKSR+2,CC,5 03088000 RCCW6 CCW 8,RCCW5,CC,1 03089000 RCCW7 CCW 6,ALLOCBUF,0,1024 03090000 DASDERR1 CCW 19,0,CC+SILI,1 03091000 DASDERR2 CCW 08,*-*,0,0 03092000 READHAR0 CCW 07,ALTSKADD,CC,6 SEEK @V56BDA8 03093000 CCW 26,0,CC+SILI+SKIP,5 READ HA @V56BDA8 03094000 CCW 22,ALTSKAD2+2,SILI,4 READ R0 @V56BDA8 03095000 ALTSEEK CCW 07,ALTSKAD2,CC+SILI,6 SEEK (TO ALTERNATE) @V56BDA8 03096000 CCW 49,ALTSKADD+2,CC+SILI,5 SEARCH ID EQ (VERIFY @V56BDA8 03097000 * BACKWARD POINTING R0) 03098000 CCW 08,*-8,0,0 TIC *-8 @V56BDA8 03099000 ALTTIC CCW 08,*-*,0,0 TIC @V56BDA8 03100000 CONFCB DC CL8'TYPLIN' 03101000 DC AL1(1) 03102000 DC AL3(0) 03103000 DC CL1'B' 03104000 DC X'00' 03105000 DC AL2(0) 03106000 CPUID DC 1F'0' 03107000 CPUMODEL DC 1F'0' 03108000 INFCB DC CL8'STATE' 03109000 DC CL8'USER' 03110000 DC CL8'DIRECT' 03111000 DC CL2'* ' 03112000 DC H'0' 03113000 INFCBUF DC F'0' 03114000 DC F'80' 03115000 DC CL2'F' 03116000 DC H'1' 03117000 DC F'0' 03118000 READIOB DC X'8060' STOP ON ERROR AND REPEAT CCW 03119000 READADD DC X'000C' 03120000 DC A(READCCW) 03121000 DC A(READERR) 03122000 DC 2F'00' 03123000 DASDIOB DC X'8060' WAIT FOR DEVICE END 03124000 DASDADD DC X'0000' 03125000 DC A(0) 03126000 DC A(DASDERR) 03127000 DC 2F'0' 03128000 CONIOB DC X'A000' LAST IOB 03129000 CONADD DC X'0009' 03130000 DC A(CONCCW) 03131000 DC A(SETUPERR) 03132000 DC 2F'0' 03133000 CMDTABLE DC CL8'ABCDEFGH' 03134000 DC XL8'8040201008040201' 03135000 LASTCARD DC XL4'00' 03136000 CURRCARD DC XL4'00' 03137000 NEXTCARD DC XL4'00' 03138000 CURPOINT DC A(0) POINTER TO CURRANT SCAN LINE 03139000 CURCOUNT DC AL2(0) COUNT OF BYTES NOT SCANED IN CURRANT BUFF 03140000 CURBUF DC A(READBUF1) POINTER TO THE CURRANT INPUT BUFFER 03141000 NEXTBUF DC A(READBUF2) POINTER TO THE NEXT INPUT BUFFER 03142000 DIRSIZE DC AL4(UDIRSIZE*8) 03143000 UDIRPAGE DC A(0) THE DASD ADDRESS OF THE BUFFER PAGE 03144000 UMACPAGE DC A(0) THE DASD ADDRESS OF THE BUFFER PAGE 03145000 UDEVPAGE DC A(0) THE DASD ADDRESS OF THE BUFFER PAGE 03146000 READBUF1 DC CL80' ' CARD INPUT BUFFER 03147000 READBUF2 DC CL80' ' CARD INPUT BUFFER 03148000 VOLLABLE DC CL80' ' 03149000 ALLOCATE DC A(ALLOCBUF) 03150000 DASDCYL DC X'0000' 03151000 PAGENUM DC X'FF' 03152000 DEVCODE DC X'00' 03153000 SPACE 03153005 * DEVICE NAMES 03153010 NAM3138 DC CL8'3138' GRAPHIC DISPLAY ==> 3138 @VA11551 03153015 NAM3148 DC CL8'3148' GRAPHIC DISPLAY ==> 3148 @VA11551 03153020 SPACE 2 03153040 * CONTROL DATA FOR FAST I/O 03153080 SPACE 1 03153120 FIOMNMX DC F'800' MINIMUM BUFFER SIZE (BYTES) @VA09965 03153160 DC F'12000' MAXIMUM BUFFER SIZE (BYTES) @VA09965 03153200 FIOGMANS DS 0F @VA09965 03153240 FIOGMAD DC F'0' BUFFER ADDR RETURNED BY GETMAIN @VA09965 03153280 FIOGMSZ DC F'0' BUFFER SIZE ALLOCATED (BYTES) @VA09965 03153320 SPACE 1 03153360 FIORSAV DC 3F'0' SAVE AREA FOR R2 TO R4 @VA09965 03153400 FIORECCT DC F'0' RECORD COUNT (NO. RECORDS READ) @VA09965 03153440 FIOCURPT DC F'0' CURRENT RECORD POINTER @VA09965 03153480 FIOCURCT DC F'0' CURRENT RECORD COUNT @VA09965 03153520 SPACE 1 03153560 FIOFLAGS DC X'00' FAST I/O FLAGS @VA09965 03153600 FIOEOF EQU X'80' FAST I/O EOF @VA09965 03153640 FIOINIT EQU X'40' FAST I/O INIT. (DONE IF ON) @VA09965 03153680 SPACE 1 03153720 * FAST I/O FCB 03153760 FIOFCB FSCB 'USER DIRECT *' @VA09965 03153800 SPACE 3 03154000 SPACE 2 03154040 *********************************************************************** 03154080 * TRANSLATE LOWER CASE ALPHABET CHARACTERS TO UPPER CASE * 03154120 *********************************************************************** 03154160 UPCASE DC X'000102030405060708090A0B0C0D0E0F' X'00'-X'0F' @VA12884 03154200 DC X'101112131415161718191A1B1C1D1E1F' X'10'-X'1F' @VA12884 03154240 DC X'202122232425262728292A2B2C2D2E2F' X'20'-X'2F' @VA12884 03154280 DC X'303132333435363738393A3B3C3D3E3F' X'30'-X'3F' @VA12884 03154320 DC X'404142434445464748494A4B4C4D4E4F' X'40'-X'4F' @VA12884 03154360 DC X'505152535455565758595A5B5C5D5E5F' X'50'-X'5F' @VA12884 03154400 DC X'606162636465666768696A6B6C6D6E6F' X'60'-X'6F' @VA12884 03154440 DC X'707172737475767778797A7B7C7D7E7F' X'70'-X'7F' @VA12884 03154480 DC X'80C1C2C3C4C5C6C7C8C98A8B8C8D8E8F' X'80'-X'8F' @VA12884 03154520 DC X'90D1D2D3D4D5D6D7D8D99A9B9C9D9E9F' X'90'-X'9F' @VA12884 03154560 DC X'A0A1E2E3E4E5E6E7E8E9AAABACADAEAF' X'A0'-X'AF' @VA12884 03154600 DC X'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF' X'B0'-X'BF' @VA12884 03154640 DC X'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF' X'C0'-X'CF' @VA12884 03154680 DC X'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF' X'D0'-X'DF' @VA12884 03154720 DC X'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF' X'E0'-X'EF' @VA12884 03154760 DC X'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF' X'F0'-X'FF' @VA12884 03154800 DS 0D 03155000 ENTRY DMKDIRED 03156000 SPACE 03157000 DMKDIRED EQU * END OF THE LOAD MODULE FOR CMS 03158000 SPACE 2 03159000 ORG DMKDIR+12288 BUFFERS USED TO BUILD DIRECTORY @V200731 03160000 SPACE 03161000 BUFFER1 DS XL4096 03162000 BUFFER2 DS XL4096 03163000 BUFFER3 DS XL4096 03164000 SPACE 1 03165000 ALLOCBUF DS XL4096 HRC106DK 03166100 SPACE 3 03167000 BUFFSIZE EQU (*-DMKDIRED)/8 SIZE OF BUFFER WORK AREA 03168000 EJECT 03169000 IOB DSECT 03170000 IOBSTAT DS X'80' STATUS OF IOB 03171000 IOBOPT DS 1X IOB FLAGS 03172000 IOBUADD DS 1H UNIT ADDRESS OF DEVICE 03173000 IOBCCW DS 1F POINTER TO CCW 03174000 IOBERROR DS A ADDRESS OF IO ERROR ROUTINE 03175000 IOBCSW DS 2F CSW OF IO ERROR STACKED 03176000 IOBSIZE EQU *-IOB LENGTH OF IOB. @V56BDA8 03177000 SPACE 03178000 * BITS USED IN IOBOPT 03179000 IOBDEW EQU X'80' WAIT FOR DEVICE END INTERRUPT 03180000 IOBERST EQU X'40' STOP ON IOERROR AND WAIT FOR NEXT INT 03181000 IOBEEXIT EQU X'20' REPEAT CCW ON ERROR 03182000 SPACE 03183000 * BITS USED IN IOBSTAT 03184000 IOBST EQU X'80' IO UNIT IS TO BE STARTED 03185000 IOBSTACK EQU X'40' IOERROR HAS BEEN STACKED 03186000 IOBLAST EQU X'20' LAST IOB 03187000 IOBNOPER EQU X'10' DEVICE IS NOT OPERATIONAL 03188000 SPACE 2 03189000 NAMETABL DSECT 03190000 NAMEFLAG DS X'00' FLAGS 03191000 NAMETYPC DS X'00' DEVICE CODE 03192000 NAMETYPE DS X'00' DEVICE TYPE 03193000 NAMEFTR DS X'00' DEVICE FEATURE CODE 03194000 NAME DS CL8 NAME OF DEVICE OR ROUTINE 03195000 NAMESIZE EQU *-NAMETABL 03196000 ORG NAMETYPC 03197000 NAMEROUT DS AL3 ADDRESS OF ROUTINE 03198000 SPACE 03199000 * BITS USED IN NAMEFLAG 03200000 NAMELAST EQU X'80' LAST ENTRY IN TABLE 03201000 NAMECON EQU X'40' ENTRY IS A CONSTANT 03202000 SPACE 03203000 SPACE 1 03206100 FSCBD @VA09965 03206200 EJECT 03207000 COPY UDIRECT 03208000 COPY EQU 03209000 COPY DEVTYPES 03210000 COPY RBLOKS HRC106DK 03210100 END DMKDIRCT 03211000