<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Programowanie%3A_Jak_parsowa%C4%87_prze%C5%82%C4%85czniki_z_parametrami</id>
	<title>Programowanie: Jak parsować przełączniki z parametrami - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Programowanie%3A_Jak_parsowa%C4%87_prze%C5%82%C4%85czniki_z_parametrami"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Programowanie:_Jak_parsowa%C4%87_prze%C5%82%C4%85czniki_z_parametrami&amp;action=history"/>
	<updated>2026-10-04T11:14:07Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Programowanie:_Jak_parsowa%C4%87_prze%C5%82%C4%85czniki_z_parametrami&amp;diff=3282&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Programowanie:_Jak_parsowa%C4%87_prze%C5%82%C4%85czniki_z_parametrami&amp;diff=3282&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[SpartaDOS X]] pozwala na przekazywanie parametrów w wywołaniu programu.&lt;br /&gt;
Mogą one być parsowane za pomocą procedur wspomnianych w 5 rozdziale [http://sdx.atari8.info/index.php?show=en_docs podręcznika programowania] traktującym o obróbce wiersza poleceń.&lt;br /&gt;
&lt;br /&gt;
Procedura U_SLASH pozwala na wygodne parsowanie &amp;#039;&amp;#039;&amp;#039;serii przełączników&amp;#039;&amp;#039;&amp;#039; wyliczonych po sobie, a nie rozdzielonych innymi parametrami.&lt;br /&gt;
Przykładowo parsowanie linii poleceń w wywołaniu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; A:&amp;amp;gt; MYPRG /X /A 23 /Q&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wymaga użycia kolejno:&lt;br /&gt;
&lt;br /&gt;
* U_SLASH dla /X i /A naraz&lt;br /&gt;
* U_GETNUM dla 23&lt;br /&gt;
* U_SLASH dla /Q&lt;br /&gt;
&lt;br /&gt;
a nie, jak intuicyjnie mogłoby się wydawać:&lt;br /&gt;
&lt;br /&gt;
* U_SLASH dla /X&lt;br /&gt;
* U_SLASH dla /A&lt;br /&gt;
* U_GETNUM dla 23&lt;br /&gt;
* U_SLASH dla /Q&lt;br /&gt;
&lt;br /&gt;
Ponieważ kolejność przełączników nie ma dla procedury U_SLASH znaczenia, to wynik jej działania będzie identyczny również dla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; A:&amp;amp;gt; MYPRG /A /X 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /XA 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AX 23 /Q&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak również (pominąwszy fakt zliczania przez SDX począwszy od wersji 4.47 ilości wystąpień przełączników o tej samej nazwie) dla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; A:&amp;amp;gt; MYPRG /AAA /XX 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /XXAAA 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AAAXX 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AXAXA 23 /Q&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jeśli jednak przełącznik /A miałby występować łącznie z parametrem liczbowym, wtedy okaże się, że wywołania:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; A:&amp;amp;gt; MYPRG /X /A 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /A /X 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /XA 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AX 23 /Q&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
będą dla U_SLASH nierozróżnialne właśnie dlatego, że przełączniki /A i /X następujące po sobie są obsługiwane przez jedno jej wywołanie.&lt;br /&gt;
&lt;br /&gt;
Dodatkową trudnością jest też fakt, że dla minimum trzech różnych przełączników następujących bezpośrednio po sobie nie można też określić ich kolejności.&lt;br /&gt;
Można natomiast ustalić jaki przełącznik wystąpił &amp;#039;&amp;#039;&amp;#039;ostatnio&amp;#039;&amp;#039;&amp;#039; - dokonuje tego procedura:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getlastswitch:&lt;br /&gt;
  ldy BUFOFF&lt;br /&gt;
@:dey&lt;br /&gt;
  lda LBUF,y&lt;br /&gt;
  cmp #&amp;#039; &amp;#039;&lt;br /&gt;
  beq @-&lt;br /&gt;
  cmp #&amp;#039;,&amp;#039;&lt;br /&gt;
  beq @-&lt;br /&gt;
  rts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zwracająca w akumulatorze [[ATASCII|kod ATASCII]] przełącznika.&lt;br /&gt;
&lt;br /&gt;
Przykładowa procedura parsująca przełączniki /A (z parametrem), /X i /Q może wyglądać tak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
parseswitches:&lt;br /&gt;
  lda swad&lt;br /&gt;
  ldx swad+1&lt;br /&gt;
  lda #swlen&lt;br /&gt;
  jsr U_SLASH&lt;br /&gt;
  sec&lt;br /&gt;
  lda swa&lt;br /&gt;
  beq @+&lt;br /&gt;
  jsr proca&lt;br /&gt;
@:lda swq&lt;br /&gt;
  beq @+&lt;br /&gt;
  jsr procq&lt;br /&gt;
@:lda swx&lt;br /&gt;
  beq @+&lt;br /&gt;
  jsr procx&lt;br /&gt;
@:bcc parseswitches&lt;br /&gt;
  ; nie wykryto żadnych przełączników&lt;br /&gt;
  rts&lt;br /&gt;
sw:&lt;br /&gt;
swa .db 0,&amp;#039;A&amp;#039;&lt;br /&gt;
swq .db 0,&amp;#039;Q&amp;#039;&lt;br /&gt;
swx .db 0,&amp;#039;X&amp;#039;&lt;br /&gt;
swlen = *-sw&lt;br /&gt;
swad .dw sw&lt;br /&gt;
&lt;br /&gt;
proca:&lt;br /&gt;
  jsr getlastswitch&lt;br /&gt;
  cmp swa+1&lt;br /&gt;
  bne error  ;parametr liczbowy ma następować zaraz po /A&lt;br /&gt;
  jsr U_GETNUM&lt;br /&gt;
  beq error  ;parametr po /A nie jest liczbą&lt;br /&gt;
  ...&lt;br /&gt;
  clc        ;informacja że przetworzyliśmy przełącznik&lt;br /&gt;
  rts&lt;br /&gt;
&lt;br /&gt;
procq:&lt;br /&gt;
  ...&lt;br /&gt;
  clc&lt;br /&gt;
  rts&lt;br /&gt;
&lt;br /&gt;
procx:&lt;br /&gt;
  ...&lt;br /&gt;
  clc&lt;br /&gt;
  rts&lt;br /&gt;
&lt;br /&gt;
error:&lt;br /&gt;
  lda #kod_błędu&lt;br /&gt;
  jmp U_FAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Procedura poprawnie obsługuje przełączniki bez względu na kolejność ich wystąpienia, więc wywołania:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; A:&amp;amp;gt; MYPRG /X /A 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /XA 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /XXAAA 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AXAXA 23 /Q&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zostaną poprawnie przeparsowane, natomiast:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; A:&amp;amp;gt; MYPRG /A /X 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AX 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AAA /XX 23 /Q&lt;br /&gt;
 A:&amp;amp;gt; MYPRG /AAAXX 23 /Q&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zakończą się błędem.&lt;br /&gt;
&lt;br /&gt;
== Uwagi ==&lt;br /&gt;
&lt;br /&gt;
Procedura U_SLASH począwszy od SDX 4.47 zwraca w akumulatorze kod ATASCII ostatnio napotkanego przełącznika.&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Programowanie Atari 8-bit]]&lt;br /&gt;
[[Kategoria:Niezbędnik kodera]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>