| InitArgPtr | Function (Macro)

args.h

void InitArgPtr (CESI &ap);

Initializes a pointer to the first argument passed to the program.

InitArgPtr is a macro which initializes ap (which is a pointer of type ESI) to point to the first argument passed to the assembly program. Principally, calling

    InitArgPtr (argptr);

is equal to doing

    argptr = top_estack;

See top_estack for more info.
InitArgPtr must be used before the first call to GetStrnArg etc. Here is an example of a program which reads string or integer arguments passed to it, and displays them on the screen, one by one (called "Argument Test"):

    // An example of passing arguments to C program
    // Try this program calling argtest(arg1,arg2,...)

    #define USE_TI89
    #define USE_TI92PLUS
    #define USE_V200

    #define MIN_AMS 100

    #include <graph.h>
    #include <printf.h>
    #include <kbd.h>
    #include <args.h>

    void _main(void)
    {
      ESI argptr;
      int argtype;
      long num;
      InitArgPtr (argptr);
      while ((argtype = GetArgType (argptr)) != END_TAG)
        {
          DrawStr (0, 30, "                          ", A_REPLACE);
          if (argtype == STR_TAG)
            DrawStr (0, 30, GetStrnArg (argptr), A_REPLACE);
          else if (argtype == POSINT_TAG || argtype == NEGINT_TAG)
            {
              num = GetIntArg (argptr);
              if (argtype == NEGINT_TAG)
                num = -num;
              printf_xy (0, 30, "%ld", num);
            }
          else
            {
              DrawStr (0, 30, "Wrong arg type!", A_REPLACE);
              ngetchx ();
              break;
            }
          ngetchx ();
        }
    }

If the name of this program is example.89z, try to call it on the calculator using

    example ("strarg1", 123, -12, "strarg2")

to see how it works in practice.
Note: I used notation "&ap" in the prototype description, although passing by reference does not exist in ordinary C (only in C++). However, this macro is implemented in such a way that it simulates "passing by reference".

Uses: top_estack