ASMB,C,Q,N IFN * START EXTENDED FILE CODE * HED RFMST: 91750-1X166 REV 2013 (C) HEWLETT-PACKARD CO. 1980 NAM RFMST,7 91750-1X166 REV 2013 800111 * XIF * END EXTENDED FILE CODE * * UNL IFZ * START NON-EXTENDED FILE CODE * HED RFMST: 91750-16ZZZ REV 2013 (C) HEWLETT-PACKARD CO. 1980 NAM RFMST,7 91750-16ZZZ REV 2013 800111 * XIF * END NON-EXTENDED FILE CODE LST 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 4 **************************************************************** * * NAME: RFMST * SOURCE: 91750-18166 * RELOC: 91750-1X166 * PGMR: DAN GIBBONS * *************************************************************** SPC 3 UNL IFN * START EXTENDED FILE CODE LST ENT DXCRE,DXCLO,DXREA,DXWRI ENT DXAPO,DXPOS,DXLOC UNL XIF * END EXTENDED FILE CODE LST ENT DAPOS,DCLOS,DCONT,DCRET,DLOCF ENT DNAME,DOPEN,DPOSN,DPURG,DREAD ENT DSTAT,DWIND,DWRIT EXT .ENTR,#MAST,#NODE,PGMAD EXT .LDX,.LBX,.LAX,.ISX,.MVW,.SBX,.DSX EXT #RQB RQB EQU #RQB * SUP A EQU 0 B EQU 1 SKP * * THIS PROGRAM SUPPORTS ALL REMOTE FILE ACCESS (RFA) MASTER CALLS * IN THE DS/1000 SYSTEM. BELOW ARE THE VALID CALLING SEQUENCES, WITH * OPTIONAL PARAMETERS INDICATED BY PARENTHESES: []. OPTIONAL PARAMETER * "ERLOC" WHEN SPECIFIED WILL CONTAIN THE NODAL ADDRESS AT WHICH AN * ERROR OCCURRED (IF ANY). THE PARAMETER "ICR" IN THE "DCRET","DNAME", * "DOPEN", AND "DPURG" CALLS IS A 2 WORD ARRAY WITH THE FIRST WORD EQUAL * TO THE REQUIRED CARTRIDGE LABEL AND THE SECOND WORD HAVING THE FILE'S * NODAL ADDRESS (DEFAULT IS 0,-1). ALL OTHER PARAMETERS HAVE THE * CONVENTIONAL FMP MEANINGS. * * * 1. CALL DAPOS(IDCB,IERR,IREC[,IRB,IOFF,ERLOC]) * SETS ABSOLUTE RECORD POSITION OF FILE TO VALUE OF "IREC" * * 2. CALL DCLOS(IDCB,IERR[,ITRUN,ERLOC]) * CLOSES DCB AND OPTIONALLY TRUNCATES BASED ON "ITRUN". * * 3. CALL DCONT(IDCB,IERR,ICON1[,ICON2,ERLOC]) * PERFORMS RTE I/O CONTROL REQUEST FOR TYPE 0 (NON-DISC) FILES. * * 4. CALL DCRET(IDCB,IERR,NAME,ISIZE,ITYPE[,ISECU,ICR,ERLOC]) * CREATES THE NAMED FILE WITH THE SPECIFIED NUMBER OF BLOCKS. * THE FILE IS LEFT OPEN EXCLUSIVELY TO THE CALLER. * * 5. CALL DLOCF(IDCB,IERR,IREC[,IRB,IOFF,JSEC,JLU,JTY,JREC,ERLOC]) * FORMATS AND RETURNS LOCATION AND STATUS INFORMATION FOR * THE DCB. * * 6. CALL DNAME(IDCB,IERR,NAME,NNAME[,ISECU,ICR,ERLOC]) * RENAMES THE SPECIFIED FILE * * 7. CALL DOPEN(IDCB,IERR,NAME[,IOPTN,ISECU,ICR,ERLOC]) * OPENS THE NAMED FILE * * 8. CALL DPOSN(IDCB,IERR,NUR[,IR,ERLOC]) * REPOSITIONS FILE * * 9. CALL DPURG(IDCB,IERR,NAME[,ISECU,ICR,ERLOC]) * CLOSES THE DCB AND PURGES THE FILE AND ALL ITS EXTENTS * * 10. CALL DREAD(IDCB,IERR,IBUF,IL[,LEN,NUM,ERLOC]) * READS THE NEXT RECORD INTO THE USER'S BUFFER * UNL IFN * START EXTENDED FILE CODE LST * 11. CALL DSTAT(ISTAT,IERR,IDEST[,ERLOC,ILEN,IFORM,IOP,IADD]) UNL XIF * END EXTENDED FILE CODE LST UNL IFZ * START NON-EXTENDED FILE CODE LST * 11. CALL DSTAT(ISTAT,IERR,IDEST[,ERLOC]) UNL XIF * END NON-EXTENDED FILE CODE LST * RETURNS INFORMATION ON ALL MOUNTED CARTRIDGE LABELS * AT THE NODE SPECIFIED BY "IDEST" * * 12. CALL DWIND(IDCB,IERR[,ERLOC]) * REWINDS TYPE 0 FILES, OR SETS DISC FILE POSITION TO THE * FIRST RECORD * * 13. CALL DWRIT(IDCB,IERR,IBUF,IL[,NUM,ERLOC]) * WRITES THE SPECIFIED BUFFER TO THE FILE UNL IFN * START EXTENDED FILE CODE LST * * (THE FOLLOWING ARE EXTENDED FILE CALLS. THE FUNCTIONS * ARE THE SAME AS DESCRIBED FOR THE CORRESPONDING NON- * EXTENDED CALLS ABOVE.) * * 14. CALL DXAPO(IDCB,IERR,IREC[,IRB,IOFF,ERLOC]) * * 15. CALL DXCLO(IDCB,IERR[,ITRUN,ERLOC]) * * 16. CALL DXCRE(IDCB,IERR,NAME,ISIZE,ITYPE[,ISECU,ICR,JSIZE,ERLOC]) * * 17. CALL DXLOC(IDCB,IERR,IREC[,IRB,IOFF,JSEC,JLU,JTY,JREC,ERLOC]) * * 18. CALL DXPOS(IDCB,IERR,NUR[,IR,ERLOC]) * * 19. CALL DXREA(IDCB,IERR,IBUF,IL[,LEN,NUM,ERLOC]) * * 20. CALL DXWRI(IDCB,IERR,IBUF,IL[,NUM,ERLOC]) UNL XIF * END EXTENDED FILE CODE LST 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 * * C A U T I O N * * * IF THERE IS ANY CHANGE TO THE LAST PARAMETER OF A REQUEST * (OR REPLY FOR DSTAT), CHECK CALL TO $MAST AND #MAST FOR * SPECIFIED REQUEST LENGTH. * SPC 10 * * DAPOS PERFORMS A REMOTE FMGR "APOSN" CALL * DAPOS NOP JSB $PREP DO REQUEST SET-UP CONWD OCT 100000 FUNCTION CODE = 0 * JSB $VER3 GET & VERIFY 3RD PARAMETER * STB RQB+#IRC SAVE IREC IN THE REQST * LDB PRAMS+3,I GET THE OPTIONAL IRB STB RQB+#IRB AND STORE IN REQUEST. LDB PRAMS+4,I GET OPTIONAL IOFF STB RQB+#IOF AND STORE IN REQUEST. * JSB $MAST DO #MAST CALL ABS #IOF+1 REQUEST LENGTH * * DPURG JOINS US HERE. * DAPUR LDA PRAMS+5 GET 'ERLOC' PARAM ADR JMP $POST DO REQUEST WRAP-UP SKP * * DCLOS PERFORMS A REMOTE FMGR "CLOSE" CALL * DCLOS NOP JSB $PREP PERFORM PRE-PROCESSING OCT 100001 FUNCTION CODE = 1 * LDA PRAMS+2,I GET THE OPTIONAL ITRUN STA RQB+#ITR * JSB $MAST DO #MAST CALL ABS #ITR+1 REQUEST LENGTH * JMP DSX WRAP-UP AND EXIT SKP * * DCONT PERFORMS A REMOTE FMGR "FCONT" CALL * DCONT NOP JSB $PREP DO REQUEST PRE-PROCESSING OCT 100002 FUNCTION CODE= 2 * JSB $VER3 GET & VERIFY 3RD PARAMETER ADDR STB RQB+#IC1 SAVE ICON1 IN REQUEST * LDB PRAMS+3,I GET OPTIONAL ICON2 STB RQB+#IC2 * JSB $MAST DO #MAST CALL ABS #IC2+1 REQUEST LENGTH * LDA PRAMS+4 GET 'ERLOC' PARAM ADR JMP $POST WRAP-UP AND EXIT SKP * * DCRET PERFORMS A REMOTE FMGR "CREAT" CALL * DCRET NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING K3 DEC 3 FUNCTION CODE = 3 * STB RQB+#ID SET THE ID SEGMENT ADDRESS STB PRAMS,I IN THE REQST AND IN THE DCB * CPA PRAMS+4 TYPE ADDRESS PROVIDED? JMP PRERR NO, PARAMETER ERROR LDB PRAMS+4,I GET TYPE STB RQB+#TYP SAVE IN REQST * UNL IFN * START EXTENDED FILE CODE LST JSB MOVEP MOVE REMAINING PARAMS TO REQST UNL XIF * END EXTENDED FILE CODE LST UNL IFZ * START NON-EXTENDED FILE CODE LST LDA PRAMS+5,I GET OPTIONAL ISECU STA RQB+#ISC * DLD PRAMS+3,I GET ISIZE (2 WORD PARAMETER) DST RQB+#SIZ SAVE IN REQUEST * LDA PRAMS+6 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * LDA PRAMS FINISH ADA K3 BUILDING STB A,I THE DCB (STORE NODE) UNL XIF * END NON-EXTENDED FILE CODE LST * JSB $MAST DO #MAST CALL ABS #TYP+1 REQUEST LENGTH * LDA PRAMS+7 GET 'ERLOC' PARAM ADR JMP DOPNX WRAP-UP AND EXIT UNL IFN * START EXTENDED FILE CODE LST SPC 2 MOVEP NOP SUBR TO MOVE PARAMS TO REQST LDA PRAMS+5,I GET OPTIONAL ISECU STA RQB+#ISC * DLD PRAMS+3,I GET ISIZE (2 WORD PARAMETER) DST RQB+#SIZ SAVE IN REQUEST * LDA PRAMS+6 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * LDA PRAMS FINISH ADA K3 BUILDING STB A,I THE DCB (STORE NODE) JMP MOVEP,I UNL XIF * END EXTENDED FILE CODE LST SKP * * DLOCF PERFORMS A REMOTE FMGR "LOCF" CALL * DLOCF NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100004 FUNCTION CODE = 4 * JSB $VER3 GET & VERIFY 3RD PARAMETER ADDRESS * JSB $MAST DO #MAST CALL ABS #DCB+3 REQUEST LENGTH * JSB .LDX SET A COUNTER DEF N7 LOOP1 JSB .LBX GET A RETURNED VALUE DEF RQB+#JRC+1 JSB .LAX GET RETURN ADDRESS DEF PRAMS+9 STB A,I PASS VALUE BACK JSB .ISX ALL DONE ? JMP LOOP1 NO, CONTINUE. * DLOC1 LDA PRAMS+9 GET 'ERLOC' PARAM ADR JMP $POST WRAP-UP AND EXIT SKP * * DNAME PERFORMS A REMOTE FMGR "NAMF" CALL * DNAME NOP JSB $PREP PERFORM PRE-PROCESSING DEC 5 FUNCTION CODE = 5 * STB RQB+#ID SET ID SEG ADDR IN REQUEST. * LDB PRAMS+4,I SET OPTIONAL ISECU. STB RQB+#ISC * LDA PRAMS+5 GET ADDR OF ICR. JSB $ICR SET UP CR/NODE & MOVE FILE NAME. * LDA PRAMS+3 GET ADDRESS OF NNAME SZA,RSS JMP PRERR NOT PROVIDED LDB D#NNM JSB .MVW MOVE NEW NAME TO REQST DEF K3 NOP * JSB $MAST DO #MAST CALL ABS #NNM+3 REQUEST LENGTH * JMP DRX WRAP-UP AND EXIT * D#NNM DEF RQB+#NNM SKP * * DOPEN PERFORMS A REMOTE FMGR "OPEN" CALL * DOPEN NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING K6 DEC 6 FUNCTION CODE = 6 * STB PRAMS,I SET ID SEG ADDR IN DCB * STB RQB+#ID SET ID SEG ADDR IN REQUEST * LDB PRAMS+4,I GET OPTIONAL ISECU STB RQB+#ISC SAVE IN REQST * LDB PRAMS+3,I GET OPTIONAL IOPTN STB RQB+#IOP * LDA PRAMS+5 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * LDA PRAMS FINISH ADA K3 BUILDING STB A,I THE DCB. * JSB $MAST DO #MAST CALL ABS #IOP+1 REQUEST LENGTH * LDA PRAMS+6 * * DCRET JOINS US HERE. * DOPNX JSB .LDX X= ADDR OF USERS 4 WORD DCB DEF PRAMS LDB RQB+#RFD GET RFAMD ENTRY # JSB .SBX STORE IN 2ND WORD OF DCB DEF 1 JMP $POST WRAP-UP AND EXIT SKP * * DPOSN PERFORMS A REMOTE FMGR "POSNT" CALL * DPOSN NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100007 FUNCTION CODE = 7 * JSB $VER3 GET AND VERIFY 3RD PARAM ADDR. STB RQB+#NUR SAVE NUR IN REQUEST. * LDB PRAMS+3,I GET OPTIONAL IR STB RQB+#IR * JSB $MAST DO #MAST CALL ABS #IR+1 REQUEST LENGTH. * DPOS1 LDA PRAMS+4 GET 'ERLOC' PARAM ADR JMP $POST WRAP-UP AND EXIT SKP * * DPURG PERFORMS A REMOTE FMGR "PURGE" CALL * DPURG NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING DEC 8 FUNCTION CODE = 8 * LDA PRAMS+4 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * CLA LDB PRAMS+3,I GET OPTIONAL ISECU STB RQB+#ISC JSB PGMAD GET ID SEGMENT ADDRESS DEF *+2 DEF K0 STA RQB+#ID SET IT INTO REQUEST * JSB $MAST DO #MAST CALL ABS #ISC+1 REQUEST LENGTH. * JMP DAPUR REST IS IN COMMON WITH DAPOS SKP * * DREAD PERFORMS A REMOTE FMGR "READF" CALL * DREAD NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100011 FUNCTION CODE = 9 * UNL IFN * START EXTENDED FILE CODE LST JSB DREA1 PROCESS NUM & IL PARAMS UNL XIF * END EXTENDED FILE CODE LST UNL IFZ * START NON-EXTENDED FILE CODE LST LDB PRAMS+5,I GET THE OPTIONAL NUM * LDA PRAMS+3,I GET IL STA RQB+#IL SAVE IT IN THE REQST STA RDLEN AND FOR THE "MS" CALL UNL XIF * END NON-EXTENDED FILE CODE LST * JSB XDATA DO COMMON DREAD/DWRIT LOGIC * DREA2 LDA PRAMS+4 LDB RQB+#LOG PASS OPTIONAL LEN STB A,I IF REQUIRED BY THE USER * * DNAME JOINS US HERE. * DRX LDA PRAMS+6 GET 'ERLOC' PARAM ADR JMP $POST WRAP-UP AND EXIT UNL IFN * START EXTENDED FILE CODE LST SPC 2 DREA1 NOP SUBR TO PROCESS NUM & IL LDB PRAMS+5,I GET THE OPTIONAL NUM * LDA PRAMS+3,I GET IL STA RQB+#IL SAVE IT IN THE REQST STA RDLEN AND FOR THE "MS" CALL JMP DREA1,I UNL XIF * END EXTENDED FILE CODE LST SKP * * DSTAT PERFORMS A REMOTE FMGR "FSTAT" CALL * DSTAT NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING K10 DEC 10 FUNCTION CODE = 10 * JSB $VER3 GET & VERIFY THE 3RD PARAMETER ADDRESS STB RQB+#DST STORE "IDEST" IN REQUEST LDA K125 GET DATA LENGTH UNL IFN * START EXTENDED FILE CODE LST LDA PRAMS+4,I OVERRIDE LENGTH IF ILEN PROVIDED STA RQB+#LEN SET LENGTH INTO REQST UNL XIF * END EXTENDED FILE CODE LST STA RDLEN SET DATA READ LENGTH UNL IFN * START EXTENDED FILE CODE LST CLA (IN CASE PRAMS+5 OR +6 = 0) LDB PRAMS+5,I GET OPTIONAL IFORM PARAM STB RQB+#FOR SET IT INTO REQST LDB PRAMS+6,I GET OPTIONAL IOP PARAM STB RQB+#OPT SET IT INTO REQST UNL XIF * END EXTENDED FILE CODE LST * JSB $MAST DO #MAST CALL ABS #OPT+1 UNL IFN * START EXTENDED FILE CODE LST * LDA PRAMS+7 RETURN IADR TO LDB RQB+#IAD USER IF PARAM STB A,I WAS PROVIDED. UNL XIF * END EXTENDED FILE CODE LST * * DCLOS JOINS US HERE. * DSX LDA PRAMS+3 GET 'ERLOC' PARAM ADR JMP $POST WRAP-UP AND EXIT SKP * * DWIND PERFORMS A REMOTE FMGR "RWNDF" CALL * DWIND NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100013 FUNCTION CODE = 11 * JSB $MAST DO #MAST CALL ABS #DCB+3 * LDA PRAMS+2 GET 'ERLOC' PARAM ADR JMP $POST WRAP-UP AND EXIT SKP * * DWRIT PERFORMS A REMOTE FMGR "WRITF" CALL * DWRIT NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100014 FUNCTION CODE = 12 * UNL IFN * START EXTENDED FILE CODE LST JSB DWRI1 PROCESS PARAMS UNL XIF * END EXTENDED FILE CODE LST UNL IFZ * START NON-EXTENDED FILE CODE LST LDB PRAMS+4,I GET THE OPTIONAL NUM LDA PRAMS+3,I GET IL STA RQB+#IL STORE IN REQUEST INA,SZA SKIP IF WRITE EOF LDA RQB+#IL STA WRLEN SAVE WRITE LENGTH FOR MS CALL UNL XIF * END NON-EXTENDED FILE CODE LST * JSB XDATA PERFORM COMMON DREAD/DWRIT LOGIC * DWRI2 LDA PRAMS+5 GET 'ERLOC' PARAM ADR UNL IFZ * START NON-EXTENDED FILE CODE LST SKP UNL XIF * END NON-EXTENDED FILE CODE LST UNL IFN * START EXTENDED FILE CODE LST JMP $POST WRAP-UP AND EXIT SPC 2 DWRI1 NOP PROCESS NUM & IL PARAMS LDB PRAMS+4,I GET THE OPTIONAL NUM LDA PRAMS+3,I GET IL STA RQB+#IL STORE IN REQUEST INA,SZA SKIP IF WRITE EOF LDA RQB+#IL STA WRLEN SAVE WRITE LENGTH FOR MS CALL JMP DWRI1,I SKP * * DXAPO PERFORMS A REMOTE FMGR "EAPOS" CALL * DXAPO NOP JSB $PREP DO REQUEST SET-UP OCT 100022 FUNCTION CODE = 18 * JSB XVER3 GET & VERIFY IREC (DBL) DST RQB+#IRC SAVE IT IN REQST * CLA GET DEFAULTS IN CASE CLB PRAMS+3 = 0. DLD PRAMS+3,I GET OPTIONAL IRB (DBL) DST RQB+#XIB SET IRB INTO REQST CLA (IN CASE PRAMS+4 = 0) LDA PRAMS+4,I GET OPTIONAL IOF STA RQB+#XIO SET IT INTO REQST * JSB $MAST DO #MAST CALL ABS #XIO+1 REQST LENGTH * JMP DAPUR GO FINISH UP SKP * * DXCLO PERFORMS A REMOTE FMGR "ECLOS" CALL * DXCLO NOP JSB $PREP PERFORM PRE-PROCESSING OCT 100017 FUNCTION CODE = 15 * CLA GET DEFAULT IN CASE CLB PRAMS+2 = 0. DLD PRAMS+2,I GET OPTIONAL ITRUN (DBL) DST RQB+#ITR SET ITRUN INTO REQST * JSB $MAST DO #MAST CALL ABS #ITR+2 REQST LENGTH * JMP DSX WRAP-UP AND EXIT SKP * * DXCRE PERFORMS A REMOTE FMGR "ECREA" CALL * DXCRE NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING DEC 14 FUNCTION CODE = 14 * STB RQB+#ID SET OUR ID SEG ADR INTO STB PRAMS,I REQUEST AND INTO DCB(1). * CPA PRAMS+4 ITYPE PROVIDED? (A=0) JMP PRERR NO, PARAM ERROR LDB PRAMS+4,I GET ITYPE STB RQB+#XTY SET IT INTO REQST * JSB MOVEP PROCESS REMAINING PARAMS * LDA PRAMS+3 MOVE RECORD SIZE (ISIZE(3)&(4)) ADA K2 INTO REQUEST. DLD A,I DST RQB+#XRS * JSB $MAST DO #MAST CALL ABS #XTY+1 REQST LENGTH * DLD RQB+#JSZ PASS BACK DST PRAMS+7,I 'JSIZE' PARAM. * LDA PRAMS+8 GET 'ERLOC' PARAM ADR JMP DOPNX WRAP-UP AND EXIT SPC 2 K2 DEC 2 SKP * * DXLOC PERFORMS A REMOTE FMGR "ELOCF" CALL * DXLOC NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100024 FUNCTION CODE = 20 * JSB $VER3 GET AND VERIFY 3RD PARAM ADR * JSB $MAST DO #MAST CALL ABS #DCB+3 REQST LENGTH * DLD RQB+#REC PASS RETURN PARAMS DST PRAMS+2,I TO USER. DLD RQB+#XRB DST PRAMS+3,I LDA RQB+#XOF STA PRAMS+4,I DLD RQB+#XJS DST PRAMS+5,I LDA RQB+#XJL STA PRAMS+6,I LDA RQB+#XJT STA PRAMS+7,I LDA RQB+#XJR STA PRAMS+8,I * JMP DLOC1 GO FINISH UP SKP * * DXPOS PERFORMS A REMOTE FMGR "EPOSN" CALL * DXPOS NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100023 FUNCTION CODE = 19 * JSB XVER3 GET & VERIFY NUR (DBL) DST RQB+#NUR SET INTO REQST * CLA (IN CASE PRAMS+3 = 0) LDA PRAMS+3,I GET OPTIONAL IR PARAM STA RQB+#XIR SET IR INTO REQST * JSB $MAST DO #MAST CALL ABS #XIR+1 REQST LENGTH * JMP DPOS1 GO FINISH UP SKP * * DXREA PERFORMS A REMOTE FMGR "EREAD" CALL * DXREA NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100020 FUNCTION CODE = 16 * JSB DREA1 PROCESS NUM(1), IL, JSB XDAT1 AND IBUF PARAMS. LDA PRAMS+5 GET ADR OF 'NUM' PARAM JSB DXRE1 PROCESS NUM(2) PARAM * JSB $MAST DO #MAST CALL ABS #NUM+2 REQST LENGTH * JMP DREA2 GO FINISH UP SPC 2 DXRE1 NOP PROCESS NUM(2) PARAM. =NUM(1) ADR. SZA PARAM SPECIFIED? INA YES, STEP TO NUM(2) LDA A,I GET NUM(2), OR 0 IF NOT SPECIFIED, STA RQB+#NUM+1 AND SET IT INTO REQST. JMP DXRE1,I SKP * * DXWRI PERFORMS A REMOTE FMGR "EWRIT" CALL * DXWRI NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100021 FUNCTION CODE = 17 * JSB DWRI1 PROCESS NUM(1), IL, JSB XDAT1 AND IBUF PARAMS. LDA PRAMS+4 GET ADR OF 'NUM' PARAM JSB DXRE1 PROCESS NUM(2) PARAM * JSB $MAST DO #MAST CALL ABS #NUM+2 REQST LENGTH * JMP DWRI2 GO FINISH UP SKP UNL XIF * END EXTENDED FILE CODE LST * * * COMMON REQUEST POST-PROCESSING LOGIC. (='ERLOC' PARAM ADR) * $POST LDB RQB+#ENO GET THE ERROR LOCATION ELB,CLE,ERB STRIP SIGN BIT IF SET STB A,I RETURN IT (OPTIONALLY) LDA RQB+#EC2 ERROR CODE LDB RQB+#ENO GET ERROR LOCATION AGAIN SSB ASCII ERROR CODE? LDA ERCNV YES, RETURN CONVERTED ERROR CODE * $PST2 STA PRAMS+1,I RETURN ERROR CODE JMP CALL,I RETURN FROM MASTER RFA CALL SPC 4 * * THIS SUBROUTINE IS COMMON TO DREAD AND DWRIT * XDATA NOP UNL IFN * START EXTENDED FILE CODE LST JSB XDAT1 DO PART COMMON TO XTND & NON-XTND CALLS UNL XIF * END EXTENDED FILE CODE LST UNL IFZ * START NON-EXTENDED FILE CODE LST STB RQB+#NUM SAVE THE OPTIONAL NUM SSA LENGTH NEGATIVE ? JMP PRERR YES, ILLEGAL ADA N513 IL > 512 ? SSA,RSS JMP PRERR YES, TOO MUCH * CLA CPA PRAMS+3 WAS "IL" SPECIFIED? JMP PRERR NO, PARAMETER ERROR * LDA PRAMS+2 GET BUFFER ADDRESS STA PRAMS SAVE FOR MS CALL SUBROUTINE UNL XIF * END NON-EXTENDED FILE CODE LST * JSB $MAST CALL #MAST ABS #NUM+1 * JMP XDATA,I RETURN UNL IFN * START EXTENDED FILE CODE LST SPC 2 XDAT1 NOP PROCESS DREAD,DWRIT,DXREA,DXWRI PARAMS STB RQB+#NUM SAVE THE OPTIONAL NUM SSA LENGTH NEGATIVE ? JMP PRERR YES, ILLEGAL ADA N513 IL > 512 ? SSA,RSS JMP PRERR YES, TOO MUCH * CLA CPA PRAMS+3 WAS "IL" SPECIFIED? JMP PRERR NO, PARAMETER ERROR * LDA PRAMS+2 GET BUFFER ADDRESS STA PRAMS SAVE FOR MS CALL SUBROUTINE JMP XDAT1,I UNL XIF * END EXTENDED FILE CODE LST SKP * * COMMON REQUEST PRE-PROCESSING ROUTINE FOR ALL MASTER RFA CALLS * $PREP NOP LDB "DS" PRIME ERROR CODE WORDS STB RQB+#EC1 IN CASE WE DETECT AN LDB #NODE BEFORE CALL TO #MAST. STB RQB+#ENO CLB STB RQB+#ECQ * JSB .LDX CLEAN OUT PARAMETER AREA DEF K10 LOOP JSB .SBX DEF PRAMS-1 JSB .DSX JMP LOOP * LDB $PREP ADB N2 LDB B,I GET RETURN POINT STB CALL SAVE JMP CALL+1 * PRAMS REP 10 NOP CALL NOP JSB .ENTR GET ADDRESSES OF PARAMETERS DEF PRAMS LDA K6 STA RQB+#STR SET RFA STREAM LDA PRAMS+1 SZA,RSS AT LEAST 2 PARAMETERS SPECIFIED? JMP CALL,I NO, RETURN NOW! LDA $PREP,I GET FUNCTION CODE/ MOVE DCB FLAG ISZ $PREP RAL,CLE,ERA CLEAR SIGN BIT STA RQB+#FCN SET FUNCTION CODE IN REQUEST SEZ,RSS DCB MOVE REQUIRED? JMP $PREX NO * * MOVE DCB TO THE REQUEST BUFFER * LDA PRAMS GET ADDR OF DCB LDB D#DCB ADDR OF NAME FIELD IN REQUEST JSB .MVW MOVE IT DEF K3 NOP LDA A,I GET DESTINATION FROM 4TH DCB WORD STA RQB+#DST SET INTO REQUEST * $PREX JSB PGMAD GET OUR IDSEG ADR DEF *+2 DEF NAME STA B SET IT INTO CLA STA WRLEN INITIALIZE DATA STA RDLEN BUFFER LENGTHS FOR MS CALL JMP $PREP,I RETURN WITH =0, =IDSEG ADR SPC 2 NAME REP 3 NOP SKP * * SUBROUTINE TO PERFORM #MAST CALL * $MAST NOP * JSB #MAST DEF *+7 DEF CONWD DEF $MAST,I REQUEST BUFFER LENGTH DEF PRAMS,I DATA ADDRESS (IF ANY) DEF WRLEN DEF RDLEN DEF C#RLW MAX ALLOWED REPLY LENGTH * JMP COMER ERROR RETURN * $MSEX ISZ $MAST JMP $MAST,I RETURN * * SUBROUTINE TO SET-UP CARTRIDGE REFERENCE AND NODAL ADDRESS * TO EITHER THE PASSED VALUES OR DEFAULTS * $ICR NOP STA $MAST USE $MAST LOC AS TEMP STORAGE JSB $VER3 GET & VERIFY THE 3RD PARAMETER ADDRESS LDA PRAMS+2 GET ADDRESS OF NAME FIELD LDB D#DCB GET ADDRESS OF NAME FIELD IN REQUEST JSB .MVW MOVE IT DEF K3 NOP LDA $MAST RELOAD ICR ADDRESS CCB LOCAL NODE DESIGNATOR (DEFAULT) DLD A,I GET ICR & NODE STA RQB+#ICR SAVE THE CARTRIDGE # STB RQB+#DST SAVE THE DESTINATION NODE JMP $ICR,I RETURN SKP * * COME HERE IF SIGN BIT OF RQB+#ENO WORD OF REPLY WAS SET * UPON RETURN FROM #MAST CALL (INDICATING ASCII ERROR CODE). * COMER LDA RQB+#EC1 GET ALPHABETIC PART OF THE ERROR CPA "DS" IS IT "DS"? JMP DSERR YES LDA N999 NO, REPORT IT AS A -999 ERROR JMP NOTDS * DSERR LDA RQB+#EC2 GET THE NUMERICAL PART OF THE ERROR AND B17 CODE AND DECODE IT CMA,INA NEGATE IT ADA N50 NOTDS STA ERCNV SAVE CONVERTED ERROR CODE JMP $MSEX RETURN * ERCNV NOP CONVERTED ERROR CODE SPC 3 * * SUBROUTINE TO GET & VERIFY THE 3RD PARAMETER ADDRESS * $VER3 NOP CLA ALWAYS RETURN A=0 CPA PRAMS+2 3RD PARAMETER ADDRESS JMP PRERR NOT SPECIFIED, GIVE ERROR LDB PRAMS+2,I GET 3RD PARAMETER JMP $VER3,I & RETURN UNL IFN * START EXTENDED FILE CODE LST * * SUBROUTINE TO VERIFY & TO SET THE 3RD DOUBLE WORD * PARAMETER INTO A & B REGISTERS. * XVER3 NOP LDA PRAMS+2 GET ADR OF 3RD PARAM SZA,RSS WAS PARAM SPECIFIED? JMP PRERR NO, GIVE ERROR DLD A,I GET 3RD PARAM INTO A & B JMP XVER3,I RETURN UNL XIF * END EXTENDED FILE CODE LST SPC 2 * PRERR LDA N10 INSUFFICIENT PARAMETERS, GIVE -10 ERROR STA RQB+#EC2 SET ERROR INTO REQUEST BUFFER JMP $PST2 SKP * * CONSTANTS & VARIABLES * * "DS" ASC 1,DS WRLEN NOP RDLEN NOP K0 DEC 0 B17 OCT 17 K125 DEC 125 N2 DEC -2 N7 DEC -7 N10 DEC -10 N50 DEC -50 N999 DEC -999 N513 DEC -513 D#DCB DEF RQB+#DCB * C#RLW ABS #RLW MAXIMUM REQ/REPLY LENGTH. SPC 3 END