ASMB,C,Q HED RFAM * SINGLE DCB - RFA MONITOR * (C) HEWLETT-PACKARD CO. 1980 NAM RFAM,19,30 91750-16164 REV.2013 800721 ALL SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 2 **************************************************************** * * SINGLE DCB VERSION OF RFA MONITOR * * NAME: RFAM * SOURCE: 91750-18164 * RELOC: 91750-16164 * PGMR: DAN GIBBONS * *************************************************************** SPC 2 EXT #ATCH,DTACH EXT EXEC,#GET,#SLAV,$OPSY EXT APOSN,CLOSE,FCONT,CREAT,LOCF,NAMF EXT OPEN,POSNT,PURGE,READF,FSTAT,RWNDF EXT WRITF,#NODE,#RFSZ EXT .MVW,.CMW,.CAX,.DSX,.LDX,.SBX,.ISX EXT #RPB RQB EQU #RPB SUP * BUFSZ EQU 129 MAXIMUM DATA BUFFER * SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 791213 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, DINIT, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * DSTIO, LUMAP, #CMGT, INCNV, OTCNV, RMTIO * * RSM, DLGON, #DISM, #DSSM, #MSSM, #SCSM, #UPSM * ****************************************************************** * ***!!!!! THE ORDER OF THE FIRST 8 WORDS (#STR THRU #LVL) IS * ***!!!!! FIXED BY THE REQUIREMENT THAT THE STREAM, ADDRESSES * ***!!!!! ERROR CODES & LEVEL # ALWAYS BE IN THE SAME PLACE, * ***!!!!! REGARDLESS OF MESSAGE FORMAT. THIS ALSO MAKES * ***!!!!! STORE-AND-FORWARD CODE MUCH SIMPLER. * #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) * #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP * RFBLK-START * ****************************************************************** * * * R F A B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 RFA MESSAGE BUFFERS, USED BY: * * * * RFMST, RFAM1, RFAM2, REMAT, RQCNV, RPCNV * * * ****************************************************************** * * OFFSETS INTO RFA REQUEST BUFFERS. * #FCN EQU #REQ RFA FUNCTION CODE. #DCB EQU #FCN+1 DCB/FILENAME AREA. #IRC EQU #DCB+3 DAPOS: IREC #IRB EQU #IRC+1 IRB #XIB EQU #IRC+2 IRB (DXAPO) #IOF EQU #IRB+1 IOFF #XIO EQU #XIB+2 IOFF (DXAPO) #ITR EQU #DCB+3 DCLOS: ITRUN #IC1 EQU #DCB+3 DCONT: ICON1 #IC2 EQU #IC1+1 ICON2 #ICR EQU #DCB+3 DCRET,DNAME,DOPEN,DPURG: ICR(1) #ID EQU #ICR+1 IDSEG #ISC EQU #ID+1 ISECU #SIZ EQU #ISC+1 DCRET: ISIZE(1) #SZ2 EQU #SIZ+1 ISIZE(2) #XRS EQU #SIZ+2 RECSZ (DXCRE) #TYP EQU #SZ2+1 ITYPE #XTY EQU #XRS+2 ITYPE (DXCRE) #NNM EQU #ISC+1 DNAME: NNAME #IOP EQU #ISC+1 DOPEN: IOPTN #NUR EQU #DCB+3 DPOSN: NUR #IR EQU #NUR+1 IR #XIR EQU #NUR+2 IR (DXPOS) #IL EQU #DCB+3 DREAD,DWRIT: IL #NUM EQU #IL+1 NUM #LEN EQU #FCN+1 DSTAT: ILEN #FOR EQU #LEN+1 IFORM #OPT EQU #FOR+1 IOP #NOD EQU #ICR+1 "FLUSH" REQUEST: NODE NUMBER * * OFFSETS INTO RFA REPLY BUFFERS. * #RFD EQU #REP DCRET,DOPEN: RFAMD ENTRY # #JSZ EQU #RFD+1 DCRET: JSIZE (DXCRE) #LOG EQU #REP DREAD: XLOG #REC EQU #REP DLOCF: IREC #RB EQU #REC+1 IRB #XRB EQU #REC+2 IRB (DXLOC) #OFF EQU #RB+1 IOFF #XOF EQU #XRB+2 IOFF (DXLOC) #JSC EQU #OFF+1 JSECT #XJS EQU #XOF+1 JSECT (DXLOC) #JLU EQU #JSC+1 JLU #XJL EQU #XJS+2 JLU (DXLOC) #JTY EQU #JLU+1 JTY #XJT EQU #XJL+1 JTY (DXLOC) #JRC EQU #JTY+1 JREC #XJR EQU #XJT+1 JREC (DXLOC) #IAD EQU #REP DSTAT: IADD * * MAXIMUM SIZE OF RFA REQUEST/REPLY BUFFER. * #RLW EQU #MHD+13 M A X I M U M S I Z E ! ! ! * * RFBLK-END SKP SPC 3 ICLAS NOP RFAM LDA B,I GET THE CLASS STA ICLAS * LDA D1 SET MAX # RFAM FILES STA #RFSZ TO ONE. * JSB DTACH DETACH FROM SESS. CONTROL BLOCK DEF *+1 (IN CASE DINIT RUN FROM SESSION) * * * WE COME HERE INITIALLY AND EACH TIME A REQUEST HAS BEEN PROCESSED. * GO JSB #GET WAIT FOR A REQUEST TO COME DEF *+6 DEF ICLAS CLASS # DEF RQB BUFFER DEF C#RLW MAXIMUM LENGTH OF THE INCOMING BUFFER DTBFA DEF DTBFR DATA BUFFER ADDRESS DEF BUFLN MAXIMUM DATA LENGTH JMP ERR53 MUST BE A LENGTH ERROR * STA RQLN SAVE THE REQUEST LENGTH LDA RQB+#FCN GET THE FUNCTION CODE STA FCODE SAVE IT FOR LATER SSA CHECK FOR VALIDITY JMP ERR25 <0, NO GOOD ADA DM14 CHECK UPPER BOUND SSA,RSS JMP ERR25 >13, NO GOOD EITHER * * SINCE FUNCTION CODE LOOKS OK, WE USE IT AS INDEX IN A TABLE * TO GO TO THE PROPER PREPROCESSING. * CLA STA IERR LDA RQB+#FCN GET FCODE AGAIN ADA JSBTB LDA 0,I STA CALLI SET UP "JSB" ADR LDA RQB+#FCN ADA BRNCH ADD TO THE BEGINNING OF THE BRANCH TABLE JMP A,I GO EXECUTE THE PREPROCESSING HED RFAM: ORIENTATION * (C) HEWLETT-PACKARD CO. 1980 * * * WE WILL TRY TO DESCRIBE HERE THE FLOW OF OPERATIONS * IN THIS PROGRAM. * * * * 1. EACH REQUEST IS PROCESSED IN 4 PHASES: * - PREPROCESS * - FMP CALL BUILDING * - EXECUTION OF THE FMP CALL * - POSTPROCESS * * THE CHOICE OF THE PROCESSOR IS MADE EACH TIME BY USING * THE REQUEST CODE AS AN INDEX IN A BRANCH TABLE. * * * 2. PREPROCESSING * THE READER SHOULD FIND IN THE PREPROCESSING BRANCH TABLE * (BRNCH) THE LABEL AT WHICH THE CURRENT PREPROCESS WILL START. * * * * 3. FMP CALL FORMATING. * THE TABLE WE WILL USE TO SELECT A PROCESSOR IS BLDTB. * IN THIS PART WE ONLY SET THE ADDRESSES OF THE PARAMETERS * IN THE CALL BUFFER. * * * 4. POSTPROCESSING * ON COMPLETION OF THE FMP CALL WE GO TO "DONE" WHERE THE * SELECTION OF THE PREPROCESSOR IS DONE THROUGH THE TABLE * PSTBL. * * PST05 USED FOR DNAME AND DPURG * IF THE FILE WAS OPEN BEFORE THE FMP CALL AND THE CALL * WAS EXECUTED WITHOUT ERROR, THE CURRENT RFAMD ENTRY * IS DELETED. * * PST04 USED FOR DCRET * IF THE ICR WAS NOT SPECIFIED IN THIS REQUEST, SET THE * PROPER CRN VALUE IN THE RFAMD ENTRY. * IN ANY CASE, FIND THE RFAMD ENTRY # AND PASS IT TO * THE USER. * * PST00 USED FOR DSTAT * SET THE DATA LENGTH TO 125 WORDS. * * PST02 USED FOR DREAD * SET THE DATA LENGTH * * PST03 USED FOR DOPEN * IF THE ICR WAS SPECIFIED IN THE REQUEST, THE RFAMD * ENTRY # IS SET IN THE REQST, AND THE REPLY IS SENT. * IF THE ICR WAS NOT SPECIFIED IN THE REQUEST, THE * LEGALITY OF THIS OPEN IS CHECKED, AND EITHER: * - REJECTED (ERR -08) THE TYPE OF THE OPEN MAY HAVE * BE RESTORED * - ACCEPTED, THE CRN IS SET IN THE RFAMD ENTRY AND THE ENTRY * NUMBER IS SET IN THE REQST. * THE REPLY IS SENT. * * * 5. IF THE OPERATION WAS A SUCCESSFUL CLOSE, THE CURRENT RFAMD * ENTRY IS DELETED. * * * * HED RFAM: PREPROCESSING * (C) HEWLETT-PACKARD CO. 1980 SPC 3 * * HERE ON A "DCRET" BRN3 LDA %NAME CURRENT DCB ID SZA IS ENTRY AVAILABLE? JMP ERR28 NO, GIVE ERROR -28 * BRN31 LDB FNAMA LDA NAMA JSB .MVW SET UP CURRENT ENTRY: NAME, CRN, ID SEG DEF D5 NOP LDA RQB+#SRC GET ORIGINATOR'S NODE STA %NODE & SAVE IN LOCAL ENTRY JMP BUILD CURRENT ENTRY IS ALL SET! SPC 3 * * HERE ON A DOPEN * BRN4 JSB CKENT SET CRN, CHECK NAME, NODE, AND ID JMP BRN31 OK OR CURRENT ENTRY IS EMPTY SPC 3 * * PROCESSOR FOR FLUSH * BRN6 LDB FNAMA LDA NAMA JSB .CMW COMPARE NAME WITH CURRENT ENTRY DEF D3 NOP JMP *+3 MATCHES NOP JMP ERR11 DOESN'T MATCH, GIVE DCB NOT OPEN * LDB RQB+#NOD CPB DM1 CLOSE ALL? JMP BUILD YES, DO IT CPB %NODE IS IT THE ASSIGNED NODE? JMP BUILD YES, FLUSH IT JMP ERR11 NO, GIVE DCB NOT OPEN SPC 3 * * HERE FOR DPURG AND DNAME * BRN8 JSB CKENT CHECK NAME, NODE, AND ID STA TMPAD VALUE=0 IF NO CURRENT ENTRY JMP BUILD OK TO PROCEED SPC 3 * * * HERE FOR DSTAT. THIS IS A SPECIAL CALL, IT DOES NOT * NEED ANY DCB. SPECIAL TREATMENT. * BRN10 EQU * * LDA RQB+#SID GET SESSION ID WORD FROM REQ. AND B377 ISOLATE DEST. SESSION ID (BITS 0-7) STA TEMP SAVE SESSION ID FOR '#ATCH' CALL * JSB #ATCH ATTACH TO SESSION CONTROL BLOCK DEF *+2 DEF TEMP * INA,SZA,RSS CHECK FOR ERROR JMP RSERR "RS01" ERROR: SCB NOT FOUND * JSB FSTAT DEF *+2 DEF DTBFR STATUS BUFFER * JSB DTACH DETACH FROM SESS. CONTROL BLOCK DEF *+1 * * LDB D125 SET THE LENGTH OF THE JMP REPLY+1 DATA BUFFER & RETURN SPC 3 * * ENTER HERE FOR FUNCTIONS WHICH MUST ALREADY HAVE OPEN DCB * BRN1 LDB %NAME LDA RQB+#DCB+1 CPA %SEQ IS IT CORRECT ENTRY NUMBER? SZB,RSS YES, IS ENTRY STILL OPEN? JMP ERR26 ANSWER TO EITHER IS NO, GIVE -26 SKP SPC 3 * HERE WE BRANCH TO THE PROPER CALL SETUP ROUTINE. * BUILD LDA DCBA STA LDCB INITIALIZE DCB ADDR IN CALL LDA NAMA STA LDCB+2 INITIALIZE ADDR OF FILE NAME LDA SZOPA STA LDCB+3 INITIALIZE ADDR OF SIZE/OPTNL PARAM LDB PARAM GET ADDR OF PARAMETER DESTINATION LDA RQB+#FCN GET FCODE AGAIN ADA BLDTB MAP IN "BUILD" TABLE JMP A,I GO PREPARE THE CALL TO FMP * SPC 3 * * CALL BUILDER FOR DWRIT * BLD12 LDA DTBFA STA LDCB+2 SET BUFFER ADDRESS IN CALL INB SPC 3 * * CALL BUILDER FOR DAPOS,DCLOS,DCONT,DPOSN,DWIND,FLUSH * BLD0 LDA RQLN REQUEST LENGTH ADA HDLEN COMPUTE # OF PARAMETERS + 1 JSB .CAX LDA PRM0A GET ADDR PRECEEDING REQ PARAMS * BLDCM JSB .DSX DECREMENT COUNT INA,RSS JMP BLD01 DONE MOVING PARAMETER "DEF"S * BLDC2 STA 1,I STORE "DEF" IN CALL SEQUENCE INB JMP BLDCM ITERATE SPC 3 * * CALL BUILDER FOR DCRET * BLD3 LDA TYPEA ADDR OF TYPE STA LDCB+4 * LDB D3 * * THE FOLLOWING PART IS COMMON TO DCRET, DNAME,DOPEN * AND DPURG, IT SETS THE SECURITY CODE AND THE CRN IN THE CALL * BLD31 ADB PARAM COMPUTE ADDR WITHIN CALL LDA SECUA GET ADDRESS OF ISECU STA B,I SET IT IN THE CALL LDA CRA GET ADDRESS OF ICR INB STEP TO NEXT PARAM IN CALL STA B,I SET IT IN THE CALL LDA A,I GET CRN SZA PRESENT ? INB YES, PUSH B TO NEXT JMP BLD01 DONE HERE, GO COMPLETE AND CALL SPC 3 * * CALL BUILDER FOR DLOCF * BLD4 JSB .LDX SET COUNTER DEF D7 LDA IRECA GET ADDR OF 1ST RETURN PARAM IN REPLY JMP BLDC2 GO SET-UP "DEF"S TO PARAMETERS SPC 3 * * CALL BUILDER FOR DNAME * BLD5 LDB D2 LDA TMPAD WAS THE FILE ALREADY OPEN ? SZA JMP BLD31 YES, DCB ADDRESS ALREADY SET JMP BLD81 NO, USE DATA BUFFER AS DCB SPACE. SPC 3 * * CALL BUILDER FOR DOPEN * * BLD6 CLB SET "FILE NOT OPEN" STB %DCB+9 STATUS * LDB D2 JMP BLD31 GO COMPLETE THE CALL SPC 3 * * CALL BUILDER FOR DPURG * BLD8 LDA NAMA GET FILE NAME ADDRESS STA LDCB+2 SET IT IN CALL CLB,INB BLD81 LDA DTBFA GET THE ADDRESS OF THE DATA BUFFER STA LDCB USE IT AS THE DCB ADDRESS FOR THIS CALL JMP BLD31 GO COMPLETE SPC 3 * * CALL BUILDER FOR DREAD * BLD9 LDA RQB+#IL REQUESTED DREAD LENGTH CMA,INA ADA BUFLN BUFFER SIZE - REQUESTED LENGTH SSA BUFFER EXCEEDED? JMP ERR53 YES, GIVE LENGTH ERROR LDA DTBFA GET ADDRESS OF DATA BUFFER STA LDCB+2 SET IT IN CALL CLB STB RQB+#LOG PRE-INITIALIZE RETURNED LENGTH LDA CRA GET ADDRESS OF REQUEST LENGTH LDB LOGA ALWAYS PASS LEN BACK. GET ITS ADDR DST LDCB+3 INA LDB A,I GET NUM SZB,RSS PRESENT ? JMP BLD91 NO STA LDCB+5 YES, SET IN CALL CLB,INB GET A 1 BLD91 ADB PARAM FIND RETURN ADDRESS ADB D3 * * WRAP-UP PREPROCESSING * BLD01 STB RTNAD SET THE RETURN ADDRESS CLA STA 1,I CLEAN OUT REST OF CALL INB CPB RTN MORE? JMP CALL NO, GO EXECUTE FMGR CALL JMP *-4 YES HED RFAM: POSTPROCESSING * (C) HEWLETT-PACKARD CO. 1980 * * POSTPROCESS FOR DNAME AND DPURG * PST05 CLB CPB TMPAD WAS IT AN ALREADY OPEN FILE ? JMP REPLY NO LDA IERR GET COMPLETION CODE SSA,RSS ERROR ? STB %NAME NO, DELETE THE OLD ENTRY LDA FCODE YES, GET FUNCTION CODE CPA DPURG ERROR ON A DPURG? STB %NAME YES, DELETE ENTRY (FMP CLOSED FILE) JMP REPLY SEND THE REPLY SPC 2 * * POSTPROCESS FOR DCRET AND DOPEN * PST04 LDA IERR SSA ANY ERROR ? JMP CLENT YES, JUST CLEAR OUT CURRENT ENTRY * LDA RQB+#ICR GET ICR SZA SPECIFIED ? JMP PST41 YES * LDA %DCB NO, GET 1ST WORD OF DCB AND B77 GET DISC LU CMA,INA STA RQB+#ICR REPLACE IN THE REQST PST41 JSB LUCR TRANSFORM INTO CRN STB %CRN SET IT * ISZ %SEQ BUMP CURRENT SEQUENCE NUMBER NOP LDA %SEQ STA #RPB+#RFD SAVE IT IN REPLY JMP REPLY SPC 2 * * WE COME HERE AFTER A DREAD * PST02 LDB RQB+#LOG GET LENGTH OF DATA SSB SKIP IF NOT EOF CLB ELSE DO ZERO LENGTH XFER JMP REPLY+1 SPC 2 * * POST PROCESS FOR FLUSH * PST08 CLA,INA ONE FLUSHED ENTRY STA IERR SET AS COMPLETION CODE * CLENT CLB STB %NAME CLEAN OUT CURRENT ENTRY HED RFAM: SEND REPLY * (C) HEWLETT-PACKARD CO. 1980 * * POST-PROCESSING COMPLETED, SET-UP TO SEND REPLY * REPLY CLB SET FOR NO DATA RETURNED STB LENGT LDA #NODE GET LOCAL NODE # STA #RPB+#ENO SET AS COMPLETION LOCATION LDA IERR SET THE COMPLETION CODE STA #RPB+#EC2 IN THE REPLY * PST1A LDA FCODE GET THE OPCODE ADA LNTBL INDEX IN THE REPLY LENGTH TABLE LDA A,I GET THE LENGTH STA RQLN SET THE LENGTH * * THE REPLY REQST IS READY, SEND IT BACK * JSB #SLAV DEF *+4 DEF RQLN REQST LENGTH DEF DTBFR DATA BUFFER DEF LENGT DATA LENGTH * NOP IGNORE THE ERROR RETURN FROM #SLAV * * IF THE OPERATION WAS A DCLOS, AND IT WORKED PROPERLY, WE * HAVE TO DELETE THE RFAMD ENTRY. * LDA FCODE GET OPCODE FOR THE LAST TIME CPA D1 DCLOS ? CLB,RSS JMP PST06 * * LDA IERR GET COMPLETION CODE SSA,RSS ERROR ? STB %NAME NO, CLEAR OUT CURRENT ENTRY * PST06 JSB .LDX GET A COUNTER DEF DM9 CLB GET A 0 PST07 JSB .SBX CLEAN THE OPTIONAL AREA DEF RQB+#RLW JSB .ISX JMP PST07 CONTINUE JMP GO GET NEXT REQUEST. HED RFAM: UTILITY ROUTINES * (C) HEWLETT-PACKARD CO. 1980 * * THIS ROUTINE CHECKS FILE NAME, CARTRIDGE REFERENCE, NODE, AND * ID SEGMENT ADDRESS IN THE NEW REQUEST AND RETURNS IF THEY * MATCH THE CURRENT ENTRY * CKENT NOP JSB LUCR CONVERT POSSIBLE LU TO CRN LDA %NAME SZA,RSS CURRENT ENTRY AVAILABLE JMP CKENT,I YES LDA RQB+#SRC CPA %NODE NODES MATCH? RSS YES JMP ERR28 NO, GIVE NO TABLE SPACE ERROR? SZB,RSS WAS CRN SPECIFIED LDB %CRN NO, USE CURRENT ENTRY'S CRN STB RQB+#ICR LDB FNAMA LDA NAMA JSB .CMW COMPARE NAME,CRN, & ID SEGMENT ADDRS DEF D5 NOP JMP CKENT,I MATCHED OK NOP JMP ERR28 DOESN'T MATCH, GIVE NO TABLE SPACE ERROR * * THIS ROUTINE WILL TRANSFORM A NEGATIVE DISC LU * INTO A CARTRIDGE NUMBER. BOTH INPUT AND RESULTS * ARE PASSED VIA REQST+#ICR. THE RESULT WILL ALSO BE * FOUND IN B REGISTER. IF AN ERROR IS DISCOVERED * WE WILL DIRECTLY JUMP TO THE ERROR ROUTINE. * LUCR NOP LDB RQB+#ICR SSB,RSS IS IT AN LU? JMP LUCR,I NO * LDA $OPSY CHECK TYPE AND DM15 CPA DM15 RTE-M? RSS YES JMP NOTM NO, SKIP CTU-SYS CHECK * CMB,INB YES, MAKE IT POSITIVE AND STB DTBFR SET UP STATUS CALL. * JSB EXEC GET EQUIPMENT-TYPE CODE DEF *+4 DEF D13I DEF DTBFR USE DTBFR FOR CONWD DEF DTBFR+1 AND EQT5. JMP ERR06 ILLEGAL LU * LDA DTBFR+1 GET EQT5 ALF,ALF AND B77 ISOLATE EQUIP-TYPE CODE LDB RQB+#ICR IF DVR05 (CTU SYSTEM), CPA D5 RETURN WITH JMP LUCR,I B = -LU. * NOTM EQU * * LDA RQB+#SID GET SESSION ID WORD FROM REQ. AND B377 ISOLATE DEST. SESSION ID (BITS 0-7) STA TEMP SAVE SESSION ID FOR '#ATCH' CALL * JSB #ATCH ATTACH TO SESSION CONTROL BLOCK DEF *+2 DEF TEMP * INA,SZA,RSS CHECK FOR ERROR JMP RSERR "RS01" ERROR: SCB NOT FOUND * JSB FSTAT GET INFO ON THE CURRENTLY DEF *+2 MOUNTED CARTRIGES. DBFAD DEF DTBFR SEND THE INFO IN THE DATA BUFFER * JSB DTACH DETACH FROM SESS. CONTROL BLOCK DEF *+1 * * LDA DBFAD DCB BUFFER ADDR LP84 LDB 0,I GET W1 OF ENTRY CMB,INB CPB RQB+#ICR IS IT OUR LU? JMP FND84 YES SZB,RSS END OF TABLE ? JMP ERR06 YES, ILLEGAL DISC LU ADA D4 PUSH THE ADDR TO THE NEXT ENTRY JMP LP84 CONTINUE * FND84 ADA D2 STEP TO THE CRN LDB 0,I GET IT STB RQB+#ICR SET IT IN THE REQST JMP LUCR,I SPC 3 * * THIS IS THE SKELETON OF THE FMP CALL * PARAM DEF LDCB+2 DEF LDCB * CALL EQU * * LDA RQB+#SID GET SESSION ID WORD FROM REQ. AND B377 ISOLATE DEST. SESSION ID (BITS 0-7) STA TEMP SAVE SESSION ID FOR '#ATCH' CALL * JSB #ATCH ATTACH TO SESSION CONTROL BLOCK DEF *+2 DEF TEMP * INA,SZA,RSS CHECK FOR ERROR JMP RSERR "RS01" ERROR: SCB NOT FOUND * JSB CALLI,I CALL FMP ROUTINE RTNAD NOP DEF RTRN LDCB DEF %DCB ADDRESS OF DCB IF ANY DEF IERR ERROR REP 8 NOP * DONE EQU * * JSB DTACH DETACH FROM SESS. CONTROL BLOCK DEF *+1 * LDA IERR GET RETURNED ERROR CODE SSA,RSS DID FMP DETECT AN ERROR? JMP NOERR NO LDA "FM" YES, INDICATE AN FMP-DETECTED ERROR STA #RPB+#EC1 IN THE REPLY. * NOERR LDA FCODE GET FUNCTION CODE ADA PSTBL POST-PROCESSING TABLE JMP 0,I JUMP TO POST-PROCESSOR * RTN DEF DONE CALLI NOP ADR OF FMP CALL "FM" ASC 1,FM SPC 3 ERR06 JSB FMERR THIS IS REPORTED AS AN FMP ERROR CODE DEC -6 ERR11 JSB FMERR THIS IS REPORTED AS AN FMP ERROR CODE DEC -11 ERR25 EQU * INVALID FCODE. SET TO ZERO TO CLA INSURE VALID INDEX INTO REPLY STA FCODE LENGTH TABLE LATER. JSB ERRXX DEC -25 ERR26 JSB ERRXX DEC -26 ERR28 JSB ERRXX DEC -28 ERR53 JSB ERRXX DEC -53 * ERRXX NOP LDB ERRXX,I PICK UP ERROR CODE LDA "DS" INDICATE A DS-DETECTED ERROR * * ENTER HERE WITH = "DS" OR "FM" (GENERAL CATEGORY OF ERROR) * = ERROR CODE (STORED IN #EC2 WHEN SENDING BACK REPLY) * ERRYY EQU * STA #RPB+#EC1 STORE CATEGORY CODE OF ERROR STB IERR SET THE ERROR CODE IN THE REPLY JMP REPLY AND SHIP IT. SPC 2 FMERR NOP HERE ON FMP ERRORS LDB FMERR,I PICK UP ERROR CODE LDA "FM" RETURN "FM" ERROR CODE JMP ERRYY AND RETURN VALUE OF "IERR" * "DS" ASC 1,DS * RSERR LDA "RS" RETURN SPECIAL ASCII STA #RPB+#EC1 REMOTE SESSION MONITOR LDA "01" ERROR CODE "RS01". STA #RPB+#EC2 LDA BIT15 SET SIGN BIT IN IERR TO SIMULATE STA IERR NEG ERROR CODE FOR 'CLOS'. IOR #NODE SET LOCAL NODE # AND ASCII-ERROR STA #RPB+#ENO BIT INTO REPLY. CLA SET DATA LENGTH FOR STA LENGT CALL TO #SLAV. JMP PST1A GO SEND REPLY * * "RS" ASC 1,RS "01" ASC 1,01 HED RFAM: DATA AREA * (C) HEWLETT-PACKARD CO. 1980 A EQU 0 B EQU 1 SPC 2 **** DEFINE CURRENT OPEN RFAM ENTRY **** %NAME DEC 0,0,0 %CRN NOP %IDSG NOP %NODE NOP %SEQ NOP **** END OF CURRENT ENTRY **** SPC 2 B10 OCT 10 B377 OCT 377 DPURG EQU B10 FCODE FOR DPURG DM15 DEC -15 DM14 DEC -14 DM9 DEC -9 DM1 DEC -1 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D7 DEC 7 D13I OCT 100015 D125 DEC 125 BUFLN ABS BUFSZ BIT15 OCT 100000 B77 OCT 77 FNAMA DEF %NAME HDLEN ABS -#DCB-2 NAMA DEF RQB+#DCB ADDR OF THE FILE NAME PRM0A DEF RQB+#DCB+2 ADDR PRECEEDING REQUEST PARAMS CRA DEF RQB+#ICR ADDR OF THE ICR SECUA DEF RQB+#ISC ADDR OF ISECU SZOPA DEF RQB+#SIZ ADDR OF SIZE/IOPTN TYPEA DEF RQB+#TYP ADDR OF TYPE IRECA DEF #RPB+#REC ADDR OF IREC (DLOCF PARAM) DCBA DEF %DCB LOGA DEF #RPB+#LOG ADDR OF LEN (XMISSION LOG) * * VARIABLES LENGT NOP IERR NOP TMPAD NOP RQLN NOP REQUEST LENGTH FCODE NOP FUNCTION CODE TEMP NOP HED RFAM: TABLES * (C) HEWLETT-PACKARD CO. 1980 BRNCH DEF *+1,I DEF BRN1 DAPOS DEF BRN1 DCLOS DEF BRN1 DCONT DEF BRN3 DCRET DEF BRN1 DLOCF DEF BRN8 DNAME DEF BRN4 DOPEN DEF BRN1 DPOSN DEF BRN8 DPURG DEF BRN1 DREAD DEF BRN10 DSTAT DEF BRN1 DWIND DEF BRN1 DWRIT DEF BRN6 FLUSH * JSBTB DEF *+1 DEF APOSN DEF CLOSE DEF FCONT DEF CREAT DEF LOCF DEF NAMF DEF OPEN DEF POSNT DEF PURGE DEF READF NOP DEF RWNDF DEF WRITF DEF CLOSE FLUSH * BLDTB DEF *+1,I CALL BUILDING TABLE DEF BLD0 DAPOS DEF BLD0 DCLOS DEF BLD0 DCONT DEF BLD3 DCRET DEF BLD4 DLOCF DEF BLD5 DNAME DEF BLD6 DOPEN DEF BLD0 DPOSN DEF BLD8 DPURG DEF BLD9 DREAD NOP DEF BLD0 DWIND DEF BLD12 DWRIT DEF BLD0 FLUSH * SPC 3 LNTBL DEF *+1 REPLY LENGTH TABLE ABS #REP DAPOS ABS #REP DCLOS ABS #REP DCONT ABS #RFD+1 DCRET ABS #JRC+1 DLOCF ABS #REP DNAME ABS #RFD+1 DOPEN ABS #REP DPOSN ABS #REP DPURG ABS #LOG+1 DREAD ABS #REP DSTAT ABS #REP DWIND ABS #REP DWRIT ABS #REP FLUSH SPC 3 PSTBL DEF *+1,I POST PROCESSING TABLE DEF REPLY DAPOS DEF REPLY DCLOS DEF REPLY DCONT DEF PST04 DCRET DEF REPLY DLOCF DEF PST05 DNAME DEF PST04 DOPEN DEF REPLY DPOSN DEF PST05 DPURG DEF PST02 DREAD NOP DEF REPLY DWIND DEF REPLY DWRIT DEF PST08 FLUSH HED RFAM: BUFFERS * (C) HEWLET-PACKARD CO. 1980 C#RLW ABS #RLW MAX LEN REQ/REPLY BUFFER. * * DTBFR BSS BUFSZ %DCB BSS 144 * SIZE EQU * * END RFAM