

/*
**
**  Show.c
**
**  Shows image with datatypes on MIU window
**
*/


#include <stdio.h>

#include <proto/exec.h>
#include <proto/dos.h>

#include <MIU_Master/MIU_Master.h>
#include <MIU_Master/MIU_Masterbase.h>
#include <proto/MIU_Master.h>



struct Library *MIU_MasterBase = NULL;
struct MIU_Window *miuw = NULL;

// needed library version !
#define LIB_VERSION 0
#define LIB_REVISION 384


// prototypes
void Init(char *);
void Show(void);
BOOL Messages(void);



///"main"
int main(int argc,char *argv[]){

  MIU_MasterBase = OpenLibrary("MIU_Master.library",0L);
  if(!MIU_MasterBase){
    printf("can't open MIU_Master.library\n");
    return 0;
  }


  // check for correct version number !!
  if( (MIU_MasterBase->lib_Version != LIB_VERSION) ||
      (MIU_MasterBase->lib_Revision != LIB_REVISION) ){
    printf("Sorry you need MIU_Master.library Ver: %d, Rev %d\n",LIB_VERSION,LIB_REVISION);

    CloseLibrary(MIU_MasterBase);
    return 0;
  }


  if(argc == 2){
    if(argv[1])
      Init((char *)argv[1]);
    else
      printf("Error in file name\n");
  }else printf("Please give name of the picture to view\n");


  CloseLibrary(MIU_MasterBase);
  return 0;
}
///

///"Init"
void Init(char *name){
//  short LBOR,TBOR,RBOR,BBOR;
  struct WImage *wimg = NULL;
//  short own_x = 0,own_y = 0,own_w = 0,own_h = 0;

  if(wimg = MIU_LoadImageTags(MIUIMG_Name,name,TAG_DONE)){

//    MIU_Borders(NULL,&LBOR,&TBOR,&RBOR,&BBOR);

//    if(own_w == 0) own_w = wimg->rect.w + LBOR + RBOR;
//    if(own_h == 0) own_h = wimg->rect.h + TBOR + BBOR;


    if(miuw = MIU_OpenWindowTags(MIUWA_Left,20,
                                 MIUWA_Top,20,
                                 MIUWA_InnerWidth,wimg->rect.w,
                                 MIUWA_InnerHeight,wimg->rect.h,
                                 MIUWA_InnerMaxWidth,wimg->rect.w,
                                 MIUWA_InnerMaxHeight,wimg->rect.h,
//                                 MIUWA_IDCMP,IDCMP_RAWKEY,
                                 MIUWA_Title,FilePart(name),
                                 TAG_DONE)){


      if(wimg && miuw){
        MIU_User2WindowTags(MIUUSER_UImage,wimg,
                        MIUUSER_Window,miuw,
                        MIUUSER_I1_Left,0,
                        MIUUSER_I1_Top,0,
                        MIUUSER_I1_Width,wimg->rect.w,
                        MIUUSER_I1_Height,wimg->rect.h,
                        MIUUSER_Left,0,
                        MIUUSER_Top,0,
                        MIUUSER_Width,0,
                        MIUUSER_Height,0,
                        MIUUSER_Flags,MIUUFLG_RELWIDTH | MIUUFLG_RELHEIGHT,
                        TAG_DONE);
      }


      MIU_RefreshWindow(miuw);

      Show();

    }else{
      printf("Openwindow failed\n");
    }


    MIU_DelImage(wimg);
  }else{
    printf("Error loading picture\n");
  }

}
///

///"Show"
void Show(){
  BOOL ok = TRUE;
  ULONG mask = NULL,signaalit = NULL;

  // while there is windows we have sigbits
  while(ok == TRUE){
    mask = miuw ? (1L<<miuw->window->UserPort->mp_SigBit) : NULL;

    signaalit = Wait(mask | 4096);

    if(signaalit & (SIGBREAKF_CTRL_C)) ok = FALSE;
    if(signaalit & mask) ok = Messages();
  }

  if(miuw) MIU_CloseWindow(miuw); miuw = NULL;

}
///

///"Messages"
BOOL Messages(){
  BOOL ok = TRUE;
  struct IntuiMessage *intumes;
  struct MIU_Message *miumes;

  while(intumes = (struct IntuiMessage *)MIU_GetMsg((struct MsgPort *)miuw->window->UserPort)){
    ULONG _class = intumes->Class;
    ULONG _code = intumes->Code;

    switch(_class){
      case MIUCMP_RAWKEY:
        printf("Code: %ld\n",_code);
        break;

      case MIUCMP_MIU:
        miumes = (struct MIU_Message *)intumes;

        switch(miumes->Class){
          case MIUMES_WINDOWCLOSE:
            ok = FALSE;
            break;
          case MIUMES_QUIT:
            ok = FALSE;
            break;
        }
        break;
    }

    MIU_ReplyMsg((struct Message *)intumes);
  }

  return ok;
}
///



