home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 2
/
DATAFILE_PDCD2.iso
/
utilities3
/
discindex
/
DiscIndex
/
Source
/
C
/
WinFill
< prev
Wrap
Text File
|
1994-08-03
|
5KB
|
169 lines
/* 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=-");
}
}
}