// get a world from cmd split with space,return the point to the word first valid char, null if no more any words static char* get_word(char* cmd, char** next) { char *p = cmd; char *q; char quote = 0; while(*p && isspace(C2I(*p))) p++; // end of line if(*p == 0) { if(next) *next = p; return NULL; } if(*p == '\'' || *p == '\"') { quote = *p; p++; } q = p; if(quote == 0) { while(*q && !isspace(C2I(*q))) q++; } else { while(*q && *q != quote) q++; if(*q == 0 || !( isspace(C2I(*(q+1))) || *(q+1) == 0) ) { if(next) *next = p; return NULL; } } if(*q) { *q = 0; if(next) *next = q + 1; } else { if(next) *next = q; } return p; }
void test_possible_places(void) { board_t *board; uint64_t possible_places; char *bstr[] = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" }; board = create_board(bstr, NORTH, 0, 0, 0); possible_places = comp_possible_places(board); assert(board->last_move_dir == NORTH); assert((possible_places & (1 << C2I(0,3))) > 0); assert((possible_places & (1 << C2I(1,3))) > 0); assert((possible_places & (1 << C2I(2,3))) > 0); assert((possible_places & (1 << C2I(3,3))) > 0); free(board); }
RESULT to_int(const char* text, int* pv) { char* p; long l = strtol(text, &p, 0); while(*p && isspace(C2I(*p))) p++; if(*p != '\0') return R_E_FAIL; if(pv) *pv = l; return R_SUCC; }
void test_comp_make_move(void) { board_t *board; char *bstr[] = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" }; board = create_board(bstr, NORTH, 4, 4, 4); comp_make_move(board, C2I(0, 3), P1); assert(PIECE(board->b, 0, 3) == P1); assert(board->n_ones == 3); free(board); board = create_board(bstr, NORTH, 0, 0, 1); comp_make_move(board, C2I(0, 3), P3); assert(PIECE(board->b, 0, 3) == P3); assert(board->n_ones == 4); free(board); }
RESULT to_float(const char* text, float* pv) { char* p; float f = (float)strtod(text, &p); while(*p && isspace(C2I(*p))) p++; if(*p != '\0') return R_E_FAIL; if(pv) *pv = f; return R_SUCC; }
RESULT to_uint(const char* text, unsigned int* pv) { char* p; unsigned long ul = strtoul(text, &p, 0); while(*p && isspace(C2I(*p))) p++; if(*p != '\0') return R_E_FAIL; if(pv) *pv = ul; return R_SUCC; }
/* Have we read an entire request? */ static int kdc_ready (struct listenspec *ls) { size_t waitfor = ls->bufpos >= 4 ? C2I (ls->buf) : 4; syslog (LOG_DEBUG, "Got %d bytes of %d bytes from %s on socket %d\n", ls->bufpos, waitfor + 4, ls->str, ls->sockfd); if (ls->type == SOCK_DGRAM && ls->bufpos > 0) return 1; else if (ls->bufpos > 4 && waitfor + 4 == ls->bufpos) return 1; return 0; }
char* strtrim(char* buffer) { int b; int n = strlen(buffer) - 1; while(n >= 0 && isspace(C2I(buffer[n]))) { buffer[n] = '\0'; n--; } if(n < 0) return buffer; b = 0; while(buffer[b] != '\0' && isspace(C2I(buffer[b]))) { b++; } memmove(buffer, buffer+b, n-b+1); buffer[n-b+1] = '\0'; return buffer; }
int main(int argc, char * * argv) { FILE * fichier; char * ligne; unsigned int i; unsigned int j; unsigned int k; unsigned int l; unsigned long long index; unsigned char position[256]; unsigned int charset; unsigned int nb_lignes; if(argc!=3) { printf("Usage: %s statfile pwdfile\n", argv[0]); return -1; } fichier = fopen(argv[1], "r"); if(!fichier) { printf("could not open %s\n", argv[1]); return -1; } first = malloc( sizeof(unsigned char) * 256 ); if(first == NULL) { perror("malloc first"); return 3; } ligne = malloc(4096); if(ligne == NULL) { perror("malloc ligne"); return 3; } proba2 = malloc(sizeof(unsigned char) * 256 * 256); if(proba2 == NULL) { perror("malloc proba2"); return 3; } proba1 = malloc(sizeof(unsigned char) * 256 ); if(proba1 == NULL) { perror("malloc proba1"); return 3; } for(i=0;i<256*256;i++) proba2[i] = UNK_STR; for(i=0;i<256;i++) proba1[i] = UNK_STR; for(i=0;i<256;i++) { first[i] = 255; position[i] = 255; } nb_lignes = 0; charset = 0; fprintf(stderr, "reading stats ... [%p]\n", fichier); while(fgets(ligne, 4096, fichier)) { if (ligne[0] == 0) { fprintf(stderr, "empty line?\n"); continue; } ligne[strlen(ligne)-1] = 0; // chop if( sscanf(ligne, "%d=proba1[%d]", &i, &j) == 2 ) { if( j>255 ) { fprintf(stderr, "invalid line %s\n", ligne); continue; } proba1[j] = i; if(position[j] == 255) { position[j] = charset; charset++; } } else if( sscanf(ligne, "%d=proba2[%d*256+%d]", &i, &j, &k) == 3 ) { if( (j>255) || (k>255) ) { fprintf(stderr, "invalid line %s\n", ligne); continue; } if( (first[j]>k) && (i<UNK_STR)) first[j] = k; proba2[j*256+k] = i; if(position[k] == 255) { position[k] = charset; charset++; } } else fprintf(stderr, "invalid line %s\n", ligne); nb_lignes++; } fprintf(stderr, "%d lines parsed [%p]\n", nb_lignes, fichier); fclose(fichier); fichier = fopen(argv[2], "r"); if(!fichier) { printf("could not open %s\n", argv[2]); return -1; } fprintf(stderr, "scanning password file ...\n"); while(fgets(ligne, 4096, fichier)) { if (ligne[0] == 0) continue; ligne[strlen(ligne)-1] = 0; // chop i=1; j=0; k=0; j = C2I(ligne[0]); k = proba1[j]; if(ligne[0]==0) k = 0; printf("%s\t%d", ligne, k); l = 0; index = position[j]; if(position[j]==255) index = 8.1E18; while(ligne[i]) { if(index<8E18) index = (index*charset)+position[C2I(ligne[i])]; if(position[C2I(ligne[i])]==255) index = 8.1E18; printf("+%d", proba2[j*256+C2I(ligne[i])]); k+=proba2[j*256+C2I(ligne[i])]; if(l) l+=proba2[j*256+C2I(ligne[i])]; if(i==2) l=proba1[C2I(ligne[i])]; j = C2I(ligne[i]); i++; } if(index<8E18) printf("\t%d\t%d\t%"LLd"\t%d\n",k,i,index,l); else printf("\t%d\t%d\t-\t%d\n",k,i,l); } fprintf(stderr, "freeing stuff ...\n"); fclose(fichier); MEM_FREE(proba1); MEM_FREE(proba2); MEM_FREE(first); MEM_FREE(ligne); fprintf(stderr, "charsetsize = %d\n", charset); return 0; }
int main(int argc, char * * argv) { FILE * fichier; char * ligne; int i; int j; int np; int npflag; int args; unsigned int nb_lignes; unsigned int nb_lettres; FILE * statfile; if( (argc!=3) && (argc!=4) ) { fprintf(stderr, "Usage: %s [-p] dictionary_file statfile\n\t-p: include non printable and 8-bit characters\n", argv[0]); return -1; } if(argc==4) { if(strcmp(argv[1], "-p")) { fprintf(stderr, "Usage: %s [-p] dictionary_file statfile\n\t-p: include non printable and 8-bit characters\n", argv[0]); return -1; } args = 1; npflag = 1; } else { args = 0; npflag = 0; } fichier = fopen(argv[1+args], "r"); if(!fichier) { fprintf(stderr, "could not open %s\n", argv[1+args]); return -1; } first = malloc( sizeof(unsigned int) * 256 ); ligne = malloc(4096); proba2 = malloc(sizeof(unsigned int) * 256 * 256); proba1 = malloc(sizeof(unsigned int) * 256 ); memset(proba2, 0, sizeof(unsigned int) * 256 * 256); memset(proba1, 0, sizeof(unsigned int) * 256 ); statfile = fopen(argv[2+args], "w"); nb_lignes = 0; while(fgets(ligne, 4096, fichier)) { if (ligne[0] == 0) continue; i = strlen(ligne)-1; while( (i>0) && ((ligne[i]=='\n') || (ligne[i]=='\r')) ) { ligne[i]=0; i--; } for(i=0;ligne[i];i++) { np = 0; if (!npflag) { if(C2I(ligne[i])<32) { fprintf(stderr, "Warning, skipping non printable character 0x%02x line %d offset %d: %s\n", (unsigned char)ligne[i], nb_lignes, i, ligne); np += 1; } if(C2I(ligne[i])>127) { fprintf(stderr, "Warning, skipping non-ASCII character 0x%02x line %d offset %d: %s\n", (unsigned char)ligne[i], nb_lignes, i, ligne); np += 1; } if((i>0) && (C2I(ligne[i-1])<32)) { np += 2; } if((i>0) && (C2I(ligne[i-1])>127)) { np += 2; } } if( (i==0) && ((np == 0) || (npflag == 1)) ) proba1[C2I(ligne[0])]++; if( (i>0) && ((np == 0) || (npflag == 1)) ) proba2[C2I(ligne[i-1])*256 + C2I(ligne[i])]++; } nb_lignes++; } for(i=0;i<256;i++) { if ( (proba1[i] == 0 ) || (i==0) ) { proba1[i] = 1000; } else { if( (unsigned int) (- 10*log( (double) proba1[i] / (double) nb_lignes )) == 0) { fprintf(stderr, "zero -10*log proba1[%d] (%d) / %d converted to 1\n", i, proba1[i], nb_lignes); proba1[i] = 1; } else proba1[i] = (unsigned int) (- 10*log( (double) proba1[i] / (double) nb_lignes )); fprintf(statfile, "%d=proba1[%d]\n", proba1[i], i); } /* premiere passe : nb lettres */ nb_lettres = 0; for(j=0;j<256;j++) { nb_lettres += proba2[i*256 + j]; } first[i] = 255; /* maintenant, calcul des stats */ for(j=0;j<256;j++) { if( proba2[i*256 + j] == 0 ) { proba2[i*256 + j] = 1000; } else { if(first[i] == 255) first[i] = j; if((unsigned int) (- 10*log( (double) proba2[i*256+j] / (double) nb_lettres )) == 0) { fprintf(stderr, "zero -10*log proba2[%d*256+%d] (%d) / %d, converted to 1 to prevent infinite length candidates\n", i, j, proba2[i*256+j],nb_lettres ); proba2[i*256 + j] = 1; } else { proba2[i*256 + j] = (unsigned int) (- 10*log( (double) proba2[i*256+j] / (double) nb_lettres )); } fprintf(statfile, "%d=proba2[%d*256+%d]\n", proba2[i*256+j], i, j); } } } fclose(statfile); MEM_FREE(proba1); MEM_FREE(proba2); MEM_FREE(first); MEM_FREE(ligne); fclose(fichier); MEMDBG_PROGRAM_EXIT_CHECKS(stderr); return 0; }