home *** CD-ROM | disk | FTP | other *** search
- /* _______________________________________________________________________ */
-
- /* 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;
-
- }
-
- }
-
- /* ______________________________________________________________________ */
-
-
-
-