From 548dd7c055fbb081a280174623b1fc0c26b6e106 Mon Sep 17 00:00:00 2001 From: luethje Date: Tue, 15 Apr 1997 00:19:53 +0000 Subject: [PATCH] replace variables: some bugfixes, README comleted --- isdnlog/Makefile.in | 7 +- isdnlog/README | 126 ++++++++++++++++++++++++++------- isdnlog/isdnconf/isdnconf.c | 20 ++++-- isdnlog/tools/isdnconf.c | 4 +- lib/conffile.c | 14 ++-- lib/conffile.h | 15 ++-- lib/isdntools.c | 11 ++- lib/libtools.c | 136 +++++++++++++++++++++--------------- lib/libtools.h | 6 +- 9 files changed, 233 insertions(+), 106 deletions(-) diff --git a/isdnlog/Makefile.in b/isdnlog/Makefile.in index 2ea4ddd6..540ee58e 100644 --- a/isdnlog/Makefile.in +++ b/isdnlog/Makefile.in @@ -1,4 +1,4 @@ -## $Id: Makefile.in,v 1.11 1997/04/10 23:32:04 luethje Exp $ +## $Id: Makefile.in,v 1.12 1997/04/15 00:19:53 luethje Exp $ ## ## ISDN accounting for isdn4linux. ## @@ -19,6 +19,9 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## ## $Log: Makefile.in,v $ +## Revision 1.12 1997/04/15 00:19:53 luethje +## replace variables: some bugfixes, README comleted +## ## Revision 1.11 1997/04/10 23:32:04 luethje ## Added the feature, that environment variables are allowed in the config files. ## @@ -166,7 +169,7 @@ SERVICEFILE = /etc/services # DON'T EDIT BELOW THIS LINE ###################################################################### -VERSION = 2.99.7 +VERSION = 2.99.8 ifeq ($(POSTGRES),1) DEFS += -DPOSTGRES diff --git a/isdnlog/README b/isdnlog/README index 7d2bf46a..3b396ab4 100644 --- a/isdnlog/README +++ b/isdnlog/README @@ -18,7 +18,8 @@ Quick-Installation-Guide 1. Linux-2.0.29 + isdn4kernel-2.0.29.5 verwenden: CONFIG_ISDN=m - CONFIG_ISDN_DRV_TELES=m +******* Andreas, die folgende Zeile ist wohl ueberholt!!! + CONFIG_ISDN_DRV_TELES=m ???????????????????????????????????? 2. isdn4k-utils.2.1.tar.gz auspacken, erstellen und installieren: cd /usr/src @@ -28,7 +29,7 @@ Quick-Installation-Guide 3. Konfigurationsdatei fuer isdnlog fuellen: - vi | emacs | vim | e | nedit | ... | /etc/isdn/isdn.conf + vi | emacs | vim | e | nedit | ... | /etc/isdn/callerid.conf ----------------------------------------------------- [MSN] @@ -759,9 +760,14 @@ beiden Programme isdnconf und isdnrep. Es koennen hier Variablen verwendet werden, die entweder in der isdn.conf gesetzt wurden oder vorher (z.b. auf Shellebene). -In den Dateien "callerid.conf" und "~/.isdn" koennen keine Variablen mehr -gesetzt werden. Das bedeutet also, dass es dort keine Sektion [VARIABLES] -gibt. +In den Dateien "callerid.conf" und "~/.isdn" koennen ebenfalls Variablen +gesetzt werden. Das bedeutet also, dass es dort auch eine Sektion [VARIABLES] +geben, wie in der "isdn.conf". Aber Achtung!! Hier koennen nur gross +geschriebene Variablennamen verwendet werden: + +[VARIABLES] +fred=fred1234 # -> "FRED=fred1234" !!!! +FRED=fred1234 # -> "FRED=fred1234" Eine Variable wird allerdings nur ab dem Gleichheitszeichen ersetzt. @@ -786,6 +792,21 @@ ALIAS=${PHONE}1 # PHONE=Telefon -> "Telefon1" # SOUND_PATH=/home/sound RING_FILE=ring.au -> "/home/sound/ring.au" ... +Wenn eine Variable nicht ersetzt werden konnte, so wird dieses angemahnt, +und die Variable bleibt so bestehen, im Gegensatz zur bash-Shell, wo +dann ein Leerstring ausgegeben wird: + +... +ALIAS = $FRED Feuerstein # -> "$FRED Feuerstein", wenn $FRED ungueltig ist. +... + +Wenn das "$" nicht als Zeichen fuer +eine Variable verwendet werden soll, so muss diese mit "\$" geqoutet werden: + +... +ALIAS = \$PATH # -> "$PATH" +... + Es gibt bestimmte Regeln, nachdem Eintraege aus der Datei "~/.isdn" die Eintraege der "callerid.conf" ueberschreiben: @@ -1254,7 +1275,6 @@ GROUP=201 Es kann also entweder der Gruppenname oder die Gruppen-ID verwendet werden. -*************** Bis hier ist sl gekommen, die Doku zu ueberarbeiten *********** Time ---- @@ -1279,10 +1299,17 @@ Wenn Time ueberhaupt nicht angegeben wird, dann bedeutet dieses "immer". Beispiele: -IOR=/usr/bin/auplay ring.au; -IORK=/usr/bin/auplay ring.au,5; -IORK=/usr/bin/auplay ring.au,5,; +... +START={ + [FLAG] + FLAGS = IOR + PROGRAM = /usr/bin/auplay ring.au + FLAGS = IORK + PROGRAM = /usr/bin/auplay ring.au + INTERVAL= 5 +} +... Intervall --------- @@ -1304,32 +1331,61 @@ werden. Groessere Intervalle stellen kein Problem dar. -Info-Arg --------- +Das zu startende Programm +------------------------- Hier wird das Info-Argument angegeben. Es steht dort der gesamte zu startende Befehl Es gibt aber drei zusaetzliche Variablen, die verwendet werden duerfen: -$1 : Sind die Flags, die den Programmstart ausgeloest haben. - z.B. "IR", "OC", "IH" - Zuerst kommt die Gespraechs-Direktive und dann der Zustand - der Verbindung. Es kommen immer _genau_ zwei Zeichen. -$2 : Gibt als String die Telefonnummer (mit Vorwahl) des Anrufenden an. -$3 : Gibt als String die Telefonnummer (mit Vorwahl) des Angerufenden an. +\$1 : Sind die Flags, die den Programmstart ausgeloest haben. + z.B. "IR", "OC", "IH" + Zuerst kommt die Gespraechs-Direktive und dann der Zustand + der Verbindung. Es kommen immer _genau_ zwei Zeichen. +\$2 : Gibt als String die Telefonnummer (mit Vorwahl) des Anrufenden an. +\$3 : Gibt als String die Telefonnummer (mit Vorwahl) des Angerufenden an. -Wenn bei $2 und $3 die Telefonnummer nicht bekannt ist, dann wird dort + +Es ist zu beachten, dass hier das Zeichen "$" gequotet werden muss, +da dieses sonst zu einem Warning fuehrt! + +Wenn bei "\$2" und "\$3" die Telefonnummer nicht bekannt ist, dann wird dort ein "?" eingesetzt. Es fallen also alle Blanks und Tabulatoren vor und nach dem "=" heraus. "IORK = /bin/auplay..." wird also zu "IORK=/bin/auplay...". -Eine (zwei) Zeile in der Spalte Info-Agrs kann also wie folgt aussehen: +Eine (zwei) Section [NUMBER] (oder [MSN]) kann also wie folgt aussehen: -4711 Phone 1 IORK= /bin/auplay /sounds/ring.au,1,8-14,16-22;\ - OA = /bin/auplay /sounds/money.au,,8-14,16-22; -0815 Provider 2 IOCK= /bin/popclient_script $3,300; +[MSN] +NUMBER = 4711 +ALIAS = Phone +ZONE = 1 +START={ + [FLAG] + FLAGS = IORK + PROGRAM = /bin/auplay /sounds/ring.au + INTERVAL= 1 + TIME = 8-14,16-22 + + [FLAG] + FLAGS = OA + PROGRAM = /bin/auplay /sounds/money.au + TIME = 8-14,16-22 +} + +[NUMBER] +NUMBER = 0815/1234 +ALIAS = Provider +ZONE = 2 +START={ + + [FLAG] + FLAGS = IOCK + PROGRAM = /bin/popclient_script \$3 + INTERVAL= 300 +} Angenommen 4711 ist die MSN meines Telefons, dann wird beim Rauswaehlen erst immer "/bin/auplay /sounds/ring.au" abgespielt. Auch wenn das Telefon @@ -1341,20 +1397,38 @@ Diese Sounds werden nur von 8Uhr bis 14Uhr und 16Uhr bis 22Uhr gespielt. Wenn man zum "Provider" verbunden ist, dann werden alle 5 Minuten Mails geholt. Da hier keine Zeitangabe gemacht wurde, wird das Script zu -jeder Zeit ausgefuehrt. Das Script bekommt als Parameter "0815", wenn +jeder Zeit ausgefuehrt. Das Script bekommt als Parameter "0815/1234", wenn man "Provider" angerufen hat, und wenn "Provider" einen anruft, seine eigene MSN. Wie unter "START=" beschrieben wurde, ist hier noch mal ein Beispiel zu finden: +... +[VARIABLES] CMD1=/bin/auplay CMD2=/bin/my_prog DIR = /sounds/ -START=IORK=$CMD1 ${DIR}ring.au,1,8-14,16-22;\ - OA =$CMD1 ${DIR}money.au,,8-14,16-22;\ - IOC =$CMD2 $1 $2 $3,,8-14,16-22; +START={ + [FLAG] + FLAGS = I|O|R|K + PROGRAM = $CMD1 ${DIR}ring.au + INTERVAL= 1 + TIME = 8-14,16-22 + + [FLAG] + FLAGS = O|A + PROGRAM = $CMD1 ${DIR}money.au + TIME = 8-14,16-22 + + [FLAG] + FLAGS = I|O|C + PROGRAM = $CMD2 \$1 \$2 \$3 + TIME = 8-14,16-22 +} + +*************** Bis hier ist sl gekommen, die Doku zu ueberarbeiten *********** Die letzte Zeile wird also wie folgt expandiert als Kommando, wenn ich jemanden anrufe mit der Nummer 0815 (Meine MSN 040/1234): "/bin/auplay OC 0401234 0815" diff --git a/isdnlog/isdnconf/isdnconf.c b/isdnlog/isdnconf/isdnconf.c index 376d59ac..ef829f30 100644 --- a/isdnlog/isdnconf/isdnconf.c +++ b/isdnlog/isdnconf/isdnconf.c @@ -1,4 +1,4 @@ -/* $Id: isdnconf.c,v 1.5 1997/04/10 23:32:15 luethje Exp $ +/* $Id: isdnconf.c,v 1.6 1997/04/15 00:20:01 luethje Exp $ * * ISDN accounting for isdn4linux. (Report-module) * @@ -19,6 +19,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: isdnconf.c,v $ + * Revision 1.6 1997/04/15 00:20:01 luethje + * replace variables: some bugfixes, README comleted + * * Revision 1.5 1997/04/10 23:32:15 luethje * Added the feature, that environment variables are allowed in the config files. * @@ -306,14 +309,23 @@ int look_data(section **conf_dat) _si[0] = '\0'; if ((CEPtr = Get_Entry((*conf_dat)->entries,CONF_ENT_NUM)) != NULL) - _number = strdup(Replace_Variable(CEPtr->value)); + if (del) + _number = strdup(Replace_Variable(CEPtr->value)); + else + _number = strdup(CEPtr->value); if ((CEPtr = Get_Entry((*conf_dat)->entries,CONF_ENT_ALIAS)) != NULL) - _alias = strdup(Replace_Variable(CEPtr->value)); + if (del) + _alias = strdup(Replace_Variable(CEPtr->value)); + else + _alias = strdup(CEPtr->value); if ((CEPtr = Get_Entry((*conf_dat)->entries,CONF_ENT_SI)) != NULL && CEPtr->value != NULL) - sprintf(_si,"%ld",strtol(Replace_Variable(CEPtr->value), NIL, 0)); + if (del) + sprintf(_si,"%ld",strtol(Replace_Variable(CEPtr->value), NIL, 0)); + else + sprintf(_si,"%ld",strtol(CEPtr->value, NIL, 0)); if (and) Ret = 1; diff --git a/isdnlog/tools/isdnconf.c b/isdnlog/tools/isdnconf.c index 2d50cbba..04f1d18a 100644 --- a/isdnlog/tools/isdnconf.c +++ b/isdnlog/tools/isdnconf.c @@ -1,4 +1,4 @@ -/* $Id: isdnconf.c,v 1.4 1997/04/10 23:32:24 luethje Exp $ +/* $Id: isdnconf.c,v 1.5 1997/04/15 00:20:07 luethje Exp $ * * ISDN accounting for isdn4linux. (Utilities) * @@ -913,7 +913,7 @@ static int _readconfig(char *_myname) if ((SPtr = read_isdnconf(&conf_dat)) == NULL) return -1; - if (Replace_Variables(conf_dat)) + if (Replace_Variables(conf_dat) != 0) return -1; Set_Globals(conf_dat); diff --git a/lib/conffile.c b/lib/conffile.c index 1c258020..c02783a8 100644 --- a/lib/conffile.c +++ b/lib/conffile.c @@ -1,4 +1,4 @@ -/* $Id: conffile.c,v 1.13 1997/04/10 23:41:26 luethje Exp $ +/* $Id: conffile.c,v 1.14 1997/04/15 00:20:13 luethje Exp $ * * ISDN accounting for isdn4linux. * @@ -19,6 +19,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: conffile.c,v $ + * Revision 1.14 1997/04/15 00:20:13 luethje + * replace variables: some bugfixes, README comleted + * * Revision 1.13 1997/04/10 23:41:26 luethje * some bug fixes * @@ -580,7 +583,7 @@ static entry* Append_Entry(entry** Entry, char *Variable, char* Value, section * if (Value != NULL) { - if (((*Entry)->value = strdup(Value)) == NULL) + if (((*Entry)->value = strdup(Value)) == NULL) { free_entry(*Entry); *Entry = NULL; @@ -1546,13 +1549,14 @@ int Replace_Variables(section *Section) { if (Entry->value != NULL && (Ptr = Replace_Variable(Entry->value)) != NULL) { - free(Entry->value); - - if ((Entry->value = strdup(Ptr)) == NULL) + if ((Ptr = strdup(Ptr)) == NULL) { print_msg("%s","Can not allocate memory!\n"); return -1; } + + free(Entry->value); + Entry->value = Ptr; } Entry = Entry->next; diff --git a/lib/conffile.h b/lib/conffile.h index c967612b..c5c8b0df 100644 --- a/lib/conffile.h +++ b/lib/conffile.h @@ -1,5 +1,5 @@ -/* $Id: conffile.h,v 1.6 1997/04/10 23:32:34 luethje Exp $ +/* $Id: conffile.h,v 1.7 1997/04/15 00:20:16 luethje Exp $ * * ISDN accounting for isdn4linux. * @@ -20,6 +20,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: conffile.h,v $ + * Revision 1.7 1997/04/15 00:20:16 luethje + * replace variables: some bugfixes, README comleted + * * Revision 1.6 1997/04/10 23:32:34 luethje * Added the feature, that environment variables are allowed in the config files. * @@ -41,11 +44,11 @@ /****************************************************************************/ -#define C_OVERWRITE 1 -#define C_WARN 2 -#define C_NOT_UNIQUE 4 -#define C_APPEND 8 -#define C_NO_WARN_FILE 16 +#define C_OVERWRITE 1 +#define C_WARN 2 +#define C_NOT_UNIQUE 4 +#define C_APPEND 8 +#define C_NO_WARN_FILE 16 /****************************************************************************/ diff --git a/lib/isdntools.c b/lib/isdntools.c index 63eda3a4..dd951427 100644 --- a/lib/isdntools.c +++ b/lib/isdntools.c @@ -1,4 +1,4 @@ -/* $Id: isdntools.c,v 1.10 1997/04/08 21:57:04 luethje Exp $ +/* $Id: isdntools.c,v 1.11 1997/04/15 00:20:17 luethje Exp $ * * ISDN accounting for isdn4linux. (Utilities) * @@ -19,6 +19,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: isdntools.c,v $ + * Revision 1.11 1997/04/15 00:20:17 luethje + * replace variables: some bugfixes, README comleted + * * Revision 1.10 1997/04/08 21:57:04 luethje * Create the file isdn.conf * some bug fixes for pid and lock file @@ -555,7 +558,9 @@ int Set_Codes(section* Section) print_msg("Error: Variable `%s' are not set!\n",CONF_ENT_COUNTRY); } - if ((SPtr = Get_Section(Section,CONF_SEC_VAR)) != NULL) + SPtr = Section; + + while ((SPtr = Get_Section(SPtr,CONF_SEC_VAR)) != NULL) { Entry = SPtr->entries; @@ -566,6 +571,8 @@ int Set_Codes(section* Section) Entry = Entry->next; } + + SPtr = SPtr->next; } return (RetCode==2?0:-1); diff --git a/lib/libtools.c b/lib/libtools.c index bbbc9888..671881bf 100644 --- a/lib/libtools.c +++ b/lib/libtools.c @@ -1,4 +1,4 @@ -/* $Id: libtools.c,v 1.4 1997/04/10 23:32:35 luethje Exp $ +/* $Id: libtools.c,v 1.5 1997/04/15 00:20:18 luethje Exp $ * ISDN accounting for isdn4linux. * * Copyright 1996 by Stefan Luethje (luethje@sl-gw.lake.de) @@ -18,6 +18,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: libtools.c,v $ + * Revision 1.5 1997/04/15 00:20:18 luethje + * replace variables: some bugfixes, README comleted + * * Revision 1.4 1997/04/10 23:32:35 luethje * Added the feature, that environment variables are allowed in the config files. * @@ -41,6 +44,10 @@ /****************************************************************************/ +#define SET_BEGIN_VAR 1 + +/****************************************************************************/ + static int (*print_msg)(const char *, ...) = printf; /****************************************************************************/ @@ -480,7 +487,7 @@ int is_double (char *string, double *value) dummy = (char*) alloca((strlen(string)+1)*sizeof(char)); if (value == NULL) - *value = dummy2; + value = &dummy2; return (sscanf(string,"%lf%s",value,dummy) == 1); } @@ -498,7 +505,7 @@ int is_integer (char *string, long int *value) dummy = (char*) alloca((strlen(string)+1)*sizeof(char)); if (value == NULL) - *value = dummy2; + value = &dummy2; return (sscanf(string,"%ld%s",value,dummy) == 1); } @@ -512,92 +519,105 @@ char *Replace_Variable(char *String) char *Var = NULL; char *End = NULL; char *Value = NULL; - int num; + char *Ptr = String; + int cnt = 0; + int num = 0; + while ((Ptr = strchr(Ptr,C_BEGIN_VAR)) != NULL) + { + cnt++; + Ptr++; + } + + if (!cnt) + return String; + if (RetCode != NULL) free(RetCode); if ((RetCode = strdup(String)) == NULL || (Var = strdup(RetCode)) == NULL || - (End = strdup(RetCode)) == NULL || - (Begin = strdup(RetCode)) == NULL ) + (End = strdup(RetCode)) == NULL ) { - print_msg("%s!\n","Can not alllocate memory!\n"); + print_msg("%s!\n","Error: Can not allocate memory!\n"); return NULL; } - Begin[0] ='\0'; - - while ((num = sscanf(RetCode,"%[^$]$%[0-9a-zA-Z]%[^\n]",Begin,Var,End)+1) > 2 || - (num = sscanf(RetCode,"%[^$]${%[0-9a-zA-Z]}%[^\n]",Begin,Var,End)+1) > 2 || - (num = sscanf(RetCode,"$%[0-9a-zA-Z]%[^\n]",Var,End)) > 0 || - (num = sscanf(RetCode,"${%[0-9a-zA-Z]}%[^\n]",Var,End)) > 0 ) + while ((Ptr = strchr(RetCode,C_BEGIN_VAR)) != NULL) { - if ((num > 2 && Begin[strlen(Begin)-1] == C_QUOTE_CHAR) || (Value = getenv(Var)) == NULL) + if (Ptr != RetCode && Ptr[-1] == C_QUOTE_CHAR) { - RetCode[strlen(Begin)] = 1; - - if (strlen(Begin) > 0) - memmove(RetCode+strlen(Begin)-1,RetCode+strlen(Begin),strlen(RetCode)-strlen(Begin)+1); + *Ptr = SET_BEGIN_VAR; + memmove(Ptr-1,Ptr,strlen(RetCode)-(Ptr-RetCode-1)); + cnt--; } else - if (Value != NULL) + if ((num = sscanf(Ptr+1,"%[0-9a-zA-Z]%[^\n]",Var,End)) >= 1 || + (num = sscanf(Ptr+1,"{%[0-9a-zA-Z]}%[^\n]",Var,End)) >= 1 ) { - if ((RetCode = (char*) realloc(RetCode,sizeof(char)*(strlen(RetCode)+strlen(Value)-strlen(Var)))) == NULL) + if ((Value = getenv(Var)) != NULL) { - print_msg("%s!\n","Can not alllocate memory!\n"); - return NULL; - } + free(Begin); - switch(num) + if ((Begin = strdup(RetCode)) == NULL) + { + print_msg("%s!\n","Error: Can not allocate memory!\n"); + return NULL; + } + + Begin[Ptr-RetCode] = '\0'; + + if ((RetCode = (char*) realloc(RetCode,sizeof(char)*strlen(RetCode)+strlen(Value)-strlen(Var))) == NULL) + { + print_msg("%s!\n","Error: Can not allocate memory!\n"); + return NULL; + } + + if (num == 1) + *End = '\0'; + + sprintf(RetCode,"%s%s%s",Begin,Value,End); + + free(Var); + free(End); + + if ((Var = strdup(RetCode)) == NULL || + (End = strdup(RetCode)) == NULL ) + { + print_msg("%s!\n","Error: Can not allocate memory!\n"); + return NULL; + } + + cnt--; + } + else { - case 1: sprintf(RetCode,"%s",Value); - break; - case 2: sprintf(RetCode,"%s%s",Value,End); - break; - case 3: sprintf(RetCode,"%s%s",Begin,Value); - break; - case 4: sprintf(RetCode,"%s%s%s",Begin,Value,End); - break; - default: break; + *Ptr = SET_BEGIN_VAR; + cnt--; + + print_msg("Warning: Unknown variable `%s'!\n",Var); } - - free(Begin); - free(Var); - free(End); - - if ((Var = strdup(RetCode)) == NULL || - (End = strdup(RetCode)) == NULL || - (Begin = strdup(RetCode)) == NULL ) - { - print_msg("%s!\n","Can not alllocate memory!\n"); - return NULL; - } - - Begin[0] ='\0'; } else - { - print_msg("Invalid variable `%s'!\n",Var); - free(RetCode); - RetCode = NULL; - break; - } + *Ptr = SET_BEGIN_VAR; } + if (cnt) + print_msg("Warning: Invalid token in string `%s'!\n",String); + free(Begin); free(Var); free(End); - if ((Begin = RetCode) != NULL) + if ((Ptr = RetCode) != NULL) { - while (*Begin != '\0') + while (*Ptr != '\0') { - if (*Begin == 1) - *Begin = '$'; + if (*Ptr == SET_BEGIN_VAR) + *Ptr = C_BEGIN_VAR; - Begin++; + Ptr++; } } diff --git a/lib/libtools.h b/lib/libtools.h index 53499bce..1f0e41e6 100644 --- a/lib/libtools.h +++ b/lib/libtools.h @@ -1,4 +1,4 @@ -/* $Id: libtools.h,v 1.4 1997/04/10 23:32:35 luethje Exp $ +/* $Id: libtools.h,v 1.5 1997/04/15 00:20:19 luethje Exp $ * * ISDN accounting for isdn4linux. * @@ -19,6 +19,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: libtools.h,v $ + * Revision 1.5 1997/04/15 00:20:19 luethje + * replace variables: some bugfixes, README comleted + * * Revision 1.4 1997/04/10 23:32:35 luethje * Added the feature, that environment variables are allowed in the config files. * @@ -60,6 +63,7 @@ extern char *basename __P((__const char *__name)); #define QUOTE_DELETE 1 #define C_QUOTE_CHAR '\\' +#define C_BEGIN_VAR '$' /****************************************************************************/