Strona 1 z 1
Otwarcie pliku do odczytu i zapisu
: 06 paź 2008, 22:13
autor: k.
witam,
ponieważ się na tym temacie wyłożyłem lata temu, mam pytanie czy ktoś widział kiedyś otwarcie pliku do odczytu i zapisu równocześnie.
Czyli otwieramy plik odczytujemy ileś bajtów i zapisujemy resztę jako nową zawartość.
Widział ktoś to w akcji?
Re: Otwarcie pliku do odczytu i zapisu
: 07 paź 2008, 09:15
autor: skull
kisiel pisze:witam,
ponieważ się na tym temacie wyłożyłem lata temu, mam pytanie czy ktoś widział kiedyś otwarcie pliku do odczytu i zapisu równocześnie.
Czyli otwieramy plik odczytujemy ileś bajtów i zapisujemy resztę jako nową zawartość.
Widział ktoś to w akcji?
To może ja zaczne...
Przy kontakcie ze stacją i jej kernelem nie ma rozkazu do jednoczesnego zapisu i odczytu - jest to realizowane oddzielnie. Trzebaby w takim wypadku samodzielnie stworzyc takie procedury dla OS stacji, a wiadomo że tam z pamięcią krucho.
Moim zdaniem jest to jednak zbędne, a przynajmniej w takim przykładzie jaki opisujesz Kisiel.
kisiel pisze:Czyli otwieramy plik odczytujemy ileś bajtów i zapisujemy resztę jako nową zawartość.
Oczywiście pierwsza propozycja to przeczytanie, a potem "nadpisanie" pliku. Czyli wczytanie do pamieci C64-> skasowanie pliku z dysku->zgranie "obciętego" z pamięci.
Drugie rozwiązanie - akurat w tym przypadku (i jeśli chodzi o pliki na stacji dyskow oczywiscie) to skrócenie "linki" wiążącej sektory (skoro tylko ma się odcinać dane z pliku) oraz zmiana bitów w tablicy zajętości bloków (BAM). No i oczywiście w tym rozwiązaniu należy pamiętać o ułożeniu danych w plików w tzw LILO - > czyli ostatnie bajty będą odcinane jako pierwsze.
Kisiel w sumie nie wiele napisałeś: jaki to rodzaj pliku i jaki danych, jak chcesz obsługiwać stację (wystarczą komendy OPEN ? )
Pzdr
: 07 paź 2008, 17:59
autor: k.
no dobra to teraz bardziej precyzyjnie w stacji można użyć opcje r,w,a Ostatnia to append. jedyny programik który z tego korzysta to chyba jest jakiś ziper albo lha, jak dobrze pamiętam, bo: umozliwia dopisanie pliku do archiwum. Może znasz jeszcze jakiś programik który to robi z plikiem?
Musze mieć coś do testów i do podglądnięcia jak to działa... męczę teraz znowu open pod fat16
PS. ja nie mam kłopotów z pamięcią.. naprawdę
: 07 paź 2008, 18:14
autor: Nitro
Program na 99% będzie korzystał z poleceń kernela, ciekawe komu chciałoby się napisać turbo appender?
Do tego całego appendu jest taka komenda:
Basic 4.0 Commands
------------------
APPEND
------
Format - APPEND# <file number> , "<name>" [,D<x>] [ON U<y>]
Use - To add additional data to the end of a sequential disk
file.
Notes - APPEND is used like a DOPEN command but can only be
used to add data to an existing sequential disk file.
APPEND opens the specified data file for write and
positions the DOS pointers to the current end of the
file and new data can be added. Any variable or
evaluated expressions must be enclosed in parentheses.
Unit defaults to device 8, drive 0.
Example - x=1 : APPEND#1 "data file", D(x) ON U 9
Opens a file with a logical number of 1 called
"data file" on drive 1 of unit 9 for append.
Jak widać działa ona tylko na plikach o dostępie sekwencyjnym, o zwykłych należy zapomnieć. Jeśli chcesz zagłębić mimo wszystko jej tajniki, to znajdź dissasemblerki kernela i kernela stacji dysków.
: 07 paź 2008, 21:05
autor: k.
nie o to mi chodzi.
: 08 paź 2008, 16:06
autor: Nitro
Hmm, no to nie pozostaje mi nic, tylko poradzić zapostowanie problemu na CSDB, na tym forum nie ma żadnych koderów od stacji, chyba wogóle ten gatunek wyginął na Polskiej scenie.
: 08 paź 2008, 16:40
autor: k.
to nawet nie chodzi o kodowanie w stacji. Chodzi o obsługę urządzenia z poziomu basica nawet. Jak robisz podróbkę jakiegoś urządzenia to musisz mieć narzędzia aby je sprawdzić.
: 08 paź 2008, 18:05
autor: Nitro
Napisałem bzdury, ta komenda jest w jakimś rozszerzonym basicu nazwanym 4.0, my mamy dwójkę.
W basicu 2 możemy prawdopodobnie tylko skorzystać z open i z parametrem accessmode na 'a'. Niestety żadnych konkretnych instrukcji nadpisywania tym sposobem nie znalazłem.
: 08 paź 2008, 18:46
autor: k.
chyba pozostanie mi pomęczyć unzipa.
: 08 paź 2008, 22:06
autor: skull
Hmm...
Problem który tu został poruszony stwarza pozory trudnego, ale tak się może tylko wydawać. Instrukcja append (nigdy nie używałem) zdaje się być tylko użyteczna w plikach rel albo seq, gdzie dane są w postaci paczek (rekordów) i tam to ma sens - gdy wiadomo jakie porcje danych będą dodawane. Może się mylę, ale tu nie ma co się w nią zagłębiać - w zasadzie chodzi o działanie odwrotne do append.
Co do kodowania stacji, to nie chwaląc się udało mi się jakiś loader nie dawno stworzyć - który z resztą używam w grze którą robię.
Ogólnie rzecz ujmując transmisja po szeregowym odbywa się na zasadzie zsynchronizowania rejestrów wysyłających/odbierających dane z jednego urządzenia do drugiego (w c64 rejestr $DD00, a np. w stacji $1800) i potem ich obserwacji (transmisja bitów).
Niby proste, ale właśnie przez to, że tych rejestrów jest taka skromna ilość, programowanie jest wręcz irytujące (tak jakby ktoś chciał przeprowadzić dialog przez rurę, ale mówiąc głoskami/samogłoskami jednocześnie uważając żeby nie zagłuszać przy tym tego co "mówi" odbiorca).
Co do używania komunikacji na poziomie wyższym (gotowych procedur kernala, albo nawet interpretera basica) to wygląda to tak, że otwierając kanał możemy odczytywać i zapisywać do puki go nie zamkniemy.
Więc wygląda to w rzeczywistości tak jakbyśmy otwierali plik zarówno do zapisu jak i odczytu - i gdzie tu problem ?
Kisiel polecam znaleźć kod do transmisji miedzy dwoma c64 (taki rodzaj chat-a) jest np. w książce Frelka.
Inna sprawa, że nie ma za bardzo użytecznych funkcji jakie są w innych językach dotyczących plików (zbiorów) typu seek, sizeof, eof itd.
: 09 paź 2008, 17:17
autor: Nitro
[quote]Hmm...
Problem który tu został poruszony stwarza pozory trudnego, ale tak się może tylko wydawać. Instrukcja append (nigdy nie używałem) zdaje się być tylko użyteczna w plikach rel albo seq, gdzie dane są w postaci paczek (rekordów) i tam to ma sens - gdy wiadomo jakie porcje danych będą dodawane. Może się mylę, ale tu nie ma co się w nią zagłębiać - w zasadzie chodzi o działanie odwrotne do append. [/quite]
No i jest dostępna w jakimś basicu 4.0, którego kij wie, gdzie można znaleźć - pisałem powyżej.
: 09 paź 2008, 18:01
autor: k.
@skull
a mnie się udało zrobić turbo loader z włączonym ekranem z przeplotem 2, tak jakbym miał się też chwalić.
@ nirto, wpisz open 2,8,2"nazwa pliku,a" ..PRG APPEND i posłuchaj co stacja zrobi z tym plikiem. To Stacja robi append a nie basic.
Chłopaki ja szukam programów do testu softu z twardzielem a nie ze stacją dysków
: 09 paź 2008, 18:05
autor: leming
kisiel wytlumacz po ludzku o co ci chodzi a nie tu jakies czary wypytujesz, to jest forum dla scenowcow a nie dla inzynierów z Western Digital