/* ln menuhandl -lc16 +l amiga.lib */

/* Semplice esempio di utilizzo delle funzioni di creazione dei menu    */
/* contenute in menuhandl.c.                                            */
/*                                                                      */
/* Il programma e` soltanto un esempio dell'uso di CreateMenuStrip(),   */
/* non mostra ne` l'uso delle altre funzioni, ne` gestisce i messaggi   */
/* MENUPICK.                                                            */
/*                                                                      */
/*                                                                      */
/* Note sulla compilazione: il programma viene compilato                */
/* correttamente da Aztec C 5.0d con le segueti opzioni:                */
/*                                                                      */
/*  cc menudemo -pps -so                                                */
/*  ln menudemo menuhandl -lc16 +l amiga.lib                            */
/*                                                                      */
/* Non ho provato SAS, ma non dovrebbero essere necessarie modifiche.   */
/*                                                                      */
/* Per la compilazione sono INDISPENSABILI i file include versione 2.0, */
/* inoltre il modulo va linkato con amiga.lib versione 2.0              */



#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <utility/tagitem.h>
#include <libraries/gadtools.h>
#include <dos/dos.h>
#ifdef AZTEC_C
#include <functions.h>
#else
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/gadtools.h>
#endif

#include "menuhandl.h"


struct IntuitionBase *IntuitionBase;
struct Library *GfxBase;
struct Library *GadToolsBase;
struct Window *window;


enum { IT_ABOUT = 1, IT_NEW, IT_OPEN, IT_OPENNEW, IT_INSERT,
		IT_SAVE, IT_SAVEAS, IT_GRAB, IT_PRINT, IT_QUIT,
		IT_UNDO, IT_MARK, IT_CUT, IT_COPY, IT_PASTE,
		IT_ERASE, IT_ALL, IT_SEARCH, IT_NEXT, IT_CASE,
		SB_FORWARD, SB_BACKWARD };


struct NewMenu mymenustrip[] =
{
	{ NM_TITLE,	"Project",			0,		0,					0,	(APTR)NULL },
	{  NM_ITEM,	"New",				0,		0,					0,	(APTR)IT_NEW },
	{  NM_ITEM,	NM_BARLABEL, },
	{  NM_ITEM,	"Open...",			"O",	0,					0,	(APTR)IT_OPEN },
	{  NM_ITEM,	"Save",				"S",	0,					0,	(APTR)IT_SAVE },
	{  NM_ITEM,	"Save As...",		"A",	0,					0,	(APTR)IT_SAVEAS },
	{  NM_ITEM,	NM_BARLABEL, },
	{  NM_ITEM,	"Print",			"P",	0,					0,	(APTR)IT_PRINT },
	{  NM_ITEM,	NM_BARLABEL, },
	{  NM_ITEM,	"Quit",				"Q",	0,					0,	(APTR)IT_QUIT },
	{ NM_TITLE,	"Edit",				0,		0,					0,	(APTR)NULL },
	{  NM_ITEM,	"Undo",				"U",	ITEMENABLED,		0,	(APTR)IT_UNDO },
	{  NM_ITEM,	NM_BARLABEL, },
	{  NM_ITEM,	"Mark Block",		"B",	0,					0,	(APTR)IT_MARK },
	{  NM_ITEM,	"Cut",				"X",	ITEMENABLED,		0,	(APTR)IT_CUT },
	{  NM_ITEM,	"Copy",				"C",	ITEMENABLED,		0,	(APTR)IT_COPY },
	{  NM_ITEM,	"Paste",			"V",	0,					0,	(APTR)IT_PASTE },
	{  NM_ITEM,	"Erase",			0,		ITEMENABLED,		0,	(APTR)IT_ERASE },
	{  NM_ITEM,	NM_BARLABEL, },
	{  NM_ITEM,	"Select All",		0,		0,					0,	(APTR)IT_ALL },
	{ NM_TITLE,	"Search",			0,		0,					0,	(APTR)NULL },
	{  NM_ITEM,	"Search...",		"F",	0,					0,	(APTR)IT_SEARCH },
	{  NM_ITEM,	"Search Next",		"N",	ITEMENABLED,		0,	(APTR)IT_NEXT },
	{  NM_ITEM,	"Ignore Case?",		0,		CHECKIT|MENUTOGGLE,	0,	(APTR)IT_CASE },
	{  NM_ITEM,	"Direction",		0,		0,					0,	(APTR)NULL },
	{   NM_SUB,	"Forward",			0,		CHECKIT|CHECKED,	~1,	(APTR)SB_FORWARD },
	{   NM_SUB,	"Backward",			0,		CHECKIT,			~2,	(APTR)SB_BACKWARD },
	{ NM_END, }
};


struct NewWindow newwin =
{
	0,0,640,200,
	-1,-1,
	CLOSEWINDOW,
	WINDOWCLOSE | WINDOWDEPTH | WINDOWDRAG | SMART_REFRESH | NOCAREREFRESH | ACTIVATE,
	NULL,
	NULL,
	"Menu demo window",
	NULL,
	NULL,
	0,0,0,0,
	WBENCHSCREEN,
};


void cleanup(LONG exitcode);


void main(void)
{
struct Menu *menu;

if (!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0)))
	cleanup(RETURN_FAIL);
if (!(GfxBase = OpenLibrary("graphics.library",0)))
	cleanup(RETURN_FAIL);
if (IntuitionBase->LibNode.lib_Version >= 36 &&
		!(GadToolsBase = OpenLibrary("gadtools.library",0)))
	cleanup(RETURN_FAIL);

if (!(window = OpenWindow(&newwin)))
	cleanup(RETURN_FAIL);

if (!(menu = CreateMenuStrip(mymenustrip,window)))
	cleanup(RETURN_FAIL);

SetMenuStrip(window,menu);

WaitPort(window->UserPort);

cleanup(RETURN_OK);
}


void cleanup(LONG exitcode)
{
if (window)
{
	struct Menu *menu;

	menu = window->MenuStrip;
	if (menu)
	{
		ClearMenuStrip(window);
		FreeMenuStrip(menu);
	}
	CloseWindow(window);
}
if (GadToolsBase) CloseLibrary(GadToolsBase);
if (GfxBase) CloseLibrary(GfxBase);
if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);

exit(exitcode);
}
