(****************************************)
(* (c) Copyright 1987 by Jens Kalski    *)
(****************************************)
(* Programm         : WS-PAAR           *)
(* Version          : 2.0 (28.02.1987)  *)
(* Sprache          : TURBO-PASCAL 3.0  *)
(* Programmiert auf : Schneider CPC464  *)
(* Betriebssystem   : CP/M 2.2          *)
(* Kurzbeschreibung : Test auf paariges *)
(*   Vorkommen von Druckersteuerzeichen *)
(****************************************)

(*$U-,C-*)

PROGRAM WS_PAAR;

LABEL Ex;

CONST
  OK            : ARRAY(.BOOLEAN.) OF STRING(.10.) = (^X'Ungerade'^X,'OK');
  Puffer_P_Size = 256;
  Puffer_B_Size = 32767;

VAR
  b          : BYTE;
  gelesen_P,
  Zaehler    : INTEGER;
  Flag       : ARRAY(.0..255.) OF BOOLEAN;
  Puffer     : ARRAY(.0..Puffer_B_Size.) OF BYTE;
  Name_In    : STRING(.14.);
  Dat_In     : FILE;

BEGIN
  CrtInit; ClrScr;                                   (* Bildschirm loeschen *)
  LowVideo;
  WriteLn(' WS-PAAR 2.0 (28.02.1987) ');      (* Ueberschrift und Copyright *)
  NormVideo;
  WriteLn('(C) Copyright by Jens Kalski, Heidbergredder 27, 2050 Hamburg 80');
  WriteLn;
  IF ParamCount=1 THEN BEGIN                        (* Parameter uebergeben *)
    Name_In:=ParamStr(1);                         (* Dateinamen uebernehmen *)
    Assign(Dat_In,Name_In);                              (* Dat_In anmelden *)
    (*$I-*) Reset(Dat_In); (*$I+*)                        (* Dat_In oeffnen *)
    IF IOResult=0 THEN BEGIN                         (* Oeffnen erfolgreich *)
      Write('Getestet wird '); LowVideo;
      WriteLn(' ',Name_In,' '); NormVideo;
      WriteLn;
      FillChar(Flag,SizeOf(Flag),Ord(TRUE));
      REPEAT                                   (* Solange Zeichen in Dat_In *)
        BlockRead(Dat_In,Puffer,Puffer_P_Size,gelesen_P);     (* Blocklesen *)
        IF gelesen_P > 0 THEN BEGIN
          FOR Zaehler:=0 TO Pred(gelesen_P SHL 7) DO BEGIN
            b:=Puffer(.Zaehler.);
            CASE b OF
              26  : GOTO Ex;                                   (* Dateiende *)
              138 : Write('*');                            (* Seitenumbruch *)
              ELSE Flag(.b.):=NOT Flag(.b.);               (* Alle Zeichen  *)
            END;
          END;
        END;
      UNTIL (gelesen_P = 0) OR (b = 26);
Ex:   Close(Dat_In);                                   (* Dat_In schliessen *)
      WriteLn;                                           (* Ergebnisausgabe *)
      WriteLn('^A^N --> ',OK(.(Flag(.1.)  = Flag(.129.)) =
                              (Flag(.14.) = Flag(.142.)).));
      WriteLn('^B   --> ',OK(. Flag(.2.)  = Flag(.130.).));
      WriteLn('^D   --> ',OK(. Flag(.4.)  = Flag(.132.).));
      WriteLn('^P   --> ',OK(. Flag(.16.) = Flag(.144.).));
      WriteLn('^Q   --> ',OK(. Flag(.17.) = Flag(.145.).));
      WriteLn('^R   --> ',OK(. Flag(.18.) = Flag(.146.).));
      WriteLn('^S   --> ',OK(. Flag(.19.) = Flag(.147.).));
      WriteLn('^T   --> ',OK(. Flag(.20.) = Flag(.148.).));
      WriteLn('^V   --> ',OK(. Flag(.22.) = Flag(.150.).));
      WriteLn('^W   --> ',OK(. Flag(.23.) = Flag(.151.).));
      WriteLn('^X   --> ',OK(. Flag(.24.) = Flag(.152.).));
      WriteLn('^Y   --> ',OK(. Flag(.25.) = Flag(.153.).));
    END
    ELSE WriteLn('Fehler: Die Dat_In ',Name_In,            (* IOresult <> 0 *)
                 ' kann nicht ge|ffnet werden!');
  END
  ELSE BEGIN                          (* Programm ohne Parameter aufgerufen *)
    WriteLn('Bitte rufen Sie das Programm folgenderma~en auf :');
    WriteLn;
    LowVideo; WriteLn('WS-PAAR  BEISPIEL.TXT'); NormVideo;
    WriteLn;
    WriteLn('Getestet wird auf folgende Eigenschaften');
    WriteLn('der WORDSTAR-Textdatei:');
    WriteLn;
    WriteLn('(Anzahl der ^A) = (Anzahl der ^N) ?');
    WriteLn('^B,^D,^P,^S,^T,^V,^X und ^Y paarig ?');
  END;
END.
