#include <exec/execbase.h>#include <dos/rdargs.h>#include <dos/dos.h>#include <clib/dos_protos.h>#define  BUFLEN    200#define  ENVVAR    "TestArgs"extern struct ExecBase *SysBase;char  ArgStr   [] = "PATTERN/A,S=SCHALTER/S";enum              {  filename,    schalter };LONG  ArgArray [schalter+1] = { 0,0 };const char ver[] = "$VER: TestArgs 1.0 (08.11.94)";char    EnvString[BUFLEN] = "";char    TempBuf  [BUFLEN] = "";struct  RDArgs  EnvArgs   = {        {  EnvString, BUFLEN, 0 },        0, TempBuf, BUFLEN,        0L,   // Extra Help Text, hier 0        RDAF_NOALLOC};struct List *CreateListFromPattern(char *pattern, char *directory);int ForAllInList(struct List *l, BOOL (*func)(struct Node *n1,                 APTR userdata), APTR userdata){   register struct Node *lauf;   register int count = 0;   if (IsListEmpty(l) || (func == 0)) return count;   lauf = l->lh_Head;             /* erste 'Node' in der 'List'  */   while (lauf->ln_Succ)          /* solange Node da ist         */   {  register struct Node *next = lauf->ln_Succ;  /* Nachfolger */      if ((*func)(lauf,userdata)) /* Aktion darauf anwenden      */      {   count++; }              /* Zhler erhhen, wenn TRUE   */      lauf = next;                /* beim nchsten weitermachen  */   }   return count;               /* am Ende, also Wert zurckgeben */}BOOL PrintOneNode(struct Node *n,APTR data){   Printf("File: %s\n",n->ln_Name);   return TRUE;}int main(int argc, char *argv[]){   int retcode = RETURN_OK;   struct RDArgs *rda = NULL;   if (SysBase->LibNode.lib_Version < 37) return 20;   if (GetVar(ENVVAR,EnvString,BUFLEN,0) > 0)   {  strcat(EnvString,"\n"); /* LineFeed anhngen */      /* richtige Lnge eintragen */      EnvArgs.RDA_Source.CS_Length = strlen(EnvString);      if (rda = ReadArgs(ArgStr,ArgArray,&EnvArgs))      {  FreeArgs(rda); }   }   if (rda = ReadArgs(ArgStr,ArgArray,rda))   {      struct List *list;      int counter = 0;      if (list = CreateListFromPattern(                               (char *)ArgArray[filename],""))      {  counter = ForAllInList(list,PrintOneNode,0L);         if (ArgArray[schalter])         {  Printf("Insgesamt %ld Dateien verarbeitet\n",counter);         }      }      FreeArgs(rda);   }   else   {  PrintFault(IoErr(),argv[0]);      retcode = RETURN_FAIL;   }   return retcode;}