                                         .PL 72
.PO 0
..----!-----!------------------------------!----------------------------------R
                     *** TURBOPASCAL - pomocny manual ***

                                    EDITOR

      Pohyb cursoru:

^S    o znak vlevo
^D    o znak vpravo
^A    o slovo vlevo
^F    o slovo vpravo
^E    o radek nahoru
^X    o radek dolu
^R    o obrazovku nahoru
^C    o obrazovku dolu
^Q^S  na zacatek radku
^Q^D  na konec radku
^Q^R  na zacatek souboru
^Q^C  na konec souboru
^Q^P  na posledni pracovni posici

      Zmeny textu:

^V    prepinac INSERT modu
<del> vymazani znaku vlevo od cursoru
^G    vymazani znaku pod cursorem
^T    vymazani slova vpravo od cursoru
^N    <enter>
^Y    vymazani radku
^Q^Y  vymazani radku vpravo od cursoru

      Blokove instrukce:

^K^B  oznaceni zacatku bloku
^K^K  oznaceni konce bloku
^K^T  oznaceni jednoho slova
^K^C  kopirovani bloku
^K^V  presun bloku
^K^Y  vymazani bloku
^K^R  cteni bloku z disku
^K^W  zapis bloku na disk
^K^H  zruseni blokovych navesti

      Ostatni instrukce:

^K^D  konec editace
^I    <tab>
^Q^I  prepinac automaticke tabelace
^Q^L  obnoveni radku
^Q^F  hledani retezu
^Q^A  zamena retezu
            options:
      B     hledani nazpet
      G     prohledat cely soubor
      n     n-ty vyskyt retezu
      N     nepta se na souhlas
      U     ignoruje rozdil mezi malymi a velkymi znaky
      W     pouze cela slova
^L    opakovani ^Q^F nebo ^Q^A
^P    prefix ridiciho znaku
^U    preruseni vykonavani instrukce
                               Reservovana slova

* absolute     * external       nil          * shr
  and            file           not          * string
  array          for            of             then
  begin          forward        or             to
  case           function       packed         type
  const          goto           procedure      until
  div            if             program        var
  do             in             record         while
  downto       * inline         repeat         with
  else           label          set          * xor
  end            mod          * shl

                           Standartni identifikatory

  ArcTan         Delay          Length         Rename
  Assign         Delete         Ln             Reset
  Aux            EOF            Lo             Rewrite
  AuxInPtr       EOLN           Lst            Round
  AuxOutPtr      Erase          LstOutPtr      Seek
  BlockRead      Execute        Mark           Sin
  BlockWrite     Exp            MaxInt         SizeOf
  Boolean        False          Mem            Sqr
  BufLen         FilePos        MemAvail       Sqrt
  Byte           FileSize       Move           Str
  Chain          FillChar       New            Succ
  Char           Flush          NormVideo      Swap
  Chr            Frac           Odd            Text
  Close          GetMem         Ord            Trm
  ClrEOL         GotoXY         Output         True
  ClrScr         HeapPtr        Pi             Trunc
  Con            Hi             Port           UpCase
  ConInPtr       HighVideo      Pos            Usr
  ConOutPtr      IOresult       Pred           UsrInPtr
  Concat         Input          Ptr            UsrOutPtr
  ConstPtr       InsLine        Random         Val
  Copy           Insert         Randomize      Write
  Cos            Int            Read           Writeln
  CrtExit        Integer        Readln
  CrtInit        Kbd            Real
  DelLine        KeyPressed     Release
                           Standartni skalarni typy

Integer    -32768..32767 ( 2 byte )

           !!!nehlida se pretceni!!!

Byte       0..255 ( 1 byte )

Real       1E-38 az 1E+38 , 11 platnych mist ( 6 byte )

           nesmi byt uzito jako argument Pred a Succ
           nesmi byt uzito jako index pole
           nesmi byt uzito jako ridici promenna for a case
           neni dovoleno vytvaret intervaly

Boolean    (False,True)     False < True   ( 1 byte )

Char       znak v kodu ASCII   ( 1 byte )


                    Uzivatelem definovane jazykove elementy

Identifikatory    max. 127 signifikantnich znaku

Konstanty         hexadecimalni maji rozsah: $0000..$FFFF

Retezy            jsou kompatibilni s:
                     poli array of char stejne delky a
                     vsemi typy string

Ridici znaky      # pred konstantou 0..255 nebo $0..$FF : jedna se
                    o ASCII znak prislusneho kodu
                  ^ pred znakem : jedna se o korespondujici ridici
                    znak ASCII

Komentare         {toto je komentar} , (*toto take*)

kompilacni direktivy  {$direktiva}


                               Hlavicka programu

program jmeno(parametr, ... );


                                Deklaracni cast

1.Deklarace navesti
2.Deklarace konstant
3.Deklarace typu
4.Deklarace promennych
5.Deklarace procedur a funkci

           Deklarace navesti:

label id1,id2, ... ;         navestim muze byt retez znaku, napr.
                                 label 10,error,Quit;
           deklarace konstant:

const identifikator = konstanta; ...

                                 TURBO ma definovane tyto konstanty:
                                 Pi     3.1415926536e+00
                                 False
                                 True
                                 Maxint 32767

           deklarace typu:

type identifikator = typ; ...

           deklarace promennych:

var identifikator, ... : typ; ...


                                 Telo programu

begin prikaz; ... end.


                                    Vyrazy

           Operatory:

1. unarni -
2. not
3. * / div mod and shl shr
4. ; - or xor
5. = <> < > <= >= in


not and or xor lze pouzit i na typ integer, kde zpusobi binarni operaci

misto div lze ekvivalentne pouzit /
                                    Prikazy

           Prirazovaci prikaz:

promenna := vyraz ;

           Prikaz procedury:

jmeno(par, ... );

           Prikaz skoku:

goto label;

           Slozeny prikaz:

begin prikaz; ... end
           Podminky:

if podminka then prikaz else prikaz;

case selektor of
     konstanta, ... : prikaz;
            :
            :
else prikaz; ...
end;

           Cykly:

while podminka do prikaz;

repeat
  prikaz;
    :
    :
until podminka;

for promenna := vyraz to vyraz do prikaz;

                                     typy

           Vyctove typy:

jmeno = (hodnota, ... );

           Typy interval:

jmeno = dolni..horni;

           Konverze typu:

   Krome standartnich konverzi ma turbo moznost konverze
   nasledujicim spusobem.Priklad:

type ZN = (ANO,CAS,ER,MORE);{pak plati: ZN(2) = ER
                                        integer(CAS) = 1}

   Z toho vyplyva ekvivalence:  ord() = integer()
                                chr() = char()

pozn.: Rozsah intervalu se implicitne nehlida. Je-li to treba
       je nutno pouzit kompilacni direktivu: {$R+}
           Typ string:

jmeno = string[konstanta];      {konstanta = 1..255}

   Operace  : +   spojeni retezu
                             napr.: 'turbo '+'pascal'='turbo pascal'

   Prirazeni: :=             napr.: LINE:='slovo'+WORD+'konec'

   Procedury: Delete(retez,posice,pocet)
                             odstrani z retezu pocet znaku od posice

              Insert(retez,vsuvka,posice)
                             vlozi do retezu vsuvku od posice

              Str(hodnota,retez)
                             prevede hodnotu na retez
                             napr.: X:=12.43;
                                    Str(X:10:0,S);{nyni S='12'}

              Val(retez,promenna,kod)
                             prevede retez na hodnotu a doslo-li k chybe,
                             nastavi kod na index prvniho chybneho znaku,
                             jinak je 0.

   Funkce   : Copy(retez,posice,pocet)
                             ma hodnotu poctu znaku od posice retezu
                             napr.: R:='qwerty'{nyni plati:}
                                    Copy(R,3,2)='er'

              Concat(retez, ... )
                             ma hodnotu spojeni retezu.Dala by se deklarovat:
                             function Concat(S1,S2, ... :string) of string;
                             begin Concat:=S1+S2+ ... end;

              Length(retez)  ma hodnotu delky retezu

              Pos(retizek,retez)
                             ma hodnotu od niz zacina retizek v retezu,
                             neni-li tam ma hodnotu 0.

pozn.:String je kompatibilni s char. Ze stringu lze prirazovat pomoci
      indexovani. Indexace zacina od 0. Pozor Pos od 1! Cili posledni
      znak je: STRING[Length(STRING)-1]


           Typ pole:

jmeno = array[rozsah, ... ] of typ;

   TURBO ma dve preddefinovana pole typu Byte: Mem Port
           Typ zaznam:

jmeno = record
          pevna cast;
          variantni cast;
        end;

            Pevna cast:

      promenna : typ;
            :
            :

            Variantni cast:

      case selektor : typ of
        hodnota, ... : ( jmeno : typ ; ... ) ; ...

            Vyvolani:

      RECORD.JMENO ...

      with RECORD, ... do begin prikaz,kde staci JMENO; ... end

  TYPY MNOZINA

      set of ordinalni typ

    konstruktor mnoziny:

      [vyraz, ... ,vyraz .. vyraz, ... ]

    definovane operace:

      +       sjednoceni
      *       prunik
      -       rozdil
      =       rovnost
      <>      nerovnost
      <=      "je obsazena v"
      >=      "obsahuje"
      in      "je prvkem mnoziny"

TYPY KONSTANTA:

      jmeno : typ = konstanta

            U poli lze napr.:

        POLE : array [0..1,0..2] of integer = ((2,4,6),(7,8,9))

            U zaznamu:

        type P = record X,Y,Z : integer; end
        const ZAZ : P = ( X : 3 ; Y : 12 ; Z: 128 )

            U mnozin:

        const MALA : set of char = ['a'..'z']
TYPY SOUBOR:

      var jmeno : file of typ;

         Neni povoleno file of file !!!

            Operace na souborech:

      Assign(jmeno,retez)          prirazeni fyzickeho souboru
      Rewrite(jmeno)               zalozeni souboru
      Reset(jmeno)                 nastaveni zacatku souboru
      Read(jmeno,promenna, ... )   cteni ze souboru
      Write(jmeno,promenna, ... )  zapis do souboru
      Seek(jmeno,n)                nastaveni na n-tou polozku (0=prvni)
      Flush(jmeno)                 nastaveni sectoroveho bufferu
      Close(jmeno)                 uzavreni souboru
      Erase(jmeno)                 vymazani souboru
      Rename(jmeno)                prejmenovani souboru

            Standartni souborove funkce:

      EOF(jmeno)                   konec souboru (Boolean)
      FilePos(jmeno)               pozice ukazatele (Integer)
      FileSize(jmeno)              pocet slozek souboru (Integer)

         nastaveni ukazatele na konec souboru:
         Seek(jmeno,FileSize(jmeno));

Textove soubory:

            Standartni identifikator typu: Text

            Specialni textove operace:

      Readln(jmeno,promenna, ... )
      Writeln(jmeno,vyraz, ... )
      Eoln(jmeno)    {typ Boolean - je-li EOF(F)=true pak Eoln(F)=true}

            Na textove soubory nelze uzit funkce:
            Seek Flush FilePos FileSize

Logicka zarizeni:

      CON   console (konzola = display + klavesnice)
      TRM   terminal (display)
      KBD   keyboard (klavesnice)
      LST   list - printer (tiskarna)
      AUX   auxiliary (pomocna)
      USR   user (uzivatelska)

Standartni soubory:

      Input   CON: TRM:
      Output  CON: TRM:
      Con     CON:
      Trm     TRM:
      Kbd     KBD:
      Lst     LST:
      Aux     AUX:
      Usr     USR:
            Na standartni soubory se nepouzivaji procedury:
            Reset Rewrite Close

Vstup textovych souboru:

      Read(promenna, ... )
      Read(file,promenna, ... )

            Promenne mohou byt typu: Char String Integer Real.
            Eoln = true, jestlize nasledujici znak je 'cr' nebo '^Z'.
            Eof = true, jestlize nasledujici znak je '^Z'.
            Ciselny retez smi mit max. 30 znaku.
         Pro vstup z konzoly plati:
            Navrat o znak: '<BACKSPACE>' nebo '^H'.
            Smazani celeho radku: '^X'
            Delka vstupniho bufferu konzoly je 127 znaku a da se upravit
            zmenou preddefinovane promenne BufLen. Napr.:

      BufLen := 14


      Readln

            Ma stejne parametry a plati totez co pro Read, ale po skonceni
            vstupu ignoruje zbytek radku a muze se vyskytovat bez parametru.

Vystup textovych souboru:

      Write({jako u Read})
      Writeln

            Parametry mohou mit doplnek - cislo oddelene dvojteckou,
            ktere ma vyznam delky vystupujiciho retezu.
            U typu real muze byt dalsi doplnek s vyznamem poctu desetinnych
            mist, a cislo pak vystupuje v nelogaritmickem tvaru.

Netypove soubory:

      file

            Priklad deklarace: var SOUBOR : file;

            Lze pouzit vsechny procedury a funkce, krome
            Read, Write, Flush. Specificke procedury:

      BlockRead(file,promenna,pocet)
      BlockWrite(file,promenna,pocet)

            file je identifikator netypoveho souboru
            promenna jsou ctena/zapisovana data
            pocet je vyraz typu integer, ktery specifikuje pocet
              128-bytovych bloku urcenych pro prenos mezi pameti a diskem.

I/O kontrola:

            Normalne kompilator preklada s kontrolou prenosu dat, ale
            pouzitim {$I-} lze kontrolu vypustit. Pak je nutno kontrolu
            zajistit programove pomoci standartni funkce:

      IOresult , ktera je v pripade spravneho prenosu rovna nule,
                     v pripade chyby ma hodnotu cisla chyby.
            Hodnota IOresult se muze menit v prubehu vykonavani:
             BlockRead
             BlockWrite
             Chain
             Close
             Erase
             Execute
             Flush
             Read
             Readln
             Rename
             Reset
             Rewrite
             Seek
             Write
             Writeln

DYNAMICKE DATOVE STRUKTURY

              deklarace napr.:

      type SPOJ = ^OBJEKT
               OBJEKT = record
                          DALSI : SPOJ;
                          HODN  : integer
                        end;
      var P : SPOJ;{je promenna typu ukzatel}


      P:=nil {promenna P neukazuje na zadnou dynamickou promennou}

      P:=P^.DALSI {postup ukazatele na dalsi dynamickou promennou}

              na promenne stejneho typu ukazatel mohou byt aplikovany
              relacni operatory: = <>

      New(P) {vytvori se dynamicka promenna typu OBJEKT a ukazatel
             na tuto promennou se ulozi do P}

      Mark(P) {ulozi do promenne hodnotu ukazatele hromady}

      Relase(P) {ulozi do ukazatele hromady hodnotu promenne}

      GetMem(P,I) {nastavi ukazatel na diru v hromade o I bytech}

            lze deklarovat ukazatel typu: U:^Integer;
PROCEDURY

      procedure identifikator (specifikace parametru ; ...)
        lokalni deklarace
      begin
        posloupnost prikazu
      end

FUNKCE

      function identifikator (specifikace parametru ; ...) : typ funkce
        lokalni deklarace
      begin
        posloupnost prikazu
      end

Pro pripad vzajemne rekurze je mozno pouzit neuplne deklarace:

      hlavicka ; forward ;

SPECIFIKACE PARAMETRU

  VOLANE HODNOTOU:  identifikator : typ
  VOLANE ODKAZEM :  var identifikator : typ
            Jako typ je povolen pouze identifikator! Napr.:
            procedure S(M: array[1..50] of Integer); {je chybne}

            Parametry typu file musi byt volany odkazem!

Rizeni kontroly typu parametru:

            Prekladac kontroluje shodnost typu parametru a za shodne
            povazuje napr.: typy string shodne delky, coz muze byt
            nezadouci. Kontrolu je mozno vypnout kompilacnim prikazem
            {$V-}.

Netypove parametry:
            Nema-li formalni parametr uveden typ, muze byt jako skutecny
            parametr uzit libovolny typ. Je treba je pouzit v deklaraci
            jako absolute. Napr.: je spravne:

            program Vymena;
            type Matice = array[1..50,1..25]:
            var M1,M2: Matice;
            procedure Sun(var A,B; Size: Integer)
            type T = array[1..MaxInt] of byte;
            var X : T absolute A;
                Y : T absolute B;
                C : Integer;
            begin
              for C := 1 to Size do
              begin
                Y[C] := X[C]; X[C] := 0;
              end;
            end;
            begin
              Sun(M1,M2,SizeOf(M1));
            end.
Standartni procedury:

      Delay(Time)
            Zpusobi programovou smycku v trvani cca Time ms (integer).
      CrlEol
            Smaze radek vpravo od kursoru.
      ClrScr
            Smaze obrazovku a nastavi kursor na posici "home".
      DelLine
            Smaze radek s kursorem a vyroluje obrazovku nahoru.
      InsLine
            Prida radek na posici kursoru a sroluje obrazovku dolu.
      Init
            Vysle "Terminal Initialization String" definovany pri instalaci.
      Exit
            Vysle "Terminal Reset String" definovany pri inicializaci.
      GotoXY(X,Y)
            Nastavi kursor na posici X,Y.
      LowVideo
            Vysle "End of highlighting" definovany pri inicializaci, tj.
            znak "dim".
      HighVideo
            Vysle "Highlighting" definovany pri inicializaci, tj. "normal"
            mode obrazovky.
      Randomize
            Inicializuje generator nahodnych cisel.
      Move(odkud,kam,kolik)
            Prresune blok pameti delky 'kolik' (v byte) od adresy obsazene
            promennou 'odkud' na misto od adresy obsazene promennou 'kam'.
      FillChar(odkud,kolik,co)
            Naplmi blok pameti delky 'kolik' (v byte) od adresy obsazene
            promennou 'odkud' obsahem 'co' (typ byte, char).
Standartni funkce:  

      Abs(vyraz)
      ArcTan(vyraz)      - vysledek je v radianech.
      Cos(vyraz)         - argument je v radianech.
      Exp(vyraz)
      Frac(vyraz)        - desetinna cast cisla.
      Int(vyraz)         - cela cast cisla.
      Ln(vyraz)
      Sin(vyraz)         - argument je v radianech.
      Sqr(vyraz)
      Sqrt(vyraz)

      Pred(vyraz)        - predchudce.
      Succ(vyraz)        - naslednik.
      Odd(vyraz)         - argument = integer, vysledek = boolean
                           ekvivalent: (abs(vyraz) mod 2 = 1)
      Ord(vyraz)         - ordinalni cislo.
      Round(vyraz)       - konverze real -> integer zaokrouhlenim.
      Trunc(vyraz)       - konverze real -> integer zanedbanim.
      Hi(vyraz)          - argument i vysledek jsou integer. Horni byte
                           vysledku je 0, dolni je horni byte vyrazu.
      KeyPressed         - boolean. Je true, byla-li stisknuta klavesa.
      Lo(vyraz)          - argument i vysledek jsou integer. Snuluje
                           horni byte vysledku vyrazu.
      Random             - real. Nahodne cislo [0<=Random<1]
      Random(vyraz)      - integer. Nahodne cislo [0<=Random<vyraz]
      SizeOf(promenna)   - integer. Pocet byte obsazenych promennou.
      Swap(vyraz)        - integer. Prehodi honi byte se spodnim.
            Pri deklaraci rekurentnich funkci je nutno pouzit kompilacni
            direktivu {$A-}.

            Pri vzajemne rekurenci je nutno jednu funkci preddeklarovat.
            Provadi se to uvedenim klicoveho slova forward za hlavickou.
            Pri vlastni deklaraci se pak neuvadeji parametry. Priklad:

      function A( ... ): typ; forward;
      function B( ... ): typ;
      begin
        :
      end;
      function A;
      begin
        :
      end;

                               VKLADANI SOUBORU

            Do zdrojoveho programu je mozno vlozit soubor psany v pascalu
            (podprogramy ap.) pomoci kompilacni direktivy I:

      {$I jmeno}

            jmeno je libovolne legalni jmeno souboru.
            Mala pismena jsou transformovana na velka.
            Neni-li uveden typ, doplnuje se .PAS.
            Direktiva musi byt uvedena na samostatnem radku.

                                    CP/M-80

Absolutni promenne:

            Promenne lze pevne priradit umisteni v pameti pomoci klicoveho
            slova absolute nasledovaneho adresou napr.:
      RETEZ: string[120] absolute $80;
      DELKA: byte absolute RETEZ;
            Tim lze docilit identitu nebo prekryvani promennych.

Standartni funkce Addr:

      Addr(jmeno)        - integer. Ma hodnotu adresy prvniho byte
                           promenne, procedury, nebo funkce prislusneho
                           jmena.

Preddefinovane pole Mem:

            Jeho slozky jsou typu byte a jejich indexy (typu integer)
            souhlasi s adresou v pameti. Priklady zapisu:

      IObyte := Mem[3];
      Mem[$1b+MOVE] := ord('~');

Preddefinovane pole Port:

            Je pro pristup k portum Z-80 CPU. Slozky i indexy, ktere
            souhlasi s adresou portu jsou typu byte.
Optimizace poli:

            Kompilacni direktiva X prepina optimizaci poli z hlediska
            rychlosti vypoctu (implicitne {$X+}),nebo z hlediska
            obsazeni pameti: {$X-}.

Standartni funkce MemAvail:

            Je typu integer a udava velikost dostupne pameti na hromade.
            Pri navratu je MemAvail zaporna a pocet volnych byte je
            65536 + MemAvail.

Pointry:

            Standartni funkce Ord a Ptr umoznuji prime rizeni adres,
            odpovidajicich pointrum.
            Ord (integer) ma hodnotu adresy pointru pouziteho jako argument
            Ptr konverguje argument (integer) na odpovidajici pointr

Externi podprogramy:

            Typicky jsou to procedury a funkce psane ve strojovem kodu.
            Deklaruji se pouzitim klicoveho slova external za kterym
            nasleduje konstanta typu integer definujici adresu podprogramu
            v pameti. Napr.:

      procedure DiskReset; external $EC00;
      function ABC(var D,E: integer): real; external $1C00;

Spousteni programu:

            Z programu je mozno nacist a spustit jiny program pomoci
            standartnich procedur Chain a Execute. Chain se pouziva
            na soubory typu .CHN, Execute na .COM.

      Chain(promenna);
      Execute(promenna);

            promenne musi byt predem prirazeno jmeno soubru procedurou
            Assign.

In-line strojovy kod:

            Pouziva se prikazu Inline( ... ).
            Konstanty se mohou zadavat jako literaly nebo identifikatory.
             Literal generuje jeden byte je-li v rozsahu 0..255 ($00..$FF),
             jinak dva byte ve standartnim bytove prehozenem formatu.
             Identifikator kostanty generuje vzdy dva byte.
            Identifikator promenne generuje dva byte naplnene jeji
             adresou umisteni v pameti.
            Adresovat je mozno pouze relativne a pocet preskakovanych
             byte musi byt uveden hvezdickou a znamenkem.
            Jednotlive slozky se oddeluji lomitkem.
            Instrukcni kody se zadavaji jako literalove konstanty.
            Priklad:

      procedure UpCase(var STRG: STR); {str je typ String[255]}
      begin
       Inline($2A/STRG/   {     LD  HL,(STRG) }
              $46/        {     LD  B,HL      }
              $04/        {     INC B         }
              $06/        { L1: DEC B         }
              $CA/*+20/   {     JP  Z,L2      }
              $23/        {     INC HL        }
              $7E/        {     LD  A,(HL)    }
              $FE/$61/    {     CP  'a'       }
              $DA/*-9/    {     JP  C,L1      }
              $FE/$7B/    {     CP  'z'+1     }
              $D2/*-14/   {     JP1 byte:
             Interval integer o rozsahu max. 0..255
             Boolean
             Char
             Vyctove typy s max. 256 polozkami

            Nasledujici typy obsazuji 2 byte tak, ze mene vyznamny
            byte je ulozen prvni:
             Integer
             Interval integer o rozsahu vetsim nez 0..255
             Vyctove typy s vic nez 256 polozkami
Real:

            Obsazuje 6 byte nasledujicim zpusobem:

      @     Exponent
      @+1   LSB mantisy
       :
      @+5   MSB mantisy

            Exponent je v binarnim kodu posunutem o $80. Napr. 
             $84 - $80 = 2^4 = 16. Je-li exponent 0 je nastaven na $00.
            Mantisa je vzdy normalizovana tj. MSBit (bit 7 6. byte)
             je reprezentovan jako 1. Tento bit je pouzit jako znamenko
             (0 -> + ; 1 -> -).

Retez (string):

            Obsazuje o 1 byte vetsi pamet, nez je jeho max. delka:

      @        Aktualni delka (L)
      @+1      Prvni znak
       :
      @+L      Posledni znak
      @+L+1    Nepouzito
       :
      @+Max    Nepouzito

Mnozina (set):

            Kazdy prvek mnoziny obsazuje 1 bit pameti. Protoze maximum prvku
            je 256, muze mnozina obsazovat max. 32 byte. Konkretne obsazuje:
            (Max div 8) - (Min div 8) +1  byte. Adresa elementu E je:
            MemAddress = @ + (E div 8) - (Min div 8). Adresa bitu je:
            BitAddress = E mod 8.

Soubor (File Interface Block):

            Kazda promenna souboru predstavuje prislusny file interface
            block (FIB). Ten obsazuje 176 byte a sklada se z ridici
            sekce (prvnich 48 byte) a sektoroveho bufferu 
            (poslednich 128 byte):

      @     Flags byte
      @+1   File type
      @+2   Character buffer
      @+3   Sector buffer pointer
      @+4   Number of records (LSB)
      @+5   Number of records (MSB)
      @+6   Record length in bytes (LSB)
      @+7   Record length in bytes (MSB)
      @+8   Current record number (LSB)
      @+9   Current record number (MSB)
      @+10  Nepouzito
      @+11  Nepouzito
      @+12  First byte of CP/M FCB
       :
      @+47  Last byte of CP/M FCB
      @+48  First byte of sector buffer
       :
      @+175 Last byte of sector buffer
            Flag byte (@) obsahuje 4 jednobitove flagy, ktere indikuji
            stav souboru:

      bit 0  Input flag. Je 1 je-li je povoleno cteni.
      bit 1  Output flag. Je 1 je-li povolen zapis.
      bit 2  Write semaphore. Je 1 jsou-li data zapisovana do bufferu.
      bit 3  Read semaphore. Je 1 neni-li obsah bufferu definovan.

            File type (@+1) specifikuje typ zarizeni:

      0     Consola (CON:)
      1     Terminal (TRM:)
      2     Keyboard (KBD:)
      3     List - tiskarna (LST:)
      4     Auxiliary - pomocne (AUX:)
      5     User - uzivatelske (USR:)
      6     Disk

            Netypove soubory nemaji ve FIB sektorovy buffer a FIB
            ma delku 48 byte. Data se prenaseji na disk primo
            z promenne.

Pointry:

            Pointr obsazuje v pameti 2 byte s 16-bitovou adresou
            v bytove prehozenem formatu.

PREDDEFINOVANE PROMENNE:

      HeapPtr      Pointer hromady
      RecurPtr     Pointer rekurzivniho sklipku
      StackPtr     Pointer sklipku CPU

                             KOMPILACNI DIREKTIVY

            Zapisuji se jako komentare zacinajici znakem '$'. Je mozno
            uvest soucasne nekolik direktiv: {$R-,B+,V-}.

      Direktiva B                          Implicitne: B+

            Ridi I/O mod pro standartni soubory Input a Output.
            {B+} selektuje zarizeni CON:
            {B-} selektuje zarizeni TRM:

      Direktiva C                          Implicitne: C+

            Ridi reprezentaci ridicich znaku, ktere vstoupi behem provadeni
            procedury Read nebo Readln.
            {C+} vtoupi-li ^C - zastavi se pvadeni programu
                           ^S - prepina vystup na obrazovku
            {C-} kontrolni znaky nemaji interpretaci

      Direktiva I                          Implicitne: I+

            Ridi hlidani chyb pri I/O.
            {I+} kontrola je zabezpecena kompilatorem
            {I-} je nutno pouzit standartni funkci IOresult
      Direktiva R                          Implicitne: R-

            Ridi hlidani indexu.
            {R+} kontroluji se indexy poli a rozsahy intervalu
            {R-} kontrola se neprovadi

      Direktiva V                          Implicitne: V+

            Ridi hlidani typu stringu uziteho jako skutecny parametr
            misto formalniho parametru typu var
            {V+} typ stringu se hlida
            {V-} kompilator dovoli uzit string jine delky

      Direktiva U                          Implicitne: U-

            Ridi uzivatelske preruseni vykonavani programu
            pri stisknuti ^C.
            {U+} preruseni se provede
            {U-} nema efekt

      Direktiva X                          Implicitne: X+

            Ridi optimizaci poli.
            {X+} maximalni rychlost
            {X-} minimalni pamet


      Direktiva A                          Implicitne: A+

            Ridi generaci absolutniho (nerekurzivniho) kodu.
            {A+} absolutni kod
            {A-} rekurzivni kod

      Direktiva W                          Implicitne: W2

            Ridi velikost mista pro prikaz With tj. urcuje kolik
            rekordu muze byt otevreno uvnitr jednoho bloku.
            Za W musi nasledovat jedna cislice 1..9.
