//##ex mcpp:cppc -gs -o simpletask p:pLib/StartCode.o -pc simpletask.c p:pLib/StdIO.o -l pOSxA -l pOSStub -l pOS -l List

/*\
*** 29.01.1997, Michael Christoph, proDAD
*** Example:
\*/

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

#include <clib/exec_protos.h>
#include <clib/alib_protos.h>

#include <stdlib.h>
#include <stdio.h>

#ifdef LATTICE
int CXBRK(void) { return(0); }   /* Disable Lattice CTRL/C handling */
int chkabort(void) {return(0);}
#endif

UBYTE *vers = "$VER: simpletask 1.0 (29.01.1997) (proDAD, Michael Christoph)";

#define STACK_SIZE 1000L

/* Task name, pointers for allocated task struct and stack */
struct Task *task = NULL;
char *simpletaskname = "SimpleTask";

ULONG sharedvar;

/* our function prototypes */
void simpletask(void);
void cleanexit(UBYTE *,LONG);

int main(int argc,char **argv)
{
    int err;
    sharedvar = 0L;

    task = CreateTask(simpletaskname,0,simpletask,STACK_SIZE);
    if(task)
    {
      printf("This program initialized a variable to zero, then started a\n");
      printf("separate task which is incrementing that variable right now,\n");
      printf("while this program waits for you to press RETURN.\n");
      printf("Press RETURN now: ");
      getchar();

      printf("The shared variable now equals %ld\n",sharedvar);

      /* We can simply remove the task we added because our simpletask does not make */
      /* any system calls which could cause it to be awakened or signalled later.    */
      Forbid();
      DeleteTask(task);
      Permit();
      err=RETURN_OK;
    }
    else { printf("Can't create task\n"); err=RETURN_FAIL; }

#ifdef __pOS__
#else
    exit(err);
#endif
}

void simpletask()
{
    while(sharedvar < 0x8000000) sharedvar++;
    /* Wait forever because main() is going to RemTask() us */
    Wait(0L);
}

