(*******************************************)
(* (c) Copyright 1987 by Jens Kalski       *)
(*                       Heidbergredder 27 *)
(*                       2050 Hamburg 80   *)
(*******************************************)
(* Programm         : WS-CP                *)
(* Version          : 5.0 (28.02.1988)     *)
(* Sprache          : TURBO-PASCAL 3.0     *)
(* Programmiert auf : Schneider CPC464     *)
(* Betriebssystem   : CP/M 2.2             *)
(* Kurzbeschreibung : Halbautomatische     *)
(*                    Einfuegung von .CP   *)
(*                    in Textdateien       *)
(*******************************************)

(*$U-,C-*)

PROGRAM WS_CP;

CONST
  FIB_Save_Size = 176; (* Bei MS/DOS -> 76 *)

VAR
  OK,
  PFlag,
  imAbsatz  : BOOLEAN;     (* FALSE -> Ausserhalb eines markierten Absatzes *)
                           (* TRUE  ->  Innerhalb eines markierten Absatzes *)
  c         : CHAR;
  i,Zaehler : INTEGER;
  Name_In,
  Name_Out  : STRING (.14.);
  FIB_Save  : ARRAY(.1..FIB_Save_Size.) OF BYTE;
  Dat_In,
  Dat_Out   : TEXT;

BEGIN
  CrtInit; ClrScr;
  LowVideo;
  WriteLn(' WS-CP 5.0 (28.02.1988) ');
  NormVideo;
  WriteLn('(C) Copyright by Jens Kalski');
  WriteLn;
  IF ParamCount = 1 THEN BEGIN
    Name_In:=ParamStr(1);
    Name_Out:=Name_In;
    i:=Pos('.',Name_Out);
    IF i <> 0 THEN Name_Out:=Copy(Name_Out,1,Pred(i));
    WriteLn('Ich bearbeite ',Name_In);
    Assign(Dat_In,Name_In);
    (*$I-*) Reset(Dat_In); (*$I+*)
    IF IOResult = 0 THEN BEGIN
      Assign(Dat_Out,Name_Out+'$$$');
      (*$I-*) ReWrite(Dat_Out); (*$I+*)
      IF IOResult = 0 THEN BEGIN
        OK:=TRUE;
        imAbsatz:=FALSE;
        WHILE (NOT EoF(Dat_In)) AND OK DO BEGIN
          Read(Dat_In,c);
          CASE c OF
            #11,#139 : IF imAbsatz
                         THEN imAbsatz:=FALSE
                         ELSE BEGIN
                           Write('C');
                           Zaehler:=0;
                           PFlag:=TRUE;
                           imAbsatz:=TRUE;
                           Move(Dat_In,FIB_Save,FIB_Save_Size);
                           WHILE (NOT EoF(Dat_In)) AND PFlag DO BEGIN
                             Read(Dat_In,c);
                             CASE c OF
                               #10,#138 : Zaehler:=Succ(Zaehler);
                               #11,#139 : PFlag:=FALSE;
                             END;
                           END;
                           Move(FIB_Save,Dat_In,FIB_Save_Size);
                           IF PFlag
                             THEN BEGIN
                               LowVideo; Write(' FEHLER : '); NormVideo;
                               WriteLn('Die ^K-Zeichen sind nicht paarig !');
                               Close(Dat_In); Close(Dat_Out); Erase(Dat_Out);
                               OK:=FALSE;
                             END
                             ELSE WriteLn(Dat_Out,'.CP ',Zaehler);
                         END;
            ELSE Write(Dat_Out,c);
          END;
        END;
        IF OK THEN BEGIN
          Close(Dat_In);
          ReName(Dat_In,Name_Out+'.BAK');
          Close(Dat_Out);
          ReName(Dat_Out,Name_In);
          WriteLn; WriteLn;
          WriteLn('Fertig. Bitte }berpr}fen Sie den Text.');
        END;
      END
      ELSE BEGIN
        LowVideo; Write(' FEHLER : '); NormVideo;
        WriteLn(Name_Out,'.$$$ kann nicht geoeffnet werden !');
        Close(Dat_In);
      END;
    END
    ELSE BEGIN
      LowVideo; Write(' FEHLER : '); NormVideo;
      WriteLn(Name_In,' nicht gefunden !');
    END;
  END
  ELSE BEGIN
    WriteLn('Bitte rufen Sie das Programm folgenderma~en auf :');
    WriteLn;
    WriteLn('WS-CP  BEISPIEL.TXT');
    WriteLn;
    LowVideo;
    WriteLn(' Die Eingabedatei heisst BEISPIEL.BAK ');
    WriteLn(' Die Ausgabedatei heisst BEISPIEL.TXT ');
    NormVideo;
  END;
END.  (* -------------------------- Programmende -------------------------- *)
