Admin Panel
#ifndef INCSTACK_H
#define INCSTACK_H
#ifndef __AROS__
#error You should only include this on AROS.
#endif
#include <proto/exec.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C"
{
#endif
int real_main(int argc, char *argv[]);
int main(int argc, char *argv[])
{
struct Task *mytask = FindTask(NULL);
ULONG stacksize = (UBYTE *)mytask->tc_SPUpper - (UBYTE *)mytask->tc_SPLower;
int rc = 1;
if (stacksize >= (ULONG)__stack)
{
rc = real_main(argc, argv);
}
else
{
struct StackSwapArgs swapargs;
struct StackSwapStruct stack;
swapargs.Args[0] = argc;
swapargs.Args[1] = (IPTR)argv;
if ((stack.stk_Lower = AllocVec(__stack, MEMF_PUBLIC)))
{
stack.stk_Upper = (APTR)((IPTR)stack.stk_Lower + __stack);
stack.stk_Pointer = stack.stk_Upper;
rc = NewStackSwap(&stack, (void *)real_main, &swapargs);
FreeVec(stack.stk_Lower);
}
else
{
printf("Couldn't allocate %d bytes for stack.\n", __stack);
}
}
return rc;
}
#ifdef __cplusplus
}
#endif
#define main(x,y) real_main(x,y)
#endif