home *** CD-ROM | disk | FTP | other *** search
- // **************************************************************************
- // 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) ;
- }
- }
-