PROGRAM convert;
{ primitives CLI-Tool, das VT.config/VT2.config in das neue System }
{ aus ".stations" und vielen Einzeldateien zerlegt }

TYPE str80 = String[80];
VAR cfgfile,stnfile,prsfile: Text;
    zeile,s: str80;
    i,lauf: Integer;
    is_header,copying: Boolean;

PROCEDURE civilize(s: str80; VAR s2: str80;);
{ String als DOS-Namen tauglich machen }
VAR i,k,l: Integer;
    sonder: String[8];
    uebers: String[15];
BEGIN
  sonder := '{|}[\]~'; uebers := 'aeoeueAEOEUEss';
  i := 1; k := 1;
  REPEAT
    CASE s[i] OF
      ' ': s2[k] := '_'; { Leerzeichen }
      '/',':': s2[k] := '-'; { Verzeichnis-Begrenzer }
      OTHERWISE s2[k] := s[i];
    END;
    l := Pos(s[i],sonder);
    IF l>0 THEN BEGIN
      s2[k] := uebers[2*l-1]; Inc(k); s2[k] := uebers[2*l];
    END;
    Inc(i); Inc(k);
  UNTIL s[i] = #0;
  s2[k] := #0;
END;

PROCEDURE name2dosname(s: str80; VAR s2: str80;);
{ ähnlich civilize, benutzt aber die ".stations"-Liste }
VAR zeile: str80;
    i,l: Integer;
BEGIN
  Seek(stnfile,0); s2 := '';
  WHILE NOT EoF(stnfile) DO BEGIN
    ReadLn(stnfile,zeile); i := Pos('=',zeile);
    IF i>1 THEN IF Copy(zeile,1,i-1)=s THEN BEGIN
      l := Length(zeile); WHILE l>0 DO BEGIN
        IF zeile[l]=' ' THEN zeile[l] := #0 ELSE l := 1;
        Dec(l);
      END;
      l := Length(zeile);
      s2 := Copy(zeile,i+1,l-i);
    END;
  END;
END;

BEGIN
  Reset(cfgfile,'VT.config');
  IF IOResult<>0 THEN BEGIN
    WriteLn('"VT.config" nicht gefunden');
    Exit;
  END;
  Reset(stnfile,'.stations');
  IF IOResult<>0 THEN BEGIN
    Write('Erster Durchgang: erstelle ".stations"-Datei ... ');
    ReWrite(stnfile,'.stations');
    is_header := True;
    WHILE NOT EoF(cfgfile) DO BEGIN
      ReadLn(cfgfile,zeile);
      IF zeile='' THEN
        is_header := True { auf eine Leerzeile folgt ein Titel }
      ELSE IF is_header THEN BEGIN
        civilize(zeile, s);
        WriteLn(stnfile,zeile,'=',s);
        is_header := False;
      END;
    END;
    Close(cfgfile); Close(stnfile);
    WriteLn('fertig.'); WriteLn;
    WriteLn('Sie sollten die ".stations"-Datei jetzt manuell überarbeiten (und z. B.');
    WriteLn('Eintraege wie "PRO SIEBEN=PRO_SIEBEN" in "PRO SIEBEN=Pro7" abändern, s.');
    WriteLn('Anleitung) und können "convert" danach für den zweiten Durchgang starten.');
  END ELSE BEGIN
    WriteLn('Zweiter Durchgang: erstelle Sender-Dateien ...');
    FOR lauf := 1 TO 2 DO BEGIN
      IF lauf=1 THEN
        WriteLn('VT.config ...')
      ELSE BEGIN
        Reset(cfgfile,'VT2.config');
        IF IOResult<>0 THEN BEGIN
          WriteLn('Hm, "VT2.config" nicht gefunden.');
          Exit;
        END ELSE
          WriteLn('VT2.config ...');
      END;
      is_header := True; copying := False;
      WHILE NOT EoF(cfgfile) DO BEGIN
        ReadLn(cfgfile,zeile);
        i := Length(zeile); WHILE i>0 DO BEGIN
          IF zeile[i]=' ' THEN zeile[i] := #0 ELSE i := 1;
          Dec(i);
        END;
        IF zeile='' THEN BEGIN
          is_header := True { auf eine Leerzeile folgt ein Titel }
          IF copying THEN Close(prsfile);
          copying := False;
        END ELSE IF is_header THEN BEGIN
          name2dosname(zeile, s);
          IF s='' THEN
            WriteLn('Warnung: kein ".stations"-Eintrag für "',zeile,'"')
          ELSE BEGIN
            copying := True;
            IF lauf=1 THEN
              ReWrite(prsfile,s)
            ELSE BEGIN
              Reset(prsfile,s)
              Seek(prsfile,FileSize(prsfile));
              WriteLn(prsfile);
            END;
          END;
          is_header := False;
        END ELSE IF copying THEN
          WriteLn(prsfile,zeile);
      END;
      Close(cfgfile);
    END;
    Close(stnfile);
    WriteLn; WriteLn('Fertig. Das war''s.');
  END;
END.

