4 static input_stream stream_buf[MAX_STREAM_BUF];
\r
5 int stream_buf_top = 0;
\r
7 // input_stream
\82ð
\8f\89\8aú
\89»
\81B
\r
8 // stream->parent
\82ð
\90Ý
\92è
\82µ
\82½
\82¢
\8fê
\8d\87\82Í
\81A
\82±
\82Ì
\8aÖ
\90\94\82ð
\8eÀ
\8ds
\82µ
\82½
\8cã
\82É
\92¼
\90Ú
\90Ý
\92è
\82·
\82é
\81B
\r
9 void init_stream(input_stream *stream, char *file) {
\r
12 unsigned char c[3], m[MAX_PATH + 30];
\r
14 strcpy(stream->filename, file);
\r
15 stream->fp = fp = fopen(file, "r");
\r
18 stream->parent = NULL;
\r
19 stream->is_linehead = TRUE;
\r
20 stream->is_linehead_pre = FALSE;
\r
21 stream->char_stack_top = 0;
\r
23 //
\83G
\83\89\81[
\83`
\83F
\83b
\83N
\r
25 sprintf(m, "
\83t
\83@
\83C
\83\8b %s
\82ð
\8aJ
\82¯
\82Ü
\82¹
\82ñ", file);
\r
29 // UTF-8 BOM
\8dí
\8f\9c\8f\88\97\9d (EF, BB, BF)
\r
33 if (c[0] != 0xEF || c[1] != 0xBB || c[2] != 0xBF) {
\r
41 BOOL is_space(char c) {
\r
43 return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
\r
47 // next_char()
\93\99\82Åinput_stream
\82ð
\90¶
\90¬
\82·
\82é
\8e\9e\82É
\8eg
\82¤
\81B
\r
48 input_stream *alloc_input_stream() {
\r
50 if (stream_buf_top < MAX_STREAM_BUF) {
\r
52 return &(stream_buf[stream_buf_top++]);
\r
57 asmi_fatal("
\90V
\82µ
\82¢Input Stream
\82ð
\8am
\95Û
\82Å
\82«
\82Ü
\82¹
\82ñ");
\r
64 //
\8c»
\8dÝ
\82Ì
\83X
\83g
\83\8a\81[
\83\80\82Ì
\93à
\97e
\82ð
\88ê
\92i
\8aK
\83v
\83b
\83V
\83\85\82µ
\82Ä
\81A
\90e
\82Ì
\83X
\83g
\83\8a\81[
\83\80\82Æ
\82µ
\82Ä
\93o
\98^
\82·
\82é
\81B
\r
65 //
\82»
\82Ì
\8cã
\81A
\90V
\82µ
\82¢
\83X
\83g
\83\8a\81[
\83\80\82ð
\8f\89\8aú
\89»
\82·
\82é
\81B
\r
66 void push_stream(input_stream *stream, char *file) {
\r
68 input_stream *new_stream = alloc_input_stream();
\r
69 *new_stream = *stream;
\r
70 init_stream(stream, file);
\r
71 stream->parent = new_stream;
\r
75 //
\8c»
\8dÝ
\82Ì
\83X
\83g
\83\8a\81[
\83\80\82ð
\95Â
\82¶
\81A
\93à
\97e
\82ð
\94j
\8aü
\82µ
\82Ä
\90e
\82Ì
\83X
\83g
\83\8a\81[
\83\80\82É
\96ß
\82é
\r
76 void pop_stream(input_stream *stream) {
\r
79 *stream = *(stream->parent);
\r