home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / sillies / silly1 / !Rippler / c / rippler < prev    next >
Text File  |  1990-03-18  |  3KB  |  154 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #include "wimp.h"        /*  access to WIMP SWIs                      */
  6. #include "wimpt.h"       /*  wimp task facilities                     */
  7. #include "win.h"         /*  registering window handlers              */
  8. #include "event.h"       /*  poll loops, etc                          */
  9. #include "baricon.h"     /*  putting icon on icon bar                 */
  10. #include "template.h"    /*  reading in template file                 */
  11. #include "os.h"          /*  low-level RISCOS access                  */
  12. #include "dbox.h"        /*  dialogue box handling                    */
  13. #include "res.h"
  14. #include "resspr.h"
  15. #include "swis.h"
  16. #include "flex.h"
  17.  
  18. #define NUM_WAVES            20
  19. #define MAX_HEIGHT            15
  20. #define WAVE_WIDTH            60
  21. #define SIZE                (NUM_WAVES * WAVE_WIDTH)
  22.  
  23. #define PI                    3.1415926
  24.  
  25. #define junk(x) (x=x)
  26.  
  27. int rippling = FALSE;
  28. int quit = FALSE;
  29. wimp_w handle;
  30.  
  31. static void toggle_ripple(void)
  32. {
  33.     if (rippling)
  34.         os_cli("ripple 0");
  35.     else
  36.         os_cli("ripple 1");
  37.     rippling = !rippling;
  38. }
  39.  
  40. static void leftclickproc(wimp_i i)
  41. {
  42.     junk(i);
  43.     toggle_ripple();
  44. }
  45.  
  46. static void info_aboutprog(void)
  47. {
  48.     dbox d = dbox_new("ProgInfo");
  49.     dbox_showstatic(d);
  50.     dbox_fillin(d);
  51.     dbox_dispose(&d);
  52. }
  53.  
  54.  
  55. static menu menumaker(void *handle)
  56. {
  57.     menu temp;
  58.     junk(handle);
  59.  
  60.     temp = menu_new("Rippler", ">Info,Ripple,Quit");
  61.     if (rippling)
  62.         menu_setflags(temp, 2, TRUE, FALSE);
  63.     return(temp);
  64. }
  65.  
  66. static void menuproc(void *handle, char *hit)
  67. {
  68.     junk(handle);
  69.     switch(hit[0])
  70.     {
  71.         case 1:
  72.             info_aboutprog();
  73.             break;
  74.         case 2:
  75.             toggle_ripple();
  76.             break;
  77.         case 3:
  78.             quit = TRUE;
  79.             break;
  80.     }
  81. }
  82.  
  83. static BOOL init_waves(void)
  84. {
  85.     int *waves;
  86.     double astep, sstep, angle, size;
  87.     int i;
  88.     os_regset r;
  89.     r.r[0] = 6;
  90.     r.r[2] = (int)NULL;
  91.     r.r[3] = SIZE * 4;
  92.     os_swix(OS_Module, &r);
  93.     if ((int*)r.r[2] == NULL)
  94.         return(FALSE);
  95.     waves = (int*)r.r[2];
  96.     angle = 0.0;
  97.     size = 0.0;
  98.     astep = 2 * PI / WAVE_WIDTH;
  99.     sstep = (double)MAX_HEIGHT / (SIZE / 2);
  100.     for (i = 0; i < SIZE / 2; i++)
  101.     {
  102.         waves[i] = (int)(sin(angle) * size);
  103.         angle += astep;
  104.         size += sstep;
  105.     }
  106.     for (; i < SIZE; i++)
  107.     {
  108.         waves[i] = (int)(sin(angle) * size);
  109.         angle += astep;
  110.         size -= sstep;
  111.     }
  112.     r.r[0] = (int)waves;
  113.     r.r[1] = 0xbb;
  114.     r.r[2] = SIZE;
  115.     os_swix(OS_ServiceCall, &r);
  116.     return(TRUE);
  117. }
  118.  
  119. void closedown(void)
  120. {
  121.     os_cli("ripple 0");
  122. }
  123.     
  124. static BOOL initialise(void)
  125. {
  126.     wimp_wind *window;
  127.     atexit(closedown);
  128.     flex_init();
  129.     wimpt_init("Rippler");
  130.     res_init("Rippler");
  131.     resspr_init();
  132.     template_init();
  133.     dbox_init();
  134.     wimpt_checkmode();
  135.  
  136.     window = template_syshandle("dummywind");
  137.     wimp_create_wind(window, &handle);
  138.  
  139.     baricon("!rippler", (int)resspr_area(), leftclickproc);
  140.     event_attachmenumaker(win_ICONBAR, menumaker, menuproc, NULL);
  141.     event_setmask(wimp_EMPTRENTER|wimp_EMPTRLEAVE);
  142.     return(init_waves());
  143. }
  144.  
  145.  
  146. int main(void)
  147. {
  148.     if (initialise())
  149.     {
  150.         while(!quit)
  151.             event_process();
  152.     }
  153. }
  154.