/* Date-Time.c
 *
 * 06.10.92 by Andreas Baum
 *
 * Dieses Programm erzeugt eine Datums- und Uhranzeige in der Titelzeile
 * des Workbenchbildschirmes. Dies hat den Vorteil, daß Programme die den
 * Workbenchbildschirm schließen wollen, auf kein offenes Fenster, wie es
 * bei anderen Uhren der Fall ist, treffen.
 *
 * Compiler DICE Version 2.06.38
 *
 * Compileraufruf :
 *
 * dcc -oRAM:Date-Time Date-Time.c
 *
 * Programmaufruf :
 *
 * 1. Workbench   :  Doppelklick auf Icon ( muß erst mit IconEdit erzeugt
 *                                          werden [ TOOLICON ] )
 * 2. CLI / Shell :  Run >NIL: Date-Time
 *
 * Ein erneuter Aufruf beendet das Programm */


#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <exec/execbase.h>
#include <exec/memory.h>
#include <workbench/startup.h>
#include <time.h>

extern struct  IntuitionBase    *IntuitionBase;
extern struct  ExecBase         *SysBase;
extern struct  WBStartup        *_WBMsg;

struct Screen   *scr,   *scr1;
struct Window   *win;
struct Task     *task;
struct tm       *zeit;

struct NewWindow nwin=
  {
    0,11,250,11,0,1,
    NULL,ACTIVATE|RMBTRAP,NULL,NULL,NULL,NULL,NULL,
    0,0,0,0,WBENCHSCREEN
  };

UBYTE buff[80], buff1[25];

UBYTE taskname[10]     = "D-T.0001";

UBYTE winnam1[27]     = "DATE-TIME BY ANDREAS BAUM";
UBYTE winnam2[28]     = "THANKS FOR USING DATE-TIME";

_main()
  {
    UBYTE x=0, y=0, ver;

    if ( FindTask ( "D-T.0001" ) == 0 )
      {
        task = ( struct Task * ) FindTask ( NULL );
        task->tc_Node.ln_Name = taskname;

        nwin.Title = winnam1;
        win = ( struct Window * ) OpenWindow ( &nwin );
        scr = win->WScreen;
        Delay ( 80 );
        CloseWindow ( win );

        if ( SysBase->LibNode.lib_Version < 37 )
          ver = 1;
        else
          ver = 2;

        FOREVER
          {
            time_t just;
            time ( &just );
            zeit = localtime ( &just );
            for ( y = 0 ; y < 15 ; y++ )
              {
                if ( ( strlen ( scr->Title ) < 65 || zeit->tm_min != x ) && ( strncmp ( scr->Title, "Amiga Workbench  ", 17 ) == 0 || strncmp ( scr->Title, "Workbench release.", 18 ) == 0 ) )
                  {
                    x = zeit->tm_min;
                    strftime ( buff1, 25, "%d %b %y  %H:%M", zeit );
                    if ( ver == 1 )
                      sprintf ( buff, "Workbench release.      %d free memory      %s", AvailMem ( MEMF_PUBLIC ), buff1);
                    else
                      sprintf ( buff, "Amiga Workbench  %d graphics mem  %d other mem  %s", AvailMem ( MEMF_CHIP ), AvailMem ( MEMF_FAST ), buff1);
                    scr->Title = buff;
                    ShowTitle ( scr, TRUE );
                  }
                Delay ( 10 );
              }
            scr1 = IntuitionBase->ActiveScreen;
            if ( scr1 != scr )
              {
                if ( strncmp ( scr1->Title, "Workbench Screen", 16 ) == 0 || strncmp ( scr1->Title, "Amiga Workbench  " ,17 ) == 0 || strncmp ( scr->Title, "Workbench release.", 18 ) == 0 )
                  scr = scr1;
              }
          }
      }
    else
      {
        Forbid();
        RemTask ( FindTask ( "D-T.0001" ) );
        Permit();

        nwin.Title = winnam2;
        win = ( struct Window * ) OpenWindow ( &nwin );
        Delay ( 80 );
        CloseWindow ( win );

        exit ( 0 );
      }
    _waitwbmsg();
  }
