const char * mfn_xor(MFUNARGS) { if (truestr(argv[0]) && !truestr(argv[1])) { return "1"; } if (!truestr(argv[0]) && truestr(argv[1])) { return "1"; } return "0"; }
const char * mfn_filter(MFUNARGS) { int iter_limit = MAX_MFUN_LIST_LEN; char buf2[BUFFER_LEN]; char tmp[BUFFER_LEN]; char *ptr, *ptr2, *dptr; char *sepin = argv[3]; char *sepbuf = argv[4]; int seplen, v; ptr = MesgParse(argv[0],argv[0]); CHECKRETURN(ptr,"FILTER","arg 1"); v = new_mvar(ptr, tmp); if (v == 1) ABORT_MPI("FILTER","Variable name too long."); if (v == 2) ABORT_MPI("FILTER","Too many variables already defined."); dptr = MesgParse(argv[1],argv[1]); CHECKRETURN(dptr,"FILTER","arg 2"); if (argc > 3) { ptr = MesgParse(sepin,sepin); CHECKRETURN(ptr,"FILTER","arg 4"); if (!*ptr) ABORT_MPI("FILTER","Can't use Null seperator string"); } else { strcpy(sepin, "\r"); } if (argc > 4) { ptr = MesgParse(sepbuf,sepbuf); CHECKRETURN(ptr,"FILTER","arg 5"); } else { strcpy(sepbuf, sepin); } seplen = strlen(sepin); *buf = '\0'; ptr = dptr; while (*ptr) { for (ptr2 = ptr; *ptr2 && strncmp(ptr2, sepin, seplen); ptr2++); if (*ptr2) { *ptr2 = '\0'; ptr2 += seplen; } strcpy(tmp, ptr); dptr = MesgParse(argv[2],buf2); CHECKRETURN(dptr,"FILTER","arg 3"); if (truestr(buf2)) { if (*buf) strcat(buf, sepbuf); strcat(buf, ptr); } ptr = ptr2; if (!(--iter_limit)) ABORT_MPI("FILTER","Iteration limit exceeded"); } free_top_mvar(); return buf; }
const char * mfn_not(MFUNARGS) { if (truestr(argv[0])) { return "0"; } else { return "1"; } }
const char * mfn_debugif(MFUNARGS) { char *ptr = MesgParse(argv[0], argv[0]); CHECKRETURN(ptr,"DEBUGIF","arg 1"); if (truestr(argv[0])) { ptr = mesg_parse(player, what, perms, argv[1], buf, BUFFER_LEN, (mesgtyp | MPI_ISDEBUG)); } else { ptr = MesgParse(argv[1], buf); } CHECKRETURN(ptr,"DEBUGIF","arg 2"); return buf; }
const char * mfn_default(MFUNARGS) { char *ptr; *buf = '\0'; ptr = MesgParse(argv[0], buf, buflen); CHECKRETURN(ptr, "DEFAULT", "arg 1"); if (ptr && truestr(buf)) { if (!ptr) ptr = ""; } else { ptr = MesgParse(argv[1], buf, buflen); CHECKRETURN(ptr, "DEFAULT", "arg 2"); } return ptr; }
const char * mfn_and(MFUNARGS) { char *ptr; char buf2[16]; int i; for (i = 0; i < argc; i++) { ptr = MesgParse(argv[i], buf, buflen); snprintf(buf2, sizeof(buf2), "arg %d", i + 1); CHECKRETURN(ptr, "AND", buf2); if (!truestr(ptr)) { return "0"; } } return "1"; }
const char * mfn_while(MFUNARGS) { int iter_limit = MAX_MFUN_LIST_LEN; char buf2[BUFFER_LEN]; char *ptr; *buf = '\0'; while (1) { ptr = MesgParse(argv[0], buf2, sizeof(buf2)); CHECKRETURN(ptr, "WHILE", "arg 1"); if (!truestr(ptr)) break; ptr = MesgParse(argv[1], buf, buflen); CHECKRETURN(ptr, "WHILE", "arg 2"); if (!(--iter_limit)) ABORT_MPI("WHILE", "Iteration limit exceeded"); } return buf; }
const char * mfn_if(MFUNARGS) { char *fbr, *ptr; if (argc == 3) { fbr = argv[2]; } else { fbr = ""; } ptr = MesgParse(argv[0], buf, buflen); CHECKRETURN(ptr, "IF", "arg 1"); if (ptr && truestr(buf)) { ptr = MesgParse(argv[1], buf, buflen); CHECKRETURN(ptr, "IF", "arg 2"); } else if (*fbr) { ptr = MesgParse(fbr, buf, buflen); CHECKRETURN(ptr, "IF", "arg 3"); } else { *buf = '\0'; ptr = ""; } return ptr; }
const char * mfn_lsort(MFUNARGS) { char *litem[MAX_MFUN_LIST_LEN]; char vbuf[BUFFER_LEN]; char vbuf2[BUFFER_LEN]; char *ptr, *ptr2, *tmp; int i, j, count; if (argc > 1 && argc < 4) ABORT_MPI("LSORT","Takes 1 or 4 arguments"); for (i = 0; i < MAX_MFUN_LIST_LEN; i++) litem[i] = NULL; ptr = MesgParse(argv[0],argv[0]); CHECKRETURN(ptr,"LSORT","arg 1"); if (argc > 1) { ptr2 = MesgParse(argv[1], argv[1]); CHECKRETURN(ptr2,"LSORT","arg 2"); j = new_mvar(ptr2, vbuf); if (j == 1) ABORT_MPI("LSORT","Variable name too long"); if (j == 2) ABORT_MPI("LSORT","Too many variables already defined"); ptr2 = MesgParse(argv[2],argv[2]); CHECKRETURN(ptr2,"LSORT","arg 3"); j = new_mvar(ptr2, vbuf2); if (j == 1) ABORT_MPI("LSORT","Variable name too long"); if (j == 2) ABORT_MPI("LSORT","Too many variables already defined"); } count = 0; while (*ptr) { for (ptr2 = ptr; *ptr2 && *ptr2 != '\r'; ptr2++); if (*ptr2 == '\r') *(ptr2++) = '\0'; litem[count++] = ptr; ptr = ptr2; if (count >= MAX_MFUN_LIST_LEN) ABORT_MPI("LSORT","Iteration limit exceeded"); } for (i = 0; i < count; i++) { for (j = i + 1; j < count; j++) { if (argc > 1) { strcpy(vbuf, litem[i]); strcpy(vbuf2, litem[j]); ptr = MesgParse(argv[3],buf); CHECKRETURN(ptr,"LSORT","arg 4"); if (truestr(buf)) { tmp = litem[i]; litem[i] = litem[j]; litem[j] = tmp; } } else { if (alphanum_compare(litem[i], litem[j]) > 0) { tmp = litem[i]; litem[i] = litem[j]; litem[j] = tmp; } } } } *buf = '\0'; for (i = 0; i < count; i++) { if (*buf) strcat(buf, "\r"); strcat(buf, litem[i]); } if (argc > 1) { free_top_mvar(); free_top_mvar(); } return buf; }