A CLU programozási nyelv

Párhuzamos végrehajtás



11. Program- és osztálykönyvtárak

11.1. Input és output


A CLU készítői elkezdtek kiépíteni egy szabvány típuskönyvtárat, de végül is nem tették bele a nyelv specifikációjába, hanem a következő fejlesztésük, az Argus nyelv fejlesztésénél használták fel. Tekintettel arra, hogy ez egy módszertani nyelvnek készült, eredetileg nem is terveztek ilyesmit.
 

11.1. Input és output

A CLU nyelvben az input/output ún. streamek használatával történik. Vannak csak olvasható és vannak csak írható streamek. Ha ugyanazt az eszközt írni is és olvasni is szeretnénk, két streamet kell hozzárendelnünk (egy csak írhatót és egy csak olvashatót).

Három művelet szolgál a "default" eszközökhöz kapcsolt streamek létrehozására:

stream$primary_input = proc () returns ( stream )
stream$primary_output = proc () returns ( stream )
stream$error_output = proc () returns ( stream )
A file-kezeléshez szükség van az operációs rendszer file-jaira való hivatkozásra. A CLU-ban erre a file_name típus használata ad lehetőséget. Egy streamet az
open = proc ( fn : file_name, mode : string ) returns ( stream )
utasítással rendelhetünk egy file-hoz. Az fn paraméter adja meg a file nevét, a mode pedig a használat módját ( read, write, append ). Mindhárom esetben új stream jön létre.

A write és append esetben új file jön létre, ha még nem volt fn nevű file. A read móddal megnyitott file csak olvasható, míg a write és az append móddal megnyitott file csak írható. A read és a write esetén a stream automatikusan a file elejére pozícionál, míg az append esetén a file végére. A stream megnyitási módját lekérdezhetjük a

stream$can_read = proc ( s : stream ) returns ( bool )
stream$can_write = proc ( s : stream ) returns ( bool )
eljárásokkal. A can_read eljárás pontosan akkor tér vissza true értékkel, ha az s stream csak olvasható, can_write eljárás pontosan akkor tér vissza true értékkel, ha az s stream csak írható.

A streamek alaphasználata karakterenként történik. Csak olvasható file-okra a

stream$getc = proc ( s : stream ) returns ( char )
eljárás törli és visszaadja a stream következő karakterét. A
stream$peekc = proc ( s : stream ) returns ( char )
eljárás visszaadja, de nem törli a stream következő karakterét. Csak írható file-okra a
stream$putc = proc ( s : stream, c : char)
eljárás az s streamhez hozzáfűzi a c karaktert.

Egy file-hoz rendelt stream esetén a

stream$close = proc ( s : stream )
eljárást használhatjuk a file és a stream közötti kapcsolat lezárására.

Az alábbi példaprogram a stream kezelést mutatja be:

% t-t a sor közepére helyezi
center = proc ( s : stream, t : string )
  cnt : int := ( 80 - string$size( t ) ) / 2
  stream$putspace( s, cnt )
  stream$putl( s, t ) % végére tesz egy end-of-line karaktert
end center
% beolvas egy egészt az s-ről
get_int = proc ( s : stream ) returns ( int )
  w : string := ""
  % beolvas egy számot
  while ~stream$empty( s ) do
    % megnéz egy karaktert anélkül, hogy kiolvasná
    c : char := stream$peekc( s )
    % kilép a ciklusból, ha már vége a számnak
    if c < '0' cor c  '9' then
      break
    end %if
    % a karaktert sztringgé kell konvertálni
    w := w || string$c2s( c )
    % kiolvassa a karaktert, ezzel törli
    stream$getc( s )
  end %while
  if w = "" then
    return ( 0 )
  end %if
  return ( int$parse( w ) ) % w-t egésszé alakítja
end get_int