/* xladdmsg - add a message to a class */ void xladdmsg(LVAL cls, const char *msg, int offset) { extern FUNDEF *funtab; LVAL mptr; /* enter the message selector */ mptr = entermsg(cls,xlenter(msg)); /* store the method for this message */ rplacd(mptr,cvsubr(funtab[offset].fd_subr,funtab[offset].fd_type,offset)); }
int comment(void) { int oldb; if (!conference()->conf.CONF_COMMENTAREA) return 0; oldb = current_msgbase->MSGBASE_NUMBER; if (changemsgbase(conference()->conf.CONF_COMMENTAREA, MC_QUICK | MC_NOSTAT)) { entermsg(0, 0, maincfg.CFG_SYSOPNAME); changemsgbase(oldb, MC_QUICK | MC_NOSTAT); return 1; } return 0; }
/* clanswer - define a method for answering a message */ LVAL clanswer(void) { LVAL self,msg,fargs,code,mptr; /* message symbol, formal argument list and code */ self = xlgaobject(); msg = xlgasymbol(); fargs = xlgalist(); code = xlgalist(); xllastarg(); /* make a new message list entry */ mptr = entermsg(self,msg); /* setup the message node */ xlprot1(fargs); fargs = cons(s_self,fargs); /* add 'self' as the first argument */ rplacd(mptr,xlclose(msg,s_lambda,fargs,code,NIL,NIL)); xlpop(); /* return the object */ return (self); }
int replymessage(struct DayDream_Message *msgd) { char qbuffer[4096]; char input[2048]; char msgin[10]; FILE *msgfd; FILE *quotefd; char *s, *t; int i; int hola; int l = 0; struct DayDream_Message header; s = (char *) &header; for (hola = 0; hola < sizeof(struct DayDream_Message); hola++) { *s++ = 0; } snprintf(qbuffer, sizeof qbuffer, "%s/messages/base%3.3d/msg%5.5d", conference()->conf.CONF_PATH, current_msgbase->MSGBASE_NUMBER, msgd->MSG_NUMBER); if (!(msgfd = fopen(qbuffer, "r"))) return 0; snprintf(qbuffer, sizeof qbuffer, "%s/daydream%d.mtm", DDTMP, node); unlink(qbuffer); if (!(quotefd = fopen(qbuffer, "w"))) { fclose(msgfd); return 0; } if (current_msgbase->MSGBASE_FLAGS & (1L << 3)) { if (current_msgbase->MSGBASE_FLAGS & (1L << 4)) { s = msgd->MSG_AUTHOR; t = msgin; *t++ = *s++; while (*s) { if (*s == ' ' && *(s + 1)) { s++; *t++ = *s; } s++; } *t++ = '>'; *t = 0; } else { msgin[0] = '>'; msgin[1] = 0; } } else { msgin[0] = 0; } while (fgets(input, 2048, msgfd)) { if (l == 0 && !strncmp("AREA:", input, 5)) continue; l++; if (*input == 1) continue; if (!strncmp("SEEN-BY:", input, 8)) break; stripansi(input); snprintf(qbuffer, sizeof qbuffer, "%s%s", msgin, input); t = qbuffer; for (;;) { if (strlen(t) > 76) { char k; s = &t[75]; for (;;) { if (s == t) { k = t[75]; t[75] = 0; s = &t[75]; break; } else { if (*s == ' ') { k = *s; *s = 0; break; } s--; } } fputs(t, quotefd); fputs("\n", quotefd); *s = k; if (k == ' ') s++; t = s; snprintf(qbuffer, sizeof qbuffer, "%s%s", msgin, t); t = qbuffer; } else { fputs(t, quotefd); break; } } } if (!msgin[0]) { snprintf(qbuffer, sizeof qbuffer, "---[ %s ]", msgd->MSG_AUTHOR); for (i = strlen(qbuffer); i < 75; i++) { strlcat(qbuffer, "-", sizeof qbuffer); } strlcat(qbuffer, "\n\n", sizeof qbuffer); fputs(qbuffer, quotefd); } fclose(msgfd); fclose(quotefd); strlcpy(header.MSG_RECEIVER, msgd->MSG_AUTHOR, sizeof header.MSG_RECEIVER); strlcpy(header.MSG_SUBJECT, msgd->MSG_SUBJECT, sizeof header.MSG_SUBJECT); header.MSG_ORIGINAL = msgd->MSG_NUMBER; if (msgd->MSG_FLAGS & (1L << 0)) header.MSG_FLAGS |= (1L << 0); if (toupper(current_msgbase->MSGBASE_FN_FLAGS) == 'N') { if (msgd->MSG_FN_ORIG_ZONE) { header.MSG_FN_DEST_ZONE = msgd->MSG_FN_ORIG_ZONE; } else { header.MSG_FN_DEST_ZONE = msgd->MSG_FN_PACKET_ORIG_ZONE; } header.MSG_FN_DEST_NET = msgd->MSG_FN_ORIG_NET; header.MSG_FN_DEST_NODE = msgd->MSG_FN_ORIG_NODE; header.MSG_FN_DEST_POINT = msgd->MSG_FN_ORIG_POINT; } i = entermsg(&header, 1, 0); getmsgptrs(); return i; }