1

Ten jezyk po paru godzinach prob powoli zaczyna doprowadzac mnie do szalu! Na razie wyglada mi to na na cos, co stoi okrakiem miedzy assemblerem a jezykiem wyzszego poziomu. W rezultacie wyszlo cos ubogiego i totalnie nieintuicyjnego :( Brak zmiennej typu string, obslugi liczb real oraz podejscie do tablic to juz komedia...

W zwiazku z tym, czy ktos moglby mi zdradzic czy mozna jakos uzyskac w Action!:
- funkcje length() ktora zwracalaby calkowita ilosc pozycji tablicy?
- latwy sposob na zrobienie a= b + c gdzie a, b, c to stringi (czyli zmienne char array bo stringow jak pisalem nie ma)

No problem w tym, ze co bym nie probowal robic to okazuje sie, ze najlepiej zadeklarowac sobie jakis kawalek pamieci i pracowac na niej na zasadzie konkretnych bajtow. A tak to juz lepiej i prosciej w assemblerze dzialac...

2

Hm, pisane z bańki podczas przerwy śniadaniowej, pewnie nie działa :)

CARD FUNC Length(CHAR ARRAY tab)
  CARD i
  i=0
  WHILE tab(i)<>0 DO
     i==+1
  OD
RETURN (i)
Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

3

Taki madry to ja tez bylem, ale nie z Action! takie numery Stirlitz ;)
Przy odrobinie szczescia mozesz w petli przeleciec cala pamiec. Przeciez nie zadeklarowales wielkosci tablicy (slusznie), a jesli w pamieci tuz za tablica tab jest nastepna tablica z elementami niezerowymi, albo cokolwiek innego?

4

delego kod zadziala z cstringami. chodzi o to ze cstring powinien byc konczony zerem.
w przypadku atarynki moze tez czasem byc konczony znakiem nowej linii, zalezy jaka funkcja masz na nim operowac.
funkcja dodawania stringow, to nic innego jak "konkatencja" - pod tym katem radze szukac kodow (gdzies na jakims ftp chyba lezaly, moze nawet na pigwie)

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

5

No ale kto powiedzial, ze w tablicy sa stringi?? Moga byc liczby i nie mam pojecia jakie, rowniez 0.
Bida.

Juz zrobilem obejscie (w kocu zawsze mozna liczyc ile sie dodaje do tablicy, trzymac w osobnej zmiennej i przekazywac gdzie trzeba), ale i tak bida...

6

A taki znany Kuba Husak zakasal rekawy i napisal w Action! pare niezlych programow  (Garfield Demo, Problem Jasia), Warsaw Tetris to tez chyba z Action (kompilowanego?).  Moze wiec to taki nienajgorszy jezyk (?). ;)

7

Do kitu jezyk :P A dokladnie do kitu go sobie dobralem do tego co chce zrobic - gry tekstowej. Potrzebne mi sa glownie zaawansowane operacje na stringach i tabelach. A z tym chyba w Action jest najgorzej. Moj blad.

Wyciagnalem wlasnie oryginalny manual i znow sie zgrzalem:
- nigdzie nie napisali ze maksymalna dlugosc ciagu tekstowego to 255 znakow. Dopiero malym drukiem ze w pierwszym bajcie jest dlugosc tekstu.
- slowem sie nie zajakneli ze do procedury nie mozna przekazac jako parametru ARRAY'a.
- nie tylko nie ma prostego dodania stringow na zasadzie a = b + c, nie ma funkcji wyszukania podciagu w ciagu, nie ma length(), ale nie mozna nawet napisac IF A = "Y" THEN... ! Trzeba uzywac funkcji Scompare().
- o braku obslugi liczb REAL juz pisalem.

Ogolnie: żenuła!

Ale jak zaczalem to skoncze! Juz mam 1/3 prostego silnika. Nie bedzie Action! plul mi w twarz ;)

8

Nosty, stringi w Basicu też nie mogą być dłuższe, sposób reprezentacji stringa jest zapożyczony z Pascala, Turbo Pascala, tam długość ciągu znakowego można odczytać z 1-go bajtu takiego ciągu (długość = string[0])

za dużo wymagasz, za bardzo przesiąkłeś językami z wyższych platform

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

9

chcialbym tylko nadmienic, ze wiele jezykow (nizszego i wyzszego poziomu) operacje na stringach realizuje poprzez biblioteki, np. c++.
na poczatku mozna zrobic sobie podstawowa biblioteke do operacji na stringach (strlen, strcat, strcmp, ... - nazwy z biblioteki c zapozyczone). poswiecisz na to 1-2 wieczory, ale bedziesz mial podstawowe narzedzia do obecnego projektu jak i dla przyszlych.

10

no macie troche racji... jak mowi tebe odwyklem chyba po prostu :/

11

tebe napisał/a:

Nosty, stringi w Basicu też nie mogą być dłuższe, sposób reprezentacji stringa jest zapożyczony z Pascala, Turbo Pascala, tam długość ciągu znakowego można odczytać z 1-go bajtu takiego ciągu (długość = string[0])

za dużo wymagasz, za bardzo przesiąkłeś językami z wyższych platform

Srututututu. Nawet w Atari Basic bez problemu można używać stringa na całą wolną pamięć.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

12

tak dla sportu pewnie Epi wklepuje takiej stringi :) omijając ograniczenie 3 wierszy dla jednej linii listingu Basic-a

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

13

A takie się procedurki przydadzą?

http://atariwiki.strotmann.de/xwiki/bin … le+Strings

--
Dhor/M.E.C.

14

Pewnie sie przydadza jako pomoc. Dzieki. Choc juz zaczalem pisac wlasna biblioteke operujaca na stringach w formacie action.
Jak wyjdzie cos sensownego to sie podziele.

Zeby ten jezyk mial swoje wady to pol biedy, ale odkrylem, ze bardzo trzeba samemu dbac o ochrone pamieci. Teoretycznie Action! umozliwia deklaracje tablic bez podania dlugosci, ale bardzo tego nie polecam. Wyglada na to, ze to luka a nie ficzer ;) Action po prostu ma chyba w nosie czy za tablica ktora rozszerzamy sa jakies dane czy nie. W efekcie program poprawnie sie kompiluje ale efekty jego pracy sa nieprzewidywalne. Napisalem kilka procedur pracujacych na globalnie zadeklarowanych tablicach bez podania dlugosci. Procedury pracuje ok, az nagle glupieje bo w innej czesci programu dodalem dwie instrukcje PrintE()...

Mozliwosc wskazywania adresu gdzie ma byc deklarowana zmienna to juz wogole bardzo niskopoziomowa funkcja, ale przydaje sie do "recznego"
zarzadzania pamiecia. Tylko po co wtedy jezyk wysokiego poziomu?

Koncze zrzedzic i wracam do pracy. Malo casu kruca bomba...

15

Jeszcze tylko pomoc, gdyby ktos chcial powtarzac moja droge przez meke.
Dluuuuga lista bledow w kompilatorze Action!
http://www.umich.edu/~archive/atari/8bi … /bugs2.act

I errata do oryginalnego manuala:
http://www.umich.edu/~archive/atari/8bi … /bugs5.act

16

To co tu czytam to jest jakaś katastrofa :( Nosty, co Ty wyprawiasz ?;)
Po pierwsze zupełnie niepotrzebnie podchodzisz do tego tematu tak bardzo emocjonalnie, przyjemność z nauki czegoś nowego jest wtedy kiedy nie uprzedzasz się do tego itp. Przecież to chyba logiczne, że poznajesz coś nowego i że musi się to znacznie różnić od tego co znałeś do dzisiaj.

Po pierwsze porównujesz znane przez Ciebie interpretery z kompilatorem. Te pierwsze zawsze były bardziej wygodne i intuicyjne dla userów (szczególnie dla nie programistów) ? dlatego na pewno trafne było Twoje porównanie że Action! ma więcej wspólnego z asm.
Druga sprawa to kwestia tego że sam przyznałeś że nie znasz się na C, a Action! jest właśnie bardzo podobny do C ? dlatego tak Tobą rzuca;) Interpreter i kompilator to dwa światy, a jak zapewne słyszałeś język C właśnie dzięki swoim cechom jest tak popularny i stosowany w praktyce.

Paradoksalnie wspominane przez Ciebie wady Action! są jego największymi zaletami:
- brak funkcji trygonometrycznych: to jest język który miał ułatwić pisanie najbardziej wymagających programów (jak np. gry, proste dema itp.). W programowaniu gier jest tak że pisze się własne typy danych zmiennopozycyjnych, własne funkcje itp. (np. pecetowa biblioteka allegro). Dlatego istnienie takich funkcji nic by nie zmieniło: zajmowałyby miejsce, a i tak pewnie trzeba by było pisać własne. Ja uważam (i zapewne inni też) że brak tych funkcji nie jest wadą. Dla przykładu mój sąsiad w liceum napisał na fizykę program zaliczeniowy (jako bonus bo przecież to był głęboki socjalizm) który wyliczał i wykreślał w czasie rzeczywistym fale stojące itp. Jego nauczyciel był pod dużym wrażeniem, ale pewnie gdyby się dowiedział że Action! nie ma fun. tryg. (i wiedział o czym jest mowa;) to pewnie by padł;)

- ?(...) slowem sie nie zajakneli ze do procedury nie mozna przekazac jako parametru ARRAY'a.?: eee tam ? zaraz nie można...

- ?nie tylko nie ma prostego dodania stringow na zasadzie a = b + c (...)?:

ebook napisał/a:

SAssign
TYP: procedura tekstowa
DEFINICJA: PROC SAssign(<dest>,<source>, BYTE start,stop)
PRZYKŁADY:
SAssign(dest,source,begin,end) SAssign(name,"Atari",10,14) SAssign(file;"OBRAZ",
3,i)
DZIAŁANIE: Kopiuje zawartość ciągu znaków lub tablicy znakowej wskazanej drugim
parametrem do fragmentu tablicy wskazanej przez pierwszy parametr. Kopiowany fra
gment jest umieszczany w ciągu docelowym od znaku wskazanego trzecim parametrem
do znaku określonego przez czwarty. W przypadku niezgodnej długości ciągów proce
dura SAssign działa jak SCopy.

jeszcze mamy procedury: ?SCopy? oraz ?SCopyS? i pewnie jeszcze parę innych. Komentarz do reszty rzeczy sobie daruję ? bo czasu nie mam na pisanie.

- ?nigdzie nie napisali ze maksymalna dlugosc ciagu tekstowego to 255 znakow. Dopiero malym drukiem ze w pierwszym bajcie jest dlugosc tekstu.?: fakty są takie, że w Action! pisałem już scrolle i nie ma żadnego problemu w tym aby ciągi tekstowe były dowolnej długości (pomimo ograniczenia że 1 linia w edytorze może mieć max ~250 znaków.

- ?Mozliwosc wskazywania adresu gdzie ma byc deklarowana zmienna (...) Tylko po co wtedy jezyk wysokiego poziomu??, ehhhh... to jest właśnie jedna z najciekawszych zalet tego języka, wraz z jeszcze jednym (nieznanym powszechnie) rozwiązaniem, umożliwia łatwe pisanie gier i demek. Moc tego języka to nie to co widzisz w man, lecz potencjał ? trzeba wiedzieć co i do czego używać, a wtedy okazuje się dopiero z jak unikalnymi cechami mamy do czynienia. Unikalność Action! pod względem wydajności ? jest niezwykła, myślę że się dużo nie pomylę jeśli powiem że nie ma takiego drugiego języka na świecie.

- ?Dluuuuga lista bledow w kompilatorze Action!?: nie ma języka bez błędów (szczególnie młodego języka), po drugie ja napisałem naprawdę wiele programów w Action! (o czym się ostatnio kilka osób przekonało) i nie potwierdzam jakoby ten język był jakiś wadliwy i jeżyło się w nim od błędów, bo ja sobie nie przypominam nawet jednej sytuacji, w której w podstawowych operacjach (bez których żaden język się obejść nie może) były jakieś błędy komplikujące programowanie. O ile wiem moje liczne programy są stabilne, chyba że sam coś spaprałem na prędce ;)


Przewaga Action! nad innymi kompilatorami polega na tym, że daje duże możliwości np. optymalizacji kodu pod względem prędkości, czego inne języki programowania (np. na 8 bitowcach) nie umożliwiają oraz nie w takim stopniu. Dla przykładu Twoje funkcje do przetwarzania ciągów tekstowych, pewnie będą najszybsze ze wszystkich języków jakie są dostępne na Atari ? jednak gdybyś znał ten język lepiej (i np. nie pisał pętli zliczającej to czego zliczać nie trzeba;) to można napisać te funkcje jeszcze wydajniej i to jest właśnie to co sobie cenią programiści (podobne cechy ma C, ale w praktyce ma gorsze osiągi od Action!).

Jeszcze inną kwestią jest to aby nie używać języka, który służy do pisania najwydajniejszego kodu (chodzi oczywiście o kompilatory), do tak prostych rzeczy które można robić w dowolnym innym języku (przetwarzanie tekstów itp.). Natomiast jeśli jest to punktem wyjścia do poznania tego języka to jestem za ? i chętnie Tobie pod tym względem pomogę (choć sam mało pamiętam Action! i właściwe się go od początku uczę).

Osobną kwestią jest to że programowanie gier jest dość specyficzne i zawsze każdy kompilator (na każdej platformie) używa się dość specyficznie w tej dziedzinie. Jest to pewnego rodzaju wiedza tajemna, a jeśli coś piszesz w Action! to nieuniknione jest zetknięcie z tymi zagadnieniami (różnica polega na tym że masz problem i nie wiesz co z nim zrobić ? co widać w Twoich postach). Kiedyś o tej ?wiedzy tajemnej? napisałem gigantyczny art do AM, ale w końcu się nie pojawił ? dziś zastanawiam się nad solidnym opisaniem tematu, aby przybliżyć Action!, jego mocne (często niepowtarzalne) cechy oraz może zachęcić kogoś do napisania czegoś.

Tak więc Nosty ? trochę luzu i grzecznie się ucz;):)

800XL  XC12  LDW 2000  Portfolio  1040 ST, STE  Falcon 030 (Deskpro)  Jaguar
... oraz inne grzyby i Amigi :-P