void cli_js_output(struct parser_state *state, const char *tempdir) { unsigned i; struct buf buf; char lastchar = '\0'; char filename[1024]; snprintf(filename, 1024, "%s"PATHSEP"javascript", tempdir); buf.pos = 0; buf.outfd = open(filename, O_CREAT | O_WRONLY, 0600); if(buf.outfd < 0) { cli_errmsg(MODULE "cannot open output file for writing: %s\n", filename); return; } /* append to file */ if(lseek(buf.outfd, 0, SEEK_END) != 0) { /* separate multiple scripts with \n */ buf_outc('\n', &buf); } buf_outs("<script>", &buf); state->current = state->global; for(i = 0; i < state->tokens.cnt; i++) { if(state_update_scope(state, &state->tokens.data[i])) lastchar = output_token(&state->tokens.data[i], state->current, &buf, lastchar); } /* add /script if not already there */ if(buf.pos < 9 || memcmp(buf.buf + buf.pos - 9, "</script>", 9)) buf_outs("</script>", &buf); if(write(buf.outfd, buf.buf, buf.pos) < 0) { cli_dbgmsg(MODULE "I/O error\n"); } close(buf.outfd); cli_dbgmsg(MODULE "dumped/appended normalized script to: %s\n",filename); }
static int lex(struct pe_lexer *l) { struct pe_lexeme t; for (;;) { pe_lexer_lexeme(l, &t); switch (t.type) { case pe_lexeme_eoi: return 1; case pe_lexeme_undefined: output_token(&t); switch(t.error_type) { case pe_lexeme_id: fputs(" id", stdout); break; case pe_lexeme_kw: fputs(" kw", stdout); if (t.error == pe_lexeme_kw_unknown) fputs("?", stdout); break; case pe_lexeme_eos: fputs(" eos", stdout); break; case pe_lexeme_int: fputs(" str", stdout); if (t.error == pe_lexeme_int_overflow) { fputs(" >", stdout); } break; case pe_lexeme_str: fputs(" str", stdout); if (t.error == pe_lexeme_str_unterminated) { fputs(" +", stdout); } break; case pe_lexeme_undefined: fputs(" ?", stdout); break; case pe_lexeme_eoi: abort(); } break; default: break; } switch (t.error) { case pe_lexeme_bad_char: fprintf(stdout, " \"%c\" (ASCII %d)\n", t.v.bad_char, (int)t.v.bad_char); return 1; case pe_lexeme_application_error: return 0; default: break; } } }
void eat_it(tokenizer_t t, token_kind_t tok_kind){ struct token tok = cur_tok(t); if (tok_kind != TOK_ANY && tok.kind != tok_kind){ printf("expected "); output_token_kind(tok_kind); printf("unexpected "); output_token_kind(tok.kind); syntax_error(t, "eat_it error"); } output_token(t); next_tok(t); }
void wm_decode_macro (unsigned char *buff, uint32_t len, int hex_output) { int i, j; uint8_t s_length; uint16_t w_length, int_val; unsigned char *tmp_buff, *tmp_name, *line_start; i = 2; line_start = buff; while (i < len) { switch (buff[i]) { case 0x65: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; print_hex_buff (line_start, buff + i + 2 + s_length, hex_output); printf ("\n%s", tmp_buff); free (tmp_buff); i += 2 + s_length; line_start = buff + i; break; case 0x69: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf (" %s", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x6a: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf (" \"%s\"", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x6b: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf (" '%s", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x6d: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf (" %s", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x70: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf ("REM%s", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x76: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf (" .%s", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x77: s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc (s_length + 1); strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length); tmp_buff[s_length] = '\0'; printf ("%s", tmp_buff); free (tmp_buff); i += 2 + s_length; break; case 0x79: /* unicode "string" */ w_length = (uint16_t) (buff[i + 2] << 8) + buff[i + 1]; tmp_buff = (unsigned char *) malloc ((w_length * 2) + 1); memcpy (tmp_buff, buff + i + 3, w_length * 2); tmp_name = (unsigned char *) get_unicode_name ((char *) tmp_buff, w_length * 2); free (tmp_buff); printf ("\"%s\"", tmp_name); free (tmp_name); i += 3 + (w_length * 2); break; case 0x7c: /* unicode 'string */ s_length = (uint8_t) buff[i + 1]; tmp_buff = (unsigned char *) malloc ((s_length * 2) + 1); memcpy (tmp_buff, buff + i + 2, s_length * 2); tmp_name = (unsigned char *) get_unicode_name ((char *) tmp_buff, s_length * 2); free (tmp_buff); printf ("'%s", tmp_name); free (tmp_name); i += 2 + (s_length * 2); break; case 0x66: int_val = (uint8_t) (buff[i + 2] << 8) + buff[i + 1]; print_hex_buff (line_start, buff + i + 3, hex_output); printf ("\n%d", int_val); i += 3; line_start = buff + i; break; case 0x67: w_length = (uint16_t) (buff[i + 2] << 8) + buff[i + 1]; output_token67 (w_length); i += 3; break; case 0x68: /* 8-byte float */ printf ("(float)"); i += 9; break; case 0x6c: int_val = (uint16_t) (buff[i + 2] << 8) + buff[i + 1]; printf (" %d", int_val); i += 3; break; case 0x6e: s_length = (uint8_t) buff[i + 1]; for (j = 0; j < s_length; j++) { printf (" "); } i += 2; break; case 0x6f: s_length = (uint8_t) buff[i + 1]; for (j = 0; j < s_length; j++) { printf ("\t"); } i += 2; break; case 0x73: w_length = (uint16_t) (buff[i + 2] << 8) + buff[i + 1]; output_token73 (w_length); i += 3; break; case 0x64: print_hex_buff (line_start, buff + i + 1, hex_output); printf ("\n"); i++; line_start = buff + i; break; default: output_token (buff[i]); i++; break; } } print_hex_buff (line_start, buff + i, hex_output); }
void output_correct_token(HZ *hz, int count) { if (is_correct_token(hz, count)) output_token(hz, count); }