This is ComposeSuggestion.m in view mode; [Download] [Up]
/***************************************************************************** * ComposeSuggestion.m * * Authors: * Denise Howard * deniseh@idiom.com * * Michael Hawley * mike@media.mit.edu * * Copyright (c) MIT Media Laboratory, 1991-1995. * * Description: * Implement a "suggestion box", to catch user's comments. * * Modified by Tsutomu_Eguchi@ns.saga-med.ac.jp April 1998 * Update Denise Howard's e-mail address * *****************************************************************************/ #import "ComposeSuggestion.h" void stripnl(char *s) { char *p; for (p=s; *p; p++) if (*p == '\n' || *p == '\r') *p = '\0'; } char * execstr(char *s) { FILE *f = popen(s, "r"); char *p = s; *s = '\0'; if (f) { while (fgets(p, 256, f)) stripnl(p), p += strlen(p); pclose(f); } return s; } int ComposeSuggestion() { port_t thePort; int theWindowNumber; char subj[256]; char whoami[] = "whoami"; char maintainer[] = "Denise Howard <deniseh@idiom.com>"; //TE char body[4096]="\ Denise:\n\n\ A handy bit of software! I use it ALL the time.\n\ Now, I know I should be sending you a T shirt, a card, \n\ maybe a tax deductible surprise, but all I have are these\n\ scrimpy electronic comments:\n\n\ <insert accolades & suggestions here>\n\n\ parsimoniously,\n\ "; #define call(a,b) [s performRemoteMethod:a with:b length:strlen(b)+1] // Launch Mail (if not already running) and bring Mail to the front thePort = NXPortFromName("Mail", NULL); // Gratuitous call to verify mail's existence if ((thePort = NXPortFromName("Mail", NULL)) == PORT_NULL) return 0; // Get the correct port thePort = NXPortFromName("MailSendDemo", NULL); if (thePort != PORT_NULL) { // Create the message subject and body sprintf(subj, "Comments and suggestions for ``%s'' ", [NXApp appName]); strcat(subj, (char *)[[NXApp delegate] version]); strcat(body, execstr(whoami)); strcat(body, "\n"); // Set the speaker and do the rpc [[NXApp appSpeaker] setSendPort:thePort]; if ([[NXApp appSpeaker] selectorRPC:"openSend:" paramTypes:"I", &theWindowNumber]) return 0; if ([[NXApp appSpeaker] selectorRPC:"setTo:inWindow:" paramTypes:"ci", maintainer, theWindowNumber]) return 0; if ([[NXApp appSpeaker] selectorRPC:"setSubject:inWindow:" paramTypes:"ci", subj, theWindowNumber]) return 0; if ([[NXApp appSpeaker] selectorRPC:"setBody:inWindow:" paramTypes:"ci", body, theWindowNumber]) return 0; } return 1; } /* Implement a simple tracking mechanism, to send a blip of * mail from the first-time user. This is akin to releasing * helium balloons with postcards that say "If you find me, * send this card back to . . ." -- it should be interesting * to the community to track the free flow of software on * the ethernet. * * If you have any concerns about this, please check with me. * * Michael Hawley * mike@media-lab.mit.edu * * Since Michael's automatic-mailing feature was hard-coded to * expire Feb. 21, 1995, I have removed this infamous code. * Denise Howard 2/95 */ // static void // monitorMail(subj,body,dest) char *subj, *body, *dest; { // char s[1024], u[256]="whoami", m[256]="hostname", t[4096]; // FILE *f, *popen(); // if (!dest || !*dest) dest = "monitor%tome.media.mit.edu@mit.edu"; // execstr(u); execstr(m); // if (!body || !*body){ // body = t; // sprintf(body, "%s@%s\nIf this mail bounces back to you,\n\ // could you please correct the destination path if possible,\n\ // and send it to monitor@tome.media.mit.edu.\n\ // We are trying an experiment to track software.\n",u,m); // } // sprintf(s,"/usr/ucb/Mail -s \"%s %s@%s\" %s", // subj && *subj? subj : [NXApp appName], u, m, dest); // if (f = popen(s,"w")) // fprintf(f,"%s",body), pclose(f); // } // // static void // OpenerMonitor(subj) char *subj; { // send a note at first use. to track net. // extern char FirstUsed[]; // if (!*FirstUsed){ // extern long time(); // extern char *ctime(); // long t = time(0); // if (t < 793414430) // 1995 // monitorMail(subj,0,0); // strcpy(FirstUsed,ctime(&t)); // stripnl(FirstUsed); // [_defaults writeDefaults:_defaults]; // } // }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.