1

jak pobrac dlugosc pliku bez grzebania "recznie" w sektorze 361?
czy istnieje wogole jakas operacja CIO podczas, ktorej zostaje gdzies zapisana dlugosc aktualnie uzywanego pliku? (komenda specjalna LEN raczej odpada, bo nie wszystkie dosy ja obsluguja)

2 Ostatnio edytowany przez xxl (2006-09-14 14:11:36)

moze to pomoze?

http://www.atariarchives.org/iad/chapter13.php

pobranie katalogu, sprawdzenie nazwy, odczyt liczby sektorow zajetych przez plik

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

3

pr0be: z kolei nie wszystkie dosy mają długość pliku w sektorze 361. Xxl całkiem nieźle ci podpowiada. A jak chcesz dokładnie, czyli w bajtach, i zupełnie niezależnie od dosa i systemu plików, to chyba sam musisz sobie zrobić odpowiedni spisik. C'est la vie...

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

4 Ostatnio edytowany przez drac030 (2006-09-14 16:35:51)

epi napisał/a:

pr0be: z kolei nie wszystkie dosy mają długość pliku w sektorze 361.

Ja bym powiedział, że żaden. :P

pr0be: "uniwersalna" metoda będzie jednakowo zła dla wszystkich DOS-ów. Proponuję zrobić to inaczej:

a) najpierw wywołać LEN (XIO 39 oidp) -> jak zadziała, masz wielkość pliku, koniec.
b) jak nie, czytasz katalog tekstowo (rekordami) i stamtąd wyciągasz informację, pamiętając o różnicach w formatowaniu (np. MyDOS o ile mnie pamięć nie myli wyświetla 4 cyfry wielkości pliku w katalogu).

PS. Adresów podanych na stronie zacytowanej przez XXL-a nie należy traktować dosłownie, chyba że to ma działać tylko z DOS-em 1.0 albo czymś takim. Katalog czyta się normalnie przez komendy podawane do $E456.

KMK
? HEX$(6670358)

5

To jeszcze zależy, który MyDOS. :)

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

6

No i liczby są w sektorach, a nie wiadomo ile bajtów w sektorze. Można próbować szacować z góry: DPEEK($308)-3 (zaraz po I/O na tym dysku). Jedyna pewna i przenośna metoda to przeczytać plik w całości. :)

https://www.youtube.com/watch?v=jofNR_WkoCE

7

DPEEK($308)-3 może być przyczyną wielu rozczarowań, bo nie każdy DOS ma taki system linkowania plików (znam cztery, które tak nie mają). A więc jak już, to najpierw trzeba się upewnić, że dyskietka jest w takim formacie :)

KMK
? HEX$(6670358)

8

hmm ale odczytanie wielkosci plikow przez katalog dyskietki tez nie jest pewne, bo rozne dosy inaczej "sformatuja" dane wyjsciowe: np. w MyDos wygladaja one tak: "  DOS45678SYS 037", a w SDX wyjscie bedzie wygladalo tak: "DOS45678 SYS   4736" co juz jest problemem, nie wspominajac juz o tym ,ze w pierwszym przypadku mamy dlugosc podana w sektorach a w drugim dlugosc podana w bajtach...

jak juz Fox wspomnial jedyna pewna metoda chyba bedzie odczyt pliku w calosci...
szkoda bo mialem nadzieje ,ze w czasie wykonwyania operacji OPEN, jest pobierana dlugosc pliku i gdzies zapisywana...

jeszcze jedno lamerskie pytanie ;)

powiedzmy ,ze chce wczytac caly plik, robie cos takiego:

    ldx #$10
    lda #7
    sta iccmd,x
    lda #0
    sta icbufa,x
    lda #$80
    sta icbufa+1,x
    lda #$ff
    sta icbufl,x
    lda #$ff
    sta icbufl+1,x
    jsr ciomain

po tym jest wszystko pieknie, pod $8000-$xxxx mam wczytany caly plik, tylko skad mam wiedziec ile zostalo wczytane bajtow? ;)
wczytywanie pliku bajt-po-bajcie (icbufl=0) daloby mi prawidlowa odpowiedz, ale to raczej bardzo kiespki sposob ze wzgledu na szybkosc...

9

pr0be napisał/a:

hmm ale odczytanie wielkosci plikow przez katalog dyskietki tez nie jest pewne, bo rozne dosy inaczej "sformatuja" dane wyjsciowe: np. w MyDos wygladaja one tak: "  DOS45678SYS 037", a w SDX wyjscie bedzie wygladalo tak

Ale w SDX masz działające XIO 39 i nie musisz pod tym DOS-em czytać katalogu, a tym samym przejmować się jego formatowaniem. Powtórzę: najpierw robisz XIO 39 -> status $01, znaczy dostałeś wynik i koniec. Dopiero jak status jest ujemny, to znaczy, że funkcja niezaimplementowana i wtedy kombinujesz.

szkoda bo mialem nadzieje ,ze w czasie wykonwyania operacji OPEN, jest pobierana dlugosc pliku i gdzies zapisywana...

Jest. SpartaDOS tak robi. AtariDOS tak nie robi, bo interfejsy do szklanych kul się nie upowszechniły ;)

po tym jest wszystko pieknie, pod $8000-$xxxx mam wczytany caly plik, tylko skad mam wiedziec ile zostalo wczytane bajtow?

W ICBUFL/ICBUFL+1 masz liczbę wczytanych bajtów.

KMK
? HEX$(6670358)

10

drac030 napisał/a:

W ICBUFL/ICBUFL+1 masz liczbę wczytanych bajtów.

no tak :)
dzieki!

11

pr0be napisał/a:

rozne dosy inaczej "sformatuja" dane wyjsciowe: np. w MyDos wygladaja one tak: "  DOS45678SYS 037", a w SDX wyjscie bedzie wygladalo tak: "DOS45678 SYS   4736" co juz jest problemem, nie wspominajac juz o tym ,ze w pierwszym przypadku mamy dlugosc podana w sektorach a w drugim dlugosc podana w bajtach...

W przypadku Sparta DOS wystarczy przy otwieraniu katalogu do czytania w AUX2 miec wartosc 0. Wtedy katalog jest w formacie instrukcji DIRS i odpowiada pozostalym DOSom. Tyle ze dlugosc jest wtedy zaokraglana do sektorow oczywiscie, wiec podawana mniej dokladnie.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.