/* handle the HCL functions */

/* Copyright (C) Acorn Computers Ltd 1994 */

/* include standard C definitions */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "swis.h"

/* include toolbox lib declarations */

#include "toolbox.h"
#include "window.h"

/* include application definitions */

#include "hyper.h"
#include "draw.h"
#include "utils.h"
#include "commands.h"
#include "hcl.h"
#include "button.h"
#include "view.h"

/* HCL handling */

static int (* viewfns[])(Viewer *v,char *c) ={do_search,do_load,do_star,do_title,do_button,
                          do_status,do_colour,do_goto,do_gosub,do_new,do_res,do_overlay,
                        do_end,do_clear,do_refresh,do_stack};
static char * viewparsings[] ={"search","load","*","title","button","status","colour","goto",
                          "gosub","new","res","overlay","!!end","clear","refresh","stack"};
#define NUM_VIEW_CMDS 16

CCTRL VIEW = {viewfns,viewparsings, NUM_VIEW_CMDS};

/* HCL functionality */

static void refresh_window(Viewer *view)
{
    BBox box;
    window_get_extent(0,view->window,&box);
    window_force_redraw(0,view->window,&box);
}

/* search currently unsupported */
int do_search(Viewer *v,char *cmd)
{
    IGNORE(v);
    IGNORE(cmd);

    return SUCCESS;
}

int do_refresh(Viewer *view,char *cmd)
{
    IGNORE(cmd);

    refresh_window(view);

    return SUCCESS;
}

int do_clear(Viewer *view,char *cmd)
{
    int i;
    IGNORE(cmd);

    buttons_clear(view);

    for (i=0;i<MAX_LAYERS;i++) view->files[i]=0;

    if (view->num_draw) {
      int i;
      for (i=0; i<view->num_draw; i++) {
        if (view->drawfile[i]) free(view->drawfile[i]);
        view->drawfile[i] = NULL;
      }
    }

    view->num_draw =0;

    refresh_window(view);

    return SUCCESS;
}

int do_load(Viewer *v,char *cmd)
{
   if (draw_file_load(v,cmd) == FAILED) warn_about_memory();
   return SUCCESS;
}

int do_title(Viewer *v,char *cmd)
{
   window_set_title(0,v->window,cmd);
   return SUCCESS;
}

int do_colour(Viewer *v,char *cmd)
{
   sscanf(cmd," %d",&(v->colour));
   return SUCCESS;
}

int do_status(Viewer *v,char *cmd)
{
   button_set_value(0,v->status,0,cmd);
   return SUCCESS;
}

int do_new(Viewer *v,char *cmd)
{
   IGNORE(v);

   new_viewer(cmd);
   return SUCCESS;
}

int do_res(Viewer *v, char *cmd)
{
   IGNORE(v);

   toolbox_load_resources(0,cmd);
   return SUCCESS;
}

int do_stack(Viewer *v, char *cmd)
{
   v->name = cmd;
   return SUCCESS;
}

