Temat: MultiBASIC

Ja w chwili obecnej pracuję nad nowym interpreterem BASIC-a. Ma to być język programowania na Atari wyposażone w Warpa-4 albo Nową Nienazwaną Dopałę Pasia (na Atari z "golym" 65c816 też pójdzie, ale zostawi mało wolnej pamięci). W związku z tym istnieje tylko wersja pod 65c816, a wersja na 6502 nie powstanie, bo na 6502 jest świetny Turbo BASIC XL i to wystarczy (a ci, co nie chcą sobie za bardzo ułatwiać, mają Atari BASIC).

Screenshota nie posiadam, ale niebieski ekran z napisem "Ready" każdy sobie może łatwo wyobrazić. Nie mogę się też podzielić żadą wersją preview na razie, z braku kabelka.

Nazwa b. oryginalna pochodzi od tego, że MultiBASIC ma stanowić połączenie Turbo BASIC-a XL i BASIC-a XE. Zgodność z Turbo BASIC XL jest na poziomie tokenów (do MultiBASIC-a można wczytywac programy TBXL przez LOAD i one będą działać), natomiast zgodność z BASIC XE ma być na poziomie słów kluczowych (do MultiBASIC-a będzie można wczytywać programy BASIC-a XE przez ENTER i one może będą działać).

W opisie poniższym zakładam, że Atari BASIC i Turbo BASIC XL jest wszystkim znany, wyszczególnię więc tylko różnice w stosunku do obydwu.

Przede wszystkim, interpreter działa z linii komend pod SpartaDOS i pod DOS II+/D (za to ostatnie trzeba dziękować Lizardowi, bo to jego parser jest tam wkompilowany, z małymi acz niezbędnymi modyfikacjami). Składnia:

mb [options] [filename.bas]

Program o nazwie 'filename.bas' zostanie automatycznie załadowany. Opcje są następujące:

-R - po załadowaniu program jest automatycznie uruchamiany, a po zakonczeniu albo przewaniu interpreter zgłasza się przez "Ready"
-B - jak wyżej, ale po zakończeniu programu interpreter wraca do DOS-u

Komunikaty BASIC-a są trochę mniej toporne niż w Atari BASIC: jest "Ready" zamiast "READY", "Error 170 at line 15" zamiast "ERROR-  170  AT LINE 15", "Stopped" zamiast "STOPPED". Dodatkowo obsługa błędów jest rozszerzona opcjonalnie o dwie rzeczy:

- słowne komunikaty błędów, dłuższe niż w TBXL, do 12 znaków
- numer błędu jest wypisywany jako liczba ujemna

A więc nie "ERROR-  170 AT LINE 17", tylko "Error -86 NO SUCH FILE at line 17". Obie featury można wyłączyć.

Listing jest wyprowadzany z wcięciami, jak w TBXL. Można to wyłączać i włączać na dwa sposoby, albo jak w TBXL (poleceniem *L) albo jak w BXE (poleceniem SET). Można regulować skok wcięcia, oraz oddzielnie włączyć i wyłączyć wcięcia dla komend REM i --.

Dodatkowo można opcjonalnie włączyć listowanie w stylu BASIC-a XE, czyli słowa kluczowe mają pierwszą literę dużą, a resztę małymi (np. For I=1 To 1000 Step 0.9:Next I itp.).

Program można wpisywać dużymi lub małymi literami, bez różnicy (można przełączyć na wyłącznie duże litery, zgodnie z BASIC XE). Interpreter akceptuje wszystkie słowa kluczowe napisane małymi literami, a nie, jak TBXL, tylko te, które zaczynają się od litery, a więc małymi literami można wpisać również -MOVE albo %GET i nie będzie błędu.

Rozszerzenia słów kluczowych Atari BASIC i Turbo BASIC XL:

1) polecenia POKE, DPOKE, MOVE, -MOVE, oraz funkcje ADR(), DPEEK(), PEEK() operują na 24-bitowych adresach.

2) funkcja VAL() opcjonalnie konwertuje liczy HEX, tak jak w BASIC-u XE.

3) wszystkie konwersje HEX<>DEC są 24-bitowe. DEC() konwertuje także liczby napisane małymi literami, w inwersie, poprzedzone spacjami (co w TBXL nie zachodzi).

4) funkcja USR() działa jak w BASIC XE, to znaczy opcjonalnie może nie wstawiać na stos liczby parametrów. USR() działa tylko na banku 0 (pierwsze 64k).

5) błąd procedury kontroli składni dla poleceń DIM i COM został poprawiony.

6) CLOSE może być bez parametru, jak w Turbo BASICu XL

7) STATUS zwraca ujemny kod błędu, jeśli takowe są włączone

7,9) POINT akceptuje stałe, a nie tylko zmienne (to jak w TBXL)

9) Rozszerzona instrukcja SOUND:

- SOUND bez parametru, jak w TBXL
- SOUND z dodatkowym parametrem:

SOUND #n
SOUND #n,chn,freq,pitch,vol

gdzie "#n" może być #0 albo #1 i oznacza kanał lewy i prawy dla komputerów ze stereofonicznym Pokeyem. Tak samo DSOUND.

10) rozszerzone instrukcje NEW/LOAD/SAVE/RUN:

NEW "filename.bas"

definiuje domyślną nazwę dla nowego programu. Wpisanie SAVE bez parametrów spowoduje zapis pod tą właśnie nazwą. LOAD bez parametrów ładuje program o takiej nazwie, LOAD "filename.bas" ładuje program o wskazanej nazwie i ustawia ją jako domyślną (a więc działa jak NEW "filename.bas" / LOAD). RUN "filename.bas" działa tak samo, ale jeszcze oczywiście uruchamia wczytany program. SAVE z podaną nazwą zapisuje program pod tą nazwą, ale NIE ZMIENIA nazwy domyślnej.

11) jeszcze jedno rozszerzenie do RUN:

RUN 100
RUN "filename.bas",100

Pierwsze uruchamia program od linii 100, drugie ładuje najpierw plik "filename.bas", a potem odpala go od linii 100. Co do numeru linii, działa to jak LIST 100,200, to znaczy program odpalany jest od linii 100, a jeśli jej nie ma, to od najbliższej następnej.

Wszystko to jest już zaimplementowane i działa. Jest też zaimplementowana spora garść komend Turbo BASIC-a XL, to jest w chwili obecnej:

- komendy: DPOKE, MOVE, -MOVE, *F, *B, *L, REPEAT, UNTIL, WHILE, WEND, IF, ELSE, ENDIF, BPUT, BGET, FILLTO, DO, LOOP, EXIT, DIR, LOCK, UNLOCK, RENAME, DELETE, PAUSE, TIME$, FCOLOR, --, BLOAD, BRUN, CLS, DSOUND

- operatory i funkcje: DPEEK, &, !, EXOR, %0, %1, %2, %3, HEX$,DEC,DIV,MOD,FRAC,TIME,RND,RAND,TRUNC,ERR,ERL

Z BASIC-a XE napisałem dopiero:

- komendy: SET
- operatory i funkcje: SYS, %

'%' to to samo co EXOR w TBXL.

SET i SYS() służą do regulacji parametrów pracy interpretera i włączania i wyłączania różnych opcji. Docelowo (tego jeszcze nie ma) interpreter będzie tuż po starcie ładował plik ustawień z katalogu domyślnego (czyli z tego, z którego został załadowany, albo z bieżącego). Plik ustawień będzie normalnym programem BASIC-a z poleceniami SET w środku, oczywiście będzie mógł też zawierać dowolne inne.

Słowa kluczowe nowe dla MultiBASIC-a:

1) AUTO, włączenie automatycznej numeracji linii, jak w Microsoft BASIC:

AUTO
AUTO start
AUTO start,step

Defaultowo "start" (numer linii od której zaczyna się numeracja) jest 10, a step jest 5. Po pierwszym użyciu komenda zapamiętuje ostatnio wypisany numer linii i za drugi razem startuje od niego. Reset przez NEW albo przez AUTO 0,0.

2) FILE, przypisuje wskazanej zmiennej numerycznej numer pierwszego wolnego kanału IOCB. Użycie:

K=FILE:OPEN #K,4,0,"D:fname":GET #K,A:? A:CLOSE #K

3) SEEK:

SEEK #n,var
SEEK #n,num

Robi seek na wskazanym pliku "n" do pozycji wskazanej zmienną albo stałą numeryczną.

4) TELL - odwrotność SEEK, przypisuje wskazanej zmiennej bieżącą pozycję we wskazanym pliku.

TELL #1,var

5) FLEN - przypisuje wskazanej zmiennej długość pliku:

FLEN #n,var

Oczywiście, żeby skorzystać z komend SEEK, TELL i FLEN, trzeba mieć SpartaDOS  ;)

6) WAIT - wstrzymuje CPU do chwili wystąpienia jakiegokolwiek przerwania.

7) VOID:

VOID expression

Oblicza wyrażenie numeryczne 'expression' i ignoruje wynik  ;) Jest to w zasadzie komenda dla przyszłego kompilatora MultiBASIC-a, ale w interpreterze też się przyda, np.:

VOID USR(adres)

7,9) PI - pseudozmienna o wartości 3,14159265

To na razie tyle. W planach jest jeszcze wiele rzeczy, ale nie są jeszcze do końca ustalone. Z planów: listę tokenów instrukcji można rozszerzać w zasadzie w nieskończoność, a konkretnie może być ich 256 bez specjalnego trudu (zajęte jest ok. 120). Dlatego stopniowo można zaimplementować wszystkie komendy BASIC-a XE i Microsoft BASIC-a, o ile nie będzie specjalnych konfliktów co do składni albo znaczenia (przykładowo EXIT w TBXL i Exit w BASIC-u XE - raczej trudno jest je pogodzić).

Gorzej natomiast jest z tokenami funkcji, tych może być tylko 128, z czego obsadzonych jest 114. Pozostają dwa tokeny "normalne" oraz 12 zarezerwowanych na oznaczanie typów zmiennych i tym podobne. Jeśli uda mi się wykorzystać jeden z tokenów rezerwy na prefix dla dodatkowych operatorów i funkcji, to stopniowo zaimplementuję wszystkie funkcje z BASIC XE i Microsoft BASIC. Jeśli nie - to tylko najciekawsze minimum.

KMK
? HEX$(6670358)

2

Odp: MultiBASIC

A jak wygląda sprawa obsługi pamięci ? Czy jest wykorzystywana pamięć 130XE+ ?

3

Odp: MultiBASIC

Chodzi ci o tryb EXTEND, jak w BASIC-u XE? Raczej nie. W charakterze dodatkowej pamięci planuję wykorzystać po prostu pamięć liniową Warpa, do której załaduje się i sam interpreter i w której będzie przechowywany program, tablice itd.

KMK
? HEX$(6670358)

4

Odp: MultiBASIC

to mozesz potestowac u Laoo, ma pamiec liniowa

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

5

Odp: MultiBASIC

Do krapa mam bliżej.

KMK
? HEX$(6670358)

6

Odp: MultiBASIC

Draco;- jak znajde moduł BasXE; to sprawdze to, o czym mi pisałeś.

Jak dla mnie co i jak:

* wspaniale byłoby mieć możliwość użycia LOCAL dla PROC (z basic XE)
* czy print będzie tak "wypasiony" (o możliwość formatowania txt) - jak ma to miejsce w BasicXE
* czy użycie ramu liniowego 816 musi być koniecznością ? - z jednej strony zapewne przyspiesza to działanie interpretera jako całości; z drugiej strony ram liniowy 816 zainstalowany jest w 3 kompach - i to akurat u osób nagminnie nie używających basica.. :):)
* może nie-doczytałem; co z kompilatorem ??
* Draco - jak to testujesz bez ramu liniowego ??  :twisted:
* Draco - a-dres na priva; wysyłam kabelek. Cena 1 browar  :idea:  :P na Chwascie

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

7

Odp: MultiBASIC

* wspaniale byłoby mieć możliwość użycia LOCAL dla PROC (z basic XE)

Myślę, że da się zrobić.

* czy print będzie tak "wypasiony" (o możliwość formatowania txt) - jak ma to miejsce w BasicXE

Spróbuję, ale na razie chcę zaimplementować i przetestować wszystkie featury Turbo BASIC-a, a potem dopiero wziąć się za BASIC XE.

* może nie-doczytałem; co z kompilatorem ??

Nie wszystko na raz :P Za kompilator się wezmę, jak interpreter będzie jako tako skończony.

* czy użycie ramu liniowego 816 musi być koniecznością ? - z jednej strony zapewne przyspiesza to działanie interpretera jako całości; z drugiej strony ram liniowy 816 zainstalowany jest w 3 kompach - i to akurat u osób nagminnie nie używających basica.. :):)
* Draco - jak to testujesz bez ramu liniowego ??  :twisted:

No właśnie, testuję na sprzęcie bez RAM-u liniowego, bo jej użycie nie jest koniecznością. Z braku linowego RAM-u interpreter będzie oczywiście używał podstawowej pamięci, ale nie wiem, ile jej zostanie na program. W chwili obecnej przy najlepszych wiatrach ?FRE(0) mówi o jakichś 28k.

KMK
? HEX$(6670358)

8

Odp: MultiBASIC

to mimo wszystko jest już coś. Lecz mam pomysła na rzecz - która może skutecznie załatwić problem ew. nieposiadania ramu liniowego - może jakie #include ?? - i procki w zewnętrznych plikach ?? - to byłoby bardzo że tak powiem "róló" :)

* A dało by rade opcjonalnie usadzić jednak same tablice i zmienne w ext XE (opcja dla liniowego) ?? - czy z założenia na 100% wykluczasz taką możliwość ??

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

9

Odp: MultiBASIC

Nie wykluczam, ale umieszczenie czegokolwiek w bankach pamięci 130XE strasznie skomplikuje adresowanie pamięci programu. Pomyślę o tym w zależności, jak się sytuacja rozwinie z Warpem i warpopochodnymi. Gdyby od jesieni takich maszyn miało przybywać, to taka zabawa staje się niepotrzebna.

[ Dodano: 23.05.2005 15:52:19 ]

to mimo wszystko jest już coś. Lecz mam pomysła na rzecz - która może skutecznie załatwić problem ew. nieposiadania ramu liniowego - może jakie #include ?? - i procki w zewnętrznych plikach ?? - to byłoby bardzo że tak powiem "róló" :)

To znaczy, konkretnie nie mam dobrego pomysłu na to. W innych BASIC-ach jest np. komenda COMMON, która przekazuje wartości zmiennych do programu załadowanego przez LOAD. Najfajniej byłoby jednak, gdyby można było przekazać normalną linię komend PLUS ewentualnie zmienne. W ogóle to są przewidziane słowa kluczowe do odczytu linii komend przekazanej z DOS-u, więc może się da tak samo przekazywać pomiędzy programami w BASIC-u.

KMK
? HEX$(6670358)

10

Odp: MultiBASIC

więc może się da tak samo przekazywać pomiędzy programami w BASIC-u.

jestem za - bo pod TB w podobnych sytuacjach trzeba sie conieco nakombinować niestety.

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

11

Odp: MultiBASIC

yyy... a ja tak nieśmiało zapytam: Gdzie będzie umieszczony kod samego MultiBASIC'a, ew. kompilatora?

Zastąpi istniejący AtariBASIC?
będzie na Cartridge'u, może jako upgrade hardware'owy?
czy jak TBXL, ładowany do pamięci z dysku?
a może w ROM'ie (512kB) w nienazwanej dopałce Pasia?

no i czy można będzie robić jakieś wstawki z użyciem assemblera - żeby niemęczyć się i trzymać kodu maszynowego w nawiasach funkcji USR?

FAQ: Cegła waży kilogram i pół cegły. Ile ważą dwie cegły ? :D

JIL 4EVER!

12

Odp: MultiBASIC

Casper zapoznaj się dokładnie z tym, co pisze powyżej twojego posta i pomyśl chwile - :) -

* nie zastąpi BASICA - tego z romu, bo zapewne /mb/ będzie "nieco" większy
* Draco nie ma czasu na każdorazowe testy na okoliczność carta :)
* do pamięci z dysku brzmi sensownie jak by
* w robie nie skończonej jeszcze dopałki ? :) -

wstawki asm - pomysł niezły.

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

13

Odp: MultiBASIC

Wlasnie. Wstawki w asmie to by bylo to. Juz mam smaka! Kojarzy sie z Pascalem... ;)

14

Odp: MultiBASIC

Nad wstawkami w asmie myślę, ma to np. BASIC od Acorna BBC, więc jakiś wzór do naśladowania mam.

KMK
? HEX$(6670358)

15

Odp: MultiBASIC

Wersja 0.1 very-preview-alpha MultiBASIC-a dostępna jest tu:

Plik ARC: http://drac030.krap.pl/mbi.arc
Plik ATR: http://drac030.krap.pl/mbi.zip

Wymagania: procesor 65c816, DracOS (zob. http://drac030.krap.pl).

Nie chciało mi się robić wersji relokowalnej, więc ta jest nierelokowalna, ładuje się od $2000. Oczywiście final będzie się relokował, żeby wykorzystać pamięć do maximum (pod SDX nawet do 4k więcej). Dodatkowej pamięci na razie nie używa. W ogóle przez ostatni miesiąc nie zrobiłem wielkich postępów, ale do QuaST-a może jeszcze coś dopiszę. Ta wersja nie ma prekompilowanych pętli, więc proszę się nie dziwować, że nie działa szybko. Nie ma też wszystkich instrukcji Turbo BASIC-a (brak jest m.in. PROC, EXEC, ENDPROC, #, GO# - bo wymagają prekompilacji, której nie ma; brak tez niektórych funkcji, np. INSTR(), UINSTR() i czegoś tam jeszcze). Ogólnie niezaimplementowane tokeny będą powodować błąd nr 17.

To jest, powtarzam, preview, wiele się jeszcze może zmienić, z niektórymi słowami kluczowymi włącznie. Jest też parę niedoróbek, które zauważyłem przed chwilą, tj. np. DIR nie daje się przerwać klawiszem break, a instrukcja ENDWHILE nie działa. Poprawię to następnym razem, do testów wystarczy tak jak jest.

Przy testach proszę zwrócić uwagę, czy wszystkie słowa kluczowe dają się wpisać, innymi słowy czy nie ma jakichś porażek w kontroli składni. No i w ogóle poza tym.

-----

Jeszcze jedno, co się może przydać przy zabawie interpreterem:

Instrukcje SET i SYS MultiBASIC-a

Składnia:

SET index,value
value=SYS(index)

'index' ma wartość z zakresu od zera do (na razie) 23. Określa numer wewnętrznej zmiennej interpretera, której wartość będzie zmieniana lub odczytywana. Znaczenie pierwszych 15 zmiennych jest - albo będzie w przyszłości - zgodne z BASIC XE.

0 - reakcja na klawisz Break

    0 - standardowa
    1 - następuje "Error 1"
    2 - następuje "Error 128"
    128 - wciśnięcie Break jest ignorowane

    SET 0,2 to to samo, co *B+

1 - ilość pozycji tabulacji, jakiej przeskoczenie powoduje przecinek w instrukcji PRINT. W bieżącej wersji nie można tu ustawić wartości mniejszej niż 3. Kiedyś to poprawię.

2 - kod ASCII znaku wyswietlanego przy INPUT. Normalnie $3f ('?').

3 - niezaimplementowane

4 - niezaimplementowane

5 - 1 (wartość domyślna) powoduje, że słowa kluczowe mogą być wpisywane małymi literami; 0 ustawia zgodność z Atari BASIC w tym względzie (tylko duże litery).

6 - wyłącza (1) i włącza (0) słowne objaśnienie w komunikacie błędu; domyślna wartość to 0.

7 - niezaimplementowane

8 - 1 (wartość domyślna) powoduje, że funkcja USR wstawia na szczyt stosu liczbę przyjętych argumentów (tak jak w Atari BASIC); ustawienie zera blokuje wstawienie tej wartości na stos.

9 - niezaimplementowane

10 - niezaimplementowane

11 - niezaimplementowane

12 - włącza (1) i wyłącza (0) wcięcia listingu; domyślna wartość to 1. SET 12,1 robi to samo co *L+.

13 - włącza (1) i wyłącza (0) obliczanie liczb hex przez funkcję VAL(). Domyślna wartość to 1.

14 - niezaimplementowane

15 - niezaimplementowane

--------------------

16 - liczba spacji, jakie dodawane są do wiersza listingu celem uzyskania wcięcia; domyślną wartością jest 2.

17 - 0 powoduje, że linia zaczynająca się od instrukcji REM listowana jest bez wcięcia, nawet w środku pętli; 1 powoduje normalne wcięcie (jak w Turbo BASIC-u XL); domyślną warotścią jest 0.

18 - 0 powoduje, że linia zaczynająca się od separatora Turbo BASIC-a XL (instrukcja "--") listowana jest bez wcięcia, nawet wewnątrz pętli; 1 powoduje normalne wcięcie (jak w Turbo BASIC-u); domyślną wartością jest 0.

19 - 0 (wartość domyślna) powoduje, że numery błędów wypisywane są jako liczby ujemne; 1, jako dodatnie;

20 - wartość ICAX2 dla funkcji OPEN wywoływanej przez instrukcję DIR. Domyślna wartość to 0 (krótki listing), po wykryciu SpartaDOS automatycznie ustawiana na 128 (długi listing).

21 - 1 włącza listowanie w stylu BASIC-a XE; 0 jest wartością domyślną

22 - początkowa wartość numeru linii dla instrukcji AUTO (10)

23 - początkowy krok dla instrukcji AUTO (10)

Ostatnio edytowany przez drac030 (2005-07-07 21:18:23)

KMK
? HEX$(6670358)

16

Odp: MultiBASIC

LOL - trzeba sie za to zabrac - w takim razie :) - ciekawi mnie to, czy finalnie po zakończeniu tematu prekompilacji MB będzie szybszy od TB, i czy instr. move działa w oparciu o 65c816 ?? (jest już taka w MB ? :) ) -

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

17

Odp: MultiBASIC

Jest i używa rozkazów 65c816 :)

KMK
? HEX$(6670358)

18

Odp: MultiBASIC

BUGS++: instrukcja XIO nie daje się wpisać (kukułka w tablicy kontroli składni).

KMK
? HEX$(6670358)

19

Odp: MultiBASIC

właśnie namierzyłem buga w tbxl - próba grzebania w pliku poprzez:

open #chn,12,0,"D:plik.ext"

powoduje przeróżne skutki uboczne - np. po nadpisaniu linii txt niewiedzieć dlaczego "zamazuje" linie następną.. itd. Pisze o tym, bo może w MB będzie to rozwiązane sensowniej. Pod TB niestety używać wspomnianej opcji się nie da.

Ostatnio edytowany przez Pin (2005-08-16 07:53:41)

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

20

Odp: MultiBASIC

Eeee? A może jakiś program przykładowy?

KMK
? HEX$(6670358)

21

Odp: MultiBASIC

Kupię książkę ATARI Basic lub jego ksero. tomek12342@gazeta.pl

MM: No to żeś teraz się przebił. Do działu K/S/Z już!

22

Odp: MultiBASIC

Draco - a oto i przykładzik nieprawidłowego działania nadpisywania danych w pliku:

85 exec s_file:exec dta_ch
99 end
100 proc s_file:o.#%1,8,0,"datatst.dat":f.b=1 to 15:? #%1;b:n.b:cl.#%1:endproc
150 proc dta_ch:o.#%1,12,0,"D:datatst.dat":i.#%1,b,b,b,b,b,b,b
160 ?#%1;"$0000":?#%1;"$0001":?#%1;"$0002":cl.#%1:endproc

.... a wynikiem działania pierwszej procki jest plik zawierający 15 liczb w 15 liniach po kolei, że tak powiem. Próba nadpisania tegoż kończy się tak:

1
2
3
4
5
6
7
$0000
$0001
$0002

15

czyli zjedliśmy liczby z zakresu 8 - 14, przy czym wspomniane zajmowały kolejnych 7 linii, a wklejenie hexów spowodowało w tym wypadku to, że liczba 15 jest o 3 pozycje wyżej.... i jako bonus program wpi*ł linie po nadpisaniu "$0002"

jest jedno ale - program paczyjemy linijką, która wygląda tak:

160 ?#%1;"a":?#%1;"b":?#%1;"c":cl.#%1:endproc

i okazuje się, że wynik działania całości wygląda tak:

1
2
3
4
5
6
7
a
b
c

11
12
13
14
15

czyli - być może w przypadku nadpisywaina pliku znaczenie mają stare "eole" :) - ale ku**** (ten tego) dlaczego :D

czy ktoś ma na to jakiś sensowny pomysł ?? - że tak powiem; dla mnie to dość ważna sprawa.

Ostatnio edytowany przez Pin (2005-08-19 07:11:47)

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

23

Odp: MultiBASIC

Pinek, co do pustej linii - to daje to cl., i to jest normalne. Ładuje się ona bezpośrednio po znaczniku, w którym miejscu jest ustanowiony koniec nadpisywanego pliku - trzeba niestety póść na koniec pliku i dopiero wtedy to zamknąć (czyli - wprowadzić pętlę i.coś tam i sprawdzać i z EOF-em, jak mi się wydaje. Gdy i=EOF wtedy zamykasz dopiero). Jest to upierdliwe, ale tak to rozwiązano i już.
Co do wcięcia kilku linijek, co to je amba zjadła - hmm, tutaj nie wiem...
Aha, co do cl. - spróbuj może po ostatnim ?#1 dać średnik, wtedy chyba pójdzie po cl do następnej linii i nie będziesz się martwił o znacznik EOF, tak mi się wydaje, ale głowy nie dam...

Sikor umarł...

24

Odp: MultiBASIC

zawsze z Trapem można dojechać do eof'a, co przy HDD problemem nie jest - no chyba, że plik ma pół giga-mega :). Czyli ponekąd jeden problem z głowy. To teraz się zastanawiam jak dokładnie w tym przypadku zakańczana jest linia - próbowałem dołączać w printach ;chr$(155) - ale i to nie daje zawsze pożądanego skutku, a efekty są nieokiełznane :) - przynajmniej do czasu rozłożenia sprawy na czynniki pierwsze - a chodzi dokładnie o różnice w pliku wynikowym spowodowane modyfikacją linii 160.

Ostatnio edytowany przez Pin (2005-08-19 09:39:14)

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

25

Odp: MultiBASIC

A po co po średniku dodajesz koniec linii? Sam średnik!!! Koniec linii powinno ci dodać cl.

Sikor umarł...