シェルスクリプト言語xyzshのソースコード。
Revisão | b66f3cdd2c17a19b9ea82952e4f88e4d25ea1fd0 (tree) |
---|---|
Hora | 2013-01-10 21:18:35 |
Autor | ![]() |
Commiter | ab25cq |
1.3.0
@@ -1,4 +1,12 @@ | ||
1 | 1 | |
2 | +2013 1月10日 version 1.3.0 | |
3 | + | |
4 | + 1. ダイナミックライブラリーのバージョンアップ | |
5 | + | |
6 | + 2. リファクタリング。memcheckerの廃止。オブジェクトの消費メモリが少なくなりました。(1オブジェクトを32ビットまで落とせた) | |
7 | + | |
8 | +mfiler4にも影響があります。mfiler4は1.0.9以上から、このxyzshに対応します。 | |
9 | + | |
2 | 10 | 2013 1月6日 version 1.2.9 |
3 | 11 | |
4 | 12 | 1. defとclassに-copy-stackframeオプションがつきました。xyzsh.xyzshで定義されているtimes関数で使われてます。 |
@@ -15,3 +15,5 @@ ASSERTマクロをもっと使う | ||
15 | 15 | エラー出力のリダイレクト %2> |
16 | 16 | |
17 | 17 | 変数に新規オブジェクトの作成機能はあるが代入の機能がない。 |
18 | + | |
19 | +memcheckerの廃止 |
@@ -3029,7 +3029,7 @@ SO_VERSION=1.5.8 | ||
3029 | 3029 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking Operating System" >&5 |
3030 | 3030 | $as_echo_n "checking Operating System... " >&6; } |
3031 | 3031 | |
3032 | -OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/memchecker.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o" | |
3032 | +OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o" | |
3033 | 3033 | |
3034 | 3034 | |
3035 | 3035 | if test `uname -s` = "Darwin"; then |
@@ -32,11 +32,11 @@ AC_SUBST(SYSTEM_MIGEMODIR) | ||
32 | 32 | ##################################################################### |
33 | 33 | # check operating systems |
34 | 34 | ##################################################################### |
35 | -SO_VERSION=1.5.8 | |
35 | +SO_VERSION=1.6.1 | |
36 | 36 | AC_SUBST(SO_VERSION) |
37 | 37 | AC_MSG_CHECKING(Operating System) |
38 | 38 | |
39 | -OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/memchecker.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o" | |
39 | +OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o" | |
40 | 40 | AC_SUBST(OBJ) |
41 | 41 | |
42 | 42 | if test `uname -s` = "Darwin"; then |
@@ -962,7 +962,7 @@ static BOOL expand_env_to_command(ALLOC char** result, char* str, sCommand* comm | ||
962 | 962 | /// block /// |
963 | 963 | else { |
964 | 964 | int rcode; |
965 | - sObject* nextout = FD_NEW_STACK(kFDKindBuf, 0); | |
965 | + sObject* nextout = FD_NEW_STACK(); | |
966 | 966 | |
967 | 967 | if(!run(env->mBlock, nextin, nextout, &rcode, runinfo->mCurrentObject, runinfo->mRunningObject)) |
968 | 968 | { |
@@ -986,9 +986,9 @@ static BOOL expand_env_to_command(ALLOC char** result, char* str, sCommand* comm | ||
986 | 986 | fd_split(nextout, env->mLineField); |
987 | 987 | |
988 | 988 | int i; |
989 | - for(i=0; i<vector_count(SFD(nextout).fdbuf.mLines); i++) | |
989 | + for(i=0; i<vector_count(SFD(nextout).mLines); i++) | |
990 | 990 | { |
991 | - char* item = vector_item(SFD(nextout).fdbuf.mLines, i); | |
991 | + char* item = vector_item(SFD(nextout).mLines, i); | |
992 | 992 | sObject* item2 = STRING_NEW_STACK(item); |
993 | 993 | string_chomp(item2); |
994 | 994 |
@@ -998,7 +998,7 @@ static BOOL expand_env_to_command(ALLOC char** result, char* str, sCommand* comm | ||
998 | 998 | } |
999 | 999 | } |
1000 | 1000 | else { |
1001 | - add_str_to_buf(&buf, SFD(nextout).fdbuf.mBuf, SFD(nextout).fdbuf.mBufLen); | |
1001 | + add_str_to_buf(&buf, SFD(nextout).mBuf, SFD(nextout).mBufLen); | |
1002 | 1002 | } |
1003 | 1003 | } |
1004 | 1004 | } |
@@ -1310,8 +1310,8 @@ int block_gc_children_mark(sObject* self) | ||
1310 | 1310 | for(k=0; k<SBLOCK(self).mStatments[i].mCommands[j].mBlocksNum; k++) |
1311 | 1311 | { |
1312 | 1312 | sObject* block = SBLOCK(self).mStatments[i].mCommands[j].mBlocks[k]; |
1313 | - if((block->mFlg & GC_MARK) == 0) { | |
1314 | - block->mFlg |= GC_MARK; | |
1313 | + if(IS_MARKED(block) == 0) { | |
1314 | + SET_MARK(block); | |
1315 | 1315 | count++; |
1316 | 1316 | count += block_gc_children_mark(block); |
1317 | 1317 | } |
@@ -1319,8 +1319,8 @@ int block_gc_children_mark(sObject* self) | ||
1319 | 1319 | for(k=0; k<SBLOCK(self).mStatments[i].mCommands[j].mEnvsNum; k++) { |
1320 | 1320 | if(SBLOCK(self).mStatments[i].mCommands[j].mEnvs[k].mKind == kEnvBlock) { |
1321 | 1321 | sObject* block = SBLOCK(self).mStatments[i].mCommands[j].mEnvs[k].mBlock; |
1322 | - if((block->mFlg & GC_MARK) == 0) { | |
1323 | - block->mFlg |= GC_MARK; | |
1322 | + if(IS_MARKED(block) == 0) { | |
1323 | + SET_MARK(block); | |
1324 | 1324 | count++; |
1325 | 1325 | count += block_gc_children_mark(block); |
1326 | 1326 | } |
@@ -1355,7 +1355,7 @@ void sCommand_add_env(sCommand* self, MANAGED char* name, MANAGED char* key, BOO | ||
1355 | 1355 | self->mEnvsNum++; |
1356 | 1356 | } |
1357 | 1357 | |
1358 | -void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, enum eLineField lf) | |
1358 | +void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, eLineField lf) | |
1359 | 1359 | { |
1360 | 1360 | if(self->mEnvsNum >= self->mEnvsSize) { |
1361 | 1361 | if(self->mEnvs == NULL) { |
@@ -141,8 +141,8 @@ int class_gc_children_mark(sObject* self) | ||
141 | 141 | |
142 | 142 | sObject* block = SCLASS(self).mBlock; |
143 | 143 | if(block) { |
144 | - if((block->mFlg & GC_MARK) == 0) { | |
145 | - block->mFlg |= GC_MARK; | |
144 | + if(IS_MARKED(block) == 0) { | |
145 | + SET_MARK(block); | |
146 | 146 | count++; |
147 | 147 | count += object_gc_children_mark(block); |
148 | 148 | } |
@@ -150,8 +150,8 @@ int class_gc_children_mark(sObject* self) | ||
150 | 150 | |
151 | 151 | sObject* parent = SCLASS(self).mParent; |
152 | 152 | if(parent) { |
153 | - if((parent->mFlg & GC_MARK) == 0) { | |
154 | - parent->mFlg |= GC_MARK; | |
153 | + if(IS_MARKED(parent) == 0) { | |
154 | + SET_MARK(parent); | |
155 | 155 | count++; |
156 | 156 | count += object_gc_children_mark(parent); |
157 | 157 | } |
@@ -159,8 +159,8 @@ int class_gc_children_mark(sObject* self) | ||
159 | 159 | |
160 | 160 | sObject* lobjects = SCLASS(self).mLocalObjects; |
161 | 161 | if(lobjects) { |
162 | - if((lobjects->mFlg & GC_MARK) == 0) { | |
163 | - lobjects->mFlg |= GC_MARK; | |
162 | + if(IS_MARKED(lobjects) == 0) { | |
163 | + SET_MARK(lobjects); | |
164 | 164 | count++; |
165 | 165 | count += object_gc_children_mark(lobjects); |
166 | 166 | } |
@@ -168,8 +168,8 @@ int class_gc_children_mark(sObject* self) | ||
168 | 168 | |
169 | 169 | sObject* arg_blocks = SCLASS(self).mArgBlocks; |
170 | 170 | if(arg_blocks) { |
171 | - if((arg_blocks->mFlg & GC_MARK) == 0) { | |
172 | - arg_blocks->mFlg |= GC_MARK; | |
171 | + if(IS_MARKED(arg_blocks) == 0) { | |
172 | + SET_MARK(arg_blocks); | |
173 | 173 | count++; |
174 | 174 | count += object_gc_children_mark(arg_blocks); |
175 | 175 | } |
@@ -28,7 +28,7 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
28 | 28 | { |
29 | 29 | sCommand* command = runinfo->mCommand; |
30 | 30 | |
31 | - enum eLineField lf = gLineField; | |
31 | + eLineField lf = gLineField; | |
32 | 32 | if(sCommand_option_item(command, "-Lw")) { |
33 | 33 | lf = kCRLF; |
34 | 34 | } |
@@ -47,7 +47,7 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
47 | 47 | |
48 | 48 | char* argument; |
49 | 49 | if(argument = sCommand_option_with_argument_item(command, "-number")) { |
50 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
50 | + if(SFD(nextin).mBufLen == 0) { | |
51 | 51 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
52 | 52 | } |
53 | 53 | else { |
@@ -56,16 +56,16 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
56 | 56 | |
57 | 57 | int number = atoi(argument); |
58 | 58 | |
59 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
59 | + sObject* nextin2 = FD_NEW_STACK(); | |
60 | 60 | |
61 | 61 | int i; |
62 | - for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i+=number) { | |
62 | + for(i=0; i<vector_count(SFD(nextin).mLines); i+=number) { | |
63 | 63 | fd_clear(nextin2); |
64 | 64 | |
65 | 65 | int j; |
66 | - for(j=0; j<number && i+j<vector_count(SFD(nextin).fdbuf.mLines); j++) | |
66 | + for(j=0; j<number && i+j<vector_count(SFD(nextin).mLines); j++) | |
67 | 67 | { |
68 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, i+j); | |
68 | + char* str = vector_item(SFD(nextin).mLines, i+j); | |
69 | 69 | if(!fd_write(nextin2, str, strlen(str))) { |
70 | 70 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
71 | 71 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -89,20 +89,20 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
89 | 89 | } |
90 | 90 | } |
91 | 91 | else { |
92 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
92 | + if(SFD(nextin).mBufLen == 0) { | |
93 | 93 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
94 | 94 | } |
95 | 95 | else { |
96 | 96 | runinfo->mRCode = 0; |
97 | 97 | } |
98 | 98 | |
99 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
99 | + sObject* nextin2 = FD_NEW_STACK(); | |
100 | 100 | |
101 | 101 | int i; |
102 | - for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) { | |
102 | + for(i=0; i<vector_count(SFD(nextin).mLines); i++) { | |
103 | 103 | fd_clear(nextin2); |
104 | 104 | |
105 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, i); | |
105 | + char* str = vector_item(SFD(nextin).mLines, i); | |
106 | 106 | |
107 | 107 | if(!fd_write(nextin2, str, strlen(str))) { |
108 | 108 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
@@ -134,7 +134,7 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
134 | 134 | { |
135 | 135 | sCommand* command = runinfo->mCommand; |
136 | 136 | |
137 | - enum eLineField lf = gLineField; | |
137 | + eLineField lf = gLineField; | |
138 | 138 | if(sCommand_option_item(command, "-Lw")) { |
139 | 139 | lf = kCRLF; |
140 | 140 | } |
@@ -159,10 +159,10 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
159 | 159 | field = " "; |
160 | 160 | } |
161 | 161 | |
162 | - if(vector_count(SFD(nextin).fdbuf.mLines) > 0) { | |
162 | + if(vector_count(SFD(nextin).mLines) > 0) { | |
163 | 163 | int i; |
164 | - for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines)-1; i++) { | |
165 | - sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, i)); | |
164 | + for(i=0; i<vector_count(SFD(nextin).mLines)-1; i++) { | |
165 | + sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, i)); | |
166 | 166 | string_chomp(line); |
167 | 167 | if(!fd_write(nextout, string_c_str(line), string_length(line))) { |
168 | 168 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
@@ -176,7 +176,7 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
176 | 176 | } |
177 | 177 | } |
178 | 178 | |
179 | - sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, i)); | |
179 | + sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, i)); | |
180 | 180 | string_chomp(line); |
181 | 181 | if(!fd_write(nextout, string_c_str(line), string_length(line))) { |
182 | 182 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
@@ -191,7 +191,7 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
191 | 191 | } |
192 | 192 | } |
193 | 193 | |
194 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
194 | + if(SFD(nextin).mBufLen == 0) { | |
195 | 195 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
196 | 196 | } |
197 | 197 | else { |
@@ -206,7 +206,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
206 | 206 | { |
207 | 207 | sCommand* command = runinfo->mCommand; |
208 | 208 | |
209 | - enum eLineField lf = gLineField; | |
209 | + eLineField lf = gLineField; | |
210 | 210 | if(sCommand_option_item(command, "-Lw")) { |
211 | 211 | lf = kCRLF; |
212 | 212 | } |
@@ -221,7 +221,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
221 | 221 | } |
222 | 222 | |
223 | 223 | if(command->mArgsNumRuntime > 1 && command->mBlocksNum <= command->mArgsNumRuntime-1 && runinfo->mFilter) { |
224 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
224 | + if(SFD(nextin).mBufLen == 0) { | |
225 | 225 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
226 | 226 | } |
227 | 227 | else { |
@@ -230,7 +230,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
230 | 230 | |
231 | 231 | fd_split(nextin, lf); |
232 | 232 | |
233 | - if(vector_count(SFD(nextin).fdbuf.mLines) > 0) { | |
233 | + if(vector_count(SFD(nextin).mLines) > 0) { | |
234 | 234 | int i; |
235 | 235 | for(i=1; i<command->mArgsNumRuntime; i++) { |
236 | 236 | char* arg = command->mArgsRuntime[i]; |
@@ -256,30 +256,30 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
256 | 256 | int second = atoi(buf2); |
257 | 257 | |
258 | 258 | if(first < 0) { |
259 | - first += vector_count(SFD(nextin).fdbuf.mLines); | |
259 | + first += vector_count(SFD(nextin).mLines); | |
260 | 260 | if(first < 0) first = 0; |
261 | 261 | } |
262 | 262 | if(second < 0) { |
263 | - second += vector_count(SFD(nextin).fdbuf.mLines); | |
263 | + second += vector_count(SFD(nextin).mLines); | |
264 | 264 | if(second < 0) second = 0; |
265 | 265 | } |
266 | - if(first >= vector_count(SFD(nextin).fdbuf.mLines)) { | |
267 | - first = vector_count(SFD(nextin).fdbuf.mLines) -1; | |
266 | + if(first >= vector_count(SFD(nextin).mLines)) { | |
267 | + first = vector_count(SFD(nextin).mLines) -1; | |
268 | 268 | if(first < 0) first = 0; |
269 | 269 | } |
270 | - if(second >= vector_count(SFD(nextin).fdbuf.mLines)) { | |
271 | - second = vector_count(SFD(nextin).fdbuf.mLines) -1; | |
270 | + if(second >= vector_count(SFD(nextin).mLines)) { | |
271 | + second = vector_count(SFD(nextin).mLines) -1; | |
272 | 272 | if(second < 0) second = 0; |
273 | 273 | } |
274 | 274 | |
275 | 275 | if(first < second) { |
276 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
276 | + sObject* nextin2 = FD_NEW_STACK(); | |
277 | 277 | |
278 | 278 | int j; |
279 | 279 | for(j=first; j<=second; j++) { |
280 | 280 | fd_clear(nextin2); |
281 | 281 | |
282 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, j); | |
282 | + char* str = vector_item(SFD(nextin).mLines, j); | |
283 | 283 | if(!fd_write(nextin2,str,strlen(str))) { |
284 | 284 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
285 | 285 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -295,7 +295,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
295 | 295 | runinfo->mRCode = rcode; |
296 | 296 | } |
297 | 297 | else { |
298 | - if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen)) | |
298 | + if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen)) | |
299 | 299 | { |
300 | 300 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
301 | 301 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -306,13 +306,13 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
306 | 306 | } |
307 | 307 | } |
308 | 308 | else { |
309 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
309 | + sObject* nextin2 = FD_NEW_STACK(); | |
310 | 310 | |
311 | 311 | int j; |
312 | 312 | for(j=first; j>=second; j--) { |
313 | 313 | fd_clear(nextin2); |
314 | 314 | |
315 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, j); | |
315 | + char* str = vector_item(SFD(nextin).mLines, j); | |
316 | 316 | if(!fd_write(nextin2, str, strlen(str))) { |
317 | 317 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
318 | 318 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -329,7 +329,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
329 | 329 | runinfo->mRCode = rcode; |
330 | 330 | } |
331 | 331 | else { |
332 | - if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen)) | |
332 | + if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen)) | |
333 | 333 | { |
334 | 334 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
335 | 335 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -345,17 +345,17 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
345 | 345 | int num = atoi(arg); |
346 | 346 | |
347 | 347 | if(num < 0) { |
348 | - num += vector_count(SFD(nextin).fdbuf.mLines); | |
348 | + num += vector_count(SFD(nextin).mLines); | |
349 | 349 | if(num < 0) num = 0; |
350 | 350 | } |
351 | - if(num >= vector_count(SFD(nextin).fdbuf.mLines)) { | |
352 | - num = vector_count(SFD(nextin).fdbuf.mLines) -1; | |
351 | + if(num >= vector_count(SFD(nextin).mLines)) { | |
352 | + num = vector_count(SFD(nextin).mLines) -1; | |
353 | 353 | if(num < 0) num = 0; |
354 | 354 | } |
355 | 355 | |
356 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
356 | + sObject* nextin2 = FD_NEW_STACK(); | |
357 | 357 | |
358 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, num); | |
358 | + char* str = vector_item(SFD(nextin).mLines, num); | |
359 | 359 | if(!fd_write(nextin2, str, strlen(str))){ |
360 | 360 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
361 | 361 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -372,7 +372,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
372 | 372 | runinfo->mRCode = rcode; |
373 | 373 | } |
374 | 374 | else { |
375 | - if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen)) | |
375 | + if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen)) | |
376 | 376 | { |
377 | 377 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
378 | 378 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -548,7 +548,7 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
548 | 548 | { |
549 | 549 | sCommand* command = runinfo->mCommand; |
550 | 550 | |
551 | - enum eLineField lf = gLineField; | |
551 | + eLineField lf = gLineField; | |
552 | 552 | if(sCommand_option_item(command, "-Lw")) { |
553 | 553 | lf = kCRLF; |
554 | 554 | } |
@@ -566,23 +566,23 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
566 | 566 | if(sCommand_option_item(command, "-shuffle")) { |
567 | 567 | fd_split(nextin, lf); |
568 | 568 | |
569 | - if(vector_count(SFD(nextin).fdbuf.mLines) > 0) { | |
570 | - int* shuffle_num = MALLOC(sizeof(int)*vector_count(SFD(nextin).fdbuf.mLines)); | |
569 | + if(vector_count(SFD(nextin).mLines) > 0) { | |
570 | + int* shuffle_num = MALLOC(sizeof(int)*vector_count(SFD(nextin).mLines)); | |
571 | 571 | int i; |
572 | - for(i=0;i<vector_count(SFD(nextin).fdbuf.mLines); i++) { | |
572 | + for(i=0;i<vector_count(SFD(nextin).mLines); i++) { | |
573 | 573 | shuffle_num[i] = rand() % 2560; |
574 | 574 | } |
575 | 575 | |
576 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
577 | - if(!vector_sort_cancelable_shuffle(SFD(nextin).fdbuf.mLines, sort_fun_shuffle, shuffle_num)) { | |
576 | + sObject* nextin2 = FD_NEW_STACK(); | |
577 | + if(!vector_sort_cancelable_shuffle(SFD(nextin).mLines, sort_fun_shuffle, shuffle_num)) { | |
578 | 578 | FREE(shuffle_num); |
579 | 579 | return FALSE; |
580 | 580 | } |
581 | 581 | |
582 | 582 | FREE(shuffle_num); |
583 | 583 | |
584 | - for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) { | |
585 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, i); | |
584 | + for(i=0; i<vector_count(SFD(nextin).mLines); i++) { | |
585 | + char* line = vector_item(SFD(nextin).mLines, i); | |
586 | 586 | if(!fd_write(nextout, line, strlen(line))) { |
587 | 587 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
588 | 588 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -591,7 +591,7 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
591 | 591 | } |
592 | 592 | } |
593 | 593 | |
594 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
594 | + if(SFD(nextin).mBufLen == 0) { | |
595 | 595 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
596 | 596 | } |
597 | 597 | else { |
@@ -601,15 +601,15 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
601 | 601 | else if(command->mBlocksNum == 1) { |
602 | 602 | fd_split(nextin, lf); |
603 | 603 | |
604 | - if(vector_count(SFD(nextin).fdbuf.mLines) > 0) { | |
605 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
606 | - if(!vector_sort_cancelable(SFD(nextin).fdbuf.mLines, sort_fun, runinfo, nextin2, nextout)) { | |
604 | + if(vector_count(SFD(nextin).mLines) > 0) { | |
605 | + sObject* nextin2 = FD_NEW_STACK(); | |
606 | + if(!vector_sort_cancelable(SFD(nextin).mLines, sort_fun, runinfo, nextin2, nextout)) { | |
607 | 607 | return FALSE; |
608 | 608 | } |
609 | 609 | |
610 | 610 | int i; |
611 | - for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) { | |
612 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, i); | |
611 | + for(i=0; i<vector_count(SFD(nextin).mLines); i++) { | |
612 | + char* line = vector_item(SFD(nextin).mLines, i); | |
613 | 613 | if(!fd_write(nextout, line, strlen(line))) { |
614 | 614 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
615 | 615 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -617,7 +617,7 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
617 | 617 | } |
618 | 618 | } |
619 | 619 | } |
620 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
620 | + if(SFD(nextin).mBufLen == 0) { | |
621 | 621 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
622 | 622 | } |
623 | 623 | else { |
@@ -270,7 +270,7 @@ BOOL cmd_print(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
270 | 270 | } |
271 | 271 | else if(runinfo->mFilter) { |
272 | 272 | if(sCommand_option_item(command, "-read-from-error")) { |
273 | - if(!fd_write(out, SFD(gStderr).fdbuf.mBuf, SFD(gStderr).fdbuf.mBufLen)) { | |
273 | + if(!fd_write(out, SFD(gStderr).mBuf, SFD(gStderr).mBufLen)) { | |
274 | 274 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
275 | 275 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
276 | 276 | return FALSE; |
@@ -278,14 +278,14 @@ BOOL cmd_print(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
278 | 278 | fd_clear(gStderr); |
279 | 279 | } |
280 | 280 | else { |
281 | - if(!fd_write(out, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
281 | + if(!fd_write(out, SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
282 | 282 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
283 | 283 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
284 | 284 | return FALSE; |
285 | 285 | } |
286 | 286 | } |
287 | 287 | |
288 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
288 | + if(SFD(nextin).mBufLen == 0) { | |
289 | 289 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
290 | 290 | } |
291 | 291 | else { |
@@ -377,7 +377,12 @@ BOOL cmd_sweep(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
377 | 377 | |
378 | 378 | sObject* item = uobject_item(current_object, var_name); |
379 | 379 | |
380 | - if(item && item->mUserObject) { | |
380 | + if(!IS_USER_OBJECT(item)) { | |
381 | + err_msg("it's not user object. can't delete", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
382 | + return FALSE; | |
383 | + } | |
384 | + | |
385 | + if(item) { | |
381 | 386 | if(item != gCurrentObject || strcmp(var_name, SUOBJECT(item).mName) != 0) { |
382 | 387 | if(uobject_erase(current_object, var_name)) { |
383 | 388 | runinfo->mRCode = 0; |
@@ -443,7 +448,7 @@ BOOL cmd_eval(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
443 | 448 | runinfo->mRCode = rcode; |
444 | 449 | } |
445 | 450 | else if(runinfo->mFilter) { |
446 | - char* buf = SFD(nextin).fdbuf.mBuf; | |
451 | + char* buf = SFD(nextin).mBuf; | |
447 | 452 | |
448 | 453 | stack_start_stack(); |
449 | 454 | int rcode = 0; |
@@ -453,7 +458,7 @@ BOOL cmd_eval(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
453 | 458 | snprintf(buf2, BUFSIZ, "%s %d: eval", runinfo->mSName, runinfo->mSLine); |
454 | 459 | |
455 | 460 | if(parse(buf, buf2, &sline, block, NULL)) { |
456 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
461 | + sObject* nextin2 = FD_NEW_STACK(); | |
457 | 462 | if(!run(block, nextin2, nextout, &rcode, runinfo->mCurrentObject, runinfo->mRunningObject)) { |
458 | 463 | err_msg_adding("run time error", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
459 | 464 | runinfo->mRCode = rcode; |
@@ -469,7 +474,7 @@ BOOL cmd_eval(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
469 | 474 | |
470 | 475 | stack_end_stack(); |
471 | 476 | |
472 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
477 | + if(SFD(nextin).mBufLen == 0) { | |
473 | 478 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
474 | 479 | } |
475 | 480 | else { |
@@ -544,7 +549,7 @@ BOOL cmd_stackframe(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
544 | 549 | char* key = uobject_loop_key(it); |
545 | 550 | |
546 | 551 | char*obj_kind[16] = { |
547 | - NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "memchecker", "function", "class", "external program", "completion", "external object" | |
552 | + NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "function", "class", "external program", "completion", "external object" | |
548 | 553 | }; |
549 | 554 | int size = snprintf(buf, BUFSIZ, "%s: %s\n", key, obj_kind[TYPE(object2)]); |
550 | 555 |
@@ -571,8 +576,9 @@ BOOL cmd_funinfo(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
571 | 576 | { |
572 | 577 | sObject* running_object = runinfo->mRunningObject; |
573 | 578 | |
574 | - if(running_object && (TYPE(running_object) == T_FUN || TYPE(running_object) == T_CLASS) && SFUN(running_object).mRunInfo) { | |
575 | - sRunInfo* runinfo2 = SFUN(running_object).mRunInfo; | |
579 | + if(running_object && (TYPE(running_object) == T_FUN || TYPE(running_object) == T_CLASS) && gRunInfoOfRunningObject) | |
580 | + { | |
581 | + sRunInfo* runinfo2 = gRunInfoOfRunningObject; | |
576 | 582 | |
577 | 583 | char buf[BUFSIZ]; |
578 | 584 | sObject* object; |
@@ -31,7 +31,7 @@ BOOL cmd_condition_n(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
31 | 31 | |
32 | 32 | if(runinfo->mFilter) { |
33 | 33 | runinfo->mRCode = RCODE_NFUN_FALSE; |
34 | - if(SFD(nextin).fdbuf.mBufLen > 0) { | |
34 | + if(SFD(nextin).mBufLen > 0) { | |
35 | 35 | runinfo->mRCode = 0; |
36 | 36 | } |
37 | 37 | } |
@@ -45,7 +45,7 @@ BOOL cmd_condition_z(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
45 | 45 | |
46 | 46 | if(runinfo->mFilter) { |
47 | 47 | runinfo->mRCode = RCODE_NFUN_FALSE; |
48 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
48 | + if(SFD(nextin).mBufLen == 0) { | |
49 | 49 | runinfo->mRCode = 0; |
50 | 50 | } |
51 | 51 | } |
@@ -60,7 +60,7 @@ BOOL cmd_condition_b(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
60 | 60 | if(runinfo->mFilter) { |
61 | 61 | runinfo->mRCode = RCODE_NFUN_FALSE; |
62 | 62 | struct stat stat_; |
63 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
63 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
64 | 64 | if(S_ISBLK(stat_.st_mode)) { |
65 | 65 | runinfo->mRCode = 0; |
66 | 66 | } |
@@ -77,7 +77,7 @@ BOOL cmd_condition_c(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
77 | 77 | if(runinfo->mFilter) { |
78 | 78 | runinfo->mRCode = RCODE_NFUN_FALSE; |
79 | 79 | struct stat stat_; |
80 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
80 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
81 | 81 | if(S_ISCHR(stat_.st_mode)) { |
82 | 82 | runinfo->mRCode = 0; |
83 | 83 | } |
@@ -94,7 +94,7 @@ BOOL cmd_condition_d(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
94 | 94 | if(runinfo->mFilter) { |
95 | 95 | runinfo->mRCode = RCODE_NFUN_FALSE; |
96 | 96 | struct stat stat_; |
97 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
97 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
98 | 98 | if(S_ISDIR(stat_.st_mode)) { |
99 | 99 | runinfo->mRCode = 0; |
100 | 100 | } |
@@ -111,7 +111,7 @@ BOOL cmd_condition_f(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
111 | 111 | if(runinfo->mFilter) { |
112 | 112 | runinfo->mRCode = RCODE_NFUN_FALSE; |
113 | 113 | struct stat stat_; |
114 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
114 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
115 | 115 | if(S_ISREG(stat_.st_mode)) { |
116 | 116 | runinfo->mRCode = 0; |
117 | 117 | } |
@@ -128,7 +128,7 @@ BOOL cmd_condition_h(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
128 | 128 | if(runinfo->mFilter) { |
129 | 129 | runinfo->mRCode = RCODE_NFUN_FALSE; |
130 | 130 | struct stat stat_; |
131 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
131 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
132 | 132 | if(S_ISLNK(stat_.st_mode)) { |
133 | 133 | runinfo->mRCode = 0; |
134 | 134 | } |
@@ -145,7 +145,7 @@ BOOL cmd_condition_l(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
145 | 145 | if(runinfo->mFilter) { |
146 | 146 | runinfo->mRCode = RCODE_NFUN_FALSE; |
147 | 147 | struct stat stat_; |
148 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
148 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
149 | 149 | if(S_ISLNK(stat_.st_mode)) { |
150 | 150 | runinfo->mRCode = 0; |
151 | 151 | } |
@@ -162,7 +162,7 @@ BOOL cmd_condition_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
162 | 162 | if(runinfo->mFilter) { |
163 | 163 | runinfo->mRCode = RCODE_NFUN_FALSE; |
164 | 164 | struct stat stat_; |
165 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
165 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
166 | 166 | if(S_ISFIFO(stat_.st_mode)) { |
167 | 167 | runinfo->mRCode = 0; |
168 | 168 | } |
@@ -185,7 +185,7 @@ BOOL cmd_condition_s2(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
185 | 185 | if(runinfo->mFilter) { |
186 | 186 | runinfo->mRCode = RCODE_NFUN_FALSE; |
187 | 187 | struct stat stat_; |
188 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
188 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
189 | 189 | if(S_ISSOCK(stat_.st_mode)) { |
190 | 190 | runinfo->mRCode = 0; |
191 | 191 | } |
@@ -202,7 +202,7 @@ BOOL cmd_condition_g(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
202 | 202 | if(runinfo->mFilter) { |
203 | 203 | runinfo->mRCode = RCODE_NFUN_FALSE; |
204 | 204 | struct stat stat_; |
205 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
205 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
206 | 206 | if(stat_.st_mode & S_ISGID) { |
207 | 207 | runinfo->mRCode = 0; |
208 | 208 | } |
@@ -219,7 +219,7 @@ BOOL cmd_condition_k(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
219 | 219 | if(runinfo->mFilter) { |
220 | 220 | runinfo->mRCode = RCODE_NFUN_FALSE; |
221 | 221 | struct stat stat_; |
222 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
222 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
223 | 223 | #if defined(S_ISTXT) |
224 | 224 | if(stat_.st_mode & S_ISTXT) { |
225 | 225 | runinfo->mRCode = 0; |
@@ -243,7 +243,7 @@ BOOL cmd_condition_u(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
243 | 243 | if(runinfo->mFilter) { |
244 | 244 | runinfo->mRCode = RCODE_NFUN_FALSE; |
245 | 245 | struct stat stat_; |
246 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
246 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
247 | 247 | if(stat_.st_mode & S_ISUID) { |
248 | 248 | runinfo->mRCode = 0; |
249 | 249 | } |
@@ -259,7 +259,7 @@ BOOL cmd_condition_r(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
259 | 259 | |
260 | 260 | if(runinfo->mFilter) { |
261 | 261 | runinfo->mRCode = RCODE_NFUN_FALSE; |
262 | - if(access(SFD(nextin).fdbuf.mBuf, R_OK) == 0) { | |
262 | + if(access(SFD(nextin).mBuf, R_OK) == 0) { | |
263 | 263 | runinfo->mRCode = 0; |
264 | 264 | } |
265 | 265 | } |
@@ -273,7 +273,7 @@ BOOL cmd_condition_w(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
273 | 273 | |
274 | 274 | if(runinfo->mFilter) { |
275 | 275 | runinfo->mRCode = RCODE_NFUN_FALSE; |
276 | - if(access(SFD(nextin).fdbuf.mBuf, W_OK) == 0) { | |
276 | + if(access(SFD(nextin).mBuf, W_OK) == 0) { | |
277 | 277 | runinfo->mRCode = 0; |
278 | 278 | } |
279 | 279 | } |
@@ -287,7 +287,7 @@ BOOL cmd_condition_x(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
287 | 287 | |
288 | 288 | if(runinfo->mFilter) { |
289 | 289 | runinfo->mRCode = RCODE_NFUN_FALSE; |
290 | - if(access(SFD(nextin).fdbuf.mBuf, X_OK) == 0) { | |
290 | + if(access(SFD(nextin).mBuf, X_OK) == 0) { | |
291 | 291 | runinfo->mRCode = 0; |
292 | 292 | } |
293 | 293 | } |
@@ -302,7 +302,7 @@ BOOL cmd_condition_o(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
302 | 302 | if(runinfo->mFilter) { |
303 | 303 | runinfo->mRCode = RCODE_NFUN_FALSE; |
304 | 304 | struct stat stat_; |
305 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
305 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
306 | 306 | if(stat_.st_uid == getuid()) { |
307 | 307 | runinfo->mRCode = 0; |
308 | 308 | } |
@@ -319,7 +319,7 @@ BOOL cmd_condition_g2(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
319 | 319 | if(runinfo->mFilter) { |
320 | 320 | runinfo->mRCode = RCODE_NFUN_FALSE; |
321 | 321 | struct stat stat_; |
322 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
322 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
323 | 323 | if(stat_.st_gid == getgid()) { |
324 | 324 | runinfo->mRCode = 0; |
325 | 325 | } |
@@ -336,7 +336,7 @@ BOOL cmd_condition_e(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
336 | 336 | if(runinfo->mFilter) { |
337 | 337 | runinfo->mRCode = RCODE_NFUN_FALSE; |
338 | 338 | struct stat stat_; |
339 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
339 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
340 | 340 | runinfo->mRCode = 0; |
341 | 341 | } |
342 | 342 | } |
@@ -351,7 +351,7 @@ BOOL cmd_condition_s(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
351 | 351 | if(runinfo->mFilter) { |
352 | 352 | runinfo->mRCode = RCODE_NFUN_FALSE; |
353 | 353 | struct stat stat_; |
354 | - if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) { | |
354 | + if(stat(SFD(nextin).mBuf, &stat_) == 0) { | |
355 | 355 | if(stat_.st_size > 0) { |
356 | 356 | runinfo->mRCode = 0; |
357 | 357 | } |
@@ -368,12 +368,12 @@ BOOL cmd_condition_eq(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
368 | 368 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
369 | 369 | runinfo->mRCode = RCODE_NFUN_FALSE; |
370 | 370 | if(sCommand_option_item(command, "-ignore-case")) { |
371 | - if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) == 0) { | |
371 | + if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) == 0) { | |
372 | 372 | runinfo->mRCode = 0; |
373 | 373 | } |
374 | 374 | } |
375 | 375 | else { |
376 | - if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) == 0) { | |
376 | + if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) == 0) { | |
377 | 377 | runinfo->mRCode = 0; |
378 | 378 | } |
379 | 379 | } |
@@ -389,12 +389,12 @@ BOOL cmd_condition_neq(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
389 | 389 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
390 | 390 | runinfo->mRCode = RCODE_NFUN_FALSE; |
391 | 391 | if(sCommand_option_item(command, "-ignore-case")) { |
392 | - if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) != 0) { | |
392 | + if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) != 0) { | |
393 | 393 | runinfo->mRCode = 0; |
394 | 394 | } |
395 | 395 | } |
396 | 396 | else { |
397 | - if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) != 0) { | |
397 | + if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) != 0) { | |
398 | 398 | runinfo->mRCode = 0; |
399 | 399 | } |
400 | 400 | } |
@@ -410,12 +410,12 @@ BOOL cmd_condition_slt(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
410 | 410 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
411 | 411 | runinfo->mRCode = RCODE_NFUN_FALSE; |
412 | 412 | if(sCommand_option_item(command, "-ignore-case")) { |
413 | - if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) < 0) { | |
413 | + if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) < 0) { | |
414 | 414 | runinfo->mRCode = 0; |
415 | 415 | } |
416 | 416 | } |
417 | 417 | else { |
418 | - if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) < 0) { | |
418 | + if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) < 0) { | |
419 | 419 | runinfo->mRCode = 0; |
420 | 420 | } |
421 | 421 | } |
@@ -431,12 +431,12 @@ BOOL cmd_condition_sgt(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
431 | 431 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
432 | 432 | runinfo->mRCode = RCODE_NFUN_FALSE; |
433 | 433 | if(sCommand_option_item(command, "-ignore-case")) { |
434 | - if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) > 0) { | |
434 | + if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) > 0) { | |
435 | 435 | runinfo->mRCode = 0; |
436 | 436 | } |
437 | 437 | } |
438 | 438 | else { |
439 | - if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) > 0) { | |
439 | + if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) > 0) { | |
440 | 440 | runinfo->mRCode = 0; |
441 | 441 | } |
442 | 442 | } |
@@ -452,12 +452,12 @@ BOOL cmd_condition_sle(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
452 | 452 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
453 | 453 | runinfo->mRCode = RCODE_NFUN_FALSE; |
454 | 454 | if(sCommand_option_item(command, "-ignore-case")) { |
455 | - if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) <= 0) { | |
455 | + if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) <= 0) { | |
456 | 456 | runinfo->mRCode = 0; |
457 | 457 | } |
458 | 458 | } |
459 | 459 | else { |
460 | - if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) <= 0) { | |
460 | + if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) <= 0) { | |
461 | 461 | runinfo->mRCode = 0; |
462 | 462 | } |
463 | 463 | } |
@@ -473,12 +473,12 @@ BOOL cmd_condition_sge(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
473 | 473 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
474 | 474 | runinfo->mRCode = RCODE_NFUN_FALSE; |
475 | 475 | if(sCommand_option_item(command, "-ignore-case")) { |
476 | - if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) >= 0) { | |
476 | + if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) >= 0) { | |
477 | 477 | runinfo->mRCode = 0; |
478 | 478 | } |
479 | 479 | } |
480 | 480 | else { |
481 | - if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) >= 0) { | |
481 | + if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) >= 0) { | |
482 | 482 | runinfo->mRCode = 0; |
483 | 483 | } |
484 | 484 | } |
@@ -493,7 +493,7 @@ BOOL cmd_condition_eq2(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
493 | 493 | |
494 | 494 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
495 | 495 | runinfo->mRCode = RCODE_NFUN_FALSE; |
496 | - if(atoi(SFD(nextin).fdbuf.mBuf) == atoi(command->mArgsRuntime[1])) { | |
496 | + if(atoi(SFD(nextin).mBuf) == atoi(command->mArgsRuntime[1])) { | |
497 | 497 | runinfo->mRCode = 0; |
498 | 498 | } |
499 | 499 | } |
@@ -507,7 +507,7 @@ BOOL cmd_condition_ne(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
507 | 507 | |
508 | 508 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
509 | 509 | runinfo->mRCode = RCODE_NFUN_FALSE; |
510 | - if(atoi(SFD(nextin).fdbuf.mBuf) != atoi(command->mArgsRuntime[1])) { | |
510 | + if(atoi(SFD(nextin).mBuf) != atoi(command->mArgsRuntime[1])) { | |
511 | 511 | runinfo->mRCode = 0; |
512 | 512 | } |
513 | 513 | } |
@@ -521,7 +521,7 @@ BOOL cmd_condition_lt(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
521 | 521 | |
522 | 522 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
523 | 523 | runinfo->mRCode = RCODE_NFUN_FALSE; |
524 | - if(atoi(SFD(nextin).fdbuf.mBuf) < atoi(command->mArgsRuntime[1])) { | |
524 | + if(atoi(SFD(nextin).mBuf) < atoi(command->mArgsRuntime[1])) { | |
525 | 525 | runinfo->mRCode = 0; |
526 | 526 | } |
527 | 527 | } |
@@ -535,7 +535,7 @@ BOOL cmd_condition_le(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
535 | 535 | |
536 | 536 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
537 | 537 | runinfo->mRCode = RCODE_NFUN_FALSE; |
538 | - if(atoi(SFD(nextin).fdbuf.mBuf) <= atoi(command->mArgsRuntime[1])) { | |
538 | + if(atoi(SFD(nextin).mBuf) <= atoi(command->mArgsRuntime[1])) { | |
539 | 539 | runinfo->mRCode = 0; |
540 | 540 | } |
541 | 541 | } |
@@ -549,7 +549,7 @@ BOOL cmd_condition_gt(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
549 | 549 | |
550 | 550 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
551 | 551 | runinfo->mRCode = RCODE_NFUN_FALSE; |
552 | - if(atoi(SFD(nextin).fdbuf.mBuf) > atoi(command->mArgsRuntime[1])) { | |
552 | + if(atoi(SFD(nextin).mBuf) > atoi(command->mArgsRuntime[1])) { | |
553 | 553 | runinfo->mRCode = 0; |
554 | 554 | } |
555 | 555 | } |
@@ -563,7 +563,7 @@ BOOL cmd_condition_ge(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
563 | 563 | |
564 | 564 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
565 | 565 | runinfo->mRCode = RCODE_NFUN_FALSE; |
566 | - if(atoi(SFD(nextin).fdbuf.mBuf) >= atoi(command->mArgsRuntime[1])) { | |
566 | + if(atoi(SFD(nextin).mBuf) >= atoi(command->mArgsRuntime[1])) { | |
567 | 567 | runinfo->mRCode = 0; |
568 | 568 | } |
569 | 569 | } |
@@ -579,7 +579,7 @@ BOOL cmd_condition_nt(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
579 | 579 | runinfo->mRCode = RCODE_NFUN_FALSE; |
580 | 580 | struct stat lstat_; |
581 | 581 | struct stat rstat_; |
582 | - if(lstat(SFD(nextin).fdbuf.mBuf, &lstat_) == 0) { | |
582 | + if(lstat(SFD(nextin).mBuf, &lstat_) == 0) { | |
583 | 583 | if(lstat(command->mArgsRuntime[1], &rstat_) == 0) { |
584 | 584 | if(lstat_.st_mtime > rstat_.st_mtime) |
585 | 585 | { |
@@ -600,7 +600,7 @@ BOOL cmd_condition_ot(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
600 | 600 | runinfo->mRCode = RCODE_NFUN_FALSE; |
601 | 601 | struct stat lstat_; |
602 | 602 | struct stat rstat_; |
603 | - if(lstat(SFD(nextin).fdbuf.mBuf, &lstat_) == 0) { | |
603 | + if(lstat(SFD(nextin).mBuf, &lstat_) == 0) { | |
604 | 604 | if(lstat(command->mArgsRuntime[1], &rstat_) == 0) { |
605 | 605 | if(lstat_.st_mtime < rstat_.st_mtime) |
606 | 606 | { |
@@ -673,7 +673,7 @@ BOOL cmd_condition_re(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
673 | 673 | //BOOL preserve = sCommand_option_item(command, "-preserve"); |
674 | 674 | |
675 | 675 | runinfo->mRCode = RCODE_NFUN_FALSE; |
676 | - char* target = SFD(nextin).fdbuf.mBuf; | |
676 | + char* target = SFD(nextin).mBuf; | |
677 | 677 | char* regex = command->mArgsRuntime[1]; |
678 | 678 | |
679 | 679 | regex_t* reg; |
@@ -835,7 +835,7 @@ BOOL cmd_migemo_match(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
835 | 835 | |
836 | 836 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
837 | 837 | runinfo->mRCode = RCODE_NFUN_FALSE; |
838 | - char* target = SFD(nextin).fdbuf.mBuf; | |
838 | + char* target = SFD(nextin).mBuf; | |
839 | 839 | char* regex = command->mArgsRuntime[1]; |
840 | 840 | |
841 | 841 | if(regex[0] == 0) { |
@@ -92,7 +92,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
92 | 92 | return FALSE; |
93 | 93 | } |
94 | 94 | |
95 | - enum eLineField lf = gLineField; | |
95 | + eLineField lf = gLineField; | |
96 | 96 | if(sCommand_option_item(command, "-Lw")) { |
97 | 97 | lf = kCRLF; |
98 | 98 | } |
@@ -126,7 +126,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
126 | 126 | if(runinfo->mFilter) { |
127 | 127 | fd_split(nextin, lf); |
128 | 128 | |
129 | - if(vector_count(SFD(nextin).fdbuf.mLines) > 0) { | |
129 | + if(vector_count(SFD(nextin).mLines) > 0) { | |
130 | 130 | msave_ttysettings(); |
131 | 131 | msave_screen(); |
132 | 132 | initscr(); |
@@ -136,8 +136,8 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
136 | 136 | const int maxx = mgetmaxx(); |
137 | 137 | const int maxy = mgetmaxy(); |
138 | 138 | |
139 | - int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin).fdbuf.mLines)); | |
140 | - memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin).fdbuf.mLines)); | |
139 | + int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin).mLines)); | |
140 | + memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin).mLines)); | |
141 | 141 | |
142 | 142 | static int scrolltop = 0; |
143 | 143 | static int cursor = 0; |
@@ -150,15 +150,15 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
150 | 150 | if(cursor < 0) { |
151 | 151 | cursor = 0; |
152 | 152 | } |
153 | - if(cursor >= vector_count(SFD(nextin).fdbuf.mLines)) { | |
154 | - cursor = vector_count(SFD(nextin).fdbuf.mLines)-1; | |
153 | + if(cursor >= vector_count(SFD(nextin).mLines)) { | |
154 | + cursor = vector_count(SFD(nextin).mLines)-1; | |
155 | 155 | if(cursor < 0) cursor = 0; |
156 | 156 | } |
157 | 157 | if(cursor < scrolltop) { |
158 | 158 | int i = cursor; |
159 | 159 | int width_sum = 0; |
160 | 160 | while(width_sum < maxy) { |
161 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, i); | |
161 | + char* line = vector_item(SFD(nextin).mLines, i); | |
162 | 162 | int width = str_termlen(code, line) / maxx + 1; |
163 | 163 | width_sum += width; |
164 | 164 | i--; |
@@ -176,7 +176,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
176 | 176 | clear(); |
177 | 177 | int n = scrolltop; |
178 | 178 | int y = 0; |
179 | - while(y < maxy && n < vector_count(SFD(nextin).fdbuf.mLines)) { | |
179 | + while(y < maxy && n < vector_count(SFD(nextin).mLines)) { | |
180 | 180 | int attrs = 0; |
181 | 181 | if(n == cursor) { |
182 | 182 | attrs = A_REVERSE; |
@@ -186,7 +186,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
186 | 186 | } |
187 | 187 | if(attrs) attron(attrs); |
188 | 188 | |
189 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, n); | |
189 | + char* line = vector_item(SFD(nextin).mLines, n); | |
190 | 190 | |
191 | 191 | if(str_termlen(code, line) <= maxx) { |
192 | 192 | mvprintw(y, 0, "%s", line); |
@@ -239,7 +239,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
239 | 239 | } |
240 | 240 | else if(key == 'a' && multiple) { |
241 | 241 | int i; |
242 | - for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) { | |
242 | + for(i=0; i<vector_count(SFD(nextin).mLines); i++) { | |
243 | 243 | markfiles[i] = !markfiles[i]; |
244 | 244 | } |
245 | 245 | } |
@@ -251,9 +251,9 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
251 | 251 | if(multiple) { |
252 | 252 | BOOL flg_mark = FALSE; |
253 | 253 | int k; |
254 | - for(k=0; k<vector_count(SFD(nextin).fdbuf.mLines); k++) { | |
254 | + for(k=0; k<vector_count(SFD(nextin).mLines); k++) { | |
255 | 255 | if(markfiles[k]) { |
256 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, k); | |
256 | + char* str = vector_item(SFD(nextin).mLines, k); | |
257 | 257 | if(!fd_write(nextout,str, strlen(str))) { |
258 | 258 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
259 | 259 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -266,7 +266,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
266 | 266 | } |
267 | 267 | |
268 | 268 | if(!flg_mark) { |
269 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, cursor); | |
269 | + char* str = vector_item(SFD(nextin).mLines, cursor); | |
270 | 270 | if(!fd_write(nextout, str, strlen(str))) { |
271 | 271 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
272 | 272 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -276,7 +276,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
276 | 276 | } |
277 | 277 | } |
278 | 278 | else { |
279 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, cursor); | |
279 | + char* str = vector_item(SFD(nextin).mLines, cursor); | |
280 | 280 | if(!fd_write(nextout, str, strlen(str))) { |
281 | 281 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
282 | 282 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -284,7 +284,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
284 | 284 | return FALSE; |
285 | 285 | } |
286 | 286 | } |
287 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
287 | + if(SFD(nextin).mBufLen == 0) { | |
288 | 288 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
289 | 289 | } |
290 | 290 | else { |
@@ -296,8 +296,8 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
296 | 296 | if(cursor < 0) { |
297 | 297 | cursor = 0; |
298 | 298 | } |
299 | - if(cursor >= vector_count(SFD(nextin).fdbuf.mLines)) { | |
300 | - cursor = vector_count(SFD(nextin).fdbuf.mLines)-1; | |
299 | + if(cursor >= vector_count(SFD(nextin).mLines)) { | |
300 | + cursor = vector_count(SFD(nextin).mLines)-1; | |
301 | 301 | if(cursor < 0) cursor = 0; |
302 | 302 | } |
303 | 303 | if(cursor >= n) { |
@@ -307,7 +307,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
307 | 307 | int i = cursor; |
308 | 308 | int width_sum = 0; |
309 | 309 | while(width_sum < maxy) { |
310 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, i); | |
310 | + char* line = vector_item(SFD(nextin).mLines, i); | |
311 | 311 | int width = str_termlen(code, line) / maxx + 1; |
312 | 312 | width_sum += width; |
313 | 313 | i--; |
@@ -353,7 +353,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
353 | 353 | return FALSE; |
354 | 354 | } |
355 | 355 | |
356 | - enum eLineField lf = kLF; | |
356 | + eLineField lf = kLF; | |
357 | 357 | |
358 | 358 | enum eKanjiCode code = gKanjiCode; |
359 | 359 | if(sCommand_option_item(command, "-byte")) { |
@@ -370,11 +370,11 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
370 | 370 | } |
371 | 371 | |
372 | 372 | if(runinfo->mFilter) { |
373 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
373 | + sObject* nextin2 = FD_NEW_STACK(); | |
374 | 374 | |
375 | 375 | /// make control characters visible /// |
376 | - char* p = SFD(nextin).fdbuf.mBuf; | |
377 | - while(p - SFD(nextin).fdbuf.mBuf < SFD(nextin).fdbuf.mBufLen) { | |
376 | + char* p = SFD(nextin).mBuf; | |
377 | + while(p - SFD(nextin).mBuf < SFD(nextin).mBufLen) { | |
378 | 378 | if(*p == '\n') { |
379 | 379 | if(!fd_writec(nextin2, *p)) { |
380 | 380 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
@@ -418,8 +418,8 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
418 | 418 | const int maxx = mgetmaxx(); |
419 | 419 | const int maxy = mgetmaxy(); |
420 | 420 | |
421 | - int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin2).fdbuf.mLines)); | |
422 | - memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin2).fdbuf.mLines)); | |
421 | + int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin2).mLines)); | |
422 | + memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin2).mLines)); | |
423 | 423 | |
424 | 424 | static int scrolltop = 0; |
425 | 425 | static int cursor = 0; |
@@ -432,15 +432,15 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
432 | 432 | if(cursor < 0) { |
433 | 433 | cursor = 0; |
434 | 434 | } |
435 | - if(cursor >= vector_count(SFD(nextin2).fdbuf.mLines)) { | |
436 | - cursor = vector_count(SFD(nextin2).fdbuf.mLines)-1; | |
435 | + if(cursor >= vector_count(SFD(nextin2).mLines)) { | |
436 | + cursor = vector_count(SFD(nextin2).mLines)-1; | |
437 | 437 | if(cursor < 0) cursor = 0; |
438 | 438 | } |
439 | 439 | if(cursor < scrolltop) { |
440 | 440 | int i = cursor; |
441 | 441 | int width_sum = 0; |
442 | 442 | while(width_sum < maxy) { |
443 | - char* line = vector_item(SFD(nextin2).fdbuf.mLines, i); | |
443 | + char* line = vector_item(SFD(nextin2).mLines, i); | |
444 | 444 | int width = str_termlen(code, line) / maxx + 1; |
445 | 445 | width_sum += width; |
446 | 446 | i--; |
@@ -458,7 +458,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
458 | 458 | clear(); |
459 | 459 | int n = scrolltop; |
460 | 460 | int y = 0; |
461 | - while(y < maxy && n < vector_count(SFD(nextin2).fdbuf.mLines)) { | |
461 | + while(y < maxy && n < vector_count(SFD(nextin2).mLines)) { | |
462 | 462 | int attrs = 0; |
463 | 463 | if(n == cursor) { |
464 | 464 | attrs = A_REVERSE; |
@@ -468,7 +468,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
468 | 468 | } |
469 | 469 | if(attrs) attron(attrs); |
470 | 470 | |
471 | - char* line = vector_item(SFD(nextin2).fdbuf.mLines, n); | |
471 | + char* line = vector_item(SFD(nextin2).mLines, n); | |
472 | 472 | |
473 | 473 | if(str_termlen(code, line) <= maxx) { |
474 | 474 | mvprintw(y, 0, "%s", line); |
@@ -520,13 +520,13 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
520 | 520 | return FALSE; |
521 | 521 | } |
522 | 522 | else if(key == 10 || key == 13) { |
523 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
523 | + if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
524 | 524 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
525 | 525 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
526 | 526 | FREE(markfiles); |
527 | 527 | return FALSE; |
528 | 528 | } |
529 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
529 | + if(SFD(nextin).mBufLen == 0) { | |
530 | 530 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
531 | 531 | } |
532 | 532 | else { |
@@ -538,8 +538,8 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
538 | 538 | if(cursor < 0) { |
539 | 539 | cursor = 0; |
540 | 540 | } |
541 | - if(cursor >= vector_count(SFD(nextin2).fdbuf.mLines)) { | |
542 | - cursor = vector_count(SFD(nextin2).fdbuf.mLines)-1; | |
541 | + if(cursor >= vector_count(SFD(nextin2).mLines)) { | |
542 | + cursor = vector_count(SFD(nextin2).mLines)-1; | |
543 | 543 | if(cursor < 0) cursor = 0; |
544 | 544 | } |
545 | 545 | if(cursor >= n) { |
@@ -549,7 +549,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
549 | 549 | int i = cursor; |
550 | 550 | int width_sum = 0; |
551 | 551 | while(width_sum < maxy) { |
552 | - char* line = vector_item(SFD(nextin2).fdbuf.mLines, i); | |
552 | + char* line = vector_item(SFD(nextin2).mLines, i); | |
553 | 553 | int width = str_termlen(code, line) / maxx + 1; |
554 | 554 | width_sum += width; |
555 | 555 | i--; |
@@ -48,21 +48,21 @@ BOOL cmd_write(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
48 | 48 | } |
49 | 49 | |
50 | 50 | if(sCommand_option_item(command, "-error")) { |
51 | - if(!bufsiz_write(fd, SFD(gStderr).fdbuf.mBuf, SFD(gStderr).fdbuf.mBufLen)) { | |
51 | + if(!bufsiz_write(fd, SFD(gStderr).mBuf, SFD(gStderr).mBufLen)) { | |
52 | 52 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
53 | 53 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
54 | 54 | return FALSE; |
55 | 55 | } |
56 | 56 | fd_clear(gStderr); |
57 | 57 | |
58 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
58 | + if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
59 | 59 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
60 | 60 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
61 | 61 | return FALSE; |
62 | 62 | } |
63 | 63 | } |
64 | 64 | else { |
65 | - if(!bufsiz_write(fd, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
65 | + if(!bufsiz_write(fd, SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
66 | 66 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
67 | 67 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
68 | 68 | return FALSE; |
@@ -71,7 +71,7 @@ BOOL cmd_write(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
71 | 71 | |
72 | 72 | (void)close(fd); |
73 | 73 | |
74 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
74 | + if(SFD(nextin).mBufLen == 0) { | |
75 | 75 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
76 | 76 | } |
77 | 77 | else { |
@@ -82,7 +82,7 @@ BOOL cmd_plus(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
82 | 82 | |
83 | 83 | /// output |
84 | 84 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
85 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
85 | + char* arg = SFD(nextin).mBuf; | |
86 | 86 | int num = atoi(arg); |
87 | 87 | |
88 | 88 | num += atoi(command->mArgsRuntime[1]); |
@@ -96,7 +96,7 @@ BOOL cmd_plus(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
96 | 96 | return FALSE; |
97 | 97 | } |
98 | 98 | |
99 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
99 | + if(SFD(nextin).mBufLen == 0) { | |
100 | 100 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
101 | 101 | } |
102 | 102 | else { |
@@ -113,7 +113,7 @@ BOOL cmd_minus(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
113 | 113 | |
114 | 114 | /// output |
115 | 115 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
116 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
116 | + char* arg = SFD(nextin).mBuf; | |
117 | 117 | int num = atoi(arg); |
118 | 118 | |
119 | 119 | num -= atoi(command->mArgsRuntime[1]); |
@@ -127,7 +127,7 @@ BOOL cmd_minus(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
127 | 127 | return FALSE; |
128 | 128 | } |
129 | 129 | |
130 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
130 | + if(SFD(nextin).mBufLen == 0) { | |
131 | 131 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
132 | 132 | } |
133 | 133 | else { |
@@ -144,7 +144,7 @@ BOOL cmd_mult(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
144 | 144 | |
145 | 145 | /// output |
146 | 146 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
147 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
147 | + char* arg = SFD(nextin).mBuf; | |
148 | 148 | int num = atoi(arg); |
149 | 149 | |
150 | 150 | num *= atoi(command->mArgsRuntime[1]); |
@@ -158,7 +158,7 @@ BOOL cmd_mult(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
158 | 158 | return FALSE; |
159 | 159 | } |
160 | 160 | |
161 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
161 | + if(SFD(nextin).mBufLen == 0) { | |
162 | 162 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
163 | 163 | } |
164 | 164 | else { |
@@ -175,7 +175,7 @@ BOOL cmd_div(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
175 | 175 | |
176 | 176 | /// output |
177 | 177 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
178 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
178 | + char* arg = SFD(nextin).mBuf; | |
179 | 179 | int num = atoi(arg); |
180 | 180 | |
181 | 181 | int num2 = atoi(command->mArgsRuntime[1]); |
@@ -196,7 +196,7 @@ BOOL cmd_div(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
196 | 196 | return FALSE; |
197 | 197 | } |
198 | 198 | |
199 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
199 | + if(SFD(nextin).mBufLen == 0) { | |
200 | 200 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
201 | 201 | } |
202 | 202 | else { |
@@ -213,7 +213,7 @@ BOOL cmd_mod(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
213 | 213 | |
214 | 214 | /// output |
215 | 215 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
216 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
216 | + char* arg = SFD(nextin).mBuf; | |
217 | 217 | int num = atoi(arg); |
218 | 218 | |
219 | 219 | num = num % atoi(command->mArgsRuntime[1]); |
@@ -227,7 +227,7 @@ BOOL cmd_mod(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
227 | 227 | return FALSE; |
228 | 228 | } |
229 | 229 | |
230 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
230 | + if(SFD(nextin).mBufLen == 0) { | |
231 | 231 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
232 | 232 | } |
233 | 233 | else { |
@@ -244,7 +244,7 @@ BOOL cmd_pow(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
244 | 244 | |
245 | 245 | /// output |
246 | 246 | if(runinfo->mFilter && command->mArgsNumRuntime == 2) { |
247 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
247 | + char* arg = SFD(nextin).mBuf; | |
248 | 248 | int num = atoi(arg); |
249 | 249 | |
250 | 250 | num = pow(num, atoi(command->mArgsRuntime[1])); |
@@ -258,7 +258,7 @@ BOOL cmd_pow(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
258 | 258 | return FALSE; |
259 | 259 | } |
260 | 260 | |
261 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
261 | + if(SFD(nextin).mBufLen == 0) { | |
262 | 262 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
263 | 263 | } |
264 | 264 | else { |
@@ -275,7 +275,7 @@ BOOL cmd_abs(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
275 | 275 | |
276 | 276 | /// output |
277 | 277 | if(runinfo->mFilter) { |
278 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
278 | + char* arg = SFD(nextin).mBuf; | |
279 | 279 | int num = abs(atoi(arg)); |
280 | 280 | |
281 | 281 | char buf[128]; |
@@ -287,7 +287,7 @@ BOOL cmd_abs(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
287 | 287 | return FALSE; |
288 | 288 | } |
289 | 289 | |
290 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
290 | + if(SFD(nextin).mBufLen == 0) { | |
291 | 291 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
292 | 292 | } |
293 | 293 | else { |
@@ -35,8 +35,8 @@ BOOL cmd_mshow(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
35 | 35 | char* key = uobject_loop_key(it); |
36 | 36 | |
37 | 37 | char buf[BUFSIZ]; |
38 | - char*obj_kind[16] = { | |
39 | - NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "memchecker", "function", "class", "external program", "completion", "external object" | |
38 | + char*obj_kind[T_TYPE_MAX] = { | |
39 | + NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "file dicriptor2", "job", "object", "function", "class", "external program", "completion", "external object" | |
40 | 40 | }; |
41 | 41 | int size = snprintf(buf, BUFSIZ, "%s: %s\n", key, obj_kind[TYPE(object2)]); |
42 | 42 |
@@ -153,7 +153,7 @@ BOOL cmd_def(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
153 | 153 | int rcode = 0; |
154 | 154 | sObject* block = BLOCK_NEW_STACK(); |
155 | 155 | int sline = 1; |
156 | - if(!parse(SFD(nextin).fdbuf.mBuf, "def", &sline, block, NULL)) { | |
156 | + if(!parse(SFD(nextin).mBuf, "def", &sline, block, NULL)) { | |
157 | 157 | err_msg("parser error", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
158 | 158 | stack_end_stack(); |
159 | 159 | return FALSE; |
@@ -165,7 +165,7 @@ BOOL cmd_def(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
165 | 165 | } |
166 | 166 | stack_end_stack(); |
167 | 167 | |
168 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
168 | + if(SFD(nextin).mBufLen == 0) { | |
169 | 169 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
170 | 170 | } |
171 | 171 | else { |
@@ -221,7 +221,7 @@ BOOL cmd_class(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
221 | 221 | int rcode = 0; |
222 | 222 | sObject* block = BLOCK_NEW_STACK(); |
223 | 223 | int sline = 1; |
224 | - if(!parse(SFD(nextin).fdbuf.mBuf, "def", &sline, block, NULL)) { | |
224 | + if(!parse(SFD(nextin).mBuf, "def", &sline, block, NULL)) { | |
225 | 225 | err_msg("parser error", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
226 | 226 | stack_end_stack(); |
227 | 227 | return FALSE; |
@@ -233,7 +233,7 @@ BOOL cmd_class(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
233 | 233 | } |
234 | 234 | stack_end_stack(); |
235 | 235 | |
236 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
236 | + if(SFD(nextin).mBufLen == 0) { | |
237 | 237 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
238 | 238 | } |
239 | 239 | else { |
@@ -369,7 +369,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
369 | 369 | sCommand* command = runinfo->mCommand; |
370 | 370 | |
371 | 371 | char* field = "\n"; |
372 | - enum eLineField lf = gLineField; | |
372 | + eLineField lf = gLineField; | |
373 | 373 | if(sCommand_option_item(command, "-Lw")) { |
374 | 374 | lf = kCRLF; |
375 | 375 | field = "\r\n"; |
@@ -401,87 +401,14 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
401 | 401 | code = kEucjp; |
402 | 402 | } |
403 | 403 | |
404 | - /// output | |
405 | - if(!runinfo->mFilter) { | |
406 | - if(command->mArgsNumRuntime > 1) { | |
407 | - char* argument; | |
408 | - if(argument = sCommand_option_with_argument_item(command, "-index")) { | |
409 | - sObject* object = runinfo->mCurrentObject; | |
410 | - int i; | |
411 | - for(i=1; i<command->mArgsNumRuntime; i++) { | |
412 | - sObject* reciever = runinfo->mCurrentObject; | |
413 | - sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject); | |
414 | - | |
415 | - if(var && TYPE(var) == T_STRING) { | |
416 | - if(strlen(string_c_str(var)) > 0) { | |
417 | - int len = str_kanjilen(code, string_c_str(var)); | |
418 | - int num = atoi(argument); | |
419 | - if(num < 0) { | |
420 | - num += len; | |
421 | - if(num < 0) num = 0; | |
422 | - } | |
423 | - if(num >= len) { | |
424 | - num = len -1; | |
425 | - if(num < 0) num = 0; | |
426 | - } | |
427 | - | |
428 | - char* pos = str_kanjipos2pointer(code, string_c_str(var), num); | |
429 | - char* pos2 = str_kanjipos2pointer(code, pos, 1); | |
430 | - if(!fd_write(nextout, pos, pos2-pos)) { | |
431 | - err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
432 | - runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
433 | - return FALSE; | |
434 | - } | |
435 | - if(!fd_write(nextout, field, strlen(field))) { | |
436 | - err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
437 | - runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
438 | - return FALSE; | |
439 | - } | |
440 | - } | |
441 | - | |
442 | - runinfo->mRCode = 0; | |
443 | - } | |
444 | - else { | |
445 | - err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
446 | - return FALSE; | |
447 | - } | |
448 | - } | |
449 | - } | |
450 | - else { | |
451 | - sObject* object = runinfo->mCurrentObject; | |
452 | - int i; | |
453 | - for(i=1; i<command->mArgsNumRuntime; i++) { | |
454 | - sObject* reciever = runinfo->mCurrentObject; | |
455 | - sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject); | |
456 | - if(var && TYPE(var) == T_STRING) { | |
457 | - if(!fd_write(nextout, string_c_str(var), string_length(var))) { | |
458 | - err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
459 | - runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
460 | - return FALSE; | |
461 | - } | |
462 | - if(!fd_write(nextout, field, strlen(field))) { | |
463 | - err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
464 | - runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
465 | - return FALSE; | |
466 | - } | |
467 | - runinfo->mRCode = 0; | |
468 | - } | |
469 | - else { | |
470 | - err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
471 | - return FALSE; | |
472 | - } | |
473 | - } | |
474 | - } | |
475 | - } | |
476 | - } | |
477 | - /// input /// | |
478 | - else { | |
404 | + /// input | |
405 | + if(runinfo->mFilter) { | |
479 | 406 | fd_split(nextin, lf); |
480 | 407 | |
481 | 408 | if(sCommand_option_item(command, "-new")) { |
482 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
409 | + int max = vector_count(SFD(nextin).mLines); | |
483 | 410 | if(max > 0) { |
484 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, 0), TRUE); | |
411 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, 0), TRUE); | |
485 | 412 | string_chomp(new_var); |
486 | 413 | |
487 | 414 | if(!add_object_to_objects_in_pipe(new_var, runinfo, command)) |
@@ -527,7 +454,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
527 | 454 | if(sCommand_option_item(command, "-shift")) { |
528 | 455 | int i; |
529 | 456 | for(i=1;i<max; i++) { |
530 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, i); | |
457 | + char* str = vector_item(SFD(nextin).mLines, i); | |
531 | 458 | if(!fd_write(nextout, str, strlen(str))) { |
532 | 459 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
533 | 460 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -536,7 +463,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
536 | 463 | } |
537 | 464 | } |
538 | 465 | |
539 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
466 | + if(SFD(nextin).mBufLen == 0) { | |
540 | 467 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
541 | 468 | } |
542 | 469 | else { |
@@ -553,7 +480,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
553 | 480 | } |
554 | 481 | |
555 | 482 | int i; |
556 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
483 | + int max = vector_count(SFD(nextin).mLines); | |
557 | 484 | for(i=1; i<command->mArgsNumRuntime; i++) { |
558 | 485 | sObject* current = runinfo->mCurrentObject; |
559 | 486 | sObject* tmp = access_object3(command->mArgsRuntime[i], ¤t); |
@@ -564,7 +491,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
564 | 491 | } |
565 | 492 | |
566 | 493 | if(i-1 < max) { |
567 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i-1), TRUE); | |
494 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i-1), TRUE); | |
568 | 495 | string_chomp(new_var); |
569 | 496 | |
570 | 497 | uobject_put(object, command->mArgsRuntime[i], new_var); |
@@ -578,7 +505,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
578 | 505 | |
579 | 506 | if(sCommand_option_item(command, "-shift")) { |
580 | 507 | for(;i-1<max; i++) { |
581 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, i-1); | |
508 | + char* str = vector_item(SFD(nextin).mLines, i-1); | |
582 | 509 | if(!fd_write(nextout, str, strlen(str))) { |
583 | 510 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
584 | 511 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -587,7 +514,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
587 | 514 | } |
588 | 515 | } |
589 | 516 | |
590 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
517 | + if(SFD(nextin).mBufLen == 0) { | |
591 | 518 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
592 | 519 | } |
593 | 520 | else { |
@@ -595,6 +522,79 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
595 | 522 | } |
596 | 523 | } |
597 | 524 | } |
525 | + /// output /// | |
526 | + else { | |
527 | + if(command->mArgsNumRuntime > 1) { | |
528 | + char* argument; | |
529 | + if(argument = sCommand_option_with_argument_item(command, "-index")) { | |
530 | + sObject* object = runinfo->mCurrentObject; | |
531 | + int i; | |
532 | + for(i=1; i<command->mArgsNumRuntime; i++) { | |
533 | + sObject* reciever = runinfo->mCurrentObject; | |
534 | + sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject); | |
535 | + | |
536 | + if(var && TYPE(var) == T_STRING) { | |
537 | + if(strlen(string_c_str(var)) > 0) { | |
538 | + int len = str_kanjilen(code, string_c_str(var)); | |
539 | + int num = atoi(argument); | |
540 | + if(num < 0) { | |
541 | + num += len; | |
542 | + if(num < 0) num = 0; | |
543 | + } | |
544 | + if(num >= len) { | |
545 | + num = len -1; | |
546 | + if(num < 0) num = 0; | |
547 | + } | |
548 | + | |
549 | + char* pos = str_kanjipos2pointer(code, string_c_str(var), num); | |
550 | + char* pos2 = str_kanjipos2pointer(code, pos, 1); | |
551 | + if(!fd_write(nextout, pos, pos2-pos)) { | |
552 | + err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
553 | + runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
554 | + return FALSE; | |
555 | + } | |
556 | + if(!fd_write(nextout, field, strlen(field))) { | |
557 | + err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
558 | + runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
559 | + return FALSE; | |
560 | + } | |
561 | + } | |
562 | + | |
563 | + runinfo->mRCode = 0; | |
564 | + } | |
565 | + else { | |
566 | + err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
567 | + return FALSE; | |
568 | + } | |
569 | + } | |
570 | + } | |
571 | + else { | |
572 | + sObject* object = runinfo->mCurrentObject; | |
573 | + int i; | |
574 | + for(i=1; i<command->mArgsNumRuntime; i++) { | |
575 | + sObject* reciever = runinfo->mCurrentObject; | |
576 | + sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject); | |
577 | + if(var && TYPE(var) == T_STRING) { | |
578 | + if(!fd_write(nextout, string_c_str(var), string_length(var))) { | |
579 | + err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
580 | + runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
581 | + return FALSE; | |
582 | + } | |
583 | + if(!fd_write(nextout, field, strlen(field))) { | |
584 | + err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
585 | + runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
586 | + return FALSE; | |
587 | + } | |
588 | + runinfo->mRCode = 0; | |
589 | + } | |
590 | + else { | |
591 | + err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
592 | + return FALSE; | |
593 | + } | |
594 | + } | |
595 | + } | |
596 | + } | |
597 | + } | |
598 | 598 | |
599 | 599 | return TRUE; |
600 | 600 | } |
@@ -604,7 +604,7 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
604 | 604 | sCommand* command = runinfo->mCommand; |
605 | 605 | |
606 | 606 | char* field = "\n"; |
607 | - enum eLineField lf = gLineField; | |
607 | + eLineField lf = gLineField; | |
608 | 608 | if(sCommand_option_item(command, "-Lw")) { |
609 | 609 | lf = kCRLF; |
610 | 610 | field = "\r\n"; |
@@ -729,11 +729,12 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
729 | 729 | } |
730 | 730 | } |
731 | 731 | } |
732 | - else if(sCommand_option_item(command, "-new")) { | |
732 | + else if(sCommand_option_item(command, "-new")) | |
733 | + { | |
733 | 734 | fd_split(nextin, lf); |
734 | 735 | |
735 | 736 | int i; |
736 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
737 | + int max = vector_count(SFD(nextin).mLines); | |
737 | 738 | sObject* new_ary = VECTOR_NEW_GC(16, TRUE); |
738 | 739 | |
739 | 740 | if(!add_object_to_objects_in_pipe(new_ary, runinfo, command)) |
@@ -755,12 +756,12 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
755 | 756 | } |
756 | 757 | |
757 | 758 | for(i=0; i<max; i++) { |
758 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE); | |
759 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE); | |
759 | 760 | string_chomp(new_var); |
760 | 761 | vector_add(new_ary, new_var); |
761 | 762 | } |
762 | 763 | |
763 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
764 | + if(SFD(nextin).mBufLen == 0) { | |
764 | 765 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
765 | 766 | } |
766 | 767 | else { |
@@ -789,17 +790,17 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
789 | 790 | if(append > vector_count(ary)) append = vector_count(ary); |
790 | 791 | |
791 | 792 | int i; |
792 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
793 | + int max = vector_count(SFD(nextin).mLines); | |
793 | 794 | void** appended_ary = MALLOC(sizeof(sObject*)*max); |
794 | 795 | for(i=0; i<max; i++) { |
795 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE); | |
796 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE); | |
796 | 797 | string_chomp(new_var); |
797 | 798 | appended_ary[i] = new_var; |
798 | 799 | } |
799 | 800 | vector_mass_insert(ary, append, appended_ary, max); |
800 | 801 | FREE(appended_ary); |
801 | 802 | |
802 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
803 | + if(SFD(nextin).mBufLen == 0) { | |
803 | 804 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
804 | 805 | } |
805 | 806 | else { |
@@ -816,7 +817,7 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
816 | 817 | } |
817 | 818 | |
818 | 819 | int i; |
819 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
820 | + int max = vector_count(SFD(nextin).mLines); | |
820 | 821 | sObject* new_ary = VECTOR_NEW_GC(16, TRUE); |
821 | 822 | |
822 | 823 | sObject* current = runinfo->mCurrentObject; |
@@ -830,12 +831,12 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
830 | 831 | uobject_put(object, command->mArgsRuntime[1], new_ary); |
831 | 832 | |
832 | 833 | for(i=0; i<max; i++) { |
833 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE); | |
834 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE); | |
834 | 835 | string_chomp(new_var); |
835 | 836 | vector_add(new_ary, new_var); |
836 | 837 | } |
837 | 838 | |
838 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
839 | + if(SFD(nextin).mBufLen == 0) { | |
839 | 840 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
840 | 841 | } |
841 | 842 | else { |
@@ -852,7 +853,7 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
852 | 853 | sCommand* command = runinfo->mCommand; |
853 | 854 | |
854 | 855 | char* field = "\n"; |
855 | - enum eLineField lf = gLineField; | |
856 | + eLineField lf = gLineField; | |
856 | 857 | if(sCommand_option_item(command, "-Lw")) { |
857 | 858 | lf = kCRLF; |
858 | 859 | field = "\r\n"; |
@@ -984,7 +985,7 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
984 | 985 | fd_split(nextin, lf); |
985 | 986 | |
986 | 987 | int i; |
987 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
988 | + int max = vector_count(SFD(nextin).mLines); | |
988 | 989 | sObject* new_hash = HASH_NEW_GC(16, TRUE); |
989 | 990 | |
990 | 991 | if(!add_object_to_objects_in_pipe(new_hash, runinfo, command)) |
@@ -1008,17 +1009,17 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1008 | 1009 | sObject* key = STRING_NEW_STACK(""); |
1009 | 1010 | for(i=0; i<max; i++) { |
1010 | 1011 | if((i % 2) == 0) { |
1011 | - string_put(key, vector_item(SFD(nextin).fdbuf.mLines, i)); | |
1012 | + string_put(key, vector_item(SFD(nextin).mLines, i)); | |
1012 | 1013 | string_chomp(key); |
1013 | 1014 | } |
1014 | 1015 | else { |
1015 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE); | |
1016 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE); | |
1016 | 1017 | string_chomp(new_var); |
1017 | 1018 | hash_put(new_hash, string_c_str(key), new_var); |
1018 | 1019 | } |
1019 | 1020 | } |
1020 | 1021 | |
1021 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1022 | + if(SFD(nextin).mBufLen == 0) { | |
1022 | 1023 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1023 | 1024 | } |
1024 | 1025 | else { |
@@ -1040,21 +1041,21 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1040 | 1041 | } |
1041 | 1042 | |
1042 | 1043 | int i; |
1043 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
1044 | + int max = vector_count(SFD(nextin).mLines); | |
1044 | 1045 | sObject* key = STRING_NEW_STACK(""); |
1045 | 1046 | for(i=0; i<max; i++) { |
1046 | 1047 | if((i % 2) == 0) { |
1047 | - string_put(key, vector_item(SFD(nextin).fdbuf.mLines, i)); | |
1048 | + string_put(key, vector_item(SFD(nextin).mLines, i)); | |
1048 | 1049 | string_chomp(key); |
1049 | 1050 | } |
1050 | 1051 | else { |
1051 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE); | |
1052 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE); | |
1052 | 1053 | string_chomp(new_var); |
1053 | 1054 | hash_put(hash, string_c_str(key), new_var); |
1054 | 1055 | } |
1055 | 1056 | } |
1056 | 1057 | |
1057 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1058 | + if(SFD(nextin).mBufLen == 0) { | |
1058 | 1059 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1059 | 1060 | } |
1060 | 1061 | else { |
@@ -1071,7 +1072,7 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1071 | 1072 | } |
1072 | 1073 | |
1073 | 1074 | int i; |
1074 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
1075 | + int max = vector_count(SFD(nextin).mLines); | |
1075 | 1076 | sObject* new_hash = HASH_NEW_GC(16, TRUE); |
1076 | 1077 | |
1077 | 1078 | sObject* current = runinfo->mCurrentObject; |
@@ -1087,17 +1088,17 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1087 | 1088 | sObject* key = STRING_NEW_STACK(""); |
1088 | 1089 | for(i=0; i<max; i++) { |
1089 | 1090 | if((i % 2) == 0) { |
1090 | - string_put(key, vector_item(SFD(nextin).fdbuf.mLines, i)); | |
1091 | + string_put(key, vector_item(SFD(nextin).mLines, i)); | |
1091 | 1092 | string_chomp(key); |
1092 | 1093 | } |
1093 | 1094 | else { |
1094 | - sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE); | |
1095 | + sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE); | |
1095 | 1096 | string_chomp(new_var); |
1096 | 1097 | hash_put(new_hash, string_c_str(key), new_var); |
1097 | 1098 | } |
1098 | 1099 | } |
1099 | 1100 | |
1100 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1101 | + if(SFD(nextin).mBufLen == 0) { | |
1101 | 1102 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1102 | 1103 | } |
1103 | 1104 | else { |
@@ -1302,7 +1303,7 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1302 | 1303 | sCommand* command = runinfo->mCommand; |
1303 | 1304 | |
1304 | 1305 | char* field = "\n"; |
1305 | - enum eLineField lf = gLineField; | |
1306 | + eLineField lf = gLineField; | |
1306 | 1307 | if(sCommand_option_item(command, "-Lw")) { |
1307 | 1308 | lf = kCRLF; |
1308 | 1309 | field = "\r\n"; |
@@ -1361,34 +1362,32 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1361 | 1362 | /// type |
1362 | 1363 | if(sCommand_option_item(command, "-type")) { |
1363 | 1364 | int i; |
1364 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
1365 | + int max = vector_count(SFD(nextin).mLines); | |
1365 | 1366 | for(i=0; i<max; i++) { |
1366 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, i); | |
1367 | + char* line = vector_item(SFD(nextin).mLines, i); | |
1367 | 1368 | void* mem = (void*)(unsigned long)strtoll(line, NULL, 16); |
1368 | - if(mem == NULL) break; | |
1369 | + if(mem == NULL || !gc_valid_object(mem) || !contained_in_pipe(mem)) { | |
1370 | + err_msg("invalid address. it's not memory managed by a xyzsh gabage collecter or it doesn't exist in pipe data", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
1371 | + return FALSE; | |
1372 | + } | |
1369 | 1373 | |
1370 | - int type = memchecker_item(gMemChecker, mem); | |
1374 | + sObject* obj = mem; | |
1375 | + int type = TYPE(obj); | |
1371 | 1376 | |
1372 | - if(type >= 0) { | |
1373 | - char buf[128]; | |
1374 | - char* obj_kind[16] = { | |
1375 | - NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "memchecker", "function", "class", "external program", "completion", "external object" | |
1376 | - }; | |
1377 | - int size = snprintf(buf, 128, "%s\n", obj_kind[type]); | |
1377 | + char buf[128]; | |
1378 | + char* obj_kind[T_TYPE_MAX] = { | |
1379 | + NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "file dicriptor", "job", "object", "function", "class", "external program", "completion", "external object" | |
1380 | + }; | |
1381 | + int size = snprintf(buf, 128, "%s\n", obj_kind[type]); | |
1378 | 1382 | |
1379 | - if(!fd_write(nextout, buf, size)) { | |
1380 | - err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
1381 | - runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
1382 | - return FALSE; | |
1383 | - } | |
1384 | - } | |
1385 | - else { | |
1386 | - err_msg("invalid adress. it's not memory managed by a xyzsh gabage collecter", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
1383 | + if(!fd_write(nextout, buf, size)) { | |
1384 | + err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
1385 | + runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; | |
1387 | 1386 | return FALSE; |
1388 | 1387 | } |
1389 | 1388 | } |
1390 | 1389 | |
1391 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1390 | + if(SFD(nextin).mBufLen == 0) { | |
1392 | 1391 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1393 | 1392 | } |
1394 | 1393 | else { |
@@ -1406,24 +1405,21 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1406 | 1405 | } |
1407 | 1406 | |
1408 | 1407 | int i; |
1409 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
1408 | + int max = vector_count(SFD(nextin).mLines); | |
1410 | 1409 | BOOL shift = sCommand_option_item(command, "-shift"); |
1411 | 1410 | for(i=0; i<max; i++) { |
1412 | 1411 | if(i+1 < command->mArgsNumRuntime) { |
1413 | - char* line = vector_item(SFD(nextin).fdbuf.mLines, i); | |
1412 | + char* line = vector_item(SFD(nextin).mLines, i); | |
1414 | 1413 | void* mem = (void*)(unsigned long)strtoll(line, NULL, 16); |
1415 | - int type = memchecker_item(gMemChecker, mem); | |
1416 | - | |
1417 | - if(type >= 0) { | |
1418 | - uobject_put(object, command->mArgsRuntime[i+1], mem); | |
1419 | - } | |
1420 | - else { | |
1421 | - err_msg("invalid adress. it's not memory managed by a xyzsh gabage collecter", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
1414 | + if(mem == NULL || !gc_valid_object(mem) || !contained_in_pipe(mem)) { | |
1415 | + err_msg("invalid address. it's not memory managed by a xyzsh gabage collecter or it doesn't exist in pipe data", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); | |
1422 | 1416 | return FALSE; |
1423 | 1417 | } |
1418 | + | |
1419 | + uobject_put(object, command->mArgsRuntime[i+1], mem); | |
1424 | 1420 | } |
1425 | 1421 | else if(shift) { |
1426 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, i); | |
1422 | + char* str = vector_item(SFD(nextin).mLines, i); | |
1427 | 1423 | if(!fd_write(nextout, str, strlen(str))) { |
1428 | 1424 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1429 | 1425 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -1435,7 +1431,7 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1435 | 1431 | } |
1436 | 1432 | } |
1437 | 1433 | |
1438 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1434 | + if(SFD(nextin).mBufLen == 0) { | |
1439 | 1435 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1440 | 1436 | } |
1441 | 1437 | else { |
@@ -1454,7 +1450,7 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1454 | 1450 | sCommand* command = runinfo->mCommand; |
1455 | 1451 | |
1456 | 1452 | char* field = "\n"; |
1457 | - enum eLineField lf = gLineField; | |
1453 | + eLineField lf = gLineField; | |
1458 | 1454 | if(sCommand_option_item(command, "-Lw")) { |
1459 | 1455 | lf = kCRLF; |
1460 | 1456 | field = "\r\n"; |
@@ -1502,10 +1498,10 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1502 | 1498 | |
1503 | 1499 | if(command->mArgsNumRuntime > 1) { |
1504 | 1500 | int i; |
1505 | - int max = vector_count(SFD(nextin).fdbuf.mLines); | |
1501 | + int max = vector_count(SFD(nextin).mLines); | |
1506 | 1502 | for(i=1; i<command->mArgsNumRuntime; i++) { |
1507 | 1503 | if(i-1 < max) { |
1508 | - sObject* new_var = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, i-1)); | |
1504 | + sObject* new_var = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, i-1)); | |
1509 | 1505 | string_chomp(new_var); |
1510 | 1506 | setenv(command->mArgsRuntime[i], string_c_str(new_var), 1); |
1511 | 1507 | } |
@@ -1516,7 +1512,7 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1516 | 1512 | |
1517 | 1513 | if(sCommand_option_item(command, "-shift")) { |
1518 | 1514 | for(;i-1<max; i++) { |
1519 | - char* str = vector_item(SFD(nextin).fdbuf.mLines, i-1); | |
1515 | + char* str = vector_item(SFD(nextin).mLines, i-1); | |
1520 | 1516 | if(!fd_write(nextout, str, strlen(str))) { |
1521 | 1517 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1522 | 1518 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -1525,7 +1521,7 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1525 | 1521 | } |
1526 | 1522 | } |
1527 | 1523 | |
1528 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1524 | + if(SFD(nextin).mBufLen == 0) { | |
1529 | 1525 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1530 | 1526 | } |
1531 | 1527 | else { |
@@ -100,7 +100,7 @@ BOOL cmd_quote(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
100 | 100 | |
101 | 101 | /// output |
102 | 102 | if(runinfo->mFilter) { |
103 | - char* p = SFD(nextin).fdbuf.mBuf; | |
103 | + char* p = SFD(nextin).mBuf; | |
104 | 104 | if(code == kByte) { |
105 | 105 | while(*p) { |
106 | 106 | if(isalpha(*p)) { |
@@ -189,7 +189,7 @@ BOOL cmd_quote(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
189 | 189 | } |
190 | 190 | } |
191 | 191 | |
192 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
192 | + if(SFD(nextin).mBufLen == 0) { | |
193 | 193 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
194 | 194 | } |
195 | 195 | else { |
@@ -218,7 +218,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
218 | 218 | code = kEucjp; |
219 | 219 | } |
220 | 220 | |
221 | - enum eLineField lf = gLineField; | |
221 | + eLineField lf = gLineField; | |
222 | 222 | if(sCommand_option_item(command, "-Lw")) { |
223 | 223 | lf = kCRLF; |
224 | 224 | } |
@@ -237,7 +237,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
237 | 237 | /// line number |
238 | 238 | if(sCommand_option_item(command, "-line-num")) { |
239 | 239 | int result = 0; |
240 | - char* p = SFD(nextin).fdbuf.mBuf; | |
240 | + char* p = SFD(nextin).mBuf; | |
241 | 241 | if(lf == kCRLF) { |
242 | 242 | while(1) { |
243 | 243 | if(*p == '\r' && *(p+1) == '\n') { |
@@ -288,7 +288,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
288 | 288 | } |
289 | 289 | } |
290 | 290 | else { |
291 | - char* arg = SFD(nextin).fdbuf.mBuf; | |
291 | + char* arg = SFD(nextin).mBuf; | |
292 | 292 | int len = str_kanjilen(code, arg); |
293 | 293 | |
294 | 294 | char buf[128]; |
@@ -301,7 +301,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
301 | 301 | } |
302 | 302 | } |
303 | 303 | |
304 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
304 | + if(SFD(nextin).mBufLen == 0) { | |
305 | 305 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
306 | 306 | } |
307 | 307 | else { |
@@ -324,7 +324,7 @@ BOOL cmd_x(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
324 | 324 | |
325 | 325 | int i; |
326 | 326 | for(i=0; i<multiple; i++) { |
327 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
327 | + if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
328 | 328 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
329 | 329 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
330 | 330 | return FALSE; |
@@ -332,7 +332,7 @@ BOOL cmd_x(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
332 | 332 | } |
333 | 333 | |
334 | 334 | |
335 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
335 | + if(SFD(nextin).mBufLen == 0) { | |
336 | 336 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
337 | 337 | } |
338 | 338 | else { |
@@ -365,7 +365,7 @@ BOOL cmd_index(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
365 | 365 | /// output |
366 | 366 | if(runinfo->mFilter) { |
367 | 367 | if(command->mArgsNumRuntime == 2) { |
368 | - char* target = SFD(nextin).fdbuf.mBuf; | |
368 | + char* target = SFD(nextin).mBuf; | |
369 | 369 | |
370 | 370 | char* word = command->mArgsRuntime[1]; |
371 | 371 |
@@ -463,7 +463,7 @@ BOOL cmd_index(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
463 | 463 | int c = str_pointer2kanjipos(code, target, result); |
464 | 464 | size = snprintf(msg, 64, "%d", c); |
465 | 465 | |
466 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
466 | + if(SFD(nextin).mBufLen == 0) { | |
467 | 467 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
468 | 468 | } |
469 | 469 | else { |
@@ -581,7 +581,7 @@ BOOL cmd_rindex(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
581 | 581 | /// output |
582 | 582 | if(runinfo->mFilter) { |
583 | 583 | if(command->mArgsNumRuntime == 2) { |
584 | - char* target = SFD(nextin).fdbuf.mBuf; | |
584 | + char* target = SFD(nextin).mBuf; | |
585 | 585 | char* word = command->mArgsRuntime[1]; |
586 | 586 | |
587 | 587 | /// get starting point /// |
@@ -682,7 +682,7 @@ BOOL cmd_rindex(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
682 | 682 | int c = str_pointer2kanjipos(code, target, result); |
683 | 683 | size = snprintf(msg, 64, "%d", c); |
684 | 684 | |
685 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
685 | + if(SFD(nextin).mBufLen == 0) { | |
686 | 686 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
687 | 687 | } |
688 | 688 | else { |
@@ -728,7 +728,7 @@ BOOL cmd_lc(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
728 | 728 | } |
729 | 729 | |
730 | 730 | if(runinfo->mFilter) { |
731 | - sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf); | |
731 | + sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf); | |
732 | 732 | string_tolower(str, code); |
733 | 733 | |
734 | 734 | if(!fd_write(nextout, string_c_str(str), string_length(str))) { |
@@ -737,7 +737,7 @@ BOOL cmd_lc(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
737 | 737 | return FALSE; |
738 | 738 | } |
739 | 739 | |
740 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
740 | + if(SFD(nextin).mBufLen == 0) { | |
741 | 741 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
742 | 742 | } |
743 | 743 | else { |
@@ -767,7 +767,7 @@ BOOL cmd_uc(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
767 | 767 | } |
768 | 768 | |
769 | 769 | if(runinfo->mFilter) { |
770 | - sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf); | |
770 | + sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf); | |
771 | 771 | string_toupper(str, code); |
772 | 772 | |
773 | 773 | if(!fd_write(nextout, string_c_str(str), string_length(str))) { |
@@ -776,7 +776,7 @@ BOOL cmd_uc(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
776 | 776 | return FALSE; |
777 | 777 | } |
778 | 778 | |
779 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
779 | + if(SFD(nextin).mBufLen == 0) { | |
780 | 780 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
781 | 781 | } |
782 | 782 | else { |
@@ -792,9 +792,9 @@ BOOL cmd_chomp(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
792 | 792 | sCommand* command = runinfo->mCommand; |
793 | 793 | |
794 | 794 | if(runinfo->mFilter) { |
795 | - sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf); | |
795 | + sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf); | |
796 | 796 | if(string_chomp(str)) { |
797 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
797 | + if(SFD(nextin).mBufLen == 0) { | |
798 | 798 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
799 | 799 | } |
800 | 800 | else { |
@@ -802,7 +802,7 @@ BOOL cmd_chomp(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
802 | 802 | } |
803 | 803 | } |
804 | 804 | else { |
805 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
805 | + if(SFD(nextin).mBufLen == 0) { | |
806 | 806 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
807 | 807 | } |
808 | 808 | else { |
@@ -839,7 +839,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
839 | 839 | } |
840 | 840 | |
841 | 841 | if(runinfo->mFilter) { |
842 | - sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf); | |
842 | + sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf); | |
843 | 843 | |
844 | 844 | if(code == kByte) { |
845 | 845 | char* s = string_c_str(str); |
@@ -849,7 +849,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
849 | 849 | { |
850 | 850 | string_trunc(str, len-2); |
851 | 851 | |
852 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
852 | + if(SFD(nextin).mBufLen == 0) { | |
853 | 853 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
854 | 854 | } |
855 | 855 | else { |
@@ -859,7 +859,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
859 | 859 | else if(len >= 1) { |
860 | 860 | string_trunc(str, len-1); |
861 | 861 | |
862 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
862 | + if(SFD(nextin).mBufLen == 0) { | |
863 | 863 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
864 | 864 | } |
865 | 865 | else { |
@@ -867,7 +867,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
867 | 867 | } |
868 | 868 | } |
869 | 869 | else { |
870 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
870 | + if(SFD(nextin).mBufLen == 0) { | |
871 | 871 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
872 | 872 | } |
873 | 873 | else { |
@@ -883,7 +883,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
883 | 883 | string_erase(str, last_char_head-s, s + strlen(s) - last_char_head); |
884 | 884 | |
885 | 885 | if(len > 0) { |
886 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
886 | + if(SFD(nextin).mBufLen == 0) { | |
887 | 887 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
888 | 888 | } |
889 | 889 | else { |
@@ -891,7 +891,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
891 | 891 | } |
892 | 892 | } |
893 | 893 | else { |
894 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
894 | + if(SFD(nextin).mBufLen == 0) { | |
895 | 895 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
896 | 896 | } |
897 | 897 | else { |
@@ -914,7 +914,7 @@ BOOL cmd_pomch(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
914 | 914 | { |
915 | 915 | sCommand* command = runinfo->mCommand; |
916 | 916 | |
917 | - enum eLineField lf = gLineField; | |
917 | + eLineField lf = gLineField; | |
918 | 918 | if(sCommand_option_item(command, "-Lw")) { |
919 | 919 | lf = kCRLF; |
920 | 920 | } |
@@ -929,9 +929,9 @@ BOOL cmd_pomch(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
929 | 929 | } |
930 | 930 | |
931 | 931 | if(runinfo->mFilter) { |
932 | - sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf); | |
932 | + sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf); | |
933 | 933 | if(string_pomch(str, lf)) { |
934 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
934 | + if(SFD(nextin).mBufLen == 0) { | |
935 | 935 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
936 | 936 | } |
937 | 937 | else { |
@@ -939,7 +939,7 @@ BOOL cmd_pomch(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
939 | 939 | } |
940 | 940 | } |
941 | 941 | else { |
942 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
942 | + if(SFD(nextin).mBufLen == 0) { | |
943 | 943 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
944 | 944 | } |
945 | 945 | else { |
@@ -961,7 +961,7 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
961 | 961 | { |
962 | 962 | sCommand* command = runinfo->mCommand; |
963 | 963 | |
964 | - enum eLineField lf = gLineField; | |
964 | + eLineField lf = gLineField; | |
965 | 965 | if(sCommand_option_item(command, "-Lw")) { |
966 | 966 | lf = kCRLF; |
967 | 967 | } |
@@ -1002,8 +1002,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1002 | 1002 | p++; |
1003 | 1003 | |
1004 | 1004 | char* arg; |
1005 | - if(strings_num < vector_count(SFD(nextin).fdbuf.mLines)) { | |
1006 | - arg = vector_item(SFD(nextin).fdbuf.mLines, strings_num); | |
1005 | + if(strings_num < vector_count(SFD(nextin).mLines)) { | |
1006 | + arg = vector_item(SFD(nextin).mLines, strings_num); | |
1007 | 1007 | } |
1008 | 1008 | else { |
1009 | 1009 | arg = "0"; |
@@ -1027,8 +1027,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1027 | 1027 | p++; |
1028 | 1028 | |
1029 | 1029 | char* arg; |
1030 | - if(strings_num < vector_count(SFD(nextin).fdbuf.mLines)) { | |
1031 | - arg = vector_item(SFD(nextin).fdbuf.mLines, strings_num); | |
1030 | + if(strings_num < vector_count(SFD(nextin).mLines)) { | |
1031 | + arg = vector_item(SFD(nextin).mLines, strings_num); | |
1032 | 1032 | } |
1033 | 1033 | else { |
1034 | 1034 | arg = "0"; |
@@ -1051,8 +1051,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1051 | 1051 | p++; |
1052 | 1052 | |
1053 | 1053 | sObject* arg; |
1054 | - if(strings_num < vector_count(SFD(nextin).fdbuf.mLines)) { | |
1055 | - arg = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, strings_num)); | |
1054 | + if(strings_num < vector_count(SFD(nextin).mLines)) { | |
1055 | + arg = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, strings_num)); | |
1056 | 1056 | } |
1057 | 1057 | else { |
1058 | 1058 | arg = STRING_NEW_STACK(""); |
@@ -1086,8 +1086,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1086 | 1086 | } |
1087 | 1087 | } |
1088 | 1088 | |
1089 | - if(strings_num > vector_count(SFD(nextin).fdbuf.mLines)) { | |
1090 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1089 | + if(strings_num > vector_count(SFD(nextin).mLines)) { | |
1090 | + if(SFD(nextin).mBufLen == 0) { | |
1091 | 1091 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1092 | 1092 | } |
1093 | 1093 | else { |
@@ -1095,7 +1095,7 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1095 | 1095 | } |
1096 | 1096 | } |
1097 | 1097 | else { |
1098 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1098 | + if(SFD(nextin).mBufLen == 0) { | |
1099 | 1099 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1100 | 1100 | } |
1101 | 1101 | else { |
@@ -1120,8 +1120,8 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1120 | 1120 | |
1121 | 1121 | if(command->mBlocksNum >= 1) { |
1122 | 1122 | block = command->mBlocks[0]; |
1123 | - nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
1124 | - nextout2 = FD_NEW_STACK(kFDKindBuf, 0); | |
1123 | + nextin2 = FD_NEW_STACK(); | |
1124 | + nextout2 = FD_NEW_STACK(); | |
1125 | 1125 | } |
1126 | 1126 | else { |
1127 | 1127 | block = NULL; |
@@ -1138,7 +1138,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1138 | 1138 | int r = get_onig_regex(®, command, regex); |
1139 | 1139 | |
1140 | 1140 | if(r == ONIG_NORMAL) { |
1141 | - char* p = SFD(nextin).fdbuf.mBuf; | |
1141 | + char* p = SFD(nextin).mBuf; | |
1142 | 1142 | |
1143 | 1143 | sObject* sub_str = STRING_NEW_STACK(""); |
1144 | 1144 |
@@ -1146,7 +1146,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1146 | 1146 | OnigRegion* region = onig_region_new(); |
1147 | 1147 | OnigErrorInfo err_info; |
1148 | 1148 | |
1149 | - char* target = SFD(nextin).fdbuf.mBuf; | |
1149 | + char* target = SFD(nextin).mBuf; | |
1150 | 1150 | |
1151 | 1151 | const int point = p - target; |
1152 | 1152 | int r2 = onig_search(reg, target |
@@ -1231,7 +1231,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1231 | 1231 | return FALSE; |
1232 | 1232 | } |
1233 | 1233 | |
1234 | - string_put(sub_str, SFD(nextout2).fdbuf.mBuf); | |
1234 | + string_put(sub_str, SFD(nextout2).mBuf); | |
1235 | 1235 | } |
1236 | 1236 | else { |
1237 | 1237 | char* p2 = destination; |
@@ -1361,7 +1361,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1361 | 1361 | uobject_put(gRootObject, "SUB_COUNT", STRING_NEW_GC(buf, FALSE)); |
1362 | 1362 | |
1363 | 1363 | if(sub_count > 0) { |
1364 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1364 | + if(SFD(nextin).mBufLen == 0) { | |
1365 | 1365 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1366 | 1366 | } |
1367 | 1367 | else { |
@@ -1400,7 +1400,7 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1400 | 1400 | |
1401 | 1401 | if(command->mBlocksNum >= 1) { |
1402 | 1402 | block = command->mBlocks[0]; |
1403 | - nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
1403 | + nextin2 = FD_NEW_STACK(); | |
1404 | 1404 | } |
1405 | 1405 | else { |
1406 | 1406 | block = NULL; |
@@ -1413,9 +1413,9 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1413 | 1413 | int r = get_onig_regex(®, command, regex); |
1414 | 1414 | |
1415 | 1415 | if(r == ONIG_NORMAL) { |
1416 | - char* target = SFD(nextin).fdbuf.mBuf; | |
1417 | - char* p = SFD(nextin).fdbuf.mBuf; | |
1418 | - char* end = SFD(nextin).fdbuf.mBuf + strlen(SFD(nextin).fdbuf.mBuf); | |
1416 | + char* target = SFD(nextin).mBuf; | |
1417 | + char* p = SFD(nextin).mBuf; | |
1418 | + char* end = SFD(nextin).mBuf + strlen(SFD(nextin).mBuf); | |
1419 | 1419 | while(p < end) { |
1420 | 1420 | OnigRegion* region = onig_region_new(); |
1421 | 1421 | int r2 = onig_search(reg, target |
@@ -1587,7 +1587,7 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1587 | 1587 | } |
1588 | 1588 | } |
1589 | 1589 | |
1590 | - p = SFD(nextin).fdbuf.mBuf + region->end[0]; | |
1590 | + p = SFD(nextin).mBuf + region->end[0]; | |
1591 | 1591 | } |
1592 | 1592 | else { |
1593 | 1593 | p++; |
@@ -1603,7 +1603,7 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1603 | 1603 | uobject_put(gRootObject, "MATCH_COUNT", STRING_NEW_GC(buf, FALSE)); |
1604 | 1604 | |
1605 | 1605 | if(match_count > 0) { |
1606 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1606 | + if(SFD(nextin).mBufLen == 0) { | |
1607 | 1607 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1608 | 1608 | } |
1609 | 1609 | else { |
@@ -1624,7 +1624,7 @@ BOOL cmd_split(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1624 | 1624 | sCommand* command = runinfo->mCommand; |
1625 | 1625 | |
1626 | 1626 | char* field = "\n"; |
1627 | - enum eLineField lf = gLineField; | |
1627 | + eLineField lf = gLineField; | |
1628 | 1628 | if(sCommand_option_item(command, "-Lw")) { |
1629 | 1629 | lf = kCRLF; |
1630 | 1630 | field = "\r\n"; |
@@ -1671,7 +1671,7 @@ BOOL cmd_split(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1671 | 1671 | |
1672 | 1672 | if(r == ONIG_NORMAL) { |
1673 | 1673 | char* target; |
1674 | - char* p = target = SFD(nextin).fdbuf.mBuf; | |
1674 | + char* p = target = SFD(nextin).mBuf; | |
1675 | 1675 | |
1676 | 1676 | int split_count = 0; |
1677 | 1677 |
@@ -1832,7 +1832,7 @@ BOOL cmd_split(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1832 | 1832 | } |
1833 | 1833 | |
1834 | 1834 | if(split_count > 0) { |
1835 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1835 | + if(SFD(nextin).mBufLen == 0) { | |
1836 | 1836 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1837 | 1837 | } |
1838 | 1838 | else { |
@@ -1882,7 +1882,7 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1882 | 1882 | number = -1; |
1883 | 1883 | } |
1884 | 1884 | |
1885 | - const int len = str_kanjilen(code, SFD(nextin).fdbuf.mBuf); | |
1885 | + const int len = str_kanjilen(code, SFD(nextin).mBuf); | |
1886 | 1886 | |
1887 | 1887 | if(number < 0) { |
1888 | 1888 | number += len + 1; |
@@ -1890,8 +1890,8 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1890 | 1890 | } |
1891 | 1891 | |
1892 | 1892 | if(number < len) { |
1893 | - int point = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, number) - SFD(nextin).fdbuf.mBuf; | |
1894 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, point)) { | |
1893 | + int point = str_kanjipos2pointer(code, SFD(nextin).mBuf, number) - SFD(nextin).mBuf; | |
1894 | + if(!fd_write(nextout, SFD(nextin).mBuf, point)) { | |
1895 | 1895 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1896 | 1896 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
1897 | 1897 | return FALSE; |
@@ -1901,14 +1901,14 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1901 | 1901 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
1902 | 1902 | return FALSE; |
1903 | 1903 | } |
1904 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf + point, SFD(nextin).fdbuf.mBufLen - point)) { | |
1904 | + if(!fd_write(nextout, SFD(nextin).mBuf + point, SFD(nextin).mBufLen - point)) { | |
1905 | 1905 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1906 | 1906 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
1907 | 1907 | return FALSE; |
1908 | 1908 | } |
1909 | 1909 | } |
1910 | 1910 | else { |
1911 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
1911 | + if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
1912 | 1912 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1913 | 1913 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
1914 | 1914 | return FALSE; |
@@ -1920,7 +1920,7 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1920 | 1920 | } |
1921 | 1921 | } |
1922 | 1922 | |
1923 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1923 | + if(SFD(nextin).mBufLen == 0) { | |
1924 | 1924 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1925 | 1925 | } |
1926 | 1926 | else { |
@@ -1966,7 +1966,7 @@ BOOL cmd_del(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1966 | 1966 | number = 1; |
1967 | 1967 | } |
1968 | 1968 | |
1969 | - const int len = str_kanjilen(code, SFD(nextin).fdbuf.mBuf); | |
1969 | + const int len = str_kanjilen(code, SFD(nextin).mBuf); | |
1970 | 1970 | |
1971 | 1971 | if(index < 0) { |
1972 | 1972 | index += len; |
@@ -1977,15 +1977,15 @@ BOOL cmd_del(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1977 | 1977 | if(index < 0) index = 0; |
1978 | 1978 | } |
1979 | 1979 | |
1980 | - int point = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, index) - SFD(nextin).fdbuf.mBuf; | |
1980 | + int point = str_kanjipos2pointer(code, SFD(nextin).mBuf, index) - SFD(nextin).mBuf; | |
1981 | 1981 | |
1982 | - if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, point)) { | |
1982 | + if(!fd_write(nextout, SFD(nextin).mBuf, point)) { | |
1983 | 1983 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1984 | 1984 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
1985 | 1985 | return FALSE; |
1986 | 1986 | } |
1987 | 1987 | if(index + number < len) { |
1988 | - char* point = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, index + number); | |
1988 | + char* point = str_kanjipos2pointer(code, SFD(nextin).mBuf, index + number); | |
1989 | 1989 | if(!fd_write(nextout, point, strlen(point))) { |
1990 | 1990 | err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
1991 | 1991 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -1993,7 +1993,7 @@ BOOL cmd_del(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
1993 | 1993 | } |
1994 | 1994 | } |
1995 | 1995 | |
1996 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
1996 | + if(SFD(nextin).mBufLen == 0) { | |
1997 | 1997 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
1998 | 1998 | } |
1999 | 1999 | else { |
@@ -2023,7 +2023,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2023 | 2023 | } |
2024 | 2024 | |
2025 | 2025 | if(runinfo->mFilter && command->mArgsNumRuntime > 1 && command->mBlocksNum <= command->mArgsNumRuntime-1) { |
2026 | - if(SFD(nextin).fdbuf.mBufLen == 0) { | |
2026 | + if(SFD(nextin).mBufLen == 0) { | |
2027 | 2027 | runinfo->mRCode = RCODE_NFUN_NULL_INPUT; |
2028 | 2028 | } |
2029 | 2029 | else { |
@@ -2051,7 +2051,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2051 | 2051 | return FALSE; |
2052 | 2052 | } |
2053 | 2053 | |
2054 | - const int kanjilen = str_kanjilen(code, SFD(nextin).fdbuf.mBuf); | |
2054 | + const int kanjilen = str_kanjilen(code, SFD(nextin).mBuf); | |
2055 | 2055 | if(kanjilen > 0) { |
2056 | 2056 | int first = atoi(buf); |
2057 | 2057 | int second = atoi(buf2); |
@@ -2078,12 +2078,12 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2078 | 2078 | if(code == kByte) { |
2079 | 2079 | int k; |
2080 | 2080 | for(k=0; k<kanjilen; k++) { |
2081 | - array[k] = SFD(nextin).fdbuf.mBuf + k; | |
2081 | + array[k] = SFD(nextin).mBuf + k; | |
2082 | 2082 | } |
2083 | - array[k] = SFD(nextin).fdbuf.mBuf + k; | |
2083 | + array[k] = SFD(nextin).mBuf + k; | |
2084 | 2084 | } |
2085 | 2085 | else if(code == kUtf8) { |
2086 | - char* p = SFD(nextin).fdbuf.mBuf; | |
2086 | + char* p = SFD(nextin).mBuf; | |
2087 | 2087 | |
2088 | 2088 | int k; |
2089 | 2089 | for(k=0; k<kanjilen; k++) { |
@@ -2099,7 +2099,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2099 | 2099 | array[k] = p; |
2100 | 2100 | } |
2101 | 2101 | else { |
2102 | - char* p = SFD(nextin).fdbuf.mBuf; | |
2102 | + char* p = SFD(nextin).mBuf; | |
2103 | 2103 | |
2104 | 2104 | int k; |
2105 | 2105 | for(k=0; k<kanjilen; k++) { |
@@ -2111,7 +2111,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2111 | 2111 | } |
2112 | 2112 | |
2113 | 2113 | if(first < second) { |
2114 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
2114 | + sObject* nextin2 = FD_NEW_STACK(); | |
2115 | 2115 | |
2116 | 2116 | int j; |
2117 | 2117 | for(j=first; j<=second; j++) { |
@@ -2134,7 +2134,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2134 | 2134 | runinfo->mRCode = rcode; |
2135 | 2135 | } |
2136 | 2136 | else { |
2137 | - if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen)) | |
2137 | + if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen)) | |
2138 | 2138 | { |
2139 | 2139 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
2140 | 2140 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -2146,7 +2146,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2146 | 2146 | } |
2147 | 2147 | } |
2148 | 2148 | else { |
2149 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
2149 | + sObject* nextin2 = FD_NEW_STACK(); | |
2150 | 2150 | |
2151 | 2151 | int j; |
2152 | 2152 | for(j=first; j>=second; j--) { |
@@ -2169,7 +2169,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2169 | 2169 | runinfo->mRCode = rcode; |
2170 | 2170 | } |
2171 | 2171 | else { |
2172 | - if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen)) | |
2172 | + if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen)) | |
2173 | 2173 | { |
2174 | 2174 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
2175 | 2175 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -2185,7 +2185,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2185 | 2185 | } |
2186 | 2186 | } |
2187 | 2187 | else { |
2188 | - const int len = str_kanjilen(code, SFD(nextin).fdbuf.mBuf); | |
2188 | + const int len = str_kanjilen(code, SFD(nextin).mBuf); | |
2189 | 2189 | int num = atoi(arg); |
2190 | 2190 | |
2191 | 2191 | if(num < 0) { |
@@ -2197,9 +2197,9 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2197 | 2197 | if(num < 0) num = 0; |
2198 | 2198 | } |
2199 | 2199 | |
2200 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
2200 | + sObject* nextin2 = FD_NEW_STACK(); | |
2201 | 2201 | |
2202 | - char* str = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, num); | |
2202 | + char* str = str_kanjipos2pointer(code, SFD(nextin).mBuf, num); | |
2203 | 2203 | char* str2 = str_kanjipos2pointer(code, str, 1); |
2204 | 2204 | if(!fd_write(nextin2, str, str2 -str)) { |
2205 | 2205 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
@@ -2216,7 +2216,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo) | ||
2216 | 2216 | runinfo->mRCode = rcode; |
2217 | 2217 | } |
2218 | 2218 | else { |
2219 | - if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen)) | |
2219 | + if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen)) | |
2220 | 2220 | { |
2221 | 2221 | err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
2222 | 2222 | runinfo->mRCode = RCODE_SIGNAL_INTERRUPT; |
@@ -18,8 +18,8 @@ int completion_gc_children_mark(sObject* self) | ||
18 | 18 | |
19 | 19 | sObject* block = SCOMPLETION(self).mBlock; |
20 | 20 | if(block) { |
21 | - if((block->mFlg & GC_MARK) == 0) { | |
22 | - block->mFlg |= GC_MARK; | |
21 | + if(IS_MARKED(block) == 0) { | |
22 | + SET_MARK(block); | |
23 | 23 | count++; |
24 | 24 | count += object_gc_children_mark(block); |
25 | 25 | } |
@@ -4,41 +4,50 @@ | ||
4 | 4 | #include <stdio.h> |
5 | 5 | #include <errno.h> |
6 | 6 | |
7 | -sObject* fd_new_from_stack(int kind, int fd) | |
7 | +sObject* fd_new_from_stack() | |
8 | 8 | { |
9 | 9 | sObject* self = stack_get_free_object(T_FD); |
10 | 10 | |
11 | - SFD(self).mKind = kind; | |
11 | + SFD(self).mBuf = MALLOC(1024); | |
12 | + SFD(self).mBuf[0] = 0; | |
12 | 13 | |
13 | - if(kind == kFDKindFD) { | |
14 | - SFD(self).fd.mFD = fd; | |
15 | - } | |
16 | - else { | |
17 | - SFD(self).fdbuf.mBuf = MALLOC(1024); | |
18 | - SFD(self).fdbuf.mBuf[0] = 0; | |
14 | + SFD(self).mBufSize = 1024; | |
15 | + SFD(self).mBufLen = 0; | |
19 | 16 | |
20 | - SFD(self).fdbuf.mBufSize = 1024; | |
21 | - SFD(self).fdbuf.mBufLen = 0; | |
22 | - | |
23 | - SFD(self).fdbuf.mLines = VECTOR_NEW_MALLOC(32); | |
24 | - SFD(self).fdbuf.mReadedLineNumber = 0; | |
25 | - } | |
17 | + SFD(self).mLines = VECTOR_NEW_MALLOC(32); | |
18 | + SFD(self).mReadedLineNumber = 0; | |
26 | 19 | |
27 | 20 | return self; |
28 | 21 | } |
29 | 22 | |
30 | 23 | void fd_delete_stack(sObject* self) |
31 | 24 | { |
32 | - if(SFD(self).mKind == kFDKindBuf) { | |
33 | - sObject* v = SFD(self).fdbuf.mLines; | |
34 | - int i; | |
35 | - for(i=0; i<vector_count(v); i++) { | |
36 | - FREE(vector_item(v, i)); | |
37 | - } | |
38 | - vector_delete_malloc(SFD(self).fdbuf.mLines); | |
25 | + sObject* v = SFD(self).mLines; | |
26 | + int i; | |
27 | + for(i=0; i<vector_count(v); i++) { | |
28 | + FREE(vector_item(v, i)); | |
29 | + } | |
30 | + vector_delete_malloc(SFD(self).mLines); | |
31 | + | |
32 | + FREE(SFD(self).mBuf); | |
33 | +} | |
34 | + | |
35 | +void fd_put(sObject* self, MANAGED char* buf, int buf_size, int buf_len) | |
36 | +{ | |
37 | + ASSERT(TYPE(self) == T_FD); | |
38 | + | |
39 | + FREE(SFD(self).mBuf); | |
40 | + | |
41 | + SFD(self).mBuf = MANAGED buf; | |
42 | + SFD(self).mBufSize = buf_size; | |
43 | + SFD(self).mBufLen = buf_len; | |
39 | 44 | |
40 | - FREE(SFD(self).fdbuf.mBuf); | |
45 | + int i; | |
46 | + for(i=0; i<vector_count(SFD(self).mLines); i++) { | |
47 | + FREE(vector_item(SFD(self).mLines, i)); | |
41 | 48 | } |
49 | + vector_clear(SFD(self).mLines); | |
50 | + SFD(self).mReadedLineNumber = 0; | |
42 | 51 | } |
43 | 52 | |
44 | 53 | // TRUE: Success |
@@ -75,10 +84,12 @@ BOOL bufsiz_write(int fd, char* buf, int buf_size) | ||
75 | 84 | return TRUE; |
76 | 85 | } |
77 | 86 | |
78 | -BOOL fd_guess_lf(sObject* self, enum eLineField* lf) | |
87 | +BOOL fd_guess_lf(sObject* self, eLineField* lf) | |
79 | 88 | { |
89 | + ASSERT(TYPE(self) == T_FD); | |
90 | + | |
80 | 91 | *lf = -1; |
81 | - char* p = SFD(self).fdbuf.mBuf; | |
92 | + char* p = SFD(self).mBuf; | |
82 | 93 | |
83 | 94 | while(*p) { |
84 | 95 | if(*p == '\a') { |
@@ -91,7 +102,7 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf) | ||
91 | 102 | } |
92 | 103 | |
93 | 104 | if(*lf == -1) { |
94 | - p = SFD(self).fdbuf.mBuf; | |
105 | + p = SFD(self).mBuf; | |
95 | 106 | |
96 | 107 | while(*p) { |
97 | 108 | if(*p == '\r' && *(p+1) == '\n') { |
@@ -105,7 +116,7 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf) | ||
105 | 116 | } |
106 | 117 | |
107 | 118 | if(*lf == -1) { |
108 | - p = SFD(self).fdbuf.mBuf; | |
119 | + p = SFD(self).mBuf; | |
109 | 120 | |
110 | 121 | while(*p) { |
111 | 122 | if(*p == '\r') { |
@@ -119,7 +130,7 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf) | ||
119 | 130 | } |
120 | 131 | |
121 | 132 | if(*lf == -1) { |
122 | - p = SFD(self).fdbuf.mBuf; | |
133 | + p = SFD(self).mBuf; | |
123 | 134 | |
124 | 135 | while(*p) { |
125 | 136 | if(*p == '\n') { |
@@ -135,23 +146,23 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf) | ||
135 | 146 | return FALSE; |
136 | 147 | } |
137 | 148 | |
138 | -void fd_split(sObject* self, enum eLineField lf) | |
149 | +void fd_split(sObject* self, eLineField lf) | |
139 | 150 | { |
140 | - assert(TYPE(self) == T_FD && SFD(self).mKind == kFDKindBuf); | |
151 | + assert(TYPE(self) == T_FD); | |
141 | 152 | |
142 | - sObject* v = SFD(self).fdbuf.mLines; | |
153 | + sObject* v = SFD(self).mLines; | |
143 | 154 | |
144 | - if(SFD(self).fdbuf.mLinesLineField != lf) { | |
155 | + if(SFD(self).mLinesLineField != lf) { | |
145 | 156 | int i; |
146 | 157 | for(i=0; i<vector_count(v); i++) { |
147 | 158 | FREE(vector_item(v, i)); |
148 | 159 | } |
149 | 160 | vector_clear(v); |
150 | - SFD(self).fdbuf.mReadedLineNumber = 0; | |
161 | + SFD(self).mReadedLineNumber = 0; | |
151 | 162 | } |
152 | 163 | |
153 | 164 | if(vector_count(v) == 0) { |
154 | - char* p = SFD(self).fdbuf.mBuf; | |
165 | + char* p = SFD(self).mBuf; | |
155 | 166 | char* new_line = p; |
156 | 167 | if(lf == kCRLF) { |
157 | 168 | while(1) { |
@@ -164,7 +175,7 @@ void fd_split(sObject* self, enum eLineField lf) | ||
164 | 175 | vector_add(v, line); |
165 | 176 | new_line = p; |
166 | 177 | } |
167 | - else if(p - SFD(self).fdbuf.mBuf >= SFD(self).fdbuf.mBufLen) { | |
178 | + else if(p - SFD(self).mBuf >= SFD(self).mBufLen) { | |
168 | 179 | const int size = p - new_line; |
169 | 180 | if(size > 0) { |
170 | 181 | char* line = MALLOC(size + 1 + 2); |
@@ -203,7 +214,7 @@ void fd_split(sObject* self, enum eLineField lf) | ||
203 | 214 | p++; |
204 | 215 | new_line = p; |
205 | 216 | } |
206 | - else if(p - SFD(self).fdbuf.mBuf >= SFD(self).fdbuf.mBufLen) { | |
217 | + else if(p - SFD(self).mBuf >= SFD(self).mBufLen) { | |
207 | 218 | const int size = p - new_line; |
208 | 219 | if(size > 0) { |
209 | 220 | char* line = MALLOC(size + 1 + 1); |
@@ -220,7 +231,7 @@ void fd_split(sObject* self, enum eLineField lf) | ||
220 | 231 | } |
221 | 232 | } |
222 | 233 | |
223 | - SFD(self).fdbuf.mLinesLineField = lf; | |
234 | + SFD(self).mLinesLineField = lf; | |
224 | 235 | } |
225 | 236 | } |
226 | 237 |
@@ -253,42 +264,41 @@ void fd_clear(sObject* self) | ||
253 | 264 | { |
254 | 265 | assert(TYPE(self) == T_FD); |
255 | 266 | |
256 | - if(SFD(self).mKind == kFDKindBuf) { | |
257 | - SFD(self).fdbuf.mBufLen = 0; | |
258 | - SFD(self).fdbuf.mBuf[0] = 0; | |
267 | + SFD(self).mBufLen = 0; | |
268 | + SFD(self).mBuf[0] = 0; | |
259 | 269 | |
260 | - int i; | |
261 | - for(i=0; i<vector_count(SFD(self).fdbuf.mLines); i++) { | |
262 | - FREE(vector_item(SFD(self).fdbuf.mLines, i)); | |
263 | - } | |
264 | - vector_clear(SFD(self).fdbuf.mLines); | |
265 | - SFD(self).fdbuf.mReadedLineNumber = 0; | |
266 | - } | |
270 | + int i; | |
271 | + for(i=0; i<vector_count(SFD(self).mLines); i++) { | |
272 | + FREE(vector_item(SFD(self).mLines, i)); | |
273 | + } | |
274 | + vector_clear(SFD(self).mLines); | |
275 | + SFD(self).mReadedLineNumber = 0; | |
267 | 276 | } |
268 | 277 | |
269 | 278 | // TRUE: Success |
270 | 279 | // FALSE: signal interrupt. set RCODE_SIGNAL_INTERRUPT on rcode and err message |
271 | 280 | BOOL fd_write(sObject* self, char* str, int len) |
272 | 281 | { |
273 | - if(SFD(self).mKind == kFDKindFD) { | |
274 | - if(write(SFD(self).fd.mFD, str, len) < 0) { | |
282 | + ASSERT(TYPE(self) == T_FD || TYPE(self) == T_FD2); | |
283 | + | |
284 | + if(TYPE(self) == T_FD2) { | |
285 | + if(write(SFD2(self).mFD, str, len) < 0) { | |
275 | 286 | return FALSE; |
276 | 287 | } |
277 | 288 | } |
278 | 289 | else { |
279 | - if((SFD(self).fdbuf.mBufLen+len+1) >= SFD(self).fdbuf.mBufSize) { | |
280 | - int new_size = (SFD(self).fdbuf.mBufSize + len+1) * 1.8; | |
290 | + if((SFD(self).mBufLen+len+1) >= SFD(self).mBufSize) { | |
291 | + int new_size = (SFD(self).mBufSize + len+1) * 1.8; | |
281 | 292 | |
282 | - SFD(self).fdbuf.mBuf = REALLOC(SFD(self).fdbuf.mBuf, new_size); | |
283 | - SFD(self).fdbuf.mBufSize = new_size; | |
293 | + SFD(self).mBuf = REALLOC(SFD(self).mBuf, new_size); | |
294 | + SFD(self).mBufSize = new_size; | |
284 | 295 | } |
285 | 296 | |
286 | - | |
287 | - if(!memcpy_buf(SFD(self).fdbuf.mBuf + SFD(self).fdbuf.mBufLen, str, len)) { | |
297 | + if(!memcpy_buf(SFD(self).mBuf + SFD(self).mBufLen, str, len)) { | |
288 | 298 | return FALSE; |
289 | 299 | } |
290 | - SFD(self).fdbuf.mBufLen += len; | |
291 | - SFD(self).fdbuf.mBuf[SFD(self).fdbuf.mBufLen] = 0; | |
300 | + SFD(self).mBufLen += len; | |
301 | + SFD(self).mBuf[SFD(self).mBufLen] = 0; | |
292 | 302 | } |
293 | 303 | |
294 | 304 | return TRUE; |
@@ -298,20 +308,22 @@ BOOL fd_write(sObject* self, char* str, int len) | ||
298 | 308 | // FALSE: signal interrupt. set RCODE_SIGNAL_INTERRUPT on rcode and err message |
299 | 309 | BOOL fd_writec(sObject* self, char c) |
300 | 310 | { |
301 | - if(SFD(self).mKind == kFDKindFD) { | |
302 | - if(write(SFD(self).fd.mFD, &c, 1) < 0) { | |
311 | + ASSERT(TYPE(self) == T_FD || TYPE(self) == T_FD2); | |
312 | + | |
313 | + if(TYPE(self) == T_FD2) { | |
314 | + if(write(SFD2(self).mFD, &c, 1) < 0) { | |
303 | 315 | return FALSE; |
304 | 316 | } |
305 | 317 | } |
306 | 318 | else { |
307 | - if((SFD(self).fdbuf.mBufLen) >= SFD(self).fdbuf.mBufSize) { | |
308 | - int new_size = (SFD(self).fdbuf.mBufSize) * 1.8; | |
309 | - SFD(self).fdbuf.mBuf = REALLOC(SFD(self).fdbuf.mBuf, new_size); | |
310 | - SFD(self).fdbuf.mBufSize = new_size; | |
319 | + if((SFD(self).mBufLen) >= SFD(self).mBufSize) { | |
320 | + int new_size = (SFD(self).mBufSize) * 1.8; | |
321 | + SFD(self).mBuf = REALLOC(SFD(self).mBuf, new_size); | |
322 | + SFD(self).mBufSize = new_size; | |
311 | 323 | } |
312 | 324 | |
313 | - SFD(self).fdbuf.mBuf[SFD(self).fdbuf.mBufLen++] = c; | |
314 | - SFD(self).fdbuf.mBuf[SFD(self).fdbuf.mBufLen] = 0; | |
325 | + SFD(self).mBuf[SFD(self).mBufLen++] = c; | |
326 | + SFD(self).mBuf[SFD(self).mBufLen] = 0; | |
315 | 327 | |
316 | 328 | if(gXyzshSigInt) { |
317 | 329 | gXyzshSigInt = FALSE; |
@@ -326,14 +338,25 @@ BOOL fd_writec(sObject* self, char c) | ||
326 | 338 | // FALSE: signal interrupt. set RCODE_SIGNAL_INTERRUPT on rcode and err message |
327 | 339 | BOOL fd_flash(sObject* self, int fd) |
328 | 340 | { |
329 | - if(SFD(self).mKind == kFDKindBuf) { | |
330 | - if(!bufsiz_write(fd, SFD(self).fdbuf.mBuf, SFD(self).fdbuf.mBufLen)) { | |
341 | + ASSERT(TYPE(self) == T_FD); | |
342 | + | |
343 | + if(TYPE(self) == T_FD) { | |
344 | + if(!bufsiz_write(fd, SFD(self).mBuf, SFD(self).mBufLen)) { | |
331 | 345 | return FALSE; |
332 | 346 | } |
333 | 347 | |
334 | - SFD(self).fdbuf.mBufLen = 0; | |
335 | - SFD(self).fdbuf.mBuf[0] = 0; | |
348 | + SFD(self).mBufLen = 0; | |
349 | + SFD(self).mBuf[0] = 0; | |
336 | 350 | } |
337 | 351 | |
338 | 352 | return TRUE; |
339 | 353 | } |
354 | + | |
355 | +sObject* fd2_new_from_stack(uint fd) | |
356 | +{ | |
357 | + sObject* self = stack_get_free_object(T_FD2); | |
358 | + | |
359 | + SFD2(self).mFD = fd; | |
360 | + | |
361 | + return self; | |
362 | +} |
@@ -25,7 +25,6 @@ sObject* fun_new_from_gc(sObject* parent, BOOL user_object, BOOL no_stackframe) | ||
25 | 25 | |
26 | 26 | SFUN(self).mArgBlocks = NULL; |
27 | 27 | |
28 | - SFUN(self).mRunInfo = NULL; | |
29 | 28 | SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
30 | 29 | memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
31 | 30 |
@@ -45,7 +44,6 @@ sObject* fun_new_from_stack(sObject* parent) | ||
45 | 44 | SFUN(self).mLocalObjects = NULL; |
46 | 45 | SFUN(self).mArgBlocks = NULL; |
47 | 46 | |
48 | - SFUN(self).mRunInfo = NULL; | |
49 | 47 | SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
50 | 48 | memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
51 | 49 |
@@ -65,7 +63,6 @@ sObject* fun_clone_from_stack_block_to_gc(sObject* block, BOOL user_object, sObj | ||
65 | 63 | SFUN(self).mLocalObjects = NULL; |
66 | 64 | SFUN(self).mArgBlocks = NULL; |
67 | 65 | |
68 | - SFUN(self).mRunInfo = NULL; | |
69 | 66 | SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
70 | 67 | memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
71 | 68 |
@@ -85,7 +82,6 @@ sObject* fun_clone_from_stack_block_to_stack(sObject* block, sObject* parent, BO | ||
85 | 82 | SFUN(self).mLocalObjects = NULL; |
86 | 83 | SFUN(self).mArgBlocks = NULL; |
87 | 84 | |
88 | - SFUN(self).mRunInfo = NULL; | |
89 | 85 | SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
90 | 86 | memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX); |
91 | 87 |
@@ -120,8 +116,8 @@ int fun_gc_children_mark(sObject* self) | ||
120 | 116 | |
121 | 117 | sObject* block = SFUN(self).mBlock; |
122 | 118 | if(block) { |
123 | - if((block->mFlg & GC_MARK) == 0) { | |
124 | - block->mFlg |= GC_MARK; | |
119 | + if(IS_MARKED(block) == 0) { | |
120 | + SET_MARK(block); | |
125 | 121 | count++; |
126 | 122 | count += object_gc_children_mark(block); |
127 | 123 | } |
@@ -129,8 +125,8 @@ int fun_gc_children_mark(sObject* self) | ||
129 | 125 | |
130 | 126 | sObject* parent = SFUN(self).mParent; |
131 | 127 | if(parent) { |
132 | - if((parent->mFlg & GC_MARK) == 0) { | |
133 | - parent->mFlg |= GC_MARK; | |
128 | + if(IS_MARKED(parent) == 0) { | |
129 | + SET_MARK(parent); | |
134 | 130 | count++; |
135 | 131 | count += object_gc_children_mark(parent); |
136 | 132 | } |
@@ -138,8 +134,8 @@ int fun_gc_children_mark(sObject* self) | ||
138 | 134 | |
139 | 135 | sObject* lobjects = SFUN(self).mLocalObjects; |
140 | 136 | if(lobjects) { |
141 | - if((lobjects->mFlg & GC_MARK) == 0) { | |
142 | - lobjects->mFlg |= GC_MARK; | |
137 | + if(IS_MARKED(lobjects) == 0) { | |
138 | + SET_MARK(lobjects); | |
143 | 139 | count++; |
144 | 140 | count += object_gc_children_mark(lobjects); |
145 | 141 | } |
@@ -147,8 +143,8 @@ int fun_gc_children_mark(sObject* self) | ||
147 | 143 | |
148 | 144 | sObject* arg_blocks = SFUN(self).mArgBlocks; |
149 | 145 | if(arg_blocks) { |
150 | - if((arg_blocks->mFlg & GC_MARK) == 0) { | |
151 | - arg_blocks->mFlg |= GC_MARK; | |
146 | + if(IS_MARKED(arg_blocks) == 0) { | |
147 | + SET_MARK(arg_blocks); | |
152 | 148 | count++; |
153 | 149 | count += object_gc_children_mark(arg_blocks); |
154 | 150 | } |
@@ -13,16 +13,13 @@ sObject* gRootObject; | ||
13 | 13 | sObject* gCompletionObject; |
14 | 14 | sObject* gXyzshObject; |
15 | 15 | sObject* gCurrentObject; |
16 | -sObject* gMemChecker; | |
17 | 16 | sObject* gStackFrames; |
18 | 17 | |
19 | 18 | #define SLOT_SIZE 64 |
20 | 19 | |
21 | 20 | static void object_delete(sObject* obj) |
22 | 21 | { |
23 | - if(obj->mUserObject) memchecker_erase(gMemChecker, obj); | |
24 | - | |
25 | - switch(obj->mFlg & 0xff) { | |
22 | + switch(TYPE(obj)) { | |
26 | 23 | case T_STRING: |
27 | 24 | string_delete_gc(obj); |
28 | 25 | break; |
@@ -70,10 +67,6 @@ static void object_delete(sObject* obj) | ||
70 | 67 | uobject_delete_gc(obj); |
71 | 68 | break; |
72 | 69 | |
73 | - case T_MEMCHECKER: | |
74 | - fprintf(stderr, "unexpected err on object_delete at gc.c"); | |
75 | - exit(1); | |
76 | - | |
77 | 70 | case T_EXTOBJ: |
78 | 71 | SEXTOBJ(obj).mFreeFun(SEXTOBJ(obj).mObject); |
79 | 72 | break; |
@@ -141,7 +134,7 @@ static int sweep() | ||
141 | 134 | sObject* p = gPool[i]; |
142 | 135 | int j; |
143 | 136 | for(j=0; j<SLOT_SIZE; j++) { |
144 | - if((p[j].mFlg & 0xff) != 0 && !(p[j].mFlg & GC_MARK)) { | |
137 | + if(TYPE(p + j) != 0 && !IS_MARKED(p + j)) { | |
145 | 138 | object_delete(p + j); |
146 | 139 | |
147 | 140 | memset(p + j, 0, sizeof(sObject)); |
@@ -157,10 +150,32 @@ static int sweep() | ||
157 | 150 | return count; |
158 | 151 | } |
159 | 152 | |
160 | -void gc_init(int pool_size) | |
153 | +BOOL gc_valid_object(sObject* object) | |
161 | 154 | { |
162 | - gMemChecker = MEMCHECKER_NEW_STACK(128); | |
155 | + int i; | |
156 | + for(i=0; i<gPoolSize; i++) { | |
157 | + if(object >= gPool[i] && object < gPool[i] + SLOT_SIZE) { | |
158 | + ulong n = ((ulong)object - (ulong)gPool[i]) % (ulong)sizeof(sObject); | |
159 | + if(n == 0) { | |
160 | + if(TYPE(object) > 0 && TYPE(object) < T_TYPE_MAX) { | |
161 | + return TRUE; | |
162 | + } | |
163 | + else { | |
164 | + return FALSE; | |
165 | + } | |
166 | + | |
167 | + } | |
168 | + else { | |
169 | + return FALSE; | |
170 | + } | |
171 | + } | |
172 | + } | |
173 | + | |
174 | + return FALSE; | |
175 | +} | |
163 | 176 | |
177 | +void gc_init(int pool_size) | |
178 | +{ | |
164 | 179 | gPoolSize = pool_size; |
165 | 180 | gPool = (sObject**)MALLOC(sizeof(sObject*)*gPoolSize); |
166 | 181 | memset(gPool, 0, sizeof(sObject*)*gPoolSize); |
@@ -222,7 +237,7 @@ void gc_final() | ||
222 | 237 | sObject* p = gPool[i]; |
223 | 238 | int j; |
224 | 239 | for(j=0; j<SLOT_SIZE; j++) { |
225 | - if(p[j].mFlg & 0xff) { | |
240 | + if(TYPE(p + j)) { | |
226 | 241 | object_delete(p + j); |
227 | 242 | } |
228 | 243 | } |
@@ -239,15 +254,18 @@ static int mark() | ||
239 | 254 | sObject* p = gPool[i]; |
240 | 255 | int j; |
241 | 256 | for(j=0; j<SLOT_SIZE; j++) { |
242 | - p[j].mFlg &= ~GC_MARK; | |
257 | + CLEAR_MARK(p + j); | |
243 | 258 | } |
244 | 259 | } |
245 | 260 | |
246 | 261 | /// mark all objects |
247 | - gRootObject->mFlg |= GC_MARK; | |
248 | - int count = uobject_gc_children_mark(gRootObject); | |
262 | + int count = 0; | |
263 | + SET_MARK(gRootObject); | |
264 | + count++; | |
265 | + count += uobject_gc_children_mark(gRootObject); | |
249 | 266 | |
250 | - gXyzshObject->mFlg |= GC_MARK; | |
267 | + SET_MARK(gXyzshObject); | |
268 | + count++; | |
251 | 269 | count += uobject_gc_children_mark(gXyzshObject); |
252 | 270 | |
253 | 271 | return count; |
@@ -311,10 +329,11 @@ sObject* gc_get_free_object(int kind, BOOL user_object) | ||
311 | 329 | sObject* result = gFreeObjectHead; |
312 | 330 | gFreeObjectHead = gFreeObjectHead->mNextFreeObject; |
313 | 331 | |
314 | - result->mUserObject = user_object; | |
315 | - if(user_object) memchecker_put(gMemChecker, result, kind); | |
332 | + if(user_object) { | |
333 | + SET_USER_OBJECT(result); | |
334 | + } | |
316 | 335 | |
317 | - result->mFlg = kind; | |
336 | + result->mFlg |= kind; | |
318 | 337 | |
319 | 338 | return result; |
320 | 339 | } |
@@ -418,8 +418,8 @@ int hash_gc_children_mark(sObject* self) | ||
418 | 418 | while(it) { |
419 | 419 | sObject* item = it->mItem; |
420 | 420 | |
421 | - if(item && (item->mFlg & GC_MARK) == 0) { | |
422 | - item->mFlg |= GC_MARK; | |
421 | + if(item && IS_MARKED(item) == 0) { | |
422 | + SET_MARK(item); | |
423 | 423 | count++; |
424 | 424 | count += object_gc_children_mark(item); |
425 | 425 | } |
@@ -68,7 +68,7 @@ static char* prompt() | ||
68 | 68 | //uobject_init(stackframe); |
69 | 69 | SFUN(fun).mLocalObjects = stackframe; |
70 | 70 | |
71 | - sObject* nextout = FD_NEW_STACK(kFDKindBuf, 0); | |
71 | + sObject* nextout = FD_NEW_STACK(); | |
72 | 72 | |
73 | 73 | int rcode; |
74 | 74 | if(!run(gPrompt, gStdin, nextout, &rcode, gCurrentObject, fun)) { |
@@ -90,7 +90,7 @@ static char* prompt() | ||
90 | 90 | |
91 | 91 | mreset_tty(); |
92 | 92 | readline_signal(); |
93 | - char* buf = readline(SFD(nextout).fdbuf.mBuf); | |
93 | + char* buf = readline(SFD(nextout).mBuf); | |
94 | 94 | |
95 | 95 | (void)vector_pop_back(gStackFrames); |
96 | 96 |
@@ -121,8 +121,6 @@ BOOL xyzsh_run(int* rcode, sObject* block, char* source_name, fXyzshJobDone xyzs | ||
121 | 121 | } |
122 | 122 | uobject_put(SFUN(fun).mLocalObjects, "ARGV", argv2); |
123 | 123 | |
124 | - SFUN(fun).mRunInfo = NULL; | |
125 | - | |
126 | 124 | if(!run(block, nextin, nextout, rcode, current_object, fun)) { |
127 | 125 | xyzsh_restore_signal_default(); |
128 | 126 | (void)vector_pop_back(gStackFrames); |
@@ -281,8 +279,6 @@ BOOL xyzsh_readline_interface_onetime(int* rcode, char* cmdline, int cursor_poin | ||
281 | 279 | } |
282 | 280 | uobject_put(SFUN(fun).mLocalObjects, "ARGV", argv2); |
283 | 281 | |
284 | - SFUN(fun).mRunInfo = NULL; | |
285 | - | |
286 | 282 | if(!run(block, gStdin, gStdout, rcode, gCurrentObject, fun)) { |
287 | 283 | xyzsh_restore_signal_default(); |
288 | 284 |
@@ -441,8 +437,6 @@ void xyzsh_readline_interface(char* cmdline, int cursor_point, char** argv, int | ||
441 | 437 | } |
442 | 438 | uobject_put(SFUN(fun).mLocalObjects, "ARGV", argv2); |
443 | 439 | |
444 | - SFUN(fun).mRunInfo = NULL; | |
445 | - | |
446 | 440 | if(!run(block, gStdin, gStdout, &rcode, gCurrentObject, fun)) { |
447 | 441 | readline_signal(); |
448 | 442 | if(rcode == RCODE_BREAK) { |
@@ -301,8 +301,8 @@ int list_gc_children_mark(sObject* self) | ||
301 | 301 | for(it= SLIST(self).mEntryIt; it; it=it->mNextIt) { |
302 | 302 | sObject* item = it->mItem; |
303 | 303 | |
304 | - if(item && (item->mFlg & GC_MARK) == 0) { | |
305 | - item->mFlg |= GC_MARK; | |
304 | + if(item && IS_MARKED(item) == 0) { | |
305 | + SET_MARK(item); | |
306 | 306 | count ++; |
307 | 307 | count += object_gc_children_mark(item); |
308 | 308 | } |
@@ -15,7 +15,24 @@ static void main_xyzsh_job_done(int job_num, char* job_title) | ||
15 | 15 | int main(int argc, char** argv) |
16 | 16 | { |
17 | 17 | CHECKML_BEGIN(FALSE); |
18 | - | |
18 | +/* | |
19 | +printf("sObject %d\n", (int)sizeof(sObject)); | |
20 | +printf("string_obj %d\n", (int)sizeof(string_obj)); | |
21 | +printf("vector_obj %d\n", (int)sizeof(vector_obj)); | |
22 | +printf("hash_obj %d\n", (int)sizeof(hash_obj)); | |
23 | +printf("list_obj %d\n", (int)sizeof(list_obj)); | |
24 | +printf("fd_obj %d\n", (int)sizeof(fd_obj)); | |
25 | +printf("fd2_obj %d\n", (int)sizeof(fd2_obj)); | |
26 | +printf("job_obj %d\n", (int)sizeof(job_obj)); | |
27 | +printf("block_obj %d\n", (int)sizeof(struct block_obj)); | |
28 | +printf("uobject_obj %d\n", (int)sizeof(uobject_obj)); | |
29 | +printf("nfun_obj %d\n", (int)sizeof(nfun_obj)); | |
30 | +printf("fun_obj %d\n", (int)sizeof(fun_obj)); | |
31 | +printf("class_obj %d\n", (int)sizeof(class_obj)); | |
32 | +printf("completion_obj %d\n", (int)sizeof(completion_obj)); | |
33 | +printf("external_prog_obj %d\n", (int)sizeof(external_prog_obj)); | |
34 | +printf("external_obj %d\n", (int)sizeof(external_obj)); | |
35 | +*/ | |
19 | 36 | srandom((unsigned)time(NULL)); |
20 | 37 | |
21 | 38 | char* optc = NULL; |
@@ -90,8 +90,8 @@ int nfun_gc_children_mark(sObject* self) | ||
90 | 90 | |
91 | 91 | sObject* parent = SNFUN(self).mParent; |
92 | 92 | if(parent) { |
93 | - if((parent->mFlg & GC_MARK) == 0) { | |
94 | - parent->mFlg |= GC_MARK; | |
93 | + if(IS_MARKED(parent) == 0) { | |
94 | + SET_MARK(parent); | |
95 | 95 | count++; |
96 | 96 | count += object_gc_children_mark(parent); |
97 | 97 | } |
@@ -121,7 +121,7 @@ static BOOL read_env(char** p, sBuf* buf, char* sname, int* sline, BOOL expand_q | ||
121 | 121 | { |
122 | 122 | (*p)++; |
123 | 123 | |
124 | - enum eLineField lf = kLF; | |
124 | + eLineField lf = kLF; | |
125 | 125 | |
126 | 126 | BOOL double_dollar; |
127 | 127 | if(**p == '$') { |
@@ -259,8 +259,8 @@ static char* user_completion(const char* text, int stat) | ||
259 | 259 | gCompletionArray = VECTOR_NEW_STACK(16); |
260 | 260 | |
261 | 261 | int i; |
262 | - for(i=0; i<vector_count(SFD(gUserCompletionNextout).fdbuf.mLines); i++) { | |
263 | - sObject* candidate = STRING_NEW_STACK(vector_item(SFD(gUserCompletionNextout).fdbuf.mLines, i)); | |
262 | + for(i=0; i<vector_count(SFD(gUserCompletionNextout).mLines); i++) { | |
263 | + sObject* candidate = STRING_NEW_STACK(vector_item(SFD(gUserCompletionNextout).mLines, i)); | |
264 | 264 | string_chomp(candidate); |
265 | 265 | vector_add(gCompletionArray, string_c_str(candidate)); |
266 | 266 | } |
@@ -562,12 +562,12 @@ char** readline_on_complete(const char* text, int start, int end) | ||
562 | 562 | } |
563 | 563 | } |
564 | 564 | else if(ucompletion && TYPE(ucompletion) == T_COMPLETION) { |
565 | - sObject* nextin = FD_NEW_STACK(kFDKindBuf, 0); | |
565 | + sObject* nextin = FD_NEW_STACK(); | |
566 | 566 | if(!fd_write(nextin, string_c_str(cmdline), string_length(cmdline))) { |
567 | 567 | stack_end_stack(); |
568 | 568 | return NULL; |
569 | 569 | } |
570 | - sObject* nextout = FD_NEW_STACK(kFDKindBuf, 0); | |
570 | + sObject* nextout = FD_NEW_STACK(); | |
571 | 571 | |
572 | 572 | sObject* fun = FUN_NEW_STACK(NULL); |
573 | 573 | sObject* stackframe = UOBJECT_NEW_GC(8, gXyzshObject, "_stackframe", FALSE); |
@@ -612,7 +612,7 @@ char** readline_on_complete(const char* text, int start, int end) | ||
612 | 612 | (void)vector_pop_back(gStackFrames); |
613 | 613 | readline_signal(); |
614 | 614 | |
615 | - enum eLineField lf; | |
615 | + eLineField lf; | |
616 | 616 | if(fd_guess_lf(nextout, &lf)) { |
617 | 617 | fd_split(nextout, lf); |
618 | 618 | } else { |
@@ -804,7 +804,7 @@ BOOL cmd_readline_insert_text(sObject* nextin, sObject* nextout, sRunInfo* runin | ||
804 | 804 | sCommand* command = runinfo->mCommand; |
805 | 805 | |
806 | 806 | if(runinfo->mFilter) { |
807 | - (void)rl_insert_text(SFD(nextin).fdbuf.mBuf); | |
807 | + (void)rl_insert_text(SFD(nextin).mBuf); | |
808 | 808 | puts(""); |
809 | 809 | rl_forced_update_display(); |
810 | 810 |
@@ -868,7 +868,7 @@ static int readline_macro(int count, int key) | ||
868 | 868 | { |
869 | 869 | stack_start_stack(); |
870 | 870 | |
871 | - sObject* nextout2 = FD_NEW_STACK(kFDKindBuf, 0); | |
871 | + sObject* nextout2 = FD_NEW_STACK(); | |
872 | 872 | |
873 | 873 | int rcode = 0; |
874 | 874 | sObject* block = BLOCK_NEW_STACK(); |
@@ -882,7 +882,7 @@ static int readline_macro(int count, int key) | ||
882 | 882 | //uobject_init(stackframe); |
883 | 883 | SFUN(fun).mLocalObjects = stackframe; |
884 | 884 | |
885 | - sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0); | |
885 | + sObject* nextin2 = FD_NEW_STACK(); | |
886 | 886 | |
887 | 887 | (void)fd_write(nextin2, rl_line_buffer, rl_point); |
888 | 888 |
@@ -909,7 +909,7 @@ static int readline_macro(int count, int key) | ||
909 | 909 | fprintf(stderr, "%s", string_c_str(gErrMsg)); |
910 | 910 | } |
911 | 911 | |
912 | - rl_insert_text(SFD(nextout2).fdbuf.mBuf); | |
912 | + rl_insert_text(SFD(nextout2).mBuf); | |
913 | 913 | puts(""); |
914 | 914 | rl_forced_update_display(); |
915 | 915 | stack_end_stack(); |
@@ -29,6 +29,21 @@ static sObject* gObjectsInPipe; | ||
29 | 29 | |
30 | 30 | static sObject* gRunningObjects; |
31 | 31 | |
32 | +sRunInfo* gRunInfoOfRunningObject; | |
33 | + | |
34 | +BOOL contained_in_pipe(sObject* object) | |
35 | +{ | |
36 | + BOOL found = FALSE; | |
37 | + int j; | |
38 | + for(j=0; j<vector_count(gObjectsInPipe); j++) { | |
39 | + if(object == vector_item(gObjectsInPipe, j)) { | |
40 | + found = TRUE; | |
41 | + } | |
42 | + } | |
43 | + | |
44 | + return found; | |
45 | +} | |
46 | + | |
32 | 47 | BOOL add_object_to_objects_in_pipe(sObject* object, sRunInfo* runinfo, sCommand* command) |
33 | 48 | { |
34 | 49 | vector_add(gObjectsInPipe, object); |
@@ -41,7 +56,7 @@ BOOL add_object_to_objects_in_pipe(sObject* object, sRunInfo* runinfo, sCommand* | ||
41 | 56 | return TRUE; |
42 | 57 | } |
43 | 58 | |
44 | -enum eLineField gLineField; | |
59 | +eLineField gLineField; | |
45 | 60 | enum eKanjiCode gKanjiCode; |
46 | 61 | |
47 | 62 | void (*xyzsh_job_done)(int job_num, char* job_title); |
@@ -51,9 +66,9 @@ sObject* gJobs; | ||
51 | 66 | void run_init(enum eAppType app_type) |
52 | 67 | { |
53 | 68 | gAppType = app_type; |
54 | - gStdin = FD_NEW_STACK(kFDKindBuf, 0); | |
55 | - gStdout = FD_NEW_STACK(kFDKindBuf, 0); | |
56 | - gStderr = FD_NEW_STACK(kFDKindBuf, 0); | |
69 | + gStdin = FD_NEW_STACK(); | |
70 | + gStdout = FD_NEW_STACK(); | |
71 | + gStderr = FD_NEW_STACK(); | |
57 | 72 | gJobs = VECTOR_NEW_GC(16, FALSE); |
58 | 73 | uobject_put(gXyzshObject, "_jobs", gJobs); |
59 | 74 |
@@ -62,7 +77,9 @@ void run_init(enum eAppType app_type) | ||
62 | 77 | gLineField = kLF; |
63 | 78 | gKanjiCode = kByte; |
64 | 79 | |
65 | - gGlobalPipe = FD_NEW_STACK(kFDKindBuf, 0); | |
80 | + gRunInfoOfRunningObject = NULL; | |
81 | + | |
82 | + gGlobalPipe = FD_NEW_STACK(); | |
66 | 83 | |
67 | 84 | gObjectsInPipe = VECTOR_NEW_GC(10, FALSE); |
68 | 85 | uobject_put(gXyzshObject, "_objects_in_pipe", gObjectsInPipe); |
@@ -154,7 +171,7 @@ static void nextin_writer(pid_t pid, sObject* nextin, int* pipeinfds, int* pipeo | ||
154 | 171 | } |
155 | 172 | (void)close(pipeinfds[0]); |
156 | 173 | |
157 | - if(!bufsiz_write(pipeinfds[1], SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) { | |
174 | + if(!bufsiz_write(pipeinfds[1], SFD(nextin).mBuf, SFD(nextin).mBufLen)) { | |
158 | 175 | if(errno != EPIPE ) { |
159 | 176 | perror("write memory pipe"); |
160 | 177 | exit(1); |
@@ -444,11 +461,11 @@ static BOOL run_external_command(char* program, sObject* nextin, sObject* nextou | ||
444 | 461 | int nextout2; |
445 | 462 | int nexterr2; |
446 | 463 | |
447 | - if(nextin == gStdin && SFD(gStdin).fdbuf.mBufLen == 0) { | |
464 | + if(nextin == gStdin && SFD(gStdin).mBufLen == 0) { | |
448 | 465 | nextin2 = 0; |
449 | 466 | } |
450 | - else if(SFD(nextin).mKind == kFDKindFD) { | |
451 | - nextin2 = SFD(nextin).fd.mFD; | |
467 | + else if(TYPE(nextin) == T_FD2) { | |
468 | + nextin2 = SFD2(nextin).mFD; | |
452 | 469 | } |
453 | 470 | else { |
454 | 471 | if(pipe(pipeinfds) < 0) { |
@@ -461,8 +478,8 @@ static BOOL run_external_command(char* program, sObject* nextin, sObject* nextou | ||
461 | 478 | nextout2 = 1; |
462 | 479 | nexterr2 = 2; |
463 | 480 | } |
464 | - else if(SFD(nextout).mKind == kFDKindFD) { | |
465 | - nextout2 = SFD(nextout).fd.mFD; | |
481 | + else if(TYPE(nextout) == T_FD2) { | |
482 | + nextout2 = SFD2(nextout).mFD; | |
466 | 483 | |
467 | 484 | if(pipe(pipeerrfds) < 0) { |
468 | 485 | perror("pipe"); |
@@ -547,10 +564,10 @@ if(1) { | ||
547 | 564 | /// Therefore xyzsh can't waitpid and deadlock. |
548 | 565 | /// Avoid this, xyzsh is ready for a writer process to write buffer to the xyzsh. |
549 | 566 | pid_t nextin_reader_pid = -1; |
550 | - if(SFD(nextin).mKind != kFDKindFD && nextin2 != 0) { | |
567 | + if(TYPE(nextin) != T_FD2 && nextin2 != 0) { | |
551 | 568 | nextin_writer(pgroup, nextin, pipeinfds, pipeoutfds, pipeerrfds, runinfo, program, &nextin_reader_pid); |
552 | 569 | } |
553 | - if(SFD(nextout).mKind != kFDKindFD && nextout2 != 1) { | |
570 | + if(TYPE(nextout) != T_FD2 && nextout2 != 1) { | |
554 | 571 | (void)close(pipeoutfds[1]); |
555 | 572 | if(!nextout_reader(nextout, pipeoutfds, runinfo, program)) { |
556 | 573 | // wait everytime |
@@ -578,8 +595,8 @@ if(1) { | ||
578 | 595 | BOOL run_function(sObject* fun, sObject* nextin, sObject* nextout, sRunInfo* runinfo, char** argv, int argc, sObject** blocks, int blocks_num) |
579 | 596 | { |
580 | 597 | sObject* local_objects = SFUN(fun).mLocalObjects; |
581 | - sRunInfo* runinfo2 = SFUN(fun).mRunInfo; | |
582 | - SFUN(fun).mRunInfo = runinfo; | |
598 | + sRunInfo* runinfo2 = gRunInfoOfRunningObject; | |
599 | + gRunInfoOfRunningObject = runinfo; | |
583 | 600 | |
584 | 601 | BOOL no_stackframe = SFUN(fun).mFlags & FUN_FLAGS_NO_STACKFRAME; |
585 | 602 |
@@ -643,6 +660,7 @@ BOOL run_function(sObject* fun, sObject* nextin, sObject* nextout, sRunInfo* run | ||
643 | 660 | runinfo->mRCode = rcode; |
644 | 661 | SFUN(fun).mLocalObjects = local_objects; |
645 | 662 | (void)vector_pop_back(gStackFrames); |
663 | + gRunInfoOfRunningObject = runinfo2; | |
646 | 664 | return FALSE; |
647 | 665 | } |
648 | 666 | } |
@@ -653,7 +671,7 @@ BOOL run_function(sObject* fun, sObject* nextin, sObject* nextout, sRunInfo* run | ||
653 | 671 | |
654 | 672 | SFUN(fun).mLocalObjects = local_objects; |
655 | 673 | SFUN(fun).mArgBlocks = arg_blocks; |
656 | - SFUN(fun).mRunInfo = runinfo2; | |
674 | + gRunInfoOfRunningObject = runinfo2; | |
657 | 675 | |
658 | 676 | return TRUE; |
659 | 677 | } |
@@ -878,11 +896,6 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd, | ||
878 | 896 | |
879 | 897 | switch(command->mRedirects[i] & REDIRECT_KIND) { |
880 | 898 | case REDIRECT_IN: |
881 | - if(SFD(*nextin).mKind == kFDKindBuf) { | |
882 | - FREE(SFD(*nextin).fdbuf.mBuf); | |
883 | - } | |
884 | - | |
885 | - SFD(*nextin).mKind = kFDKindBuf; | |
886 | 899 | fd = open(command->mRedirectsFileNamesRuntime[i], O_RDONLY); |
887 | 900 | if(fd < 0) { |
888 | 901 | char buf[BUFSIZ]; |
@@ -897,12 +910,10 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd, | ||
897 | 910 | err_msg(buf, runinfo->mSName, runinfo->mSLine, ""); |
898 | 911 | return FALSE; |
899 | 912 | } |
900 | - | |
901 | - SFD(*nextin).fdbuf.mBuf = result; | |
902 | - SFD(*nextin).fdbuf.mBufSize = result_size; | |
903 | - SFD(*nextin).fdbuf.mBufLen = result_len; | |
904 | - | |
905 | 913 | (void)close(fd); |
914 | + | |
915 | + ASSERT(TYPE(*nextin) == T_FD); | |
916 | + fd_put(*nextin, MANAGED result, result_size, result_len); | |
906 | 917 | break; |
907 | 918 | |
908 | 919 | case REDIRECT_APPEND: |
@@ -914,7 +925,7 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd, | ||
914 | 925 | err_msg(buf, runinfo->mSName, runinfo->mSLine, ""); |
915 | 926 | return FALSE; |
916 | 927 | } |
917 | - *nextout = FD_NEW_STACK(kFDKindFD, fd); | |
928 | + *nextout = FD2_NEW_STACK(fd); | |
918 | 929 | |
919 | 930 | *opened_fd = fd; |
920 | 931 | } |
@@ -929,7 +940,7 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd, | ||
929 | 940 | err_msg(buf, runinfo->mSName, runinfo->mSLine, ""); |
930 | 941 | return FALSE; |
931 | 942 | } |
932 | - *nextout = FD_NEW_STACK(kFDKindFD, fd); | |
943 | + *nextout = FD2_NEW_STACK(fd); | |
933 | 944 | |
934 | 945 | *opened_fd = fd; |
935 | 946 | } |
@@ -959,7 +970,7 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout | ||
959 | 970 | sObject* nextin; |
960 | 971 | if(statment->mFlags & STATMENT_CONTEXTPIPE) { |
961 | 972 | /// read stdin /// |
962 | - if(pipein == gStdin && SFD(gStdin).fdbuf.mBufLen == 0 && !isatty(0)) { | |
973 | + if(pipein == gStdin && SFD(gStdin).mBufLen == 0 && !isatty(0)) { | |
963 | 974 | if(!stdin_read_out()) { |
964 | 975 | sCommand* command = runinfo->mCommand; |
965 | 976 | if(command) { |
@@ -981,19 +992,19 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout | ||
981 | 992 | } |
982 | 993 | /// line context pipe /// |
983 | 994 | else { |
984 | - nextin = FD_NEW_STACK(kFDKindBuf, 0); | |
985 | - enum eLineField lf; | |
995 | + nextin = FD_NEW_STACK(); | |
996 | + eLineField lf; | |
986 | 997 | if(fd_guess_lf(pipein, &lf)) { |
987 | 998 | fd_split(pipein, lf); |
988 | 999 | } else { |
989 | 1000 | fd_split(pipein, kLF); |
990 | 1001 | } |
991 | - if(line_number < 0) line_number += vector_count(SFD(pipein).fdbuf.mLines)+1; | |
1002 | + if(line_number < 0) line_number += vector_count(SFD(pipein).mLines)+1; | |
992 | 1003 | if(line_number < 0) line_number = 0; |
993 | - if(line_number > vector_count(SFD(pipein).fdbuf.mLines)) line_number = vector_count(SFD(pipein).fdbuf.mLines); | |
1004 | + if(line_number > vector_count(SFD(pipein).mLines)) line_number = vector_count(SFD(pipein).mLines); | |
994 | 1005 | int i; |
995 | - for(i=SFD(pipein).fdbuf.mReadedLineNumber; i<vector_count(SFD(pipein).fdbuf.mLines) && i-SFD(pipein).fdbuf.mReadedLineNumber<line_number; i++) { | |
996 | - char* line = vector_item(SFD(pipein).fdbuf.mLines, i); | |
1006 | + for(i=SFD(pipein).mReadedLineNumber; i<vector_count(SFD(pipein).mLines) && i-SFD(pipein).mReadedLineNumber<line_number; i++) { | |
1007 | + char* line = vector_item(SFD(pipein).mLines, i); | |
997 | 1008 | if(!fd_write(nextin, line, strlen(line))) { |
998 | 1009 | sCommand* command = runinfo->mCommand; |
999 | 1010 | if(command) { |
@@ -1006,12 +1017,12 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout | ||
1006 | 1017 | return FALSE; |
1007 | 1018 | } |
1008 | 1019 | } |
1009 | - SFD(pipein).fdbuf.mReadedLineNumber += line_number; | |
1020 | + SFD(pipein).mReadedLineNumber += line_number; | |
1010 | 1021 | } |
1011 | 1022 | } |
1012 | 1023 | else if(statment->mFlags & STATMENT_GLOBALPIPEIN) { |
1013 | - nextin = FD_NEW_STACK(kFDKindBuf, 0); | |
1014 | - if(!fd_write(nextin, SFD(gGlobalPipe).fdbuf.mBuf, SFD(gGlobalPipe).fdbuf.mBufLen)) { | |
1024 | + nextin = FD_NEW_STACK(); | |
1025 | + if(!fd_write(nextin, SFD(gGlobalPipe).mBuf, SFD(gGlobalPipe).mBufLen)) { | |
1015 | 1026 | sCommand* command = runinfo->mCommand; |
1016 | 1027 | if(command) { |
1017 | 1028 | err_msg("signal interrupt12", runinfo->mSName, runinfo->mSLine, command->mArgs[0]); |
@@ -1049,6 +1060,8 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout | ||
1049 | 1060 | return TRUE; |
1050 | 1061 | } |
1051 | 1062 | |
1063 | + ASSERT(TYPE(nextin) == T_FD); | |
1064 | + | |
1052 | 1065 | if(nextout == NULL) { |
1053 | 1066 | if(last_program) { |
1054 | 1067 | if(statment->mFlags & STATMENT_GLOBALPIPEOUT) { |
@@ -1063,7 +1076,7 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout | ||
1063 | 1076 | } |
1064 | 1077 | } |
1065 | 1078 | else { |
1066 | - nextout = FD_NEW_STACK(kFDKindBuf, 0); | |
1079 | + nextout = FD_NEW_STACK(); | |
1067 | 1080 | } |
1068 | 1081 | } |
1069 | 1082 |
@@ -1226,8 +1239,8 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout | ||
1226 | 1239 | |
1227 | 1240 | if(opened_fd != -1) redirect_finish(opened_fd); |
1228 | 1241 | |
1229 | - if(SFD(nextout).mKind == kFDKindFD) { | |
1230 | - nextin = FD_NEW_STACK(kFDKindBuf, 0); | |
1242 | + if(TYPE(nextout) == T_FD2) { | |
1243 | + nextin = FD_NEW_STACK(); | |
1231 | 1244 | } |
1232 | 1245 | else { |
1233 | 1246 | nextin = nextout; |
@@ -1549,6 +1562,7 @@ BOOL bufsiz_read(int fd, ALLOC char** result, int* result_len, int* result_size) | ||
1549 | 1562 | source = REALLOC(source, source_size); |
1550 | 1563 | } |
1551 | 1564 | strcat(source, buf); |
1565 | + source_len += size; | |
1552 | 1566 | break; |
1553 | 1567 | } |
1554 | 1568 | else { |
@@ -19,7 +19,7 @@ static int gStackFrameSlot[MAX_STACK]; | ||
19 | 19 | |
20 | 20 | static void object_delete(sObject* obj) |
21 | 21 | { |
22 | - switch(obj->mFlg & 0xff) { | |
22 | + switch(TYPE(obj)) { | |
23 | 23 | case T_STRING: |
24 | 24 | string_delete_stack(obj); |
25 | 25 | break; |
@@ -47,6 +47,9 @@ static void object_delete(sObject* obj) | ||
47 | 47 | fd_delete_stack(obj); |
48 | 48 | break; |
49 | 49 | |
50 | + case T_FD2: | |
51 | + break; | |
52 | + | |
50 | 53 | case T_FUN: |
51 | 54 | fun_delete_stack(obj); |
52 | 55 | break; |
@@ -59,10 +62,6 @@ static void object_delete(sObject* obj) | ||
59 | 62 | uobject_delete_stack(obj); |
60 | 63 | break; |
61 | 64 | |
62 | - case T_MEMCHECKER: | |
63 | - memchecker_delete_stack(obj); | |
64 | - break; | |
65 | - | |
66 | 65 | case T_EXTOBJ: |
67 | 66 | SEXTOBJ(obj).mFreeFun(SEXTOBJ(obj).mObject); |
68 | 67 | break; |
@@ -72,6 +71,19 @@ static void object_delete(sObject* obj) | ||
72 | 71 | exit(1); |
73 | 72 | } |
74 | 73 | } |
74 | +/* | |
75 | +BOOL stack_valid_object(sObject* object) | |
76 | +{ | |
77 | + int i; | |
78 | + for(i=0; i<gStackPageSize; i++) { | |
79 | + if(object >= gStack[i] && object < gStack[i] + SLOT_SIZE) { | |
80 | + return TRUE; | |
81 | + } | |
82 | + } | |
83 | + | |
84 | + return FALSE; | |
85 | +} | |
86 | +*/ | |
75 | 87 | |
76 | 88 | void stack_init(int stack_page_size) |
77 | 89 | { |
@@ -337,7 +337,7 @@ void string_toupper(sObject* self, enum eKanjiCode code) | ||
337 | 337 | } |
338 | 338 | } |
339 | 339 | |
340 | -BOOL string_pomch(sObject* str, enum eLineField lf) | |
340 | +BOOL string_pomch(sObject* str, eLineField lf) | |
341 | 341 | { |
342 | 342 | char* s = string_c_str(str); |
343 | 343 | const int len = strlen(s); |
@@ -326,8 +326,8 @@ int uobject_gc_children_mark(sObject* self) | ||
326 | 326 | while(it) { |
327 | 327 | sObject* item = it->mItem; |
328 | 328 | |
329 | - if(item && (item->mFlg & GC_MARK) == 0) { | |
330 | - item->mFlg |= GC_MARK; | |
329 | + if(item && IS_MARKED(item) == 0) { | |
330 | + SET_MARK(item); | |
331 | 331 | count++; |
332 | 332 | |
333 | 333 | count += object_gc_children_mark(item); |
@@ -231,8 +231,8 @@ int vector_gc_children_mark(sObject* self) | ||
231 | 231 | for(i=0; i<SVECTOR(self).mCount; i++) { |
232 | 232 | sObject* item = SVECTOR(self).mTable[i]; |
233 | 233 | |
234 | - if(item && (item->mFlg & GC_MARK) == 0) { | |
235 | - item->mFlg |= GC_MARK; | |
234 | + if(item && IS_MARKED(item) == 0) { | |
235 | + SET_MARK(item); | |
236 | 236 | count++; |
237 | 237 | |
238 | 238 | count += object_gc_children_mark(item); |
@@ -85,7 +85,7 @@ static void xyzsh_read_rc() | ||
85 | 85 | |
86 | 86 | void xyzsh_init(enum eAppType app_type, BOOL no_runtime_script) |
87 | 87 | { |
88 | - setenv("XYZSH_VERSION", "1.2.9", 1); | |
88 | + setenv("XYZSH_VERSION", "1.3.0", 1); | |
89 | 89 | setenv("XYZSH_DATAROOTDIR", DATAROOTDIR, 1); |
90 | 90 | |
91 | 91 | setlocale(LC_ALL, ""); |
@@ -21,7 +21,7 @@ void sCommand_delete(sCommand* self); | ||
21 | 21 | |
22 | 22 | void sCommand_add_arg_to_command(sCommand* self, MANAGED char* buf, int env, int glob); |
23 | 23 | BOOL sCommand_add_message(sCommand* self, MANAGED char* message); |
24 | -void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, enum eLineField lf); | |
24 | +void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, eLineField lf); | |
25 | 25 | void sCommand_add_env(sCommand* self, MANAGED char* name, MANAGED char* key, BOOL key_env, BOOL double_dollar); |
26 | 26 | void sCommand_add_redirect_to_command(sCommand* self, MANAGED char* name, BOOL env, BOOL glob, int redirect); |
27 | 27 |
@@ -47,7 +47,7 @@ void string_erase(sObject* obj, int pos, int len); | ||
47 | 47 | void string_toupper(sObject* self, enum eKanjiCode code); |
48 | 48 | void string_tolower(sObject* self, enum eKanjiCode code); |
49 | 49 | |
50 | -BOOL string_pomch(sObject* str, enum eLineField lf); | |
50 | +BOOL string_pomch(sObject* str, eLineField lf); | |
51 | 51 | BOOL string_chomp(sObject* str); |
52 | 52 | |
53 | 53 | unsigned int string_size(sObject* self); |
@@ -21,6 +21,10 @@ | ||
21 | 21 | //#define SPACE // indicate that a memory which is enough to use |
22 | 22 | #define MANAGED // indicate that a memory which is managed inside the function or object |
23 | 23 | |
24 | +typedef unsigned char uchar; | |
25 | +typedef unsigned int uint; | |
26 | +typedef unsigned long ulong; | |
27 | + | |
24 | 28 | #include <unistd.h> |
25 | 29 | |
26 | 30 | enum eCommandKind { |
@@ -63,8 +67,14 @@ enum eCommandKind { | ||
63 | 67 | kCommandMax |
64 | 68 | }; |
65 | 69 | |
66 | -enum eLineField { kLF, kCRLF, kCR, kBel }; | |
67 | -extern enum eLineField gLineField; | |
70 | +#define kLF 0x01 | |
71 | +#define kCRLF 0x02 | |
72 | +#define kCR 0x03 | |
73 | +#define kBel 0x04 | |
74 | + | |
75 | +typedef char eLineField; | |
76 | + | |
77 | +extern eLineField gLineField; | |
68 | 78 | extern enum eKanjiCode gKanjiCode; |
69 | 79 | |
70 | 80 | enum eAppType { kATOptC, kATXApp, kATConsoleApp }; |
@@ -129,30 +139,21 @@ typedef struct { | ||
129 | 139 | int mCount; |
130 | 140 | } vector_obj; |
131 | 141 | |
132 | -#define kFDKindFD 1 | |
133 | -#define kFDKindBuf 2 | |
134 | - | |
135 | 142 | typedef struct { |
136 | - int mKind; | |
137 | - | |
138 | - union { | |
139 | - struct { | |
140 | - unsigned int mFD; | |
141 | - } fd; | |
143 | + char* mBuf; | |
144 | + int mBufSize; | |
145 | + int mBufLen; | |
142 | 146 | |
143 | - struct { | |
144 | - char* mBuf; | |
145 | - int mBufSize; | |
146 | - int mBufLen; | |
147 | - | |
148 | - struct _sObject* mLines; | |
149 | - enum eLineField mLinesLineField; | |
150 | - unsigned int mReadedLineNumber; | |
151 | - } fdbuf; | |
152 | - }; | |
147 | + struct _sObject* mLines; | |
148 | + eLineField mLinesLineField; | |
149 | + unsigned int mReadedLineNumber; | |
153 | 150 | } fd_obj; |
154 | 151 | |
155 | 152 | typedef struct { |
153 | + uint mFD; | |
154 | +} fd2_obj; | |
155 | + | |
156 | +typedef struct { | |
156 | 157 | char* mPath; |
157 | 158 | } external_prog_obj; |
158 | 159 |
@@ -195,7 +196,7 @@ typedef struct { | ||
195 | 196 | }; |
196 | 197 | struct { |
197 | 198 | struct _sObject* mBlock; |
198 | - enum eLineField mLineField; | |
199 | + eLineField mLineField; | |
199 | 200 | }; |
200 | 201 | }; |
201 | 202 | } sEnv; |
@@ -220,10 +221,6 @@ typedef struct { | ||
220 | 221 | int mArgsNum; |
221 | 222 | int mArgsSize; |
222 | 223 | |
223 | - char** mArgsRuntime; | |
224 | - int mArgsNumRuntime; | |
225 | - int mArgsSizeRuntime; | |
226 | - | |
227 | 224 | sEnv* mEnvs; |
228 | 225 | int mEnvsNum; |
229 | 226 | int mEnvsSize; |
@@ -237,12 +234,16 @@ typedef struct { | ||
237 | 234 | int mRedirectsNum; |
238 | 235 | int mRedirectsSize; |
239 | 236 | |
240 | - char** mRedirectsFileNamesRuntime; //runtime | |
241 | - | |
242 | 237 | option_hash_it mOptions[XYZSH_OPTION_MAX]; // open adressing hash |
243 | 238 | |
244 | 239 | char* mMessages[XYZSH_MESSAGES_MAX]; |
245 | 240 | int mMessagesNum; |
241 | + | |
242 | + char** mArgsRuntime; // runtime info | |
243 | + int mArgsNumRuntime; | |
244 | + int mArgsSizeRuntime; | |
245 | + | |
246 | + char** mRedirectsFileNamesRuntime; //runtime info | |
246 | 247 | } sCommand; |
247 | 248 | |
248 | 249 | typedef struct { |
@@ -281,16 +282,13 @@ struct _sRunInfo; | ||
281 | 282 | typedef struct |
282 | 283 | { |
283 | 284 | struct _sObject* mBlock; |
284 | - | |
285 | 285 | struct _sObject* mParent; |
286 | 286 | |
287 | 287 | struct _sObject* mLocalObjects; |
288 | 288 | struct _sObject* mArgBlocks; |
289 | - | |
290 | 289 | option_hash_it* mOptions; |
291 | - struct _sRunInfo* mRunInfo; | |
292 | 290 | |
293 | - char mFlags; | |
291 | + uchar mFlags; | |
294 | 292 | } fun_obj; |
295 | 293 | |
296 | 294 | typedef fun_obj class_obj; |
@@ -334,24 +332,6 @@ typedef struct { | ||
334 | 332 | struct _sObject* mParent; |
335 | 333 | } uobject_obj; |
336 | 334 | |
337 | -typedef struct _memchecker_it { | |
338 | - void* mKey; | |
339 | - | |
340 | - int mItem; | |
341 | - struct _memchecker_it* mCollisionIt; | |
342 | - | |
343 | - struct _memchecker_it* mNextIt; | |
344 | -} memchecker_it; | |
345 | - | |
346 | -typedef struct { | |
347 | - memchecker_it** mTable; | |
348 | - int mTableSize; | |
349 | - | |
350 | - memchecker_it* mEntryIt; | |
351 | - | |
352 | - int mCounter; | |
353 | -} memchecker_obj; | |
354 | - | |
355 | 335 | struct _sRunInfo; |
356 | 336 | |
357 | 337 | typedef int (*fExtObjMarkFun)(struct _sObject* self); |
@@ -370,7 +350,17 @@ typedef struct { | ||
370 | 350 | struct _sObject* mBlock; |
371 | 351 | } completion_obj; |
372 | 352 | |
373 | -#define GC_MARK 0x80000000 | |
353 | +#define GC_MARK 0x8000 | |
354 | + | |
355 | +#define SOBJ_USER_OBJECT 0x100 | |
356 | +#define IS_USER_OBJECT(o) ((o)->mFlg & SOBJ_USER_OBJECT) | |
357 | +#define SET_USER_OBJECT(o) ((o)->mFlg |= SOBJ_USER_OBJECT) | |
358 | + | |
359 | +#define IS_MARKED(o) ((o)->mFlg & GC_MARK) | |
360 | +#define SET_MARK(o) ((o)->mFlg |= GC_MARK) | |
361 | + | |
362 | +#define TYPE(o) ((o)->mFlg & 0xFF) | |
363 | +#define CLEAR_MARK(o) ((o)->mFlg &= ~GC_MARK) | |
374 | 364 | |
375 | 365 | #define T_STRING 1 |
376 | 366 | #define T_VECTOR 2 |
@@ -379,19 +369,19 @@ typedef struct { | ||
379 | 369 | #define T_NFUN 5 |
380 | 370 | #define T_BLOCK 6 |
381 | 371 | #define T_FD 7 |
382 | -#define T_JOB 8 | |
383 | -#define T_UOBJECT 9 | |
384 | -#define T_MEMCHECKER 10 | |
372 | +#define T_FD2 8 | |
373 | +#define T_JOB 9 | |
374 | +#define T_UOBJECT 10 | |
385 | 375 | #define T_FUN 11 |
386 | 376 | #define T_CLASS 12 |
387 | 377 | #define T_EXTPROG 13 |
388 | 378 | #define T_COMPLETION 14 |
389 | 379 | #define T_EXTOBJ 15 |
380 | +#define T_TYPE_MAX 16 | |
390 | 381 | |
391 | 382 | typedef struct _sObject { |
392 | - int mFlg; // contains a kind of the above and a mark flag | |
383 | + int mFlg; // contains a kind of the above and a mark flag, user object flag | |
393 | 384 | struct _sObject* mNextFreeObject; |
394 | - BOOL mUserObject; | |
395 | 385 | |
396 | 386 | union { |
397 | 387 | string_obj uString; |
@@ -399,11 +389,11 @@ typedef struct _sObject { | ||
399 | 389 | hash_obj uHash; |
400 | 390 | list_obj uList; |
401 | 391 | fd_obj uFd; |
392 | + fd2_obj uFd2; | |
402 | 393 | job_obj uJob; |
403 | 394 | struct block_obj uBlock; |
404 | 395 | |
405 | 396 | uobject_obj uUObject; |
406 | - memchecker_obj uMemchecker; | |
407 | 397 | nfun_obj uNativeFun; |
408 | 398 | fun_obj uFunction; |
409 | 399 | class_obj uClass; |
@@ -413,8 +403,6 @@ typedef struct _sObject { | ||
413 | 403 | }; |
414 | 404 | } sObject; |
415 | 405 | |
416 | -#define TYPE(o) (o->mFlg & 0xFF) | |
417 | - | |
418 | 406 | #define SSTRING(o) (o)->uString |
419 | 407 | #define SVECTOR(o) (o)->uVector |
420 | 408 | #define SHASH(o) (o)->uHash |
@@ -422,9 +410,9 @@ typedef struct _sObject { | ||
422 | 410 | #define SBLOCK(o) (o)->uBlock |
423 | 411 | #define SNFUN(o) (o)->uNativeFun |
424 | 412 | #define SFD(o) (o)->uFd |
413 | +#define SFD2(o) (o)->uFd2 | |
425 | 414 | #define SJOB(o) (o)->uJob |
426 | 415 | #define SUOBJECT(o) (o)->uUObject |
427 | -#define SMEMCHECKER(o) (o)->uMemchecker | |
428 | 416 | #define SFUN(o) (o)->uFunction |
429 | 417 | #define SCLASS(o) (o)->uClass |
430 | 418 | #define SEXTPROG(o) (o)->uExternalProg |
@@ -442,6 +430,7 @@ void stack_end_stack(); | ||
442 | 430 | sObject* stack_get_free_object(int kind); |
443 | 431 | int stack_slot_size(); |
444 | 432 | int stack_page_size(); |
433 | +BOOL stack_valid_object(sObject* object); | |
445 | 434 | |
446 | 435 | #include <xyzsh/debug.h> |
447 | 436 | #include <xyzsh/hash.h> |
@@ -481,15 +470,6 @@ void external_prog_delete_gc(); | ||
481 | 470 | |
482 | 471 | #define EXTPROG_NEW_GC(o, o2) external_prog_new_from_gc(o, o2) |
483 | 472 | |
484 | -sObject* memchecker_new_from_stack(int size); | |
485 | -void memchecker_delete_stack(sObject* self); | |
486 | - | |
487 | -#define MEMCHECKER_NEW_STACK(o) memchecker_new_from_stack(o) | |
488 | - | |
489 | -void memchecker_put(sObject* self, void* key, int item); | |
490 | -BOOL memchecker_erase(sObject* self, void* key); | |
491 | -int memchecker_item(sObject* self, void* key); | |
492 | - | |
493 | 473 | sObject* completion_new_from_gc(sObject* block, BOOL user_object); |
494 | 474 | int completion_gc_children_mark(sObject* self); |
495 | 475 |
@@ -522,11 +502,15 @@ int class_gc_children_mark(sObject* self); | ||
522 | 502 | |
523 | 503 | sObject* fd_new_from_stack(); |
524 | 504 | void fd_delete_stack(sObject* self); |
525 | -#define FD_NEW_STACK(kind, fd) fd_new_from_stack(kind, fd) | |
505 | +#define FD_NEW_STACK() fd_new_from_stack() | |
526 | 506 | BOOL fd_write(sObject* self, char* str, int size); |
527 | 507 | |
528 | -void fd_split(sObject* self, enum eLineField lf); | |
529 | -BOOL fd_guess_lf(sObject* self, enum eLineField* lf); | |
508 | +void fd_split(sObject* self, eLineField lf); | |
509 | +BOOL fd_guess_lf(sObject* self, eLineField* lf); | |
510 | +void fd_put(sObject* self, MANAGED char* buf, int buf_size, int buf_len); | |
511 | + | |
512 | +sObject* fd2_new_from_stack(uint fd); | |
513 | +#define FD2_NEW_STACK(o) fd2_new_from_stack(o) | |
530 | 514 | |
531 | 515 | sObject* job_new_from_gc(char* name, pid_t pgroup, struct termios tty); |
532 | 516 | #define JOB_NEW_GC(o, o2, o3) job_new_from_gc(o, o2, o3) |
@@ -715,6 +699,7 @@ int gc_slot_size(); | ||
715 | 699 | int gc_pool_size(); |
716 | 700 | int gc_used_objects_num(); |
717 | 701 | int gc_sweep(); |
702 | +BOOL gc_valid_object(sObject* object); | |
718 | 703 | |
719 | 704 | BOOL parse(char* p, char* sname, int* sline, sObject* block, sObject** current_object); |
720 | 705 |
@@ -737,6 +722,7 @@ extern sObject* gStackFrames; | ||
737 | 722 | extern sObject* gMemChecker; |
738 | 723 | extern sObject* gGlobalPipe; |
739 | 724 | extern sObject* gInheritObject; |
725 | +extern sRunInfo* gRunInfoOfRunningObject; | |
740 | 726 | |
741 | 727 | BOOL bufsiz_write(int fd, char* buf, int buf_len); |
742 | 728 |
@@ -785,6 +771,8 @@ void readline_read_history(); | ||
785 | 771 | char* xstrncpy(char* src, char* des, int size); |
786 | 772 | char* xstrncat(char* src, char* des, int size); |
787 | 773 | |
774 | +BOOL contained_in_pipe(sObject* object); | |
775 | + | |
788 | 776 | ////////////////////////////////////////////////////////////////////// |
789 | 777 | // xyzsh API |
790 | 778 | ////////////////////////////////////////////////////////////////////// |