/* This routine provides arguments to the main() routine */ /* */ /* The array element argv[argc] shall be a null pointer. */ /* */ /* */ .file_attr libGroup="crt"; .file_attr libName="libc"; .file_attr libFunc="___lib_setup_args"; .file_attr FuncName="___lib_setup_args"; .file_attr prefersMem="internal"; .file_attr prefersMemNum="30"; .file_attr libFunc="___lib_setup_environment"; #include "lib_glob.h" #define NUMBER_OF_ARGUMENTS 1 /* argv[argc] must be 0 */ .SEGMENT/SPACE Data_Space_Name; .VAR ___lib_argv[NUMBER_OF_ARGUMENTS + 1]; /* Arguments ptr array */ .VAR ___lib_arg1[4]; /* First arg string */ .ENDSEG; .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; .GLOBAL ___lib_setup_args; ___lib_setup_args: DM(I7,M7)=0; /* NULL terminate stack */ DM(I7,M7)=0; /* cc1 expects sp to be @fp-2*/ CALL (PC, ___lib_setup_argv) (DB); R4=NUMBER_OF_ARGUMENTS; /* Setup number of param*/ R8=___lib_argv; /* Point argv array */ RTS; ___lib_setup_argv: R0=NUMBER_OF_ARGUMENTS; /* Find length of argv */ I4=___lib_argv; /* Point to argv array */ L4=0; /* Zero length, JIC */ LCNTR=R0, DO clear_argv UNTIL LCE; clear_argv: DM(I4,M6)=0; /* Clear argv pointers */ init_argv: I4=___lib_argv; /* Point to argv array */ #if defined(__21160_GLITCH) nop; // Need a cycle between load and use of i4 #endif DM(I4,M6)=___lib_arg1; /* Set pointer to first */ DM(I4,M6)=0; /* Make sure argument list ends with NULL */ init_arg1: I4=___lib_arg1; #if defined(__21160_GLITCH) nop; // Need a cycle between load and use of i4 #endif DM(I4,M6)=97; /* 97 == ASC('a') */ DM(I4,M6)=100; /* 100 == ASC('d') */ RTS (DB); DM(I4,M6)=105; /* 105 == ASC('i') */ DM(I4,M6)=0; /* NULL terminate */ .___lib_setup_args.end: .ENDSEG;