V úvodu kapitoly Příklady ilustrující použití programové vrstvy RPN32 je řada odkazů na ukázkový program rpn32. Také je tam psáno, že tento ukázkový program není předmětem zájmu zmíněné ilustrační kapitoly. To vše je pravdou. Různé finesy při spouštění rpn32 jsou totiž hlavním tématem tohoto textu.
Bylo by krajně nekorektní nechat čtenáře, kteří „oblibují“ operační systém Windows, tento text dočíst až do konce. Jich se tato problematika ani v nejmenším netýká a jejich závěrečný údiv a rozčarování z času promrhaného četbou by byl logickou tečkou („za tím naším případem“, jak by jistě dodal inspektor Trachta :-). Nechť je tedy na úvod vyřčena férová omluva a prosba:
Vážení windowsofilové a unixofobové!
V zájmu zachování vašeho duševního zdraví vyslyšte tuto úpěnlivou prosbu a dále již nečtěte. Závist uživatelům operačního systému Unix, kterou by ve vás obsah tohoto textu nevyhnutelně vyvolal, je nežádoucím společenským fenoménem, za jehož vznik by jen blázen chtěl nést odpovědnost. Věřte však, že autor těchto řádků bláznem není, i když podpůrné argumenty se pro toto tvrzení hledají jen velmi obtížně... Tisícerý dík za pochopení.
Program rpn32 nabízí několik různých druhů použití závislých na jeho spuštění. Tyto řádky se budou věnovat pouze jednorázovému použití v obou variantách rozlišených zdrojem prováděných RPN instrukcí:
Z nápovědy programu rpn32 je vidět, že jmenované varianty (argumenty vs. soubor) nelze vzájemně kombinovat. Dokonce ani souborů s různými částmi výsledného RPN programu nemůže být několik, ale pouze jeden. Řešení těchto nedostatků se přímo nabízí: vzít zdrojový text rpn32.c a části potřebné pro dosažení kýžených vlastností do něj jednoduše doplnit. Má to však jeden háček. Takový postup totiž zcela ignoruje trend, kterému musí být veškerá činnost v oblasti výpočetní techniky na počátku jednadvacátého století zcela podřízena. Co je tím trendem samozřejmě všichni dobře víme. Nebo ne? Dobrá tedy, slabším jedincům budiž tato mantra připomenuta: V průběhu vývojových etap, jejichž výsledkem má být programové vybavení počítače (tzv. Software, zkráceně SW - pozn. red.), je silně nedoporučeno vytvářet/modifikovat nějaký zdrojový kód počítačového programu.
Citovaný požadavek si protiřečí pouze zdánlivě. Hlavním úkolem techniků zodpovědných za tvorbu SW není tento vytvářet (jak by se leckterý laik pro nedostatek zkušeností z oboru domníval). Příslušné SW moduly je třeba stáhnout z internetu, protože „To už přece musí bejt dávno vod někoho udělaný, né?“ a také „Přece se s tím nebudu dvě hodiny psát, když to mám za tři dny pohodlně vygůglený.“ Charakteristickou vlastností takových SW bloků je, že nedělají to, co se od nich očekává. I když je základní poučka „Ty vole, hlavně nepiš žádnej kód!“ dostatečně známa, přesto i v následujícím kroku někteří méně erudovaní technici zazmatkují a začnou stažené zdrojové texty upravovat. Chyba! Správným postupem je zajistit dostatečné množství podpůrných programových modulů (ať už jimi jsou další programy, knihovny, skripty, ...) a těmito v prvním kroku stažené části SW obalit. A právě touto progresivní metodou se zabývají další řádky tohoto textu.
Zůstane-li stranou ironický tón z předchozích odstavců, nabízí se pohled zřetelně střízlivější: pohled techniků, kteří těmi „moderními trendy“ nejsou okouzleni natolik, aby přestali u práce přemýšlet. Přemýšlení u práce s potřebným nádechem hravosti v překonávání technických problémů nezřídka vede k řešením zcela inovativním, nebo alespoň k postupům nepostrádajícím invenci. A právě k těmto ideám následující řádky alespoň vzhlížejí, když už se jich nemohou dotknout...
Každý rozumný technik pečlivě a s rozmyslem dělí vytvářený program na samostatně fungující části, které lze:
Aby bylo možno navrhovaný postup snadno ověřit, je vhodné mít k dispozici jednoduchý ukázkový program. Všechny ukázky v tomto textu budou pracovat s RPN programem, který:
Ukázkový program je složen ze tří modulů. Dva jsou zcela nezávislé, ten zbývající (kromě jiného) zajišťuje vazby mezi nimi. Který je který a jak se jmenují je bezvadně vidět z tabulky na konci tohoto dokumentu.
RPN program může mít při spuštění na RPN stacku argumenty. V X-registru je očekáváno číslo definující sekvenci řady pseudonáhodných hodnot (v angličtině obvykle seed; je-li 0, použito je 1). Y-registr udává počet generovaných pseudonáhodných hodnot (je-li menší než 2, použito je 5).
Spojení souborů .rpn zajistí utilita cat. Výsledek své činnosti (zápis do stdout) předá prostřednictvím pipe do rpn32 (čtení z stdin). Program rpn32 čte vstupní řádky stejně, jako by byly obsaženy v souboru na disku. Následují ukázky spuštění s různými argumenty. Za pozornost stojí pořadí modulů .rpn: entrypoint.rpn je vždy první.
↓ seed = 1, count = 5, trend = TREND_ASCENDING;
# # cat entrypoint.rpn randomize.rpn bubblesort.rpn | rpn32 -mkli -ri PSE> 41_________ 5__________ 0__________ 5__________ 4__________ PSE> 18467______ 4__________ 0__________ 5__________ 4__________ PSE> 6334_______ 3__________ 0__________ 5__________ 4__________ PSE> 26500______ 2__________ 0__________ 5__________ 4__________ PSE> 19169______ 1__________ 0__________ 5__________ 4__________ PSE> 26500______ 5__________ 19169______ 0__________ 5__________ PSE> 19169______ 4__________ 19169______ 0__________ 5__________ PSE> 18467______ 3__________ 19169______ 0__________ 5__________ PSE> 6334_______ 2__________ 19169______ 0__________ 5__________ PSE> 41_________ 1__________ 19169______ 0__________ 5__________ RES> #
↓ seed = 173, count = 5, trend = TREND_ASCENDING;
# # cat entrypoint.rpn randomize.rpn bubblesort.rpn | rpn32 -mkli -ri - 173 PSE> 603________ 5__________ 0__________ 5__________ 4__________ PSE> 32185______ 4__________ 0__________ 5__________ 4__________ PSE> 31548______ 3__________ 0__________ 5__________ 4__________ PSE> 3854_______ 2__________ 0__________ 5__________ 4__________ PSE> 23804______ 1__________ 0__________ 5__________ 4__________ PSE> 32185______ 5__________ 23804______ 0__________ 5__________ PSE> 31548______ 4__________ 23804______ 0__________ 5__________ PSE> 23804______ 3__________ 23804______ 0__________ 5__________ PSE> 3854_______ 2__________ 23804______ 0__________ 5__________ PSE> 603________ 1__________ 23804______ 0__________ 5__________ RES> #
↓ seed = 23456, count = 10, trend = TREND_ASCENDING;
# # cat entrypoint.rpn randomize.rpn bubblesort.rpn | rpn32 -mkli -ri - 10 23456 PSE> 11100______ 10_________ 0__________ 10_________ 9__________ PSE> 5347_______ 9__________ 0__________ 10_________ 9__________ PSE> 6060_______ 8__________ 0__________ 10_________ 9__________ PSE> 2724_______ 7__________ 0__________ 10_________ 9__________ PSE> 21368______ 6__________ 0__________ 10_________ 9__________ PSE> 6325_______ 5__________ 0__________ 10_________ 9__________ PSE> 6912_______ 4__________ 0__________ 10_________ 9__________ PSE> 19085______ 3__________ 0__________ 10_________ 9__________ PSE> 21320______ 2__________ 0__________ 10_________ 9__________ PSE> 735________ 1__________ 0__________ 10_________ 9__________ PSE> 21368______ 10_________ 735________ 0__________ 10_________ PSE> 21320______ 9__________ 735________ 0__________ 10_________ PSE> 19085______ 8__________ 735________ 0__________ 10_________ PSE> 11100______ 7__________ 735________ 0__________ 10_________ PSE> 6912_______ 6__________ 735________ 0__________ 10_________ PSE> 6325_______ 5__________ 735________ 0__________ 10_________ PSE> 6060_______ 4__________ 735________ 0__________ 10_________ PSE> 5347_______ 3__________ 735________ 0__________ 10_________ PSE> 2724_______ 2__________ 735________ 0__________ 10_________ PSE> 735________ 1__________ 735________ 0__________ 10_________ RES> #
↓ seed = 1, count = 3, trend = TREND_ASCENDING;
# # cat entrypoint.rpn randomize.rpn bubblesort.rpn | rpn32 -mkli -ri - 3 0 PSE> 41_________ 3__________ 0__________ 3__________ 2__________ PSE> 18467______ 2__________ 0__________ 3__________ 2__________ PSE> 6334_______ 1__________ 0__________ 3__________ 2__________ PSE> 18467______ 3__________ 6334_______ 0__________ 3__________ PSE> 6334_______ 2__________ 6334_______ 0__________ 3__________ PSE> 41_________ 1__________ 6334_______ 0__________ 3__________ RES> #
↓ seed = 2014, count = 6, trend = TREND_DESCENDING;
# # cat entrypoint.rpn randomize.rpn bubblesort.rpn | rpn32 -mkli -ri - -6 2014 PSE> 6615_______ 6__________ 0__________ 6__________ 5__________ PSE> 28130______ 5__________ 0__________ 6__________ 5__________ PSE> 20415______ 4__________ 0__________ 6__________ 5__________ PSE> 2078_______ 3__________ 0__________ 6__________ 5__________ PSE> 7496_______ 2__________ 0__________ 6__________ 5__________ PSE> 23143______ 1__________ 0__________ 6__________ 5__________ PSE> 2078_______ 6__________ 23143______ 0__________ 6__________ PSE> 6615_______ 5__________ 23143______ 0__________ 6__________ PSE> 7496_______ 4__________ 23143______ 0__________ 6__________ PSE> 20415______ 3__________ 23143______ 0__________ 6__________ PSE> 23143______ 2__________ 23143______ 0__________ 6__________ PSE> 28130______ 1__________ 23143______ 0__________ 6__________ RES> #
Pozn.: Pro výpis generovaných/seřazených hodnot by postačilo, aby formátovacím řetězcem byl požadován textový výstup pouze X-registru RPN stacku. Obsahy ostatních registrů však bezděčně plní úlohu chybějících oddělovačů a výpis je proto přehlednější.
Viditelným nedostatkem v modulu entrypoint.rpn je pevně stanovené množství paměťových registrů na hodnotu 21 (viz úvodní pseudoinstrukce ?REG). Následující shellovská konstrukce umožní spustit RPN program stejně jako v předchozích ukázkách, ale s možností určení libovolné délky seznamu generovaných/řazených čísel.
↓ seed = 173, count = 100, trend = TREND_ASCENDING;
# # rpn32 -mkli -ri `cat entrypoint.rpn randomize.rpn bubblesort.rpn | rpn32 -L. | sed 's/ //; s/^*$/x/'` ?reg101 = 100 173 PSE> 603________ 100________ 0__________ 100________ 99_________ PSE> 32185______ 99_________ 0__________ 100________ 99_________ PSE> 31548______ 98_________ 0__________ 100________ 99_________ PSE> 3854_______ 97_________ 0__________ 100________ 99_________ PSE> 23804______ 96_________ 0__________ 100________ 99_________ PSE> 2993_______ 95_________ 0__________ 100________ 99_________ PSE> 22531______ 94_________ 0__________ 100________ 99_________ PSE> 17387______ 93_________ 0__________ 100________ 99_________ PSE> 16139______ 92_________ 0__________ 100________ 99_________ PSE> 15572______ 91_________ 0__________ 100________ 99_________ PSE> 13033______ 90_________ 0__________ 100________ 99_________ PSE> 2953_______ 89_________ 0__________ 100________ 99_________ PSE> 30080______ 88_________ 0__________ 100________ 99_________ PSE> 11979______ 87_________ 0__________ 100________ 99_________ PSE> 25925______ 86_________ 0__________ 100________ 99_________ PSE> 754________ 85_________ 0__________ 100________ 99_________ PSE> 28169______ 84_________ 0__________ 100________ 99_________ PSE> 2585_______ 83_________ 0__________ 100________ 99_________ PSE> 24799______ 82_________ 0__________ 100________ 99_________ PSE> 21216______ 81_________ 0__________ 100________ 99_________ PSE> 29778______ 80_________ 0__________ 100________ 99_________ PSE> 23117______ 79_________ 0__________ 100________ 99_________ PSE> 30548______ 78_________ 0__________ 100________ 99_________ PSE> 27015______ 77_________ 0__________ 100________ 99_________ PSE> 21636______ 76_________ 0__________ 100________ 99_________ PSE> 13948______ 75_________ 0__________ 100________ 99_________ PSE> 12476______ 74_________ 0__________ 100________ 99_________ PSE> 1718_______ 73_________ 0__________ 100________ 99_________ PSE> 1804_______ 72_________ 0__________ 100________ 99_________ PSE> 19950______ 71_________ 0__________ 100________ 99_________ PSE> 30089______ 70_________ 0__________ 100________ 99_________ PSE> 19998______ 69_________ 0__________ 100________ 99_________ PSE> 18845______ 68_________ 0__________ 100________ 99_________ PSE> 11544______ 67_________ 0__________ 100________ 99_________ PSE> 4018_______ 66_________ 0__________ 100________ 99_________ PSE> 21489______ 65_________ 0__________ 100________ 99_________ PSE> 18808______ 64_________ 0__________ 100________ 99_________ PSE> 20170______ 63_________ 0__________ 100________ 99_________ PSE> 18194______ 62_________ 0__________ 100________ 99_________ PSE> 22448______ 61_________ 0__________ 100________ 99_________ PSE> 17131______ 60_________ 0__________ 100________ 99_________ PSE> 19882______ 59_________ 0__________ 100________ 99_________ PSE> 7435_______ 58_________ 0__________ 100________ 99_________ PSE> 8510_______ 57_________ 0__________ 100________ 99_________ PSE> 14871______ 56_________ 0__________ 100________ 99_________ PSE> 18913______ 55_________ 0__________ 100________ 99_________ PSE> 27502______ 54_________ 0__________ 100________ 99_________ PSE> 13368______ 53_________ 0__________ 100________ 99_________ PSE> 12535______ 52_________ 0__________ 100________ 99_________ PSE> 22292______ 51_________ 0__________ 100________ 99_________ PSE> 27295______ 50_________ 0__________ 100________ 99_________ PSE> 19849______ 49_________ 0__________ 100________ 99_________ PSE> 32414______ 48_________ 0__________ 100________ 99_________ PSE> 1686_______ 47_________ 0__________ 100________ 99_________ PSE> 25332______ 46_________ 0__________ 100________ 99_________ PSE> 24376______ 45_________ 0__________ 100________ 99_________ PSE> 11200______ 44_________ 0__________ 100________ 99_________ PSE> 25052______ 43_________ 0__________ 100________ 99_________ PSE> 3423_______ 42_________ 0__________ 100________ 99_________ PSE> 32389______ 41_________ 0__________ 100________ 99_________ PSE> 30836______ 40_________ 0__________ 100________ 99_________ PSE> 26929______ 39_________ 0__________ 100________ 99_________ PSE> 26445______ 38_________ 0__________ 100________ 99_________ PSE> 30773______ 37_________ 0__________ 100________ 99_________ PSE> 28472______ 36_________ 0__________ 100________ 99_________ PSE> 27306______ 35_________ 0__________ 100________ 99_________ PSE> 32205______ 34_________ 0__________ 100________ 99_________ PSE> 32554______ 33_________ 0__________ 100________ 99_________ PSE> 10550______ 32_________ 0__________ 100________ 99_________ PSE> 17757______ 31_________ 0__________ 100________ 99_________ PSE> 29685______ 30_________ 0__________ 100________ 99_________ PSE> 10550______ 29_________ 0__________ 100________ 99_________ PSE> 10182______ 28_________ 0__________ 100________ 99_________ PSE> 27854______ 27_________ 0__________ 100________ 99_________ PSE> 18561______ 26_________ 0__________ 100________ 99_________ PSE> 11825______ 25_________ 0__________ 100________ 99_________ PSE> 26419______ 24_________ 0__________ 100________ 99_________ PSE> 16554______ 23_________ 0__________ 100________ 99_________ PSE> 7870_______ 22_________ 0__________ 100________ 99_________ PSE> 7497_______ 21_________ 0__________ 100________ 99_________ PSE> 3778_______ 20_________ 0__________ 100________ 99_________ PSE> 3256_______ 19_________ 0__________ 100________ 99_________ PSE> 3751_______ 18_________ 0__________ 100________ 99_________ PSE> 31898______ 17_________ 0__________ 100________ 99_________ PSE> 25072______ 16_________ 0__________ 100________ 99_________ PSE> 17676______ 15_________ 0__________ 100________ 99_________ PSE> 16461______ 14_________ 0__________ 100________ 99_________ PSE> 1791_______ 13_________ 0__________ 100________ 99_________ PSE> 22268______ 12_________ 0__________ 100________ 99_________ PSE> 21118______ 11_________ 0__________ 100________ 99_________ PSE> 22140______ 10_________ 0__________ 100________ 99_________ PSE> 31783______ 9__________ 0__________ 100________ 99_________ PSE> 30373______ 8__________ 0__________ 100________ 99_________ PSE> 858________ 7__________ 0__________ 100________ 99_________ PSE> 27803______ 6__________ 0__________ 100________ 99_________ PSE> 14059______ 5__________ 0__________ 100________ 99_________ PSE> 26933______ 4__________ 0__________ 100________ 99_________ PSE> 29785______ 3__________ 0__________ 100________ 99_________ PSE> 11220______ 2__________ 0__________ 100________ 99_________ PSE> 32222______ 1__________ 0__________ 100________ 99_________ PSE> 32554______ 100________ 32222______ 0__________ 100________ PSE> 32414______ 99_________ 32222______ 0__________ 100________ PSE> 32389______ 98_________ 32222______ 0__________ 100________ PSE> 32222______ 97_________ 32222______ 0__________ 100________ PSE> 32205______ 96_________ 32222______ 0__________ 100________ PSE> 32185______ 95_________ 32222______ 0__________ 100________ PSE> 31898______ 94_________ 32222______ 0__________ 100________ PSE> 31783______ 93_________ 32222______ 0__________ 100________ PSE> 31548______ 92_________ 32222______ 0__________ 100________ PSE> 30836______ 91_________ 32222______ 0__________ 100________ PSE> 30773______ 90_________ 32222______ 0__________ 100________ PSE> 30548______ 89_________ 32222______ 0__________ 100________ PSE> 30373______ 88_________ 32222______ 0__________ 100________ PSE> 30089______ 87_________ 32222______ 0__________ 100________ PSE> 30080______ 86_________ 32222______ 0__________ 100________ PSE> 29785______ 85_________ 32222______ 0__________ 100________ PSE> 29778______ 84_________ 32222______ 0__________ 100________ PSE> 29685______ 83_________ 32222______ 0__________ 100________ PSE> 28472______ 82_________ 32222______ 0__________ 100________ PSE> 28169______ 81_________ 32222______ 0__________ 100________ PSE> 27854______ 80_________ 32222______ 0__________ 100________ PSE> 27803______ 79_________ 32222______ 0__________ 100________ PSE> 27502______ 78_________ 32222______ 0__________ 100________ PSE> 27306______ 77_________ 32222______ 0__________ 100________ PSE> 27295______ 76_________ 32222______ 0__________ 100________ PSE> 27015______ 75_________ 32222______ 0__________ 100________ PSE> 26933______ 74_________ 32222______ 0__________ 100________ PSE> 26929______ 73_________ 32222______ 0__________ 100________ PSE> 26445______ 72_________ 32222______ 0__________ 100________ PSE> 26419______ 71_________ 32222______ 0__________ 100________ PSE> 25925______ 70_________ 32222______ 0__________ 100________ PSE> 25332______ 69_________ 32222______ 0__________ 100________ PSE> 25072______ 68_________ 32222______ 0__________ 100________ PSE> 25052______ 67_________ 32222______ 0__________ 100________ PSE> 24799______ 66_________ 32222______ 0__________ 100________ PSE> 24376______ 65_________ 32222______ 0__________ 100________ PSE> 23804______ 64_________ 32222______ 0__________ 100________ PSE> 23117______ 63_________ 32222______ 0__________ 100________ PSE> 22531______ 62_________ 32222______ 0__________ 100________ PSE> 22448______ 61_________ 32222______ 0__________ 100________ PSE> 22292______ 60_________ 32222______ 0__________ 100________ PSE> 22268______ 59_________ 32222______ 0__________ 100________ PSE> 22140______ 58_________ 32222______ 0__________ 100________ PSE> 21636______ 57_________ 32222______ 0__________ 100________ PSE> 21489______ 56_________ 32222______ 0__________ 100________ PSE> 21216______ 55_________ 32222______ 0__________ 100________ PSE> 21118______ 54_________ 32222______ 0__________ 100________ PSE> 20170______ 53_________ 32222______ 0__________ 100________ PSE> 19998______ 52_________ 32222______ 0__________ 100________ PSE> 19950______ 51_________ 32222______ 0__________ 100________ PSE> 19882______ 50_________ 32222______ 0__________ 100________ PSE> 19849______ 49_________ 32222______ 0__________ 100________ PSE> 18913______ 48_________ 32222______ 0__________ 100________ PSE> 18845______ 47_________ 32222______ 0__________ 100________ PSE> 18808______ 46_________ 32222______ 0__________ 100________ PSE> 18561______ 45_________ 32222______ 0__________ 100________ PSE> 18194______ 44_________ 32222______ 0__________ 100________ PSE> 17757______ 43_________ 32222______ 0__________ 100________ PSE> 17676______ 42_________ 32222______ 0__________ 100________ PSE> 17387______ 41_________ 32222______ 0__________ 100________ PSE> 17131______ 40_________ 32222______ 0__________ 100________ PSE> 16554______ 39_________ 32222______ 0__________ 100________ PSE> 16461______ 38_________ 32222______ 0__________ 100________ PSE> 16139______ 37_________ 32222______ 0__________ 100________ PSE> 15572______ 36_________ 32222______ 0__________ 100________ PSE> 14871______ 35_________ 32222______ 0__________ 100________ PSE> 14059______ 34_________ 32222______ 0__________ 100________ PSE> 13948______ 33_________ 32222______ 0__________ 100________ PSE> 13368______ 32_________ 32222______ 0__________ 100________ PSE> 13033______ 31_________ 32222______ 0__________ 100________ PSE> 12535______ 30_________ 32222______ 0__________ 100________ PSE> 12476______ 29_________ 32222______ 0__________ 100________ PSE> 11979______ 28_________ 32222______ 0__________ 100________ PSE> 11825______ 27_________ 32222______ 0__________ 100________ PSE> 11544______ 26_________ 32222______ 0__________ 100________ PSE> 11220______ 25_________ 32222______ 0__________ 100________ PSE> 11200______ 24_________ 32222______ 0__________ 100________ PSE> 10550______ 23_________ 32222______ 0__________ 100________ PSE> 10550______ 22_________ 32222______ 0__________ 100________ PSE> 10182______ 21_________ 32222______ 0__________ 100________ PSE> 8510_______ 20_________ 32222______ 0__________ 100________ PSE> 7870_______ 19_________ 32222______ 0__________ 100________ PSE> 7497_______ 18_________ 32222______ 0__________ 100________ PSE> 7435_______ 17_________ 32222______ 0__________ 100________ PSE> 4018_______ 16_________ 32222______ 0__________ 100________ PSE> 3854_______ 15_________ 32222______ 0__________ 100________ PSE> 3778_______ 14_________ 32222______ 0__________ 100________ PSE> 3751_______ 13_________ 32222______ 0__________ 100________ PSE> 3423_______ 12_________ 32222______ 0__________ 100________ PSE> 3256_______ 11_________ 32222______ 0__________ 100________ PSE> 2993_______ 10_________ 32222______ 0__________ 100________ PSE> 2953_______ 9__________ 32222______ 0__________ 100________ PSE> 2585_______ 8__________ 32222______ 0__________ 100________ PSE> 1804_______ 7__________ 32222______ 0__________ 100________ PSE> 1791_______ 6__________ 32222______ 0__________ 100________ PSE> 1718_______ 5__________ 32222______ 0__________ 100________ PSE> 1686_______ 4__________ 32222______ 0__________ 100________ PSE> 858________ 3__________ 32222______ 0__________ 100________ PSE> 754________ 2__________ 32222______ 0__________ 100________ PSE> 603________ 1__________ 32222______ 0__________ 100________ RES>
↑ Pravě skončivší ukázka zpracování 100 čísel je charakteristická výrazně složitějším zápisem na command-line v porovnání s ukázkami předchozími. Zde jsou její markanty.
Na poslední ukázce jsou demonstrovány změny programu sestaveného z připravených textových souborů bez nutnosti jejich modifikací. Zde jsou zásadní změny:
↓ seed = 98765, count = 4, trend = TREND_DESCENDING;
# # alias sedrpn32="sed 's/ //; s/^*$/x/'" # alias rpn32sed="rpn32 -L. | sedrpn32" # # rpn32 -mkli -ri -s7 `cat randomize.rpn bubblesort.rpn | rpn32sed` lbl7 `rpn32 -L. entrypoint.rpn | sedrpn32` ?reg5 = -4 98765 >>>> 98765______ -4_________ 0__________ 0__________ 0__________ PSE> 27651______ 4__________ 0__________ 4__________ 3__________ PSE> 21948______ 3__________ 0__________ 4__________ 3__________ PSE> 15940______ 2__________ 0__________ 4__________ 3__________ PSE> 18114______ 1__________ 0__________ 4__________ 3__________ PSE> 15940______ 4__________ 18114______ 0__________ 4__________ PSE> 18114______ 3__________ 18114______ 0__________ 4__________ PSE> 21948______ 2__________ 18114______ 0__________ 4__________ PSE> 27651______ 1__________ 18114______ 0__________ 4__________ RES> #
↑ Výstupy (stdout) programů cat a rpn32 -L. jsou přes pipe přesměrovány do dvojice dosud neznámých „programů“: rpn32sed a sedrpn32. Ve skutečnosti to žádné programy/utility nejsou. Jde o „přezdívky“ (v anglickém originálu alias, ale krkonošský spisovatel Jan Buchar by jistě použil termínu „přísrabek“ :-) nahrazující složitější zápisy při použití sed.
Úvod avizuje, že ukázky se budou věnovat pouze jednorázovému použití programu rpn32. To bylo splněno a celé povídání by mohlo skončit. Nabízí se však ještě jeden tip & trik.
Ukázky z kapitoly Kombinace zdrojů RPN instrukcí jsou všechny založeny na triku, kdy jednotlivé řádky souboru jsou převedeny na argumenty na command-line. Vstupní stream stdin zde není použit, zůstává „namířen“ na vstupní zařízení, tedy console. Toho lze s výhodou vyžít a RPN program vzniklý kombinací zdrojů instrukcí provozovat i v módu interaktivního provádění.
Zde ukázka:
# # rpn32 gto7 `cat randomize.rpn bubblesort.rpn | rpn32sed` lbl7 `rpn32 -L. entrypoint.rpn | sedrpn32` ?reg5 = -4 98765 = CMD> mem LBL: 00 LBL: 02..05 LBL: 07 LBL: 09..13 REG: 5 RTN: 7 LOC: 28 CMD> lst UU:00 GTO 07 09:00 LBL 09 09:01 IPUSH 4 09:02 Rup 09:03 STO .0 09:04 Rdn 09:05 LASTx 09:06 STO .1 09:07 CLx 09:08 RCL F 09:09 STO .2 09:10 Rdn 09:11 STO .3 09:12 CLx 09:13 RCL @.3 09:14 UNS 09:15 214013 09:16 * 09:17 2531011 09:18 + 09:19 STO @.3 09:20 16 09:21 SRn 09:22 0x7FFF 09:23 AND 09:24 RCL .2 09:25 STO F 09:26 CLx 09:27 RCL .1 09:28 STO L 09:29 CLx 09:30 RCL .0 09:31 Rdn 09:32 RTN 10:00 LBL 10 10:01 IPUSH 7 10:02 STO .2 10:03 x<> L 10:04 STO .6 10:05 x<> L 10:06 DEC Y 10:07 DEC Y 10:08 + 10:09 STO .3 10:10 Rdn 10:11 STO .4 10:12 Rdn 10:13 STO .5 10:14 1 10:15 RCL .3 10:16 RCL .2 10:17 x>=y? 10:18 RTN 10:19 LCN 10:20 STO .0 11:00 LBL 11 11:01 1 11:02 RCL .3 11:03 RCL .0 11:04 COUNT 11:05 - 11:06 RCL+ .2 11:07 RCL .2 11:08 LCN 11:09 STO .1 12:00 LBL 12 12:01 RCL .1 12:02 COUNT 12:03 RCL @X 12:04 INC Y 12:05 RCL @Y 12:06 ENTER 12:07 RCL- Z 12:08 FS? 10 12:09 CHS 12:10 x>0? 12:11 GTO 13 12:12 Rdn 12:13 x<>y 12:14 STO @Z 12:15 DEC Z 12:16 x<>y 12:17 STO @Z 12:18 Rup 13:00 LBL 13 13:01 Rdn 13:02 ISG .1 13:03 GTO 12 13:04 ISG .0 13:05 GTO 11 13:06 RCL .6 13:07 STO L 13:08 CLST 13:09 RCL .5 13:10 RCL .4 13:11 RTN 07:00 LBL 07 07:01 x==0? 07:02 INC X 07:03 STO 0 07:04 x<>y 07:05 CF 10 07:06 x>=0? 07:07 GTO 04 07:08 SF 10 07:09 CHS 04:00 LBL 04 04:01 DEC X 04:02 x>0? 04:03 GTO 05 04:04 CLx 04:05 4 05:00 LBL 05 05:01 INC X 05:02 STO Z 05:03 x<>y 00:00 LBL 00 00:01 CLx 00:02 XEQ 09 00:03 STO @Y 00:04 DSZ Y 00:05 GTO 00 00:06 RCL Z 00:07 IPUSH 1 00:08 STO .0 00:09 XEQ 02 00:10 RCL .0 00:11 DEC X 00:12 SGN 00:13 x<=0? 00:14 RTN 00:15 RCL .0 00:16 1 00:17 XEQ 10 00:18 RCL .0 00:19 POP 00:20 XEQ 02 00:21 RTN 02:00 LBL 02 02:01 x<>y 03:00 LBL 03 03:01 CLx 03:02 RCL @Y 03:03 PSE 03:04 DSZ Y 03:05 GTO 03 03:06 RTN CMD> spy >>>> 98765______ -4_________ 0__________ 0__________ 0__________ UU:00 GTO 07 CMD> run- PSE> 27651______ 4__________ 0__________ 4__________ 3__________ 03:03 PSE PSE> 21948______ 3__________ 0__________ 4__________ 3__________ 03:03 PSE PSE> 15940______ 2__________ 0__________ 4__________ 3__________ 03:03 PSE PSE> 18114______ 1__________ 0__________ 4__________ 3__________ 03:03 PSE PSE> 15940______ 4__________ 18114______ 0__________ 4__________ 03:03 PSE PSE> 18114______ 3__________ 18114______ 0__________ 4__________ 03:03 PSE PSE> 21948______ 2__________ 18114______ 0__________ 4__________ 03:03 PSE PSE> 27651______ 1__________ 18114______ 0__________ 4__________ 03:03 PSE RES> 27651______ 0__________ 18114______ 0__________ 4__________ UU:00 GTO 07 CMD> modu\X\=x\Y\=y\R\2\=2a CMD> 4321 >>>> X=4321_______ Y=27651______ R2=21948______ UU:00 GTO 07 CMD> sto2 >>>> X=4321_______ Y=27651______ R2=4321_______ UU:00 GTO 07 CMD> clst >>>> X=0__________ Y=0__________ R2=4321_______ UU:00 GTO 07 CMD> 2 >>>> X=2__________ Y=0__________ R2=4321_______ UU:00 GTO 07 CMD> gto9 >>>> X=2__________ Y=0__________ R2=4321_______ 09:00 LBL 09 CMD> run TRC> X=2__________ Y=0__________ R2=4321_______ 09:00 LBL 09 TRC> X=2__________ Y=0__________ R2=4321_______ 09:01 IPUSH 4 TRC> X=2__________ Y=0__________ R2=4321_______ 09:02 Rup TRC> X=0__________ Y=2__________ R2=4321_______ 09:03 STO .0 TRC> X=0__________ Y=2__________ R2=4321_______ 09:04 Rdn TRC> X=2__________ Y=0__________ R2=4321_______ 09:05 LASTx TRC> X=4__________ Y=2__________ R2=4321_______ 09:06 STO .1 TRC> X=4__________ Y=2__________ R2=4321_______ 09:07 CLx TRC> X=0__________ Y=2__________ R2=4321_______ 09:08 RCL F TRC> X=1073742848_ Y=2__________ R2=4321_______ 09:09 STO .2 TRC> X=1073742848_ Y=2__________ R2=4321_______ 09:10 Rdn TRC> X=2__________ Y=0__________ R2=4321_______ 09:11 STO .3 TRC> X=2__________ Y=0__________ R2=4321_______ 09:12 CLx TRC> X=0__________ Y=0__________ R2=4321_______ 09:13 RCL @.3 TRC> X=4321_______ Y=0__________ R2=4321_______ 09:14 UNS TRC> X=4321_______ Y=0__________ R2=4321_______ 09:15 214013 TRC> X=214013_____ Y=4321_______ R2=4321_______ 09:16 * TRC> X=924750173__ Y=0__________ R2=4321_______ 09:17 2531011 TRC> X=2531011____ Y=924750173__ R2=4321_______ 09:18 + TRC> X=927281184__ Y=0__________ R2=4321_______ 09:19 STO @.3 TRC> X=927281184__ Y=0__________ R2=927281184__ 09:20 16 TRC> X=16_________ Y=927281184__ R2=927281184__ 09:21 SRn TRC> X=14149______ Y=0__________ R2=927281184__ 09:22 0x7FFF TRC> X=32767______ Y=14149______ R2=927281184__ 09:23 AND TRC> X=14149______ Y=0__________ R2=927281184__ 09:24 RCL .2 TRC> X=1073742848_ Y=14149______ R2=927281184__ 09:25 STO F TRC> X=1073742848_ Y=14149______ R2=927281184__ 09:26 CLx TRC> X=0__________ Y=14149______ R2=927281184__ 09:27 RCL .1 TRC> X=4__________ Y=14149______ R2=927281184__ 09:28 STO L TRC> X=4__________ Y=14149______ R2=927281184__ 09:29 CLx TRC> X=0__________ Y=14149______ R2=927281184__ 09:30 RCL .0 TRC> X=0__________ Y=14149______ R2=927281184__ 09:31 Rdn TRC> X=14149______ Y=0__________ R2=927281184__ 09:32 RTN RES> X=14149______ Y=0__________ R2=927281184__ UU:00 GTO 07 CMD> 2 >>>> X=2__________ Y=14149______ R2=927281184__ UU:00 GTO 07 CMD> xeq9 >>>> X=19327______ Y=14149______ R2=1266650723_ UU:00 GTO 07 CMD> 2 >>>> X=2__________ Y=19327______ R2=1266650723_ UU:00 GTO 07 CMD> xeq9 >>>> X=10915______ Y=19327______ R2=2862825370_ UU:00 GTO 07 CMD> bye #
↑ Závěr výpisu (počínaje nastavením formátovacího řetězce řízení výstupu příkazem mod) ukazuje opakované spuštění části RPN programu sloužící ke generování náhodných čísel. Ale to už není žádný tip & trik, ale bohapustá obsluha programu rpn32.
Soubor | Akce | Popis | |
---|---|---|---|
entrypoint.rpn | ![]() | ![]() | Hlavní program |
randomize.rpn | ![]() | ![]() | Generátor náhodných čísel |
bubblesort.rpn | ![]() | ![]() | Funkce bublinkového řazení |