home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 January / macformat-033.iso / mac / Shareware City / Graphics / GifScan 1.6 / Sources / GSSaveFile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-04  |  1.8 KB  |  77 lines  |  [TEXT/MMCC]

  1. #include "GifScan.h"
  2.  
  3. #define    kSavePromptResString    131
  4. #define kDefaultNameString        132
  5. #define kDefaultCreator            'ttxt'
  6.  
  7. // I was going to use IC Config here, really, but it wouldn't get a 
  8. // default textfile creator for me
  9.  
  10. Boolean HandleTextFileSave(void)
  11. {
  12.     StandardFileReply    reply;
  13.     long                feature;
  14.     short                fileRef;
  15.     OSErr                err;
  16.     long                byteCount;
  17.     char                *bufPtr;
  18.     Boolean                cancel = false;
  19.     StringHandle        savePrompt, defFileName;
  20.     TEHandle            te;
  21.  
  22.     // Check for standard file stuff and report error if not present 
  23.     err = Gestalt(gestaltStandardFileAttr, &feature);
  24.     if (err != noErr) return(false);
  25.     
  26.     if (feature & (1 << gestaltStandardFile58) )
  27.     {
  28.         savePrompt = GetString(kSavePromptResString);
  29.         defFileName = GetString(kDefaultNameString);
  30.         HLock((Handle)savePrompt);
  31.         HLock((Handle)defFileName);
  32.         StandardPutFile(*savePrompt, *defFileName, &reply);
  33.         HUnlock((Handle)savePrompt);
  34.         HUnlock((Handle)defFileName);
  35.     }
  36.     else 
  37.         return(false);
  38.     
  39.     err = Gestalt(gestaltFSAttr, &feature);
  40.     if (err != noErr) return(false);
  41.     
  42.     if ( !(feature & (1 << gestaltHasFSSpecCalls)) ) return(false);
  43.     
  44.     if (reply.sfGood)
  45.     {
  46.         if ( reply.sfReplacing   )
  47.         {
  48.             err = FSpDelete(&reply.sfFile);
  49.             if ( err != noErr) return(false);
  50.         }
  51.         
  52.         err = FSpCreate( &reply.sfFile, kDefaultCreator, 'TEXT', reply.sfScript);
  53.         if ( err != noErr) SysBeep(20);
  54.  
  55.         err = FSpOpenDF( &reply.sfFile, fsWrPerm, &fileRef);
  56.         if ( err != noErr) SysBeep(20);
  57.             
  58.         err = SetFPos(fileRef, fsFromStart, 0);
  59.         if ( err != noErr) SysBeep(20);
  60.         
  61.         te = ((DocumentPeek)gOutWindow)->docTE;
  62.         byteCount = (*te)->teLength;
  63.         bufPtr = *((*te)->hText);
  64.         
  65.         err = FSWrite(fileRef, &byteCount, bufPtr);
  66.         if ( err != noErr) SysBeep(20);
  67.     
  68.         err = FSClose(fileRef);
  69.         if (err != noErr) SysBeep(20);
  70.         
  71.         return(true);
  72.     }
  73.     else
  74.     {
  75.         return(cancel);
  76.     }
  77. }