#include <proto/exec.h>
#include <proto/asl.h>
#include <proto/muimaster.h>
#include <clib/alib_protos.h>
#include <clib/muimaster_protos.h>
#include <libraries/asl.h>
#include <libraries/mui.h>
#include <libraries/iffparse.h>
#include <stdio.h>
#include <string.h>
#include "/include/docmafr_protos.h"
#include "/include/docmafr_pragmas.h"


#define AGET_ID 1
#define DGET_ID 2


/*=============================================================================
Global vars
-----------------------------------------------------------------------------*/

LONG __stack = 16384;
Object         *app, *win, *aget, *dget, *alist, *dlist, *multi, *patgad, *savemode, *drawers;
struct Library *DocMaFRBase, *MUIMasterBase, *AslBase;


/*=============================================================================
Hilfsfunktionen
-----------------------------------------------------------------------------*/

LONG xget (Object *obj, ULONG attribute)
{
  LONG x;

  get (obj, attribute, &x);
  return (x);
}


BOOL OpenLibs (void)
{
  DocMaFRBase   = OpenLibrary ("docmafr.library", 1);
  MUIMasterBase = OpenLibrary ("muimaster.library", 14);
  AslBase       = OpenLibrary ("asl.library", 39);
  if (DocMaFRBase && MUIMasterBase && AslBase) return (TRUE);
  return (FALSE);
}


void CloseLibs (void)
{
  if (DocMaFRBase) CloseLibrary (DocMaFRBase);
  if (MUIMasterBase) CloseLibrary (MUIMasterBase);
  if (AslBase) CloseLibrary (AslBase);
}


Object *MakeLabel1 (char *str)
{
 return (MUI_MakeObject (MUIO_Label, str, MUIO_Label_SingleFrame));
}


Object *MakeLabel2 (char *str)
{
  return (MUI_MakeObject (MUIO_Label, str, MUIO_Label_DoubleFrame));
}


void printreq (Object *list, struct FileRequester *req)
{
  struct WBArg *frargs;
  int           x;
  char          line[1000];

  DoMethod (list, MUIM_List_Clear);
  set (list, MUIA_List_Quiet, TRUE);
  sprintf (line, "fr_File: %s", req->fr_File); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  sprintf (line, "fr_Drawer: %s", req->fr_Drawer); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  sprintf (line, "fr_NumArgs: %d", req->fr_NumArgs); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  sprintf (line, "fr_ArgList:"); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  for (x = 0, frargs = req->rf_ArgList; x < req->rf_NumArgs; x++)
  {
    sprintf (line, " %d: %s %ld", x, frargs[x].wa_Name, frargs[x].wa_Lock); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  }
  sprintf (line, "fr_UserData: %s", req->fr_UserData); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  sprintf (line, "fr_Pattern: %s", req->fr_Pattern); DoMethod (list, MUIM_List_InsertSingle, line, MUIV_List_Insert_Bottom);
  set (list, MUIA_List_Quiet, FALSE);
}


void main (void)
{
  ULONG                 res, sigs=0;
  struct FileRequester *areq, *dreq;

  if (OpenLibs ())
  {
    if (dreq = AllocDocMaRequestTags (ASL_FileRequest,
                                       ASL_Hail,      "DocMa FileRequest",
                                       ASL_Dir,       "sys:",
                                     TAG_END))
    {
      if (areq = AllocAslRequestTags (ASL_FileRequest,
                                          ASL_Hail,      "Asl FileRequest",
                                          ASL_Dir,       "sys:",
                                        TAG_END))
      {

        if (app = ApplicationObject,
                    MUIA_Application_Title,       "DOCMAFRTEST",
                    MUIA_Application_Author,      "Marc Ewert",
                    MUIA_Application_Version,     "$VER: DocMaFRTest 1.0 (06.04.97)",
                    MUIA_Application_Copyright,   "© 1997, Marc Ewert",
                    MUIA_Application_Description, "Document Manager Filerequester Test",
                    MUIA_Application_Base,        "DOCMAFRTEST",
                    MUIA_Application_Window,
                      win = WindowObject,
                        MUIA_Window_Title, "DocMaFR Test",
                        MUIA_Window_ID, MAKE_ID ('D','T','E','S'),
                        MUIA_Background, MUII_WindowBack,
                        WindowContents,
                          VGroup,
                            Child, HGroup,
                                     Child, multi = MUI_MakeObject (MUIO_Checkmark, "Multiselect"),
                                     Child, MakeLabel1 ("MultiSelect"),
                                     Child, HSpace (0),
                                     Child, patgad = MUI_MakeObject (MUIO_Checkmark, "PatGad"),
                                     Child, MakeLabel1 ("PatGad"),
                                     Child, HSpace (0),
                                     Child, savemode = MUI_MakeObject (MUIO_Checkmark, "SaveMode"),
                                     Child, MakeLabel1 ("SaveMode"),
                                     Child, HSpace (0),
                                     Child, drawers = MUI_MakeObject (MUIO_Checkmark, "NoFiles"),
                                     Child, MakeLabel1 ("NoFiles"),
                                     Child, HSpace (0),
                                   End,
                            Child, HGroup,
                                     Child, alist = ListObject,
                                                      MUIA_Background, MUII_ReadListBack,
                                                      MUIA_Frame, MUIV_Frame_ReadList,
                                                      MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
                                                      MUIA_List_DestructHook, MUIV_List_DestructHook_String,
                                                      MUIA_List_Title, "Asl FileRequester",
                                                    End,
                                     Child, dlist = ListObject,
                                                      MUIA_Background, MUII_ReadListBack,
                                                      MUIA_Frame, MUIV_Frame_ReadList,
                                                      MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
                                                      MUIA_List_DestructHook, MUIV_List_DestructHook_String,
                                                      MUIA_List_Title, "DocMa FileRequester",
                                                    End,
                                   End,
                            Child, HGroup,
                                     Child, aget = MUI_MakeObject (MUIO_Button, "AslRequest"),
                                     Child, HSpace(0),
                                     Child, dget = MUI_MakeObject (MUIO_Button, "DocMaRequest"),
                                   End,
                          End,
                      End,
                End)
        {
          DoMethod (win, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
          DoMethod (aget, MUIM_Notify, MUIA_Pressed, FALSE, app, 2, MUIM_Application_ReturnID, AGET_ID);
          DoMethod (dget, MUIM_Notify, MUIA_Pressed, FALSE, app, 2, MUIM_Application_ReturnID, DGET_ID);
          set (win, MUIA_Window_Open, TRUE);
          while ((res = DoMethod(app,MUIM_Application_NewInput,&sigs)) != MUIV_Application_ReturnID_Quit)
          {
            switch (res)
            {
              case AGET_ID:
                AslRequestTags (areq, ASLFR_Screen, xget (win, MUIA_Window_Screen), ASLFR_DoMultiSelect, xget (multi, MUIA_Selected), ASLFR_DoPatterns, xget (patgad, MUIA_Selected), ASLFR_DoSaveMode, xget (savemode, MUIA_Selected), ASLFR_DrawersOnly, xget (drawers, MUIA_Selected), TAG_END);
                printreq (alist, areq);
                break;
              case DGET_ID:
                DocMaRequestTags (dreq, ASLFR_Screen, xget (win, MUIA_Window_Screen), ASLFR_DoMultiSelect, xget (multi, MUIA_Selected), ASLFR_DoPatterns, xget (patgad, MUIA_Selected), ASLFR_DoSaveMode, xget (savemode, MUIA_Selected), ASLFR_DrawersOnly, xget (drawers, MUIA_Selected), TAG_END);
                printreq (dlist, dreq);
                break;
            }
            if (sigs)
            {
              sigs = Wait(sigs | SIGBREAKF_CTRL_C);
              if (sigs & SIGBREAKF_CTRL_C) break;
            }
          }
          set (win, MUIA_Window_Open, FALSE);
          MUI_DisposeObject (app);
        }
        FreeAslRequest (areq);
      }
      FreeDocMaRequest (dreq);
    }
  }
  CloseLibs ();
}
