MACRO ICD00010
ICDATA &GEN=FAKE ICD00020
AIF ('&GEN' EQ 'REAL').REALA ICD00030
ICDATA DSECT ICD00040
AGO .CONTA ICD00050
.REALA ANOP ICD00060
ICDATA DS 0D ICD00070
.CONTA ANOP ICD00080
*********************************************************************** ICD00090
* START OF ICATS COMMON DATA AREA * ICD00100
*********************************************************************** ICD00110
* ICD00120
*********************************************************************** ICD00130
* BALR ADDRESSES OF COMMON SUBROUTINES * ICD00140
*********************************************************************** ICD00150
LCLC &ICA ICD00160
AIF ('&GEN' EQ 'REAL').REALB ICD00170
&ICA SETC 'V' ICD00180
AGO .CONTB ICD00190
.REALB ANOP ICD00200
&ICA SETC 'A' ICD00210
.CONTB ANOP ICD00220
.* ICD00230
*********************************************************************** ICD00240
* COMMON SERVICE SUBROUTINES AVAILABLE TO ALL ROUTINES * ICD00250
*********************************************************************** ICD00260
AREADRCB DC V(READRCB) READ REQUEST CONTROL BLOCK FROM UTS ICD00270
AREADUTS DC V(READUTS) READ DATA FROM THE UTS ICD00280
AWRITUTS DC V(WRITEUTS) WRITE DATA TO THE UTS ICD00290
AINTUTS DC V(INTERUTS) PROVIDE AN ASYNCHRONOUS INTERRUPT TO A UTS ICD00300
ATERMIO DC V(DOTERMIO) DO AN I/O OPERATION TO A DIALED TERMINAL ICD00310
AMESSAGE DC V(MESSAGE) GIVE A MESSAGE TO A VM USER ID OR CONSOLE ICD00320
AACCESS DC V(ACCESS) FIND AND ACCESS A DISK ICD00330
AETTE DC V(ETTE) ENTER A TRACE TABLE ENTRY ICD00340
APARSE DC V(PARSE) PARSE A CHARACTER STRING INTO PARM0-PARM15 ICD00350
ACONHEX DC V(CONHEX) CONVERT A HEX EBCDIC PARM TO HEX ICD00360
ACONEHEX DC V(CONEHEX) CONVERT A NUMBER TO EBCDIC HEX CHARACTERS ICD00370
ACONDEC DC V(CONDEC) CONVERT A DECIMAL EBCDIC PARM TO HEX ICD00380
AREJECT DC V(REJECT) SEND A COMMAND REJECTION NOTICE ICD00390
DC F'0' EXTRA ICD00400
SPACE 3 ICD00410
DS 0D PSW'S MUST BE DOUBLEWORD ALIGNED ICD00420
WAITPSW DC X'FFE600000F' ENABLED WAIT STATE PSW POINTING ICD00430
DC &ICA.L3(DISPATCH) TO THE TOP OF THE DISPATCHER ICD00440
UTSCCW DS D CCW FOR ICATS I/O ICD00450
SMSGVMID DC CL8' ' VM USER ID OF THIS SMSG I'M SERVICING ICD00460
ABUFFER DC X'00030000' ADDRESS OF READ/WRITE BUFFER ICD00470
LBUFFER DC X'00030088' LENGTH OF READ/WRITE BUFFER ICD00480
* BIG ENOUGH TO READ 3 65535-BYTE RECORDS IN VARIABLE ICD00490
* LENGTH OUTPUT FORMAT (3 * ((65535+1) + 2)) + 2 + 128) ICD00500
REALBUFL DC X'00040087' MORE LENGTH FOR EXCESS RECORDS ICD00510
MYNODEID DS CL8 NODE ID OF THE VM SYSTEM I'M ON ICD00520
MYVMUID DS CL8 MY USER ID (ICATS) ICD00530
NETVMUID DS CL8 USER ID OF THE NET VIRTUAL MACHINE ICD00540
DS 10D RESERVED FOR FUTURE EXPANSION ICD00550
DS 0D THE SMSG BUFFER MUST BE DOUBLEWORD ALIGNED ICD00560
SMSGBUFF DS CL169 SMSG BUFFER AREA. CMS WILL PUT ICD00570
* ALL INCOMING SMSG'S HERE. ICD00580
SENSE0 DS X'00' SENSE BYTE FOR UTS ICD00590
CBSTART DC &ICA.(CBCHAIN) BEGINNING OF CONTROL BLOCKS ICD00600
TERM1ST DC F'0' FIRST TERMINAL CONTROL BLOCK ICD00610
CBFIRST DC F'0' FIRST UTS CONTROL BLOCK ICD00620
CBNEXT DC &ICA.(CBCHAIN) NEXT AVAILABLE BYTE IN CBCHAIN ICD00630
AIF ('&GEN' EQ 'REAL').REALC ICD00640
CBEND DS F USED TO CHECK FOR OUT OF MEMORY ICD00650
AGO .CONTC ICD00660
.REALC ANOP ICD00670
CBEND DC A(CBCHAIN+(1000*8)) USED TO CHECK FOR OUT OF MEMORY ICD00680
.CONTC ANOP ICD00690
SPACE 2 ICD00700
CURRSMSG DC &ICA.(SMSGBUFR) CURRENT (OR NEXT) SMSG TO PROCESS ICD00710
NEXTSMSG DC &ICA.(SMSGBUFR) SPOT FOR NEXT SMSG THAT COMES IN ICD00720
FRSTSMSG DC &ICA.(SMSGBUFR) ADDRESS OF FIRST SMSG BUFFER ICD00730
AIF ('&GEN' EQ 'REAL').REALD ICD00740
LASTSMSG DS F ADDRESS OF LAST SMSG BUFFER ICD00750
AGO .CONTD ICD00760
.REALD ANOP ICD00770
LASTSMSG DC A(SMSGBUFR+10*139-139) ADDRESS OF LAST SMSG BUFFER ICD00780
.CONTD ANOP ICD00790
SPACE 2 ICD00800
FIRSTTTE DC &ICA.(TRACETBL) ICD00810
AIF ('&GEN' EQ 'REAL').REALE ICD00820
LASTTTE DS F FIRST BYTE PAST END OF TRACE TABLE ICD00830
AGO .CONTE ICD00840
.REALE ANOP ICD00850
LASTTTE DC A(TRACETBL+512*16) FIRST BYTE PAST END OF TRACE TABLE ICD00860
.CONTE ANOP ICD00870
NEXTTTE DC &ICA.(TRACETBL) ALWAYS POINTING TO THE NEXT ICD00880
* AVAILABLE BYTE IN TRACE TABLE ICD00890
DS 0F ICD00900
CURRLEN DC CL2' ' CURRENT SMSG OR CONSOLE COMMAND LENGTH ICD00910
CURRTEXT DC CL130' ' CURRENT SMSG OR CONSOLE COMMAND TEXT ICD00920
SPACE 3 ICD00930
* ICD00940
ALL EQU X'FF' USED TO TURN OFF BITS ICD00950
* LIKE THIS --> NI FLAGA,ALL-TRACE ICD00960
DISPTTE DC AL1(DISPTTEE-*-1) START OF DISPATCHER TRACE TABLE ENTRY ICD00970
DISPTYPE DS CL7 TYPE OF DISPATCH CALL (CONSOLE, UTS, OR SMSG) ICD00980
FLAGA DC X'00' ICATS PROGRAM FLAG ICD00990
UTSINT EQU X'80' A UTS MACHINE HAS REQUESTED SERVICE ICD01000
ENDPGM EQU X'40' TIME TO QUIT AFTER THIS COMMAND ICD01010
TERMINT EQU X'08' WE'VE GOTTEN A TERMINAL INTERRUPT ICD01020
* ICD01030
FLAGB DC X'00' ANOTHER ICATS PROGRAM FLAG ICD01040
CONSCMD EQU X'80' I'M SERVICING A CONSOLE COMMAND ICD01050
SMSGCMD EQU X'40' I'M SERVICING AN SMSG COMMAND ICD01060
UTSCMD EQU X'20' I'M SERVICING A UTS COMMAND ICD01070
* ICD01080
FLAGC DC X'00' YET ANOTHER ICATS PROGRAM FLAG ICD01090
TRACEMOD EQU X'80' TRACE MODE - ENTER TRACE TABLE ICD01100
* ENTRIES IF THIS BIT IS ON ICD01110
INETTE EQU X'40' WE ARE IN THE ETTE ROUTINE ICD01120
NORESCMD EQU X'20' THIS IS A NON-RESIDENT COMMAND ICD01130
* (I.E. YOU MUST RESTORE LOADER COUNT) ICD01140
FAKEINT EQU X'10' THIS IS A FAKE UTS INTERRUPT ICD01150
* ICD01160
TEST0108 DC X'00' ICATS TEST FLAGS 1 - 8 ICD01170
TEST1 EQU X'80' ICD01180
TEST2 EQU X'40' ICD01190
TEST3 EQU X'20' ICD01200
TEST4 EQU X'10' ICD01210
TEST5 EQU X'08' ICD01220
TEST6 EQU X'04' ICD01230
TEST7 EQU X'02' ICD01240
TEST8 EQU X'01' ICD01250
* ICD01260
TEST0916 DC X'00' ICATS TEST FLAGS 9 - 16 ICD01270
TEST9 EQU X'80' ICD01280
TEST10 EQU X'40' ICD01290
TEST11 EQU X'20' ICD01300
TEST12 EQU X'10' ICD01310
TEST13 EQU X'08' ICD01320
TEST14 EQU X'04' ICD01330
TEST15 EQU X'02' ICD01340
TEST16 EQU X'01' ICD01350
* ICD01360
TEST1724 DC X'00' ICATS TEST FLAGS 17 - 24 ICD01370
TEST17 EQU X'80' ICD01380
TEST18 EQU X'40' ICD01390
TEST19 EQU X'20' ICD01400
TEST20 EQU X'10' ICD01410
TEST21 EQU X'08' ICD01420
TEST22 EQU X'04' ICD01430
TEST23 EQU X'02' ICD01440
TEST24 EQU X'01' ICD01450
* ICD01460
TEST2532 DC X'00' ICATS TEST FLAGS 25 - 32 ICD01470
TEST25 EQU X'80' ICD01480
TEST26 EQU X'40' ICD01490
TEST27 EQU X'20' ICD01500
TEST28 EQU X'10' ICD01510
TEST29 EQU X'08' ICD01520
TEST30 EQU X'04' ICD01530
TEST31 EQU X'02' ICD01540
TEST32 EQU X'01' ICD01550
* ICD01560
TEST3340 DC X'00' ICATS TEST FLAGS 33 - 40 ICD01570
TEST33 EQU X'80' ICD01580
TEST34 EQU X'40' ICD01590
TEST35 EQU X'20' ICD01600
TEST36 EQU X'10' ICD01610
TEST37 EQU X'08' ICD01620
TEST38 EQU X'04' ICD01630
TEST39 EQU X'02' ICD01640
TEST40 EQU X'01' ICD01650
* ICD01660
TEST4148 DC X'00' ICATS TEST FLAGS 41 - 48 ICD01670
TEST41 EQU X'80' ICD01680
TEST42 EQU X'40' ICD01690
TEST43 EQU X'20' ICD01700
TEST44 EQU X'10' ICD01710
TEST45 EQU X'08' ICD01720
TEST46 EQU X'04' ICD01730
TEST47 EQU X'02' ICD01740
TEST48 EQU X'01' ICD01750
* ICD01760
TEST4956 DC X'00' ICATS TEST FLAGS 49 - 56 ICD01770
TEST49 EQU X'80' ICD01780
TEST50 EQU X'40' ICD01790
TEST51 EQU X'20' ICD01800
TEST52 EQU X'10' ICD01810
TEST53 EQU X'08' ICD01820
TEST54 EQU X'04' ICD01830
TEST55 EQU X'02' ICD01840
TEST56 EQU X'01' ICD01850
* ICD01860
TEST5764 DC X'00' ICATS TEST FLAGS 57 - 64 ICD01870
TEST57 EQU X'80' ICD01880
TEST58 EQU X'40' ICD01890
TEST59 EQU X'20' ICD01900
TEST60 EQU X'10' ICD01910
TEST61 EQU X'08' ICD01920
TEST62 EQU X'04' ICD01930
TEST63 EQU X'02' ICD01940
TEST64 EQU X'01' ICD01950
* ICD01960
TEST6572 DC X'00' ICATS TEST FLAGS 65 - 72 ICD01970
TEST65 EQU X'80' ICD01980
TEST66 EQU X'40' ICD01990
TEST67 EQU X'20' ICD02000
TEST68 EQU X'10' ICD02010
TEST69 EQU X'08' ICD02020
TEST70 EQU X'04' ICD02030
TEST71 EQU X'02' ICD02040
TEST72 EQU X'01' ICD02050
* ICD02060
TEST7380 DC X'00' ICATS TEST FLAGS 73 - 80 ICD02070
TEST73 EQU X'80' ICD02080
TEST74 EQU X'40' ICD02090
TEST75 EQU X'20' ICD02100
TEST76 EQU X'10' ICD02110
TEST77 EQU X'08' ICD02120
TEST78 EQU X'04' ICD02130
TEST79 EQU X'02' ICD02140
TEST80 EQU X'01' ICD02150
* ICD02160
TEST8188 DC X'00' ICATS TEST FLAGS 81 - 88 ICD02170
TEST81 EQU X'80' ICD02180
TEST82 EQU X'40' ICD02190
TEST83 EQU X'20' ICD02200
TEST84 EQU X'10' ICD02210
TEST85 EQU X'08' ICD02220
TEST86 EQU X'04' ICD02230
TEST87 EQU X'02' ICD02240
TEST88 EQU X'01' ICD02250
* ICD02260
TEST8996 DC X'00' ICATS TEST FLAGS 88 - 96 ICD02270
TEST89 EQU X'80' ICD02280
TEST90 EQU X'40' ICD02290
TEST91 EQU X'20' ICD02300
TEST92 EQU X'10' ICD02310
TEST93 EQU X'08' ICD02320
TEST94 EQU X'04' ICD02330
TEST95 EQU X'02' ICD02340
TEST96 EQU X'01' ICD02350
* ICD02360
DS 0F ICD02370
THISUSER DS CL8 UTS USER ID I'M CURRENTLY SERVICING ICD02380
THISUTS DS F UTSCB ADDRESS OF THE UTS I'M NOW SERVICING ICD02390
THISDISK DS CL1 USER'S DISK ACCESS MODE I'M CURRENTLY DOING ICD02400
* ICD02410
CNOP 6,8 MAKE PARM0-PARM15 DOUBLEWORD ALIGNED ICD02420
DC X'00' ICD02430
PARMMSG DC X'80' PARM0-PARM15 LENGTH FOR MESSAGES ICD02440
PARM0 DC CL8' ' ICD02450
PARM1 DC CL8' ' ICD02460
PARM2 DC CL8' ' ICD02470
PARM3 DC CL8' ' ICD02480
PARM4 DC CL8' ' ICD02490
PARM5 DC CL8' ' ICD02500
PARM6 DC CL8' ' ICD02510
PARM7 DC CL8' ' ICD02520
PARM8 DC CL8' ' ICD02530
PARM9 DC CL8' ' ICD02540
PARM10 DC CL8' ' ICD02550
PARM11 DC CL8' ' ICD02560
PARM12 DC CL8' ' ICD02570
PARM13 DC CL8' ' ICD02580
PARM14 DC CL8' ' ICD02590
PARM15 DC CL8' ' ICD02600
DISPTTEE EQU * END OF DISPATCHER TRACE TABLE ENTRY ICD02610
* ICD02620
SMSGNTRY DSECT USED TO ADDRESS THE SMSG QUEUE (SMSGBUFR) ICD02630
SMSGUID DS CL8 SMSG VM USER ID (I.E. C'JASPER') ICD02640
SMSGLEN DS CL2 SMSG LENGTH (I.E. X'0004') ICD02650
SMSGTEXT DS CL129 SMSG TEXT (I.E. C'TRACE ON') ICD02660
* ICD02670
CBUTS DSECT LIST OF UTS MACHINES I'M SERVICING ICD02680
CBUTSUID DS CL8 UTS UNIQUE ID (EBCDIC) ICD02690
CBUTSFP DS F FORWARD POINTER TO NEXT CBUTS ICD02700
CBUTSUP DS F POINTER TO USER CB CHAIN ICD02710
CBUTSRAD DS H THIS UTS'S REAL ADDRESS ICD02720
CBUTSVAD DS H MY VIRTUAL ADDRESS FOR THIS UTS ICD02730
CBUTSFGA DS X'00' UTS FLAG A ICD02740
ONLINE EQU X'80' I'M VARIED ONLINE AND ATTACHED ICD02750
INTISIN EQU X'40' INTERRUPT IS IN ICD02760
IGOTIT EQU X'20' I'M GETTING SERVICED ICD02770
CBUTSFGB DS X'00' UTS FLAG B ICD02780
CBUTSCSW DS H LAST CSW STATUS FOR THIS UTS ICD02790
CBUTSRQS DS H NUMBER OF REQUESTS FROM THIS UTS ICD02800
CBUTSRD DS H NUMBER OF DATA READS FROM THIS UTS ICD02810
CBUTSWRT DS H NUMBER OF DATA WRITES TO THIS UTS ICD02820
CBUTSERR DS H NUMBER OF ERRORS ASSOCIATED WITH THIS UTS ICD02830
CBUTSDAT DS D DATE OF LAST INTERRUPT FROM THIS UTS ICD02840
CBUTSTIM DS D TIME OF LAST INTERRUPT FROM THIS UTS ICD02850
CBUTXTRA DS D EXTRA DOUBLEWORD FOR FUTURE EXPANSION ICD02860
* ICD02870
CBUSER DSECT USER LIST FOR THIS UTS ICD02880
CBUSRUID DS CL8 UTS USER ID (EBCDIC) ICD02890
CBUSRFP DS F FORWARD POINTER TO NEXT CBUSER ICD02900
CBUSRDP DS F POINTER TO USER DISK CB CHAIN ICD02910
CBUSRFGA DS X'00' USER FLAG A ICD02920
CBUSRFGB DS X'00' USER FLAG B ICD02930
CBUSRFGC DS X'00' USER FLAG C ICD02940
CBUSRFGD DS X'00' USER FLAG D ICD02950
CBUSRRQS DS H NUMBER OF REQUESTS FROM THIS USER ICD02960
CBUSRRD DS H NUMBER OF DATA READS FROM THIS USER ICD02970
CBUSRWRT DS H NUMBER OF DATA WRITES TO THIS USER ICD02980
CBUSRERR DS H NUMBER OF ERRORS ASSOCIATED WITH THIS USER ICD02990
CBUSRFID DS X'00' USER FILE ID FOR READING IN SOURCE FORMAT ICD03000
CBUSXTRA DS CL7 EXTRA 6 BYTES FOR FUTURE EXPANSION ICD03010
* ICD03020
CBDISK DSECT DISK DEFINITION FOR THIS UTS USER ICD03030
CBDSKMOD DS CL1 USER'S ACCESS MODE (EBCDIC) ICD03040
CBDSKDAD DS CL3 MY REAL MINIDISK ADDRESS (EBCDIC) ICD03050
CBDSKFP DS F POINTER TO NEXT CBDISK IN THIS CHAIN ICD03060
CBDSKRPW DS CL8 USER'S READ PASSWORD FOR THIS DISK ICD03070
CBDSKWPW DS CL8 USER'S WRITE PASSWORD FOR THIS DISK ICD03080
CBDSKFGA DS X'00' DISK FLAG A ICD03090
CBDSKFGB DS X'00' DISK FLAG B ICD03100
CBDSKFGC DS X'00' DISK FLAG C ICD03110
CBDSKFGD DS X'00' DISK FLAG D ICD03120
CBDSKRQS DS H NUMBER OF REQUESTS FROM THIS DISK ICD03130
CBDSKRD DS H NUMBER OF DATA READS FROM UTS FOR THIS DISK ICD03140
CBDSKWRT DS H NUMBER OF DATA WRITES FROM UTS FOR THIS DISK ICD03150
CBDSKERR DS H NUMBER OF ERRORS ASSOCIATED WITH THIS DISK ICD03160
CBDSXTRA DS D EXTRA DOUBLEWORD FOR FUTURE EXPANSION ICD03170
* ICD03180
CBTERM DSECT DIAL-ABLE TERMINAL CONTROL BLOCK ICD03190
CBTERMFP DS F POINTER TO NEXT CBTERM IN THIS CHAIN ICD03200
CBTERMST DS CL4 SESSION TERMINATE STRING FOR THIS TERMINAL ICD03210
CBTERMCS DS D CHANNEL STATUS WORD OF LAST INTERRUPT ICD03220
CBTERMHA DS X'0000' THIS TERMINAL'S VIRTUAL ADDRESS (HEX) ICD03230
CBTERMEA DS CL3 SAME THING IN EBCDIC ICD03240
CBTERMFA DS X'00' TERMINAL FLAG A ICD03250
MENUUP EQU X'80' MENU SCREEN IS NOW UP ICD03260
* INTISIN EQU X'40' INTERRUPT IS IN ICD03270
* IGOTIT EQU X'20' I'M GETTING SERVICED ICD03280
PLUGGED EQU X'10' HE'S LOGICALLY PLUGGED IN TO A UTS ICD03290
*AIDVALID EQU X'08' THE FIRST BYTE IN THE READ MODIFIED ICD03300
* BUFFER (THE AID BYTE) HAS NOT BEEN ICD03310
* PASSED ALONG TO THE UTS YET. ICD03320
DATAVALD EQU X'04' DATA IN READ MODIFIED BUFFER IS VALID ICD03330
TTLVALID EQU X'02' TERMINAL LINE LENGTH VALUE IS VALID ICD03340
CBTERMDC DS H NUMBER OF VALID BYTES IN READ MODIFIED BUFFER ICD03350
CBTERMUP DS F ADDRESS OF UTSCB THIS TERMINAL IS PLUGGED TO ICD03360
CBTERMSN DS X'00' SENSE BYTE DATA FROM LAST SENSE COMMAND ICD03370
DS X'00' EXTRA BYTE ICD03380
CBTERMLL DS H PHYSICAL LINE LENGTH FOR THIS TERMINAL ICD03390
CBTERMDA DS D DATE OF LAST INTERRUPT (IF ANY) ICD03400
CBTERMTI DS D TIME OF LAST INTERRUPT (IF ANY) ICD03410
CBTERMRQ DS H NUMBER OF REQUESTS FROM THIS TERMINAL ICD03420
CBTERMRD DS H NUMBER OF DATA READS FROM UTS FOR THIS TERMINAL ICD03430
CBTERMWR DS H NUMBER OF DATA WRITES FROM UTS FOR THIS TERMINAL ICD03440
CBTERMER DS H NUMBER OF ERRORS ASSOCIATED WITH THIS TERMINAL ICD03450
CBTERMEX DS F EXTRA FULLWORD FOR FUTURE EXPANSION ICD03460
CBTERMRM DS CL100 READ MODIFIED BUFFER FOR THIS TERMINAL ICD03470
* ICD03480
&SYSECT CSECT ICD03490
PUSH PRINT ICD03500
* DON'T GET EXCITED. YOU'RE ONLY MISSING THE REGEQU MACRO EXPANSION ICD03510
PRINT NOGEN ICD03520
REGEQU ICD03530
POP PRINT ICD03540
&SYSECT CSECT ICD03550
MEND ICD03560