/* Copyright 1996 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/* File:     objsupport.h
 * Purpose:  Standard Dialogue support library.
 * Author:   Neil Kelleher
 * History:  5-Jul-1994 : NK: created
 */

#include "stddef.h"
#include "objects.toolbox.h"
#include "objects.window.h"

/* copies named template to a buffer, returns NULL if can't find or no memory */

char *copy_template(char *name);

/* creates object from buffer then frees it */

_kernel_oserror *create_from_template(char *template_id, ObjectID *handle);

/* zaps gadget attributes, NOTE: use macro form below */

_kernel_oserror *__zap_gadget(char *tm,ComponentID id,int off,int val);
_kernel_oserror *__zap_gadget_string(char *tm,ComponentID id,int off,const char* val,int offlen);
int *__read_gadget(char *tm,ComponentID id,int off);

/* zaps window template, NOTE: use macro form below */

_kernel_oserror *__zap_window(char *tm,int off,int val);
int *__read_window(char *tm,int off);

/* deletes a gadget from a template */

_kernel_oserror *delete_gadget(char *tm,ComponentID id);

/* zap_gadget(char *template,typedef GadgetType, ComponentID component, structure member, value */

#define zap_gadget(a,b,c,d,e) __zap_gadget(a,c,sizeof(GadgetHeader) + offsetof(b,d),(int) (e))

/* zap_gadget_string(char *template,typedef GadgetType, ComponentID component, structure member, value, structure member (length)
 * This is used to up the max buffer length if the string was too long to fit in the buffer.
 * This avoids problems of too small buffer lengths in Res files causing problems.
 */

#define zap_gadget_string(a,b,c,d,e,f) __zap_gadget_string(a,c,sizeof(GadgetHeader) + offsetof(b,d),(e), sizeof(GadgetHeader)+offsetof(b,f))


#define zap_gadget_header(a,c,d,e) __zap_gadget(a,c, offsetof(GadgetHeader,d),(int) (e))

/* zap_window(char *template,WindowTemplate structure member,value) */

#define zap_window(a,d,e) __zap_window(a,offsetof(WindowTemplate,d),(int) (e))

#define read_gadget(a,b,c,d) __read_gadget(a,c,sizeof(GadgetHeader) + offsetof(b,d))

#define read_gadget_header(a,c,d) __read_gadget(a,c, offsetof(GadgetHeader,d))

#define read_window(a,d) __read_window(a,offsetof(WindowTemplate,d))