TITLE 'ICATS FAKE A READ-A-REQUEST-CONTROL-BLOCK-FROM-A-UTS ROUTINE' FAK00010 *********************************************************************** FAK00020 * * FAK00030 * MODULE NAME = FAKE UTS READ REQUEST CONTROL BLOCK * FAK00040 * * FAK00050 * FUNCTION = SIMULATE A REQUEST CONTROL BLOCK READ FROM A UTS * FAK00060 * BY READING DATA FROM THE CMS FILE ICATS REQUEST A. * FAK00070 * THIS ROUTINE READS THE FIRST 16 LINES AND PUTS * FAK00080 * THE FIRST 8 CHARACTERS OF EACH LINE WHERE THE * FAK00090 * CALLER WANTED THE DATA. * FAK00100 * * FAK00110 * ENTRY POINTS = FAKERRCB * FAK00120 * * FAK00130 * LINKAGE = THE UTS COMMAND DISPATCHER IN THE ICATS MAINLINE * FAK00140 * IS JUST STARTING TO DISPATCH THIS UTS REQUEST, AND * FAK00150 * WANTS TO GET THE REQUEST CONTROL BLOCK FROM THE UTS. * FAK00160 * BUT, THIS REQUEST DIDN'T COME FROM A REAL UTS, * FAK00170 * IT CAME FROM A FAKE INTERRUPT VIA THE FAKIT COMMAND. * FAK00180 * THE CALLER DID THIS * FAK00190 * LA R0,XXX BUFFER LENGTH * FAK00200 * LA R1,BUFFER BUFFER ADDRESS (PARM0) * FAK00210 * L R15,AREADRCB * FAK00220 * BALR R14,R15 * FAK00230 * TO GET TO THE UTS I/O ROUTINE AND THE UTS I/O * FAK00240 * ROUTINE DETERMINED THIS WAS A FAKE INTERRUPT, SO * FAK00250 * IT DID THIS * FAK00260 * L R15,FAKERRCB * FAK00270 * BALR R14,R15 * FAK00280 * TO GET TO ME. * FAK00290 * * FAK00300 * REGISTER CONTENTS UPON ENTRY = * FAK00310 * R0 = THE LENGTH OF THE INPUT BUFFER. THIS SHOULD BE A * FAK00320 * MULTIPLE OF 8. * FAK00330 * R1 = THE BUFFER ADDRESS. * FAK00340 * R2 = POINTS TO THE ICATS COMMON DATA AREA AS ALWAYS. * FAK00350 * R14 = RETURN ADDRESS BACK TO THE UTS I/O ROUTINE. * FAK00360 * R15 = ADDRESS OF THIS SUBROUTINE (USED FOR BASE REG). * FAK00370 * * FAK00380 * REGISTER CONTENTS UPON EXIT = * FAK00390 * R15 = 0 = EVERYTHING WENT OK. * FAK00400 * OR R15 = 4 = THE FILE ICATS REQUEST A DOES NOT EXIST. * FAK00410 * * FAK00420 * REGISTER USAGE: * FAK00430 * R0 = FREE * FAK00440 * R1 = FREE * FAK00450 * R2 = ICATS COMMON DATA AREA BASE REGISTER (ICDATA) * FAK00460 * R3-R7 = FREE * FAK00470 * R8 = BUFFER ADDRESS POINTER. WHERE TO PUT THE NEXT 8 BYTES. * FAK00480 * R9 = FREE * FAK00490 * R10 = USED TEMPORARILY TO HOLD THE RETURN CODE * FAK00500 * R11 = BASE REGISTER FOR THIS ROUTINE * FAK00510 * R12-R13 = FREE * FAK00520 * R14 = RETURN ADDRESS FOR WHEN I CALL SUBROUTINES * FAK00530 * R15 = SUBROUTINE ADDRESS * FAK00540 * * FAK00550 * MODULE LOGIC = * FAK00560 * I) XXXXXX * FAK00570 * 1) XXXXXX * FAK00580 * A) XXXXXX * FAK00590 * B) XXXXXX * FAK00600 * C) XXXXXX * FAK00610 * * FAK00620 * NORMAL EXIT = * FAK00630 * R15 = 0 * FAK00640 * * FAK00650 * EXTERNAL REFERENCES = NONE * FAK00660 * * FAK00670 * CONTROL BLOCKS = ICDATA (ICATS COMMON DATA AREA) * FAK00680 * * FAK00690 * NON-STANDARD MACROS (FOUND IN ICATS MACLIB) * FAK00700 * ICDATA = ICATS COMMON DATA AREA DSECT. * FAK00710 * * FAK00720 * CHANGE ACTIVITY * FAK00730 * DATE NAME REASON FOR CHANGE * FAK00740 * 04/21/83 RICK JASPER BROKEN AWAY FROM ICATS MAINLINE INTO * FAK00750 * SEPARATE SUBROUTINE * FAK00760 * * FAK00770 *********************************************************************** FAK00780 EJECT FAK00790 PRINT GEN,NODATA FAK00800 FAKERRCB CSECT FAK00810 USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA FAK00820 USING FAKERRCB,R15 USE R15 FOR NEXT INSTRUCTION ONLY FAK00830 STM R0,R14,UTSIOREG SAVE CALLERS REGISTERS FAK00840 DROP R15 FAK00850 USING FAKERRCB,R11 USE R11 FOR THIS ROUTINE'S BASE REG FAK00860 LR R11,R15 SWITCH BASE REGISTER TO R11 FAK00870 LR R7,R0 SAVE BUFFER LENGTH FAK00880 LR R8,R1 SAVE BUFFER ADDRESS FAK00890 FSOPEN 'ICATS REQUEST A' FAK00900 LTR R15,R15 CHECK FOR FILE-DOES-NOT-EXIST FAK00910 BNZ RCBNONE NOPE, FILE'S NOT THERE FAK00920 RCBREAD DS 0H FAK00930 SH R7,=H'8' QUIT READING IF WE'RE OUT OF FAK00940 BM RCBCONT ROOM IN CALLER'S BUFFER FAK00950 FSREAD 'ICATS REQUEST A',BUFFER=RCBINBUF,BSIZE=80 FAK00960 LTR R15,R15 SEE IF END-OF-FILE YET FAK00970 BNZ RCBCONT YEP, WE'RE DONE HERE FAK00980 MVC 0(8,R8),RCBINBUF MOVE IN THE FIRST 8 BYTES ONLY FAK00990 LA R8,8(R8) POINT TO NEXT PARM AREA FAK01000 B RCBREAD READ IN THE NEXT LINE FAK01010 RCBCONT LA R10,0 RETURN CODE = 0 = EVERYTHING'S GREAT FAK01020 FSCLOSE 'ICATS REQUEST A' FAK01030 RCBBYE LR R15,R10 TRANSFER RETURN CODE FAK01040 LM R0,R14,UTSIOREG FAK01050 BR R14 BYE FAK01060 * FAK01070 RCBNONE WRTERM 'GIVE ME THE ICATS REQUEST FILE ON MY A-DISK' FAK01080 LA R10,4 RC = 4 = ICATS REQUEST A DOES NOT EXIST FAK01090 B RCBBYE FAK01100 * FAK01110 UTSIOREG DS 15F FAK01120 RCBINBUF DS CL80 FAK01130 LTORG FAK01140 ICDATA FAK01150 END FAK01160