(* ------------------------------------------------------------------------
  :Program.       IconImageToOtherIcon IItoI
  :Author.        Kai Bolay
  :Address.       Hoffmannstraße 168
  :Address.       7250 Leonberg 1
  :Phone.         07152/22135
  :Copyright.     PublicDomain
  :History.       v1.0 Kai Bolay 25-Nov-89 Initial
  :Language.      Modula-2
  :Translator.    M2Amiga 3.3d
------------------------------------------------------------------------ *)

MODULE IItoI;

FROM SYSTEM     IMPORT ADR;
FROM Arts       IMPORT Assert, TermProcedure;
FROM Arguments  IMPORT NumArgs, GetArg;
FROM Icon       IMPORT GetDiskObject, PutDiskObject, FreeDiskObject;
FROM Workbench  IMPORT DiskObjectPtr;
FROM Intuition  IMPORT Gadget;
FROM Terminal   IMPORT WriteString, WriteLn;


VAR Icon     : ARRAY [1..2] OF DiskObjectPtr;
    IconName : ARRAY [1..2] OF ARRAY [1..30] OF CHAR;
    len, i   : INTEGER;
    Backup   : Gadget;
    Error    : BOOLEAN;

PROCEDURE CleanUp;

BEGIN
   FOR i := 1 TO 2 DO
      IF Icon[i] # NIL THEN
         FreeDiskObject (Icon[i]);
         Icon[i] := NIL;
      END; (* IF *)
   END; (* FOR *)
END CleanUp;


BEGIN
   FOR i := 1 TO 2 DO
      Icon[i] := NIL;
   END; (* FOR *)
   TermProcedure (CleanUp);
   WriteString ("(I)con (I)mage (t)o (o)ther (I)con © 1990 by Kai Bolay");
   WriteLn;
   Error := FALSE;
   IF NumArgs() # 2 THEN
      Error := TRUE;
   ELSE
      Error := FALSE;
      FOR i := 1 TO 2 DO
         GetArg (i, IconName[i], len);
         Icon[i] := GetDiskObject (ADR (IconName[i]));
         IF Icon[i] = NIL THEN
            Error := TRUE;
            IF i = 1 THEN WriteString ("Unable to open Icon for input!");
                     ELSE WriteString ("Unable to open Icon for output!"); END;
            WriteLn;
         END; (* IF *)
      END; (* FOR *)
      IF NOT (Error) THEN
         Backup := Icon[2]^.gadget;
         Icon[2]^.gadget := Icon[1]^.gadget;
         IF NOT (PutDiskObject (ADR (IconName[2]), Icon[2])) THEN
            Error := TRUE;
            WriteString ("Unable to write modified Icon!"); WriteLn;
         END; (* IF *)
         Icon[2]^.gadget := Backup;
      END; (* IF *)
   END; (* IF *)
   IF Error THEN
      WriteString ("Usage: IItoI <FromIcon> <ToIcon> ('.info' will be added)");
      WriteLn;
   END; (* IF *)
END IItoI.
