home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1473 / savefile.c < prev   
Encoding:
C/C++ Source or Header  |  1990-12-28  |  1.7 KB  |  96 lines

  1.  
  2. /*
  3.  * Copyright (C) 1990 Jay Konigsberg - This is Free Software.
  4.  */
  5.  
  6. #include "simped.h"
  7.  
  8. void savefile(editfile, newfile, fd, text, count)
  9. char    *editfile;
  10. int    *newfile;
  11. FILE    *fd;
  12. char    **text;
  13. int    count;
  14. {
  15. FILE    *fopen();
  16.  
  17. int    fclose(),
  18.     fprintf(),
  19.     printf(),
  20.     fputs(),
  21.     puts(),
  22.     cleanup();
  23.  
  24. char    *getline();
  25.  
  26. int    textinx,        /* index for the text buffer */
  27.     text_entered=0,        /* was something entered */
  28.     ch=0;            /* characters read in */
  29.  
  30. char    buffer[LINELEN+2];    /* buffer for filename entry */
  31.  
  32. puts("");
  33. if (! editfile)
  34.     {
  35.     for(;;)
  36.     {
  37.     fputs("\nPlease enter a filename: ", stdout);
  38.     if (getline(buffer, &text_entered, stdin, '\0', TRUE))
  39.         {
  40.         puts("Too many characters.");
  41.         return;
  42.         }
  43.     if( ! text_entered ) /* a return by itself was entered */
  44.         return;
  45.     buffer[strlen(buffer)-1]='\0';
  46.     editfile = buffer;
  47.     if ( (fd=fopen(editfile, "r")) == NULL)
  48.         {
  49.         break;
  50.         }
  51.     printf("%s: file exists! return to exit.\n", editfile);
  52.     }
  53.     fclose(fd);
  54.     if( (fd=fopen(editfile, "w")) == NULL )
  55.     {
  56.     fprintf(stderr,"Can't open %s, probably an illegal filename",editfile);
  57.     return;
  58.     }
  59.     }
  60.  
  61. if ( ! *newfile )
  62.     {
  63.     fclose(fd);
  64.     if( (fd=fopen(editfile, "w")) == NULL )
  65.     {
  66.     fprintf(stderr,"fopen for write failed.\n");
  67.     cleanup(2);
  68.     }
  69.     }
  70. else
  71.     {
  72.     rewind(fd);
  73.     }
  74. for (textinx=0; textinx < count; ++textinx)
  75.     {
  76.     ch += strlen(text[textinx]);
  77.     fputs(text[textinx], fd);
  78.     }
  79. if (ch > 0)
  80.     {
  81.     printf("\n%s: written, %d lines, %d characters\n", editfile, count, ch);
  82.     }
  83. else
  84.     {
  85.     if ( unlink(editfile) == -1 )
  86.     {
  87.     fprintf(stderr,"unlink failed: error=%d", errno);
  88.     }
  89.     else
  90.     {
  91.     puts("Empty file - no action");
  92.     }
  93.     }
  94. cleanup(0);
  95. }
  96.