Otwarcie pliku do odczytu i zapisu
Otwarcie pliku do odczytu i zapisu
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?
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
To może ja zaczne...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?
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.
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.kisiel pisze:Czyli otwieramy plik odczytujemy ileś bajtów i zapisujemy resztę jako nową zawartość.
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...
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ę
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ę
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:
Do tego całego appendu jest taka komenda:
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.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.
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.
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...
[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.
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.
@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
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
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
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.