1

czy ktos wie jak mozna zrobic jakies pwd czy okreslic sciezke do pliku?
nie chce w programie wpisywac bezwzglednych sciezek i chcialbym zachowac jakas przenoszalnosc calosci miedzy sdx a mydosem

wszelkie standardowe metody zawiodly

na pc normalnym jest ze standardowym katalogiem pracy programu jest ten, z ktorego zostanie uruchomiony - na atari widze nie jest to prawda :(

przechodze na tumiwisizm

2

Hmm, to moze zrob jakis plik configuracyjny z ktorego bedziesz odczytywac sciezki.
Wtedy kazdy bedzie mogl sobie ustawic w pliku sciezki jakie bedzie potrzebowal.

No chyba ze bledenie mysle.

3

Candle napisał/a:

czy ktos wie jak mozna zrobic jakies pwd czy okreslic sciezke do pliku?
nie chce w programie wpisywac bezwzglednych sciezek i chcialbym zachowac jakas przenoszalnosc calosci miedzy sdx a mydosem

wszelkie standardowe metody zawiodly

na pc normalnym jest ze standardowym katalogiem pracy programu jest ten, z ktorego zostanie uruchomiony - na atari widze nie jest to prawda :(

XIO 48.

Poza tym, o ile mi wiadomo, bieżącym katalogiem jest ten, który wybierzesz przez CD, a nie ten, z którego uruchomisz program. Katalog, z którego uruchomiono (np. podając całą ścieżkę) daje się odcyztac pod SDX, pod MyDOS-em pewno nie.

KMK
? HEX$(6670358)

4

XIO 48 to pod Spartą. MyDOS nie zapamiętuje ścieżki katalogu, do którego zrobiło się CD, tylko numer sektora z bieżącym katalogiem. Ścieżka wyświetlana przez DUP.SYS jest zmieniana przez niego samego. Dużo więcej informacji w moim starym artykule w Syzygy, "Obsługa katalogów" czy jakoś tak.

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

5

W MyDOSie nie ma czegoś takiego, jest natomiast któreś XIO (sprawdź na wiki, ja swojego manuala do MyDOS-a przekazałem jellonkowi), które pozwala ustawić bieżący katalog jako D: i tą drogą można ustawiać.
Działa to tak: masz ścieżkę: D4:muzyka:synth:mpt:dema i przyporządkowujesz ją dla D: i wtedy wszelkie odwołania do D: będą fizycznie odwołaniami do D4:muzyka....itp Jest to taka imitacja CD.

Nie pamiętam, czy jest odpowiednie XIO, które zwraca ścieżkę przypisaną do D:, czy trzeba to kontrolować samodzielnie.

6

Fox napisał/a:

XIO 48 to pod Spartą.

Zgadza się, właśnie sprawdziłem w źródłach, MyDOS obsługuje tylko XIO w zakresie od 32 do 42.

To przykre :)

KMK
? HEX$(6670358)

7

<offtopic>

draco030: czy zauważyłeś, że "nie przepadasz" za systemami na literę: "M"? Magic, MyDOS ;)

</offtopic>

8 Ostatnio edytowany przez drac030 (2009-08-28 16:07:32)

Hehe.

Candle, a po co ci w zasadzie odczyt bieżącego katalogu? MyDOS chyba pozwala na dostęp do podkatalogów względem katalogu bieżącego. Np. jeśli katalog bieżący to "D2:>DEMKO>", a w nim jest egzek i dalsze podkatalogi, to egzek powinien być w stanie dostać się do tych dalszych podkatalogów przez podanie ścieżki zaczynającej się od "D:", np. "D:GRAFA>PIC0.JPG" da dostęp do pliku "D2:>DEMKO>GRAFA>PIC0.JPG" itd.

Tylko przed uruchomieniem tego spod MyDOS-a trzeba zmienić katalog bieżący (funkcja R. menu MyDOS-a) na "D2:DEMKO".

Pod SDX to będzie działać identycznie.

KMK
? HEX$(6670358)

9

Opcja bodajże "R" pod MyDosem - wybór roboczego katalogu jako "D:". Bliżej (jaką komendę wysyła cy cuś) musisz se podejżeć ;)

Sikor umarł...

10

Kiedyś w amoku po kupnie upragnionego TOMS720 zrobiłem taki "MegaMagazine Pack". Prosty loader bazujący na Mna DOS.SYS od MyDos. Funkcją XIO ustawiałem "working directory" potem już tylko wywoływałem Binary Load "D:" i ładowało co trzeba z wybranego katalogu.

Tutaj przykład:

Mega Zine Collection Disk #1. ATR (720k) zawiera części 1-6 MegaZine.
Mega Zine Collection Disk #2. ATR (720k) zawiera część 7 MegaZine (liczyłem że powstanie więcej ;P)

Candle jeżeli o to Ci mniej więcej chodzi i jak będziesz chciał jakiś realny kawałek kodu, daj znać.

11

sikor/seban: mnie się wydaje, że candle chce mieć funkcję dokładnie odwrotną, to znaczy odczytującą bieżącą ścieżkę, a nie zmieniającą ją.

Jeśli tak, to chyba można uniknąć takowej (a że jej MyDOS nie ma, to już ustalono), patrz post nr 8.

KMK
? HEX$(6670358)

12

No nie wiem...
Za instrukcją do MyDOSa: "Katalog roboczy można również określić w programie przez wywołanie funkcji CIO z kodem funkcji 41" - część IV instrukcji, dotycząca funkcji R.
Do tego pomocna może też być struktura pliku MEM.SAV - tam są zapisane określone ścieżki (plik zawsze jest szukany w stacji numer 1 lub 8).
Hmm, w/g instrukcji (rozdział V) - MyDOS był wstępnie przygotowywany do wielozadaniowości (na przykład współdzielenie drukarki przez kilka komputerów)... Ktoś tego używa(ł)? Swoją drogą nie będę się spierał, trza sprawdzić...

Sikor umarł...

13

drac030 napisał/a:

sikor/seban: mnie się wydaje, że candle chce mieć funkcję dokładnie odwrotną, to znaczy odczytującą bieżącą ścieżkę, a nie zmieniającą ją.

tak by winikało ponieważ Candle pytał o PWD, jednak później pisze:

Candle napisał/a:

nie chce w programie wpisywac bezwzglednych sciezek i chcialbym zachowac jakas przenoszalnosc calosci miedzy sdx a mydosem

więc jeżeli w programie miałby odwołanie np:

"D:PLIK.DAT", a przed wywołaniem programu lub w jego kodzie ustawiał by sobie "working directory" na katalog w którym pracuje, np: "D1:FOO:BAR"

to każde późniejsze odwołanie spod "D:PLIK.DAT" dałoby fizycznie dostep do pliki "D1:FOO:BAR:PLIK.DAT". Mówie oczywiście o przypadku MyDOS. O SpartaDOS się nie wypowiadam bo jestem laikiem w tym temacie. Zaproponowane przeze mnie rozwiązanie mało jest eleganckie, ale działa np. we wpsominanym przykładzie z MegaMagazine Collection ;)

pozdrawiam
Seban

14 Ostatnio edytowany przez Candle (2009-08-28 22:02:51)

wow :D

no dobra, to ja zaczne przegladac wszelkie referencje ktore zescie podali

ogolnie problem jest nastepujacy:

mam sobie jakies tam drzewo katalogow z malymi programami przykladowymi dla vbxe, kazdy przyklad ma swoj katalog z exe i potrzebnymi plikami z danymi
nie chce robic smietnika, wiec nie powrzucam wszystkich plikow w jeden katalog (np dla slideshowa to 15 plikow danych), ale dac mozliwosc przeniesienia calosci na dowolny dysk w dowolny katalog bez potrzeby rekompilacji

jesli proboje ladowac pod mydosem plik 'plik' podajac w parametrach cio tylko 'plik' - to sie nie uda
jesli dopisze do tego 'd:plik' to owszem, o ile aktualne znaczenie d: bedzie odpowiadalo temu katalogowi
tak zazwyczaj nie bedzie, wiec konczy sie to porazka
wepchanie 'd1:>katalog>plik' skonczy sie fiaskiem zaraz po tym, jak ktos zdecyduje sobie calosc podmontowac jako d2: lub h:

to co napisal seban w poscie #13 jest tym, o co mnie sie rozchodzi, ale manewr z ":" nie dziala :( poza tym wciaz nie wiem jak zmienic ten working directory, ale pewnie po zapoznaniu sie z tym, co zostalo zlinkowane sie dowiem

edit: zabojca byl ogrodnik - draco ma tez racje
potrzebuje znac bierzacy katalog, by wyznaczyc jakis podkatalog (jesli nie moge miec relatywnej sciezki, chce miec absolutna, ale aktualna)

candle

przechodze na tumiwisizm

15 Ostatnio edytowany przez seban (2009-08-28 23:08:59)

możesz mieć relatywną, jeżeli ustawisz ten "working dir", a potem będziesz się odwoływał we wszystkich open do "d:plik.dat". Warunkiem jest iż musisz mieć "D:" a nie "D1:", za chwilę przykład na szybko z BASIC-em.

UPDATE #1:

Oto BASIC-owy przykład, zakładam iż masz skonfigurowanego MyDOS-a z ramdyskiem na D8:, bo na tym będzie bazował ten przykład ;)

10 XIO 34,#1,8,0,"D8:FOO" : REM tworzy katalog FOO na D8:
20 XIO 34,#1,8,0,"D8:FOO:BAR" : REM tworzy katalog BAR w katalogu FOO na D8:
30 XIO 41,#1,0,0,"D8:FOO:BAR" : REM ustawia working directory na "D8:FOO:BAR"
40 OPEN #1,8,0,"D:DUMMY.DAT" : REM otwiera dummy.dat do zapisu (odwołanie do D: spowoduje iż MyDOS odwoła się do "working dir" więc stworzy plik w katalogu D8:FOO:BAR)
50 PRINT #1;"BLA, BLA, BLA..."
60 CLOSE #1

po wywołaniu tego kodu w katalogu "D8:FOO:BAR" pojawi się plik o nazwie "dummy.dat". Jego zawartość to "BLA, BLA, BLA...",$9B

Teraz przykład jak się do niego dobrać stosując "working DIR"

10 XIO 41,#1,0,0,"D8:FOO:BAR": REM ustal working DIR na "D8:FOO:BAR"
20 OPEN #1,4,0,"D:DUMMY.DAT": REM otwórz DUMMY.DAT do odczytu (MyDOS odwoła się do lokacji: D8:FOO:BAR:DUMMY.DAT"
30 DIM A$(100): REM deklarujemy zmienną tekstową (string)
40 INPUT #1,A$: REM zasysamy z pliku wiersz do A$
50 PRINT A$: REM wypisujemy na ekranie
60 CLOSE #1: REM zamykamy kanał

BASIC-owe przykłady są tylko po to aby wyjaśnić działanie mechanizmu working dir (default directory). Wywołanie XIO z poziomu ASM to po prostu normalny skok do CIO z odpowiednim kodem operacji (np. jak w przypadku OPEN). Jak będzie potrzeby real ASM kod, daj znać.

Seban

16

ale zalozmny ze jestem na H:
ktos sobie przegral gdzies zawartosc dysku - ot takie porzadki
chcialbym zeby cud sie nadal uruchamial
wiec potrzebuje znac bierzaca, aby ustawic to d:

przechodze na tumiwisizm

17 Ostatnio edytowany przez seban (2009-08-28 23:26:46)

Jedno pytanie, czy jako H: masz na myśli opcję "H-PATCH" z emulatora? czy może jakiegoś dużego ATR-a widzianego przez MyDOS jako duży dysk i oznaczony przez MyDOS jako napęd z literką H?

Pytam bo nie wiem jak działa H-PATCH, bo "set working dir", czy "make dir" z poziomu emulatora nie działają (ERROR 146 - zwracany przez CIO czyli Function Not Implemented), działa natomiast bezpośrednie odwołanie się do katalogów typu "H1:FOO:BAR:DUMMY.DAT".

W całym zamieszaniu z MyDOS i jego nieprofesjonalności/inności/prostocie w porównaniu ze SpartaDOS... podejrzewałbym prawdopodobny brak obsługi "set default/work dir" oraz "make directory" poprzez kod obsługujący "H-PATCH". Wygląda na to iż handler "H" w przypadku Atari800WIN ma minimalną funkcjonalność :(

Oczywiście cały czas mówię o archaicznym Atari800WIN_Plus_4.0. Oczywiście nie wiem jak jest pod spartą, nie sprawdzałem także ostatniej wersji Atari800. Na real sprzęcie z KMK/IDE chyba powinno działać bez problemu. Tak jak w przypadku dużego 16-megowego ATR-a którego "podmountowałem" MyDos-owi.

Seban

18

rozumiem jakis dysk twardy zbudowany jako new device
jesli h: to tylko wynalazek z emulglatora - sory - nie mialem nigdy prawdziwego

po prostu dmucham na zimne i chce to zrobic raz i porzadnie

candle

przechodze na tumiwisizm

19

seban dobrze gada. Kluczowe jest, że katalog bieżący to "D:" (_bez_ numeru napędu), a więc "D:PLIK.DAT" to będzie plik znajdujący się na dysku bieżącym i w katalogu bieżącym (a nie w katalogu głównym na D1: )

Jedna tylko uwaga/prośba, żeby używać znaczka ">" jako separatora nazw katalogów w ścieżkach, tzn. D:FOO>BAR>PLIK.DAT zamiast D:FOO:BAR:PLIK.DAT - gdyż ":" akceptuje jedynie MyDOS, a ">" zarówno MyDOS jak i Sparta.

KMK
? HEX$(6670358)

20

no ale co mam poczac kiedy mydos nie potrafi zrobic cwd?
zalozyc ze nie bedzie takiej potrzeby?
no nawet jesli nie bedzie, to skad mam wiedziec ze "dyskietka" jest w D1 a nie D5?

przechodze na tumiwisizm

21

A po co ci wiedzieć, w której stacji jest dyskietka?

KMK
? HEX$(6670358)

22

a jak mam ustalic katalog, w ktorym maja byc dane?

wiem ze umiescilem pliki w katalogu BLE na dysku
u mnie bylo to D1, ale ktos sobie podmontowal pod APE jako D3 i co?
robie CWD na D1:BLE i od tego momentu D1:BLE jest widziane jako D:
laduje D:BLA - dupa
bo D1:BLE nie zostalo zamapowane na D: bo nie istnialo

to co?
proboje na chama mapowac po kolei D1:BLE D2:BLE itd az sie uda?
to chyba nie jest wyjscie

przechodze na tumiwisizm

23 Ostatnio edytowany przez drac030 (2009-08-29 01:39:46)

Jeśli ktoś sobie podmontował pod APE jako D3:, to postępuje nieroztropnie nie zmieniając przed uruchomieniem binarki katalogu bieżącego na D3:BLE (zakładając, że ona też jest w tym katalogu).

Wpisz taki wymóg do README, że program ma być uruchamiany z bieżącego dysku, i będzie po sprawie. Ostatecznie chyba normalne jest (np. pod MS-DOS-em na piecu), że przed uruchomieniem programu z konkretnego katalogu robi się CD do tegoż katalogu (chyba że się mylę, z MS-DOS-em nie miałem za wiele do czynienia).

A jak będziesz chciał zrobić CWD, to zrobisz CWD na "D:BLE" i powinno działać.

Chyba że ja nie kumam, o co chodzi.

PS. jest dość łatwo ustalić, z którego napędu wczytała się binarka: ta informacja jest w DCB, mianowicie pod adresem $0301 (DUNIT).

KMK
? HEX$(6670358)

24

a to bedzie rowniez prawda dla sparty?

chodzi o to, ze uzytkownik moze przegrac taki program w dowolne miejsce i ten dalej winien dzialac

jesli nie, to wszystko to o kant dupy potluc

przechodze na tumiwisizm

25

W dowolne miejsce zawsze można, ale twój problem, o ile go rozumiem, nie polega na umieszczeniu programu w dowolnym miejscu, tylko na tym, żeby program umieszczony w dowolnym miejscu mógł też być z dowolnego (innego) miejsca uruchomiony. Np. program jest w D3:>FOO>BAR>BRUM.EXE, a ty chcesz, żeby user mógł go odpalić z D1:>, nie zmieniwszy wcześniej bieżącego dysku na D3:, a ścieżki na >FOO>BAR> - zgadza się?

O ile łatwo jest wykumać, z którego dysku został program załadowany, o tyle z jakiego katalogu, to się chyba tylko pod SDX da. Pod MyDOS-em można by było spróbować odczytać linię komend przekazaną przez usera do DUP.SYS (adres do niej będzie w IOCB #0, ICBUFA/ICABUFA+1), pod warunkiem, że załadowanie programu jej nie zamazało, bo DUP.SYS jest nierezydentny.

Jeśli zaś nie chodzi o to, to na twoim miejscu wpisałbym do README wymóg jak powyżej napisałem (tzn. że trzeba uruchamiac program mając dysk i katalog, w którym się znajduje binarka, ustawione jako bieżące, funkcją R. w MyDOS-ie i komendą CD pod SDX) i zapomniał o CD i PWD.

KMK
? HEX$(6670358)