SpartaDOS X ma mechanizm zwany szlakiem poszukiwań. Jest to zmienna środowiskowa PATH, w której zapisane są katalogi, w jakich szukany jest otwierany plik (nie koniecznie wykonywalny). Polecenie OPEN #1,4+32,0,"D:twojplik.dat" spowoduje przeszukanie wszystkich katalogów zawartych w zmiennej PATH (od pierwszego do ostatniego), a na końcu katalogu bierzącego i otwarcie podanego pliku z katalogu, w którym został znaleziony jako pierwszy.
Np.
PATH=c:dos;b:programy;e:gry
Plik twojplik.dat znajduje się w katalogach: b:programy, e:gry i w katalogu bieżącym, czyli tym, w którym zajdowałeś się w momencie uruchomienia programu (np. a:moje).
Wykonanie powyższego OPEN spowoduje otwarcie pliku twojplik.dat z katalogu b:programy.
Oczywiście nie musi to być wcale ten plik, o który Ci chodziło, bo program, który go otwiera był uruchomiony przez polecenie np. c:dostoolstwojplik. Aby sprawdzić pod SpartaDOS X (tylko ta wersja!) z jakiego katalogu został uruchomiony plik należy wykonać poniższy kod:
; Przepisanie urządzenia, ścieżki i nazwy uruchomionego programu
; pod adres wskazany przez rejestry AX
auxptr = $15
device = $0761
name = $0762
path = $07A0
g.path sta auxptr
stx auxptr+1
ldy #0
lda #'D
sta (auxptr),y
iny
lda device ; urządzenie z jakiego został uruchomiony program
ora #$30 ; przerabiamy na jego nr ;)
sta (auxptr),y
iny
lda #':
sta (auxptr),y ; mamy już Dn:
iny ; teraz przepisujemy ścieżkę
lda path-3,y
sta (auxptr),y
bne *-6
cpy #3 ; jeśli program uruchomiony z bieżącego katalogu,
beq ?skp ; to brak ścieżki
lda path-4,y ; jeśli z wykorzystaniem szlaku poszukiwań,
jsr ckspec ; to brak '' lub '>' na końcu ścieżki
beq ?skp
lda #'>
sta (auxptr),y
?skp ldx #-1 ; przepisujemy nazwę
?cn inx
cpx #8
bcs ?id
jsr ?cc ; przenosimy znak nazwy
bne ?cn
?id lda #'. ; kropka rozdzielająca nazwę od rozszerzenia
sta (auxptr),y
iny
ldx #8
?ce inx
cpx #12
bcs ?in
jsr ?cc
bne ?ce
?in lda #0
sta (auxptr),y
rts
?cc lda name,x
sta (auxptr),y
iny
cmp #$20 ; sprawdzamy, czy spacja (koniec nazwy)
rts
ckspec cmp #'<
beq *+8
cmp #'>
beq *+4
cmp #'
rts
Jak widać procedura nie robi nic szczególnego. Przepisuje tylko urządzenie, ścieżkę i nazwę pliku w formie strawnej dla OPEN. Wskaźnik auxptr może być umieszczony pod dowolnym adresem na stronie 0 ($15 jest dobrą lokalizacją nie kolidującą, ani z systemem, ani z ew. inymi zmiennymi pragramu).
Powyższa procedura jest lekką modyfikacją procki umieszczonej w Config Selectorze. Tam jest nieco krótsza, gdyż korzysta z paru procedur Sparty, który tu nie można użyć ze względu na ich "ruchomy" charakter ze względu na wersję.
O wiele łatwiej jest ustalić ścieżkę pod MyDOS-em, czy dyskową wersją SpartaDOS-u. Tak jak marok dobrze kombiuje, można skorzystać z adresu bufora kanału 0 CIO.
[ Dodano: 03.05.2005 00:23:15 ]
Lewis, QA jak i wszystkie "inteligentne" programy próbujące zgadnąć skąd zostały wczytane wykładają się pod SpartaDOS-em i MyDOS-em. To dlatego, że odczytują tylko numer urządzenia z DUNIT ($0301) i wstawiają go pomiędzy "D" a ":". ;) Pod MyDOS-em "Dn:" oznacza katalog główny dysku n, a pod Spartą katalog bieżący tego dysku.
Jeśli pod Spartą jesteś w katalogu D3:ZRODLA, w zmiennej PATH masz wstawiony katalog z QA, powiedzmy Twój D2:PROG, a katalogiem bieżącym dla dysku D2: będzie akurat D2:GNIOT, to QA będzie szukał pliku QA.SET w katalogu bieżącym dysku D2:, czyli D2:GNIOT.
Po MyDOS-em (drzewo katalogów takie samo jak w powyższym przykładzie ze Spartą), QA zawsze będzie szukało QA.SET w katalogu głównym dysku D2: i nie pomogą tu kombinacje z "CHDIR".