/* cmdarg.c */ /*****************************************************************************/ /* AS-Portierung */ /* */ /* Verarbeitung Kommandozeilenparameter */ /* */ /* Historie: 4. 5.1996 Grundsteinlegung */ /* 1. 6.1996 Empty-Funktion */ /* 17. 4.1999 Key-Files in Kommandozeile */ /* */ /*****************************************************************************/ #include "stdinc.h" #include #include #include "strutil.h" #include "cmdarg.h" #include "nls.h" #include "nlmessages.h" #include "cmdarg.rsc" LongInt ParamCount; /* Kommandozeilenparameter */ char **ParamStr; TMsgCat MsgCat; static void ClrBlanks(char *tmp) BEGIN int cnt; for (cnt=0; isspace((unsigned int) tmp[cnt]); cnt++); if (cnt>0) strcpy(tmp,tmp+cnt); END Boolean ProcessedEmpty(CMDProcessed Processed) BEGIN int z; for (z=1; z<=ParamCount; z++) if (Processed[z]) return False; return True; END static void ProcessFile(char *Name_O, CMDRec *Def, Integer Cnt, CMDErrCallback ErrProc); static CMDResult ProcessParam(CMDRec *Def, Integer Cnt, char *O_Param, char *O_Next, Boolean AllowLink, CMDErrCallback ErrProc) BEGIN int Start; Boolean Negate; int z,Search; CMDResult TempRes; String s,Param,Next; strncpy(Param,O_Param,255); strncpy(Next,O_Next,255); if ((*Next == '-') OR (*Next == '+') OR (*Next == '@')) *Next = '\0'; if (*Param == '@') BEGIN if (AllowLink) BEGIN ProcessFile(Param + 1, Def, Cnt, ErrProc); return CMDOK; END else BEGIN fprintf(stderr, "%s\n", catgetmessage(&MsgCat, Num_ErrMsgNoKeyInFile)); return CMDErr; END END if ((*Param == '-') OR (*Param == '+')) BEGIN Negate=(*Param=='+'); Start=1; if (Param[Start]=='#') BEGIN for (z=Start+1; z1) AND (strcmp(s,Def[Search].Ident)==0)) break; if (Search=Cnt) TempRes=CMDErr; else switch (Def[Search].Callback(Negate,Next)) BEGIN case CMDErr: TempRes=CMDErr; break; case CMDArg: TempRes=CMDArg; break; case CMDOK: break; case CMDFile: break; /** **/ END END return TempRes; END else return CMDFile; END static void DecodeLine(CMDRec *Def, Integer Cnt, char *OneLine, CMDErrCallback ErrProc) BEGIN int z; char *EnvStr[256],*start,*p; int EnvCnt=0; ClrBlanks(OneLine); if ((*OneLine!='\0') AND (*OneLine!=';')) BEGIN start=OneLine; while (*start!='\0') BEGIN EnvStr[EnvCnt++]=start; p=strchr(start,' '); if (p==Nil) p=strchr(start, '\t'); if (p!=Nil) BEGIN *p='\0'; start=p+1; while (isspace((unsigned int) *start)) start++; END else start+=strlen(start); END EnvStr[EnvCnt]=start; for (z=0; z