home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 2 / DATAFILE_PDCD2.iso / utilities3 / discindex / DiscIndex / Source / C / WinFill < prev   
Text File  |  1994-08-03  |  5KB  |  169 lines

  1. /* DiscIndex 1.00
  2.  * Code for keeping windows up to date - WinFill.c
  3.  * By Neil A Carson 1994 A.D.
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9. #include "dbox.h"
  10. #include "discindex.h"
  11. #include "werr.h"
  12. #include "wimp.h"
  13. #include "wimpt.h"
  14.  
  15. #define i_disc_name 3
  16. #define i_disc_no 5
  17. #define i_disc_used 9
  18. #define i_disc_desc 11
  19. #define i_disc_files 15
  20. #define i_file_size 43
  21. #define i_file_type_s 45
  22. #define i_file_type 46
  23. #define i_file_desc 48
  24.  
  25. /* Set a dbox field to a given file type */
  26.  
  27. void dbox_setsprite(dbox d, dbox_field f, int type)
  28. {
  29.     char temp[32];
  30.     char temp2[8];
  31.     wimp_icon icon;
  32.     wimp_w w = dbox_syshandle(d);
  33.  
  34.     wimpt_noerr(wimp_get_icon_info(w, f, &icon));
  35.     if (type >= 0)
  36.     {
  37.         strcpy(temp, "Sfile_");
  38.         sprintf(temp2, "%x", type);
  39.         strcat(temp, &temp2[0]);
  40.     }
  41.     if (type == -1) strcpy(temp, "Sfile_xxx");
  42.     if (type == -2) strcpy(temp, "Sdirectory");
  43.     if (type == -3) strcpy(temp, "Sapplication");
  44.     strncpy(icon.data.indirecttext.validstring, temp, 16);
  45.     icon.data.indirecttext.validstring[16] = 0;
  46.     wimp_set_icon_state(w, f, 0, 0);
  47. }
  48.  
  49. void dbox_setcsprite(dbox d, dbox_field f, char *name)
  50. {
  51.     wimp_icon icon;
  52.     wimp_w w = dbox_syshandle(d);
  53.  
  54.     wimpt_noerr(wimp_get_icon_info(w, f, &icon));
  55.     strncpy(icon.data.indirecttext.validstring, name, 16);
  56.     wimp_set_icon_state(w, f, 0, 0);
  57. }
  58.  
  59. void dbox_settext(wimp_w w, dbox_field f, char *buffer)
  60. {
  61.     wimp_icon icon;
  62.  
  63.     wimp_get_icon_info(w, f, &icon);
  64.     strncpy(icon.data.indirecttext.buffer, buffer,
  65.               icon.data.indirecttext.bufflen - 1);
  66.     icon.data.indirecttext.buffer[icon.data.indirecttext.bufflen-1] = 0;
  67.     wimp_set_icon_state(w, f, 0, 0);
  68. }
  69.  
  70. void dbox_setonoff(dbox d, dbox_field f, BOOL state)
  71. {
  72.     wimp_w w = dbox_syshandle(d);
  73.  
  74.     wimp_set_icon_state(w, f, state<<21, 1<<21);
  75. }
  76.  
  77. void fill_in_discinfo(BOOL scroll, dbox d, int disc, int file_i, int min_file)
  78. {
  79.     disc_type *disc_t;
  80.     int file, icon;
  81.     char temp[10];
  82.     wimp_w w = dbox_syshandle(d);
  83.  
  84.     disc_t = disc_locate(disc);
  85.     if (disc_t == 0) werr(0, "Unable to find disc in c.WinFill!");
  86.  
  87.     if (!scroll)
  88.     {
  89.         dbox_setnumeric(d, i_disc_used, disc_t->used);
  90.         dbox_settext(w, i_disc_name, disc_t->disc_name);
  91.         dbox_settext(w, i_disc_desc, disc_t->disc_desc);
  92.         dbox_setnumeric(d, i_disc_no, disc + 1);
  93.     }
  94.  
  95.     file = min_file << 1;
  96.  
  97.     for (icon = i_disc_files; icon < i_disc_files + 16; icon ++)
  98.     {
  99.         if (file < disc_t->no)
  100.             dbox_settext(w, icon, disc_t->files[file].name);
  101.         else
  102.             dbox_settext(w, icon, "-=o=-");
  103.         if ((icon == file_i) && (file < disc_t->no))
  104.             dbox_setonoff(d, icon, TRUE);
  105.           else dbox_setonoff(d, icon, FALSE);
  106.         file ++;
  107.     }
  108.  
  109.     if ((disc_t->no == 0) || (file_i == -1))
  110.     {
  111.         dbox_settext(w, i_file_size, "N/A");
  112.         dbox_settext(w, i_file_type, "None");
  113.         dbox_settext(w, i_file_desc, "N/A");
  114.         dbox_setcsprite(d, i_file_type_s, "Sfile_xxx");
  115.         return;
  116.     }
  117.  
  118.     if (scroll) return;
  119.  
  120.     file_i -= i_disc_files;
  121.     file_i += min_file << 1;
  122.  
  123.     dbox_setnumeric(d, i_file_size, disc_t->files[file_i].size);
  124.     if (disc_t->files[file_i].type >= 0)
  125.         sprintf(temp, "%x", disc_t->files[file_i].type);
  126.      else strcpy(temp, "N/A");
  127.     dbox_settext(w, i_file_type, temp);
  128.     dbox_settext(w, i_file_desc, disc_t->files[file_i].desc);
  129.     dbox_setsprite(d, i_file_type_s, disc_t->files[file_i].type);
  130. }
  131.  
  132. void fill_in_matches(dbox db, match_win_type *m)
  133. {
  134.     dbox_field disc, file, context;
  135.     disc_type *d;
  136.     int cnt;
  137.  
  138.     for (cnt = 0; cnt < 16; cnt ++)
  139.     {
  140.         disc = (cnt * 3) + 3;
  141.         file = (cnt * 3) + 4;
  142.         context = (cnt * 3) + 5;
  143.  
  144.         if (cnt < m->no)
  145.         {
  146.             d = disc_locate(m->disc_nos[cnt]);
  147.             if (d == 0) werr(1, "Fatal error in WinFill!");
  148.             dbox_setfield(db, disc, d->disc_name);
  149.             if (m->matches[cnt] & show_fname)
  150.                 dbox_setfield(db, file, d->files[m->file_nos[cnt]].name);
  151.               else dbox_setfield(db, file, "-=o=-");
  152.             if (m->matches[cnt] & match_dname)
  153.                 dbox_setfield(db, context, d->disc_name);
  154.             if (m->matches[cnt] & match_ddesc)
  155.                 dbox_setfield(db, context, d->disc_desc);
  156.             if (m->matches[cnt] & match_fname)
  157.                 dbox_setfield(db, context, d->files[m->file_nos[cnt]].name);
  158.             if (m->matches[cnt] & match_fdesc)
  159.                 dbox_setfield(db, context, d->files[m->file_nos[cnt]].desc);
  160.         }
  161.         else
  162.         {
  163.             dbox_setfield(db, disc, "-=o=-");
  164.             dbox_setfield(db, file, "-=o=-");
  165.             dbox_setfield(db, context, "-=o=-");
  166.         }
  167.     }
  168. }
  169.