/*
 * Title:   C_Demo
 * Using ANSI C Part 5
 * by Lee Calcraft
 * RISC User November 1991
 * Subject to copyright
 */
#define VERSION "0.61"
/*
 **fpe **fp   function prototypes
 **gve **gv   global variables
 
 **main    main()
 **in      INITIALISATION 
 **im      icon menu handler
 **pm      pre menu proc
 **ic      icon click handler
 */
#include "event.h"
#include "baricon.h"
#include "res.h"
#include "resspr.h"
#include "win.h"
#include "wimpt.h"
#include "menu.h"
#include "template.h"
#include "dbox.h"
#include "bbc.h"
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
/****************************************/
/**              CONSTANTS              */
/****************************************/
 
#define APP_NAME        "C_Demo"
#define ICON_NAME       "!C_Demo"
 
#define MENU_ITEMS      ">Info,Test,Quit"
#define SUBMENU_ITEMS   "!Test1|Test2,>Search"
 
#define i_menu_info        1
#define i_menu_test        2
#define i_menu_quit        3
 
#define i_tsubmenu_opt1    1
#define i_tsubmenu_opt2    2
#define i_tsubmenu_search  3
 
/* Info box field for ver string */
#define cd_info_field      4
 
/****************************************/
/**fp       FUNCTION PROTOTYPES         */
/****************************************/

static void cd_info_about_program(void);
static void i_menuproc(void *handle, char *hit);
static menu i_premenuproc(void *handle);
static BOOL cd_initialise(void);
 
/**fpe */
/****************************************/
/**gv      GLOBAL VARIABLES             */
/****************************************/

static menu i_menu;
static menu i_tsubmenu;
 
char test[256];        /* for debugging */
char app_dir[256];      /* for obey$dir */
char start_file[256];   /* initial load */
BOOL t1_ticked=TRUE;  /* selection flag */
BOOL case_sens=FALSE;
char search_string[100]="";
/**gve */

/*--------------------------------------*/
/**se               Search              */
/*--------------------------------------*/
 
static void cd_search(void)
{
  dbox  d;       /* Dialogue box handle */
  int response;
 
  if (d = dbox_new("Search"), d != NULL)
  { 
    
    dbox_setnumeric(d,1,case_sens);

    dbox_show(d);         /* display it */
    while ((response=dbox_fillin(d))>0)
      if (response==4)
        dbox_setfield(d,2,search_string);
    if (response!=-1)
    {
      case_sens=dbox_getnumeric(d,1);
      dbox_getfield(d,2,search_string,100);
    }

    dbox_dispose(&d);      /* remove it */
  }
}


/*--------------------------------------*/
/**ibh       info box handler           */
/*--------------------------------------*/
 
static void cd_info_about_program(void)
{
  dbox  d;       /* Dialogue box handle */
  char versionstring[256];
 
  if (d = dbox_new("progInfo"), d != NULL)
  {
    sprintf(versionstring,"%s (%s)",VERSION,__DATE__);
    dbox_setfield(d, cd_info_field, versionstring);
 
    dbox_show(d);         /* display it */
    dbox_fillin(d);      /* maintain it */
    dbox_dispose(&d);      /* remove it */
  }
}
 
/*--------------------------------------*/
/**im     icon menu handler             */
/*--------------------------------------*/
 
static void i_menuproc(void *handle, char *hit)
{
  switch (hit[0])
  {
    case i_menu_info:
      cd_info_about_program();
      break;
    
    case i_menu_test:
      switch (hit[1])
      {
        case i_tsubmenu_opt1:
          t1_ticked=!t1_ticked;
          break;
          
        case i_tsubmenu_opt2:
          break;
          
        case i_tsubmenu_search:
          cd_search();
          break;
          
        default:
          break;
      }
      break;
      
    case i_menu_quit:
      exit(0);
      break;

    default:
      break;
  }
}
 
/*--------------------------------------*/
/**pm         pre menu proc             */
/*--------------------------------------*/
 
static menu i_premenuproc(void *handle)
{
  menu_setflags(i_tsubmenu,i_tsubmenu_opt1,t1_ticked,0);
 
  return i_menu;
}
 
/*--------------------------------------*/
/**ic     icon click handler            */
/*--------------------------------------*/
 
static void cd_iconclick(wimp_i icon)
{
  icon=icon;
  bbc_vdu(7);
}
 
/****************************************/
/**in           INITIALISATION          */
/****************************************/
 
static BOOL cd_initialise(void)
{
  os_read_var_val("Obey$Dir",app_dir,255);
  if (*app_dir=='\0') return FALSE;
  
           /* RISC_OSlib initialisation */
  wimpt_init(APP_NAME);/*initialise task*/
  res_init(APP_NAME);      /* resources */
  resspr_init();             /* sprites */
  template_init();         /* templates */
  dbox_init();        /* dialogue boxes */
 
/* create menu structure */
  if (i_menu = menu_new(APP_NAME, MENU_ITEMS), i_menu == NULL)
    return FALSE;
    
/* create submenu structure */
  if (i_tsubmenu = menu_new("Test", SUBMENU_ITEMS), i_tsubmenu == NULL)
    return FALSE;    
    
/* attach submenu */
  menu_submenu(i_menu,i_menu_test,i_tsubmenu);
    
/* put icon on icon bar */
/* and register icon click handler */
   baricon(ICON_NAME, (int)resspr_area(), cd_iconclick);
   
/* establish icon menu handler */
/* and menu pre-proc */
  if (!event_attachmenumaker(win_ICONBAR,i_premenuproc,i_menuproc,0))
    return FALSE;
 
  return TRUE;
}
 
/*--------------------------------------*/
/**main    The main() function          */
/*--------------------------------------*/
 
int main(int argc, char *argv[])
{
  if (argc>1) strcpy(start_file,argv[1]);
 
  if (cd_initialise())
  {
                 /* The main event loop */
    while (TRUE)
      event_process();
  }
 
  return 0;
}
