Autor Wątek: Edytor tekstu w Basicu  (Przeczytany 8145 razy)

UIMP

  • *
  • Wiadomości: 35
  • Miejsce pobytu:
    Ustroń
Edytor tekstu w Basicu
« dnia: 2014.03.29, 21:06:32 »
Witajcie!
Od bodajże stycznia zeszłego roku, razem z kolegą o nicku Raster piszemy edytor tekstu w Basicu.

Założenia są proste:
-ma się nadawać do użytku (czyli żeby można było tekst zapisać, wydrukować, edytować...)
-napisany w całości w Basicu (ewentualnie z małymi fragmentami assemblera)

Na dziś udało nam się osiągnąć:
-zapis i odczyt tekstu (taśma i dyskietka w formacie zapisu Elwro 800 Junior)
-nawigacja w dokumencie (kursory)
-drukowanie tekstu (nie obyło się bez problemów, o czym poniżej)
-kasowanie znaku (znaków)
-kursor
-wyświetlanie informacji o dokumencie - ilość znaków napisanych, ilość pozostałych znaków (bajtów pamięci - 1 znak = 1bajt pamięci), ilość znaków napisanych w wierszu, ilość linii na stronie, ilość stron


Zatrzymaliśmy się przy:
-wyświetlaniu znaku ENTER (CR) - Junior nie wyświetla kodu 13, jako przejścia do nowej linii
-polskich znakach (o tym również poniżej)
-dopracowaniu drukowania

Program instrukcją CODE INKEY$ sczytuje kod wciśniętego klawisza i zapisuje go w kolejnych komórkach pamięci. Jak wiadomo, jeśli żaden klawisz nie zostanie wciśnięty, wartość ta wynosi 0. Napotkaliśmy tu problem. Otóż:
Elwro 800 Junior ma zaprogramowane polskie znaki. Niestety - pod kodami ASCII 0-5. Kod 0 (ignorowany przez program, aby w pamięci nie pojawiały się niepotrzebne zera) jest w tym przypadku przypisany do litery ź, co powoduje, że po wciśnięciu, litera ta jest pomijana, w związku z czym na ekranie możemy uzyskać z klawiatury wszystkie polskie znaki oprócz "ź". Prawdopodobnie zablokujemy pozostałe polskie znaki i przygotujemy odpowiednie zestaw znaków w UDG.
Drugi problem (mianowicie problem związany z drukowaniem) jest również łatwy do rozwiązania. Drukarka drukuje 64 znaki w wierszu, natomiast na ekranie komputera wyświetlić można jedynie 32 znaki. W związku z tym drukowany dokument inaczej wygląda na ekranie (widzimy 32 znaki w linii i dla takiego układu formatujemy też tekst), natomiast na drukarce mamy wydruk z 64 znakami w linii. Rozwiązanie z ustawieniem drukarki tak, aby drukowała 32 znaki w linii nie ma sensu, bo uzyskujemy wtedy wydruk jedynie na 1/2 szerokości kartki.
Oba te problemy planujemy rozwiązać razem tworząc czcionkę dla 64 znaków w linii i definiując przy okazji wzory polskich znaków w UDG.
Drukowanie z Juniora możliwe jest przy współpracy z większością drukarek igłowych, przy pomocy przejściówki ze złącza Centronics na LPT (prosta do wykonania).

Tak na dziś prezentuje się nasz edytor nazwany EDEK (EDytor tEKstu) - zdjęcia się pojawią, muszę je jeszcze zrobić.

raster

  • *
  • Wiadomości: 23
  • Miejsce pobytu:
    Polny Śląsk
Odp: Edytor tekstu w Basicu
« Odpowiedź #1 dnia: 2014.03.29, 21:41:24 »
Jeszcze trochę o klawiszu CR.
Chcemy, aby po naciśnięciu klawisza CR (czy entera, jak kto woli) można było powrócić do edycji obszarów za nim (dajmy ostatni znak w linii znajduje się w kolumnie 10, chcemy później edytować kolumny 11-32 (puste), a może i kolejne linie). Rozwiązania są dwa:
-wstawiamy kod 13 i za nim od razu wpisujemy tekst, a przy próbie wyedytowania zostają wstawiane znaki w środku pamięci (między początkowym kawałkiem tekstu, a resztą do końca dokumentu) i ten drugi obszar jest przesuwany z każdym wstawionym znakiem. Rozwiązanie niemożliwe raczej w basicu, bo przesuwanie dłuższych dokumentów będzie trwało wieki.
-wstawiamy spacje do pamięci tak, żeby to, co mamy w pamięci zgadzało się z tym na ekranie. Rozwiązanie lepsze od poprzedniego, ale kiedy znajdziemy się w nowej linii, zaczniemy ją edytować także na ekranie, a nawet jeśli tak będzie, to dokument będzie zawierał niepotrzebne spacje, jeśli nie będziemy edytować.

Jak widać, ani jedno rozwiązanie nie jest dobre ani drugie. W związku z tym, czy ktoś poratowałby jakąś prostą procedurką ASM do sposobu pierwszego (niestety, ja znam tylko juniorowy basic, a asm tylko C64, ten Z-80 to jakaś czarna magia)? A może drugi sposób mimo wszystko jest lepszy?

Pozdrowienia dla wszystkich.

Aha, taka jedna rzecz: niech nikt mi (nam ;)) nie mówi, że pisanie tego nie ma sensu, że nikt nie będzie używał itp, itd, my to robimy dla satysfakcji, nikogo do używania nie zmuszamy.
No i sprawa druga, jakby ktoś nie wiedział: Junior w jednym z trybów jest kompatybilny z ZX :D
mam 2x c64, juniora, amigę 600 i ps2... tyle wystarczy ;)

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Edytor tekstu w Basicu
« Odpowiedź #2 dnia: 2014.03.29, 22:43:13 »
-wstawiamy kod 13 i za nim od razu wpisujemy tekst, a przy próbie wyedytowania zostają wstawiane znaki w środku pamięci (między początkowym kawałkiem tekstu, a resztą do końca dokumentu) i ten drugi obszar jest przesuwany z każdym wstawionym znakiem. Rozwiązanie niemożliwe raczej w basicu, bo przesuwanie dłuższych dokumentów będzie trwało wieki.

Powinienem mieć taką procedurkę w ASM Z80, tylko że przystosowaną do 64 znaków w wierszu. Pisałem kiedyś edytor tekstu dla Timexa i choć większość była w basicu, to właśnie samo wyrzucenie linii na ekran było w assemblerze.

UIMP

  • *
  • Wiadomości: 35
  • Miejsce pobytu:
    Ustroń
Odp: Edytor tekstu w Basicu
« Odpowiedź #3 dnia: 2014.03.30, 12:30:38 »
Powinienem mieć taką procedurkę w ASM Z80, tylko że przystosowaną do 64 znaków w wierszu. Pisałem kiedyś edytor tekstu dla Timexa i choć większość była w basicu, to właśnie samo wyrzucenie linii na ekran było w assemblerze.

Chcemy przystosować nasz edytor do 64 znaków w linii, więc taka procedura byłaby pomocna. Gdybyś mógł... :)

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Edytor tekstu w Basicu
« Odpowiedź #4 dnia: 2014.03.30, 12:58:03 »
Potrzebuję kilka dni, bo w obrazach dyskietek nie znalazłem, więc muszę jechać uruchomić realny sprzęt :)

UIMP

  • *
  • Wiadomości: 35
  • Miejsce pobytu:
    Ustroń
Odp: Edytor tekstu w Basicu
« Odpowiedź #5 dnia: 2014.03.30, 13:37:11 »
Spokojnie. Możesz powiedzieć coś więcej o Twoim edytorze?
A jeśli chodzi o programowanie, to Asm nie tykam i zupełnie się na nim nie  znam (choć, może gdybym poćwiczył, to coś by mi się udało napisać), natomiast Basic znam dość biegle.
Mógłbyś powiedzieć, jak wygląda współpraca z dyskietkami w Timexie (albo Spectrumie)? W Juniorze jest to bardzo proste, bo po instrukcji SAVE lub LOAD (MERGE...) podaje się znak "*" i wtedy zapis (odczyt) jest na stację dyskietek. Bez gwiazdki - na magnetofon.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Edytor tekstu w Basicu
« Odpowiedź #6 dnia: 2014.03.30, 13:44:02 »
w TOS dzieje się dokładnie tak samo, również podaje się * po LOAD, MERGE, SAVE, CAT itp.
A co do asma, jest tu kilka osób, które mogę pomóc.

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Edytor tekstu w Basicu
« Odpowiedź #7 dnia: 2014.03.30, 14:11:16 »
Mój edytor powstał 20 lat temu i obsługuje wyświetlanie w trybie graficznym Timexa (512x192) i stację FDD3000 (na poziomie basica). Format pliku i kodowanie polskich znaków są identyczne, jak w PolTasWordzie. Jest też zrobiona obsługa wydruku przez port RS-232 stacji, bo miałem drukarkę Epson FX-850 podłączaną właśnie pod port szeregowy.
Cały edytor jest napisany w basicu, oprócz procedury wyświetlania linii (i być może jeszcze kilku innych drobiazgów, jak czyszczenie ekranu itp. - nie pamiętam).
Mogę swój edytorek wystawić do pobrania, bo mam go na jednym z plików DSK. Przyda się komuś?
A jeśli chcesz zrobić obsługę dysku z poziomu asemblera, jest to dosyć proste i opisane np. tu:
http://8bit.yarek.pl/system/zx.tosa2/tos_bez_tajemnic.html

raster

  • *
  • Wiadomości: 23
  • Miejsce pobytu:
    Polny Śląsk
Odp: Edytor tekstu w Basicu
« Odpowiedź #8 dnia: 2014.03.30, 14:38:45 »
Z tą procedurką to chodziło o to, że przy wstawianiu znaków gdzieś w środku dokumentu musi być przesuwana druga jego część w pamięci i muszą być przesuwane znaki na ekranie. Z tym pierwszym trudno nie powinno być, z tym drugim może trochę ciężej, ale jakoś damy razem radę :)

>Mogę swój edytorek wystawić do pobrania, bo mam go na jednym z plików DSK. Przyda się komuś?
Jasne, że się przyda, a przy okazji zobaczymy, czy Junior ma zgodny system plików na dyskietkach z Timexem.

>A jeśli chcesz zrobić obsługę dysku z poziomu asemblera, jest to dosyć proste i opisane np. tu:
Raczej nie, procedury basicowe bardzo dobrze się spisują, poza tym chcemy używać jak najmniej ASM w tym programie. Ale niech się UIMP wypowie :D

Do 64 znaków w linii chcemy użyć programu 64 Chars in line znalezionego w odmętach World Of Spectrum. Posiada on też edytor czcionek, więc z polskimi znakami nie powinno być trudno. Tylko jeszcze nie wiemy, czy drukowanie ma być w trybie graficznym (ekran zapełnia się dokumentem i polecenie COPY, i tak w koło ;)), czy tekstowym, czyli zwykłe lprint. Ale wtedy nie będzie chyba polskich znaków. Ogólnie z tą drukarką to taki cyrk, że hej. Ale walczymy :D

Pozdrawiam.
mam 2x c64, juniora, amigę 600 i ps2... tyle wystarczy ;)

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Edytor tekstu w Basicu
« Odpowiedź #9 dnia: 2014.03.30, 14:42:34 »
Każda drukarka zgodna z Epsonem pozwala definiować własne znaki w trybie tekstowym :)
A co do wstawiania i przesuwania, to tu Cię pewnie rozczaruję, bo poszedłem drogą na skróty - znaki w środku linii można wstawiać tak długo, aż będą 64 znaki. Nic się nigdy nie przenosi do nowej linii. Ale tak było prościej ze względu na zgodność z PolTasWordem (który nie rozpoznawał końca linii, a wszystkie wiersze miał zawsze po 64 znaki - do końca linii była odpowiednia liczba spacji).

raster

  • *
  • Wiadomości: 23
  • Miejsce pobytu:
    Polny Śląsk
Odp: Edytor tekstu w Basicu
« Odpowiedź #10 dnia: 2014.03.30, 14:58:43 »
A co do wstawiania i przesuwania, to tu Cię pewnie rozczaruję, bo poszedłem drogą na skróty - znaki w środku linii można wstawiać tak długo, aż będą 64 znaki. Nic się nigdy nie przenosi do nowej linii. Ale tak było prościej ze względu na zgodność z PolTasWordem (który nie rozpoznawał końca linii, a wszystkie wiersze miał zawsze po 64 znaki - do końca linii była odpowiednia liczba spacji).

Czyli chyba identycznie jak sposób drugi z tego, co podałem w drugim poście od góry.

Każda drukarka zgodna z Epsonem pozwala definiować własne znaki w trybie tekstowym :)

Ale w trybie graficznym będzie można ładować i drukować wg własnej czcionki. A to już coś ! :D Tak na poważnie, to się jeszcze zobaczy. Chcemy w każdym razie zrobić tak, żeby wydruk na papierze był maksymalnie podobny do tego, co mamy na ekranie.


Twój program umożliwia wstawianie, czy tylko nadpisywanie?
mam 2x c64, juniora, amigę 600 i ps2... tyle wystarczy ;)

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Edytor tekstu w Basicu
« Odpowiedź #11 dnia: 2014.03.30, 15:02:55 »
Twój program umożliwia wstawianie, czy tylko nadpisywanie?

Z tego co pamiętam - to i to. Ale nie dam sobie głowy uciąć.

Odkopałem, w załączniku. W kilku wersjach, pierwotna jest niemal cała w basicu, końcowa jest chyba cała w kodzie. Miłej zabawy :)
« Ostatnia zmiana: 2014.03.30, 15:17:05 wysłana przez trojacek »

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Edytor tekstu w Basicu
« Odpowiedź #12 dnia: 2014.03.30, 17:50:31 »
W Bajtku nr 10 z `93 na s.13 jest prosty edytor tekstu w Basicu na ZXa. Choć pewnie wasz już jest lepszy. :)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

raster

  • *
  • Wiadomości: 23
  • Miejsce pobytu:
    Polny Śląsk
Odp: Edytor tekstu w Basicu
« Odpowiedź #13 dnia: 2014.03.30, 18:12:41 »
@trojacek
To, co dałeś w załączniku z żadnej strony nie przypomina programu, który dałoby się uruchomić na juniorze :D Chyba, że należy to przekopiować na dyskietkę i jakoś odpalić. Ale nie pasują mi jeszcze pliki bin i katalog. Więc jak z tym jest?
mam 2x c64, juniora, amigę 600 i ps2... tyle wystarczy ;)

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Edytor tekstu w Basicu
« Odpowiedź #14 dnia: 2014.03.30, 21:17:37 »
No bo tak wyglądają pliki przerzucone "żywcem" z obrazów DSK :) Musisz sobie przegrać na dyskietkę czy coś innego. W nagłówkach jest info o typach plików :)
A że poprzednio przez przypadek zrzuciłem pliki bez nagłówków, teraz załączam z poprawnymi nagłówkami TOS.
« Ostatnia zmiana: 2014.03.30, 22:01:25 wysłana przez trojacek »