home *** CD-ROM | disk | FTP | other *** search
- /* DiscIndex 1.00
- * Code for keeping windows up to date - WinFill.c
- * By Neil A Carson 1994 A.D.
- */
-
- #include <stdio.h>
- #include <string.h>
-
- #include "dbox.h"
- #include "discindex.h"
- #include "werr.h"
- #include "wimp.h"
- #include "wimpt.h"
-
- #define i_disc_name 3
- #define i_disc_no 5
- #define i_disc_used 9
- #define i_disc_desc 11
- #define i_disc_files 15
- #define i_file_size 43
- #define i_file_type_s 45
- #define i_file_type 46
- #define i_file_desc 48
-
- /* Set a dbox field to a given file type */
-
- void dbox_setsprite(dbox d, dbox_field f, int type)
- {
- char temp[32];
- char temp2[8];
- wimp_icon icon;
- wimp_w w = dbox_syshandle(d);
-
- wimpt_noerr(wimp_get_icon_info(w, f, &icon));
- if (type >= 0)
- {
- strcpy(temp, "Sfile_");
- sprintf(temp2, "%x", type);
- strcat(temp, &temp2[0]);
- }
- if (type == -1) strcpy(temp, "Sfile_xxx");
- if (type == -2) strcpy(temp, "Sdirectory");
- if (type == -3) strcpy(temp, "Sapplication");
- strncpy(icon.data.indirecttext.validstring, temp, 16);
- icon.data.indirecttext.validstring[16] = 0;
- wimp_set_icon_state(w, f, 0, 0);
- }
-
- void dbox_setcsprite(dbox d, dbox_field f, char *name)
- {
- wimp_icon icon;
- wimp_w w = dbox_syshandle(d);
-
- wimpt_noerr(wimp_get_icon_info(w, f, &icon));
- strncpy(icon.data.indirecttext.validstring, name, 16);
- wimp_set_icon_state(w, f, 0, 0);
- }
-
- void dbox_settext(wimp_w w, dbox_field f, char *buffer)
- {
- wimp_icon icon;
-
- wimp_get_icon_info(w, f, &icon);
- strncpy(icon.data.indirecttext.buffer, buffer,
- icon.data.indirecttext.bufflen - 1);
- icon.data.indirecttext.buffer[icon.data.indirecttext.bufflen-1] = 0;
- wimp_set_icon_state(w, f, 0, 0);
- }
-
- void dbox_setonoff(dbox d, dbox_field f, BOOL state)
- {
- wimp_w w = dbox_syshandle(d);
-
- wimp_set_icon_state(w, f, state<<21, 1<<21);
- }
-
- void fill_in_discinfo(BOOL scroll, dbox d, int disc, int file_i, int min_file)
- {
- disc_type *disc_t;
- int file, icon;
- char temp[10];
- wimp_w w = dbox_syshandle(d);
-
- disc_t = disc_locate(disc);
- if (disc_t == 0) werr(0, "Unable to find disc in c.WinFill!");
-
- if (!scroll)
- {
- dbox_setnumeric(d, i_disc_used, disc_t->used);
- dbox_settext(w, i_disc_name, disc_t->disc_name);
- dbox_settext(w, i_disc_desc, disc_t->disc_desc);
- dbox_setnumeric(d, i_disc_no, disc + 1);
- }
-
- file = min_file << 1;
-
- for (icon = i_disc_files; icon < i_disc_files + 16; icon ++)
- {
- if (file < disc_t->no)
- dbox_settext(w, icon, disc_t->files[file].name);
- else
- dbox_settext(w, icon, "-=o=-");
- if ((icon == file_i) && (file < disc_t->no))
- dbox_setonoff(d, icon, TRUE);
- else dbox_setonoff(d, icon, FALSE);
- file ++;
- }
-
- if ((disc_t->no == 0) || (file_i == -1))
- {
- dbox_settext(w, i_file_size, "N/A");
- dbox_settext(w, i_file_type, "None");
- dbox_settext(w, i_file_desc, "N/A");
- dbox_setcsprite(d, i_file_type_s, "Sfile_xxx");
- return;
- }
-
- if (scroll) return;
-
- file_i -= i_disc_files;
- file_i += min_file << 1;
-
- dbox_setnumeric(d, i_file_size, disc_t->files[file_i].size);
- if (disc_t->files[file_i].type >= 0)
- sprintf(temp, "%x", disc_t->files[file_i].type);
- else strcpy(temp, "N/A");
- dbox_settext(w, i_file_type, temp);
- dbox_settext(w, i_file_desc, disc_t->files[file_i].desc);
- dbox_setsprite(d, i_file_type_s, disc_t->files[file_i].type);
- }
-
- void fill_in_matches(dbox db, match_win_type *m)
- {
- dbox_field disc, file, context;
- disc_type *d;
- int cnt;
-
- for (cnt = 0; cnt < 16; cnt ++)
- {
- disc = (cnt * 3) + 3;
- file = (cnt * 3) + 4;
- context = (cnt * 3) + 5;
-
- if (cnt < m->no)
- {
- d = disc_locate(m->disc_nos[cnt]);
- if (d == 0) werr(1, "Fatal error in WinFill!");
- dbox_setfield(db, disc, d->disc_name);
- if (m->matches[cnt] & show_fname)
- dbox_setfield(db, file, d->files[m->file_nos[cnt]].name);
- else dbox_setfield(db, file, "-=o=-");
- if (m->matches[cnt] & match_dname)
- dbox_setfield(db, context, d->disc_name);
- if (m->matches[cnt] & match_ddesc)
- dbox_setfield(db, context, d->disc_desc);
- if (m->matches[cnt] & match_fname)
- dbox_setfield(db, context, d->files[m->file_nos[cnt]].name);
- if (m->matches[cnt] & match_fdesc)
- dbox_setfield(db, context, d->files[m->file_nos[cnt]].desc);
- }
- else
- {
- dbox_setfield(db, disc, "-=o=-");
- dbox_setfield(db, file, "-=o=-");
- dbox_setfield(db, context, "-=o=-");
- }
- }
- }
-