home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 230.lha / FileIO_II / main.c < prev    next >
C/C++ Source or Header  |  1989-04-05  |  7KB  |  245 lines

  1. #include <functions.h>
  2. #include <exec/types.h>
  3. #include <exec/io.h>
  4. #include <stdio.h>
  5. #include <exec/memory.h>
  6. #include <intuition/intuition.h>
  7. #include <intuition/intuitionbase.h>
  8. #include <graphics/gfxbase.h>
  9. #include <workbench/workbench.h>
  10. #include "FileIO.h"
  11.  
  12. /* extern long GetMsg(), OpenWindow(), IoErr(), OpenLibrary(); */
  13.  
  14. /* === System Global Variables ========================================== */
  15. struct IntuitionBase *IntuitionBase = 0L;
  16. struct GfxBase       *GfxBase  = 0L;
  17. struct DosLibrary    *DosBase  = 0L;
  18. struct RequesterBase *RequesterBase = 0L;
  19. struct FileIO        *myFileIO  = 0L;
  20. struct FileIO        *myFileIO2 = 0L;
  21. struct Window        *myWindow  = 0L;
  22. struct Screen        *myScreen  = 0L;
  23. ULONG  argcount;  /* Saves argc from main(). argcount==0, then run from WB. */
  24.  
  25. struct TextAttr  topaz80_font;
  26.  
  27. BOOL TestFileIO();
  28.  
  29. struct NewScreen NewFileIOScreen =
  30.    {
  31.    0, 0,           /* LeftEdge, TopEdge */
  32.    640, 400,       /* Width, Height */
  33.    2,              /* Depth */
  34.    0, 1,           /* Detail/BlockPens */
  35.    HIRES | LACE,   /* ViewPort Modes (must set/clear HIRES as needed) */
  36.    CUSTOMSCREEN,
  37.    &topaz80_font,  /* Font */
  38.    (UBYTE *)"Example FileIO Program's Screen",
  39.    0L,             /* Gadgets */
  40.    0L,             /* CustomBitMap */
  41.    };
  42.  
  43. struct NewWindow NewFileIOWindow =
  44.    {
  45.    168, 30,            /* LeftEdge, TopEdge */
  46.    303, 145,          /* Width, Height */
  47.    -1, -1,            /* Detail/BlockPens */
  48.    MOUSEBUTTONS | CLOSEWINDOW | RAWKEY,
  49.                       /* IDCMP Flags */
  50.    WINDOWDRAG | WINDOWDEPTH | SIZEBRIGHT | SMART_REFRESH | WINDOWSIZING |
  51.    WINDOWCLOSE | ACTIVATE | NOCAREREFRESH,
  52.                       /* Window Specification Flags */
  53.    0L,                /* FirstGadget */
  54.    0L,                /* Checkmark */
  55.    (UBYTE *)"FileIO Requester Window",  /* WindowTitle */
  56.    0L,                /* Screen */
  57.    0L,                /* SuperBitMap */
  58.    303, 145,          /* MinWidth, MinHeight */
  59.    600, 200,          /* MaxWidth, MaxHeight */
  60.    WBENCHSCREEN,
  61.    };
  62.  
  63.  
  64. /************************ MAIN ROUTINE *****************************/
  65.  
  66. VOID main(argc, argv)
  67. LONG argc;
  68. char **argv;
  69. {
  70.    LONG   class;
  71.    struct IntuiMessage *message;
  72.    BOOL   end;
  73.  
  74.    argcount = argc;
  75.  
  76.    if (!(IntuitionBase = (struct IntuitionBase *)
  77.       OpenLibrary("intuition.library", 0L)))
  78.       exit_program("FileIO Demo: No intuition library. \n", 1L);
  79.  
  80.    if (!(GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 0L)))
  81.       exit_program("FileIO Demo: No graphics library. \n", 2L);
  82.  
  83.    /* NOW OPEN THE REQUESTER LIBRARY */
  84.  
  85.    if (!(RequesterBase = (struct RequesterBase *)OpenLibrary("requester.library", 0L)))
  86.       exit_program("FileIO Demo: No requester library. \n", 4L);
  87.  
  88.    if (argv)
  89.    {
  90.       /* OK, we started from CLI */
  91.       if (argc > 1)
  92.       {
  93.          if (myScreen = OpenScreen(&NewFileIOScreen))
  94.          {
  95.             NewFileIOWindow.Screen = myScreen;
  96.             NewFileIOWindow.Type = CUSTOMSCREEN;
  97.          }
  98.       }
  99.    }
  100.  
  101.    if (!(myWindow = (struct Window *) OpenWindow( &NewFileIOWindow ) ))
  102.       exit_program("FileIO Demo: Null Window.\n", 5L);
  103.  
  104.    /* GET 2 FileIO STRUCTURES */
  105.  
  106.    if (!(myFileIO = GetFileIO() ))
  107.       exit_program("FileIO Demo: No FileIO 1.\n", 6L);
  108.  
  109.    if (!(myFileIO2 = GetFileIO() ))
  110.       exit_program("FileIO Demo: No FileIO 2.\n", 7L);
  111.  
  112.    /* Set up the XY co-ordinates where the requester should open */
  113.  
  114.    myFileIO->X = 6;
  115.    myFileIO->Y = 11;
  116.  
  117.    myFileIO2->X = 6;
  118.    myFileIO2->Y = 11;
  119.  
  120.    /* Set default colors and DrawMode */
  121.    myFileIO->DrawMode = JAM2;
  122.    myFileIO->PenA = 1;
  123.    myFileIO->PenB = 0;
  124.    myFileIO2->DrawMode = JAM2;
  125.    myFileIO2->PenA = 1;
  126.    myFileIO2->PenB = 0;
  127.  
  128.           /* pretty easy to set up, eh?  */
  129.  
  130.    end = FALSE;
  131.  
  132.    SetFlag(myFileIO2->Flags, WBENCH_MATCH | MATCH_OBJECTTYPE);
  133.    myFileIO2->MatchType = WBTOOL;
  134.    SetFlag(myFileIO2->Flags, USE_DEVICE_NAMES);
  135.  
  136.  
  137.    while (end == FALSE)
  138.    {
  139.       WaitPort(myWindow->UserPort);
  140.  
  141.       while (message = ( struct IntuiMessage *)GetMsg(myWindow->UserPort))
  142.       {
  143.          class = message->Class;
  144.          ReplyMsg(message);
  145.  
  146.          switch (class)
  147.          {
  148.             case CLOSEWINDOW:
  149.                end = TRUE;
  150.                break;
  151.  
  152.             case DISKINSERTED:
  153.                /* You should clear the NO_CARE_REDRAW flag whenever you
  154.                 * detect that a new disk was inserted (if using this feature).
  155.                   We aren't using it, so comment it out.
  156.                ClearFlag(myFileIO->Flags, NO_CARE_REDRAW);
  157.                ClearFlag(myFileIO2->Flags, NO_CARE_REDRAW);
  158.                 */
  159.                break;
  160.  
  161.             case MOUSEBUTTONS:
  162.                if (TestFileIO(myFileIO, myWindow))
  163.                {
  164.                   /*
  165.                   ClearFlag(myFileIO->Flags, NO_CARE_REDRAW);
  166.                   ClearFlag(myFileIO2->Flags, NO_CARE_REDRAW);
  167.                   */
  168.                }
  169.                break;
  170.  
  171.             case RAWKEY:
  172.                if (TestFileIO(myFileIO2, myWindow))
  173.                {
  174.                   /*
  175.                   ClearFlag(myFileIO->Flags, NO_CARE_REDRAW);
  176.                   ClearFlag(myFileIO2->Flags, NO_CARE_REDRAW);
  177.                   */
  178.                }
  179.                break;
  180.  
  181.             default:
  182.                break;
  183.          } /* end of switch */
  184.       }  /* end of while..GetMsg */
  185.    }
  186.  
  187.    exit_program( 0L, 0L);
  188. }
  189.  
  190.  
  191.  
  192. exit_program( error_words, error_code )      /* All exits through here. */
  193. char  error_words;
  194. ULONG error_code;
  195. {
  196.    if( argcount && error_words ) puts( error_words );
  197.    if (myFileIO)  ReleaseFileIO(myFileIO);
  198.    if (myFileIO2) ReleaseFileIO(myFileIO2);
  199.  
  200.    if (myWindow) CloseWindow(myWindow);
  201.    if (myScreen) CloseScreen(myScreen);
  202.  
  203.    if (IntuitionBase) CloseLibrary(IntuitionBase);
  204.    if (GfxBase)       CloseLibrary(GfxBase);
  205.    if (DosBase)       CloseLibrary(DosBase);
  206.    if (RequesterBase) CloseLibrary(RequesterBase);
  207.    exit( error_code );
  208. }
  209.  
  210.  
  211.  
  212.  
  213.  /* This guy calls DoFileIO(), displays the file name selected by the
  214.   * user, and returns TRUE if the user swapped disks during DoFileIO()
  215.   * (else returns FALSE) if an error, CANCEL, or no disk swap.
  216.   */
  217. BOOL TestFileIO(fileio, wind)
  218. struct FileIO *fileio;
  219. struct Window *wind;
  220. {
  221.    UBYTE  *address;
  222.    UBYTE  buffer[80];
  223.  
  224.    fileio->Buffer = buffer;
  225.  
  226.    address = DoFileIO(fileio, wind);
  227.  
  228.    if ( address == buffer )
  229.    {
  230.       /* If user was positive and no error, display the name */
  231.       AutoMessage( buffer, wind);
  232.    }
  233.  
  234.    if (!address)    AutoMessage("Error in operation", wind);
  235.    if (address==-1) AutoMessage("Cancelled operation", wind);
  236.  
  237.    if (FlagIsSet(fileio->Flags, DISK_HAS_CHANGED))
  238.    {
  239.       ClearFlag(fileio->Flags, DISK_HAS_CHANGED);
  240.       return(TRUE);
  241.    }
  242.    else
  243.      return(FALSE);
  244. }
  245.