SUBROUTINE READNEXT(FILENAME,ID,RECORD)

     COMMON /SELECT/ FILES(100),FILENAMES,LASTFILE

     GOSUB OPEN.FILE
     GOSUB EXTRACT.DATA
     RETURN

OPEN.FILE:
     LOCATE FILENAME IN FILENAMES<1> SETTING FILENO ELSE
        FILENO = LASTFILE + 1
        ACTION = K$READ + K$GETU
        FUNIT = 0
        FTYPE = 0
        NUM.SUFF = 0
        SUFF.LIST = ''
        USED.SUFF = ''
        SUFF.USED = 1
        FERROR = 0
        CALL $SRSFX$(ACTION, FILENAME, FUNIT, FTYPE, NUM.SUFF, SUFF.LIST, USED.SUFF,SUFF.USED, FERROR)
        ERR.MSG = ''
        CALL $ERTXT$(FERROR,ERR.MSG)
        IF ERR.MSG NE '' THEN
           CRT "Error during open: ":ERR.MSG
           STOP 'SO Aborted.'
        END
        FILES(FILENO) = FUNIT
        LASTFILE = FILENO
        FILENAMES<FILENO> = FILENAME
     END
     FILE = FILES(FILENO)
     RETURN

EXTRACT.DATA:
        BUFFER = SPACE(1024 * 2)
        FERROR = 0
        POS = 0
        HEADER.LEN = 1024
        HEADER = ''
        CALL $PRWF$$(K$READ+K$PREA, FUNIT, HEADER, HEADER.LEN, POS, RNHW, FERROR)
        QUEUE = BUFFER
        ERR.MSG = ''
        CALL $ERTXT$(FERROR,ERR.MSG)
        IF ERR.MSG NE '' THEN
           CRT "Error during read (PREA): ":ERR.MSG
           STOP 'SO Aborted.'
        END
        NHW = 1024
           FERROR = 0
           BUFFER = SPACE(NHW * 2)
           CALL $PRWF$$(K$READ + K$PREA, FUNIT, BUFFER, NHW, HW, RNHW, FERROR)
           ERR.MSG = ''
           CALL $ERTXT$(FERROR,ERR.MSG)
           IF ERR.MSG NE '' THEN
              CRT "Error during read: ":ERR.MSG
              STOP 'SO Aborted.'
           END
     RETURN

CLOSE.QUEUE:
     FERROR = 0
     CALL $SRSFX$(K$CLOS, FILENAME, FUNIT, FTYPE, NUM.SUFF, SUFF.LIST, USED.SUFF,SUFF.USED, FERROR)
     ERR.MSG = ''
     CALL $ERTXT$(FERROR,ERR.MSG)
     IF ERR.MSG NE '' THEN
        CRT "Error during close: ":ERR.MSG
        STOP 'SO Aborted.'
     END
     RETURN
  END
