home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / cdrom / cd32goodies / joypad.c < prev    next >
C/C++ Source or Header  |  1977-12-31  |  2KB  |  95 lines

  1. /*
  2.     joypad.c    check your joypad buttons in scripts
  3.  
  4.     by Daniel Balster.  Example usage:
  5.     
  6.     joypad blue
  7.     if warn
  8.       echo "blue pressed"
  9.     endif
  10.     
  11.     joypad fwd rew
  12.     if warn
  13.       echo "forward&rewind pressed"
  14.     endif
  15.     
  16.     joypad play    ; this could be in your s:startup-sequence ?
  17.     if warn
  18.       cd GAMES:
  19.       GamesMenu
  20.     endif
  21.     
  22.     joypad red green
  23.     if warn
  24.       GFX:3D-View
  25.     endif
  26.  
  27.     (not much comments in it - forgive me)
  28. */
  29.  
  30. #include <exec/exec.h>
  31. #include <dos/dos.h>
  32. #include <libraries/lowlevel.h>
  33. #include <devices/cd.h>
  34. #include <proto/exec.h>
  35. #include <proto/dos.h>
  36. #include <proto/lowlevel.h>
  37.  
  38. #define TEMPLATE "RED/S,BLUE/S,YELLOW/S,GREEN/S,FWD/S,REW/S,PLAY/S,PORT/N,QUIET/S"
  39.  
  40. #define BUTTON_MASK (JPF_BUTTON_RED|JPF_BUTTON_BLUE|JPF_BUTTON_GREEN|JPF_BUTTON_YELLOW \
  41.     |JPF_BUTTON_FORWARD|JPF_BUTTON_REVERSE|JPF_BUTTON_PLAY)            
  42.  
  43. struct abc {
  44.     ULONG    red,blue,yellow,green,fwd,rew,play;
  45.     ULONG    port;
  46.     ULONG    quiet;
  47.     ULONG    pads[7]; /* someone said RDArgs must be sized to a 16-longs boundary ??? */
  48. };
  49.  
  50. int main (void)
  51. {
  52.     struct RDArgs *rdargs;
  53.     struct abc args = {0};
  54.     ULONG bits, port=1, mymask;
  55.     ULONG check = RETURN_OK;
  56.  
  57.     if (rdargs=ReadArgs(TEMPLATE,(LONG*)&(args),NULL))
  58.     {
  59. //        if(!args.quiet)
  60. //            PutStr("*** JoyPad Version 1.0.0 *** by Daniel Balster\n");
  61.  
  62.             if (args.port) port = *(ULONG*)args.port;
  63.  
  64.             bits = ReadJoyPort (port);
  65.             
  66.     //        if ((bits & JP_TYPE_MASK)==JP_TYPE_NOTAVAIL)
  67.     //            PutStr ("port not available\n");
  68.     //        if ((bits & JP_TYPE_MASK)==JP_TYPE_UNKNOWN)
  69.     //            PutStr ("controller type unknown\n");
  70.             
  71.             mymask = 0x00000000;
  72.             
  73.             /* create a bit-set comparison mask */
  74.             
  75.             if (args.red) mymask |= JPF_BUTTON_RED;
  76.             if (args.blue) mymask |= JPF_BUTTON_BLUE;
  77.             if (args.green) mymask |= JPF_BUTTON_GREEN;
  78.             if (args.yellow) mymask |= JPF_BUTTON_YELLOW;
  79.             if (args.fwd) mymask |= JPF_BUTTON_FORWARD;
  80.             if (args.rew) mymask |= JPF_BUTTON_REVERSE;
  81.             if (args.play) mymask |= JPF_BUTTON_PLAY;
  82.             
  83.             /* compare two sets */
  84.             
  85.             if ((bits&BUTTON_MASK) == mymask) check=RETURN_WARN;
  86.  
  87.         //    if (check && !args.quiet) PutStr ("button combination pressed!\n");
  88.  
  89.         FreeArgs(rdargs);
  90.     }
  91.     else PrintFault(IoErr(),0);
  92.  
  93.     return check;
  94. }
  95.