home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 357.lha / intuisup_v1.15 / examples / fileio / test.c < prev    next >
C/C++ Source or Header  |  1990-03-10  |  5KB  |  152 lines

  1. #include <intuition/intuisup.h>
  2. #include <intuition/intuitionbase.h>
  3.  
  4. extern struct Library *DOSBase;
  5. struct Library *IntuitionBase, *GfxBase, *IconBase;
  6.  
  7. #ifdef ISUP_RUNTIME
  8. struct   Library  *iSupBase;
  9. #else
  10. struct   Device   *ConsoleDevice;
  11. struct   IOStdReq  ConsoleMsg;
  12. #endif
  13.  
  14.  
  15. static BOOL TestFileIO(fileio, window)
  16. struct FileIOSupport *fileio;
  17. struct Window *window;
  18. /* This function calls GetFileIOName wich pops up the requester and waits  */
  19. /* for user input, then builds the complete selected pathname through      */
  20. /* BuildFileIOPathName() and displays it with a AutoSmartRequester().      */
  21. /* Moreover, it looks at the flags in the FileIOSupport struct upon return */
  22. /* and says TRUE if the user swapped disks while the file req. was on the  */
  23. /* screen and FALSE otherwise.                                             */
  24. {
  25.    UBYTE name[80];
  26.  
  27.    if (GetFileIOName(fileio, window, 6, 15))
  28.       {
  29.       /* If user was positive, display the name */
  30.       StrCpy(&name[0], "[");
  31.       BuildFileIOPathname(fileio, &name[1]);
  32.       StrCat(&name[0], "]");
  33.       AutoSmartRequest(window, 1, &name[0], 0, "Ok", NULL, NULL, NULL);
  34.       }
  35.  
  36.    /* if disk were swapped, tell it             */
  37.    if (FlagIsSet(fileio->Flags, FR_DISK_HAS_CHANGED))
  38.           {
  39.           ClearFlag(fileio->Flags, FR_DISK_HAS_CHANGED);
  40.           return(TRUE);
  41.           }
  42.    else return(FALSE);
  43. }
  44.  
  45.  
  46. VOID main(argc, argv)
  47. LONG argc;
  48. char **argv;
  49. {
  50.    extern struct IntuiMessage *GetMsg();
  51.    extern struct Window       *OpenStdWindow();
  52.  
  53.    BOOL   mainswitch = TRUE, ioswitch;
  54.    LONG   class;
  55.    SHORT  pick = 0;
  56.    struct Window        *window;
  57.    struct IntuiMessage  *message;
  58.    struct FileIOSupport *fileio1, *fileio2;
  59.  
  60.  
  61.    if (  !(GfxBase       = (struct Library *)OpenLibrary("graphics.library", 0))
  62.       || !(IntuitionBase = (struct Library *)OpenLibrary("intuition.library", 0))
  63.       || !(IconBase      = (struct Library *)OpenLibrary("icon.library", 0))
  64. #ifdef ISUP_RUNTIME
  65.       || !(iSupBase      = (struct Library *)OpenLibrary("isup.library", 0))
  66. #else
  67.       || !(!OpenDevice("console.device", -1, &ConsoleMsg, 0) && (ConsoleDevice=ConsoleMsg.io_Device))
  68. #endif
  69.       ) goto MAIN_DONE;
  70.  
  71.    if (!(window=OpenStdWindow("File Requester Example", 0x1B, 15, 65, 350, 70, NULL))) goto MAIN_DONE;
  72.    Emit(window, "Click me for a file i/o requester",  42, 40, 2);
  73.  
  74.    /* Get a FileIOSupport for each requester                      */
  75.    fileio1 = GetFileIOSupport(NULL);  /* NULL and "" are the same */
  76.    fileio2 = GetFileIOSupport("");    /* and mean current dir.    */
  77.    if (!fileio1 || !fileio2) goto MAIN_DONE;
  78.  
  79.    /* Alter some of the default values                            */
  80.    fileio2->ReqTitle   = (UBYTE *)"Select Spreadsheet Name";
  81.    fileio2->ReqPattern = "*.c";
  82.    SetFlag(fileio1->Flags, FR_DRAG_BAR_OFF | FR_AUTO_CENTER );
  83.    SetFlag(fileio2->Flags, FR_AUTO_CENTER);
  84.  
  85.    while (mainswitch)
  86.          {
  87.          WaitPort(window->UserPort);
  88.  
  89.          ioswitch = FALSE;
  90.          while (message = GetMsg(window->UserPort))
  91.                {
  92.                class   = message->Class;
  93.                ReplyMsg(message);
  94.  
  95.                switch (class)
  96.                       {
  97.                       case CLOSEWINDOW: mainswitch = FALSE; break;
  98.  
  99.                       case DISKINSERTED:
  100.                          /* You should clear the GOOD_FILENAMES flag whenever you   */
  101.                          /* detect that a disk was inserted                         */
  102.                          ClearFlag(fileio1->Flags, FR_GOOD_FILENAMES);
  103.                          ClearFlag(fileio2->Flags, FR_GOOD_FILENAMES);
  104.                       break;
  105.  
  106.                       default:
  107.                          /* If any other event occurs, bring up that old requester! */
  108.                          ioswitch = TRUE;
  109.                          break;
  110.                       }
  111.                }
  112.  
  113.          if (ioswitch)
  114.             {
  115.             if (pick == 0)
  116.                {
  117.                if (TestFileIO(fileio1, window))
  118.                   ClearFlag(fileio2->Flags, FR_GOOD_FILENAMES);
  119.  
  120.                /* Alternate a normal and a dir requester */
  121.                ToggleFlag(fileio1->Flags, FR_DIR_ONLY);
  122.                ClearFlag(fileio1->Flags, FR_GOOD_FILENAMES);
  123.                }
  124.             else
  125.                {
  126.                TestFileIO(fileio2, window);
  127.                  /* Dont need to test if disk swapped for we clear */
  128.                  /* the flag on fileio1 each time anyway.          */
  129.                  /* ClearFlag(fileio1->Flags, FR_GOOD_FILENAMES);  */
  130.                }
  131.             pick = 1 - pick;
  132.             }
  133.          }
  134.  
  135.    MAIN_DONE:
  136.       if (fileio1)       ReleaseFileIO(fileio1);
  137.       if (fileio2)       ReleaseFileIO(fileio2);
  138.       if (window)        CloseStdWindow(window);
  139.  
  140. #ifdef ISUP_RUNTIME
  141.       if (iSupBase)      CloseLibrary(iSupBase);
  142. #else
  143.       if (ConsoleDevice) CloseDevice(&ConsoleMsg);
  144. #endif
  145.       if (IntuitionBase) CloseLibrary(IntuitionBase);
  146.       if (GfxBase)       CloseLibrary(GfxBase);
  147.       if (DOSBase)       CloseLibrary(DOSBase);
  148.       if (IconBase)      CloseLibrary(IconBase);
  149.       exit(0);
  150. }
  151.  
  152.