aboutsummaryrefslogtreecommitdiff
path: root/projects/Stacker/lib/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'projects/Stacker/lib/runtime')
-rw-r--r--projects/Stacker/lib/runtime/stacker_rt.c38
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;
+}