diff options
Diffstat (limited to 'projects/Stacker/lib/runtime')
-rw-r--r-- | projects/Stacker/lib/runtime/stacker_rt.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/projects/Stacker/lib/runtime/stacker_rt.c b/projects/Stacker/lib/runtime/stacker_rt.c index 46edf14c13..7deb54d6ea 100644 --- a/projects/Stacker/lib/runtime/stacker_rt.c +++ b/projects/Stacker/lib/runtime/stacker_rt.c @@ -17,10 +17,13 @@ // //===----------------------------------------------------------------------===// +#include "ctype.h" #include "stdio.h" +#include "stdlib.h" extern long _index_; extern int _stack_[1024]; +extern void _MAIN_(); void _stacker_dump_stack_() @@ -32,3 +35,38 @@ _stacker_dump_stack_() printf("#%03d: %d\n", i, _stack_[i] ); } } + +int +main ( int argc, char** argv ) +{ + // Avoid modifying argc + int a = argc; + + // Make sure we're starting with the right index + _index_ = 0; + + // Copy the arguments to the stack in reverse order + // so that they get popped in the order presented + while ( a > 0 ) + { + if ( isdigit( argv[--a][0] ) ) + { + _stack_[_index_++] = atoi( argv[a] ); + } + else + { + _stack_[_index_++] = (int) argv[a]; + } + } + + // Put the argument count on the stack + _stack_[_index_] = argc; + + // Invoke the user's main program + _MAIN_(); + + // Return last item on the stack + if ( _index_ >= 0 ) + return _stack_[_index_]; + return -1; +} |