m Funkcia sa konci ak "control" retazec bol  vycerpany  ,  alebo
  niektory vstup nesuhlasi so specifikaciou a potom vracia pocet
  spravnych vstupov . Ked bol najdeny koniec suboru potom EOF.
      Priklad:
       int   n;
       char  s[20];
       scanf("%d ,%19s",&n,s);
  prikaz cita cele cislo do premennej n (&n) a retazec dlhy max.
  20 znakov do pola s. Vsimnite si : limitovanie poctu vstupnych
  znakov %19s,premenna s neobsahuje & lebo je tiez ukazatelom do
  pola
4.46     int    fscanf(fp,control,arg,...)
          FILE  *fp;
          char  *control;
  Funkcia sa chova ako scanf , ale vstup sa robi z "fp"
4.47     int    sscanf(s,control,arg,....)
          char  *s,*control;
  Funkcia sa chova ako scanf , ale vstup sa berie z retazca "s"
                            C SKUPINA
4.48     int    rewin()
  Vstup  jedneho  znaku  z  klavesnice  bez  konverzie  a    bez
  echa.Funkciacaka na nastavenie 5 bitu v  systemovej  premennej
  FLAGS a potom cita obsah premennej LAST_K (skupina 1)
4.49     int    keyhit()
  Funkcia dodava TRUE ak  bola  zatlacena  lubovolna  klavesa  a
  FALSE ak nebola. AK dodala TRUE potom mozeme zistit ktory znak
  bol stlaceny pomocou rawin() . Pred opatovnym  pouzitim keyhit
  musime klavesnicu inicializovat (skupina 1)
4.50            _exit(n)
  Tato funkcia sposoby navrat do systemu  .  Argument  je  cislo
  spravy ,ktora sa ma vytlacit (exit(0) je  o.k.  exit(4) je Out
  of memory ....)
                  FUNKCIE 32 BITOVEJ ARITMETIKY
32 bitove cislo je pole o 4 znakov pricom najmenej dolezity byte
je prvy a najdolezitejsi je posledny
4.51            long_multiply(c,a,b)
          char  *a,*b*,*c;
  Vykona  c= a*b
4.52            long_add(c,a,b)
          char  *a,*b,*c;
  Vykona c= a+b
4.53            long_init(a,n1,n0)
          char  *a;
          unsigned  n1,n0;
  Inicializuje 32 bitove cislo n1  su  dolezitejsie  byty  a  n0
  menej dolezite.
          long-init(a,Ox1234,Ox5678);  "a"=Ox123456789
4.54            long_set(a,n,d)
          char  *a;
          unsigned  n,d;
  Inicializuje 32 bitove cislo n  udava  16  bitove  cislo  a  d
  hovori kam sa ma umiestnit.
    long_set(a,Ox1234,1);    "a"=00123400
    long_set(a,Ox5678,3);    "a"=78000000
4.55            long_copy(c,a)
          char  *c,*a;
  Kopiruje 32 bitove cislo  c=a
                      PSEUDO NAHODNE CISLA
Generator aplikovany  v  kniznici  je  prebraty  z  "learnig  to
Program  in  C"  (Thomas  Plum).  generuje  16  bitove  cisla  s
periodou 2^32. Cize cisla sa opakuju po 2^32 krat ,preto nebudte
sklamany pri jeho spusteni
4.56     int    rand()
  Vracia 16 bitove cislo s periosou 2^32m
4.57     int    srand(n)
  Nastavuje generator. Pouziva sa na zaciatku prace s generatoro
  m aby kazde spustenie  bolo  ine  (zacina  od  inej  zakladnej
  hodnoty
             GRAFICKE A ZVUKOVE FUNKCIE PRE SPECTRUM
Tieto funkcie su neni v standarte C kniznice a  dovoluje  vyuzit
vsetky prednosti pocitaca .
4.58            plot(on,x,y)
          int   on,x,y;
  Funkcia nastavuje bod na lokacii (x,y) ,bud na  nastaveny  ink
  alebo PAPER podla hodnoty "on" , ak je  TRUE  potom sa nastavy
  INK inac PAPER.
4.59            line(on,dx,dy)
          int   on,dx,dy;
  Funkcia nakresli ciaru z nastaveneho bodu do bodu  (x+dx,y+dy)
  prepinac "on" sa chova obdobne ako pri plot
4.60     int    ink(color)
          int    color;
  Meni nastaveny INK na hodnotu  colour  .  Ak  je  colour  mimi
  rozsah potom funkcia vracia -1,inac vrati hodnotu nastaveneho
  INK
4.61     int    paper(colour)
          int   colour;
  Meni hodnotu PAPER ako ink().
4.62            cls()
  Vymaze obrazovku.
4.63            beep(d,p)
          int    d,p;
  zabipa pricom d je dlzka tonu v desatinach sekundy a p je jeho
  vyska .
               3. PRIRUCNY MANUAL HISOFT C JAZYKA
3.1  Rozdiely oproti Kenighanovi  a  Ritchiemu  (existuje  rusky
                                          preklad - pozn.prekl.)
Poznamenavame, ze nasledovne obmedzenie nie je inac spomenute:
- Plavajuca desatinna bodka nie  je  zatial  implementovana,  co
znaci ze uzitie typov float a double zapricini  chybu  kompilera
'RESTRICTION:  floats  not  implemented'  a   kompilacia    bude
ukoncena.
1.      Uvod
Hisoft C je navrhnuty tak aby bol velmi blizky jazyku  opisanemu
v knihe Kernighan , Ritchie: The  C  programing  language.  Tato
kniha je zakladnou pracou o C, a vsetci uzivatelia Hisoft  C  by
sa mali snazit urobit si jej kopiu. Pretoze je blizka  definicii
C, je Hisoft C blizky tiez inym dialektom C zalozenym na nej.
Vela casti knihy Kernighana a Ritchieho je  priamo  pouzitych  v
Hisoft C a my ich tu neopakujeme. Tato kapitola opisuje rozdiely
medzi Hisoft C a jazykom popisanym v 'C Reference Manual', ktory
je Apendixom A knihy Kernighana a Ritchieho.  Tento  apendix  je
strucnou  definiciou  jazyka  a  tato  kapitola   je    strucnou
definiciou odlisnosti. Dalsie objasnenia niektorych aspektov  su
dane v inej casti manualu.
Tato  kapitola  pouziva  take  iste  cislovanie  casti  ako   'C
Reference  Manual'  takze  komentare  mozeme  priamo  pouzit   k
zodpovedajucej casti knihy. Tam kde zahlavie casti nema komentar
je Hisoft C zhodny s opisom v knihe.  Teraz  zacneme  komentarom
sekcie 1...
Hisoft C  je  implementovany  na  pocitaci  ZX  Spectrum,  ktory
pouziva mikroprocesor Z80.
2.   Lexikalne konvencie
2.1  Komentare
2.2  Identifikatory  (Mena)
Externe identifikatory su pouzivane iba pre "forward" deklaraciu
typu funkcie , ostatne identifikatory su take ako opisane.
2.3  Klucove slova (sluzobne)
Ziadne rozdiely.
2.4   Konstanty
2.4.1 Celociselne konstanty
Ziadne rozdiely, ale poznamenavame ze long je to  iste  ako  int
(vid 2.6)
2.4.2 Explicitne dlhe konstanty
ako pre 2.4.1
2.4.3 Znakove konstanty
2.4.4 Konstanty s plavajucou ciarkou
2.5   Retazce
2.6   Charakteristiky hardware
          Z80
          ASCII
      char    8 bitov = 1 byte
      int    16         2
      short  16         2
      long   16         2
      float
      double
      range
Poznamenavame ze short , long, int su jedno a to iste.
3.    Notacia syntaxe
4.    Co je to meno?
Su dva rozdiely v triedach  pamate.  Prvy  je  ,  ze  registrove
premenne su vzdy pokladane  za  premenne  pretoze  nie  je  dost
registrov umoznujucich ulozit premenne! Klucove slovo 'register'
je  akceptovane  ale  ignorovane  takze  v  skutocnosti  nie  su
rozdiely oproti jazyku ktory akceptuje compiler  Hisoft.  Druhym
rozdielom je , ze  lokalne  premenne  musia  byt  deklarovane  v
hlavicke tela  funkcie  a  nemozu  byt  deklarovane  v  hlavicke
zahniezdeneho prikazu. Toto nie je vazne obmedzenie  v  praxi  a
moze byt obhajene na zaklade lahkeho pocopenia programov  -  ale
tiez pomaha zachovat maly kompiler!
Su poskytnute vsetky zakladne typy , ale  ako  bolo  poznamenane
hore short je to iste ako long a ako int.  Dufame  ,  ze  buduce
verzie budu zahrnat 8 bitove premenne short a 32 bitove premenne
long.
5.    Objekty a l hodnoty
6.    Konverzie
6.1   Znaky a cele cisla
Znamienkove rozsirenie sa neda pouzivat pri prevadzani znakov na
cele cisla, takze znak sa javi ako cislo v rozsahu 0..255.
6.2   Cisla s plavajucou ciarkou a dvojnasobna presnost
Nie su zatial implementovane takze tato cast nema vyznam.
6.3   Plavajuca ciarka a cele cisla
6.4   Ukazovatele a cele cisla
6.5   Cele cisla bez znamienka
6.6   Aritmeticke transformacie
7.    Vyrazy
Kompiler vo vseobecnosti pocita vyrazy z vnutra von a  zlava  do
prava, ale nemozno sa na to spolahnut pri dalsich kompileroch.
Celociselne  preplnenie  ,  akym  je  napr  delenie  nulou,   je
ignorovane.
7.1   Prvotne vyrazy
Argumenty funkcii su vyhodnocovane v poradi z lava  do  prava  a
ukladane do zasobnika po  vyhodnoteni.  Ako  hovori  prirucka  ,
nemozno sa na to spolahnut. Vid pozn. pri 7.
7.2   Unarne operatory
Syntax operatora konverzie typu je odlisna oproti prirucke kvoli
zjednoduceniu  kompilera  (    zaroven    sa    program    stava
citatelnejsim).  Operator  sa  vola  "cast"  a  musi  byt  udany
predefinovany typ alebo "  typedef-name"  ako  argument;  nebude
akceptovat anonymne "type-name" ako napr.:(int**()). Na  to  aby
sme presunuli existujuci C program do kompilera napiste  meno  v
typedef  deklaracii  a  pridajte  slovo  cast  pred    zatvorku.
Na to aby sme skompilovali program pouzivajuci tuto syntax  inym
kompilerom treba zadefinovat slovo cast tak aby nic neznamenalo.
Napr:
    #define cast
Operator "sizeof" ma podobnu syntax a akceptuje len predefnovany
typ alebo "typedef-name". Neakceptuje neznamy typ alebo vyraz.
Takze syntax je takato:
       jednoduchy vyraz:
          cast ( typovy specifikator ) vyraz
          sizeof ( typovy specifikator )
Tieto odlisnosti neobmedzuju programy, ktore maju byt napisane,
ale iba pozaduju, aby boli napisane tymto specialnym sposobom.
7.3   Multiplikativne operatory.
Tento kompilator je podobny kompilatoru opisanemu v  manuali, na
ktory sa odvolavame, kde zvysok  operatora  delenia  ma  rovnake
znamienko ako podiel. Takze orezanie je smerom k nule.
7.4   Aditivne operatory.
7.5   Posuvne operatory.
Aritmeticky posun sa vykona ked int je  posunute  vpravo,  takze
vysledok ma rovnake znamienko ako povodne.  Logicky  (zero-fill)
posun sa vykonava, ked bez znamienka  (neoznacene)  je  posuvana
vpravo.