This is Controller.m in view mode; [Download] [Up]
/* * Controller.m * * This program is the NeXTStep wrapper for import_export_mailrc.l * It also provides a service for saving (portions of) mail in files. * * Copyright (C) 1991 Roberto Di Cosmo * * Everyone is granted permission to copy, modify and redistribute * this file, as far as this notice is preserved on all copies. * * Written by: * Roberto Di Cosmo <dicosmo@dmi.ens.fr> * Dipartimento di Informatica LIENS * Universita' di Pisa Ecole Normale Superieure * Corso Italia, 40 45, Rue d'Ulm * Pisa ITALY Paris FRANCE * * $Header: /users/formel2/dicosmo/Projects/SAVEFROMMAIL/RCS/Controller.m,v 1.1 92/05/06 14:18:17 dicosmo Exp $ * * $Log: Controller.m,v $ * Revision 1.1 92/05/06 14:18:17 dicosmo * Initial revision * * */ /* Generated by Interface Builder */ #import <stdio.h> #import "Controller.h" #import <appkit/Application.h> #import <appkit/Panel.h> #import <appkit/Listener.h> #import <appkit/ScrollView.h> #import <appkit/SavePanel.h> #import <appkit/Text.h> #import <appkit/Pasteboard.h> #import <appkit/TextField.h> #import <stdlib.h> #import <strings.h> #import <mach_init.h> #import <vm/vm_user.h> #import <sys/stat.h> #import <defaults.h> #import <pwd.h> @implementation Controller - appDidInit:sender { myListener = [NXApp appListener]; [myListener setServicesDelegate: self]; return self; } /* Brings up the Info panel. Not done on startup because it's in a separate * interface file. Saves startup time for the user if we do this when they ask * for it, and not before. * "infoPanel" and "helpPanel" are defined in "Info.nib". */ - infoPanel:sender { if( ! infoPanel ){ [NXApp loadNibSection:"Info.nib" owner:self]; } [infoPanel makeKeyAndOrderFront:sender]; return self; } /* * Brings up the Help panel (as above) */ - helpPanel:sender { if( ! helpPanel ){ [NXApp loadNibSection:"Info.nib" owner:self]; } [helpPanel makeKeyAndOrderFront:sender]; return self; } extern void import_mailrc(); extern FILE *freopen(); - importMailrcFile:sender; { char *Unixmailrcfn; char *NeXTmailaliasfn; FILE *old_stdin; FILE *old_stdout; Unixmailrcfn = malloc(550); NeXTmailaliasfn = malloc(550); (void)strcpy(Unixmailrcfn, strcpy(NeXTmailaliasfn, NXHomeDirectory())); (void)strcat(Unixmailrcfn, "/.mailrc"); (void)strcat(NeXTmailaliasfn, "/.NeXT/.mailalias"); /* Save stdin and stdout across freopen call */ old_stdin = stdin; old_stdout = stdout; if ((freopen(Unixmailrcfn,"r",stdin)) != NULL) if ((freopen(NeXTmailaliasfn,"a",stdout)) != NULL) {import_mailrc(); /* close open files */ fclose(stdin); fclose(stdout); } else NXRunAlertPanel("Import .mailrc Service Alert","Cannot open mail default files :-(", NULL, NULL, NULL); /* Restore stdin and stdout after freopen call */ /* Is it necessary? And how do you do it? stdin = old_stdin; stdout = old_stdout; */ return self; } extern void export_mailrc(); - exportMailaliasFile:sender /* Ok, just wait a second! :-) */ { char *Unixmailrcfn; char *NeXTmailaliasfn; FILE *old_stdin; FILE *old_stdout; Unixmailrcfn = malloc(550); NeXTmailaliasfn = malloc(550); (void)strcpy(Unixmailrcfn, strcpy(NeXTmailaliasfn, NXHomeDirectory())); (void)strcat(Unixmailrcfn, "/.mailrc"); (void)strcat(NeXTmailaliasfn, "/.NeXT/.mailalias"); /* Save stdin and stdout across freopen call */ old_stdin = stdin; old_stdout = stdout; if ((freopen(NeXTmailaliasfn,"r",stdin)) != NULL) if ((freopen(Unixmailrcfn,"a",stdout)) != NULL) {export_mailrc(); /* close open files */ fclose(stdin); fclose(stdout); } else NXRunAlertPanel("Export .mailrc Service Alert","Cannot open mail default files :-(", NULL, NULL, NULL); /* Restore stdin and stdout after freopen call */ /* Is it necessary? And how do you do it? stdin = old_stdin; stdout = old_stdout; */ return self; } - SaveSelection:(id)pbid userData:(const char *)udata error:(char **)errmsg { SavePanel *panel; const char *name = NULL, *path = NULL; FILE *fpout; char *data; int length; const char *const *types; int hasAscii, i; int rest = 0, fits, divs; int bufsize; bufsize = 1024*64; types = [pbid types]; /* get a list of pasteboard types */ hasAscii = 0; for(i=0; !hasAscii && types[i]; i++) if(!strcmp(types[i], NXAsciiPboardType)) hasAscii = 1; if(hasAscii) { [pbid readType:NXAsciiPboardType data:&data length:&length]; if(data && length) { panel = [SavePanel new]; if ([panel runModalForDirectory:path file:name]) { if ((fpout = fopen([panel filename],"a")) != NULL) { if (length < bufsize) fwrite(data,length,1,fpout); else {fwrite(data,bufsize,(divs = length/bufsize),fpout); if ((rest = (length - (fits = divs*bufsize))) != 0) {fwrite(data+fits,rest,1,fpout);}; }; fclose(fpout); printf ("Saved file from mail\n"); }; [panel free]; }; }; }; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.