home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 21 / af021.adf / demo.c < prev    next >
C/C++ Source or Header  |  1978-06-12  |  9KB  |  313 lines

  1. /* _______________________________________________________________________ */
  2.  
  3. /* demo.c main module for the example program */
  4.  
  5. #define  ALLOCATE_GLOBALS
  6.  
  7. #include <ram:general.h>
  8.  
  9. #include <ram:demo.h>
  10.  
  11. extern struct Image Image1;
  12.  
  13. extern struct Image Image2;
  14.  
  15. struct SimpleSprite sprite;
  16.  
  17. WORD g_sprite_number;
  18.  
  19.  
  20. main(void)
  21.  
  22. {           
  23.                            
  24. WORD x=XSTART, y=YSTART;
  25.  
  26. if (begin_block()==TRUE) exit(FALSE); /* grab required resources or quit */
  27.  
  28. LoadRGB4(global_viewport_p,&colourtable,32); ScreenToFront(global_screen_p); 
  29.  
  30. DrawImage(global_rastport_p,&Image1,0,0); /* Draw top of background */
  31.  
  32. DrawImage(global_rastport_p,&Image2,0,118); /* Draw bottom of background */
  33.  
  34. DrawImage(global_rastport_p,&my_name_image,20,200); /* some text */
  35.  
  36. MoveSprite(global_viewport_p,&sprite,x,y); /* position sprite */
  37.  
  38. /* now clear gameport device... */
  39.  
  40. global_gameport_IO_request_p->io_Command=CMD_CLEAR;
  41.  
  42. global_gameport_IO_request_p->io_Flags=IOF_QUICK;
  43.  
  44. DoIO(global_gameport_IO_request_p);
  45.   
  46. /* all we need to do now is collect joystick events... */
  47.  
  48. global_exit_flag=FALSE;
  49.  
  50. do {
  51.    
  52.    global_gameport_IO_request_p->io_Command=GPD_READEVENT;
  53.  
  54.    global_gameport_IO_request_p->io_Length=sizeof(struct InputEvent);;
  55.  
  56.    global_gameport_IO_request_p->io_Data=(APTR)&input_event;
  57.  
  58.    SendIO(global_gameport_IO_request_p); /* asynchronous */
  59.  
  60.    Wait(1<<global_gameport_message_port_p->mp_SigBit);
  61.    
  62.    GetMsg(global_gameport_message_port_p);
  63.  
  64.  
  65.    switch(input_event.ie_Class)
  66.  
  67.        {
  68.  
  69.         /* rough and ready sprite positioning code using 'magic numbers'
  70.            for boundary conditions - OK for example purposes but all
  71.            this sort of stuff should really be #defined... */
  72.  
  73.         case IECLASS_RAWMOUSE: x=x+8*input_event.ie_X; /* ie_X MACRO! */
  74.                                y=y+5*input_event.ie_Y; /* ie_Y MACRO! */
  75.                                if(x<0) x=0; if(x>304) x=304;
  76.                                if(y<0) y=0; if(y>232) y=232; 
  77.                                MoveSprite(global_viewport_p,&sprite,x,y);
  78.                                break;
  79.  
  80.         default:   break;
  81.  
  82.        }
  83.        
  84. if(input_event.ie_Code==IECODE_LBUTTON) global_exit_flag=TRUE;
  85.  
  86. }while(!global_exit_flag);
  87.  
  88. end_block(); /* Logical end of program */
  89.  
  90. }
  91.  
  92. /* _______________________________________________________________________ */
  93.  
  94. BOOL begin_block(void)
  95.  
  96. {   
  97.     
  98. UBYTE i,j; 
  99.  
  100. BOOL error_flag=FALSE;
  101.  
  102. for (i=1;i<=g_resource_vector[0];i++)
  103.  
  104.       { error_flag=allocate_resource(g_resource_vector[i]);
  105.  
  106.         if (error_flag==TRUE)
  107.  
  108.             { for (j=i-1;j>0;j--){deallocate_resource(g_resource_vector[j]);}
  109.  
  110.               i=g_resource_vector[0]+1; /* force exit from 'i' loop */
  111.  
  112.             }
  113.       }
  114.  
  115. return(error_flag);
  116.  
  117. }
  118.  
  119. /* _______________________________________________________________________ */
  120.  
  121. void end_block(void)
  122.  
  123. {
  124.  
  125. UBYTE i;
  126.  
  127. for(i=g_resource_vector[0];i>0;i--){deallocate_resource(g_resource_vector[i]);}
  128.  
  129. }
  130. /* _______________________________________________________________________ */
  131.  
  132. BOOL allocate_resource( UBYTE function_number)
  133.  
  134. {
  135.  
  136. BOOL error_flag=FALSE;
  137.  
  138. switch (function_number) {
  139.  
  140.          case OPEN_INTUITION_LIBRARY:
  141.  
  142.                   if(!(IntuitionBase=(struct IntuitionBase *)
  143.  
  144.                   OpenLibrary("intuition.library",INTUITION_VERSION)))
  145.  
  146.                    {error_flag=TRUE;}
  147.  
  148.                   break;
  149.  
  150.  
  151.          case OPEN_GRAPHICS_LIBRARY:
  152.  
  153.                   if(!(GfxBase=(struct GfxBase *)
  154.  
  155.                   OpenLibrary("graphics.library",GRAPHICS_VERSION)))
  156.  
  157.                    {error_flag=TRUE;}
  158.  
  159.                   break;
  160.  
  161.  
  162.          case OPEN_CUSTOM_SCREEN:
  163.  
  164.                   if(!(global_screen_p=(struct Screen *)OpenScreen(&NewScreen)))
  165.  
  166.                    {error_flag=TRUE;}
  167.  
  168.                    else {
  169.  
  170.                         global_viewport_p=&global_screen_p->ViewPort;
  171.                         global_rastport_p->GelsInfo->sprRsrvd=0x03;
  172.  
  173.                         }
  174.  
  175.                    break;
  176.  
  177.  
  178.          case  OPEN_WINDOW:
  179.  
  180.                   NewWindow.Screen=global_screen_p;
  181.  
  182.                   if(!(global_window_p=(struct Window *)OpenWindow(&NewWindow)))
  183.  
  184.                    {error_flag=TRUE;}
  185.  
  186.                    else {global_rastport_p=global_window_p->RPort;}
  187.  
  188.                    break;
  189.  
  190.  
  191.          case  GET_SPRITE:  if((g_sprite_number=
  192.                             GetSprite(&sprite,SPRITE_NUMBER))==-1)
  193.                             {error_flag=TRUE;}
  194.                              break;
  195.                  
  196.  
  197.          case INSTALL_SPRITE:  sprite.x=XSTART; sprite.y=YSTART; 
  198.                                sprite.height=SPRITE_HEIGHT;
  199.                                ChangeSprite(global_viewport_p, 
  200.                                &sprite, sprite_data);
  201.                                break;
  202.  
  203.  
  204.          case CREATE_REPLY_PORT1:  if(!(global_gameport_message_port_p=
  205.                                    (struct Port *)CreatePort("game_port",0))) 
  206.                                    error_flag=TRUE;
  207.                                    break;
  208.                                    
  209.  
  210.          case CREATE_REQUEST_BLOCK1: if(!(global_gameport_IO_request_p=
  211.                                      (struct IOStdReq *)  
  212.                                      CreateStdIO(global_gameport_message_port_p)))
  213.                                      error_flag=TRUE;
  214.                                      break;
  215.  
  216.  
  217.          case OPEN_GAMEPORT_DEVICE:  if(OpenDevice("gameport.device",1,
  218.                                      global_gameport_IO_request_p,0))
  219.                                      error_flag=TRUE;
  220.                                      break;   
  221.  
  222.          
  223.          case SET_CONTROLLER_TYPE:   
  224.          global_gameport_IO_request_p->io_Command=GPD_ASKCTYPE;
  225.          global_gameport_IO_request_p->io_Flags=IOF_QUICK;
  226.          global_gameport_IO_request_p->io_Length=1;
  227.          global_gameport_IO_request_p->io_Data=(APTR)&global_controller_type;
  228.          DoIO(global_gameport_IO_request_p);
  229.  
  230.          if(global_controller_type==GPCT_NOCONTROLLER)         
  231.            {
  232.            global_controller_type=GPCT_RELJOYSTICK; 
  233.            global_gameport_IO_request_p->io_Command=GPD_SETCTYPE;
  234.            global_gameport_IO_request_p->io_Flags=IOF_QUICK;
  235.            global_gameport_IO_request_p->io_Length=1;
  236.            global_gameport_IO_request_p->io_Data=(APTR)&global_controller_type;
  237.            DoIO(global_gameport_IO_request_p);
  238.            }
  239.          else error_flag=TRUE;
  240.          break;
  241.  
  242.          case SET_GAMEPORT_TRIGGER:
  243.               global_gameport_IO_request_p->io_Command=GPD_SETTRIGGER;
  244.               global_gameport_IO_request_p->io_Flags=IOF_QUICK;
  245.               global_gameport_IO_request_p->io_Length=(LONG)
  246.                                             sizeof(struct GamePortTrigger);
  247.               global_gameport_IO_request_p->io_Data=(APTR)&gameport_trigger;
  248.               DoIO(global_gameport_IO_request_p);
  249.               break;
  250.  
  251.          
  252.          default: error_flag=TRUE; break;
  253.  
  254.                          }
  255. return(error_flag);
  256.  
  257. }
  258.  
  259. /* ______________________________________________________________________ */
  260.  
  261. void deallocate_resource(UBYTE function_number)
  262.  
  263. {
  264.  
  265. switch (function_number) {
  266.  
  267.       case OPEN_INTUITION_LIBRARY:  CloseLibrary(IntuitionBase); break;
  268.  
  269.       case OPEN_GRAPHICS_LIBRARY:   CloseLibrary(GfxBase); break;
  270.  
  271.       case OPEN_CUSTOM_SCREEN:      CloseScreen(global_screen_p); break;
  272.  
  273.       case OPEN_WINDOW:             CloseWindow(global_window_p); break;
  274.  
  275.       case GET_SPRITE:              MoveSprite(NULL,&sprite,320,0);
  276.                                     FreeSprite(g_sprite_number); break;
  277.                                   
  278.       case INSTALL_SPRITE:          break;
  279.  
  280.       case CREATE_REPLY_PORT1:      DeletePort(global_gameport_message_port_p);
  281.                                     break;
  282.                                     
  283.       case CREATE_REQUEST_BLOCK1:   DeleteStdIO(global_gameport_IO_request_p);
  284.                                     break;
  285.  
  286.  
  287.       case OPEN_GAMEPORT_DEVICE:    CloseDevice(global_gameport_IO_request_p);
  288.                                     break;
  289.  
  290.       case SET_CONTROLLER_TYPE:   
  291.               global_controller_type=GPCT_NOCONTROLLER;
  292.               global_gameport_IO_request_p->io_Command=GPD_SETCTYPE;
  293.               global_gameport_IO_request_p->io_Flags=IOF_QUICK;
  294.               global_gameport_IO_request_p->io_Length=1;
  295.               global_gameport_IO_request_p->io_Data=(APTR)&global_controller_type;
  296.               DoIO(global_gameport_IO_request_p);
  297.               break;
  298.  
  299.  
  300.               case SET_GAMEPORT_TRIGGER:       break;
  301.  
  302.  
  303.                  default:                      break;
  304.  
  305.                          }
  306.  
  307. }
  308.  
  309. /* ______________________________________________________________________ */
  310.  
  311.  
  312.  
  313.