/* **********************************************************************  */
/* Filename:      Scroll.c                                                 */
/* Programmer:    Paul Overaa                                              */
/* Date:          10th January 1992                                        */
/* *************************** INCLUDE FILES ***************************** */

#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <graphics/gfxmacros.h>
#include <graphics/copper.h>
#include <hardware/custom.h>
#include <hardware/dmabits.h>
#include <hardware/cia.h>
#include <devices/timer.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>

/* *************************** PROTOTYPES ******************************** */

void ScrollUpwards(void);
void ScrollDownwards(void);
void set_timer(ULONG seconds, ULONG microseconds);
BOOL begin_block(void);
void end_block(void);
BOOL allocate_resource(UBYTE function_number);
void deallocate_resource(UBYTE function_number);

/* *************** GENERAL CONSTANT DEFINITION STATEMENTS **************** */

#define  INTUITION_VERSION            0     
#define  GRAPHICS_VERSION             0
#define  SCREENPLANES                 4    
#define  SCREENWIDTH                640   
#define  SCREENHEIGHT               512
#define  SCROLLHEIGHT               200
#define  MENU_BOX_WIDTH             140
#define  MENU_BOX_HEIGHT             10

/* This stuff comes from a  globals.h file which allows all my global 
   variable statements to be used for both defining and external reference 
   purposes. Unnecessary arrangement in this example because it's a single 
   source file (but kept in just the same). */

#define ALLOCATE_GLOBALS

#ifdef ALLOCATE_GLOBALS

       #define PREFIX
  
#else  

       #define PREFIX extern

#endif

PREFIX struct   IntuitionBase   *IntuitionBase;
PREFIX struct   GfxBase         *GfxBase;
PREFIX struct   Library         *DiskfontBase;
PREFIX struct   Screen          *global_screen_p;
PREFIX struct   Window          *global_window_p;
PREFIX struct   RastPort        *global_rastport_p;
PREFIX struct   View            *global_view_p;
PREFIX struct   ViewPort        *global_viewport_p;
PREFIX struct   MsgPort         *timer_reply_port_p;
PREFIX struct   timerequest     *timer_request_p;

PREFIX BOOL     global_exit_flag;

PREFIX UWORD    *global_copperlist_p;
PREFIX ULONG    bitplanes_copy[SCREENPLANES], g_IDCMP_mask;

extern struct   Custom far custom; /* always external */
extern struct   CIA far ciaa;


/* *************************** Image Data ******************************* */

USHORT chip SMTImageData[] = {
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x000F,0xFFFF,0xFFFC,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0008,0x0000,0x0000,
	0x0000,0x0FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,
	0xC000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4000,
	0x0100,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x007F,0xFFE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0700,0x000E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0008,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0003,0xF000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0003,0xFFC0,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0038,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0008,0x001C,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0003,0xE000,0x07FF,0x8000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0020,0x0001,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0F80,0x1000,0x3800,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x7F80,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0038,0x4000,0x0200,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0002,0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x07E0,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0400,0x1000,0x0000,0x0000,0x0000,0x0044,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x000F,0xC000,0x0000,0x0000,0x0000,0x0848,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x403F,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x2410,0x6000,0x0000,
	0x1E00,0x0000,0x0000,0x0000,0x0000,0x0001,0xFFFF,0xFFF8,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x1BFA,0x8000,0x07E0,
	0x0000,0x0000,0x0000,0x0000,0x1F80,0x0001,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0400,
	0x0080,0x0100,0x0080,0x7E00,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x8000,0x3000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x6803,0x4000,0x0000,
	0x003F,0xFC00,0x003F,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x001F,0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0010,0x0000,0x0000,0x0000,0x0C11,0x8000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x1080,0x4000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0108,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x01C0,0x3800,0x0000,0x0000,0x0008,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0100,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,
	0xF801,0xF800,0x0007,0xFE01,0xF9FF,0x81F8,0x7FFE,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,
	0x0001,0x0000,0x0004,0x0001,0x0100,0x0100,0x4000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0070,0x00E0,0x0000,0x3800,0x0000,0x8000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0040,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0100,0x0008,0x0000,0x0000,0x0000,0x2000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0100,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1FF0,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0200,0x0000,0x0002,0x0400,0x0000,0x0000,0x0200,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00FC,0x0000,0x3800,0xF000,0x0000,0x0000,0x00F0,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0xFFFF,0xFFF8,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0xFFFF,0xFFF8,
	0x0020,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0x807E,0x007F,
	0x8020,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0x807E,0x007F,
	0x83E0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x83E0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00FF,0xFFC0,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00FF,0xFFC0,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0FC0,0x00FC,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0FC0,0x00FC,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x3F00,0x003C,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x3F00,0x003C,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x3F00,0x0000,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x8FC0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x3F00,0x0000,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x83F0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x3F00,0x0000,0x0000,0x0000,0x0000,0x001F,0x801F,0x801F,
	0x83F0,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x3F00,0x0000,0x0000,0x0007,0xFF80,0x001F,0x801F,0x801F,
	0x803F,0xFFC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0FF0,0x0000,0x0000,0x0007,0xFF80,0x0000,0x0000,0x0000,
	0x003F,0xFFC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0FF0,0x0000,0x0000,0x001F,0x81F8,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x003F,0xC000,0x0FFF,0x001F,0x81F8,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x003F,0xC000,0x0FFF,0x007E,0x007E,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0003,0xFF00,0x3F03,0xF07E,0x007E,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0003,0xFF00,0x3F03,0xF07F,0xFFFE,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0FF0,0xFC00,0xFC7F,0xFFFE,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0FF0,0xFC00,0xFC7E,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x00FC,0xFFFF,0xFC7E,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0FC0,0x0000,0x0000,0x0000,0x008C,0x0000,0x0000,
	0x0000,0x00FC,0xFFFF,0xFC7E,0x0000,0x0000,0x0000,0x0000,
	0x0FC0,0x3F00,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,
	0x0000,0x00FC,0xFC00,0x007E,0x0000,0x0000,0x0000,0x0000,
	0x0FC0,0x3F00,0x0000,0x0000,0x0000,0x2800,0x1000,0x0000,
	0x0000,0x00FC,0xFC00,0x001F,0x807E,0x0000,0x0000,0x0000,
	0x03FF,0xFC00,0x0000,0x0000,0x0000,0x2001,0x8000,0x0000,
	0x3C00,0x00FC,0xFC00,0x001F,0x807E,0x0000,0x0000,0x0000,
	0x03FF,0xFC00,0x0000,0x0000,0x0000,0x03F0,0x0000,0x0000,
	0x3C00,0x00FC,0xFC00,0x0007,0xFFF8,0x0003,0xFFFF,0xFFF0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0xC3F0,0x0000,0x0FC0,
	0x3F00,0x03F0,0x3F00,0xFC07,0xFFF8,0x0003,0xFFFF,0xFFF0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0FF0,0xC000,0x0FC0,
	0x3F00,0x03F0,0x3F00,0xFC00,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x03F0,0x0000,0x0FC0,
	0x03FF,0xFF00,0x0FFF,0xF000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x03F0,0x0000,0x0FC0,
	0x03FF,0xFF00,0x0FFF,0xF000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x003F,0x0000,0x0000,0x0000,0x1880,0xC000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x003F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x003F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x003F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x03FF,0xF000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x03FF,0xF000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x003F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0000,0x003F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x000F,0xFC03,0xF3FF,0x03F0,0xFFFC,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x000F,0xFC03,0xF3FF,0x03F0,0xFFFC,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x00FC,0x0FC3,0xFF03,0xF3F0,0x003F,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x00FC,0x0FC3,0xFF03,0xF3F0,0x003F,0x0FC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F0,0x000F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F0,0x000F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F0,0x3FFF,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F0,0x3FFF,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F0,0xFC0F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F0,0xFC0F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F3,0xF00F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0003,
	0xF003,0xF03F,0x03F0,0x03F3,0xF000,0x03F3,0xF00F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0xFC03,0xF03F,0x00FC,0x0FC3,0xF000,0x03F0,0xFC0F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0xFC03,0xF03F,0x00FC,0x0FC3,0xF000,0x03F0,0xFC0F,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0FFF,0xF003,0xF00F,0xFC03,0xF000,0x03F0,0x3FFF,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003F,0x0000,
	0x0FFF,0xF003,0xF00F,0xFC03,0xF000,0x03F0,0x3FFF,0xCFC0,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0007,0xFFFF,0xFFFE,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0006,
	0x2000,0x0FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x0000,0x0007,
	0xE000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x6001,0x8000,
	0x70C0,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x6001,0xE000,
	0x7000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0030,0x0003,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0030,0x0003,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0003,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0003,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x7030,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0000,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x703C,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0000,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x700C,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0000,0x0000,0x0000,0x0000,0x0020,0x6000,0x6000,
	0x700F,0xF030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x00C0,0x0000,0x0000,0x0000,0x0060,0x0000,0x0000,0x0000,
	0x3000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x000C,0x0000,0x0000,0x0000,0x0060,0x0000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x000C,0x0000,0x0000,0x0000,0x6006,0x0000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x3000,0x0000,0xC000,0x6006,0x0000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x3000,0x0000,0xC001,0x8001,0x8000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x00C0,0x00C0,0x0C01,0x8001,0x8000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x00C0,0x00C0,0x0C80,0x0001,0x8000,0x0000,0x0000,
	0x0000,0x0030,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x000C,0x0300,0x0380,0x0001,0x8000,0x0000,0x0000,
	0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x000C,0x0300,0x0381,0x8000,0x0000,0x0000,0x0000,
	0x0000,0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0003,0x0000,0x0381,0x8000,0x0000,0x0000,0x0000,
	0x03F0,0x0000,0x0000,0x0000,0x0000,0x00CC,0x0000,0x0000,
	0x0000,0x0003,0x0000,0x0381,0x8000,0x0000,0x0000,0x0000,
	0x0030,0x00C0,0x0000,0x0000,0x0000,0x0808,0x0000,0x0000,
	0x0000,0x0003,0x0300,0x0001,0x8000,0x0000,0x0000,0x0000,
	0x003F,0xC000,0x0000,0x0000,0x0000,0x2C00,0x3000,0x0000,
	0x0000,0x0003,0x0300,0x0000,0x6001,0x8000,0x0000,0x0000,
	0x0000,0x0300,0x0000,0x0000,0x0000,0x3003,0x8000,0x0000,
	0x0300,0x0003,0x0300,0x0000,0x6001,0x8000,0xFFFF,0xFFFC,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x000C,0x0000,0x03F0,
	0x0300,0x0003,0x0300,0x0000,0x0006,0x0000,0x0000,0x000C,
	0x0000,0x0000,0x0000,0x0000,0x0000,0xC00C,0x1000,0x0030,
	0x00C0,0x000C,0x00C0,0x0300,0x0006,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x4C0D,0xC000,0x0030,
	0x00C0,0x000C,0x00C0,0x0300,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x000C,0x0000,0x0030,
	0x0000,0x00C0,0x0000,0x0C00,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x000F,0xC000,0x0000,0x0000,0x0890,0x8000,0x0030,
	0x0000,0x00C0,0x0000,0x0C00,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0xC000,0x0000,0x0000,0x1880,0xC000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0xC000,0x0000,0x0000,0x0000,0x0000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0xC000,0x0000,0x0000,0x0008,0x0000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x00C0,0xFC00,0x0000,0x0000,0x0000,0x0000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0x0C00,0x0000,0x0000,0x0000,0x0000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0000,0xC000,0x0000,0x0000,0x0000,0x0000,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0xFC00,0xFC00,0xC003,0xFF00,0xFCFF,0xC0FC,0x3FFF,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC000,0x0300,0x0C00,0xC00C,0x0003,0x0030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC030,0x03F0,0x0C00,0xFC0C,0x0003,0xC030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC003,0x0030,0x00C0,0x0C0C,0x0000,0xC030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC000,0x003C,0x0000,0x000C,0x0000,0xF030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0000,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0FF0,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0000,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0000,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0300,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0000,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0C00,0x0C00,0xC00C,0x000C,0x0C00,0x000C,0x0C00,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0F00,0x0C00,0xC00F,0x0000,0x0C00,0x000C,0x0F00,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0300,0x0C00,0xC003,0x0030,0x0C00,0x000C,0x0300,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x03FC,0x0C00,0xFC03,0xF000,0x0C00,0x000C,0x03F0,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,
	0x0000,0x0C00,0x0C00,0x0300,0x0C00,0x000C,0x0000,0x3030,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0040,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x4050,0x4000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0A00,0x4000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0002,0x6000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x3002,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0403,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x2010,0x2000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0188,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};

struct Image SMTImage = {
	0,0,	/* XY origin relative to container TopLeft */
	255,63,	/* Image width and height in pixels */
	4,	/* number of bitplanes in Image */
	SMTImageData,	/* pointer to ImageData */
	0x000F,0x0000,	/* PlanePick and PlaneOnOff */
	NULL	/* next Image structure */
};


/* ************************ COLOUR TABLE ********************************* */

UWORD colourtable[] = {
   0x000, /* copper shaded blue background */
   0x000, /* copper shaded grey */
   0x000, /* black */
   0xF0A, /* purple 1 */
   0x0FF, /* blue-green 1 */
   0xFF0, /* yellow */
   0xF00, /* red */
   0x0F0, /* green */
   0x00F, /* blue */
   0x0EE, /* blue-green 2 */
   0x0AA, /* blue green 3 */
   0x841, /* brown */
   0xF0F, /* purple 2 */
   0xAAA, /* grey 1 */
   0x777, /* grey 2 */
   0xFFF, /* white */
};

/* *************************** MENU 1 DATA ******************************* */


struct IntuiText menutext0={5,0,JAM1,2,1,NULL,"Start",NULL};

struct IntuiText menutext1={5,0,JAM1,2,1,NULL,"Quit",NULL};


struct MenuItem menu_item1 = {
	
        NULL,
        0,10,  /* left edge top edge  */
        MENU_BOX_WIDTH,MENU_BOX_HEIGHT,  /* width height */
        ITEMTEXT|ITEMENABLED|HIGHCOMP, /* flags */
        NULL, /* mutual exclude */
        &menutext1, /* item fill points to an IntuiText structure */
        NULL,  /* select fill */
        NULL,  /* command field */
        NULL,
        NULL
        
};

struct MenuItem menu_item0 = {
	
        &menu_item1,
        0,0,  /* left edge top edge  */
        MENU_BOX_WIDTH,MENU_BOX_HEIGHT,  /* width height */
        ITEMTEXT|ITEMENABLED|HIGHCOMP, /* flags */
        NULL, /* mutual exclude */
        &menutext0, /* item fill points to an IntuiText structure */
        NULL,  /* select fill */
        NULL,  /* command field */
        NULL,
        NULL
        
};

struct Menu menu1 = {
        NULL,
        0,0,  /* left edge top edge */
        120,0,  /* width and height */
        MENUENABLED,
        "FUNCTION",
        &menu_item0
};

/* ************************* TEXT MESSAGES ******************************* */

struct IntuiText intuitext7 = {
     3,0, JAM2,
     100,100,   
     NULL, 
     "      AUI DEMO PROGRAM (WRITTEN BY PAUL OVERAA)", 
     NULL
};

struct IntuiText intuitext6 = {
     4,0, JAM2,
     100,110,   
     NULL, 
     "     In this program you'll find my copper-list", 
     &intuitext7
};

struct IntuiText intuitext5 = {
     5,0, JAM2,
     100,120,   
     NULL, 
     "        shading code, a timer device example,", 
     &intuitext6
};

struct IntuiText intuitext4 = {
     6,0, JAM2,
     100,130,   
     NULL, 
     "  and some Intuition-orientated scrolling routines.", 
     &intuitext5
};

struct IntuiText intuitext3 = {
     7,0, JAM2,
     100,140,   
     NULL, 
     "       If you are now wondering what the program", 
     &intuitext4
};


struct IntuiText intuitext2 = {
     6,0, JAM2,
     100,150, 
     NULL, 
     "                   actually does... ", 
     &intuitext3
};

struct IntuiText intuitext1 = {
     5,0, JAM2,
     100,160,
     NULL, 
     "           * Try using the menu options *", 
     &intuitext2
};

struct IntuiText intuitext0 = {
     4,0, JAM2,
     100,270,   
     NULL, 
     "         Now, to find out how it was written...",
     &intuitext1
};


/* ****************** STRUCTURES FOR SCREEN AND WINDOW ******************* */

struct BitMap bitmap = {0};

struct NewScreen NewScreen = {
   0,0,           /* top left */
   SCREENWIDTH,SCREENHEIGHT, /* width and height */
   SCREENPLANES, /* depth, i.e. the number of bitplanes */
   1,12,          /* detail and block pens */
   HIRES,          /* ViewModes */
   CUSTOMSCREEN+CUSTOMBITMAP, 
   NULL,          /* Accept Default Font */
   NULL,          /* No Title */
   NULL,          /* No Gadgets */
   &bitmap,       /* Pointer to the bitmap structure defined above */
};

struct NewWindow NewWindow = {
   0,0,   /* window XY origin relative to TopLeft of screen */
   SCREENWIDTH,SCREENHEIGHT, /* window width and height */
   -1,-1,   /* detail and block pens same as screen */
   MENUPICK+GADGETUP,   /* IDCMP flags */
   SMART_REFRESH+BORDERLESS+ACTIVATE, /* other window flags */
   NULL,   /* first gadget in gadget list */
   NULL,   /* custom CHECKMARK imagery */
   NULL,   /* window title */
   NULL,   /* custom screen - resource handler sets this up */
   NULL,   /* custom bitmap */
   0,0, /* minimum width and height */
   0,0, /* maximum width and height */
   CUSTOMSCREEN   /* destination screen type */
};

/* *************** AMIGA RESOURCE "FUNCTION NUMBERS" ********************* */

#define  OPEN_INTUITION_LIBRARY        1
#define  OPEN_GRAPHICS_LIBRARY         2
#define  RASTER_ALLOCATION             3
#define  OPEN_CUSTOM_SCREEN           12
#define  OPEN_WINDOW                  13
#define  CREATE_TIMER_REPLY_PORT      16
#define  CREATE_TIMER_REQUEST_BLOCK   17
#define  OPEN_TIMER                   18

UBYTE  resource_vector[9] = {8,    /* count of operation labels to follow */
                            OPEN_INTUITION_LIBRARY,
                            OPEN_GRAPHICS_LIBRARY,
                            RASTER_ALLOCATION,
                            OPEN_CUSTOM_SCREEN,
                            OPEN_WINDOW,
                            CREATE_TIMER_REPLY_PORT,
                            CREATE_TIMER_REQUEST_BLOCK,
                            OPEN_TIMER
                           };

main()

{

ULONG  BlueColour=0, GreenColour=0, j, class, item_number;
struct IntuiMessage *message; UWORD code;
struct UCopList *c;

if (begin_block()==TRUE) exit(FALSE); /* grab required resources or quit */

LoadRGB4(global_viewport_p,&colourtable,16); ScreenToFront(global_screen_p); 

c=(struct UCopList *)AllocMem(12L,MEMF_CHIP|MEMF_PUBLIC|MEMF_CLEAR); 

CINIT(c,((SCREENHEIGHT/2)*3)+1);

for (j=0;j<SCREENHEIGHT/2;j++)

    {   (j/15) % 2 ? BlueColour-- : BlueColour++;

        (j/4) % 2 ? GreenColour-- : GreenColour++;

        CWAIT(c,j,0L); CMOVE(c,custom.color[0],BlueColour);

        CMOVE(c,custom.color[2],((GreenColour+11)<<4)+GreenColour+11
        +((GreenColour+11)<<8));

    }

CEND(c); global_viewport_p->UCopIns=c;

MakeScreen(global_screen_p); RethinkDisplay();

global_view_p=(struct View *)ViewAddress(); 

global_copperlist_p=global_view_p->LOFCprList->start;

while((*global_copperlist_p)!=0x00e0) {global_copperlist_p+=2;}
	   
global_copperlist_p++; /* move to second word in that first 0x00e0 instruction */    

SetRast(global_rastport_p,0);

DrawImage(global_rastport_p,&SMTImage,200,280);

PrintIText(global_rastport_p,&intuitext0,0,0);

SetMenuStrip(global_window_p,&menu1);

/* ======================================================================= */
/*                    M A I N - M E N U - B L O C K                        */
/* ----------------------------------------------------------------------- */

      global_exit_flag=FALSE;

      g_IDCMP_mask=(1<<global_window_p->UserPort->mp_SigBit);

      do {Wait(g_IDCMP_mask); message=GetMsg(global_window_p->UserPort);

         do{
            class=message->Class; code=message->Code;
            ReplyMsg(message);

            switch  (class) {
                             case MENUPICK: item_number=ITEMNUM(code);			     
                             
                             break;

                             default: break;
                            }

           message=GetMsg(global_window_p->UserPort);

           }while(message);


         switch(item_number)
     
          {

          case 0:
     
           ClearMenuStrip(global_window_p,&menu1); 

           ScrollUpwards();

           ScrollDownwards();

           SetMenuStrip(global_window_p,&menu1);

           break;

          case 1: global_exit_flag=TRUE; break;
      
          default: break; 
                               
       }		       
			       
      }while(!global_exit_flag);

ClearMenuStrip(global_window_p,&menu1);

end_block(); /* Logical end of the program */

}

/* ======================================================================= */
void ScrollUpwards(void)

{

UWORD low, high, *copperlist_copy_p; WORD j, k;


for (j=0;j<SCREENPLANES;j++) {bitplanes_copy[j]=(ULONG)bitmap.Planes[j];}
       
for(k=0;k<SCROLLHEIGHT;k++)           

  {

   copperlist_copy_p=global_copperlist_p;

   WaitBOVP(global_view_p);

   Disable();

   for (j=0;j<SCREENPLANES;j++)

     {
  
      bitplanes_copy[j]+=80;
     
      low=((ULONG)bitplanes_copy[j])&0xFFFF; 

      high=((ULONG)bitplanes_copy[j])>>16;

      *copperlist_copy_p=high;copperlist_copy_p+=2; /* bump by two words */
         
      *copperlist_copy_p=low; copperlist_copy_p+=2; /* ditto */  
   
     }
   
   Enable();

   set_timer(0,20000);

  } 

}
/* ======================================================================= */
void ScrollDownwards(void)

{

UWORD low, high, *copperlist_copy_p; WORD j, k;

for (j=0;j<SCREENPLANES;j++) 
     
         {bitplanes_copy[j]=((ULONG)bitmap.Planes[j])+80*(SCROLLHEIGHT);}

           
for(k=0;k<SCROLLHEIGHT;k++)

  {

   copperlist_copy_p=global_copperlist_p;

   WaitBOVP(global_view_p);

   Disable();

   for (j=0;j<SCREENPLANES;j++)

     {
  
      bitplanes_copy[j]-=80;
     
      low=((ULONG)bitplanes_copy[j])&0xFFFF; 

      high=((ULONG)bitplanes_copy[j])>>16;
   
      *copperlist_copy_p=high;copperlist_copy_p+=2; /* bump by two words */
         
      *copperlist_copy_p=low; copperlist_copy_p+=2; /* ditto */  
      
     }

   Enable();

   set_timer(0,20000);

  }

}

/* ----------------------------------------------------------------------- */

void set_timer(ULONG seconds, ULONG microseconds)

{

if(seconds==0 && microseconds<2) {return;}

else { 

       timer_request_p->tr_node.io_Command=TR_ADDREQUEST;

       timer_request_p->tr_time.tv_secs=seconds;

       timer_request_p->tr_time.tv_micro=microseconds;

       DoIO(timer_request_p);

     }

}

/* ======================================================================= */

/* The following routines handle all the resources I need, ie they're      */
/* used to open and close libraries/screens etc.                           */ 
/* _______________________________________________________________________ */

BOOL begin_block(void)

{

UBYTE i,j; BOOL error_flag=FALSE;

for (i=1;i<=resource_vector[0];i++)

      { error_flag=allocate_resource(resource_vector[i]);

        if (error_flag==TRUE)

            { for (j=i-1;j>0;j--){deallocate_resource(resource_vector[j]);}

              i=resource_vector[0]+1; /* force exit from 'i' loop */

            }
      }

return(error_flag);

}
/* _______________________________________________________________________ */

void end_block(void)

{

UBYTE i;

for(i=resource_vector[0];i>0;i--){deallocate_resource(resource_vector[i]);}

}
/* _______________________________________________________________________ */

BOOL allocate_resource(UBYTE function_number)

{

BOOL error_flag=FALSE; UBYTE i, j;

switch (function_number) {

         case OPEN_INTUITION_LIBRARY:

                  if((IntuitionBase=(struct IntuitionBase *)
                  OpenLibrary("intuition.library",INTUITION_VERSION))==NULL)
                   {error_flag=TRUE;}
                  break;

         case OPEN_GRAPHICS_LIBRARY:

                  if((GfxBase=(struct GfxBase *)
                  OpenLibrary("graphics.library",GRAPHICS_VERSION))==NULL)
                   {error_flag=TRUE;}
                  break;

         case RASTER_ALLOCATION:

                  InitBitMap(&bitmap,SCREENPLANES,SCREENWIDTH,SCREENHEIGHT);

                  for (i=0;i<SCREENPLANES;i++)
                      {
                       if ((bitmap.Planes[i]=(PLANEPTR)AllocRaster
                           (SCREENWIDTH,SCREENHEIGHT))==NULL)

                             {
                              for(j=i-1;j>=0;j--){FreeRaster(bitmap.Planes[j],
                                                  SCREENWIDTH,SCREENHEIGHT);}
                              i=SCREENPLANES;error_flag=TRUE;
                             }
                      }

                  break;


         case OPEN_CUSTOM_SCREEN:

                  if((global_screen_p=(struct Screen *)OpenScreen(&NewScreen))==NULL)
                   {error_flag=TRUE;}
                   else {global_viewport_p=&global_screen_p->ViewPort;}
                   break;

         case  OPEN_WINDOW:

                  NewWindow.Screen=global_screen_p;
                  if((global_window_p=(struct Window *)OpenWindow(&NewWindow))==NULL)
                   {error_flag=TRUE;}
                   else {global_rastport_p=global_window_p->RPort;}
                   break;

         case  CREATE_TIMER_REPLY_PORT:

                   if((timer_reply_port_p=(struct Port *)
                   CreatePort(TIMERNAME,0))==NULL)
                   {error_flag=TRUE;}
                   break;

         case  CREATE_TIMER_REQUEST_BLOCK:

                   timer_request_p=(struct timerequest *)
                   CreateExtIO(timer_reply_port_p,
                   sizeof(struct timerequest));
                   if (timer_request_p==NULL) {error_flag=TRUE;}
                   break;


         case  OPEN_TIMER: 

                   if((OpenDevice(TIMERNAME,UNIT_MICROHZ,timer_request_p,0))!=NULL) 
		   {error_flag=TRUE;}
                   break;


         default: error_flag=TRUE; break;

                         }
return(error_flag);

}

/* ______________________________________________________________________ */

void deallocate_resource(UBYTE function_number)

{

UBYTE i;

switch (function_number) {

    case OPEN_INTUITION_LIBRARY:      CloseLibrary(IntuitionBase); break;

    case OPEN_GRAPHICS_LIBRARY:       CloseLibrary(GfxBase); break;

    case RASTER_ALLOCATION:           for (i=0;i<SCREENPLANES;i++)
                                       {FreeRaster(bitmap.Planes[i],SCREENWIDTH,
                                       SCREENHEIGHT);}
                                       break;

    case OPEN_CUSTOM_SCREEN:          CloseScreen(global_screen_p); break;

    case OPEN_WINDOW:                 CloseWindow(global_window_p); break;

    case CREATE_TIMER_REPLY_PORT:     DeletePort(timer_reply_port_p); break;

    case CREATE_TIMER_REQUEST_BLOCK:  DeleteExtIO(timer_request_p,
                                      sizeof(struct timerequest)); break;

    case OPEN_TIMER:                  CloseDevice(timer_request_p); break;

    default:                          break;

                         }

}

/* ===================================================================== */




