home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
s1
/
stripleft
/
!StripLeft
/
c
/
!RunImage
Wrap
Text File
|
1994-09-06
|
5KB
|
294 lines
/*************************************************************
Lefthand wastage sprite stripper by Ian Jeffray
Copyright (C) Riscy Developments 1994
Ian Jeffray. EMail: aug@dmu.ac.uk, Tel: 01162 332 347
Term Time: 47 Barclay Street, Leicester, LE3 0JD
Holidays: Field House, Sessay, Thirsk, N. Yorks, YO7 3BE
**************************************************************/
#define VERSION "1.00"
#include <stdlib.h>
#include <string.h>
#include "wimp.h"
#include "res.h"
#include "resspr.h"
#include "sprite.h"
#include "baricon.h"
#include "dbox.h"
#include "event.h"
#include "menu.h"
#include "os.h"
#include "saveas.h"
#include "bbc.h"
#include "template.h"
#include "werr.h"
#include "wimpt.h"
#include "win.h"
#include "flex.h"
#include "visdelay.h"
#include "xferrecv.h"
#include "kernel.h"
#define ibar_info 1
#define ibar_quit 2
#define APP_NAME "StripLeft"
#define ICON_NAME "!StripLeft"
#define MENU_ITEMS ">Info,Quit"
#define version_field 4
menu iconbar_menu;
char app_dir[256];
char start_file[256]="";
int save_len=0;
int *data=NULL;
int filesize(char *filename)
{
os_filestr file;
file.action = 5;
file.name = filename;
if (wimpt_complain(os_file(&file)) != 0) return 0;
switch (file.action)
{
case 0: werr(0, "File not found"); return 0;
case 2: werr(0, "You cannot load a directory"); return 0;
}
if ((file.loadaddr & 0xFFF00000) == 0xFFF00000)
return file.start;
else
{
werr(0, "File cannot be loaded");
return 0;
}
}
void load(char *filename,int size)
{
int *sprite,x;
if (flex_alloc((flex_ptr) &data, size+32))
{
data[0]=size+32;
data[2]=16;
wimpt_complain(os_swi2(46,521,(int) data));
wimpt_complain(os_swi3(46,522,(int) data,(int) filename));
if (data[1]==0)
{
flex_free((flex_ptr) &data);
werr(0, "No sprites in sprite file!");
}
else
{
sprite=(int *) (data[2]+(int) data);
for (x=1;x<=data[1];x++)
{
wimpt_complain(os_swi3(46,566,(int) data,(int) sprite));
wimpt_complain(os_swi3(46,524,(int) data,(int) filename));
sprite=(int *) ((int) sprite + sprite[0]);
}
flex_free((flex_ptr) &data);
}
}
else
{
werr(0, "Memory could not be allocated for the sprite");
}
}
void load_file()
{
char *filename;
int size=0;
int filetype = xferrecv_checkinsert(&filename);
save_len=0;
size = filesize(filename);
if (size>0 && filetype==0xff9 )
{
visdelay_begin();
load(filename,size);
visdelay_end();
}
xferrecv_insertfileok();
}
/*
* Handles info window
*
*/
void info_handler (void)
{
dbox info_window;
char versionstring[256];
if (info_window = dbox_new ("progInfo"), info_window != NULL)
{
sprintf(versionstring,"%s (%s)",VERSION,__DATE__);
dbox_setfield(info_window,version_field,versionstring);
dbox_show (info_window);
dbox_fillin (info_window);
dbox_dispose (&info_window);
}
}
/*
* Iconbar click handler
*
*/
void iconbar_click (wimp_i icon)
{
icon=icon;
bbc_vdu(7);
}
/*
* Event handler
*
*/
BOOL my_event_handler(dbox d,void *event,void *handle)
{
/* wimp_eventstr *e=(wimp_eventstr *) event;
wimp_i icon;
handle=handle;
*/
return FALSE;
}
/*
* Iconbar menu handler
*
*/
void iconbar_menu_selection (void *handle, char *hit)
{
handle=handle;
switch (hit [0])
{
case ibar_info:
info_handler ();
break;
case ibar_quit:
exit (0);
}
}
/*
* Main misc. handler
*
*/
BOOL main_event_handler(wimp_eventstr *action,void *handle)
{
BOOL ret=FALSE;
handle=handle;
switch (action->e)
{
case wimp_EOPEN:
wimpt_noerr(wimp_open_wind(&action->data.o));
ret=TRUE;
break;
case wimp_ECLOSE:
wimpt_noerr(wimp_delete_wind(action->data.o.w));
ret=TRUE;
break;
case wimp_ESEND:
case wimp_ESENDWANTACK:
{
switch (action->data.msg.hdr.action)
{
case wimp_MDATALOAD:
load_file();
ret=TRUE;
break;
default:
break;
}
}
default:
break;
}
return ret;
}
/*
* Update menu flags
*
*/
menu make_iconbar_menu(void *handle)
{
handle=handle;
return iconbar_menu;
}
/*
* Get the wimp in gear
*
*/
BOOL initialise_application (void)
{
os_read_var_val("StripLeft$Dir",app_dir,255);
if (*app_dir=='\0') return FALSE;
wimpt_init (APP_NAME);
res_init (APP_NAME);
flex_init ();
resspr_init ();
template_init ();
dbox_init ();
baricon (ICON_NAME, (int) resspr_area () , iconbar_click );
iconbar_menu = menu_new (APP_NAME, MENU_ITEMS);
win_add_unknown_event_processor(main_event_handler,(void *) NULL);
if (! event_attachmenumaker (win_ICONBAR, make_iconbar_menu, iconbar_menu_selection, 0))
return FALSE;
return TRUE;
}
/*
* Main
*
*/
int main (int argc, char *argv[])
{
if (argc>1) strcpy(start_file,argv[1]);
if (! initialise_application ())
return 0;
while (TRUE)
event_process ();
return 0;
}