atarionline.pl Basic - potrzeba pomocy w napisaniu pewnie prostego kodu - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorMatthewNS
      • CommentTime29 Apr 2024 13:04 zmieniony
       
      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"?????
      • 2: CommentAuthormono
      • CommentTime29 Apr 2024 13:04 zmieniony
       
      10 DIM L$(120):OPEN #1,4,0,"K:":TRAP 30
      20 ? CHR$(125);:FOR I=1 TO 15:READ L$:? L$:NEXT I:GET #1,K:GOTO 20
      30 END
      100 REM ----- PIERWSZA STRONA
      101 DATA PIERWSZA STRONA PIERWSZA LINIA
      102 DATA DRUGA LINIA
      103 DATA
      104 DATA
      105 DATA
      106 DATA
      107 DATA
      108 DATA GDZIES TAM W SRODKU LINIA
      109 DATA
      110 DATA
      111 DATA
      112 DATA
      113 DATA
      114 DATA
      115 DATA OSTATNIA LINIA PIERWSZEJ STRONY
      200 REM ----- DRUGA STRONA
      201 DATA I DRUGA STRONA
      202 DATA DRUGA LINIA
      203 DATA
      204 DATA
      205 DATA
      206 DATA
      207 DATA
      208 DATA GDZIES TAM W SRODKU LINIA
      209 DATA
      210 DATA
      211 DATA
      212 DATA
      213 DATA
      214 DATA
      215 DATA OSTATNIA LINIA
      300 REM ----- TRZECIA STRONA
      301 DATA PIERWSZA LINIA
      302 DATA 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
      ? CHR$(125);:
      • 3: CommentAuthorMatthewNS
      • CommentTime29 Apr 2024 13:04
       
      @mono dzięki wielkie :)
      • 4: CommentAuthorAtaripuzzle
      • CommentTime29 Apr 2024 16:04 zmieniony
       
      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ć?
      • 5:
         
        CommentAuthorpirx
      • CommentTime29 Apr 2024 17:04
       
      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
      • 6: CommentAuthorAtaripuzzle
      • CommentTime29 Apr 2024 17:04 zmieniony
       
      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.
      • 7: CommentAuthorseban
      • CommentTime29 Apr 2024 20:04
       
      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
    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
      • 9:
         
        CommentAuthorpirx
      • CommentTime30 Apr 2024 01:04
       
      no tak, INPUT, kurcze czyta po wierszu jak unixy :)
      • 10: CommentAuthorAtaripuzzle
      • CommentTime1 May 2024 10:05 zmieniony
       
      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.
      • 11: CommentAuthorseban
      • CommentTime2 May 2024 11:05 zmieniony
       
      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:
      10 CLOSE #1:OPEN #1,4,0,"D:TEST.TXT"
      11 CLOSE #2:OPEN #2,4,0,"K:"
      12 DIM T$(256):TRAP 20
      13 FOR I=1 TO 3
      14 INPUT #1,T$:? T$
      15 NEXT I
      16 GET #2,K
      17 GOTO 13
      20 CLOSE #1
      21 CLOSE #2
      23 END

      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):
      10 CLOSE #1:OPEN #1,4,0,"D:TEST.TXT"
      11 CLOSE #2:OPEN #2,4,0,"K:"
      12 POKE 82,0:GRAPHICS 0:TRAP 20
      13 FOR I=1 TO 40*3:GET #1,C:? CHR$(C);:NEXT I
      16 GET #2,K
      17 GOTO 13
      20 CLOSE #1
      21 CLOSE #2
      23 POKE 82,2:END
      • 12: CommentAuthorAtaripuzzle
      • CommentTime2 May 2024 12:05 zmieniony
       
      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.
      • 13: CommentAuthorseban
      • CommentTime2 May 2024 13:05 zmieniony
       
      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.
      • 14: CommentAuthorAtaripuzzle
      • CommentTime2 May 2024 14:05 zmieniony
       
      Pięknie dziękuję za szczegółowe wyjaśnienia. Wysłałem ci Seban priwa w tym wątku.
      • 15: CommentAuthorgorgh
      • CommentTime2 May 2024 15:05
       
      tak przy okazji: wczoraj język Basic obchodził 60 urodziny
      • 16: CommentAuthorAtaripuzzle
      • CommentTime10 May 2024 22:05 zmieniony
       
      "(...)Przykład z czytaniem znak po znaku i wypisywaniem po 3 linie (3*40 znaków):...." (post 11)

      Jacek w swoich filmikach też korzystał z podobnego programu czytającego znak po znaku - trochę inaczej napisanego - może się komuś przyda.
      10 ? CHR$(125):DIM A$(1)
      20 OPEN #1,4,0, "D:PLIK.TXT"
      25 FOR X=1 TO 1000000
      30 TRAP 100:GET #1,A
      40 ? CHR$(A);
      50 NEXT X
      100 ? :? "KONIEC PLIKU"
      • 17:
         
        CommentAuthorKaz
      • CommentTime11 May 2024 05:05 zmieniony
       
      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.
      • 18: CommentAuthorseban
      • CommentTime11 May 2024 14:05 zmieniony
       
      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.
      • 19:
         
        CommentAuthorKaz
      • CommentTime11 May 2024 17:05
       
      Nie szukałeś słabo, tylko naprawdę trudno to znaleźć. Mogłoby oczywiście być na górze albo gdziekolwiek, ale nie ma komu tego zrobić :)
      • 20: CommentAuthorMatthewNS
      • CommentTime22 Jun 2024 10:06
       
      Cześć,

      Całkowicie już zapomniałem tego BASIC-a.
      Pomóżcie mi z kolorami:
      1. Ustawienie koloru tła
      2. Ustawienie koloru czcionki
      3. Ustawienie koloru ramki

      Jak?
      • 21: CommentAuthornewton
      • CommentTime22 Jun 2024 10:06
       
      SETCOLOR 2,2,8
      SETCOLOR 1,0,0
      SETCOLOR 4,4,8


      Więcej informacji: ->link<-
      • 22: CommentAuthorMatthewNS
      • CommentTime22 Jun 2024 10:06
       
      Dzięki…