/* * PSYC Manager Daemon, src/int_functions.cc * Copyright (C) 2001 Mark Ralf Thomson * Concept: Mark Ralf Thomson */ #include "psycm.h" #include "net.h" #include "classes.h" #include "int_functions.h" #include "extern.h" #include "msg.h" #include "user.h" extern message comtab[]; extern params paratab[]; void mknline(char*,char**,int,char,char); int split (char *, char [ARGMAX][ARGLMAX], char ); int substr (char *, char *, int , char ,char ,int ,int ); /* makes one char array (out); uses array that consists of pointer (pa) to char arrays */ void mknline(char* out,char** paa,int maxc,char pattern,char end) { int i=0; int z=0; int a=0; char* ea; while (1) { z =0; ea=paa[i]; while (ea[z] && ea[z] != pattern) /* Check whether the text contains the pattern, (death for db's) --chronux */ { if(a == maxc-2) {break;} out[a]=ea[z]; z++; a++; } if(a == maxc-2) {break;} out[a+1]=pattern; i++; } out[a+1] = end; out[a+2] = '\0'; } /* * split erwartet 3 Parameter; * 1. Pointer auf Zeile die gesplited wird * 2. 2n-array in den geschrieben wird (ausgabe) * 3. trennzeichen * split gibt die anzahl der gefundenen argumente zurück * bei einem fehler wird -1 zurückgegeben * achtung: die behandlung des gehirntumors erfolgt nicht! */ int split (char *src, char dest[ARGMAX][ARGLMAX], char pattern) { unsigned int outerloop = 0; unsigned int innerloop = 0; int element = 0; size_t in_length = strlen (src); if (src[in_length - 1] == '\n') { in_length = in_length -2; if ((int)in_length <=0) return -1; } /* while (src[outerloop] == pattern && outerloop + 1 < in_length) outerloop++; */ for (outerloop=0; outerloop <= in_length; outerloop++){ if (src[outerloop] != pattern){ dest[element][innerloop] = src[outerloop]; innerloop++; } else{ dest[element][innerloop] = '\0'; /* while (src[outerloop + 1] == pattern && outerloop + 1 < in_length){ outerloop++; } */ if (outerloop + 1 < in_length){ element++; if (element == ARGMAX) {return element-1;} innerloop = 0; } } } dest[element][innerloop] = '\0'; return element; } int substr (char *src, char *dest, int ab,char pattern,char pattern2,int bis,int yn) { int loop = 0+ab; int element = 0; size_t in_length = strlen (src); in_length = in_length; if (src[in_length - 1] == '\n') { in_length = in_length -2; if ((int)in_length <=0) return -1; } while (src[loop] == pattern && loop + 1 < (int)in_length) loop++; // führende patterns entfernen while ((src[loop] != pattern && src[loop] != pattern2 && src[loop] != '\0') && loop <= (int)in_length) { if (element >= bis) break; if (yn) {dest[element] = src[loop];} else if(isalpha(src[loop])) {dest[element] = toupper(src[loop]); } element++; loop++; } dest[element] = '\0'; return element; }