ASMB,L,C NAM GEX.L,7 92070-1X282 REV. 2040 800725 $CLIB SPC 3 * NAME: GEX.C * SOURCE: 92070-18282 * PGMR: EARL STUTES * modified for LC by SAM HANSEN * * CALLING SEQUENCE: LDA function * LDB cr * JSB GEX.C * DEF parameter *iff function<=3 * SPC 3 *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * REPRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** SPC 3 * THIS PROCEDURE HANDLED SEVERAL OF THE DIFFERENCES BETWEEN RTE-IV AND * RTE II-III AND RTE-M FOR THE COMPILER LIBRARY -- THIS NEW VERSION * HANDLES RTE-LC * PROC CALLD.RTR(FUNCTION,PRAM,CR); * VALUE FUNCTION,CR; INTEGER FUNCTION,CR; * POINTER PRAM; * FUNCTION IS PASSED IN THE A REGISTER * CR IS PASSED IN THE B REGISTER * PRAM IS A POINTER TO THE SET OF DATA NEEDED BY THE FUNCTION REQUESTED * * THE FUNCTION VALUES ARE: * 0 => CLOSE * 1 => CREATE * 2 => OPEN NEW FILE * 3 => OPEN EXTENT * 4 => OPEN SCRATCH FILE (NO PRAM) * 5 => CLOSE SCRATCH FILE (NO PRAM OR ERROR RTRN) * * THE PARAMETERS ARE DEFINED BY THE FUNCTION: * * 0 => PRAM = POINTER TO THE NUMBER OF SECTORS TO BE DELETED * 1 => PRAM = A POINTER TO THE SKELETON DIRECTORY ENTRY IN CORE * 2 => PRAM = POINTER TO THE NAME BUFFER * 3 => PRAM = POINTER TO THE READ/WRITE FLAG * * THE RETURNED PARAMETERS WILL BE RETRIEVED AND PLACED * VARIABLES VISIBLE TO THE CALLER * THE FIRST FIVE ARE THOSE COMING DIRECTLY FROM D.RTR * THE 6TH & 7TH ARE THOSE PARAMETERS NEEDED BY THE NEW OPEN FUNCTION EXT .R1 D.RTR RETRN PARAM #1 ERROR(-)\SECTORS(+) EXT .R2 D.RTR RETRN PARAM #2 TR,LU \ DIRCTORY EXT .R3 D.RTR RETRN PARAM #3 OFSET,SECTR / ADRS ENT .R6 D.RTR RETRN SECURITY CODE ENT .R7 D.RTR RETRN TYPE CODE EXT .P1 D.RTR PASS PARAM #1 FUNCTION CODE EXT .P2 D.RTR PASS PARAM #2 EXT .P3 D.RTR PASS PARAM #3 EXT .P4 D.RTR PASS PARAM #4 EXT .P5 D.RTR PASS PARAM #5 EXT .P6 D.RTR PASS PARAM #6 EXT .P7 D.RTR PASS PARAM - NOP ??? EXT .P8 D.RTR PASS PARAM - NOP ??? EXT .P9 D.RTR PASS PARAM #7 ??? SPC 4 * BEGIN * CASE FUNCTION OF * MAKECLOSECALL; * MAKECREATCALL; * MAKEOPENCALL; * MAKEOPENEXTCALL; * DOSCRATCHOPENTRICK; * DOSCRATCHCLOSETRICK; * ESAC; * FETCHRETURNPRAMETERS; * IF ERROR THEN * GO ERROR EXIT; * IF FUNCTION = NEWOPEN * END OF CALLD.RTR SKP ENT GEX.C ENT PROBT EXT .MBT BYTE MOVE WORDS EXT CLD.R ROUTINE WHICH CALLS D.RTR EXT EXEC EXT C.FAD FCB FILE DIRECTORY WORD EXT C.FID FCB ID WORD EXT C.#SC FCB EXTENT SIZE EXT C.BFF BUFFER FOR DIRECTORY ENTRY EXT C.EXT FCB EXTENT COUNTER EXT LIMEM RTE-M GET MEMORY LIMITS PROCEDURE EXT PNAME RETURNS PROGRAM NAME A EQU 0 B EQU 1 PROBT OCT 7700 DISC PROTECT BITS FUNCT BSS 1 THE PASSED IN FUNCTION PARAMETER CR BSS 1 THE PASSED IN CR PARAMETER .1 DEC 1 .3 DEC 3 .5 DEC 5 .9 DEC 9 .128 DEC 128 .R6 BSS 1 NEEDED ENTRY SINCE D.RTR DOESN'T RTRN SEC .R7 BSS 1 NEEDED ENTRY SINCE D.RTR DOESN'T RTRN TYP NEWOP EQU .9 NEW OPEN FUNCTION CODE TRACK BSS 1 B.P3 DEF .P3+0 B.P4 DEF .P4+0 SPC 2 GEX.C DEF LIMEM THIS IS REALLY THE ENTRY POINT DST FUNCT SAVE PASSED PARAMETERS ADA JTAB FUNCTION CASE STATMENT JMP A,I SPC 2 JTAB DEF JTBL JTBL JMP CLOSE JMP CREAT JMP NOPEN JMP EOPEN JMP SOPEN JMP SCLOS SPC 3 CREAT JSB INDC. LDA B,I STA .P3 INB .PRAM IS STILL IN B LDA B,I STA .P4 INB LDA B,I STA .P5 CLA,INA STA .P1 LDA CR STA .P2 ADB =D5 LDA B,I FETCH THE RECORD SIZE STA .P8 INB LDB B,I FETCH THE SECURITY CODE STB .P9 LDB .PRAM ADB =D3 LDA B,I GET THE TYPE CODE STA .P6 ADB =D3 LDB B,I GET THE FILE SIZE STB .P7 JMP FETCH SPC 3 NOPEN JSB INDC. LDA .PRAM,I MAKEOPENCALL IOR =B100000 SET THE EXCLUSIVE OPEN BIT IN THE NAME STA .P3 INB .PRAM IS STILL IN B LDA B,I STA .P4 INB LDA B,I STA .P5 LDA CR STA .P2 LDA NEWOP STA .P1 FIX UP THE FUNCTION CALL JMP FETCH SPC 3 EOPEN EQU * JSB INDC. LDA .PRAM,I MAKEOPENEXTCALL LDB =D6 SZA,RSS ADB =D2 STB .P1 LDA C.EXT,I STA .P4 JMP CEXEC SPC 2 CLOSE JSB INDC. CLA STA .P5 STA .P1 LDA .PRAM,I STA .P4 CEXEC DLD C.FAD,I STA .P2 STB .P3 JMP FETCH SPC 3 * SCRATCH OPEN FOR THE RTE-LC SYSTEM * 1. CREATE A NEW FILE WITH PROG NAME * 2. IF (RETURNP1 = -2) OR (RETURNP1 >= 0) THEN * OPEN THE FILE EXCLUSIVE * 3. IF ANY ERROR THEN TAKE ERROR EXIT * 4. FETCH THE RETURN PARAMETERS AND NORMAL EXIT * BUILD SCRATCH FILE NAME SOPEN LDA C.FID,I ALF,ALF RAL,RAL AND =B17 IOR =B60 ALF,ALF STA .P3 JSB PNAME DEF *+2 DEF .P4 LDA B.P4 LDB B.P3 RRL 1 INB JSB .MBT DEF .5 NOP CLA STA .P8 RECORD SIZE STA .P9 SECURITY CODE STA .P2 -LU,CRN# INA STA .P1 FUNCTION - CREATE LDA =D3 STA .P6 TYPE LDB =D24 STB .P7 FILE SIZE JSB CLD.R CALL D.RTR * PICK UP THE RETURN PARAMETERS LDA .R1 * IF NOT((RETURNP1 = -2) OR (RETURNP1 >= 0)) THEN SSA,RSS JMP OPNIT CPA =D-2 DUPLICATE NAME JMP OPNIT * GO ERROR EXIT JMP GEX.C,I * OPEN THE FILE EXCLUSIVE OPNIT LDA .P3 IOR =B100000 STA .P3 LDA NEWOP STA .P1 * GO FINISH UP JUST LIKE A NEW OPEN JMP FETCJ NO DEF IN SCR OPEN SPC 3 SCLOS CLA STA .P1 STA .P5 LDA C.EXT,I INA MPY C.#SC,I NUMBER OF SECTORS TO PURGE ALS CMA,INA STA .P4 DLD C.FAD,I STA .P2 STB .P3 JSB CLD.R CALL D.RTR JMP GEX.C,I NO ERROR RTN OR DEF IN SCR CLOSE * ESAC; SPC 3 FETCH ISZ GEX.C JUMPS OVER DEF FETCJ JSB CLD.R CALL D.RTR LDA .R1 CHECK FOR ERRORS SSA JMP GEX.C,I ERROR OUT * IF FUNCTION = NEWOPEN LDA .P1 CPA .1 JMP FILID CPA NEWOP JMP *+2 JMP EXIT LDA .R2 TRACK\LU AND =B77 ISOLATE LU# IOR PROBT ADD DISC PROTECT BITS STA .R7 LU (DISC) LDA .R2 ALF,ALF RAL,RAL AND =B1777 STA TRACK LDA .R3 OFFSET\SECTOR AND =B377 STA .R6 SECTOR JSB EXEC FETCH THE DIRECTORY ENTRY DEF *+7 DEF .1 DEF .R7 DEF C.BFF,I DEF .128 DEF TRACK DEF .R6 LDA .R3 OFFSET\SECTOR ALF,ALF AND =B377 OFFSET ADA .3 ADA C.BFF LDB A,I TYPE IS 4TH WORD OF DIRECTORY ENTRY STB .R7 ADA .5 LDB A,I SECURITY CODE IS IN 9TH WORD STB .R6 FILID LDA .R2 LDB .R3 DST C.FAD,I EXIT ISZ GEX.C JUMPS OVER ERROR EXIT JMP GEX.C,I SPC 3 INDC. BSS 1 CLEAR INDIRECTS AND FETCH THE PARAMETER POINTER LDB GEX.C ILOOP LDB B,I RBL,CLE,SLB,ERB CLEAR THE I-BIT AND TEST JMP ILOOP STB .PRAM JMP INDC.,I * * .PRAM BSS 3 END