This is a cross-referenced version of close.plan, to download the unmodified source try close.plan.
#PROGRAM       /GFCLOSE(15AM,22AM,DBM,EBM)
#PAGE

#INCLUDE       IOHEAD(/DEFS)
#INCLUDE       STACK(/DEFS)

#PERMANENT     GFMALLOC    [ #XPCK to stupid to include by entrypoint

#PROGRAM

#              Close a file

#              ERR = CLOSE(FD)

#              CALL  1  CLOSE
#              LDN   3  FD             

#SET           ARGS=0

#DEFINE        ARGFD=ARGS
#SET           ARGS=ARGS+1

#SET           STFRAME=SXFRAME

#DEFINE        STFD=SXPAR1           [ FD
#SET           STFRAME=STFRAME+1


#              Pick up arguments for Fortran style entry

      OBEY     ARGFD(1)
      LDX   5  0(3)                  [ get FD

      STACK 2                        [ get SP to X2
      STO   5  STFD(2)               [ save FD in arg list

      ADN   1  ARGS                  [ skip args on return

#              Pascal style entry

#CUE           GPCLOSE

      BEGIN 2  3,1,STFRAME           [ allocate stack frame, save link

      LDX   5  STFD(2)               [ get FD
      STO   5  SXPAR1(3)             [ and save in arg list of IOCHECK

      NGN   4  1                     [ flush if data written
      STO   4  SXPAR2(3) 
      CALL  1  GPIOCHECK             [ gpiocheck (fd, -1)

      BNG   6  BYE                   [ fd is not open
      STO   6  3

      LDN   0  FLAGNOCLOSE           [ is no release on close set?
      ANDX  0  FDFLAGS(3)
      BNZ   0  ZAP

      LDX   1  FDTYPE(3)
      LDX   0  FDUNIT(3)
      REL   0  256(1)               [ close the unit

ZAP   CALL  1  GXFREE               [ GXFREE expects pointer in X3

      LDX   3  PFTABLE              [ get file table
      ADX   3  STFD(2)
      STOZ     1(3)                 [ zero file table entry

      LDN   6  0

BYE   END   2  1,0

#END
#FINISH