MODULE TypeWriter;

  IMPORT Out;
  
  VAR sOn- : BOOLEAN;
    
  TYPE Register* = RECORD
                     ch*  : CHAR;
                     str* : ARRAY 128 OF CHAR;
                   END; 
  VAR r* : Register;              

(* —- основные процедуры *)  

  PROCEDURE Char*;
  BEGIN Out.Char(r.ch);
  END Char;

  PROCEDURE NewLine*;
  BEGIN Out.Ln;
  END NewLine;

  PROCEDURE String*;
  BEGIN Out.String(r.str);
  END String;

(* —- процедуры изменения состояний и регистров *)  

  PROCEDURE StateOn;
  BEGIN sOn := TRUE;
  END StateOn;
  PROCEDURE StateOff;
  BEGIN sOn := FALSE;
  END StateOff;
  
  PROCEDURE ResetRegister;
  BEGIN r.ch := 0X;  r.str[0] := 0X;
  END ResetRegister;

(* —- процедуры включения и выключения машины *)  
  
  PROCEDURE On*;
  BEGIN StateOn; ResetRegister;
  END On;
  
  PROCEDURE Off*;
  BEGIN StateOff; ResetRegister;
  END Off;
  
BEGIN
  On;
END TypeWriter.