token read in diff state
[build-config.git] / src / config / lxrgmr-code / token / envar.c
blob8a7fc78908c30ce64f692e85e1e6b89a4cc7ee6f
2 #include "stdio.h"
3 #include "unistd.h"
4 #include "memory.h"
6 void env_param_cnt (char *pbuff, int size)
10 void env_param_list (char *pbuff, int size)
14 void env_param_strlist (char *pbuff, int size)
18 void env_param (char *pbuff, int size, int id)
22 void env_last_retval (char *pbuff, int size)
26 void env_ppid (char *pbuff, int size)
28 sprintf(pbuff, "%d", getppid());
31 void env_pid (char *pbuff, int size)
33 sprintf(pbuff, "%d", getpid());
36 void env_var (char *pbuff, int size, char *pname)
40 typedef struct __tag_ENVAR {
41 int i;
42 } ENVAR, *PENVAR;
44 void env_var_adv (char *pbuff, int size, ENVAR *pstEnvar)
48 void env_subscript (char *pbuff, int size, char *pname, int len)
52 void env_expr (char *pbuff, int size, char *pname, int len)
56 void env_expanssion (char *pbuff, int size, char *pname, int len)
61 * set '$' flag.
63 int on_dollar_proc (int evt, int token, register const char *str, register unsigned int len, SRC_FILE_DESC *psrcfile)
65 #define BUFF_SIZE 1024
66 char buff[BUFF_SIZE];
67 char name[BUFF_SIZE];
69 char c;
70 printf("################################################ DOLLAR\n");
72 c = str[1];
73 if (c == 0)
74 c = read_getc(psrcfile);
76 if (c == ' ' || c == '\t' || c == '\n' || c == '\r')
78 read_ungetc(c, psrcfile);
79 str_buff[str_idx]=str[0];
80 str_idx++;
81 str_buff[str_idx]=0;
82 str_idx++;
83 return T_WORD;
87 * T_GT, <()
88 * & T_LT, >()
90 if (token == T_GT || token == T_LT || token == T_DOLLAR)
92 if (c != '(')
94 read_ungetc(c, psrcfile);
95 str_buff[str_idx]=str[0];
96 str_idx++;
97 str_buff[str_idx]=0;
98 str_idx++;
99 return T_WORD;
102 psrcfile->pstCurrTokenState->state_token_str = ")";
103 psrcfile->pstCurrTokenState->paired_token = T_RBRACKET1;
104 psrcfile->pstCurrTokenState->pfnPairTokenProc = on_func_code_blk;
105 STATE_SWITCH(psrcfile, STATE_CODEBLOCK);
106 return T_SKIP;
109 if (c == '{')
111 mask_char = '\\';
112 pfx_char = 0;
113 pair_begin = 0;
114 pair_end = 0;
115 endstr[0] = '}';
116 endstr[1] = 0;
117 endstr_len = 1;
119 str_buff[0] = '$';
120 str_buff[1] = '{';
121 endstr[2] = 0;
122 str_idx = 2;
123 readuntil(psrcfile);
124 return T_ENVAR;
126 else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_')
128 c = read_token_str(psrcfile);
129 env_var(buff, BUFF_SIZE, name);
131 else if ((c >= '0' && c >= '9'))
133 env_var(buff, BUFF_SIZE, name);
135 else if (c == '[')
137 psrcfile->pstCurrTokenState->state_token_str = "]";
138 psrcfile->pstCurrTokenState->paired_token = T_RBRACKET2;
140 psrcfile->pstCurrTokenState->pfnPairTokenProc = on_func_code_blk;
142 STATE_SWITCH(psrcfile, STATE_EXPR);
143 // XXX: on_expr_entry();
144 return T_SKIP;
146 else if (c == '\'')
148 mask_char = 0;
149 pfx_char = 0;
150 pair_begin = 0;
151 pair_end = 0;
152 endstr[0] = '\'';
153 endstr[1] = 0;
154 endstr_len = 1;
156 str_buff[0] = '\'';
157 str_buff[1] = 0;
158 str_idx = 1;
159 readuntil(psrcfile);
160 translate_char(str_buff, str_idx);
161 str_buff[0] = '\'';
162 str_idx++;
163 str_buff[1] = 0;
164 return T_WORD_QUOTE;
166 else if (c == '?')
168 env_last_retval(buff, BUFF_SIZE);
170 else if (c == '!')
172 env_pid(buff, BUFF_SIZE);
173 return T_WORD;
175 else if (c == '$')
177 env_ppid(buff, BUFF_SIZE);
178 return T_WORD;
180 else if (c == '#')
182 env_param_cnt(buff, BUFF_SIZE);
183 return T_WORD;
185 else if (c == '@')
187 env_param_list(buff, BUFF_SIZE);
188 return T_WORD;
190 else if (c == '*')
192 env_param_strlist(buff, BUFF_SIZE);
193 return T_WORD;
195 else
197 //printf("char '%c' followed after $ does not a valid combination.\n", c);
198 read_ungetc(c, psrcfile);
199 str_buff[str_idx]=str[0];
200 str_idx++;
201 str_buff[str_idx]=0;
202 str_idx++;
203 return T_WORD;
206 //STATE_SWITCH(psrcfile, STATE_DOLLAR);
207 //SET_STATE_FLAG(psrcfile->pstCurrTokenState, TF_DOLLAR);
209 return T_SKIP;