summaryrefslogtreecommitdiff
path: root/setedit/librhuti/specs.cc
diff options
context:
space:
mode:
Diffstat (limited to 'setedit/librhuti/specs.cc')
-rw-r--r--setedit/librhuti/specs.cc890
1 files changed, 0 insertions, 890 deletions
diff --git a/setedit/librhuti/specs.cc b/setedit/librhuti/specs.cc
deleted file mode 100644
index 6a0d74a..0000000
--- a/setedit/librhuti/specs.cc
+++ /dev/null
@@ -1,890 +0,0 @@
-/* Copyright (C) 1996-1998 Robert H”hne, see COPYING.RH for details */
-/* This file is part of RHIDE. */
-
-/* This code isn't used by SETEdit, just disabled. */
-#if 0
-
-#include <rhutils.h>
-#define Uses_stdio
-#define Uses_glob
-#define Uses_alloca
-#define Uses_string
-#define Uses_stdlib
-#include <compatlayer.h>
-
-#ifdef USE_REGPARM
-#define A(n) __attribute__ (( regparm(n) ))
-#else
-#define A(n)
-#endif
-
-const char * GetVariable(const char *variable);
-const char * GetVariable(const char *variable,int use_env);
-
-static void _handle_newline();
-void (*handle_newline)() = _handle_newline;
-int expand_variable_names = 1;
-char **vars = NULL;
-int var_count = 0;
-static int var_size = 0;
-/* set this nonzero to print to stderr, how the specs
- are expanded */
-int debug_specs = 0;
-
-static void _handle_newline()
-{
-}
-
-static void
-_add_variable(char **&_vars, int & _var_count, int & _var_size,
- const char *variable, const char *contents)
-{
- /* Special case when contents==NULL, remove that variable */
- if (!contents)
- {
- int i;
- for (i=_var_count;i>0;i--)
- {
- int j=(i-1)*2;
- if (strcmp(_vars[j],variable) == 0)
- {
- string_free(_vars[j]);
- string_free(_vars[j+1]);
- if (i<_var_count)
- {
- memcpy(_vars+j,_vars+j+2,(_var_count-i)*sizeof(char *)*2);
- }
- _var_count--;
- break;
- }
- }
- return;
- }
- if (_var_count == _var_size)
- {
- _var_size += 16;
- _vars = (char **)realloc(_vars,_var_size*2*sizeof(char *));
- }
- _var_count++;
- string_dup(_vars[_var_count*2-2],variable);
- string_dup(_vars[_var_count*2-1],contents);
-}
-
-static void
-_set_variable(char **_vars, int _var_count, const char *variable,
- const char *contents)
-{
- int i;
- for (i=_var_count;i>0;i--)
- {
- int j = (i-1)*2;
- if (strcmp(_vars[j],variable) == 0)
- {
- string_free(_vars[j+1]);
- _vars[j+1] = string_dup(contents);
- return;
- }
- }
-}
-
-static const char *
-_get_variable(char **_vars, int _var_count, const char *variable)
-{
- int i;
- for (i=_var_count;i>0;i--)
- {
- int j=(i-1)*2;
- if (strcmp(_vars[j],variable) == 0)
- return _vars[j+1];
- }
- return NULL;
-}
-
-void insert_variable(const char *variable,const char *contents)
-{
- _add_variable(vars, var_count, var_size, variable, contents);
-}
-
-void set_variable(const char *variable, const char *contents)
-{
- _set_variable(vars, var_count, variable, contents);
-}
-
-static int internal_var_count = 0;
-static int internal_var_size = 0;
-static char **internal_vars = NULL;
-
-static void add_internal_var(const char *name,const char *value)
-{
- _add_variable(internal_vars, internal_var_count, internal_var_size,
- name, value);
-}
-
-static void remove_internal_var(const char *name)
-{
- _add_variable(internal_vars, internal_var_count, internal_var_size,
- name, NULL);
-}
-
-static const char *
-get_internal_var(const char *name)
-{
- return _get_variable(internal_vars, internal_var_count, name);
-}
-
-static void set_internal_var(const char *name,const char *value)
-{
- if (!get_internal_var(name))
- add_internal_var(name, value);
- else
- _set_variable(internal_vars, internal_var_count, name, value);
-}
-
-const char *RHGetVariable(const char *variable)
-{
- return GetVariable(variable,1);
-}
-
-const char * GetVariable(const char *variable,int use_env)
-{
- const char *ival = get_internal_var(variable);
- if (!ival)
- {
- ival = _get_variable(vars, var_count, variable);
- if (!ival && use_env)
- ival = getenv(variable);
- }
- if (debug_specs)
- {
- fprintf(stderr,"GetVariable(%s,%d) ==> %s\n",variable,use_env,
- ival?ival:"NULL");
- }
- return ival;
-}
-
-#ifdef TVCompf_djgpp
-extern char **environ;
-#endif
-
-typedef A(1) char *(*string_function)(char *);
-
-typedef struct
-{
- char *name;
- int name_len;
- string_function function;
-} string_function_rec;
-
-static A(1)
-char *string_function_strip(char *);
-static A(1)
-char *string_function_addsuffix(char *);
-static A(1)
-char *string_function_addprefix(char *);
-static A(1)
-char *string_function_notdir(char *);
-static A(1)
-char *string_function_dir(char *);
-static A(1)
-char *string_function_subst(char *);
-static A(1)
-char *string_function_suffix(char *);
-static A(1)
-char *string_function_nosuffix(char *);
-static A(1)
-char *string_function_setsuffix(char *);
-static A(1)
-char *string_function_sort(char *);
-static A(1)
-char *string_function_foreach(char *);
-static A(1)
-char *string_function_shell(char *);
-static A(1)
-char *string_function_wildcard(char *);
-static A(1)
-char *string_function_word(char *);
-
-static string_function_rec string_function_list[] =
-{
-#define SF(x) {#x,sizeof(#x)-1,string_function_##x}
- SF(strip),
- SF(addsuffix),
- SF(addprefix),
- SF(notdir),
- SF(dir),
- SF(subst),
- SF(suffix),
- SF(nosuffix),
- SF(setsuffix),
- SF(sort),
- SF(foreach),
- SF(shell),
- SF(wildcard),
- SF(word),
- {NULL,0,NULL}
-#undef SF
-};
-
-char *find_close_brace(char *open_brace)
-{
- int brace_count = 1;
- open_brace++;
- while (brace_count > 0 && *open_brace)
- {
- if (*open_brace == '\\')
- {
- open_brace += 2;
- continue;
- }
- if (*open_brace == ')') brace_count--;
- else if (*open_brace == '(') brace_count++;
- open_brace++;
- }
- if (brace_count != 0) return NULL;
- return open_brace-1;
-}
-
-char *find_next_comma(char *arg)
-{
- while (*arg)
- {
- if (*arg == '\\')
- {
- arg += 2;
- continue;
- }
- if (*arg == ',') return arg;
- if (*arg == '(')
- {
- arg = find_close_brace(arg+1);
- if (!arg) return NULL;
- }
- arg++;
- }
- return NULL;
-}
-
-static
-external_token_func external_expand_token;
-
-static A(1)
-char *expand_tokens(char *tokens);
-
-static A(1)
-char *expand_variable(char *__token)
-{
- char *token;
-
- // At first expand the variable name itself, because it
- // can be a computed variable like $(RHIDE_OS_LIBS_$(RHIDE_OS))
- // which can be computed at runtime depending on the value
- // of $(RHIDE_OS)
- // if the expand_variable_names == 0, do not the above
- char *end;
- if (expand_variable_names && ((end = find_close_brace(__token+2)) != NULL))
- {
- char *_token;
- *end = 0;
- _token = expand_tokens(__token+2);
- *end = ')';
- token = (char *)alloca(strlen(_token)+4);
- strcpy(token,"$(");
- strcat(token,_token);
- strcat(token,")");
- string_free(_token);
- }
- else
- {
- token = (char *)alloca(strlen(__token)+1);
- strcpy(token,__token);
- }
- end = token + strlen(token) - 1;
- char *retval;
- const char *variable;
- *end = 0;
- variable = GetVariable(token+2);
- *end = ')';
- if (!variable)
- {
- retval = NULL;
- goto END;
- }
- string_dup(end,variable);
- retval = expand_tokens(end);
- string_free(end);
-END:
- if (debug_specs)
- {
- fprintf(stderr,"expand_variable(%s) ==> %s\n",__token,
- retval?retval:"NULL");
- }
- return retval;
-}
-
-static A(1)
-char *check_for_string_function(char *token)
-{
- int i=0;
- while (string_function_list[i].name)
- {
- int name_len = string_function_list[i].name_len;
- if (strncmp(token+2,string_function_list[i].name,name_len) == 0
- && token[2+name_len] == ' ')
- {
- char *start,*end,*expanded;
- start = token + 3 + name_len;
- end = token + strlen(token)-1;
- *end = 0;
-#if 0
-/* I cannot expand the argument here, because at least the
- foreach function expects the last argument unexpanded. If
- I would expand it here, it would become probably empty.
- That means, any string function is responsible for expanding
- the arguments */
- expanded = expand_tokens(start);
- *end = ')';
- end = string_function_list[i].function(expanded);
- string_free(expanded);
- return end;
-#else
- expanded = string_function_list[i].function(start);
- *end = ')';
- return expanded;
-#endif
- }
- i++;
- }
- return NULL;
-}
-
-static int _call_extern_first = 0;
-
-static A(1)
-char *expand_token(char *token)
-{
- char *retval = NULL;
- if (_call_extern_first && external_expand_token)
- retval = external_expand_token(token,expand_tokens);
- if (!retval)
- retval = check_for_string_function(token);
- if (!retval)
- retval = expand_variable(token);
- if (!_call_extern_first && !retval && external_expand_token)
- retval = external_expand_token(token,expand_tokens);
- if (!retval) retval = string_dup("");
- if (debug_specs)
- {
- fprintf(stderr,"expand_token(%s) ==> %s\n",token,retval);
- }
- return retval;
-}
-
-static A(1)
-char *expand_tokens(char *__tokens)
-{
- char *start;
- char *end,c;
- char *tokens = __tokens;
- char *_tokens=NULL;
- char *expanded;
- start = tokens;
- while (*start)
- {
- if (*start == '\n')
- handle_newline();
- if (start[0] == '$' && start[1] == '(')
- {
- *start = 0;
- string_cat(_tokens,tokens);
- *start = '$';
- end = find_close_brace(start+1);
- if (!end)
- {
- string_cat(_tokens,start);
- goto END;
- }
- end++;
- c = *end;
- *end = 0;
- expanded = expand_token(start);
- string_cat(_tokens,expanded);
- string_free(expanded);
- *end = c;
- start = tokens = end;
- }
- else if (start[0] == '$' && start[1] == '$')
- {
- start++;
- *start = 0;
- string_cat(_tokens,tokens);
- start++;
- tokens = start;
- }
- else start++;
- }
- string_cat(_tokens,tokens);
-END:
- if (debug_specs)
- {
- fprintf(stderr,"expand_tokens(%s) ==> %s\n",__tokens,
- _tokens?_tokens:"NULL");
- }
- return _tokens;
-}
-
-char *expand_spec(const char *spec,external_token_func ext_func,
- int call_extern_first)
-{
- char *retval;
- int __call_extern_first = _call_extern_first;
- _call_extern_first = call_extern_first;
- char *tokens = string_dup(spec);
- external_token_func old_func = external_expand_token;
- external_expand_token = ext_func;
- retval = expand_tokens(tokens);
- string_free(tokens);
- external_expand_token = old_func;
- _call_extern_first = __call_extern_first;
- return retval;
-}
-
-static A(1)
-char *string_function_shell(char *_arg)
-{
- #ifndef TVComp_BCPP
- char *arg = expand_tokens(_arg);
- char *retval = NULL;
- char *err_file = open_stderr();
- FILE *pipe = popen(arg,"r");
- if (pipe)
- {
- char buf[1024];
- int count;
- while ((count = fread(buf,1,1023,pipe)))
- {
- char *tmp = buf;
- while (count--)
- {
- if (*tmp == '\n' || *tmp == '\r')
- *tmp = ' ';
- tmp++;
- }
- *tmp = 0;
- string_cat(retval,buf);
- }
- pclose(pipe);
- }
- string_free(arg);
- if (!retval)
- retval = string_dup("");
- else
- {
- int len;
- if (retval[len = strlen(retval)-1] == ' ')
- retval[len] = 0;
- }
- close_stderr();
- remove(err_file);
- return retval;
- #else
- return (char*)"";
- //$todo: implement
- #endif
-}
-
-static A(1)
-char *string_function_foreach(char *arg)
-{
- char *arg1;
- char *arg2;
- char *arg3;
- char *retval = NULL;
- char *tok;
- char *expanded;
- arg3 = find_next_comma(arg);
- if (!arg3)
- return NULL;
- *arg3 = 0;
- arg1 = expand_tokens(arg);
- *arg3 = ',';
- arg3 = find_next_comma(arg2 = (arg3+1));
- if (!arg3)
- {
- string_free(arg1);
- return NULL;
- }
- *arg3 = 0;
- arg2 = expand_tokens(arg2);
- *arg3 = ',';
- arg3++;
- tok = arg2;
- while (1)
- {
- while (*tok && *tok == ' ') tok++;
- if (!*tok) break;
- char *_tok = tok;
- while (*_tok && *_tok != ' ') _tok++;
- char c = *_tok;
- *_tok = 0;
- set_internal_var(arg1,tok);
- expanded = expand_tokens(arg3);
- if (expanded && *expanded)
- {
- if (retval)
- string_cat(retval," ");
- string_cat(retval,expanded);
- }
- string_free(expanded);
- *_tok = c;
- tok = _tok;
- }
- remove_internal_var(arg1);
- string_free(arg1);
- string_free(arg2);
- if (!retval)
- retval = string_dup("");
- return retval;
-}
-
-static A(1)
-char *string_function_strip(char *arg)
-{
- char *retval;
- char *tmp;
- char quote_char = '\'';
- int in_quote = 0;
- retval = expand_tokens(arg);
- tmp = retval;
- while (*tmp && *tmp == ' ') tmp++;
- strcpy(retval,tmp);
- if (!*retval) return retval;
- tmp =retval;
- while (*tmp)
- {
- if (in_quote)
- {
- if (*tmp == quote_char) in_quote = 0;
- tmp++;
- continue;
- }
- if (*tmp == '\'' || *tmp == '"')
- {
- in_quote = 1;
- quote_char = *tmp;
- tmp++;
- continue;
- }
- if (tmp[0] == ' ' && tmp[1] == ' ')
- strcpy(tmp,tmp+1);
- else tmp++;
- }
- tmp = retval + strlen(retval) - 1;
- while (*tmp == ' ') tmp--;
- tmp++;
- *tmp = 0;
- return retval;
-}
-
-static int search(char **items, int count, char *key, int &index)
-{
- int h = count - 1;
- int res = 0;
- index = 0;
- while( index <= h )
- {
- int i = (index + h) >> 1;
- int c = strcmp(items[i], key);
- if( c < 0 )
- index = i + 1;
- else
- {
- h = i - 1;
- if( c == 0 )
- {
- res = 1;
- index = i;
- }
- }
- }
- return res;
-}
-
-static void add_string(char **&strings, int &strings_count, char *string)
-{
- int index=0;
- if (strings_count && search(strings, strings_count, string, index))
- return;
- strings_count++;
- strings = (char **)realloc(strings, strings_count*sizeof(char *));
- memmove(strings+index+1, strings+index, (strings_count-index-1)*sizeof(char *));
- strings[index] = string_dup(string);
-}
-
-static A(1)
-char *string_function_sort(char *_arg)
-{
- char *arg = expand_tokens(_arg);
- char *retval = NULL;
- char *tok;
- char **strings = NULL;
- int strings_count = 0;
- int i;
- for (tok = strtok(arg," ");tok;tok=strtok(NULL," "))
- {
- add_string(strings, strings_count, tok);
- }
- for (i=0;i<strings_count;i++)
- {
- if (retval)
- string_cat(retval," ");
- string_cat(retval,strings[i]);
- string_free(strings[i]);
- }
- if (!retval)
- retval = string_dup("");
- string_free(arg);
- if (strings)
- free(strings);
- return retval;
-}
-
-static A(1)
-char *string_function_suffix(char *_arg)
-{
- char *retval=NULL;
- char *arg = expand_tokens(_arg);
- char *tok;
- for (tok = strtok(arg," ");tok;tok=strtok(NULL," "))
- {
- char *dot = strrchr(tok,'.');
- if (!dot)
- continue;
- if (retval)
- string_cat(retval," ");
- string_cat(retval,dot);
- }
- if (!retval)
- string_dup(retval,"");
- string_free(arg);
- return retval;
-}
-
-static A(1)
-char *string_function_nosuffix(char *_arg)
-{
- char *retval = NULL;
- char *arg = expand_tokens(_arg);
- char *dot = strrchr(arg,'.');
- if (dot)
- {
- char *slash = strrchr(arg, '/');
- if (dot > slash)
- *dot = 0;
- }
- retval = string_dup(arg);
- string_free(arg);
- return retval;
-}
-
-static A(1)
-char *string_function_setsuffix(char *arg)
-{
- char *retval = NULL;
- char *arg1,*arg2,*dot,*tmp;
- tmp = find_next_comma(arg);
- if (!tmp) return NULL;
- *tmp = 0;
- arg1 = expand_tokens(arg);
- *tmp = ',';
- tmp++;
- arg2 = expand_tokens(tmp);
- dot = strrchr(arg2,'.');
- if (dot)
- {
- if (strrchr(arg2,'/') < dot)
- *dot = 0;
- }
- retval = string_dup(arg2);
- string_cat(retval,arg1);
- string_free(arg1);
- string_free(arg1);
- return retval;
-}
-
-static A(2)
-char *string_function_add_pre_or_suffix(char *arg,int prefix)
-{
- char *retval=NULL;
- char *tmp;
- char *arg1,*arg2;
- char *tok;
- tmp = find_next_comma(arg);
- if (!tmp) return NULL;
- *tmp = 0;
- arg1 = expand_tokens(arg);
- *tmp = ',';
- tmp++;
- arg2 = expand_tokens(tmp);
- for (tok = strtok(arg2," ");tok;tok = strtok(NULL," "))
- {
- if (retval) string_cat(retval," ");
- if (prefix)
- {
- string_cat(retval,arg1);
- string_cat(retval,tok);
- }
- else
- {
- string_cat(retval,tok);
- string_cat(retval,arg1);
- }
- }
- string_free(arg1);
- string_free(arg2);
- if (!retval) // arg2 may be consist of only ws's or empty
- {
- string_dup(retval,"");
- }
- return retval;
-}
-
-static A(1)
-char *string_function_addprefix(char *arg)
-{
- return string_function_add_pre_or_suffix(arg,1);
-}
-
-static A(1)
-char *string_function_addsuffix(char *arg)
-{
- return string_function_add_pre_or_suffix(arg,0);
-}
-
-static A(1)
-char *string_function_notdir(char *_arg)
-{
- char *retval;
- char *arg = expand_tokens(_arg);
- BaseName(arg,retval);
- string_free(arg);
- return retval;
-}
-
-static A(1)
-char *string_function_dir(char *_arg)
-{
- char *dir,*name,*ext,*arg = expand_tokens(_arg);
- split_fname(arg,dir,name,ext);
- string_free(name);
- string_free(ext);
- string_free(arg);
- return dir;
-}
-
-static A(1)
-char *string_function_subst(char *arg)
-{
- char *arg1,*arg2,*arg3;
- char *retval=NULL;
- char *tmp,*temp;
- int l_arg1;
- tmp = find_next_comma(arg);
- if (!tmp) return NULL;
- arg3 = find_next_comma(tmp+1);
- if (!arg3) return NULL;
- *tmp = 0;
- arg1 = expand_tokens(arg);
- l_arg1 = strlen(arg1);
- *tmp = ',';
- tmp++;
- *arg3 = 0;
- arg2 = expand_tokens(tmp);
- *arg3 = ',';
- tmp = arg3+1;
- arg3 = expand_tokens(tmp);
- temp = arg3;
- while (l_arg1 && (tmp = strstr(temp,arg1)) != NULL)
- {
- char c = *tmp;
- *tmp = 0;
- string_cat(retval,temp);
- string_cat(retval,arg2);
- *tmp = c;
- temp = tmp + l_arg1;
- }
- if (*temp) string_cat(retval,temp);
- string_free(arg1);
- string_free(arg2);
- string_free(arg3);
- return retval;
-}
-
-#ifdef TVOSf_Linux
-#include <sys/stat.h>
-#endif
-
-static A(1)
-char *string_function_wildcard(char *arg)
-{
- size_t cnt, i, first = 1;
- glob_t glob_results;
- char *retval = NULL;
- char *wildcard = expand_tokens(arg);
- if (glob(wildcard, GLOB_NOSORT, 0, &glob_results)
- == 0)
- {
- cnt = glob_results.gl_pathc;
- for (i=0; i<cnt; i++)
- {
- #ifdef TVOSf_Linux
- /* glob() on linux returns the filename, if it contains no
- meta characters even when it does not exist */
- struct stat st;
- if (stat(glob_results.gl_pathv[i], &st))
- continue;
- #endif
- if (!first)
- string_cat(retval, " ");
- string_cat(retval, glob_results.gl_pathv[i]);
- first = 0;
- }
- globfree(&glob_results);
- }
- else
- retval = string_dup("");
- string_free(wildcard);
- return retval;
-}
-
-static A(1)
-char *string_function_word(char *_arg)
-{
- int nr;
- char *arg = expand_tokens(_arg);
- char *retval = string_dup("");
- char *arg2 = find_next_comma(arg);
- char *tok;
- if (!arg2)
- goto end;
- if (sscanf(arg, "%d", &nr) != 1)
- goto end;
- if (nr < 1)
- goto end;
- arg2++;
- for (tok = strtok(arg2," ");tok;tok = strtok(NULL," "))
- {
- nr--;
- if (!nr)
- {
- string_cat(retval, tok);
- goto end;
- }
- }
-end:
- string_free(arg);
- return retval;
-}
-
-#endif
-
-