int main(int argc, char** argv){ char number[5]="123ff"; int inum=charconv(number[0]); printf("value:%d\n",inum); inum = inum*(charconv( number[1])); printf("value:%d\n",inum); inum = inum*(charconv(number[2])); printf("value:%d\n",inum); inum = inum*(charconv( number[3])); printf("value:%d\n",inum); inum = inum*(charconv( number[4])); printf("value:%d\n",inum); return 0; }
void Lexer::string() { char start = _stream->current(); // look for unescaped end same as start. char c; while (true) { c = _stream->read(); if (c == '\\') { // escaped. // read next char and continue. _word[_wi++] = charconv(_stream->read()); continue; } else if (c == 0) break; if (start == c) break; _word[_wi++] = c; } _word[_wi++] = '\0'; add(new (collect) Term(TString, dup_str(_word))); _wi = 0; }
LIBETPAN_EXPORT int mailmime_encoded_phrase_parse(const char * default_fromcode, const char * message, size_t length, size_t * indx, const char * tocode, char ** result) { MMAPString * gphrase; struct mailmime_encoded_word * word; int first; size_t cur_token; int r; int res; char * str; char * wordutf8; int type; cur_token = * indx; gphrase = mmap_string_new(""); if (gphrase == NULL) { res = MAILIMF_ERROR_MEMORY; goto err; } first = TRUE; type = TYPE_ERROR; /* XXX - removes a gcc warning */ while (1) { int has_fwd = 0; word = NULL; r = mailmime_encoded_word_parse(message, length, &cur_token, &word, &has_fwd); if (r == MAILIMF_NO_ERROR) { if ((!first) && has_fwd) { if (type != TYPE_ENCODED_WORD) { if (mmap_string_append_c(gphrase, ' ') == NULL) { mailmime_encoded_word_free(word); res = MAILIMF_ERROR_MEMORY; goto free; } } } type = TYPE_ENCODED_WORD; wordutf8 = NULL; r = charconv(tocode, word->wd_charset, word->wd_text, strlen(word->wd_text), &wordutf8); switch (r) { case MAIL_CHARCONV_ERROR_MEMORY: mailmime_encoded_word_free(word); res = MAILIMF_ERROR_MEMORY; goto free; case MAIL_CHARCONV_ERROR_UNKNOWN_CHARSET: r = charconv(tocode, "iso-8859-1", word->wd_text, strlen(word->wd_text), &wordutf8); break; case MAIL_CHARCONV_ERROR_CONV: mailmime_encoded_word_free(word); res = MAILIMF_ERROR_PARSE; goto free; } switch (r) { case MAIL_CHARCONV_ERROR_MEMORY: mailmime_encoded_word_free(word); res = MAILIMF_ERROR_MEMORY; goto free; case MAIL_CHARCONV_ERROR_CONV: mailmime_encoded_word_free(word); res = MAILIMF_ERROR_PARSE; goto free; } if (wordutf8 != NULL) { if (mmap_string_append(gphrase, wordutf8) == NULL) { mailmime_encoded_word_free(word); free(wordutf8); res = MAILIMF_ERROR_MEMORY; goto free; } free(wordutf8); } mailmime_encoded_word_free(word); first = FALSE; } else if (r == MAILIMF_ERROR_PARSE) { /* do nothing */ } else { res = r; goto free; } if (r == MAILIMF_ERROR_PARSE) { char * raw_word; raw_word = NULL; r = mailmime_non_encoded_word_parse(message, length, &cur_token, &raw_word, &has_fwd); if (r == MAILIMF_NO_ERROR) { if ((!first) && has_fwd) { if (mmap_string_append_c(gphrase, ' ') == NULL) { free(raw_word); res = MAILIMF_ERROR_MEMORY; goto free; } } type = TYPE_WORD; wordutf8 = NULL; r = charconv(tocode, default_fromcode, raw_word, strlen(raw_word), &wordutf8); switch (r) { case MAIL_CHARCONV_ERROR_MEMORY: free(raw_word); res = MAILIMF_ERROR_MEMORY; goto free; case MAIL_CHARCONV_ERROR_UNKNOWN_CHARSET: case MAIL_CHARCONV_ERROR_CONV: free(raw_word); res = MAILIMF_ERROR_PARSE; goto free; } if (mmap_string_append(gphrase, wordutf8) == NULL) { free(wordutf8); free(raw_word); res = MAILIMF_ERROR_MEMORY; goto free; } free(wordutf8); free(raw_word); first = FALSE; } else if (r == MAILIMF_ERROR_PARSE) { r = mailimf_fws_parse(message, length, &cur_token); if (r != MAILIMF_NO_ERROR) { break; } if (mmap_string_append_c(gphrase, ' ') == NULL) { res = MAILIMF_ERROR_MEMORY; goto free; } first = FALSE; break; } else { res = r; goto free; } } } if (first) { if (cur_token != length) { res = MAILIMF_ERROR_PARSE; goto free; } } str = strdup(gphrase->str); if (str == NULL) { res = MAILIMF_ERROR_MEMORY; goto free; } mmap_string_free(gphrase); * result = str; * indx = cur_token; return MAILIMF_NO_ERROR; free: mmap_string_free(gphrase); err: return res; }
int main(int argc, char *argv[]) { FILE *fp; char header[512]; time_t now; char *binfile, *lrfile, *rlfile, *outfile; int i; char *from_code, *to_code, *buf; boolean charconv_enabled = FALSE; boolean force_swap = FALSE; WORD_ID w; binfile = lrfile = rlfile = outfile = NULL; from_code = to_code = NULL; if (argc <= 1) { usage(argv[0]); return -1; } for(i=1;i<argc;i++) { if (argv[i][0] == '-') { if (argv[i][1] == 'd') { if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } binfile = argv[i]; } else if (argv[i][1] == 'n') { switch(argv[i][2]) { case 'l': if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } lrfile = argv[i]; break; case 'r': if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } rlfile = argv[i]; break; default: printf("Error: no such option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } } else if (argv[i][1] == 'c') { if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } from_code = strcpy((char*)mymalloc(strlen(argv[i])+1), argv[i]); if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); free(from_code); return -1; } to_code = strcpy((char*)mymalloc(strlen(argv[i])+1),argv[i]); charconv_enabled = TRUE; } else if (argv[i][1] == 's') { force_swap = TRUE; } } else { if (outfile == NULL) { outfile = argv[i]; } else { printf("Error: more than one output file\n"); usage(argv[0]); return -1; } } } if (!outfile) { printf("Error: no output file specified\n"); usage(argv[0]); return -1; } if (binfile) { if (lrfile || rlfile) { printf("Error: both binary file and ARPA file are specified\n"); usage(argv[0]); return -1; } printf("bingram: %s\n", binfile); } else { if (rlfile) { printf("backward n-gram: %s\n", rlfile); if (lrfile) { printf("additional forward 2-gram for 1st pass: %s\n", lrfile); } } else if (lrfile) { printf("forward n-gram: %s\n", lrfile); } else { printf("Error: no input N-gram file specified\n"); usage(argv[0]); return -1; } } printf("\nSTART LOADING\n\n"); /* make header string */ now = time(NULL); if (binfile) { sprintf(header, "converted at %s\nfrom bingram = %s\n", ctime(&now), binfile); } else { if (rlfile && lrfile) { sprintf(header, "converted at %s\nfrom n-gram = %s, LR 2-gram = %s\n", ctime(&now), rlfile, lrfile); } else if (rlfile) { sprintf(header, "converted at %s\nfrom n-gram = %s\n", ctime(&now), rlfile); } else { sprintf(header, "converted at %s\nfrom n-gram = %s\n", ctime(&now), lrfile); } } ngram = ngram_info_new(); if (binfile) { /* read in bingram */ if (init_ngram_bin(ngram, binfile) == FALSE) return -1; } else { /* read in ARPA n-gram */ if (force_swap) { ngram->bos_eos_swap = TRUE; } if (rlfile) { if (init_ngram_arpa(ngram, rlfile, DIR_RL) == FALSE) return -1; if (lrfile) { if (init_ngram_arpa_additional(ngram, lrfile) == FALSE) return -1; } } else if (lrfile) { if (init_ngram_arpa(ngram, lrfile, DIR_LR) == FALSE) return -1; } } print_ngram_info(stdout, ngram); if (charconv_enabled == TRUE) { /* do character conversion */ if (charconv_setup(from_code, to_code) == -1) { fprintf(stderr, "failed to setup character convertsion\n"); return -1; } buf = (char *)mymalloc(4096); for (w = 0; w < ngram->max_word_num; w++) { charconv(ngram->wname[w], buf, 4096); ngram->wname[w] = mybmalloc2(strlen(buf)+1, &(ngram->mroot)); strcpy(ngram->wname[w], buf); } free(buf); } /* write in JULIUS binary format */ if ((fp = fopen_writefile(outfile)) == NULL) { fprintf(stderr, "failed to open \"%s\"\n", outfile); return -1; } printf("\nWriting in v5 format to \"%s\"...\n", outfile); if (ngram_write_bin(fp, ngram, header) == FALSE){/* failed */ fprintf(stderr, "failed to write \"%s\"\n",outfile); return -1; } fclose_writefile(fp); printf("completed\n"); return 0; }
LIBETPAN_EXPORT int mailmime_encoded_phrase_parse2(const char * default_fromcode, const char * message, const char * tocode, char ** result) { long res; char * charset = NULL; char * encoding = NULL; char * text = NULL; size_t current = 0; size_t firstQuotes,secondQuotes; if (message == NULL) { return 0; } while(message[current] != '\0'){ if(message[current] == '\'') { break; } current++; } if (message[current] == '\0' || message[current+1] == '\0') { goto free; } firstQuotes = current; current++; while(message[current] != '\0'){ if(message[current] == '\'') { break; } current++; } if (message[current] == '\0' || message[current+1] == '\0') { goto free; } secondQuotes = current; current++; charset = (char*)malloc(firstQuotes + 1); strncpy(charset, message, firstQuotes); charset[firstQuotes] = '\0'; encoding = (char*)malloc(secondQuotes - firstQuotes); strncpy(encoding, message+firstQuotes+1, secondQuotes - firstQuotes -1); encoding[secondQuotes-firstQuotes] = '\0'; size_t length = strlen(message); text = (char*)malloc(length - secondQuotes); memset(text, 0, length - secondQuotes); res = urldecode(text, message+current, 0); if (res > 0 && strcasecmp(tocode,charset) != 0) { char * wordutf8 = NULL; if (strcasecmp(charset, "unknown") == 0) { charconv(tocode, default_fromcode, text, strlen(text), &wordutf8); }else{ charconv(tocode, charset, text, strlen(text), &wordutf8); } if (wordutf8 != NULL) { * result = wordutf8; } else { * result = text; text = NULL; } } else { * result = text; text = NULL; } free: if (charset != NULL) { free(charset); } if (encoding != NULL) { free(encoding); } if (text != NULL) { free(text); } return 0; }