This is a logical function which actually has two uses in SuperBASIC. If no channel number is specified, then PRINT EOF will return 1 unless the current program contains some DATA lines which have not yet been READ. This is therefore useful to create programs which can handle any amount of data. However, if a channel number is specified, for example PRINT EOF(#1), then zero will be returned unless the given channel is linked to a file and the file pointer is at (or beyond) the end of that file (ie. whether or not there is data to be read from that channel).
Two simple programs to retrieve an address from a given name (the full name must be given on input). The first of these has the data stored in the program, whereas the second has it stored on a file called flp1_address_data:
100 RESTORE 110 MODE 4 120 OPEN #3,con_448x200a32x16:BORDER#3,1,2:PAPER#3,0:INK#3,7 130 INPUT #3,'Input name to look for:'!search$ 140 REPeat loop 150 IF EOF:PRINT#3\\"No address stored":EXIT loop 160 READ name$,address$ 170 IF name$==search$:PRINT #3\\name$,address$:EXIT loop 180 END REPeat loop 190 CLOSE #3 200 DATA 'Fred Blogs','17 Mulberry Court' 210 DATA 'John Peters','182 Johnson Ave.' 220 DATA 'Martin Edwards','83 Olive Drive'
100 OPEN_IN #3,flp1_Address_data 110 MODE 4 120 OPEN #4,con_448x200a32x16:BORDER#4,1,2:PAPER#4,0:INK#4,7 130 INPUT #4,'Input name to look for:'!search$ 140 REPeat loop 150 IF EOF(#3):PRINT#4\\"No address stored":EXIT loop 160 INPUT #3;name$,address$ 170 IF name$==search$:PRINT #4\\name$,address$:EXIT loop 180 END REPeat loop 190 CLOSE #4:CLOSE #3
Until v2.55 this command was the same as EOFW, which meant that it would only return a value if there was data waiting or it had received an end of file code - this was changed back to the original to maintain compatibility.
DATA specifies a line of data statements. RESTORE resets the data pointer and READ will actually fetch the data. CLOSE closes a given channel after it has been used. PEND or IO_PEND% are much better for use on pipes. See also EOFW.