-/* tools.c - NeonServ v5.0
+/* tools.c - NeonServ v5.2
* Copyright (C) 2011 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
}
char **table_end(struct Table *table) {
- int row, col, tablewidth = 0, pos,i;
+ int row, col, tablewidth = 0, pos,i,j,k;
if(!table->entrys) return NULL;
for(col = 0; col < table->width; col++) {
tablewidth += table->maxwidth[col]+1;
if(table->col_flags[col] & TABLE_FLAG_COL_BOLD)
table->table_lines[row][pos++] = '\002';
i = 0;
+ j = 0;
if(table->contents[row][col]) {
for(; i < strlen(table->contents[row][col]); i++) {
table->table_lines[row][pos++] = table->contents[row][col][i];
+ if(table->contents[row][col][i] == '\002') j++;
+ else if(table->contents[row][col][i] == '\003') {
+ j++;
+ for(k = 1; k < 2; k++) {
+ if(isdigit(table->contents[row][col][i+k]))
+ j++;
+ else
+ break;
+ }
+ }
}
}
+ i -= j;
if(col < table->width-1) {
for(;i < table->maxwidth[col]; i++) {
table->table_lines[row][pos++] = ' ';
return (strlen(p2+1) > 4);
}
+static unsigned long crc_table[256];
+
+static void crc32_init() {
+ unsigned long crc;
+ int i, j;
+ for(i = 0; i < 256; i++) {
+ crc = i;
+ for(j = 8; j > 0; j--) {
+ if(crc & 1)
+ crc = (crc >> 1) ^ 0xEDB88320L;
+ else
+ crc >>= 1;
+ }
+ crc_table[i] = crc;
+ }
+}
+
+unsigned long crc32(const char *text) {
+ register unsigned long crc = 0xFFFFFFFF;
+ unsigned int c, i = 0;
+ while((c = (unsigned int)text[i++]) != 0)
+ crc = ((crc >> 8) & 0x00FFFFFF) ^ crc_table[(crc^c) & 0xFF];
+ return (crc^0xFFFFFFFF);
+}
+
void init_tools() {
register_default_language_table(msgtab);
+ crc32_init();
}