(*****************************************)
(* (c) Copyright 1987 by Jens Kalski     *)
(*****************************************)
(* Programm         : WS-DECP            *)
(* Version          : 1.0 (02.03.1988)   *)
(* Sprache          : TURBO-PASCAL 3.0   *)
(* Programmiert auf : Schneider CPC464   *)
(* Betriebssystem   : Orig. f. CP/M 2.2  *)
(* Kurzbeschreibung : Umwandlung von .CP *)
(*                    in ^K-Markierungen *)
(*****************************************)

(*$U-,C-*)

PROGRAM WS_DECP;

CONST
  imAbsatz   : BOOLEAN = FALSE;
  ZeilenAnf  : BOOLEAN = TRUE;

VAR
  i,Fehler,
  BLaenge    : INTEGER;
  c,c2,cH,
  cC,cP      : CHAR;
  Zeile      : STRING(.10.);
  Name_In,
  Name_Out   : STRING (.14.);
  Dat_In,
  Dat_Out    : TEXT;

BEGIN
  CrtInit; ClrScr;
  LowVideo;
  WriteLn(' WS-DECP 1.0 (02.03.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);
    WriteLn;
    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
        WHILE NOT EoF(Dat_In) DO BEGIN
          Read(Dat_In,c);
          c2:=Chr(Ord(c) AND 127);
          CASE c2 OF
            '.' : IF ZeilenAnf THEN BEGIN
                    cC:=#0; cP:=#0;
                    IF NOT EoF(Dat_In) THEN Read(Dat_In,cC);
                    IF NOT EoF(Dat_In) THEN Read(Dat_In,cP);
                    IF (UpCase(cC) = 'C') AND (UpCase(cP) = 'P') THEN BEGIN
                      Write('C'); Zeile:=''; cH:=#0;
                      WHILE (NOT EoF(Dat_In)) AND (cH <> #10) DO BEGIN
                        Read(Dat_In,cH);
                        cH:=UpCase(Chr(Ord(cH) AND 127));
                        IF cH > #31 THEN Zeile:=Zeile+cH;
                      END;
                      REPEAT
                        Val(Zeile,BLaenge,Fehler);
                        IF Fehler<>0 THEN Delete(Zeile,Fehler,1);
                      UNTIL (Fehler=0) OR (Length(Zeile) = 0);
                      IF Length(Zeile) = 0 THEN BLaenge:=0;
                      IF BLaenge > 0 THEN BEGIN
                        Write(Dat_Out,^K);
                        imAbsatz:=TRUE;
                      END;
                    END
                    ELSE BEGIN
                      Write(Dat_Out,'.');
                      ZeilenAnf:=FALSE;
                      IF cC <> #0 THEN Write(Dat_Out,cC);
                      IF cP <> #0 THEN Write(Dat_Out,cP);
                      IF imAbsatz THEN BLaenge:=Succ(BLaenge);
                    END;
                  END
                  ELSE Write(Dat_Out,c);
            #13 : BEGIN
                    ZeilenAnf:=TRUE;
                    Write(Dat_Out,c);
                    IF imAbsatz THEN IF NOT EoF(Dat_In) THEN BEGIN
                      Read(Dat_In,c);
                      Write(Dat_Out,c);
                      c2:=Chr(Ord(c) AND 127);
                      IF c2 = #10 THEN BEGIN
                        BLaenge:=Pred(BLaenge);
                        IF BLaenge <= 0 THEN BEGIN
                          Write(Dat_Out,^K);
                          imAbsatz:=FALSE;
                        END;
                      END;
                    END;
                  END;
            #10 : Write(Dat_Out,c);
            ELSE ZeilenAnf:=FALSE; Write(Dat_Out,c);
          END; (* ELSE/CASE *)
        END;
        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
      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-DECP  BEISPIEL.TXT');
    WriteLn;
    LowVideo;
    WriteLn(' Die Eingabedatei heisst BEISPIEL.BAK ');
    WriteLn(' Die Ausgabedatei heisst BEISPIEL.TXT ');
    NormVideo;
  END;
END.  (* -------------------------- Programmende -------------------------- *)
