readfile(fp,eofu)    /* definovanie  readfile */
int fp, eofu;
{    int c;
     printf("\nCitanie...\n");
     while (c=getc(4))!=eofu)  /* citaj znaky z kanala 4 */
       if (c!=0)    /* pokial nepride koncovy znak. Ak c< >0 */
       {           /* potom znak uloz do suboru */
        putc(c,fp);
        if (c=='\n')   /* zameni LF za CR   */
          c = '\r';
        putchar(c);   /* echo na obrazovku */
       }
     printf("\nSubor je nacitany.\n");
}      /* koniec   readfile  */
1.8 Bibliografia
The C Programing Language
Brian Kernighan & Dennis Ritchie         Prentice-Hall 1978
Learning to Program in C
Thomas Plum                              Prentice-Hall 1983
The Complete Spectrum ROM Disassembly
Ian Logan & Frank O'Hara                 Melbourne House 1983
Ak chces volat ROM rutiny tak je dobre mat tuto knihu.
                 2. EDITOR
           2.1. UVOD DO EDITORA
Editor, ktory sa dodava  spolocne  s  kompilatorom  HISOFT-C  je
jednoduchy riadkovy editor, navrhnuty tak aby bol jednoduchy pri
pouziti  a  aby  poskytoval  moznost  rychleho  a    efektivneho
editovania programu.
Editor Vam umoznuje pracovat na programe bez  pouzivania  kazety
(pripadne  Microdrivu)  okrem  situacie,  ked   chcete   program
zaznamenat na kazetu. Znamena to, ze mozete  s  pomocou  editora
napisat program, potom tento program skompilovat a otestovat,  s
navratmi  do  editora  pri  opravach  alebo  pridavani   dalsich
riadkov, az pokial nebude program ukonceny. Editor udrziava text
Vasho programu v pamati a umoznuje Vam  pridavat  nieco  naviac,
pripadne zmenit nieco co uz v pamati  je  alebo  nieco  vymazat.
Kompilator moze potom precitat a skompilovat  text  (s  pouzitim
"*include"). Editor tak isto dokaze  vydat  text  na  zaznam  na
kazetu alebo Microdrive  (pomocou  "p")  a  nacitat  tento  text
naspat (pomocou "g"). Kompilator takisto  dokaze  nacitat  tieto
subory  z  pasky  alebo  Microdrivu  (pomocou  "#include   nazov
suboru").
Ak chcete pristupit k pouzitiu editora potom, ako ste kompilator
uz pouzili,  musite  stlacit  sucasne  klavesy  CAPS-SHIFT  a  1
(pripadne EDIT  na  Spectrum  +),  a  potom  klavesu  ENTER.  Po
stlaceni klavesy EDIT  uvidite  zvisly  blok  ,  a  po  stlaceni
klavesy ENTER spravu "edit:", za ktorou nasleduje znak editora
 ">".
Existuje specialny sposob vstupu do editoru po hlaseni  chyby  (
ERROR ), pomocou ktoreho sa lahsie  opravuju  chyby.  Potom  ako
kompilator vytlacil chybove hlasenie a zastavil sa bude ocakavat
pokial stlacite klavesu. Ak stlacite EDIT vykona editor prikaz E
( editovat  riadok)  pre  posledny  kompilovany  riadok.  Mozete
opravu vykonat okamzite a pokracovat.  Ak  po  chybovom  hlaseni
stlacite akukolvek inu klavesu vratite sa naspat do kompilatora.
Ako odpoved na znak editora ">" mozete zadat prikazovy riadok na
sledovneho formatu:
C N1, N2, S1, S2 za ktorym nasleduje ENTER.
Tak napriklad ak chcete nahradit slovo "fred" slovom "tom" v
riadkoch 1-50 suboru, mali by ste napisat:
F1,50,fred,tom(ENTER)
C   je prikaz, ktory ma byt vykonany
N1  je cislo v rozsahu 1-32767 vratane
N2  je cislo v rozsahu 1-32767 vratane
S1  je retazec znakov o maximalnej dlzke 20
S2 je retazec znakov o maximalnej dlzke 20.
Iba velmi maly pocet prikazov editora  potrebuje  alebo  ocakava
vsetkych pat casti prikazoveho riadku a v  niektorych  pripadoch
bude vacsina z nich aj tak nevhodna.
Pre navrat do kompilatora C musite zadat "C", za ktorym
nasleduje ENTER. Takisto mate moznost vratit sa do BASIC-u tak,
za zadate "B", za ktorym nasleduje ENTER.
Editor v mnohych svojich prikazoch pouziva cisla riadkov.  Tieto
cisla riadkov pouziva iba editor a  v  suboroch  na  magnetickej
paske alebo na Microdrive nie su uschovane a ani kompilator  ich
nepouziva. Cisla riadkov vydava automaticky editor ak  sa  subor
nacitava z pasky alebo ak ich zadavate  prostrednictvom  prikazu
"I". Z tohoto dovodu  bude  najlepsie  ak  tieto  cisla  riadkov
budete povazovat iba za informacne, ktore sa  vydavaju  iba  pre
Vas uzitok ak pouzivate editor.
Ciarka sa pouziva ako oddelovac  rozlicnych  parametrov  (i  ked
moze byt zmeneny - vid prikaz  "S")  a  medzery  su  ignorovane,
okrem pripadu ak sa vyskytytuju v  retazcoch.  Ziadny  z  tychto
parametrov nie je povinny  i  ked  niektore  prikazy  (napriklad
prikaz "D"elete) nebudu vykonane ak nezadate N1 a N2. EDITOR  si
pamata  predchadzajuce  cisla  a  retazce,  ktore  ste   predtym
zadavali,  a  pouziva  tieto  predchadzajuce  hodnoty   ak    su
pouzitelne, a ak v ramci prikazoveho riadku nezadate konkretny
argument. Hodnoty N1 a N2  su  inicializovane  najprv  na  10  a
retazce su prazdne.
Ak  zadate  nedovoleny   prikazovy    riadok,    ako    povedzme
F-1,100,HELLO bude  riadok  ignorovany  a  zobrazi  sa  hlasenie
"Pardon?" - potom by ste  mali  prepisat  riadok  spravne,  t.j.
F1,100,HELLO. Toto chybove hlasenie bude  takisto  zobrazene  ak
prekroci dlzka S2 hodnotu 20; ak je dlzka S1 vacsia ako 20  budu
vsetky nadbytocne znaky ignorovane.
Prikazy mozu byt zadavane velkymi aj malymi pismenami.
Jednotlive prikazy, ktore su v ramci editora  k  dispozicii,  sa
opisuju v dalsom texte - vsimnite si ze  vzdy,  ak  je  argument
uzavrety do znakov "< >" musi byt tento argument uvedeny aby  sa
prikaz mohol vykonat.
Text moze byt do textoveho suboru  zadavany  bud  zadanim  cisla
riadku,  medzery  a  pozadovaneho  textu,  alebo  prikazom  "I".
Pripominame, ze ak zadate  cislo  riadku,  za  ktorym  nasleduje
ENTER (t.j. bez textu), sposobi to vymazanie riadku z  textu  ak
riadok predtym existoval.
Text sa zadava v riadkoch a kazdy riadok moze mat  maximalne  80
znakov. Ak sa dostanete na  koniec  riadku  obrazovky  potom  sa
obrazovka posunie o jeden riadok nahor a  mozete  pokracovat  na
nasledujucom riadku obrazovky.
Prikaz DELETE (CAPS-SHIFT  0)  sa  moze  pouzivat  na  vymazanie
znaku, ktory sa nachadza nalavo od kurzora a moze  sa  opakovane
stlacat pri vymazavani  vacsieho  poctu  znakov  (avsak  nie  za
zaciatkom textoveho riadku).
Text sa uschovava  v  pamati  a  je  teda  mozne,  ze  sa  pamat
preplni.  Ak  sa  to  stane  vyda  kompilator  normalne  chybove
hlasenie:
ERROR 60
LIMIT: no more memory
Ak chcete usporit pamat mozete uschovat  (PUT)  urcity  text  na
kazete  alebo  na  Microdrive,  alebo  mozete  vyuzit    moznost
kompilatora *error  na  potlacenie  chybovych  hlaseni  a  potom
opatovne prejst do editora.
Po  zostaveni  textu  urcite  bude  potrebne  editovat  niektore
riadky. Na opravovanie,  vymazavanie,  presuny  a  precislovanie
riadkov mame rozlicne  prikazy.  Vacsina  prikazov  sa  vykonava
okamzite, avsak prikaz EDIT "E" vyvola urcity riadok,  ktory  sa
potom moze editovat s pouzitim dalsich editovaich prikazov:
2.2. INSERT TEXT (zadavat text)        Prikaz: I m,n
Editor bude zobrazovat cisla riadkov a Vy mozete  zadavat  text.
Cisla  riadkov  zacinaju  od  m  a  pokracuju  s  krokom  n.  Za
zobrazenym cislom riadku zadavajte pozadovany  text,  pouzivajuc
rozlicne riadiace kody ak to je potrebne. Riadok textu ukoncite
stlacenim ENTER.
Ak ste napisali vsetky riadky, ktore ste chceli napisat, stlacte
EDIT (CAPS-SHIFT 1) a potom ENTER.
Ak zadate riadok s cislom riadku, ktore  uz  v  texte  existuje,
bude existujuci riadok vymazany a  nahradeny  novym  riadkom  po
stlaceni ENTER.  Ak  automaticka  inkrementacia  cisiel  riadkov
povedie k cislu  riadku  vacsiemu  ako  32767  bude  automaticky
zruseny rezim Insert.
2.3. LISTING TEXTU NA OBRAZOVKE Prikaz: L m,n
Zobrazi sa listing textu, ktory je prave v pamati  od  riadku  s
cislom m po riadok s cislom n, vratane. Vzdy ak neudame  hodnotu
m bude dosadena hodnota 1 a namiesto neuvedenej hodnoty  n  zasa
32767,  t.j.  tieto  hodnoty   nie    su    dosadzovane    podla
predchadzajucich zadanych hodnot.  Ak  chcete  zobrazit  listing
celeho textoveho suboru jednoducho pouzite "L" bez argumentov.
Po zobrazeni listingu urciteho poctu riadkov sa listing  prerusi
a ak chcete ukoncit listing predcasne, stlacte EDIT. Po stlaceni
ktorejkolvek  inej  klavesy  listing  pokracuje.  Pocet  sucasne
zobrazovanych riadkov listingu moze byt zadany  pomocou  prikazu
K, ktory sa uvadza v dalsom texte.
2.4. OVLADANIE DLZKY LISTINGU          Prikaz: K n
"K" nastavuje pocet riadkov obrazovky, na ktorych bude zobrazeny
listing pred prerusenim listingu ako sa to popisovalo pre prikaz
"L". Tak napriklad, pouzite K 5 ak chcete aby nasledujuci prikaz
"L" vydaval sucasne 5 riadkov listingu na obrazovku.  Editor  sa
inicializuje s hodnotou K rovnou 5. Hodnota K nemoze byt  vacsia
ako 255.
2.5. VYPIS TEXTU NA TLACIAREN Prikaz: W m,n
Prikaz "W" vydava na tlaciaren cast textu medzi riadkami m a  n,
vratane. Ak sa m ani n  neuvedie, bude  vytlaceny  cely  textovy
subor. Tlac mozete prerusit stlacenim klavesy BREAK  (CAPS-SHIFT
a SPACE) a vratite sa do editora.
2.6. ZOBRAZENIE DOSADZOVANYCH HODNOT Prikaz: V
Prikaz "V" zobrazuje aktualny oddelovac, aktualne hodnoty  dvoch
dosadzovanych cisiel riadkov a dosadzovanych  retazcov  N1,  N2,
S1, S2. Je to uzitocne pred zadanim akehokolvek prikazu v ktorom
chcete pouzit dosadzovane  hodnoty  na  kontrolu,  ci  su  tieto
hodnoty spravne.
Prikazom  sa  takisto  zobrazi  startovacia  a  konecna   adresa
textoveho suboru  v  dekadickej  sustave.  Je  to  uzitocne  pre
pripad, ze chcete uschovat text na mediu z BASICU,  pripadne  ak
sa chcete pozriet kolko pamate Vam zostava za textovym suborom.
2.7. ZADAT ODDELOVAC                   Prikaz: S,,d
Tento prikaz Vam umoznuje zmenit oddelovac, ktory sa pouziva  na
oddelovanie  argumentov  v  prikazovom  riadku.  Pri  vstupe  do
editora sa ako oddelovac  pouziva  ciarka  ",";  toto  moze  byt
zmenene pouzitim prikazu "S" s prvym znakom retazca d. Pamatajte
si ze po nadefinovani noveho oddelovaca  musite  tento  pouzivat
(dokonca aj s prikazom "S") az dokial nezadate  novy  oddelovac.
Na zobrazenie aktualneho oddelovaca pouite prikaz "V".
Pripominame, ze oddelovacom nemoze byt medzera.
2.8. NAVRAT DO KOMPILATORA C           Prikaz: C
Ak chcete po ukonceni editovania skompilovat Vas text, staci  ak
stlacite "C" a ENTER.
2.9. NAVRAT DO BASICU                  Prikaz: B
Mozete sa vratit do BASICU ak stlacite "B" a ENTER. Moze to  byt
uzitocne ak chcete otvorit alebo uzavriet  stream  (povedzme  na
seriovy kanal), pripadne nacitat alebo zaznamenat  urcite  data.
Ak potom chcete prejst naspat do kompilatora C treba zadat:
RANDOMIZE USR 25200
Ak sa nechcete vratit naspat, ale namiesto toho chcete  pouzivat
BASIC, budete  musiet  RESETovat  Vase  Spectrum  (Pripadne  vid
Low-Level Interface).
2.10. VYMAZAT RIADKY                   Prikaz: D <m,n>
Vsetky riadky od m do n,  vratane,  budu  vymazane  z  textoveho
suboru. Ak je m > n, pripadne  ak  sa  nezadaju  oba  parametre,
nebude vykonana ziadna cinnost. Jediny riadok sa da vymazat tak,
ze zadame D m,m ENTER.  Jeden  riadok  sa  da  vymazat  tak,  ze
napiseme iba jeho cislo a stlacime ENTER.
2.11. PRESUNUT RIADOK                  Prikaz: M m,n
Text, zadany na riadku m bude presunuty na  riadok  n  a  vymaze
akykolvek text, ktory tu predtym bol. Pripominame, ze  riadok  m
zostava prazdny. To znamena, ze prikaz "M"ove umoznuje  presunut
textovy riadok na ine  miesto  textoveho  suboru.  Ak  riadok  s
cislom m neexistuje, nebude vykonana ziadna cinnost.
2.12 PRECISLOVAT TEXT                  Prikaz: N <m,n>
Ak pouzijete prikaz "N", bude precislovany cely textovy subor  s
cislom prveho riadku m a krokom n. Musi sa zadat m aj n a ak  by
precislovanie sposobilo, ze dostaneme riadok s cislom vacsim ako
32767, zostane zachovane povodne cislovanie.
2.13. EDITOVAT RIADOK                  Prikaz: E n
Editovat riadok s cislom n. Ak  n  neexistuje,  nebude  vykonana
ziadna cinnost; v  opacnom  pripade  bude  riadok  zobrazeny  na
obrazovke (aj s cislom riadku) a  cislo  riadku  bude  zobrazene
opat pod riadkom. Za cislom riadku sa objavi kurzor a  potom  sa
mozu pouzit specialne editovacie prikazy  na  editovanie  tohoto
riadku:
=>       (CAPS-SHIFT 8 - nie SYMBOL-SHIFT E!) krok na dalsi
         znak riadku. Nie je mozne dostat sa za koniec riadku.
<=       (CAPS-SHIFT 5 - nie SYMBOL-SHIFT Q!) krok naspat na
         predchadzajuci znak riadku. Za zaciatok riadku  nie  je
         mozne sa dostat.
ENTER    Ukonci editovanie tohoto riadku s  ponechanim  vsetkych
         uskutocnenych zmien.