! SVLIN.BAS
! WRIITEN BY JAMES A. JARBOE IV    GR/AM
! TO TEST SVLIN.SBR
!
! UPDATED 01-31-88  FIXES POSIBILITY OF FINDING MORE THAN TWO
!                   CHR$(1) IN HEADER INFORMATION IN SV FILE
!
! USES: SVLIN.SBR  - GETS INPUT FROM SUPERVUE FILE
!
! All special characters that SuperVue uses such as soft spaces, soft page
! breaks etc are the responsibility of the programmer to check for.
! SVLIN gets fills the BUFFER with data until it reaches a CR, then returns
! to basic with that information in the variable BUFFER.
!
! UPDATE - 01/27/88  JAJ
! Make sure HEADER is an unformatted variable so that it can contain
! Chr$(0) if it finds one in SuperVues Header information
! If HEADER is a String variable it will drop all characters after a Chr$(0)
!
MAP1    HEADER,X,200    ! to trap header info         (ADDED)
MAP1    OPTION,F,6      ! 1=open  2=read 3=close
MAP1    AREA,X,616      ! DDB area do not change

MAP1    BUFFER,S,200    ! make sure size is compatable with line length of
                       ! file read
MAP1    FILE$,S,24      ! filename
MAP1    LENGTH,F        ! length of line returned here to check for eof
MAP1    SAV'FILE$,S,24


? TAB(-1,0);"Testing SVLIN.SBR Routine"
? TAB(3,1);"INPUTS A LINE FROM A SUPERVUE FILE"
? TAB(5,1);:INPUT LINE "Enter Name of SUPERVUE file ",FILE$
       DOT=INSTR(1,FILE$,".")
       IF DOT<1 THEN FILE$=FILE$+".T"
       SAV'FILE$=FILE$
?
! open file
       OPTION=1                                ! 1 = open a file status
       ? "Opening ";FILE$
       XCALL SVLIN,OPTION,AREA,FILE$
       OPTION=2                                ! 2 = read a file status
ONE:
       ? "Reading ";FILE$
       ?
       CALL HEADER'CHECK
       GOTO PRINTIT
PROCESS:
       CALL IN                         ! get next line
       IF LENGTH=0 THEN GOTO CLOSE     ! if end of file then close it
PRINTIT:
       ? BUFFER[1,LENGTH]              ! print it out
       GOTO PROCESS

!!!!!!!!!!!!
! SUBROUTINES
!!!!!!!!!!!!

IN:
       BUFFER=""               ! clear buffer
       OPTION=2                ! read option
       XCALL SVLIN,OPTION,AREA,BUFFER,LENGTH
       RETURN
CLOSE:
       FILE$=SAV'FILE$
       OPTION=3                ! close option
       ?
       ? "Closing ";FILE$
       XCALL SVLIN,OPTION,AREA,FILE$
       END

HEADER'CHECK:
!
! sv header information begins with chr$(1)
! and ends with chr$(1) if the header is there.
! It also may contain chr$(0) or another chr$(1) in the Header information
! so be sure to check header with an unformatted variable

       OPTION=2                ! read option
       XCALL SVLIN,OPTION,AREA,HEADER,LENGTH
       IF HEADER[1,1]#CHR$(1) THEN BUFFER=HEADER:RETURN
HEADTST:
       HEAD=INSTR(2,HEADER,CHR$(1))    ! check for end of header info
       HEAD2=INSTR(HEAD+1,CHR$(1))     ! check for the real end
       IF HEAD2>0 THEN HEAD=HEAD2      ! if there are more than two CHR$(1)
       BUFFER=HEADER[HEAD+1,LENGTH]    ! take out header info
       LENGTH=LENGTH-HEAD              ! make LENGTH =  -header data
       RETURN