home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
505b.lha
/
Ham_e_library
/
StrokeDemo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-05
|
14KB
|
594 lines
#include <intuition/intuition.h>
#include <exec/types.h>
#include <exec/execbase.h>
#include <graphics/text.h>
#include <proto/exec.h>
#include <proto/graphics.h>
#include "hame_pragmas.h"
#include "HameStruct.h"
#include "HameProtos.h"
#include "HameRev.h"
/* */
#include <string.h>
#include <exec/memory.h>
#include <exec/tasks.h>
#include <graphics/view.h>
#include <graphics/gfx.h>
#include <graphics/rastport.h>
#include <proto/intuition.h>
/* */
struct Library *HameBase;
struct HamePort *HamePort;
extern struct Screen *OpenScreen();
extern struct Window *OpenWindow();
extern struct ExecBase *SysBase; /* These are all pointers to system */
struct IntuitionBase *IntuitionBase; /* These are all pointers to system */
struct GfxBase *GfxBase; /* data structures I need access to */
struct Screen *screen;
struct Window *window;
struct Clip *clip;
UBYTE *ptr1, *ptr2;
long ptsize;
#define WIDTH 640
#define HEIGHT 200
struct NewScreen my_screen =
{
0, 0, WIDTH, HEIGHT,
4,
0, 1,
HIRES,
CUSTOMSCREEN,
(struct TextAttr *) NULL,
NULL,
NULL, NULL
};
struct NewWindow my_window =
{
0, 2, WIDTH, HEIGHT-2,
(UBYTE) 0, (UBYTE) 15,
MOUSEBUTTONS
| INTUITICKS | CLOSEWINDOW,
SMART_REFRESH
| BACKDROP
| ACTIVATE
| NOCAREREFRESH
| REPORTMOUSE
| RMBTRAP | WINDOWCLOSE,
NULL, NULL,
"Black Belt Systems hame.library DEMO - Programming: Pete Patterson",
NULL, NULL,
0, 0, 0, 0,
CUSTOMSCREEN
};
UBYTE apat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1}
};
UBYTE bpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255, 1, 1}
};
UBYTE cpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255,255,255,255, 1, 1}
};
UBYTE dpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255, 1, 1}
};
UBYTE epat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1}
};
UBYTE fpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1}
};
UBYTE gpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1,255,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255,255,255,255, 1, 1}
};
UBYTE hpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1}
};
UBYTE ipat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1,255,255,255, 1, 1, 1}
};
UBYTE jpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1, 1,255,255,255, 1, 1},
{ 1, 1, 1, 1,255, 1, 1, 1},
{ 1, 1, 1, 1,255, 1, 1, 1},
{ 1, 1, 1, 1,255, 1, 1, 1},
{ 1,255, 1, 1,255, 1, 1, 1},
{ 1,255, 1, 1,255, 1, 1, 1},
{ 1, 1,255,255, 1, 1, 1, 1}
};
UBYTE kpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1,255, 1, 1},
{ 1,255, 1, 1, 1,255, 1, 1},
{ 1,255, 1, 1,255, 1, 1, 1},
{ 1,255,222,255, 1, 1, 1, 1},
{ 1,255, 1, 1,255, 1, 1, 1},
{ 1,255, 1, 1, 1,255, 1, 1},
{ 1,255, 1, 1, 1,255, 1, 1}
};
UBYTE lpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1}
};
UBYTE mpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255, 1, 1,255,255, 1},
{ 1,255,255,255,255,255,255, 1},
{ 1,255, 1,255,255, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1}
};
UBYTE npat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255, 1, 1, 1,255, 1},
{ 1,255,255,255, 1, 1,255, 1},
{ 1,255, 1,255,255, 1,255, 1},
{ 1,255, 1, 1,255,255,255, 1},
{ 1,255, 1, 1, 1,255,255, 1}
};
UBYTE opat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255,255,255,255, 1, 1}
};
UBYTE ppat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1, 1, 1}
};
UBYTE qpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1,255,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255,255,255,255, 1,255}
};
UBYTE rpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1}
};
UBYTE spat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1, 1, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1, 1, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255,255,255,255, 1, 1}
};
UBYTE tpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1},
{ 1, 1, 1,255, 1, 1, 1, 1}
};
UBYTE upat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255,255,255,255, 1, 1}
};
UBYTE vpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255, 1, 1,255, 1, 1},
{ 1, 1,255, 1, 1,255, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1}
};
UBYTE wpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1,255,255, 1,255, 1},
{ 1,255,255,255,255,255,255, 1},
{ 1,255,255, 1, 1,255,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1}
};
UBYTE xpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1, 1,255, 1, 1,255, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1},
{ 1, 1,255, 1, 1,255, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1}
};
UBYTE ypat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255, 1, 1, 1, 1,255, 1},
{ 1,255,255, 1, 1,255,255, 1},
{ 1, 1,255,255,255,255, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1}
};
UBYTE zpat[8][8] = {
{ 1, 1, 1, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255,255, 1},
{ 1, 1, 1, 1, 1,255,255, 1},
{ 1, 1, 1, 1,255,255, 1, 1},
{ 1, 1, 1,255,255, 1, 1, 1},
{ 1, 1,255,255, 1, 1, 1, 1},
{ 1,255,255, 1, 1, 1, 1, 1},
{ 1,255,255,255,255,255,255, 1}
};
UBYTE *letters[] = {
&apat[0][0],
&bpat[0][0],
&cpat[0][0],
&dpat[0][0],
&epat[0][0],
&fpat[0][0],
&gpat[0][0],
&hpat[0][0],
&ipat[0][0],
&jpat[0][0],
&kpat[0][0],
&lpat[0][0],
&mpat[0][0],
&npat[0][0],
&opat[0][0],
&ppat[0][0],
&qpat[0][0],
&rpat[0][0],
&spat[0][0],
&tpat[0][0],
&upat[0][0],
&vpat[0][0],
&wpat[0][0],
&xpat[0][0],
&ypat[0][0],
&zpat[0][0]
};
/*
Clean up and exit
*/
void CloseStuff()
{
struct Library *result;
if (clip) HAME_DisposeClip(clip);
if (ptr1) FreeMem(ptr1, ptsize);
if (window) CloseWindow(window);
if (screen) CloseScreen(screen);
if (HamePort) HAME_Dispose(HamePort);
if (HameBase) CloseLibrary(HameBase);
if (GfxBase) CloseLibrary(GfxBase);
if (IntuitionBase) CloseLibrary(IntuitionBase);
Forbid();
if ( (result = (struct Library *)
FindName(&SysBase->LibList,"hame.library")) != NULL )
{
RemLibrary(result);
}
Permit();
exit(0);
}
/*
Draw a vertical column of pixels at the left margin to prevent hame from
turning off.
*/
void DrawLeftMargin()
{
int i;
HAME_SetAPen( HamePort, 1 );
for ( i = 0; i < 200; i++ )
{
HAME_WritePixel( HamePort, 0, i);
}
}
/*
Initialize the palette to a grey, a red, a green and a blue scale
Note that the four groups are intermingled, and not separate groups
*/
void palette1()
{
int i, j, r;
j = 1;
for ( i = 0; i < 64; i++ )
{
r = i << 2;
HAME_SetRGB8(HamePort, j++, r, r, r);
HAME_SetRGB8(HamePort, j++, r, 0, 0);
HAME_SetRGB8(HamePort, j++, 0, r, 0);
HAME_SetRGB8(HamePort, j++, 0, 0, r);
}
}
void DoLetter()
{
int l, x, y, c,q,s,e,d;
UBYTE *ptr;
l = rand() % 26;
x = rand() % 41;
y = rand() % 25;
c = rand() % 251;
s = (rand() % 253)+2;
e = (rand() % 253)+2;
d = rand() % 255;
ptr = letters[l];
for (q = 0; q < 64; q++)
{
if (*(ptr+q) != 1)
{
*(ptr+q) = c + 4;
}
}
HAME_8BitRender(HamePort, ptr, x << 3, y << 3, 8, 8);
if ((d > 32) && (d < 64))
{
HAME_CycleLeft(HamePort, s, e);
}
}
/*
Main routine
*/
int main(argc, argv)
int argc;
char *argv[];
{
ULONG msg_class;
USHORT msg_code;
int finished=0;
struct IntuiMessage *message;
struct Gadget *gadget;
if ((IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library",33L))==NULL)
{
CloseStuff();
}
if ((GfxBase = (struct GfxBase *)
OpenLibrary("graphics.library" , 0L))==NULL)
{
CloseStuff();
}
/* Open the hame library */
if ((HameBase = (struct Library *)
OpenLibrary("hame.library",HAMELIB_VERSION)) == NULL)
{
printf("No hame.library\n");
CloseStuff();
}
/* Get a screen to play with */
if ((screen = OpenScreen(&my_screen)) ==NULL)
{
CloseStuff();
}
my_window.Screen = screen;
/* Get a window to play with */
if ((window = OpenWindow(&my_window)) == NULL)
{
CloseStuff();
}
ShowTitle( screen, 0 );
/* Tell the library where to put pixels */
if ((HamePort = HAME_Init(screen, 640, 400, 400, 0, 12, 4, 184)) == NULL)
{
CloseStuff();
}
/* Set the pallette */
palette1();
/* Keep hame from turning off because of screen wide color 0 */
DrawLeftMargin();
while( !finished )
{
message = (struct IntuiMessage *) GetMsg(window->UserPort);
if (message)
{
msg_class = message->Class;
msg_code = message->Code;
gadget = (struct Gadget *) message->IAddress;
ReplyMsg((struct Message *)message);
switch( msg_class )
{
case MOUSEBUTTONS:
break;
case INTUITICKS:
HAME_SetRGB8(HamePort, (rand() % 251)+4, (rand() % 253)+2,
(rand() % 255)+1, (rand() % 251)+4);
break;
case CLOSEWINDOW:
finished = 1;
break;
default:
printf("?");
}
}
else
{
DoLetter();
}
}
while ((message = (struct IntuiMessage *)
GetMsg( window->UserPort )) != NULL)
{
ReplyMsg((struct Message *)message);
}
CloseStuff();
}