.PO 11
.OP















                   M I C R O S H E L L



                  UNIX features for CP/M




                      Extract from:

                 User's Manual Version 2.0
               
                    December 9. 1982







                    Copyright (c) 1982
               New Generation Systems Inc.
                2153  Golf Course Drive
                    Reston, Va. 22091
                    (703) 476-9143
                  All rights reserved
  
     Překlad: (c) Z.Wágner a J.Kolafa ČSAV Praha 12/1985
     Překlad doplnil (c) M.Loffler Vojenské stavby
                    Praha 3/1986

     Pořizování kopií povoleno pouze se souhlasem autorů

     Uvolněno pro uživatele operačních systémů HUVOLE





 
               O  B  S  A  H


     Přehled.........................................3
          Požadavky systému..........................3
          Odstartování MicroShellu...................3
          Vícenásobné příkazy na řádku...............3

     Příkazy MicroShellu.............................4
          Souhrn.....................................4
          Delays.....................................7
          Funkce odpovídající CP/M...................7
          Editace příkazových řádků..................9
          Předávání dat..............................9

     Rozšířené funkce...............................10
          Shell proměnné............................10
          Programování souborů "shell"..............12
          Řídící příkazy............................12
          Příkazy vstupu............................13
          Příkazy výstupu...........................14
          Ostatní příkazy...........................14

     Customization locations........................16
     
     Programming interface..........................19

     Index..........................................20


























 .PN 
                   P ř e h l e d

     MicroShell je program pro operační systém CP/M, který k 
tomuto  operačnímu systému přidává mocné schopnosti  podobné 
mnoha funcím, jež jsou přístupné v operačním systému UNIX.
     Kompatibilita  s existujícím softwarem CP/M je zachová-
na. Nové softwarové aplikace a nástroje lze snadno  vytvářet 
a implementovat při použití funkcí, přístupných v MicroShel-
lu. MicroShell může být upraven podle uživatelského  systému 
a  úrovně zkušeností, takže poskytne pomocné  informace  pro 
začátečníky a je elegantní pomůckou zkušeným programátorům.

     Požadavky systému

     MicroShell  vyžaduje CP/M 2.2, minimálně  32K  operační 
paměti a jeden disketový drive.

     MicroShell vyžaduje při natahování 8K systémové paměti, 
která  zůstává rezidentní přímo pod CP/M,  kde  nahradí  CCP 
systému CP/M. 64K počítač s CP/M tedy pracuje jako 56K  sys-
tém vzhledem k programu, prováděnému pod MicroShellem.  Pro-
tože  většina komerčních programů byla vytvořena pro použití 
s  operačním systémem MP/M, kde je pouze 48K  přístupno  pro 
uživatelské programy, tyto nároky na paměť neomezí  účinnost 
programu.

     Minimální prostor na disku, požadovaný  MicroShellem  a 
překryvovým segmentem je 20K, ačkoliv po natažení ani Micro-
Shell  ani překryvový segment nejsou pro většinu funkcí  po-
třebné.

     Odstartování MicroShellu

     Program MicroShellu se jmenuje "sh.com" a odstartuje se 
příkazem:
     sh
nebo
     sh [počáteční příkazový řádek]
je-li na obrazovce CP/M prompt ("A>").

     Změna vybraného disku:
     A>SH B:
změní se vybraný disk na B a pak se ohlásí prompt Microshel-
lu.

     Ukončení MicroShellu:
     příkazem -X

     
     Vícenásobné příkazy na řádku

     MicroShell  přijme více příkazů na jednom řádku,  které 
jsou navzájem odděleny středníkem ";". Přitom  jsou  kladena 
následující omezení:

 1.   Maximální délku příkazového řádku 84 znaků  nelze  pře-
kročit.  To platí pro celý příkaz (tj. všechny znaky  až  po 
CR), tedy ne pro jednotlivé, středníkem oddělené dílčí  pří-
kazy.
2.   Pouze 17 argumentů je povoleno pro každý středníkem od-
dělený příkaz. To znamená: hlavní příkaz a  17  argumentů  k 
hlavnímu příkazu.
3.   Všechny příkazy na řádku za ukončovacím příznakem  Mic-
roShellu  "-X"  jsou ignorovány,  protože  MicroShell  vrací 
řízení CP/M, jakmile je příznak "-X" proveden.
4.   Žádné přesměrování, specifikované v jednom  příkazu  se 
nepřenáší do následujícího středníkem odděleného příkazu.
     např.: STAT *.*>STATOUT; DIR       způsobí pouze výstup 
programu STAT do souboru STATOUT, zatímco zobrazení adresáře 
(dir) se objeví pouze na obrazovce.
5.   Přerušení příkazu  MicroShellu:  zastavit  výstup  přes 
CTRL-S a dále uvést řídící znak CTRL-C. Takto se ukončí pro-
vádění celého příkazového řádku. Jakýkoliv mechanismus ukon-
čení, zabudovaný do programu (například CTRL-C v překladači) 
ukončí program, ale MicroShell pokračuje v provádění dalšího 
logického příkazu na řádce.


          SOUHRN PŘÍKAZŮ MICROSHELLU

Znak          Význam                    Příklad

>    přesměrování výstupu do disk.
     souboru                          stat >filename

>+   dtto co >, ale současně výstup
     na consolu

>*   přesměrování výstupu do disk.
     souboru                          lst:=file >* prntfile

>>   připojovací výst. do souboru     dir >filename
                                        stat >>filename

<    přesměrování vstupu              ed file <script

|    předávání výstupu do vstupu
     prog. násl. příkaz               prog1 | prog2 | ...
                                    stat *.* | pip lst:=con:

^    "^" v shellu a vstup.souborech
     - následující znak bude nahra-
     zen CTRL ekvivalentem            ^C (or ^c) changed to
                                      03

:    v první pozici na řádce v soub.
;    shell file způsobí, že řádka je
     chápána pouze jako komentár (je  : toto je komentár
     ignorována)                      ; toto jakbysmet

 +    echo přesměrování výstupu na 
     consolu                          stat >+filename
                                      prog1 |+ prog2 | ...

-    vrací "znak připravenosti" pro   sysgen <-script
     vstupní status volání consoly    prog1 |-prog2 | ...
     - přeadresování stavu consoly    prog1 |+- prog2 | ...

;    oddělovač příkazů                era *.bak;stat;ed test

"    argument, uzavřený mezi "" smí   echo "This is one arg"
     obsahovat mezery. Mezi "" jsou
     ignorovány speciální znaky

$    substituce argumentu v shell     copyfile test obsahuje
     (příkazových) soub. (0-18)       -li "copyfile.sub":
                                      pip b:=a:$1
                                     pak MicroShell provede:  
                                      pip b:=a:test

!    editace příkazové řádky jako
     ve WordStaru

$T   přesměrování vstupu zpět na
$t   consolu v souboru shell          ddt <$T

$P   přesměrování výstupu na tiskár-
     nu                               dir >$P

+F   pomocné hledání souboru nasta-
+f   veno                             B(0) +F

-F   pomocné hledání souboru zruše-
-f   no                               B(0) -F

+G   nadbytečné odřádkování se po-
+g   tlačí během přesměrování vstu-
     pu (?)                           B(0) +G

-G   nadbytečné odřádkování se ne-
-g   potlačí během přesměrování
     vstupu (?)                       B(0) -G

-L   logické připojení disku (po
-l   výměně)                          B(0) -L
+L                                    B(0) (nový disk připo-                 
+l                                   jen pro zápis pod CP/M)

-M   příznak módu UNIX:              [pro programy "filter"]
-m   při použití na konci vstup.
     soub., CTRL-Z a CR budou za-
     psány do programu

+M   příznak módu CP/M: 
+m   na konci vstup. soub. vstup
      bude vrácen na klávesnici       [jako CP/M SUBMIT se
                                      XSUB]

-P   prompt                          -p "%n%D(%u) " dává:
-p   "C"-formát:                     (CR,LF)B(0)
+P   %   - následuje spec.znak
+p         (%% dává %)
     n/N - nový řádek (CR,LF)        -p "%nDrive:%D User:% U
     d   - lower case drive             %" dává:
     D   - upper case drive          (CR,LF)Drive:A User:0%    
     u/U - číslo uživatele

-S   zobrazí status Shellu            B(0) -S
-s
+S
+s

-t   příznak viditelnosti zrušen     pro průchod object code
-T   (??) speciální znaky (\,^,CR,    programy "filter"
     CTRL-Z,%exchar, %tchar func.)    

+T   příznak viditelnosti nastaven   [příznak viditelnosti 
+t   speciální význam znaku je ig-    musí být opět zrušen v
     norován a potlačení nadbyteč-    téže řádce souboru
     ného odřádkování není aktivní    shell]
     (??)

+U   převod příkazové řádky na vel-   B(0) +U
+u   ká písmena (jako CP/M)          B(0) echo to jsou velká
                                      písmena
                                     TO JSOU VELKÁ PÍSMENA

-U   nepřevádí příkazovou řádku na    B(0) -U
-u   velká písmena (dovoluje užití   B(0) echo malá písmena
     příkazů psaných malými pís.)     malá písmena

+V   "užvaněný" mód                  B(0)+V (všechny příkazy   
+v   echování příkazů před vykoná-    echovány)
     ním                             comfile test data
                                     pip b:=a:test
                                     pip b:=a:data   

-v   zrušení "užvaněného" módu       B(0) -V 
-V                                    (neechuje se)

-X   ukončení MicroShellu a návrat   B(0) -X
-x   do CP/M                         B>








      D Příznak: Prodlevy
     

     Příznak  prodlevy  poskytuje možnost pro  specifikování 
časových  prodlev vestavěných do MicroShellu. Jsou  4  druhy 
prodlev s následujícím významem:

syntax         Prodleva pro             délka
------------------------------------------------------------
-D 1 NNN       vstup znaku              (0 - 255)* .1 sec
-D 2 NNN       vstup řádky              dtto
-D 3 NNN       výstup promptu           dtto
-D 4 NNNN      ignorování vstupu        0 - 65535  "faktor"


     Vstupní prodlevy platí pro vstup řádek a znaků ze vstu-
pu  i ze souborů Shell. Jejich účelem je  umožnit  zpomalení 
demonstračního běhu vložením časové prodlevy na  místě,  kde 
se program ptá na vstup.

     Výstupní  prodleva se vykoná těsně před tím, než  Shell 
zobrazí prompt.

     Použití prodlevy pro ignorování vstupu je poněkud  kom-
plikované.  Je-li vstup přesměrován na program,  který  mezi 
vstupem znaků provádí mnoho věcí, je  možné,  že  MicroShell 
posílá programu znaky tak rychle, že program nemá šanci  dě-
lat cokoliv jiného a veškerý čas stráví přijímáním znaků.  V 
některých  případech je vstupní buffer stále plný, což  může 
způsobit  zhroucení programu.  Příkladem  takových  programů 
jsou Supercalc a Mince. Tento problém lze vyřešit nastavením 
"faktoru ignorování vstupu" v MicroShellu. Tím je  zaručeno, 
že program obdrží vstupní znak jen při každém X-tém požadav-
ku vstupu, kde X je faktor ignorování vstupu. Je-li nastaven 
na např. 500 (což je vhodná hodnota pro začátek experimento-
vání),  pak pouze při každé 500-té žádosti (je-li znak  při-
praven)  vrátí MicroShell status  "znak  připraven".  Účinek 
spočívá  v tom, že umožňuje souborům Shell  s  přesměrováním 
vstupu přesně zpracovat tyto typy programů. Navíc  poskytuje 
způsob  (s přihlédnutím k ostatním příznakům  prodlev),  jak 
nastavit efektivní rychlost vstupu programu.

     Ujistěte se, že tento příznak je nastaven zpět na nulu, 
pokud jej již nepořebujete! Jinak všechny vaše soubory Shell 
a vstupní soubory budou pracovat mnohem pomaleji.



     Funkce odpovídající CP/M

     Protože  MicroShell  překrývá  CCP  CP/M,  provádí  též 
všechny  funkce, které jsou normálně prováděny  pomocí  CCP. 
Následující příkazy budou MicroShellem provedeny stejně, jak 
by je vykonal CCP CP/M, až na uvedené výjimky:

 Příkaz CCP: DIR [afn]   akce: výpis directory
     odchylky v MicroShellu: "-s" volba pro SYS soubory

Příkaz CCP: ERA [afn]   akce: rušení souboru
     odchylky v MicroShellu: není "*.*" varování

Příkaz CCP: REN newname=oldname
                   akce: přejmenování souboru
     odchylky v MicroShellu: není "_" jako alternativní od-
          dělovač
                   
Příkaz CCP: TYPE filename
                        akce: výpis souboru
     odchylky v MicroShellu: "TYP" změna stránkování

Příkaz CCP: SAVE nn filename
                        akce: zápis "nn"  256-byte  stránek 
                              paměti počínaje adresou 100H

Příkaz CCP: drivename:  akce: změna standardního drive

Příkaz CCP: user NN     akce: změna uživatelské oblasti na
                              #NN
     odchylky v MicroShellu: umožňuje  přístup k oblastem 0  
          až 31. CP/M umožňuje  přístup  pouze do oblasti 0
          až 15 a oblasti 16 až 31 jsou dostupné jen z uži-
          vatelského programu

kde "afn" je "jednoznačné jméno souboru" (tj. i wildcard *
a ?).

     Wildcard znaky "?" a "*" mohou být použity v libovolném 
příkazu,  odpovídajícím CP/M. Ve standardním  CP/M  povolují 
pouze "era" a "dir" tyto znaky, zatímco v MicroShellu  mohou 
být požity všude, kde se zadává  jméno  souboru.  MicroShell 
potom  použije první jméno souboru nalezené na disku a odpo-
vídající specifikaci. Jestliže například napíšete:
     B(0) type ab*
pak MicroShell vypíše první nalezený soubor, jehož jméno za-
číná "ab", tj. "abzzt" nebo "abstract", atd. Všimněte si, že 
se takto nedá rozšířit činnost na více souborů. Ačkoliv  lze 
takto  ušetřit ťukání do klávesnice, je nutné  dbát  zvýšené 
opatrnosti. Jestliže např. napíšete:
     B(0) *
MicroShell provede první soubor ".com", který najde v direc-
tory, nebo jesliže dokonce zadáte:
     B(0) save 2 *.*
MicroShell  nejprve vymaže všechny soubory z directory a po-
tom  zapíše 2 256-bytové stránky do  souboru,  pojmenovaného 
"????????.???"! Toto je naprosto neobvyklá hypotetická situ-
ace, která v praxi nezpůsobí žádné problémy, avšak  uživatel 
by si toho měl být vědom.

     Poslední CP/M funkcí, kterou MicroShell též  poskytuje, 
je CTRL-P, jíž se zapíná a vypíná tisk (echování).
    Editace příkazových řádků

     Editace  příkazových řádků se vyvolá stisknutím "!" buď 
během  vstupu  příkazu, nebo hned  za  příkazovým  promptem. 
Jestliže je "!" prvním znakem na řádku, bude k editaci přip-
raven předcházející příkaz. Pokud "!" není  prvním  příkazem 
na  řádku, bude připraven k editaci právě psaný příkaz  (tj. 
píšete příkaz a vidíte chybu, kterou chcete opravit).

     Používají se standardní příkazy editoru a pohyby kurso-
rem převzaté z WordStaru, navíc MicroShell obsahuje  některé 
další příkazy:

Příkaz                     Funkce                            
------------------------------------------------------------
^D        : kursor o znak doprava
^S        : kursor o znak doleva (bez zrušení znaku)
^F        : kursor o slovo doprava
^A        : kursor o slovo doleva
^QD       : kursor na konec řádku
^QS       : kursor na začátek řádku
^V        : změna příznaku vkládání  (INSERT ON/OFF).  Stan-
            dardně nastaveno.
^G        : zrušení znaku pod kursorem
<DEL>     : zrušení znaku vlevo od kursoru
^Y        : zrušení celého řádku
^QY       : zrušení řádku od kursoru doprava
^Q<DEL>   : zrušení řádku od kursoru doleva
^QT       : zrušení slova vlevo od kursoru
^T        : zrušení slova vpravo od kursoru
^U        : obnovení původního řádku
<ESC>     : zrušení režimu editace (také ^C)
<RETURN>  : provedení editovaného řádku

     Druhý  znak  editačního příkazu může být malé  i  velké 
písmeno, popř. odpovídající znak "control".

     Definice  slova v editoru příkazových řádků se  poněkud 
liší od pravidel přijatých ve WordStaru, takže se kursor za-
stavuje  na často používaných oddělovačích. Jako  oddělovače 
slov v MicroShell slouží mezera a následující znaky: . , > < 
| ; :

     Tabelátory a jiné řídící znaky nejsou editorem příkazo-
vých řádků zpracovávány; MicroShellu tyto znaky nevadí, tak-
že je můžete ve svých příkazech libovolně používat, ale  při 
editaci těchto řádků budete mít problémy.


     Pipes (Předávání dat)

     "Pipe"  (dosl. "trubice") je funkce operačního  systému 
UNIX,  která je dostupná také  pod  MicroShellem.  Poskytuje 
možnost  zapojit  výstup jednoho programu na  vstup  druhého 
programu. Jestliže uživatel napíše:
      prog1 | prog2 | prog3 | ...

pak  výstup z "prog1" je poslán na vstup "prog2" a výstup  z 
"prog2" je poslán na vstup "prog3". Kolmá čára ("|") je pří-
kaz MicroShellu, který vytvoří kanál pro tok dat mezi danými 
programy. Zároveň lze použít vstupní a výstupní  modifikáto-
ry, "+" a "-", k dosažení současného echování consoly a/nebo 
přesměrování statutu consoly.

     MicroShell  "pipe" funkce je implementována pomocí  do-
časných soborů, které MicroShell vymaže, jakmile  je  přenos 
dat ukončen. Lépe tomu porozumíme,  když  si  uvědomíme,  že 
vnitřně MicroShell realizuje "pipe" přenos dat takto:

prog1 >pype1;prog2 <pype1 >pype2; prog3 <pype2

     Jména  dočasných souborů "pype#" byla zvolena tak,  aby 
nedošlo  ke  konfliktu se  jmény,  které  používá  uživatel. 
MicroShell smaže dočasné soubory poté, co je přenos dat  ús-
pěšně  dokončen (po kroku s přesměrováním  vstupu).  Dočasné 
soubory pro přenos dat se vždy ukládají na standardně přiřa-
zenou disketu.

     Během "pipe" přenosu dat MicroShell automaticky:

"užvaněný mód"           : zruší
příznak módu             : změní na UNIX
příznak zviditelnění     : nastaví

     "Pipe"  přenos dat automaticky pracuje pro filtry,  což 
je jeho nejobvyklejší využití.


               ROZŠÍŘENÉ SHELL FUNKCE

     MicroShell rozpoznává mnoho speciálních příkazů,  začí-
najících znakem "procento" (%). Ačkoliv jsou tyto  rozšířené 
funkce nejužitečnější v souborech Shell, mohou být  vykonány 
i jako přímé příkazy. Aby byl takový příznak správně rozpoz-
nán,  musí být prvním příkazem na řádce (s výjimkou  mezer). 
Jinými slovy, řádka může pro lepší čitelnost začínat mezera-
mi nebo tabelátory.

     Shell proměnné

     Je možno používat 33 následujících Shell proměnných:

jméno      typ             poznámka
  proměnné
------------------------------------------------------------

%A-%G     numerická      nabývají hodnot v intervalu 0 až
                         65535. %A a %B jsou lokální v  kaž-
                         dém  souboru Shell. Proměnné %C  až 
                         %G jsou globální, tj.  jakmile  jim 
                          je přiřazena hodnota,  zachová  se, 
                         dokud není Shell znovu natažen.

%A$-%G$   řetězec        Řetězec proměnné délky. Potřeba pa-
                         měti  pro  všechny  řetězce   nesmí 
                         přesáhnou 128 byte. Řetězěc délky N 
                         potřebuje  (N+1) byte. Všechny  ře-
                         tězcové  proměnné jsou  globální  a 
                         zachovávají   se  až  do   "%clear" 
                         příkazu, popř. do  nového  natažení 
                         MicroShellu.

%0-%18    řetězec        19  parametrů.  Jejich  hodnoty  se 
                         specifikují v rámci jedné programo-
                         vé řádky, přenesou se do programu a 
                         zachovávají se pouze dokud  program 
                         běží. Nepoužité parametry se nahra-
                         dí prázdným řetězcem. Těmto proměn-
                         ným  je  přiřazeno  max.  84   byte 
                         (délka příkazové řádky).

Pozn.:  parametry  se označují %0 až %18 v  souborech  Shell 
když se jim přiřazuje hodnota, nebo používají-li se ve výra-
zech. Při konstrukci příkazové řádky se však označují $0  až 
$18. To je nezbytné, neboť jinak by se  MicroShell  okamžitě 
pokoušel  dosadit argument během čtení souboru  Shell.  Jako 
příklad uvažujme následující soubor shell:

     %print -n "Zadej jmeno souboru k oprave:"
     %getstr %1 <$T
     %if %1 = "" then exit
     ws #$1 <$T

     Přiřazení hodnot proměnným

     Shell proměnným se hodnoty přiřazují následujícími pří-
kazy:

<var> = <constant>
<var> = <var>       (typ proměnných musí souhlasit!)
<var> = <var><op><var | constant> [<op><var | constant>....]
                    (<op> smí být "+" nebo "-" pro numerické 
                    konstanty, ale jen "+" pro řetězce)

Příklady:
     %A$ = %B$            dosazení řetězce %B$ do %A$
     %G$ = test string    dosadí "test string" do %G$. Chce-
                          te-li použít úvodní či koncové me-
                          zery, musíte  řetězec  uzavřít  do
                          ".." .
     %A = %A + 1          inkrementuje proměnnou %A
     %A = %A - 1          dekrementuje proměnnou %A
     %D = %A + %B + %C    součet %A, %B a %C přiřadí %D
     %C$ = %A$ + %B$      spojí řetězce %A$ a %B$ a  přiřadí 
                          do proměnné %C$
      %1   =  %A$          přiřadí  hodnotu řetězce %A$ para-
                          metru %1



     Programování souborů shell

     Některé  rozšířené shell příkazy slouží ke  speciálnímu 
řízení  v shell souborech. Všechna tato klíčová  slova  musí 
začínat  "%" a tento znak musí být (s výjimkou mezer a tabe-
látorů) první na řádce.

     %exit
Nepodmíněný návrat do příkazové úrovně

     %goto <label>
Nepodmíněný skok na řádku s návěštím <label>

     %if <expression> then <action>
Podmíněný skok podle hodnoty výrazu

     %iffile <filename> <"present" | "absent"> then <action>
Podmíněný skok podle toho zda ne-/existuje soubor se  jménem 
"filename".  Je-li specifikován drive před  jménem  souboru, 
hledá  se soubor jen na této disketě, v opačném  případě  se 
hledá automaticky; typ souboru však musí být obsažen v  sez-
namu dovolených typů.

     %return [<assignment>]
Nepodmíněný  návrat  do předchozího souboru  shell  (bylo-li 
voláno v několika úrovních), nebo do příkazové úrovně. Záro-
veň je možno přiřadit proměnné hodnotu, např.:
     %return %C = 1
(pozn.: protože proměnné %A a %B jsou lokální v každém  sou-
boru shell, nemá smysl jim přiřazovat návratovou hodnotu)

kde:
     <label> :=     řetězec, začínající "%", který není klí-
                    čovým slovem. Návěští (=label) musí  být 
(s  výjimkou  úvodních mezer) první na fyzické (ne  logické) 
řádce. Návěští, na které se odkazují příkazy GOTO nebo  THEN 
nemusí začínat "%".

Př.:      %endless.loop
          [příkazy]
          %goto endless.loop

     <expression> := <var><op><var> |
                     <var><op><constant>

     <op> :=        =    (rovno)        |
                    #    (není rovno)   |
                    NE   (není rovno)   |
                    LT   (menší než)    |
                    LE   (menší než, nebo rovno)  |
                     GT   (větší než)    |
                    GE   (větší než, nebo rovno)

Př.:      %if %A$ = stop then goto doexit
          %if %A LT %D then return %C = %A

     <action> :=    goto <label>        |
                    return [<assignment>]    |
                    exit

Př.:      %loop
          [optional statements]
          %A = %A + 1
          %if %A = 6 then exit
          %goto loop


     
     Příkazy vstupu

     %getchr <var>
Načtení jednoho znaku do proměnné. Nezapomeňte použít "<$T", 
jestliže  vyžadujete vstup z conzoly místo ze souboru shell. 
Skoro vždy budete požadovat vstup z consoly.

Př.:      %print -n "Enter selection: "
          %getchr %A$ <$T

     %getstr <var>
Vstup řetězce do proměnné. Ukončen znakem "CR". Opět použij-
te "<$T" pro vstup z consoly.

Př.:      %print -n "Enter file name: "
          %getstr %F$ <$T

     %memnum <var>
Načtení numerické hodnoty z paměti z adresy 80H do dané pro-
měnné. Tak je umožněno předání čísla dalšímu programu.  Vši-
mněte si, že toto číslo musí být přečteno dříve, než se pro-
vede následující program, protože jeho instrukce jsou  uklá-
dány od adresy 80H. Číslo musí být dva byte dlouhé,  uložené 
podle standardních požadavků procesoru Z80 (=formát INTEL).

Př.:      cntfile
          %memnum %A
          %print %A

     %memstr <var>
Přečtení řetězce, ukončeného znakem "00H" a uložení do ozna-
čené proměnné. Tím je umožněno předání řetězce dalšímu  pro-
gramu. Platí stejné omezení, jako pro funkci %memnum.

Př.:      calc 12.77  22.88
          %memstr %A$
          %print %A$
           %1 = %A$
          newprog $1

     
     Příkazy výstupu


     %print [-n] [<var> | <constant>]
Výstup hodnoty proměnné nebo konstanty do výstupního proudu. 
Následována  znaky "CR" a "LF" (CR a LF mohou být  potlačeny 
volbou "-n"). Nevýznamné nuly jsou v numerických  proměnných 
nahrazeny mezerami.

Př.:      %print %A$
          %print -n Retezce nemusi byt v uvozovkach
          %print -n " pokud nevyzadujete mezery "
          %print na zacatku nebo na konci retezce
          %print -n Toto je;%print " jeden radek."


     Ostatní příkazy


     %#args <var>
Vrací  počet argumentů dodaných souboru shell. Byl-li  např. 
soubor shell "copy.sub" odstartován příkazem:
          B(0) copy file1 file2
pak po provedení:
          %#args %A
bude proměnné %A přiřazena hodnota 2.

     %bchar <var>
Nastavuje znak, kterým se přeruší běh souboru  shell,  je-li 
toto přerušení povoleno (default = ESCAPE (^])).

     %break on | off
Povoluje  ("on" = default) nebo zakazuje  přerušení  souboru 
shell znakem přiřazeným funkci %bchar.

     %clear
Maže řetězcové proměnné. Zachová hodnoty numerických proměn-
ných a dosazené argumenty.

     %clrstr <string>
Definuje hodnotu řetězce (max. 3 znaky), který maže obrazov-
ku při provedení příkazu %erase (default = ^Z).

     %erase
Vyšle %clrstr na výstup za účelem vymazání obrazovky.

     %exchar <char>    nebo  %exchar none
Nastaví hodnotu znaku "exit", který, je-li nalezen v  proudu 
vstupních  dat, způsobí ukončení běhu souboru shell.  To  je 
vhodné použít u programů, které nemají žádný ukončovací pří-
kaz, nebo které by musely projít přes dlouhou  řadu  "menu". 
 Znak "NULL" (00H) není povolen.

     %ftype <string>
Nastaví typ souboru (max. 8), pro které  MicroShell  provádí 
automatické hledání, např.:
          %ftype subcomov?int

????  Note: If less than 3-letter types are  used,  a  space 
must  be entered for the balance and the entire string  quo-
ted.  "?" may be used for wildcarding letters  in  the  type 
(Default = SUBOV?COM).
(doslova: použije-li se méně než 3-písmenný typ  (kvalifiká-
tor?)  souboru, musí se doplnit mezerami a celý  řetězec  se 
musí uzavřít do "". Pro jako wildcardový znak může být  pou-
žit v typu (kvalifikátoru?) znak "?".) 

     %locase <string_var>
Změní v řetězcové proměnné všechna písmena na malá.

Př.:      %print -n "Quit? (Y/N) "
          %getchr %A$ <$T
          %locase %A$
          %if %A$ = y then exit

     %path <string>
Nastaví "cestu" prohledávání drivů (max. 6 drivů), např.:
          %path abc
prohledává nejprve drive A, potom B a nakonec C. (Default  = 
A).

     %schar <char>     nebo   %schar none
Nastaví  znak, který způsobí, že se vstup  z  consoly  vrátí 
zpět do souboru shell. Tak je možné, aby uživatel zadal text 
z  konzoly a potom program opět četl ze souboru shell.  Znak 
"NULL" (00H) není povolen. (Default = none).

     %sdrive <drive_letter>
Definuje disk, na který MicroShell zapisuje dočasné soubory, 
je-li soubor shell vnořen. Dočasný soubor vyžaduje 2 sektory 
(256 byte) pro každou úroveň vnoření. Je třeba zajistit, aby 
tento disk nebyl nikdy "read-only" (disk swap, write-protec-
ted disk apod.).

     %shext <string>
Definuje kvalifikátor souboru shell. (Default = SUB).

     %shift
Posunuje všechny argumenty (%0-%18) doleva, tj. %1 -> %0, %2 
-> %1, atd. To je užitečné pro sekvenční zpracování argumen-
tů předaných souboru shell.

Př.:      (ERASE.SUB)
          
          -v;%#args %A
          %print -n erase;%print -n %A;%print " files "
           %loop
               %print Erasing $1
               era $1
               %shift
               %A = %A - 1
               %if %A GT 0 then goto loop

     %status on | off
Nastaví/zruší  status  "znak připraven" (standardně  "off"). 
Nastavení statutu je ekvivalentní příkazu
          B(0) program <-infile
zadanému  v příkazovém řádku. Je-li tento  status  nastaven, 
může být někdy nutné nastavit "ignorování vstupu", aby nedo-
šlo k zahlcení programu vlivem čtení.

     %tchar <char>    nebo    %tchar none
Definuje znak, který, je-li objeven ve vstupním proudu  sou-
boru shell, způsobí návrat vstupu na consolu.  Tato  možnost 
dovoluje zadávat text z consoly a dále vrátit čtení na  sou-
bor  shell  pomocí %schar. Znak "NULL" (00H)  není  dovolen. 
(Default = none).

     %upcase <string_var>
Změní písmena ve specifikované řetězcové proměnné  (<string_ 
var>) na velká písmena.
Př.:      %print -n "Quit ? (Y/N) "
          %getchr %A$ <$T
          %upcase %A$
          %if %A$ = Y then exit


          CUSTOMIZATION LOCATIONS

     Některé  funkce  MicroShellu lze obměňovat pomocí  CP/M 
ladícího systému DDT nebo jeho ekvivalentu. Dále budou  uve-
deny proměnné v SH.COM, které lze ovlivňovat (nakonec užijte 
"SAVE 38 SH.COM").

proměnná       default        adresa         komentář
------------------------------------------------------------ 

F flag         on             24C7H          0 = on
                                             1 = off

G flag         on             24C8H          0 = on
                                             1 = off

M flag         CP/M           24CAH          0 = CP/M
                                             1 = UNIX

T flag         off            24CCH          0 = on
                                             1 = off

U flag         on             24C9H          0 = on
                                             1 = off
 
V flag         on             24CBH          0 = on
                                             1 = flag

P flag         %n%D(%u)       24CDH          39 znaků,  nás-
(prompt řetězec)                             ledovaných 00H

D 1            0              251CH          0-255 (0FFH)
(vstup zn. prodleva)

D 2            0              251DH          0-255 (0FFH)
(vstup r. prodl.)

D 3            0              251EH          0-255 (0FFH)
(výst. prompt prodl.)

D 4            0              2521H         0-65535 (0FFFFH)
(faktor ignorování vstupu)

%path          A              24F5H          max. 6 znaků
                                             (ukončeno 00H; 
                                             velká písmena)

%ftype         SUBOV?COM      24FCH          max. 24 znaků
                                             (ukončeno 00H; 
                                             velká písmena)

%shext         SUB            2516H          3 znaky
                                             (ukončeno 00H; 
                                             velká písmena)
                                                       
%sdrive        A              251AH          1 = A,
                                             2 = B, ...

%clrstr        ^Z             252AH          max. 3 znaky
                                             ukončené 00H

%break         on             2525H          1 = on
                                             0 = off

%bchar         ESC            2526H          znak působící
                                             přerušení

%exchar        none           2527H          dle libosti,
                                             0 = nic

%tchar         none           2528H           dle libosti,
                                             0 = nic

%schar         none           2529H           dle libosti,
                                             0 = nic

";"            ";"            0FEAH          nutno změnit
(oddělovač příkazů)                          obě adresy. Po-
                              zor, aby nový oddělovač  nebyl
                               spec. znakem MicroShellu  (lze
                              užít např. "/")

"PYPE"         "PYPE"         11B5H          4 znaky, násl.
(pipe file_name)                             00H (velká pís-
                                             mena)

$P             $P             11BAH          5 znaků, násl.
(printer string)                             00H (velká pís-
                                             mena)

$T             $T             11C0H          5 znaků, násl.
(printer string)                             00H (velká pís-
                                             mena)

               4              251BH          dle libosti
(sloupců v "DIR")

               23 (17H)       2523H          podle vaší  ob-
(řádek/stránku pro TYP)                      obrazovky (-1)

               ! (21H)        252EH          znak pro  vyvo-
(znak pro editaci)                           lání editačního
                                             módu

               0              25CBH          0 = transparent
(auto pipe flag set)                              on
                                             1 = no auto set


     Proměnné  v  "SH.OVR" pro použití funkcí WordStaru  při 
editaci řádek MicroShellu. Požijte "SAVE 38 SH.OVR" po  pro-
vedení všech změn.
     "Oddělovač slov" pro funkce "předchozí slovo",  "násle-
dující slovo" atd.:

     2028H     cpi 20H
               rz
               cpi 2EH
               rz
               cpi ...   ; atd.

               ret       ; sem dejte NOP
               cpi 20H   ; sem přidejte svůj oddělovač slov
               rz
               cpi 20H   ; sem další atd.
               rz

     Režim vkládání znaků:

     2358H     db 0FFH   ; 0FFH = on, 00 = off

     Tabulka editovacích příkazů:

     2366H     db 1.znak, 2.znak   ; 2.znak = 0 pro 1-znako-
                                      vý příkaz 
               dw adresa_podprogramu

               db atd. ...
               dw ...

     23CEH     db 0      ; konec tabulky
                         

     Struktura MicroShellu pro programování interface:

     0005H     jmp  base ; MicroShell  Intercept  (přičti 
                         ; 1006H, když si prohlédneš 6H po- 
                           mocí DDT)

     base      jmp hook  ; skok do MicroShell podprogramu,
     (XX06H)             ; který určuje, co z BDOSu se bude
                         ; volat a správně to oadresuje (?)

     base+3    jmp BDOS  ; zde je skok do skutečného BDOSu
                           call it for "getting past" Micro-
                           Shell

     BDOS-12AH:          ; tabulka původních skoků BDOSu
                         ; předtím, než MicroShell překryje
                         ; BDOS

               jmp coldboot   ; tabulka skoků
               jmp warmboot
               jmp const
               jmp conin
               jmp conout
               jmp list
               jmp punch
               jmp reader
               jmp home
               jmp seldsk


















                I N D E X

     "-s".................................... 6,8

     $P...................................... 5,18
     $T...................................... 5,18

     %#args.................................. 14
     %bchar.................................. 14,17
     %break.................................. 14,17
     %clear.................................. 14
     %clrstr................................. 14,17
     %erase.................................. 14
     %exchar................................. 14,17
     %exit................................... 12
     %ftype.................................. 15,17
     %getchr................................. 13
     %getstr................................. 13           
     %goto................................... 12
     %if..................................... 12
     %iffile................................. 12
     %locase................................. 15
     %memnum................................. 13
     %memstr................................. 13
     %path................................... 15,17
     %print.................................. 14 
     %return................................. 12
     %schar.................................. 15,17
     %sdrive................................. 15,17
     %shext.................................. 15,17
     %shift.................................. 15
     %status................................. 16
     %tchar.................................. 16,17
     %upcase................................. 16

     Appending output........................ 4
     Argument substitution................... 5,11,14,15 
     Auto file search........................ 5,12,15

     Command Line Editing.................... 4,9-
     Control Statement....................... 12
     CP/M-like functions..................... 7
     Customization locations................. 16

     Delays.................................. 7
     DIR..................................... 8,18

     ERA..................................... 8
     Executing MicroShell.................... 3
     Exit.................................... 6
     Extended Shell Functions................ 10-

     Filters................................. 5,6

     Gobble line feeds....................... 6
 
     Input redirection....................... 4,5-
     Input Statements........................ 13

     Miscellaneous Statements................ 14
     Output redirection...................... 4
     Output Statements....................... 14
     Overview................................ 3

     Pipes................................... 4,9-

     REN..................................... 8

     SAVE.................................... 8
     Search.................................. 15
     SH.COM.................................. 3,17
     Shell file.............................. 4,12-
     Shell Variables......................... 10
     SH.OVR.................................. 18
     Summary of MicroShell Commands.......... 4
     System requirements..................... 3

     TYP..................................... 8,18
     TYPE.................................... 8

     User.................................... 8
     Wildcarding............................. 8,14
     Word separators......................... 9,18
