Wiersz poleceń

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:37, 5 cze 2022
Mono (Dyskusja | wkład)
(Wywołanie funkcji odczytu wiersza poleceń)
← Previous diff
Wersja z dnia 11:49, 5 cze 2022
Mono (Dyskusja | wkład)
(SpartaDOS X - D: to dla SDX D4:)
Next diff →
Linia 88: Linia 88:
Opis tego interfejsu znajduje się w [[Przewodnik programisty SpartaDOS X|Przewodniku programisty SpartaDOS X]], dostępnym [http://sdx.atari8.info/index.php?show=en_docs tutaj] (rozdział 5, "Obróbka wiersza poleceń"). Opis tego interfejsu znajduje się w [[Przewodnik programisty SpartaDOS X|Przewodniku programisty SpartaDOS X]], dostępnym [http://sdx.atari8.info/index.php?show=en_docs tutaj] (rozdział 5, "Obróbka wiersza poleceń").
 +
 +'''UWAGA!''' Nieoczywistym może być, że nazwy urządzeń podawane jako parametry do programu rozwijane są według konwencji przyjętej przez używany DOS. Tak więc parametr "D:DOWOL.TXT" w DOS XL zostanie rozwinięty do postaci "D1:DOWOL.TXT", ale już Sparta DOS X rozwinie go jako "D4:DOWOL.TXT", a to dlatego że "D:" to dla niego czwarty dysk (począwszy od "A:").
[[Kategoria:Niezbędnik kodera]] [[Kategoria:Niezbędnik kodera]]

Wersja z dnia 11:49, 5 cze 2022

Część DOS-ów dla Atari obsługiwana jest za pośrednictwem tzw. wiersza poleceń (ang. command line). Takimi DOS-ami są np. OS/A+, DOS XL, SpartaDOS, BW-DOS, DOS 2.5CP, DOS II+/D, TopDOS. System (na ogół) oferuje przy tym funkcję pozwalającą programowi na w miarę bezbolesny odczyt parametrów podanych przez użytkownika.

Spis treści

Standard OSS

Najpopularniejszy standard w tej dziedzinie jest dziełem firmy OSS. Zgodny z nim interfejs wiersza poleceń zaimplementowano w OS/A+ (czyli DOS XL), a ICD użyło go w SpartaDOS. Obsługuje go też BW-DOS - jako klon SpartaDOS.

Wykrycie dostępności wiersza poleceń

Nie wszystkie DOS-y zawierają funkcje odczytu wiersza poleceń, jego dostępność trzeba zatem wykryć. Standard DOS XL przewiduje, że funkcja odczytu wiersza poleceń jest dostępna, jeśli pod adresem wskazanym przez wektor DOSVEC ($0a), dodać 3, znajduje się rozkaz skoku JMP procesora 6502. Rozkaz ten (w trybie absolutnym) ma kod operacyjny 76 ($4C):

boot?  = $09
dosvec = $0a

     lda boot?           ; sprawdzamy, czy DOS w ogóle jest w pamięci
     lsr
     bcc _no_command_line

     lda dosvec+1        ; a jeśli tak, czy DOSVEC nie wskazuje ROM-u
     cmp #$c0
     bcs _no_command_line

     ldy #$03
     lda (dosvec),y
     cmp #$4c
     bne _no_command_line
     ...                 ; tu dalsze czynności związane z wierszem poleceń

_no_command_line
     ...                 ; przeskok tutaj oznacza brak dostępności wiersza poleceń

Inicjowanie funkcji odczytu wiersza poleceń

Jeśli wykrycie się powiodło, ten adres - tzn. (DOSVEC)+3 - jest adresem wywołania procedury pobrania parametrów z wiersza poleceń. Ponieważ w 6502 brakuje rozkazu wywołania procedury w trybie pośrednim indeksowym, najlepiej jest ten adres przepisać do własnego programu:

     lda dosvec
     clc
     adc #$03
     sta zcr+1
     lda dosvec+1
     adc #$00
     sta zcr+2

Wywołanie funkcji odczytu wiersza poleceń

Kodem jak powyżej inicjujemy następujący rozkaz:

zcr  jsr $0000

W SpartaDOS po wykonaniu tego JSR-a ustawiony bit Z rejestru znaczników CPU (czyli "wynik zerowy") oznacza, że w wierszu poleceń nie ma więcej parametrów. Przeciwny stan tego znacznika znaczy, że parametr został pobrany do bufora COMFNAM znajdującego się pod adresem (DOSVEC)+33. Zawartość COMFNAM zawsze zaczyna się od specyfikacji urządzenia (np. "D:") i zawsze zakończona jest znakiem EOL (ASCII 155), co oznacza że przekazując do programu parametr "DOWOL.TXT" w COMFNAM otrzymamy ciąg "D1:DOWOL.TXT"+EOL.

W DOS XL procedura pobierania parametru nie sprawdza automatycznie, czy wiersz polecenia już się skończył: program musi to sprawdzić "na piechotę" przez porównanie stanu wskaźnika bufora wejściowego (BUFOFF) sprzed wywołania procedury ze stanem po jej wywołaniu. Ta metoda zadziała też pod SpartaDOS. A zatem:

next ldy #$0a           ; *
     lda (dosvec),y     ; *
     pha                ; *
zcr  jsr $0000
     ldy #$0a           ; *
     pla                ; *
     cmp (dosvec),y     ; *
     beq _no_more_parameters

     ldy #33
_cp  lda (dosvec),y
     sta parbuf-33,y
     iny
     cmp #$9b
     bne _cp
     ...                 ; tu robimy z parametrem pobranym do bufora "parbuf" to, co potrzebujemy
     jmp next

_no_more_parameters
     ...

Wiersze programu oznaczone w komentarzu gwiazdką (*) są zbędne pod SpartaDOS, ale nieodzowne dla zgodności z DOS XL.

SpartaDOS X

SpartaDOS X, jako klon SpartaDOS, oferuje zgodny z powyżej opisanym interfejs programowy, dzięki czemu istnieje zgodność wstecz, a programy napisane dla DOS XL i SpartaDOS są w stanie interpretować wiersz poleceń również wtedy, kiedy zostały uruchomione pod tym DOS-em.

Programy napisane specjalnie dla SpartaDOS X mają do dyspozycji oddzielny, bardziej wyrafinowany interfejs służący do interpretacji parametrów przekazanych w wierszu polecenia. Składa się nań kilkanaście procedur dostępnych za pośrednictwem symboli i zawartych w bibliotece SpartaDOS X, które nie tylko pobierają z wiersza poleceń kolejne parametry, ale też są w stanie je automatycznie interpretować i przetwarzać (np. liczbę przekazaną w postaci ciągu ASCII na postać 32-bitowej reprezentacji całkowitej).

Opis tego interfejsu znajduje się w Przewodniku programisty SpartaDOS X, dostępnym tutaj (rozdział 5, "Obróbka wiersza poleceń").

UWAGA! Nieoczywistym może być, że nazwy urządzeń podawane jako parametry do programu rozwijane są według konwencji przyjętej przez używany DOS. Tak więc parametr "D:DOWOL.TXT" w DOS XL zostanie rozwinięty do postaci "D1:DOWOL.TXT", ale już Sparta DOS X rozwinie go jako "D4:DOWOL.TXT", a to dlatego że "D:" to dla niego czwarty dysk (począwszy od "A:").

Personal tools