Otwarcie pliku do odczytu i zapisu

Szukasz drobnej pomocy przy kodowaniu, albo chcesz przedstawić światu swoją gotową lub w trakcie realizacji produkcję? To właściwy dział.
Wiadomość
Autor
k.

Otwarcie pliku do odczytu i zapisu

#1 Post 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?

Awatar użytkownika
skull
Posty: 760
Rejestracja: 15 wrz 2008, 08:18
Grupa: samar

Re: Otwarcie pliku do odczytu i zapisu

#2 Post 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
Bo pecet to zwykły banan...

k.

#3 Post 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ę :)

Awatar użytkownika
Nitro
Posty: 1551
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

#4 Post 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.

k.

#5 Post autor: k. »

nie o to mi chodzi.

Awatar użytkownika
Nitro
Posty: 1551
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

#6 Post 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.

k.

#7 Post 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ć.

Awatar użytkownika
Nitro
Posty: 1551
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

#8 Post 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.

k.

#9 Post autor: k. »

chyba pozostanie mi pomęczyć unzipa.

Awatar użytkownika
skull
Posty: 760
Rejestracja: 15 wrz 2008, 08:18
Grupa: samar

#10 Post 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.
Bo pecet to zwykły banan...

Awatar użytkownika
Nitro
Posty: 1551
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

#11 Post 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.

k.

#12 Post 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 :)

Awatar użytkownika
leming
Posty: 538
Rejestracja: 15 wrz 2008, 10:15
Grupa: Onslaught, Fatum

#13 Post 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 :P
Ten post wyraża moją opinię w dniu dzisiejszym.Nie może on służyć przeciwko mnie w dniu jutrzejszym,ani każdym innym następującym po tym terminie.Ponadto zastrzegam sobie prawo zmiany poglądów bez podania przyczyny.

ODPOWIEDZ