ASMB,R,L,C
*     NAME:   CLOSE 
*     SOURCE: 92070-18039 
*     RELOC:  92070-16039 
*     PGMR:   G.A.A.
*     MOD:    M.L.K.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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  92070-1X039  REV.1941  790709
* 
      HED CLOSE 
      ENT CLOSE,ECLOS 
      EXT .ENTR,R/W$,CLD.R,.P1,.P2,.P3,.P4,.R1
      EXT GTOPN,$DBLX,LURQ
      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 
ECLOS NOP           DOUBLE WORD ENTRY 
      CCA           SET DBL FLAG
      LDB ECLOS     SET UP RETURN ADDRESS 
      JMP SETUP     FINISH SET UP 
      SPC 5 
CLOSE NOP 
      CLA           SET DBL FLAG FALSE
      LDB CLOSE     GET RETURN ADDRESS
SETUP STA DBLWD     SAVE DBL FLAG 
      STB DLOSE     SAVE RETURN ADDRESS 
      LDA DZERO 
      STA IDCB
      STA IRX 
      LDA DM
      STA IERR
      CLA 
      STA ZERO
      STA .P1       FUNCTION CODE FOR CLOSE 
      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
      ISZ DBLWD     TEST DBL FLAG 
      JMP SINGL     SINGLE ENTRY, SKIP TESTS
      DLD IRX,I     GET DOUBLE TRUNC CODE 
      JSB $DBLX     CHECK RANGE 
      JMP EXIT      ERROR (A = ERROR CODE)
      ISZ IRX       POINT TO LOW BITS 
* 
SINGL 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
      ADA N2        BACK UP TO THE
      STA SC        SAVE THE SECURITY CODE ADDRESS
      JSB GTOPN     GET CURRENT OPEN FLAG 
      DEF *+1 
      CPA OPNFL,I   COMPARE TO FILE'S, OK?
      CLE,RSS       YES, SKIP 
      JMP ER11      NO, ERROR EXIT
* 
      LDB IDCB      GET THE DCB ADDRESS 
* 
      LDA B,I       IF DUMMY LU OPEN
      CPA FAKE          DON'T CALL D.RTR
      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.RTR
* 
      LDA IDCB,I    SET DIRECTORY ADDRESS FOR D.RTR 
      STA .P2 
      JSB CLD.R      SCHED D.RTR
      LDB .R1       GET ERROR RETURN
      RSS           SKIP DUMMY LU EXIT WORK 
* 
DUMMY CLB 
      STB IRX       SAVE ERROR CODE 
* 
      CLA 
      STA OPNFL,I   CLEAR THE OPEN FLAG 
* 
*     UNLOCK TYPE 0 LU'S
* 
      LDB IDCB      GET DCB ADDRESS 
      ADB .2        POINT TO FILE TYPE
      LDA B,I       GET TYPE
      SZA           IF NOT TYPE 0 
      JMP EXI         THEN DONE, EXIT 
* 
      INB           POINT TO LU 
      LDA B,I       GET LU
      AND B77       ISOLATE LU
      STA LU        AND SAVE
      ADB .12       POINT TO LOCK/UNLOCK FLAG (DCB 15)
      LDA B,I       AND GET FLAG
      SZA           SHOULD WE UNLOCK? 
      JMP EXI       NO, EXIT
      JSB LURQ      CALL TO UNLOCK
      DEF *+4 
      DEF B40K      UNLOCK NO ABORT 
      DEF LU
      DEF .1
      NOP           ERROR RETURN (IGNORE) 
* 
EXI   LDA IRX       RESTORE ERROR CODE
* 
EXIT  STA IERR,I    SET THE ERROR CODE
      JMP DLOSE,I   EXIT ERROR CODE IN A
      SPC 3 
ER10  CLA,RSS       NOT ENOUGH PRAMS - ERROR 10 
ER11  CCA           FILE NOT OPEN - ERROR 11
      ADA N10 
      JMP EXIT      GO EXIT 
      SPC 3 
FAKE  OCT 177700
B40K  OCT 40000 
B77   OCT 77
N10   DEC -10 
N2    DEC -2
.1    DEC 1 
.2    OCT 2 
.8    DEC 8 
.12   DEC 12
.13   DEC 13
SC    NOP 
OPNFL NOP 
ZERO  NOP           \ THESE TWO ARE DUMMY PARAMETERS
      NOP           / TWO NECESSARY FOR DOUBLE WORD 
DZERO DEF ZERO
DBLWD NOP           DOUBLE WORD FLAG
LU    NOP 
      SPC 2 
A     EQU 0 
B     EQU 1 
      SPC 1 
END   EQU * 
      SPC 1 
      END 
                                                                                                                                                        