/*	CLI-Befehl DateOfMake.

	Liefert Fault 10 fuer 'IF ERROR MakeChild' - Abfrage, falls:

		'CHILD: Datei' aelter ist als 'PARENT: Datei',
	   oder	'CHILD: Datei' nicht existiert.

	Autor: R. Gierlinger am 27.12.1988
*/
#include <libraries/dosextens.h>
#include <exec/memory.h>


#define FIB_SIZE sizeof(struct FileInfoBlock)
#define Equal(a,b) !strcmp(a,b)

#define notVader  >
#define  isVader  <
#define MakeChild FreeIt(10);

#define T_Pa Fib1->fib_Date.ds_Days
#define M_Pa Fib1->fib_Date.ds_Minute
#define S_Pa (Fib1->fib_Date.ds_Tick / 50)
#define T_Ch Fib2->fib_Date.ds_Days
#define M_Ch Fib2->fib_Date.ds_Minute
#define S_Ch (Fib2->fib_Date.ds_Tick / 50)

	void 		FreeIt();
	char 		Cap(char);
extern 	struct FileLock *Lock();

	struct FileInfoBlock 	*Fib1, *Fib2;
	struct FileLock 	*Lck1, *Lck2;


void main(argc,argv)
	int 	argc;
	char 	*argv[];
{
	register char 	*Str;

   if (argc!=5)
   { 	puts("Usage: "); puts(argv[0]);
	puts(" PARENT:/K/A,CHILD:/K/A\n",argv[0]);
	FreeIt(20);
   }

   Str = argv[1];
   if (  (Cap(Str[0])=='C')
      && (Cap(Str[1])=='H')
      && (Cap(Str[2])=='I')
      && (Cap(Str[3])=='L')
      && (Cap(Str[4])=='D')
      )
   { 	Str     = argv[2];
	argv[2] = argv[4];
	argv[4] = Str;
   }

   Lck1 = Lock(argv[2],ACCESS_READ);
   Lck2 = Lock(argv[4],ACCESS_READ);

   if (!Lck1)
   { 	puts(argv[2]); puts(" (PARENT) nicht gefunden !\n",argv[2]);
	FreeIt(20);
   }
   if (!Lck2) 	MakeChild

   Fib1 = (struct FileInfoBlock *)
	AllocMem( FIB_SIZE , MEMF_CLEAR|MEMF_PUBLIC );
   Fib2 = (struct FileInfoBlock *)
	AllocMem( FIB_SIZE , MEMF_CLEAR|MEMF_PUBLIC );
   if (!Fib1 || !Fib2) FreeIt(20);

   Examine(Lck1,Fib1);
   Examine(Lck2,Fib2);

   if      (T_Pa notVader T_Ch) MakeChild
   else if (T_Pa  isVader T_Ch) ;
   else if (M_Pa notVader M_Ch) MakeChild
   else if (M_Pa  isVader M_Ch) ;
   else if (S_Pa notVader S_Ch) MakeChild

   FreeIt(0);
}


void FreeIt(retNr)
	int retNr;
{
   if (Lck1) UnLock(Lck1);
   if (Lck2) UnLock(Lck2);
   if (Fib1) FreeMem(Fib1, FIB_SIZE );
   if (Fib2) FreeMem(Fib2, FIB_SIZE );
   exit(retNr);
}
char Cap(ch)
	char ch;
{
   if ((ch>='a') && (ch<='z'))  ch -= ('a'-'A');
   else
      switch(ch)
      {	case 'ä': ch = 'Ä'; break;
	case 'ö': ch = 'Ö'; break;
	case 'ü': ch = 'Ü'; break;
      }
   return (ch);
}
