/* * xarg.c * 10/10/88 * Sample implementation (in Turbo C) of a program, which gets its arguments * via xArg, including legality checks. */ #include #include #include #include typedef struct { char xarg_magic[4]; /* "xArg" == 0x78417267L */ int xargc; /* As argc in main() */ char **xargv; /* As argv in main() */ char *xiovector; /* Not used */ BASPAG *xparent; /* Points to the basepage of the */ /* caller. Type declaration in tos.h */ } XARG; main(void) { extern BASPAG *_BasPag; /* defined in TCSTART.O */ XARG *xarg; char *xenv; unsigned long x; int i; if ((xenv=getenv("xArg"))!=NULL) { x = strtoul(xenv,NULL,16); printf("xArg structure at %08lX\n",x); if ((x!=0) && (x%2==0)) { xarg = (XARG *)x; if (!strncmp(xarg->xarg_magic,"xArg",4)) { if (xarg->xparent == _BasPag->p_parent) { /* Everything ok. Process arguments */ for (i=0; ixargc; ++i) printf("%d: %s\n",i,xarg->xargv[i]); } else printf("xArg parent != my parent\n"); } else printf("xArg magic number not found\n"); } else printf("illegal xArg address (0 or odd)\n"); } else printf("xArg not in environment\n"); return 0; }