argument # checking in xschem() tcl extender

This commit is contained in:
Stefan Schippers 2020-08-19 10:25:11 +02:00
parent 993d188f1c
commit 8012c2755f
3 changed files with 21 additions and 11 deletions

View File

@ -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);
}

View File

@ -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 "";
}

View File

@ -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 */