Potrzebuję napisać prosty programik w Basicu. Wyswietla 200 lini po komendzie PRINT. Potrzebuję, żeby po 15 liniach wyswietlanie się zatrzymało a po naciśnieciu dowolnego klawisza albo konkretnie spacji na następnym ekranie wyswietlone zostanie następne 15 lini.
Pojecia nie mam jak to zrobić.
1 PRINT "????? . . . . 15 PRINT "???? - i tu zatrzymanie z informacją "nacisnij spację żeby wyświetlić następne 15 linii itp". . . . . . . 200 PRINT"?????
10DIM L$(120):OPEN #1,4,0,"K:":TRAP30 20? CHR$(125);:FOR I=1TO15:READ L$:? L$:NEXT I:GET #1,K:GOTO20 30END 100REM ----- PIERWSZA STRONA 101DATA PIERWSZA STRONA PIERWSZA LINIA 102DATA DRUGA LINIA 103DATA 104DATA 105DATA 106DATA 107DATA 108DATA GDZIES TAM W SRODKU LINIA 109DATA 110DATA 111DATA 112DATA 113DATA 114DATA 115DATA OSTATNIA LINIA PIERWSZEJ STRONY 200REM ----- DRUGA STRONA 201DATA I DRUGA STRONA 202DATA DRUGA LINIA 203DATA 204DATA 205DATA 206DATA 207DATA 208DATA GDZIES TAM W SRODKU LINIA 209DATA 210DATA 211DATA 212DATA 213DATA 214DATA 215DATA OSTATNIA LINIA 300REM ----- TRZECIA STRONA 301DATA PIERWSZA LINIA 302DATA DRUGA LINIA
W kolejnych liniach DATA wpisujesz linie tekstu. W liniach setnych dla pierwszej strony, w dwusetnych dla drugiej itd.
Edit: Jak nie chcesz czyszczenia ekranu to w linii 20 skasuj
Z zapisem do txt na dyskietkę sobie poradziłem mniej więcej komendą 0 OPEN #2,8,0,"D1:PLIK.TXT" 1 PRINT #2;... A czy jest możliwość wrzucenia w Basicu na ekran Atari zawartości tego pliku (plik.txt); zdań, z tej dyskietki? TXT ma mniej więcej taką postać (› to są znaki końca lini - returny): TEKST 1›TEKST 2›TEKST 3›TEKST 4›TEKST 5›TEKST 6›TEKST 7›
Próbowałem znaleźć jakąś przeglądarkę plików txt, ale na gołe Atari niestety chyba nie ma. Czy ktoś pomoże? Mam książkę Atari Basic ale tam niestety tego nie piszą - jak odczytywać pliki txt. Jak to można zrobić?
czyli chcesz skopiować plik na urządzenie S: to można na wiele sposobów zrealizować. w czystym basicu to będzie powolne - czytasz poszczególne znaki z pliku za pomocą GET i wtedy możesz je printować ze średnikiem(albo PUTować na urządzenie #6). w turbobeju można szybciej - zrobić BGET do zmiennej tekstowej, którą potem w całości wyprintujesz
Pliku nie chcę skopiować, tylko jego zawartość na ekran komputera, ale chyba się zrozumieliśmy, dzięki za wskazówki - o to mi chodziło. Będę próbował "metodą prób i błędów:. Dzięki pirx.
Jeżeli to jest plik tekstowy to nie trzeba czytać tego bajt po bajcie za pomocą GET, można wykorzystać INPUT na kanale otwartym w trybie odczytu, np. tak:
10 OPEN #1,4,0,"D:PLIK.TXT" 11 DIM T$(256):TRAP 13 12 INPUT #1,T$:? T$:GOTO 12 13 CLOSE #1
Wow seban - nie wiedziałem jak to jest z tymi kanałami. To co napisałeś jest genialnie proste i działa. Wielkie dzięki. Oto mi chodziło. A ja już męczyłem się z AtariWriterem. żeby podglądać zawartość pliku
Chciałem zatrzymać po 3 nowych liniach Printa, działanie pętli w programie sebana za pomocą INPUT, żeby automatycznie się pauzowało przewijanie printowanego pliku, albo najlepiej automatyczna pauza za pomocą ctrl 1 (To chyba POKE 764,159) ale chyba się nie da.
To o czym wspominasz można zrealizować na dwa sposoby, jeden bardzo prosty, ale w tym wypadku musisz mieć odpowiednio sformatowany plik tekstowy który chcesz wypisywać na ekran. Zakładając że każda linia kończy się znakiem "End of Line" (#155, $9b), możesz to zrealizować w bardzo prosty sposób, np. taki:
Natomiast jeżeli linie będą dłuższe niż 40 znaków, to powyższy program nie wypisze po 3 linie, a po 3 "rekordy" danych, każdy "rekord" danych to ciąg znaków zakończony sekwencją "End of Line" [bajt o wartości 155 (dec), $9b (hex)]. Taki rekord danych nie może być dłuższy niż 256 znaków, jeżeli tak będzie wystąpi błąd #137 (truncated record) i w tym wypadku nastąpi zakończenie działanie programu (błąd zostanie przechwycony przez TRAP).
Aby ominąć to ograniczenie trzeba by czytać plik w inny sposób, jeżeli zawsze chciałbyś czytać po 3 linie (3*40 znaków) to trzeba by do tego zaprząc już basicowy "GET #1,C" (ale to będzie dość wolne), albo użyć paru POKE i użyć bezpośredniego wywołania systemowego CIO. Tak jak wspominał Pirx, w Turbo Basic XL załatwia to "BGET" (binary get).
Przykład z czytaniem znak po znaku i wypisywaniem po 3 linie (3*40 znaków):
Jesteś Wielki - Seban. Ten pierwszy działa perfekcyjnie, na moim pliku. Nie wiedziałem że trzeba otworzyć dwa kanały. Męczyłem się z tym cały dzień i mi się nie udało napisać działającego programu, tak więc jestem ci bardzo wdzięczny za podesłanie rozwiązania, jeszcze raz dzięki wielkie.
Ten drugi kanał jest otwierany tylko po to aby sobie poczekać na wciśnięcie klawisza (otwierany jest kanał dla urządzenia "K:" - keyboard/klawiatura). W przypadku Atari-OS większość urządzeń w systemie ma swoje sterowniki i można ich używać za pomocą standardowych wywołań systemowych. Tak jest w przypadku klawiatury "K:", edytora ekranowego "E:", magnetofonu "C:", sterownika "S:" w przypadku trybów graficznych, "P:" w przypadku drukarki, a jeżeli załadujesz DOS pojawi się także urządzenie "D:".
W tym moim przykładzie otwarcie drugiego kanału jest potrzebne tylko po to aby później wywołać sobie GET #2,K, co powoduje odczytanie znaku z urządzenia "K:", czyli po prostu klawiatury... a to skutkuje czekaniem na wciśnięcie klawisza. W zmiennej K ląduje kod wciśniętego klawisza w kodzie ATASCII.
Seban - dodałem do Twojego posta znaczniki [ code basic ], wtedy ładniej formatuje listing i można go zapisać jako plik ATASCII. Przypomnę z FAQ punkt 6: ->link<-
[ code basic ]i [ /code ] również przeznaczone do wstawiania listingów, ale tym razem dla programów w Atari Basic i Turbo Basic XL. Wszystkie słowa kluczowe obu tych języków oraz użyte cyfry są wyróżniane kolorem, co ogromnie zwiększa czytelność listingu.
Dzięki Kaz za poprawki formatowania i za wskazanie linku do FAQ. Przyznam szczerze, że szukałem jakiegoś info o formatowaniu na forum ale nie znalazłem. Wygląda na to że za słabo szukałem.
Być może warto dodać odnośnik do tego FAQ w górnej sekcji strony forum? (tam gdzie jest Lista Wątków/Kategorie/Szukaj/Profil).
Widziałem w innych postach dodatkowe formatowanie ale nie wiedziałem jak je wykonać. Miałem nawet o to pytać ale zająłem się czymś innym i zapomniałem o tym. Koniec końców pozostało tak surowo jak to wkleiłem do czas aż nie dokonałeś poprawek.