ASMB,R,L,C
*     NAME:   CLOSE 
*     SOURCE: 92064-18181 
*     RELOC:  92064-16058 
*     PGMR:   G.A.A.
*     MOD:    G.L.M 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
* 
      NAM CLOSE,7  92064-16058  REV.1650  761019
* 
      HED CLOSE 
      ENT CLOSE 
      EXT EXEC,.ENTR,R/W$,CLD.R,.P1,.P2,.P3,.P4 
      SUP 
* 
*  THIS IS THE CLOSE SUBROUTINE--A PART OF THE
*  REAL-TIME FILE MANAGEMENT PACKAGE
* 
*  THE ASSEMBLY CALL TO CLOSE A FILE IS:
* 
*     JSB CLOSE 
*     DEF RTN       RETURN ADDRESS
*     DEF IDCB      DATA CONTROL BLOCK ADDRESS
*     DEF IERR      (OPTIONAL) ERROR CODE RETURNED HERE AND IN A REG
*     DEF IRX       (OPTIONAL) NO. OF 128 WORD DOUBLE 
*RTN                SECTORS TO BE DELETED FROM THE FILE 
* 
*     ERRORS ARE: 
*     0       NONE
*    -1       DISC DOWN 
*    -10      NOT ENOUGH PARAMETERS 
*    -11      FILE NOT OPEN 
*    -13      DISC LOCKED 
* 
* 
* 
      SKP 
CLOSE NOP 
      LDA DZERO 
      STA IDCB
      STA IRX 
      LDA DM
      STA IERR
      CLA 
      STA ZERO
      STA .P1       FUNCTION CODE FOR CLOSE 
      LDA CLOSE 
      STA DLOSE 
      JMP DLOSE+1 
* 
* 
* 
IDCB  DEF ZERO      DCB ADDRESS 
IERR  DEF IDCB      ERROR CODE ADDRESS
IRX   DEF ZERO      TRUNICATE CODE ADDRESS
      SPC 1 
DLOSE NOP           ENTRY POINT 
      JSB .ENTR     TRANSFER THE ADDRESSES
DM    DEF IDCB
      LDA IDCB      IF NO PARAMETERS
      CPA DZERO     THEN
      JMP ER10      ERROR EXIT
      INA           STEP TO WORD TWO
      LDB A,I       FETCH OFFSET SECTOR 
      STB .P3       SAVE FOR D.RTR CALL 
      ADA .8        ADD 8 TO GET THE THE OPEN FLAG
      STA OPNFL     SAVE THE OPEN FLAG ADDRESS
      LDB A,I       GET THE OPEN FLAG 
      ADA N2        BACK UP TO THE
      STA SC        SAVE THE SECURITY CODE ADDRESS
      CPB XEQT      FILE OPEN?
      CLE,RSS       YES SKIP
      JMP ER11      NO; ERROR EXIT
      LDB IDCB      GET THE DCB ADDRESS 
* 
      LDA B,I       IF MAGIC LU OPEN
      CPA FAKE          DON'T CALL D.RFP
      JMP DUMMY                JUST CLOSE DCB AND GET OUT 
* 
      JSB R/W$      CALL TO FLUSH THE BUFFER
      JMP EXIT      DISC ERROR EXIT 
      LDB IDCB      GET THE TYPE FLAG 
      ADB .2
      LDA B,I       A 
      SZA           IF ZERO NO TRUNCATE 
      LDA IRX,I     DISC FILE SET TRUNCATE CODE 
      ALS           ADJUST FOR 64 WORD SECTORS
      ADB .13       STEP TO EXTENT WORD 
      LDB B,I       IF NOT
      SZB           FIRST EXTENT
      CLA           DO NOT ALLOW TRUNCATION 
      LDB SC,I      GET THE SECURITY FLAG 
      SSB,RSS       IF BAD SC 
      CLA           DIS ALLOW TRUNCATION
      CMA,INA       SET NEGATIVE
      STA .P4       SAVE FOR D.RFP
* 
      LDA IDCB,I    SET DIRECTORY ADDRESS FOR D.RFP 
      STA .P2 
      JSB CLD.R      SCHED D.RFP
      RSS           SKIP MAGIC LU EXIT WORK 
* 
DUMMY CLB 
      SPC 2 
      CLA 
      STA OPNFL,I   CLEAR THE OPEN FLAG 
      LDA B,I       YES; GET ERROR RETURN 
      STA IRX       SAVE THE ERROR CODE 
* 
* 
* 
*  IF MAGIC LU OPEN AND PUNCH-- 
*                    THEN DO TRAILER----- 
* 
      LDB IDCB      FETCH  DCB ADDRESS
      LDA B,I       FETCH CONTENTS
      CPA FAKE      IF MAGIC LU OPEN--
      RSS           CONTINUE
      JMP EXI          ELSE--ALL DONE 
* 
      INB           ADVANCE TO DEVICE TYPE WORD 
      LDA B,I       FETCH IT
      ADB .3        ADVANCE TO EOF CODE 
      STB CLOSE     SAVE ITS ADDRESS
      CPA PUNCH     IS IT A PUNCH???
      RSS           YEP--GO DO TRAILER
      JMP EXI       NOPE--SO ALL DONE 
* 
* 
* 
      JSB EXEC
      DEF EXI 
      DEF .3        CONTROL CALL
      DEF CLOSE,I   EOF CODE
* 
EXI   LDA IRX       RESTORE ERROR CODE
* 
EXIT  STA IERR,I    SET THE ERROR CODE
      JMP DLOSE,I   EXIT ERROR CODE IN A
      SPC 3 
ER11  CCA           FILE NOT OPEN - ERROR 11
ER10  ADA N10       NOT ENOUGH PRAMS - ERROR 10 
      JMP EXIT      GO EXIT 
      SPC 3 
FAKE  OCT 177400
PUNCH OCT 1000
N10   DEC -10 
N2    DEC -2
.2    OCT 2 
.3    OCT 3 
.8    DEC 8 
.13   DEC 13
SC    NOP 
OPNFL NOP 
ZERO  NOP 
DZERO DEF ZERO
      SPC 2 
      SPC 3 
A     EQU 0 
B     EQU 1 
XEQT  EQU 1717B 
      SPC 1 
END   EQU * 
      SPC 1 
      END 
                                                                                                                                  