home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / colour / modesel_1 / !ModeSel / c / Icon_Bar < prev    next >
Text File  |  1994-06-20  |  3KB  |  148 lines

  1. #include "Icon_Bar.h"
  2.  
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. #include "string.h"
  6. #include "osbyte.h"
  7. #include "os.h"
  8.  
  9. void bar_sprite(osspriteop_area *sa, int *barMode);
  10. void bar_icon(osspriteop_area *sa, wimp_i *barIc);
  11. bool hiRes(int mode);
  12.  
  13. bool hiRes(int mode)
  14. {
  15.   int var_val;
  16.  
  17.   os_read_mode_variable ((os_mode) mode, 5, &var_val);
  18.   return(var_val ==1);
  19. }
  20.  
  21.  
  22.  
  23. void bar_sprite(osspriteop_area *sa, int *barMode)
  24. {
  25.    char    SMode[4];
  26.    int     r0, r1, r2, r3;
  27.    bool    hi;
  28.  
  29.  
  30.    os_byte ( osbyte_SCREEN_CHAR,0,0,NULL,barMode);
  31.  
  32.    sprintf(SMode,"%d",*barMode);
  33.    hi =hiRes(*barMode);
  34.  
  35.    osspriteop_delete_sprite ( osspriteop_NAME,
  36.                         sa,
  37.                               (osspriteop_id) "bar2");
  38.    if(hi)
  39.      osspriteop_copy_sprite   ( osspriteop_NAME,
  40.                        sa,
  41.                        (osspriteop_id) "b27",
  42.                        "bar2");
  43.    else
  44.      osspriteop_copy_sprite   ( osspriteop_NAME,
  45.                        sa,
  46.                        (osspriteop_id) "b12",
  47.                        "bar2");
  48.  
  49.    osspriteop_switch_output_to_sprite ( osspriteop_NAME,
  50.                                         sa,
  51.                                         (osspriteop_id) "bar2",
  52.                                         NULL,
  53.                                         &r0, &r1, &r2, &r3);
  54.  
  55.    os_writec (5);
  56.    os_writec (18);
  57.    os_writec (0);
  58.    os_writec (0);
  59.  
  60.    if(hi)
  61.    {
  62.      os_writec (23);
  63.      os_writec (17);
  64.      os_writec (7);
  65.      os_writec (2);
  66.      os_writec (8);
  67.      os_writec (0);
  68.      os_writec (16);
  69.      os_writec (0);
  70.      os_writec (0);
  71.      os_writec (0);
  72.    }
  73.  
  74.    os_plot (4,(40-strlen(SMode)*8),55); /* move g cursor */
  75.  
  76.    os_write0 (SMode);
  77.  
  78.    os_writec (4);
  79.  
  80.    osspriteop_unswitch_output (r0, r1, r2, r3);
  81. }
  82.  
  83. void bar_icon(osspriteop_area *sa, wimp_i *barIc)
  84. {
  85.    wimp_icon_create IcCre;
  86.  
  87.    IcCre.icon.extent.y0 = 0;
  88.    IcCre.icon.extent.y1 = 80;
  89.    IcCre.icon.extent.x0 = 0;
  90.    IcCre.icon.extent.x1 = 80;
  91.    IcCre.icon.flags        = 0x1700311a;
  92.    IcCre.w                 = wimp_ICON_BAR_RIGHT_LOW_PRIORITY;
  93.  
  94.    IcCre.icon.data.indirected_sprite.id=(osspriteop_id) malloc(10);
  95.    sprintf((char *) IcCre.icon.data.indirected_sprite.id,"bar2");
  96.    IcCre.icon.data.indirected_sprite.area = sa;
  97.    IcCre.icon.data.indirected_sprite.size=5;
  98.  
  99.  
  100.    *barIc=0x20000000+1;
  101.  
  102.  
  103.    *barIc =  wimp_create_icon_relative (*barIc,&IcCre);
  104. }
  105.  
  106.  
  107. void update_bar_icon(osspriteop_area *sa, wimp_i *barIc, int *barMode )
  108. {
  109.    wimp_icon_state icon_state;
  110.    wimp_i          ic=*barIc;
  111.  
  112.    bar_sprite(sa, barMode);
  113.    bar_icon(sa,barIc);
  114.  
  115.    icon_state.w = (wimp_w) wimp_ICON_BAR_RIGHT_LOW_PRIORITY;
  116.    icon_state.i = ic;
  117.    wimp_get_icon_state (&icon_state);
  118.  
  119.    wimp_delete_icon ((wimp_w) wimp_ICON_BAR_RIGHT_LOW_PRIORITY, ic);
  120.  
  121.    free((char *)icon_state.icon.data.indirected_sprite.id);
  122. }
  123.  
  124.  
  125. void init_sprites(osspriteop_area **sa, int *barMode, wimp_i *barIc)
  126. {
  127.    /* Reserve memory for sprite */
  128.    *sa = (osspriteop_area*) malloc (5000);
  129.  
  130.    (*sa)->size=5000;
  131.    (*sa)->first=16;
  132.    osspriteop_clear_sprites ( osspriteop_USER_AREA,
  133.                               *sa);
  134.  
  135.    osspriteop_load_sprite_file ( osspriteop_USER_AREA,
  136.                                  *sa,
  137.                                  "<ModeSel$Dir>.Sprites");
  138.  
  139.    osspriteop_copy_sprite ( osspriteop_NAME,
  140.                   *sa,
  141.                   (osspriteop_id) "b12",
  142.                   "bar2");
  143.  
  144.  
  145.    bar_sprite(*sa, barMode);
  146.    bar_icon(*sa, barIc);
  147. }
  148.