1

Witam :)
Na razie malutka przymiarka do atarowskiej działalności - skrypt (klasa PHP 5) kolorujący składnię programów w Atari Basicu. Działanie jest proste: podajemy niesformatowany tekst, otrzymujemy sformatowany w postaci HTML. Przykład działania można zobaczyć na mojej stronie; tekst który pojawia się w ramce można skopiować np. do Worda.
Na razie skrypt jest bardzo biedny - nie koloruje słów kluczowych "upchniętych" bez odstępów, za to koloruje słowa kluczowe w komentarzach i cudzysłowach. To jest do dopracowania. Zastanawiam się też nad dodaniem obsługi kodu ATASCII.
Liczę na komentarze, również krytyczne, zwłaszcza na opinie dotyczące sensu robienia czegoś takiego.
Strona ze skryptem do pobrania i przetestowania (Ksq 0.0.1):
http://cosi.com.pl/skrypty.php
Pozdrowienia!

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

A moze kolorowac Turbo Basic XL?

Kaz/Rohar
Prowadzę stronę dla obłąkanych: http://atari.online.pl/

3

... E e... to zamęt wprowadza, Oko nie lubi takich skoków, tekst ma być jednolity wtedy łatwiej przyswajalny.

4

Zenon - chyba Twoje oko ;P
Kazde inne dobrze sie czuje majac punkty orientacyjne pozwalajace na szybsza orientacje w przewijanym kodzie.
Dlatego wszystkie edytory dla programistow maja kolorowanie skladni.

5

Kaz: Na razie nie, ale to jest kwestia zamiany jednego arraya. O ile oczywiście TB XL ma podobne reguły składniowe jak jego starszy brat :)

Zenon/Dial: Dzięki bogom za edytor Kate ;) Gdyby nie kolorowanie składni w PHP/Perlu, to zapłakałbym się chyba szukając pierwszego lepszego buga. Druga sprawa to prezentacja kodu - na przykład na forum. Forum php.pl ma kolorowanie kodu w postach dzięki wbudowanej w PHP funkcji highlight_string().

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

6

Pozwolę sobie mały OT... Jakim sposobem wkleić napisany pod blaszakiem kod do naszego emulka? Nie widzę takiej opcji w emulku, a za bardzo nie wiem w jakim formacie powinienem zapisać plik tekstowy na dyskietce (makeATRem), aby potem go zgrabnie wczytać. Jak to zrobić odwrotnie? Czyżby był jakiś fajny konwerterek txt2xxx?

Pozdrawiam
Maciej

7 Ostatnio edytowany przez maw (2008-03-03 01:55:49)

da się z hdd... ENTER"H1:mojplik.bas" nie pamiętam, jakie znaki końca wiersza trzeba było wymusić.

//EDIT:

LIST"H1:MY.BAS"

daje taką postać pliku:
[ansi]10 REM ATARI FILE?20 PRINT "TO EST TEKS"?[/ansi]
czyli "<cr><lf>" windowsowskie trzeba reg_repl na ">"

___
Press play on tape...

8

Do tego co napisał maw, dodam jeszcze dwa naprawdę króciutkie skrypciki w Perlu:
- ten zamienia atarowskie znaki końca linii na linuksowy $13 (można zmienić na windowsowy CR/LF, zamieniając \n na \n\r):

#!/usr/bin/perl
while(<ARGV>){s/\x9b/\n/g;print;}

- a ten odwrotnie:

#!/usr/bin/perl
while(<ARGV>){s/\n/\x9b/;print;}

W Basicu wymiana plików z pecetem odbywa się oczywiście poprzez LIST/ENTER. Action! też zapisuje swoje pliki w formacie ATASCII.

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

9

Skrypt nie zmienia wielkości znaków w nazwie zmiennej. Generalnie na wielkie litery można zmieniać wszystko co występuje poza cudzysłowami i nie jest komentarzem.

BTW:
0x0d - \r (13) - koniec wiersza w MacOS
0x0a - \n (10) - koniec wiersza w uniksach
0x0d, 0x0a - \r\n (13, 10) - koniec wiersza w DOS-ie i Windows

Zawsze mam rację, tylko nikt mnie nie słucha.

10

scalak napisał/a:

Pozwolę sobie mały OT... Jakim sposobem wkleić napisany pod blaszakiem kod do naszego emulka? Nie widzę takiej opcji w emulku, a za bardzo nie wiem w jakim formacie powinienem zapisać plik tekstowy na dyskietce (makeATRem), aby potem go zgrabnie wczytać. Jak to zrobić odwrotnie? Czyżby był jakiś fajny konwerterek txt2xxx?

To może ja pomogę. Można to zrobić tak: Gdy mamy gotowy tekst programu zapisujemy go jako plik "txt". Następnie trzeba zrobić konwersję do Atascii ze względu na inny sposób kodowania końca linii. Tutaj można się posłużyć emulatorem Atari800win. Wchodzimy w opcję "Convert", "Ascii to Atascii", wskazujemy plik i wybieramy opcję "EOL only". Potem uruchamiam program "MakeATR" i dodaję skonwertowany plik do dyskietki (pliku atr). Potem podpinamy plik do stacji dysków w emulatorze i wczytujemy program Basicową komendą "Enter"

Jak zrobić odwrotnie? Czyli wylistować program do powiedzmy windowsowego notatnika? Jest w emulatorze plugin do drukarki. Trzeba go skonfigurować aby wysyłał tekst do programu Notanik. Sorki, nie powiem z pamięci co tam trzeba wybrać i zaznaczyć. Jest to dosyć proste. Jakbyś sobie nie radził to daj znać to wtedy sprawdzę i napiszę co tam dokładnie trzeba zrobić.
Potem wystarczy wpisać w basicu
LIST "P:" i po chwili otworzy się nam okienko Notatnika z listingiem programu.

11

Lizard: cholera, ja cały czas żyłem w przeświadczeniu, że uniksowy newline ma kod $13 :D
Dzięki za sugestię, faktycznie zmienne też można "powiększyć", to nie C ;)

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

12

Dziękuje wszystkim za pomoc! Przetestowałem metodę Urborga jest miodzio.

13

Cosi napisał/a:

Dzięki za sugestię, faktycznie zmienne też można "powiększyć", to nie C ;)

Ogólnie. Atari Basic rozumie tylko wielkie litery. Próba wpisania instrukcji lub nazwy zmiennej małymi literami kończy się błędem.

Zawsze mam rację, tylko nikt mnie nie słucha.

14

Lizard napisał/a:

Próba wpisania instrukcji lub nazwy zmiennej małymi literami kończy się błędem.

a pomyśleć, że to tylko różnica jednego bitu...

___
Press play on tape...

15

OIDP, to można było za to wprowadzać instrukcje w inwersie i to też różnica jednego bitu, z tym tylko, że siódmy bit łatwiej sprawdzić niż "bit wielkości znaku".

Zawsze mam rację, tylko nikt mnie nie słucha.

16

chyba tak samo latwo - rozkazem BIT ?

http://atari.pl/hsc/ad.php?i=1.

17 Ostatnio edytowany przez maw (2008-03-06 11:18:53)

właśnie - co to za różnica siódmy czy szósty (jeżeli się nie mylę) bit ?

//EDIT: nie mylę się:

? CHR$(65)
? CHR$(65+32)
? CHR$(65+32+128)
___
Press play on tape...

18

? CHR$(123)
? CHR$(123-32)
? CHR$(96)
? CHR$(96-32)
Zawsze mam rację, tylko nikt mnie nie słucha.

19 Ostatnio edytowany przez maw (2008-03-06 17:37:47)

Lizard, czego to ma dowodzić ? :|

0x20: 00100000
---------------------
0x7B: 01111011
- 0x20:
0x5B: 01011011

0x60: 01100000
- 0x20:
0x40: 01000000

___
Press play on tape...

20

xxl, pobierając bajt z pamięci od razu "widzisz" stan siódmego bitu. W przypadku piątego nie jest już tak łatwo.

maw, "dowiodłem", że nie można ot tak dodawać/odejmować lub ustawiać/kasować piątego (a nie szóstego) bitu jeśli naszym celem jest zmiana wielkości litery. W przypadku zamiany znaku w inwersie na normalny nie musimy, a nawet nie powinniśmy sprawdzać, czy bit jest ustawiony.

Zawsze mam rację, tylko nikt mnie nie słucha.

21

to moze jednym zamachem zalatwic male i inverse:

lda znak
and #%01011111

chyba basic xe mozna tak ustawic, ze nie rozroznia malych/duzych/inverse.

do Cosi:
nie patrzylem na skrypt ale rozumiem, ze czyta on TEKST i formatuje? gdzies na sieci znalazlem instrukcje jak czytac stokenizowany program basica (nawet kilku dialektow na atari z przykladowym programem) dodalem do atariki ale chyba ktos wykasowal - mozna to przeciez odnalezc.
a gdybys tak napisal programik czytajacy stokenizowanego basica i kolorowal skladnie? hmmm, a gdybys tak napisal programik ktory moze zapisywac stokenizowanego basica? mielibysmy na pc crossTurboBasicaXL :-)

czyta to Tebe?

http://atari.pl/hsc/ad.php?i=1.

22 Ostatnio edytowany przez maw (2008-03-07 12:10:07)

Lizard, ascii też został zbudowany w oparciu o bloki znaków, jeżeli wiemy, że interesuje nas konkretny blok znaków, to spokojnie możemy operację na bitach zrobić - co pokazuje maskowanie xxla i moje podkreślenie+pogrubienia. To co Ty pokazałeś zadziałało, ale na kompletnie innym bloku znaków.

//EDIT: tak, piąty, nie szósty - jak napisałem na początku

___
Press play on tape...

23

xxl: Tak, istotnie, zrobiłem to w najprostszy sposób, tzn. wczytuję plik do zmiennej tekstowej i za pomocą wyrażeń regularnych wydłubuję słowa kluczowe z zastrzeżeniem pewnych warunków. Przyznaję, że trochę utknąłem na warunku wyciągającym tylko słowa _poza_ cudzysłowami - może ktoś zna wyrażenia regularne Perla?
Czytanie/zapisywanie stokenizowanego Basica to świetny pomysł, ale: 1) trochę się mija z celem mojego skrypciku, 2) na razie skupiłem się na większym, dużo ciekawszym i chyba pożyteczniejszym projekcie, którym się pochwalę może w ten weekend :)

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

24

A propos stokenizowanego zapisu Basica: De Re Atari - 10 rozdział

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

25

A propos stokenizowanego zapisu w BASIC-u, sto lat temu opisał to po polsku Zientara, a lista tokenów razem z (krótkim, przyznaję) omówieniem struktury programu jest od pięćdziesięciu lat w Atariki ;)

KMK
? HEX$(6670358)