(*------------------------------------------

  :Module.      Cd2Oberon.mod
  :Author.      Albert Weinert  [awn]
  :Address.     Krähenweg 21 , 50829 Köln
  :EMail.       Usenet_> aweinert@darkness.gun.de
  :EMail.       Z-Netz_> A.WEINERT@DARKNESS.ZER
  :Phone.       0221 / 580 29 84
  :Revision.    R.1
  :Date.        17-May-1993
  :Copyright.   Albert Weinert
  :Language.    Oberon-2
  :Translator.  Amiga Oberon 3.00d
  :Contents.    Konvertiert eine CatalogDescription Datei in ein Oberon Modul
  :Contents.    anstatt wie CatComp C oder Assembler Source zu erzeugen.
  :Imports.     C2OData.mod, Cd2OberonVersion.mod, Cd2OberonLocale.mod [awn]
  :Imports.     CDInput.mod, OberonOutput.mod [awn]
  :Remarks.     <Was Du willst, evtl. Usage>
  :Bugs.        <Bekannte Fehler>
  :Usage.       Cd2Oberon <description> <module>
  :History.     .0     [awn] 16-May-1993 : Erstellt
  :History.     .1     [awn] 17-May-1993 : Argumente werden ausgewertet, evtl.
  :History.            die Fehlermeldungen ausgeben, und sonstige Texte ausgeben.
  :History.     Added failure check to ReadArgs()
--------------------------------------------*)
MODULE Cd2Oberon;

IMPORT  ci:=CDInput,
        oo:=OberonOutput,
        Dos,Exec,SYSTEM,
        cd:=C2OData,
        cv:=Cd2OberonVersion,
        cl:=Cd2OberonLocale;

CONST Template = "CDFILE/A,MODFILE/A,L=LANGUAGE/K,BL=BUILTINLANGUAGE/K,VER=VERSION/K/N";

VAR rd: Dos.RDArgsPtr;
    Opt : STRUCT;
            cdfile   : Exec.STRPTR;
            modfile  : Exec.STRPTR;
            language : Exec.STRPTR;
            blanguage : Exec.STRPTR;
            version  : POINTER TO LONGINT;
          END;
    cdfile, modfile, language : Exec.STRING;
BEGIN
  Dos.PrintF("%s © 1993 Albert Weinert\n\n",SYSTEM.ADR(cv.nameVer));
  rd:=Dos.ReadArgs(Template,Opt,NIL);
  IF rd = NIL THEN
    Dos.PrintF ("Usage: %s\n", SYSTEM.ADR (Template));
    HALT (20);
  END;
  (* $OddChk- *)
  COPY(Opt.cdfile^,cdfile);
  COPY(Opt.modfile^,modfile);
  IF Opt.language # NIL THEN
    COPY(Opt.language^,language);
  END;
  IF Opt.blanguage # NIL THEN
    COPY(Opt.blanguage^,cd.SList.language);
  END;
  IF Opt.version # NIL THEN
    cd.SList.version:=Opt.version^;
  END;
  cl.OpenCatalog(language);
  (* $OddChk= *)
  IF rd # NIL THEN
    Dos.PrintF(cl.GetString(cl.msgLoadDesc)^,SYSTEM.ADR(cdfile));
    IF ci.Import(cdfile) THEN
      Dos.PrintF(cl.GetString(cl.msgSaveMod)^,SYSTEM.ADR(modfile));
      IF oo.Create(modfile,cdfile) THEN
        Dos.PrintF(cl.GetString(cl.msgOk)^);
      END;
    END;
  END;
CLOSE
  IF rd # NIL THEN Dos.FreeArgs(rd) END;
  IF cd.error # 0 THEN
    Dos.PrintF("\n");
    Dos.PrintF(cl.GetString(cd.error)^,cd.para1,cd.para2);
    Dos.PrintF("\n");
    HALT(20);
  END;
END Cd2Oberon.
