home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format 21
/
af021.adf
/
demo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1978-06-12
|
9KB
|
313 lines
/* _______________________________________________________________________ */
/* demo.c main module for the example program */
#define ALLOCATE_GLOBALS
#include <ram:general.h>
#include <ram:demo.h>
extern struct Image Image1;
extern struct Image Image2;
struct SimpleSprite sprite;
WORD g_sprite_number;
main(void)
{
WORD x=XSTART, y=YSTART;
if (begin_block()==TRUE) exit(FALSE); /* grab required resources or quit */
LoadRGB4(global_viewport_p,&colourtable,32); ScreenToFront(global_screen_p);
DrawImage(global_rastport_p,&Image1,0,0); /* Draw top of background */
DrawImage(global_rastport_p,&Image2,0,118); /* Draw bottom of background */
DrawImage(global_rastport_p,&my_name_image,20,200); /* some text */
MoveSprite(global_viewport_p,&sprite,x,y); /* position sprite */
/* now clear gameport device... */
global_gameport_IO_request_p->io_Command=CMD_CLEAR;
global_gameport_IO_request_p->io_Flags=IOF_QUICK;
DoIO(global_gameport_IO_request_p);
/* all we need to do now is collect joystick events... */
global_exit_flag=FALSE;
do {
global_gameport_IO_request_p->io_Command=GPD_READEVENT;
global_gameport_IO_request_p->io_Length=sizeof(struct InputEvent);;
global_gameport_IO_request_p->io_Data=(APTR)&input_event;
SendIO(global_gameport_IO_request_p); /* asynchronous */
Wait(1<<global_gameport_message_port_p->mp_SigBit);
GetMsg(global_gameport_message_port_p);
switch(input_event.ie_Class)
{
/* rough and ready sprite positioning code using 'magic numbers'
for boundary conditions - OK for example purposes but all
this sort of stuff should really be #defined... */
case IECLASS_RAWMOUSE: x=x+8*input_event.ie_X; /* ie_X MACRO! */
y=y+5*input_event.ie_Y; /* ie_Y MACRO! */
if(x<0) x=0; if(x>304) x=304;
if(y<0) y=0; if(y>232) y=232;
MoveSprite(global_viewport_p,&sprite,x,y);
break;
default: break;
}
if(input_event.ie_Code==IECODE_LBUTTON) global_exit_flag=TRUE;
}while(!global_exit_flag);
end_block(); /* Logical end of program */
}
/* _______________________________________________________________________ */
BOOL begin_block(void)
{
UBYTE i,j;
BOOL error_flag=FALSE;
for (i=1;i<=g_resource_vector[0];i++)
{ error_flag=allocate_resource(g_resource_vector[i]);
if (error_flag==TRUE)
{ for (j=i-1;j>0;j--){deallocate_resource(g_resource_vector[j]);}
i=g_resource_vector[0]+1; /* force exit from 'i' loop */
}
}
return(error_flag);
}
/* _______________________________________________________________________ */
void end_block(void)
{
UBYTE i;
for(i=g_resource_vector[0];i>0;i--){deallocate_resource(g_resource_vector[i]);}
}
/* _______________________________________________________________________ */
BOOL allocate_resource( UBYTE function_number)
{
BOOL error_flag=FALSE;
switch (function_number) {
case OPEN_INTUITION_LIBRARY:
if(!(IntuitionBase=(struct IntuitionBase *)
OpenLibrary("intuition.library",INTUITION_VERSION)))
{error_flag=TRUE;}
break;
case OPEN_GRAPHICS_LIBRARY:
if(!(GfxBase=(struct GfxBase *)
OpenLibrary("graphics.library",GRAPHICS_VERSION)))
{error_flag=TRUE;}
break;
case OPEN_CUSTOM_SCREEN:
if(!(global_screen_p=(struct Screen *)OpenScreen(&NewScreen)))
{error_flag=TRUE;}
else {
global_viewport_p=&global_screen_p->ViewPort;
global_rastport_p->GelsInfo->sprRsrvd=0x03;
}
break;
case OPEN_WINDOW:
NewWindow.Screen=global_screen_p;
if(!(global_window_p=(struct Window *)OpenWindow(&NewWindow)))
{error_flag=TRUE;}
else {global_rastport_p=global_window_p->RPort;}
break;
case GET_SPRITE: if((g_sprite_number=
GetSprite(&sprite,SPRITE_NUMBER))==-1)
{error_flag=TRUE;}
break;
case INSTALL_SPRITE: sprite.x=XSTART; sprite.y=YSTART;
sprite.height=SPRITE_HEIGHT;
ChangeSprite(global_viewport_p,
&sprite, sprite_data);
break;
case CREATE_REPLY_PORT1: if(!(global_gameport_message_port_p=
(struct Port *)CreatePort("game_port",0)))
error_flag=TRUE;
break;
case CREATE_REQUEST_BLOCK1: if(!(global_gameport_IO_request_p=
(struct IOStdReq *)
CreateStdIO(global_gameport_message_port_p)))
error_flag=TRUE;
break;
case OPEN_GAMEPORT_DEVICE: if(OpenDevice("gameport.device",1,
global_gameport_IO_request_p,0))
error_flag=TRUE;
break;
case SET_CONTROLLER_TYPE:
global_gameport_IO_request_p->io_Command=GPD_ASKCTYPE;
global_gameport_IO_request_p->io_Flags=IOF_QUICK;
global_gameport_IO_request_p->io_Length=1;
global_gameport_IO_request_p->io_Data=(APTR)&global_controller_type;
DoIO(global_gameport_IO_request_p);
if(global_controller_type==GPCT_NOCONTROLLER)
{
global_controller_type=GPCT_RELJOYSTICK;
global_gameport_IO_request_p->io_Command=GPD_SETCTYPE;
global_gameport_IO_request_p->io_Flags=IOF_QUICK;
global_gameport_IO_request_p->io_Length=1;
global_gameport_IO_request_p->io_Data=(APTR)&global_controller_type;
DoIO(global_gameport_IO_request_p);
}
else error_flag=TRUE;
break;
case SET_GAMEPORT_TRIGGER:
global_gameport_IO_request_p->io_Command=GPD_SETTRIGGER;
global_gameport_IO_request_p->io_Flags=IOF_QUICK;
global_gameport_IO_request_p->io_Length=(LONG)
sizeof(struct GamePortTrigger);
global_gameport_IO_request_p->io_Data=(APTR)&gameport_trigger;
DoIO(global_gameport_IO_request_p);
break;
default: error_flag=TRUE; break;
}
return(error_flag);
}
/* ______________________________________________________________________ */
void deallocate_resource(UBYTE function_number)
{
switch (function_number) {
case OPEN_INTUITION_LIBRARY: CloseLibrary(IntuitionBase); break;
case OPEN_GRAPHICS_LIBRARY: CloseLibrary(GfxBase); break;
case OPEN_CUSTOM_SCREEN: CloseScreen(global_screen_p); break;
case OPEN_WINDOW: CloseWindow(global_window_p); break;
case GET_SPRITE: MoveSprite(NULL,&sprite,320,0);
FreeSprite(g_sprite_number); break;
case INSTALL_SPRITE: break;
case CREATE_REPLY_PORT1: DeletePort(global_gameport_message_port_p);
break;
case CREATE_REQUEST_BLOCK1: DeleteStdIO(global_gameport_IO_request_p);
break;
case OPEN_GAMEPORT_DEVICE: CloseDevice(global_gameport_IO_request_p);
break;
case SET_CONTROLLER_TYPE:
global_controller_type=GPCT_NOCONTROLLER;
global_gameport_IO_request_p->io_Command=GPD_SETCTYPE;
global_gameport_IO_request_p->io_Flags=IOF_QUICK;
global_gameport_IO_request_p->io_Length=1;
global_gameport_IO_request_p->io_Data=(APTR)&global_controller_type;
DoIO(global_gameport_IO_request_p);
break;
case SET_GAMEPORT_TRIGGER: break;
default: break;
}
}
/* ______________________________________________________________________ */