argument # checking in xschem() tcl extender
This commit is contained in:
parent
993d188f1c
commit
8012c2755f
|
|
@ -1148,8 +1148,9 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
else if(!strcmp(argv[1],"subst_tok") )
|
||||
{
|
||||
char *s=NULL;
|
||||
my_strdup(894, &s, subst_token(argv[2], argv[3], strcmp(argv[4], "NULL") ? argv[4] : NULL));
|
||||
Tcl_ResetResult(interp);
|
||||
if(argc < 5) {Tcl_AppendResult(interp, "Missing arguments", NULL);return TCL_ERROR;}
|
||||
my_strdup(894, &s, subst_token(argv[2], argv[3], strcmp(argv[4], "NULL") ? argv[4] : NULL));
|
||||
Tcl_AppendResult(interp, s, NULL);
|
||||
my_free(1150, &s);
|
||||
}
|
||||
|
|
@ -1161,12 +1162,22 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
Tcl_ResetResult(interp);
|
||||
Tcl_AppendResult(interp, s, NULL);
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1],"set_different_tok") )
|
||||
{
|
||||
char *s = NULL;
|
||||
Tcl_ResetResult(interp);
|
||||
if(argc < 5) {Tcl_AppendResult(interp, "Missing arguments", NULL);return TCL_ERROR;}
|
||||
my_strdup(459, &s, argv[2]);
|
||||
set_different_token(&s, argv[3], argv[4], 0, 0);
|
||||
Tcl_AppendResult(interp, s, NULL);
|
||||
my_free(1156, &s);
|
||||
}
|
||||
else if(!strcmp(argv[1],"get_tok") )
|
||||
{
|
||||
char *s=NULL;
|
||||
my_strdup(648, &s, get_tok_value(argv[2], argv[3], 0));
|
||||
Tcl_ResetResult(interp);
|
||||
if(argc < 4) {Tcl_AppendResult(interp, "Missing arguments", NULL);return TCL_ERROR;}
|
||||
my_strdup(648, &s, get_tok_value(argv[2], argv[3], 0));
|
||||
Tcl_AppendResult(interp, s, NULL);
|
||||
my_free(649, &s);
|
||||
}
|
||||
|
|
|
|||
13
src/token.c
13
src/token.c
|
|
@ -268,7 +268,7 @@ int match_symbol(const char *name) /* never returns -1, if symbol not found loa
|
|||
/* update **s modifying only the token values that are */
|
||||
/* different between *new and *old */
|
||||
/* return 1 if s modified 20081221 */
|
||||
int set_different_token(char **s,char *new, char *old, int object, int n)
|
||||
int set_different_token(char **s,const char *new, const char *old, int object, int n)
|
||||
{
|
||||
register int c, state=XBEGIN, space;
|
||||
char *token=NULL, *value=NULL;
|
||||
|
|
@ -277,7 +277,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
int quote=0;
|
||||
int escape=0;
|
||||
int mod;
|
||||
char *my_new;
|
||||
const char *my_new;
|
||||
|
||||
mod=0;
|
||||
my_new = new;
|
||||
|
|
@ -292,6 +292,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
while(1) {
|
||||
c=*my_new++;
|
||||
space=SPACE(c) ;
|
||||
if(c=='"' && !escape) quote=!quote;
|
||||
if( (state==XBEGIN || state==XENDTOK) && !space && c != '=') state=XTOKEN;
|
||||
else if( state==XTOKEN && space) state=XENDTOK;
|
||||
else if( (state==XTOKEN || state==XENDTOK) && c=='=') state=XSEPARATOR;
|
||||
|
|
@ -307,9 +308,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
}
|
||||
if(state==XTOKEN) token[token_pos++]=c;
|
||||
else if(state==XVALUE) {
|
||||
if(c=='"' && !escape) quote=!quote;
|
||||
value[value_pos++]=c;
|
||||
escape = (c=='\\' && !escape);
|
||||
}
|
||||
else if(state==XENDTOK || state==XSEPARATOR) {
|
||||
if(token_pos) {
|
||||
|
|
@ -336,6 +335,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
}
|
||||
state=XBEGIN;
|
||||
}
|
||||
escape = (c=='\\' && !escape);
|
||||
if(c=='\0') break;
|
||||
}
|
||||
|
||||
|
|
@ -345,6 +345,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
while(old) {
|
||||
c=*old++;
|
||||
space=SPACE(c) ;
|
||||
if(c=='"' && !escape) quote=!quote;
|
||||
if( (state==XBEGIN || state==XENDTOK) && !space && c != '=') state=XTOKEN;
|
||||
else if( state==XTOKEN && space) state=XENDTOK;
|
||||
else if( (state==XTOKEN || state==XENDTOK) && c=='=') state=XSEPARATOR;
|
||||
|
|
@ -360,9 +361,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
}
|
||||
if(state==XTOKEN) token[token_pos++]=c;
|
||||
else if(state==XVALUE) {
|
||||
if(c=='"' && !escape) quote=!quote;
|
||||
value[value_pos++]=c;
|
||||
escape = (c=='\\' && !escape);
|
||||
}
|
||||
else if(state==XENDTOK || state==XSEPARATOR) {
|
||||
if(token_pos) {
|
||||
|
|
@ -389,6 +388,7 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
value_pos=0;
|
||||
state=XBEGIN;
|
||||
}
|
||||
escape = (c=='\\' && !escape);
|
||||
if(c=='\0') break;
|
||||
}
|
||||
my_free(974, &token);
|
||||
|
|
@ -775,7 +775,6 @@ char *subst_token(const char *s, const char *tok, const char *new_val)
|
|||
int escape=0, matched_tok=0;
|
||||
|
||||
if(s==NULL){
|
||||
size = 0;
|
||||
my_free(989, &result);
|
||||
return "";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -975,7 +975,7 @@ extern void hilight_child_pins(void);
|
|||
extern void hilight_parent_pins(void);
|
||||
extern struct node_hashentry **get_node_table_ptr(void);
|
||||
extern void change_elem_order(void);
|
||||
extern int set_different_token(char **s,char *new, char *old, int object, int n);
|
||||
extern int set_different_token(char **s,const char *new, const char *old, int object, int n);
|
||||
extern void print_hilight_net(int show);
|
||||
extern void change_layer();
|
||||
extern void launcher(); /* 20161102 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue