Q        Ukoncuje  editovanie  daneho  riadku,  vsetky  vykonane
         zmeny budu ignorovane a riadok zostane v stave, v  akom
         bol pred editovanim.
R        RESTORE riadok do povodnej polohy,  vsetky  zmeny  budu
         zabudnute.
L        LIST zbytok editovaneho riadku. Zostavate  v  editacnom
         rezime a kurzor smeruje na zaciatok riadku.
K        KILL (vymazat) znak na aktualnej pozicii kurzora.
Z        Vymazat vsetky znaky, pocinajuc (a  vratane)  aktualnou
         polohou kurzora az po koniec riadku.
I        INSERT  (vlozit)  znaky  na  aktualnej  poloe  kurzora.
         Zostanete  v  tomto  sub-rezime  az  pokial  nestlacite
         ENTER. Tym sa vratite do hlavneho editovacieho rezimu a
         kurzor bude smerovat za posledny vlozeny  znak.  Ak  sa
         v ramci tohoto sub-rezimu  pouzije  DELETE,  vymaze  sa
         znak  nalavo  od  kurzora.  V tomto  rezime  sa  kurzor
         zmeni na "*".
X        Presunutie  kurzora  na  koniec  riadku  a  automaticky
         prechod do sub-rezimu INSERT, ktory bol prave  opisany.
C        CHANGE znak na aktualnej pozicii kurzora a  prechod  na
         na nasledujuci znak. Nasledujuce znaky, ktore napisete,
         prepisu povodne znaky v  riadku  az  pokial  nestlacite
         ENTER, co Vas vrati naspat  do  editovacieho  rezimu  a
         kurzor bude nastaveny za posledny Vami zmeneny znak.
         Klavesou DELETE v tomto rezime iba vratite kurzor
         o jeden znak naspat. V rezime CHANGE sa zasa kurzor
         zmeni na "*".
F        FIND  (vyhladat)  nasledujuci  vyskyt  retazca  "find",
         ktory bol predtym definovany s  pouzitim  prikazu  "F",
         opisaneho neskor. Tento sub-prikaz ukonci  automaticky
         editovanie na aktualnom riadku (so  zachovanim  zmien),
         za predpokladu, ze nebude zisteny dalsi vyskyt  retazca
         "find" v  aktualnom  riadku.  Ak  bude  vyskyt  retazca
         "find"  zisteny  v jednom z  nasledujucich  riadkov  (v
         ramci   predtym   specifikovaneho   rozsahu   riadkov),
         bude  opatovne  inicializovany  rezim  editovania   pre
         riadok, v ktorom bol retazec najdeny.  Pripominame,  ze
         kurzor smeruje vzdy na start najdeneho retazca.
S        SUBSTITUTE  (nahradit)   predtym   definovany   retazec
         "substitute" za retazec "find", kde sa nachadza kurzor,
         a potom vyhladat  nasledujuci  vyskyt  retazca  "find".
         Spolocne s podprikazom "F" sa  pouziva  ma  prehladanie
         textoveho suboru a podla vlastneho  vyberu  na  mahradu
         vyskytov retazca "find" za retazec "substitute".
2.14. VYHLADANIE RETAZCA               Prikaz: F m,n,f,s
Text v rozsahu od riadku m po  n  bude  prehladany  na  zistenie
vyskytu retazca f - retazca "find".    Ak  vyskyt  retazca  bude
zisteny,  bude  zobrazeny  prislusny   riadok   textu   a   bude
inicializovany rezim editovania - vid predchadzajuci text. Potom
mozete pouzit prikazy v ramci  editacneho  rezimu  a  vyhladavat
nasledovne vyskyty retazca f v definovanom rozsahu riadkov alebo
na nahradenie retazcom  "s"  (retazec  "substitute")  aktualneho
vyskytu retazca f; vid prikaz EDIT opisovany vyssie.
Pripominame, ze rozsah riadkov a dva retazce mozeme nastavit uz
predtym akymkolvek  inym  prikazom,  takze  bude  postacovat  ak
zadame jednoducho F (ENTER).
2.15. PRIKAZY PRE PRACU S PASKOU A MICRODRIVE
Tieto  prikazy  vyuzivaju  rovnaku   jednoduchu    schemu    ako
kompilator na rozlisenie suborov na kazete a na  Microdrive.  Ak
by ste chceli pouzit subor na Microdrive, povedzme "FRED", ktory
sa nachadza na Microdrive 2 musite pred nazov suboru zadat cislo
mechanizmu a dvojbodku - teda:
2:FRED
2.16 VYSTUP TEXTU NA KAZETU            Prikaz: P m,n,s
     ALEBO MICRODRIVE
Text  od  riadku  m  po  n  bude  zaznamenany  na  kazetu  alebo
Microdrive. Subor bude mat nazov, zadany retazcom  s.  Pamatajte
na to, ze tieto parametre  mozu  byt  nastavene  predchadzajucim
prikazom. Cisla riadkov sa do suboru neprenasaju.  Predtym,  ako
stlacite klavesu ENTER  presvedcte  sa,  ze  Vas  magnetofon  je
zapnuty a prepnuty na nahravanie.
2.17. NACITAVANIE TEXTU Z KAZETY       Prikaz: G ,,s
      ALEBO MICRODRIVE
Na kazete alebo Microdrive sa vyhladava subor s nazvom suboru s;
po jeho najdeni sa subor nahra za koniec textu, ktory  uz  je  v
pamati.
Cisla riadkov sa riadkom suboru priraduju v poradi,  v  akom  sa
riadky nacitavaju. Cisla riadkov sa zvysuju s krokom  10.  Ak  v
pamati nie je ziadny text, zacina sa cislovanie riadkov od 10. V
opacnom pripade sa text z pasky pripoji na koniec  textu,  ktory
sa uz v pamati nachadza.
2.18. PRIKLAD PRACE S EDITOROM
Ako jednoduchy priklad prace  s  editorom,  ktory  sa  dodava  s
kompilatorom jazyka C si napiseme kratky program, a pokusime  sa
ho skompilovat. Nebudeme podrobne vysvetlovat  samotny  program,
pretoze to v danom mieste nie je dolezite.
Nahrajte do pamate system C  a  inicializujte  editor  stlacenim
EDIT a ENTER. Dostanete znak ">" a blikajuci kurzor "L". Zadajte
I10,10
aby ste spustili zadavanie textu na riadku 10 s krokom 10. Cislo
riadku sa na obrazovke zobrazi spolocne s medzerou  a  kurzorom.
Zadajte riadky, ktore sa uvadzaju v dalsom texte a stlacte ENTER
na konci kazdeho riadku. Prazdne riadky sa do  textoveho  suboru
zadavaju jednoduchym stlacenim ENTER bez textu.
10 /* Priklad prace s editorom */
20
30 #define EOF -1;
40
50 main()
60 {
70
80   int c,i,count,inword;
90
100  char s[20];
110
120  static int fp;
130
140  do
150  {
160    printf("Filename: ");
170
180    i = 0;
190    while ((c=getchar()) !=  '\n')
200    {
210      s[i++] = c;
220      if (i==19) break;
230    }
240
250    s[i] =  '\0';
260
270    fp = fopen(s,"r");
280    if (fp==0)
290      printf("\nFile not found!\n");
300 }
310 while (fp==0)
320
330 count=inword=0;
340
350 while ((c=getc(fp)) != EOF)
360 {
370   if (i=isspace(c))
380     inword = 0;
390   else if (inword==0)
400   {
410     inword = 1;
420     ++count;
430   }
440  }
450  fclose(fp);
460
470  print("\nWords: %d\n",count);
480 }
Tento program  obsahuje styri chyby,  z  ktorych  tri mozu   byt
opisane ako "syntakticke chyby". Pozrite  sa,  ci  ich  dokazete
vyhladat predtym ako budete postupovat dalej.
Po zadani celeho programu vystupte  z  rezimu  INSERT  stlacenim
EDIT a prejdite do kompilatora zadanim "C"  a  stlacenim  ENTER.
Teraz skompilujte program zadanim "#include" a stlacenim ENTER.
Prva vec, ktoru uvidime je ze sa kompilacia  ukonci  na  riadku,
obsahujucom vyvolanie  fopen  s  chybou  32  -  "zla  kombinacia
typov". Skuseni programatori v jazyku  C  okamzite  zbadaju,  ze
deklaracia fp v riadku  120  je  chybna  -  ma  to  byt  pointer
(smernik)  takze  musime  pridat  priamo  pred  fp   hviezdicku.
Spravime to tak,  ze  prejdeme  do  editora  stlacenim  ENTER  a
vyvolanim editora standardnym sposobom. Teraz  editujeme  riadok
120 tak, ze napiseme:
                           E120 (ENTER)
Na obrazovke sa objavi tento riadok spolocne s cislom  riadku  a
pod nim bude zasa cislo riadku  za  ktorym  nasleduje  blikajuci
kurzor. Chceli by sme postupovat po riadku a vlozit "*" pred fp,
takze viackrat stlacte CAPS-SHIFT 8 (>= na Spectrum+) az  pokial
sa kurzor nedostane priamo pod "f" v "fp". Teraz stlacte  "i"  a
pozorujte ako sa kurzor zmeni na  blikajuce  "*",  cim  indikuje
sub-rezim INSERT. Teraz  zadajte  hviezdicku  a  stlacte  ENTER.
Kurzor zostava tam kde bol  predtym,  avsak  zmeni  sa  opat  na
blikajuce "L". Znovu stlacte ENTER a zmeneny riadok sa prepise v
tvare, v akom bol zobrazeny na obrazovke. Kurzor  sa  vracia  do
hlavneho editora a pocitac caka na dalsi prikaz.
Vratte sa naspat do kompilatora  ("C"  a  ENTER)  a  pokuste  sa
skompilovat program znovu. Ide to viacmenej  bez  problemov  ale
nahle  sa  zastavi  s  chybou  0  -  "chybajuce  ;"  mapravo  od
zobrazenia "count=". Je tomu tak preto, ze "while" bezprostredne
nad tymto riadkom je ukoncovacia podmienka slucky (cyklu) "do ..
while" a na rozdiel od jednoduchych sluciek "while" musi byt  za
podmienkou while bodkociarka. Tento riadok  budeme  teda  musiet
editovat. Pouzite prikaz "E" na editovanie  riadku  podobne  ako
predtym, avsak namiesto krokovania po riadku stlacte "X". Kurzor
skoci  priamo  na  koniec  riadku  a  automaticky   inicializuje
sub-rezim INSERT. Indikuje sa to  zmenou  kurzoru  na  blikajucu
"*". Teraz mozeme zadat znaky na koniec  riadku,  takze  zadajte
bodkociarku a stlacte ENTER dvakrat aby ste sa dostali naspat do
hlavneho editora.
Znovu skompilujte program. Tentokrat sa  kompilator  zastavi  na
riadku 350 s chybou 0 -  "chybajuca  ")"".  Preco?  Je  to  dost
zaludna chyba, ktora sa  casto  stava  programatorom,  ktori  su
zvyknuti  na  iny  jazyk,  napriklad  na  Pascal.  Je  sposobena
instrukciou #define na riadku 30.
#define umoznuje pouzitie "makier" v programoch v  jazyku  C.  Z
tohoto  hladiska  je  makro  akykolvek  usek  textu  od   prveho
oddelovaca za identifikatorom az po nasledujucu znacku  (marker)
konca  riadku.  Vzdy  ked  sa  v   programe    vyskytne    tento
identifikator bude nahradeny za cely text makra. Znamena  to  ze
vzdy ked pouzijeme "EOF" bude nahradene zbytkom riadku -  "-1;".
A v tom je prave problem - bodkociarka za -1 zmiatla kompilator.
Nesmie tu byt, takze ju musime editovat.  Ukazeme   si   postup,
ktory nie je na prvy pohlad normalnou  metodou  editovania,  ale
bude to postup najrychejsi.
Zadajte E30 (ENTER) na editovanie riadku 30, potom  stlacte  "X"
ako by ste inicializovali sub-rezim INSERT  pre  koniec  riadku.
Teraz stlacte DELETE (CAPS-SHIfT 9) na vymazanie  bodkociarky  a
stlacte ENTER na zrusenie subrezimu INSERT. Stlacte  ENTER  este
raz aby ste zrusili editovaci rezim. Ak by sme sa teraz  pozreli
na riadok uvideli by sme, ze uz  nema  bodkociarku,  ktora  bola
vinnikom nasich potiazi. Takze teraz si skusime kompil.este raz!
Bezi to! Alebo aspon to tak vyzera. Zatial  program  NESPUSTITE,
ale stlacte tlacidlo SYMBOL-SHIFT 1 aby ste kompilatoru  ukazali
koniec suboru. Vyskoci dalsia cyba  -  chyba  27  -"nedefinovana
premenna(-e)". Vinnikom je identifikator "print" na riadku  470.
Samozrejme ze by to mal byt "printf". Editujte riadok  470  tak,
ze pouzijete E470 (ENTER) a doplnte  prislusne  "f"  na  spravne
miesto pouzitim postupov, o ktorych sme tu uz hovorili.
Zaverecna  kompilacia  uz  vyda  bezchybny  program  -  aspon  z
hladiska  kompilatora  -  a  tento  mozete  spustit    stlacenim
SYMBOL-SHIFT 1, za ktorym nasleduje  "Y".  Spocita Vam  slova  v
zadanom subore.
Vsetky  dalsie  moznosti  editora  su  takisto  svojim  sposobom
uzitocne  a  bude  to  velmi  dobry  napad  ak  s  nim    budete
experimentovat tak casto, ako je to len mozne. Pretoze editor je
natolko  vykonnym  prostriedkom  na  zostavovanie  programu,  je
zivotne dolezite vediet pouzivat editor lahko a doverne.
                 4.KNIZNICA STANDARTNYCH FUNKCII
Kniznica funkcii k C  kompilatoru  ,zvysujuca  jeho  moznosti,je
vytvorena  podla vzoru inych  UNIX  C  kniznic,  preto  mnohe  z
kniznicnych  modulov  su  popisane  aj  v  KERNIGHAM  &  RITCHIE
.Kniznica obsahuje moduly ilustrujuce moznosti jazyka a  takisto
aj moduly vyuzivajuce prednosti ZX-SPECTRUMU (grafiky a zvuku).
   Moduly rozdelujeme do troch katagorii:
-1. su  zabudovane  v  kompilatore  a  mozu  byt  priamo  volane
programom napr. printf
-2. ak ich chce uzivatel pozivat musi includovat kniznicny modul
"stdio.h" (#include "stdio.h") ,ktory je  dodavany  na  paske  s
kompilatorom. Poskytuje napr. funkcie min,max a funkcie definuj-
uce typy a konstanty .
-3. su tiez dodavane na paske ako zdrojovy C subor "stdio.lib" .
Kazdi uzivatel pouzivajuci funkcie z tohoto suboru si  ho  musi
zaviest  #include ?stdio.lib?
                      4.ARITMETICKE FUNKCIE
4.1      int    max(n,.....)  auto
  Vracia hodnotu najvacsieho integer argumentu. Funkcia obsahuje
  lubovolny pocet argumentov.
4.2      int    min(n,....)  auto
  Opak funkcie  max,  vracia  najmensiu  hodnotu  z  argumentov,
  takisto obsahuje lubovolny pocet argumentov.
--4.2,4.1  sa nachadzaju v stdio.h
4.3      int    abs(n)
  Vracia absolutnu hodnotu argumentu.
Pracuje obdobne ako sgn funkcia v BASICU ,cize vracia   1 ak n>0
                                                        0   n==0
                                                       -1    n<0
Nasledujuce  funkcie  umoznuju  pristup  k  pamatovym  bunkam  .
Skusenesi programatori nemusia vyuzivat standartne funkcie , ale
mozu si vytvorit vlastne, site na mieru.
4.5      char   peek(adres)
  Vracia hodnotu bytu ulozeneho na adrese "adres"
4.6             poke(adres,hodnota)
  Vlozi nizsich 8 bitov "hodnota" na adresu "adres". Kedze  tato
  funkcia nedava vysledok typ moze byt lubovolny.