home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Acorn User 2
/
AUCD2.iso
/
program
/
vista.arc
/
!hyperview
/
c
/
hyperview
next >
Wrap
Text File
|
1996-01-25
|
5KB
|
182 lines
// **************************************************************************
// Copyright 1996 David Allison
//
// VV VV IIIIII SSSSS TTTTTT AA
// VV VV II SS TT AA AA
// VV VV II SSSS TT AA AA
// VV VV II SS TT AAAAAAAA
// VV IIIIII SSSS TT AA AA
//
// MULTI-THREADED C++ WIMP CLASS LIBRARY
// for RISC OS
// **************************************************************************
//
// P U B L I C D O M A I N L I C E N C E
// -------------------------------------------
//
// This library is copyright. You may not sell the library for
// profit, but you may sell products which use it providing
// those products are presented as executable code and are not
// libraries themselves. The library is supplied without any
// warranty and the copyright owner cannot be held responsible for
// damage resulting from failure of any part of this library.
//
// See the User Manual for details of the licence.
//
// *************************************************************************
//
// Hyper Text Markup Language displayer
//
#include "Vista:vista.h"
#include "hyperview.h"
#include "viewer.h"
#include <swis.h>
#include <kernel.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
HyperView::HyperView()
: Task ("HTML Viewer", "hyperview", "!hyperview", "iconbar")
{
viewers = NULL ;
last_viewer = NULL ;
loader = new Loader(this) ;
set_mask (1 << ENULL) ;
}
void HyperView::click (int x, int y, int button, int icon)
{
if (button & Task::BLEFT)
{
Viewer *viewer = new Viewer(this) ;
viewer->do_open() ;
}
}
void HyperView::menu(MenuItem items[])
{
switch (items[0])
{
case 0:
ProgramInfo proginfo (this, 4, "0.1 (9 Jan 1996)") ;
proginfo.show() ;
sleep (&proginfo) ;
break ;
case 1:
exit() ;
break ;
}
}
Viewer *HyperView::find_viewer (int handle)
{
for (Viewer *v = viewers ; v != NULL ; v = v->next)
if (handle == v->handle)
return v ;
return NULL ;
}
void HyperView::add_viewer(Viewer *v)
{
v->next = NULL ;
if (viewers == NULL)
viewers = last_viewer = v ;
else
{
last_viewer->next = v ;
v->prev = last_viewer ;
last_viewer = v ;
}
}
void HyperView::delete_viewer(Viewer *v)
{
if (v->prev == NULL)
viewers = v->next ;
else
v->prev->next = v->next ;
if (v->next == NULL)
last_viewer = v->prev ;
else
v->next->prev = v->prev ;
}
Loader::Loader (HyperView *h)
: DataSave (h)
{
hyperview = h ;
}
Loader::~Loader()
{
}
void Loader::receive (int action, int task, int my_ref, int your_ref, int data_length, void *data)
{
Viewer *v ;
switch ((Task::events)action)
{
case Task::Message_DataSave: // save to this file
datasaveack (your_ref, data, "<Wimp$Scrap>") ;
break ;
case Task::Message_DataLoad:
DataSave::saveackdata *s = data ;
if (s->window == -2) // icon bar drag
{
v = new Viewer (hyperview) ;
v->do_open() ;
}
else
v = hyperview->find_viewer (s->window) ;
if (v != NULL)
{
v->display_file (s->pathname) ;
v->set_home_document (s->pathname) ;
}
dataloadack (task, your_ref, my_ref, data_length, data) ;
break ;
}
}
main(int argc, char *argv[])
{
try
{
HyperView *hyper_view = new HyperView ;
if (argc > 1)
{
Viewer *v = new Viewer (hyper_view) ;
v->do_open() ;
v->display_file (argv[1]) ;
v->set_home_document (argv[1]) ;
}
hyper_view->run() ;
}
catch (_kernel_oserror *e)
{
_kernel_swi_regs r ;
r.r[0] = (int)e ;
r.r[1] = 0 ;
r.r[2] = (int)"HyperView" ;
_kernel_swi (Wimp_ReportError, &r, &r) ;
}
catch (char *s)
{
_kernel_oserror err ;
_kernel_swi_regs r ;
err.errnum = 0 ;
strcpy (err.errmess, s) ;
r.r[0] = (int)&err ;
r.r[1] = 0 ;
r.r[2] = (int)"HyperView" ;
_kernel_swi (Wimp_ReportError, &r, &r) ;
}
}