OK. Zostawiam odpowiedź dla potomności, może komuś posłuży.
Odpowiedź brzmi
nie da się! Aby dało się to zrobić musi być spełniony jeden z trzech warunków:
1. Znamy długość pliku i odczytujemy za pomocą INKEY$ tyle bajtów, ile jest w pliku.
2. Jako ostatni bajt mamy zapisany znacznik końca pliku i odczytujemy, do póki nie natrafimy na bajt o wartości tego znacznika. Dla plików tekstowych może to być np. CHR$ 255
3. Jako pierwsza zapisana informacja, to liczba stanowiąca ilość bajtów w pliku. Wtedy za pomocą INPUT odczytujemy długość i mamy spełniony warunek 1. Z tym, że taki plik, przestaje być plikiem tekstowym.
Zatem w moim przypadku, należało doprowadzić do sytuacji z punktu 2.
Skoro miałem już otworzony kanał do czytania (przykładowo 5) z pliku, to:
Otworzyłem kolejny kanał do zapisu w pliku tymczasowym:
OPEN# 6;"m";1;"temp"
Skopiowałem zawartość interesującego mnie pliku.
MOVE #5 TO #6
Dopisałem znacznik końca pliku.
PRINT #6;CHR$ 255;
Zamknąłem oba kanały.
CLOSE# 5: CLOSE# 6
Otworzyłem plik tymczasowy do czytania.
OPEN# 5;"m";1;"temp"
Teraz mogłem odczytać zawartość pliku czytając do póki nie napotkałem bajtu 255. Po przeczytaniu, zamykałem kanał 5 i usuwalem plik tymczasowy.
Poniżej cały podprogram odczytu pliku tekstowego do zmiennej. Podprogram zakłada, że w zmiennej f$ znajduje się nazwa pliku a w zmiennej DRV numer napędu. Zawartość pliku zwracana jest w zmiennej a$
1000 REM ReadFile (f$)
1010 OPEN# 5;"m";DRV;f$
1020 OPEN# 6;"m";DRV;"temp"
1030 MOVE #5 TO #6
1040 PRINT #6;CHR$ 255;
1050 CLOSE# 5
1060 CLOSE# 6
1070 OPEN# 5;"m";DRV;"temp"
1080 LET a$ = ""
1090 LET k$ = INKEY$#5
1100 IF k$ = CHR$ 255 THEN GOTO 1130
1110 LET a$ = a$ + k$
1120 GO TO 1090
1130 CLOSE# 5
1140 REMOVE "m";DRV;"temp"
1150 RETURN