unsigned int irc_strip_ctrlcodes(char **bufp, const char *text) { char *buf; unsigned int text_len; *bufp = NULL; if(blankstr(text)) return 0; text_len = strlen(text)+1; buf = (char*)callocm(text_len, sizeof(char*)); if(buf == NULL) return 0; xstrcpy(buf, text, text_len); if(blankstr(strrtok(buf, ctrlcodes))) { freem(buf); return 0; } *bufp = buf; return strlen(buf); }
unsigned int istrcmp(char *string1, char *string2) { unsigned int i, len1, len2; if((blankstr(string1)) || (blankstr(string2))) return 0; len1 = strlen(string1); len2 = strlen(string2); if((len1 < 1) || (len2 < 1)) return 0; if(len1 != len2) return 0; for(i = 0;;i++) { if(!string1[i]) { if(!string2[i]) break; else return 0; } if(!string2[i]) return 0; if(tolower(string1[i]) != tolower(string2[i])) return 0; } return 1; }
char* conf_replace_alias(char *str) { unsigned int i, x, len; char next, replace; if(blankstr(str)) return str; len = strlen(str); for(i = 0;i < len;i++) { if(str[i] == '$') { switch(str[i+1]) { case 'c': replace = ':'; break; case 's': replace = ';'; break; default: continue; } str[i] = replace; for(x = i+1;x < len;x++) { next = str[x+1]; str[x] = next; } str[len] = 0; len--; } } return str; }
char* xstrtok(char *str, const char *tok, int *pos) { int i, x; unsigned int match = 0, move = 0; char start; if(blankstr(tok)) return str; if(pos != NULL) { i = *pos; start = 0; } else { i = 0; start = 1; } for(x = 0;str[i];i++, x++) { if(str[i] == tok[match]) { if(!tok[++match]) { while(match--) { move++; str[i - match] = 0; } i++; x++; if(pos != NULL) *pos = i; if(start) { if(*str) return str; else return str+move; } else { if(str[i-x]) return str + (i-x); else return str + (move+i-x); } } } } if(!start) *pos = i; if(start) { return str; } else { if(x) { return str + (i - x); } else return NULL; } }
void SheetView::redrawCell(CellAddress addr,bool dorefresh){ if(addr.row<scroll.row||addr.column<scroll.column|| addr.row>=scroll.row+LINES-1||addr.column>=scroll.column+COLS/8-1){ return; } sheet.ensureSheetSize(addr.column+1,addr.row+1); int leftx; string dispvalue,value; dispvalue=sheet.getCellDisplayString(addr).fromJust(); if(addr==cursor){ value=sheet.getCellEditString(addr).fromJust(); if(dispvalue.size()>8&&dispvalue!=value){ displayStatusString(dispvalue); //inform of full display value } attron(A_REVERSE); leftx=min(columnToX(addr.column),COLS/8*8-(int)value.size()); } else { value=sheet.getCellDisplayString(addr).fromJust(); if(value.size()>8)value.erase(value.begin()+8,value.end()); leftx=columnToX(addr.column); } string blankstr(max(8,(int)value.size()),' '); mvaddstr(rowToY(addr.row),leftx,blankstr.data()); mvaddstr(rowToY(addr.row),leftx,value.data()); if(addr==cursor){ attroff(A_REVERSE); cursordispval=value; } if(dorefresh){ refresh(); move(rowToY(cursor.row),columnToX(cursor.column)); } }
unsigned int user_fillmask(struct userNode *user, char *hostmask) { unsigned int i, x, len, len2, len3; if((user == NULL) || (blankstr(hostmask))) return 0; len = strlen(hostmask); len2 = strlen(user->nick); if(len2 >= len) return 0; for(i = len2+1, x = 0;x < (len2+MAX_USERLEN);i++, x++) { if(hostmask[i] == '@') break; user->user[x] = hostmask[i]; } user->user[x] = 0; len3 = len2+strlen(user->user)+2; for(x = 0, i++;x < (len3+MAX_MASKLEN);i++, x++) { if(!hostmask[i]) break; user->host[x] = hostmask[i]; } user->host[x] = 0; xstrcpy(user->hostmask, hostmask, MAX_HOSTMASKLEN); return 1; }
struct userNode* user_get_handle(char *nick) { struct userNode *user; if(blankstr(nick)) return NULL; for(user = user_first;user != NULL;user = user->next) { if(istrcmp(user->nick, nick)) return user; } return NULL; }
char* irc_get_msg(char *buf, char *raw) { char *str; if(buf == NULL) return buf; str = strstr(raw+1, " :"); if(blankstr(str)) *buf = 0; else strcpy(buf, str+2); return buf; }
char* irc_get_servname(char *buf, char *raw) { char *servname; if(buf == NULL) return buf; if(blankstr(raw)) return NULL; servname = (char*)callocm(256, sizeof(char)); xstrcpy(servname, raw+1, 256); strcpy(buf, xstrtok(servname, " ", NULL)); freem(servname); return buf; }
char* replace_alias(char *str) { unsigned int i, x, len; char next, replace; if(blankstr(str)) return str; len = strlen(str); for(i = 0;i < len;i++) { if(str[i] == '$') { switch(str[i+1]) { case '$': replace = '$'; break; case 'b': replace = C_BOLD; break; case 'u': replace = C_ULINE; break; case 'c': replace = C_COLOR; break; case 'r': replace = C_REVERSE; break; default: continue; } str[i] = replace; for(x = i+1;x < len;x++) { next = str[x+1]; str[x] = next; } str[len] = 0; len--; } } return str; }
char* irc_get_netname(char *buf, char *raw) { char *netname, *str; if(buf == NULL) return buf; if(strstr(raw, "NETWORK=") == NULL) return NULL; netname = (char*)callocm(33, sizeof(char)); str = strstr(raw, "NETWORK="); if(blankstr(str)) { *buf = 0; return buf; } xstrcpy(netname, str+8, 32); strcpy(buf, xstrtok(netname, " ", NULL)); freem(netname); return buf; }
struct userNode* user_adduser(char *nick) { struct userNode *user; if(blankstr(nick)) return NULL; if(user_get_handle(nick)) return NULL; user = (struct userNode*)mallocm(sizeof(struct userNode)); if(user == NULL) return NULL; init_user_struct(user); xstrcpy(user->nick, nick, MAX_MSGLEN); if(istrcmp(user->nick, bot.current_nick)) me = user; LL_ADDNODE(user, user_first, user_last) user_count++; return user; }
unsigned int make_argument_array(char ***bufp, const char *str) { unsigned int x = 0, y = 0, z = 0, count = 0, length; char *temp, *backptr; char **argv; if(blankstr(str)) return 0; length = strlen(str); while(str[x++] == ' ') z++; if(z >= length) return 0; for(;x < length;x++) { if((str[x] == ' ') && (str[x+1] != ' ') && (str[x+1] != 0)) count++; } count++; argv = (char**)mallocm(count*sizeof(char*)); if(argv == NULL) { make_warning("Couldn't allocate space needed for make_argument_array()"); return 0; } temp = (char*)callocm(length+1, sizeof(char)); if(temp == NULL) { freem(argv); return 0; } backptr = temp; xstrcpy(temp, str, length+1); temp += z; for(x = z, count = 0;str[x];count++) { if(x > z) x++; temp += y; for(y = 0;str[x];x++, y++) { if(str[x] == ' ') { if((str[x+1] == ' ') || (str[x+1] == 0)) temp[y] = 0; else break; } } temp[y] = 0; argv[count] = (char*)callocm(strlen(temp)+1, sizeof(char)); if(argv[count] == NULL) { make_warning("Couldn't allocate space needed for make_argument_array()"); freem(argv); freem(temp); return 0; } xstrcpy(argv[count], temp, y+1); y++; } *bufp = argv; freem(backptr); return count; }