#include <exec/types.h>
#include <exec/memory.h>
#include <exec/libraries.h>

#include <proto/exec_protos.h>
#include <proto/dos_protos.h>

#include <stdlib.h>

#ifndef __COMMODORE_DATE__
#define __COMMODORE_DATE__ __DATE__
#endif

#define BASENAME "OffsDate"

const STATIC char VER[] = "$VER: " BASENAME " 1.0 (" __COMMODORE_DATE__ ")";
const STATIC char Basename[] = BASENAME;

__stkargs void _main(int unused_arglen,char *unused_argptr)
{
int ret = RETURN_FAIL;

   if ((DOSBase->lib_Version>=37) && (SysBase->lib_Version >= 37))
      {
      LONG array[] = { NULL, FALSE };
      struct RDArgs *rdargs = ReadArgs("DAYS/N,SUBST/S", array, NULL);
      if (rdargs)
	 {
	 char buffer[LEN_DATSTRING];
	 struct DateTime datetime;
	 LONG days = 0;

	 datetime.dat_Format  = FORMAT_DOS;
	 datetime.dat_Flags   = array[1] ? DTF_SUBST : 0;
	 datetime.dat_StrDay  = NULL;
	 datetime.dat_StrDate = buffer;
	 datetime.dat_StrTime = NULL;

	 if (array[0])
	    days = *(LONG *)array[0];

	 DateStamp(&datetime.dat_Stamp);
	 if (days<0)
	    {
	    if (datetime.dat_Stamp.ds_Days >= -days)
	       datetime.dat_Stamp.ds_Days += days;
	    else
	       datetime.dat_Stamp.ds_Days = 0;
	    }
	 else
	    datetime.dat_Stamp.ds_Days += days;

	 if (DateToStr(&datetime))
	    {
	    PutStr(buffer);
	    PutStr("\n");

	    ret = RETURN_OK;
	    }
	 else
	    PrintFault(ret = IoErr(),Basename);

	 FreeArgs(rdargs);
	 }
      else
	 PrintFault(ret = IoErr(),Basename);
      }
   else
      {
      if (DOSBase->lib_Version >= LIBRARY_MINIMUM)
	 {
	 if (Output())
	    {
	    Write(Output(),Basename,sizeof(Basename)-1);
	    Write(Output(),": Can't open dos.library v37 (OS 2.04)\n",39);
	    };
	 ret = ERROR_INVALID_RESIDENT_LIBRARY;
	 };
      };

   _exit(ret);
}


