OvationPro2.90(14th-March-06)"Z Q  Pd6HSVndd8  L L   @0 44,4 L  tn Lh  GenericBlack!fWhitefTransparent fRedfGreenfBluefCyan!fMagenta!fYellow !fRegistration Af `.HSVn:Pff.- @HpP |)б"BifBfB# Corpus BoldCorpus.MediumArial BoldArialCorpus MediumTrinity MediumCorpus.Bold Bodytext#б..$]40P33o* Heading66+=0P331 Codeext"..#30P33( FunctionName H..$Y30P33( Function ? "..#Y30P33( CorpusWord"..#30P33( Nospaceafterff..G$50P33o* SpaceAfterff..G$50P33o*   eg8б..$]40P33o* eg8б..$]40P33o* NV66+=0P331 V"..#30P33( 3Q"N H..$30P33( Q E"..#30P33( XM "..#30P33( "* H..$30P33( *X б..$]40P33o* ) "..#30P33( eg8б..$]40P33o* NV66+=0P331 W_б..$]40P33o* ʜ"..#30P33( Mб..$]40P33o* h_"..#30P33( x"..#30P33( 3Q"# .. 50P33' Q .. 50P33' XM.. 50P33' V.. 50P33' x.. 50P33' =;HXw|@}c <;CWw| |}c XMh_ʜNV3Q"VQ  XMh_ʜNV3Q"VQ *X W_(M0x8)D"*Peg8\ dLL  maindict !Ignore.  {filename} P l  {filename} P{pagenumber} {datetime}-iKZ  L A4 4tt L    nn7. nn7. oBZyy! ccMR  X]7< @ PP Z]4 H$H  ! T  L A4JL tL   nn7. nn7. oBZyy! ccMR  X]7D$5 xȀȀȀWriting Applets for Ovation Pro Windows (OPW)  An OPW applet can be much like an applet on RISC OS, consisting of a folder which contains separate files for each type of resource - sprites, messages, help etc. in an AResources folder. Such resources will be automatically loaded when the applet is added to OP. Similarly the applet can have AutoRun and Library folders which contain script files, and just like on RISC OS these will be executed. The main difference comes with Template files. There is no equivalent of this file type for Windows. The route I have adopted is to use a command line program to convert the RISC OS Template file into a .rc file which can be loaded into Microsoft Visual Studio (or other tools) where the window definitions can be edited. The resulting .rc file can be added to a simple project which creates a DLL. The DLL just makes the window definitions available to OP and is put into the folder of the applet along with its other components. Whilst an OPW applet can be a folder with amongst other les in it a .dll file which will be automatically loaded when OP starts up (much like the Image files in the RISC OS version), an OPW applet can consist of just a single .dll file with not only window definitions but also OP script files (for Autorun or Library use), sprites, messages etc. embedded in it. There is an accompanying example of an applet in such a single dll form - the calculator applet. However if you look inside OPW youll find other applets which are set out like RISC OS applets. The program which converts Template files to .rc files is called temp.exe (supplied here). The syntax to use it is; nnnntemp Some RISC OS icons can be converted into Windows controls e.g. an OK button. Others cant be e.g. icons which contain sprites. To support more RISC OS like features I have implemented a custom control, this uses the control text string to define the icon/control - its all a bit like the verification strings in RISC OS icons. A later section in this documents describes these strings. When converting an applet you have to be aware of certain Windows oddities, for example the OK button is given number 1 and the Cancel button number 2. If you do that Return and Escape will have their expected behaviour. Normally it will be necessary to edit the windows definitions and code to arrange these special button numbers. In templates and menus & is used to force an underline of the next character, so && is necessary if you want a single & to appear. Windows is also not very happy with controls lying on top of one another - if youve used this sort of layout for special visual effects, then it will probably have to be changed. On RISC OS the usual way of installing an applet was to copy it into the Applets folder inside the !OvnPro folder. You can do that on Windows - inside the folder that OPW is installed in youll find an applets folder with all the applets in. This is just as accessible as its counterpart on RISC OS, you can go into it rummage around, edit the scripts and so on. However such a hands on approach is not the Windows way - so for distribution and user installation of applets I have invented the .oap file. This is a zip file with the extension changed to .oap. The file should contain just the applet, when it is run or opened from the OPW applet manager window, the contents will be copied to the Applets folder. .oap file are easy to distribute on web sites, and easier for the OPW user to install. In the long term it may be possible to execute an installation script inside the .oap file. In this archive there is a folder Applets which contains two applets, the Calculator applet which is set up as a single file .dll applet, and the Fog applet which is arranged as a folder with files in it. The folders Calcs and Fog are MS Visual C++ projects. If you want to produce your own Windows applet probably the easiest way will be to set off from one of these projects and change it. Personally I take the .dsp and .dsw files, load them into Notepad and change (for example) all occurrences of Fog to new applet name, rename files as appropriate. There is an alternative approach to producing applets which does not involve an expensive and complex piece of software like Visual C++. This is to use the freeware program Reshacker which allows you to edit the resources inside a .dll or .exe file. To use this youd set off from an existing .dll file containing window definitions and edit them or load your .rc file into it. Other advantages of this software are that you get a windows definition editor, and it lets you examine the resources in OPW and applets to see how they work. Script files will mostly work, but there are also things that have changed. You cant expect RISC OS specific functions like osclis() to work. This is a common piece of code;  script_menu_initialise(); addentry_menu(script_handle,"fog_command","","","","{FOG_00}"); The applet adds its entry to the applets menu. For Windows this should be changed to;  script_menu_initialise(); script_menu_insert("fog_command","","","","{FOG_00}"); The advantage is that it allows applet names on the applet menu to appear in alphabetic order. The OPEN WINDOW (see addwindowhandler()) event has been changed - for RISC OS this event passes the parameters RISC OS desires a window to be opened with, the event handler code then opens the window where it wants (usually where RISC OS wanted). For Windows this OvationPro event is only generated when the window is opened by the display_window() script function. This is because when an operating system event occurs for Windows the window has already been opened. A new event is generated for this - it is important to understand this event occurs after the window has been opened and that the handler should not attempt to open the window. Windows works best when the windows are in a parent child hierarchy. To cope with this there is a function to return the window handle of a document window, and a new function which creates a window as the child of another window. There are new events generated when a window is deleted (as it will be if its parent is) and when its parent is closed. Note that in Windows a window can be a child of another window and still move outside the parent. Windows which have the child property in addition to being child windows are constrained to only appear within their parent. All this makes for complicated changes, however there are plenty of existing applets you can look at to see how to do things.  Some applets need to save data for configuration. Often on RISC OS this was done by creating a file inside the applet and writing to it. This does not play well in a multiuser environment like Windows. OPW provides support for such small amounts of data. This works by using the tagged data functions but with a null parameter for the document handle. The data ends up in a file !Tags.csc in the ApplicationData\DavidPilling\OvationPro\Autorun folder. See the StylePalette applet for an example. A new function is provided to locate the applet folder e.g. appletpath(statnry_path); There are no writable menu entries in Windows - functions that open general purpose input windows are provided gpbox1() etc. In RISC OS a click on any menu entry will generate an event, in Windows only clicks on the leaf entries of the menu tree do this. So for example in RISC OS you might use clicks on an applets entry in the applet menu to toggle it on and off and have a sub menu of configuration options. In Windows the sub menu would have to have an extra on/off item. A new function is provided for defining macros from applets defmacro3(), this allows the macro to be bound to the applet, see the function definition for more explanation. There has always been an art to designing window templates, because users may use any desktop font. On Windows the situation is more complex because users can also choose an arbitrary resolution for their desktop. The two common values are 96dpi (small fonts) and 120dpi (large fonts). Ideally your applet should work in both these modes. One problem is that Windows templates are specied in terms of the size of the font used in them. Therefore their size in pixels changes with desktop resolution. Any sprites in custom controls are painted one sprite pixel to one screen pixel. The effect of this is that sprite icons change size relative to text - a compromise is necessary. When you get coordinates from script functions these are in RISC OS style units - 180 to the inch. Windows tends to use pixel units.Example Applet Conversion  Suppose you have a RISC OS applet that you want to convert to Windows. This is how to go about it on a file by file basis. !Applet - the main folder. For Windows this becomes a folder named Applet. !Applet.!Info - text file containing information about the applet. For Windows rename to Info.txt, change line endings from LF (code 10) to CRLF (code 13, code 10). !Applet.!Help - text file or Ovation Pro document. For Windows rename to Help.txt or Help.dpd, if it is a text file change the line ending. !Applet.AResources.buttons - button sprites. For Windows scrap this because it only supports square pixel bitmaps. !Applet.AResources.buttons22 - more button sprites. For Windows rename to buttons22.spr !Applet.AResources.Messages - translatable text strings. For Windows rename to Messages.txt and change the line endings !Applet.AResources.Help - interactive help text. For Windows rename to Help.txt and change the line endings. !Applet.AResources.Templates - windows templates. These are converted to a .rc file as described above and then compiled into a .dll, the .dll typically has the name Applet\Applet.dll. !Applet.Autorun.script - OvationPro script files. These should be given the extension .csc. The line ending should be changed. !Applet.Library.script - Ovation Pro script files, These should be given the extension .csc. The line ending should be changed. In the above Ive talked about changing the line ending in files. A utility LFStrip is provided to do this. If you give it a command line argument of a folder path it will convert all files in the folder with extension .txt and .csc (and any in sub folders). Given an argument that is a file name it will convert that file regardless of extension. OPW can handle files with any line ending so conversion is not essential, but many Windows programs (e.g. Notepad) are not happy with anything other than the correct Windows line end.David Pilling Custom Controls  In an attempt to emulate some of the features of icons under RISC OS, David Pilling software denes its own custom control. These custom controls have class abx, for comparison my windows use the class task. The custom control caption/string consists of a number of escape sequences. Each sequence starts with a \ and is terminated by either the next \ or the end of the string. After the \ comes a single letter followed by the necessary parameters. Parameters are executed in order. Numbers can be in decimal or hex, using the C form 0xFF etc. \snnnnnnText string \i%nnnnnIcon - a Windows .ico bit map existing in the .exe. \l nnnnnnnnImagelist item. An Imagelist is a bit like a RISC OS sprite. Consisting of a Windows .bmp bitmap containing a strip of icons and another bitmap containing the mask for them. This is all horrible, the only reason for ever using them is access to standard icons inside Windows. \tTnnnnnTab. Skip forward N pixels. \a5hnnnnSprite. A RISC OS sprite. Example \\V\\aopton\\s Italic\\K12 a combined sprite and text icon. Changing justication in mid string may be useful. \gn\nnnColour of text. \kLnnnBackground colour of icon. The denition of colours depends on the bottom byte 1 BBGGRR01 RGB colour 2..17 Standard RISC OS wimp colours 18.. Standard Windows colours, typically 29 colours 255 Transparent Example 0xFFFFFF01 is white. \FEnnnnnnnFilled icon Example a transparent icon \k-1\F because -1 is a hex value of 0xFFFFFFFF. \EInnnnnBorder of icon. Values are 0..4 0 EDGE_BUMP;   1 EDGE_ETCHED; nnnnnnnn2 EDGE_RAISED; nnnnnnnn3 EDGE_SUNKEN; nnnnnnnn4 outline in current foreground colour. \LGnnnnnnnLeft justify horizontally. \R?nnnnnnnRight justify horizontally. \C?nnnnnnnCentre horizontally. \TEnnnnnnnTop vertical justication. \BrBnnnnnnnBottom vertical justication. \VrBnnnnnnnMiddle vertical justication. \u<0|1>R?nnnnnnUnderline on or off. \OnnnnnnConditional. What follows only applies if condition true. String consists of S - selected P - pushed M - mouse over F - focus G - greyed 1 - true 0 - false split by + logical OR - logical AND prefixed by ! logical NOT This is an example which displays one sprite (pup) when pressed and another (up) when not. \\OS+P\\apup\\O!S-!P\\aup\\O1 \P=nnnnnSet pointer when over icon i==icon + name a==sprite + name s==system + number \K[1|2|A|D|R]>nnnnnnType of click 1 one click 2 double click A auto repeat D drag R release Example \KD12 return 1, 2 clicks or drag. New Functions in OPW  openfileinfo() void openfileinfo(void); Opens the file info window for the current document. This effectively replaces fileinfo_box(). openfilesaveas() void openfilesaveas(void); Opens the save as window for the current document. This effectively replaces savedocument_box(); saveasstylesheet() void saveasstylesheet(void); Opens the save as stylesheet window for the current document. openfileopen() void openfileopen(void); Opens the open file window. openzoombox() void openzoombox(void); Opens the document zoom window for the current document. openviewbox() void openviewbox(void); Opens the view options window for the current document. opengridbox() void opengridbox(void); Opens the grid dialogue box for the current document. openexportbox() void openexportbox(void); Opens the export window for the current selection in the current document. openimportbox() void openimportbox(void); Opens the import window for the current document. openinfobox() void openinfobox(void); Open program information window. openappletbox() void openappletbox(void); Open the applet manager window. getprintername() int getprintername(int n,string & name); Puts the nth printer name in the string variable and returns non-zero, or returns 0. setprintername() void setprintername(string & name); Sets the named printer as the current one. getcurrentprinter() int getcurrentprinter(string & name); Fills in the current printer name and returns 0. writemenustring() void writemenustring(int handle,int index,string & text); Write a menu item. openimportwordsbox() void openimportwords(void); Opens the import words window -used by dictionary edit window and menu. openexportwordsbox() void openexportwords(void); Opens the export words window -used by dictionary edit window and menu. gpbox1() void gpbox1(string & title,string & caption,string value,string function);  function prototype void function(int code,string value);  This is a general purpose user input window, it displays a window with a title bar, a writable icon and caption icon. When the user clicks on OK or Cancel the function will be called, the parameter code will have value 1 if OK is clicked, or 2 if Cancel is used, it may have the value 0 if the window is closed in some other way. gpbox2() void gpbox2(string & title,string & caption1,string & caption2,string & value1,string & value2,string & function);  function prototype void function(int code,string value1,string value 2);  Akin to gpbox1() but with two values. gpbox4() void gpbox4(string & title,string & caption1,string & caption2,string & caption3,string & caption4,string & value1,string & value2,string & value3,string & value4,string & function);  function prototype void function(int code,string value1,string value2,string value3,string value4);  Akin to gpbox1() but with four values. transload() int transload(string & from,int from_type,string & to,int to_type); Translate file, returns 0 on success. helptopic() void helptopic(string & topic); Calls up Windows help on the given topic. helpwhatsthis() void helpwhatisthis(void); Puts OPW into help what is this mode - question mark help. appletpath() void appletpath(string & path); Fills in the location of an applet. Typically this is used in an applets initialisation code, if it needs access to files inside its folder. create_windowparent() int create_windowparent(string & name,int parent); Creates a child window. Windows works best when windows are children of one another. geticon() int geticon(int window,int icon,int coord); Returns coordinates of an icon. The value of coord controls which coordinate is returned. 0 is x0, 1 is y0, 2 is x1, 3 is y1. setwindowflags() void setwindowflags(int handle,int bic,int orr);  #define WINDOWPANE 0x8 #define WINDOWFIXED 0x10 #define WINDOWNOTDIALOGUE 0x20 #define WINDOWNOSCROLLCHILD 0x40 #define WINDOWBEINGOPENED 0x80 #define WINDOWMINMAX 0x100 #define WINDOWAUTOCENTRE 0x200  Allows window flags to be twiddled. The bic argument is the bit to clear, and the orr argument the new value for it. The only value of interest is WINDOWPANE which is used to make windows behave like tool windows. viewhandle() int viewhandle(int view);  Returns the window handle for a given view. Typically used when you want the applet window to be the child of the main window. activeview() int activeview(void);  Returns the view handle for the active view in OPW. setactive() void setactive(int handle); Activates the given window. setfocus() void setfocus(int handle); Gives the focus to the given window. setfocusicon() void setfocusicon(int handle,int icon) Gives the focus to the given icon.  write_slice_icon() void write_slice_icon(int handle,int icon,int param,string & value);  Allows you to manipulate abx controls. param is an abx tag like s for a string, string is the new value. read_slice_icon() int read_slice_icon(int handle,int icon,int param,string & value); Reads a tag value from an abx control. Returns non-zero if the tag is present. fontreplace() void fontreplace(string & newidentifier,string & oldidentifier,int spare); This allows you to specify a font identifier and its replacement. For example; fontreplace("Arial","Homerton.Medium",0); fontremovereplace() void fontremovereplace(string & newidentifier,string & oldidentifier); This removes a replacement rule.  fontclearreplace() void fontclearreplace(void); Deletes all fontreplace() instructions. fontreplacestate() int fontreplacestate(int state); Allows font replacement to be turned on or off, returns the previous state. fontignore() void fontignore(string & identifier,int spare); This makes OP omit a Windows font from its font catalogue. fontremoveignore() void fontremoveignore(string & identifier); Removes a fontignore() instruction. fontclearignore() void fontclearignore(void); Deletes all fontignore() instructions. fontignorestate() int fontignorestate(int state); Allows font ignoring to be turned on or off, returns the previous state. fontmap() void fontmap(string & newtypeface,string & newweight,string & newidentifier,int newflags,string & existingfont,string * spare,int spare1,int spare2);  newtypeface - font typeface name newweight - full font weight name (usually including the typeface name). newidentifier - font name as saved in document file i.e. language independent name. This can be "" if it is the same as newweight. newflags - bit 0 set for bold, bit 1 set for italic. existingfont - Windows font name. spare - not used at present. spare1 - not used at present. spare2 - not used at present. For example; fontmap("Homerton","Homerton Bold","Homerton.Bold",1,"Arial Bold","",0,0); fontremovemap() void fontremovemap(string & member); Removes the map instruction for this font. fontclearmap() void fontclearmap(void); Deletes all fontmap() instructions. fontmapstate() int fontmapstate(int state); Allows font mapping to be turned on or off, returns the previous state. forcefontschange() void forcefontschange(void); Tells OPW to update its font catalogue.  content_menuname() string content_menuname(void); Returns the name of the selected content for use in the menu bar i.e. Text or Picture. openfontman() void openfontman(void); Opens the font manager window. defaultfile() int defaultfile(void); Returns the handle of the default document. opentextfont() void opentextfont(void); Opens the font menu. ps_level() int ps_level(void); Return the current PostScript level. openregbox() void openregbox(void); Open the program registration window. shade_icon() void shade_icon(int handle,int icon,int state); Shade or unshade an icon, state true means shade.  defmacro3() void defmacro3(int type, string&name, string &defn, string &button, string &helpstr,string & aname); Define a macro. Syntax the same as defmacro2(), but with additional parameter aname for an applet name. If the applet is not loaded the macro wont be. This provides a way of binding macros to applets. A long running problem has been orphaned macros, an applet is installed and defines a macro, the user saves their macros, subsequently they remove the applet, and the macro remains. The applet name is the same one that appears in the applet Info file.  debprinti() void debprinti(int value); Print an integer to the debug window. debprints() void debprints(string & value); Print a string to the debug window. oscommand() int oscommand(int parent,string & verb,string & file,string & params,string & directory,int flags,string & result); Performs a ShellExecute() (see the Windows API documentation). Returns 1 if the is an error with the error message in result, or returns 0 with result set to "" if there is none. The ags parameter is OvationPro specic and no values are currently dened. The rest of the parameters are as for ShellExecute(). osrunexe() int osrunexe(string & commandline); Runs the exe which starts the command line using the rest of the command line for parameters. This function does not return until the exe process has terminated (unlike oscommand()), it returns the exit code from the process. I invented this function because systems() seemed to have difculties if the command line had any le names with spaces in.  beep() void beep(int beeptype,int frequency,int duration); Produces a beep noise, for values of the parameters greater than zero the Windows API Beep() function is used and so this function has the same limitations. For frequency value zero, the duration parameter is passed to the API MessageBeep() function. A zero value for both frequency and duration produces MessageBeep(MB_OK). keypress() void keypress(int key); Imitates the character key being typed. This is not limited to typing into documents it also applies when any Windows control owned by OvationPro has the focus. isalt() int isalt(void); Returns true if the Alt key is pressed. isctrl() int isctrl(void); Returns true if the Control key is pressed. isshift() int isshift(void); Returns true if the Shift key is pressed. nd_caret() int nd_caret(int item); Returns the position of the focus. The parameter item takes the following values; 0 window 1 icon 2 caret/marking start position, this is the number of character positions 3 marking end position, this is the number of character positions The last two values only make sense for edit controls. The function returns -1 if the value does not exist e.g. if no window has the focus. Examples; w=nd_caret(0); // return window with focus i=nd_caret(2); // position of caret in edit control findglyph() int findglyph(string & name); Returns the code value for a given glyph name. findglyphname() string findglyphname(int code); Returns the glyph name for a given code.  addfiletype() void addfiletype(string & extension,string & description,int type); Allows new file types to be added. Internally Ovation Pro associates a number with a given file type. These numbers are the RISC OS file types. For example 0xB27 for Ovation Pro documents. This is how you might go about making Ovation Pro recognise Equasor files. addfiletype("d91","Equasor (*.d91)",0xd91); impexcopy(0xAFF,0xd91,"Equasor"); Equasor files are just Draw files with a different type (0xd91). The first line gets Ovation Pro to recognise files with extension .d91, the second tells it to treat them as Draw files. void postscriptchoices0() void postscriptchoices0(int level,int fonttype,int generic,int spare); level is the PostScript language level 1, 2 or 3 fonttype is the type of embedded fonts 1 or 3 generic is 1 for generic PostScript, or 0. filereadtext() int filereadtext(string &s, inthandle); Reads the next string terminated by an end of line sequence from the file handle into the string s. The end of line characters are not included in the string, which is terminated by a null character. Returns non-zero if an error occurs.  macrorename() void macrorename(string & oldname,string & newname); Renames a macro. macrostring() int macrostring(string & name,string & macrostring,int n); Allows the various strings associated with macros to be read. Returns the type of the macro. The string read depends on the value of n: n==0 button n==1 defn n==2 helpstr n==3 aname compare with defmacro(), defmacro2(), defmacro3(). The next few functions were originally supplied in the enhanced bookmark manager applet written by R.J.E. Thompson. They are now contained in the main program. The idea is that applets can declare a bookmark name prefix as hidden, any bookmarks with a hidden prefix should be ignored by other applets. For example the bookmark applet does not show them on the menus it presents to users. Applets use hidden bookmarks for their own internal purposes. Typically the prefix is the three letter identifier used by the applet for its variables etc. followed by an underscore character. int bm_hidden() int bm_hidden(string &prefix) Returns true if the prefix is hidden.  void bm_hide() void bm_hide(string &prefix) Defines the prefix as hidden void bm_unhide() void bm_unhide(string &prefix) Removes the prefix from the list of hidden prefixes void bm_toggle() void bm_toggle(string &prefix) Toggles the hidden state of the prefix int bm_hiddenmark() int bm_hiddenmark(string &name) Given a bookmark name, returns 1 if it is hidden.  confirmparent() int confirmparent(string &s,int parent); As confirm() but displays the confirmation box as a child window of parent.  The following three functions allow access to scrap or temporary files. The idea is that a handle to a scrap file name is obtained. This handle continues to exist until disposed of and is for the exclusive use of its creator. A function is provided to get the file name from the scrap handle. The usual sequence of events will be: Create scrap handle Obtain file name Create file Perform file system operations Delete file Remove scrap handle scrapcreate() int scrapcreate(void); Return a scrap file handle. scrapname() int scrapname(int scraphandle,string & scrapfilename); Obtain scrap file name from scrap file handle. scrapremove() void scrapremove(int scraphandle); Destroy the scrap file handle.   Function changes  addwindowhandler() void addwindowhandler(int event, int handle, string &fnname);  Add event handler for the window specied by handle. When the event occurs, the handler fnname is called. Events supported are:  1TKEY PRESS int keyfn(int handle, int icon, int key); On RISC OS the key values were somewhat arbitrary. For Windows they are different. In fact two distinct types of key code may appear. A key value in the range 0 to 0xFFFF is a typed character. Other classes of this event occur when any key is held down. The key value then consists of a Windows virtual key code in the lower byte and various ags which may be set; #define KEYVSHIFT (1<<24) #define KEYVCTRL (1<<25) #define KEYVIRT (1<<26) #define KEYVALT (1<<27) #define KEYVWIN (1<<28) For a character key like A you will see the key down event and then a typed character event. For a key like Delete you will see only the key down event. The KEYVIRT ag is always set for key down events - this is how the event can be distinguished from a typed character event.   3T OPEN WINDOW  void openfn(int handle, int x0, int y0, int x1, int y1, int scx, int scy, int bhandle); This is now only called as a result of the display_window() function.   5TOPEN WINDOW POST   void openfn(int handle, int x0, int y0, int x1, int y1, int scx, int scy, int bhandle); The window has already been opened with the parameter values when this function is called.    6TDELETE WINDOW  void deletefn(int handle); The window has been deleted. This may occur as a result of the parent being deleted, or the delete_window() function.     7TPARENT CLOSE   void parentclosefn(int handle); The windows parent has closed.     addeventhandler()  0x213 EVENT_VIEWCLICK The single click and double click values for mousebuttons are exchanged i.e. #define VBCLICKS 0x4 #define VBCLICKM 0x2 #define VBCLICKA 0x1 #define VBDBLCLICKS 0x400 #define VBDBLCLICKM 0x200 #define VBDBLCLICKA 0x100  open_window() void open_window(int handle, intx0, int y0, int x1, int y1, int scx, int scy, int bhandle); Opens the window specied by handle. New values for bhandle; -1 open the window at the top -2 open the window at the bottom -3 no change in window stack position -4 after the topmost non-topmost window as a topmost window -5 after the topmost non-topmost window osclis() Removed (see oscommand()) swi13() Removed swin4() Removed swin8() Removed osversion() Returns (GetVersion()&(~0x7FFF0000)|0x40000000) - See the Windows documentation for GetVersion. In other words the top bit is set for Windows 95,98 and ME and is clear for NT, 2000, XP etc. The next to top bit is set on Windows and clear on RISC OS. fx() fx 138 is the only case supported. bbc_adval() Does nothing bbc_inkey() Only the parameter values -1 (shift pressed) and -2 (control pressed) are supported. bbc_vdu() Only the value 7 - beep is supported. keyboardmode() Does nothingn_wi dA(A(A(A ZA= Z#Q]4 Zc]4l Z]4 Z]4E Z#2]4x Zcj]4f 4 Z]4 Zځ]4 Z#]4| ZcK]4S Z]4 Z㻂]4ֶ Z#]4M7 Zc,]4 Zd]4)t Z㜃]4p Z#Ճ]4 Zc ]4, ZE]4 Z}]4ж Z#]4| Zc]4 Z&]4  Z^]4tT Z#]4"u Zcυ]4 Z]4hx Z?]43t Z#x]4u Zc]4 Z]4 Z ]4"| Z#Y]4V| Zc]4 Zɇ]4t Z]4X Z#:]4 Zcr]4 Z]44 Z]4 Z#]4? ZcS]4 Z]4Y ZÉ]4#| Z#]4 Zc4]4 Zl]4L Z㤊]4+@ Z#݊]4 Zc]4n ZM]4, Zㅋ]4 Z]4 ZG]4 Z]4F ZC]4 Z]4 Z(]4Tk| Za]4 ZC]4#4 Zс]4 Z ]4dx ZB]4 ZCz]4$ Z]4O Z]4y Z#]4A ZC[]4 Z]4  Z˃]4  Z]4 ZC<]4 Zt]4 Zo3Z| Z]4@ ZC]4 ZU]4X ZÍ]4 ZDž3Z| ZC]4  Z6]4 Zn]4| Z]4 ZC߆]4 Z]4| ZO]4;VX Z]4=t ZC]4p Z]4 Z0]4ϗp Zi]4V  ZC]4 Zو]41 Z]4x ZJ]4y| ZC]4 Z]4 Z]4 Z+]4 ZCc]4p Z]4 Zӊ]4 Z ]4 d ZCD]4 Z|]4| Zô]4` Z]4t ZG]4` Z]4!| ZC]4\ Z]4 Z(]4 Za]49 ZC]4 Zс]4[h Z ]4 ZB]4 ZCz]4| Z]4 Z]4; Z#]4O3 ZC[]4 Z]4 Z˃]4b( Z]4 ZC<]4x Zt]4uh Zì]4x Z]4 ZC]4 ZU]4b ZÍ]4 Zƅ]4Lx ZC]4J Z6]4 Zn]4* Z]4 ZA=?x Z#Q]4 Zc]4| Z]4p Z]4 Z#2]4B4 Zcj]4 Z]4J Zځ]4~ Z#]4 ZcK]4C Z]4) Z㻂]4 Z#]4t Zc,]4X Zd]4 Z㜃]4h` Z#Ճ]4 Zc ]4d ZE]4 ` Z}]4 Z#]4| Zc]4/8 Z&]4 Z^]4 Z#]4` Zcυ]4 Z]4= Z?]42h Z#x]4 Zc]4Z Z]42h Z ]4 Z#Y]4 Zc]4 Zɇ]4 Z]4k Z#:]4| Zcr]4h ZA= Z#Q]4 Zc]4ա| Z]4mh Z]4ax Z#2]4 Zcj]4 Z]4 Zځ]4k< Z#]4 ZcK]4s  Z]4 Z㻂]4P Z#]4 Zc,]47xd Zd]4 Z㜃]4 Z#Ճ]4 Zc ]4 ZE]4 Z}]41 Z#]4 Zc]4 Z&]4ޥ Z^]4 Z#]4 Zcυ]4 Z]4ƶ Z?]4rX Z#x]4 Zc]4 Z]4 Z ]4Ƞ Z#Y]4 Zc]4C Zɇ]4Āt Z]4 Z#:]4H Zcr]4qH Z]4 Z]4$t Z#]4 ZcS]4 Z]4H ZÉ]4 Z#]4D, Zc4]4 Zl]4 Z㤊]4 Z#݊]4D Zc]4 l ZM]4W Zㅋ]4,  Z]4؀  ZG]4 Z]4O ZC]41o Z]4  Z(]4i Za]4  ZC]4I  Zс]4 Z ]4 ZB]4q ZCz]4 Z]4 Z]4dL Z#]48H ZC[]4#@ Z]4P Z˃]4h< Z]4@ ZC<]48 Zt]4< Zì]48 Z]4NL ZC]4lT ZU]4Y@ ZÍ]4\P Zƅ]4 ZC]4l Z6]4*x Zn]4 Z]4 ZC߆]4 Z]4P ZO]4-X Z]4d ZC]4 Z]4 Z0]4 Zi]4@ ZC]4PL Zو]4~MH Z]4, ZJ]48 ZC]4 Z]4oV Z]4 ZA=yVd ZR3 Z3ΉL ZOÀ3t Z]4Sc Z#2]4 Zk3t ZO3Z| Zځ]4 Z#]4 ZL3R\ ZO3 Z㻂]4( Z#]4 Z-3ΉL ZOf3t Z㜃]4L Z#Ճ]4 Z3mH ZOG3p Z}]4 Z#]4 Z3mH ZO(3p Z^]44 Z#]4 ZЅ3mH ZO 3p Z?]4b Z#x]4 Z3P ZO39x Z ]4< Z#Y]4 Z3P ZOˇ39x Z]4) Z#:]4 Zs3mH ZO3p Z]4p Z#]4 ZT3P ZO39x ZÉ]4 Z#]4 Z53T ZOn3(e Z㤊]4h Z#݊]4 Z3T ZOO3 Zㅋ]4m Z3s` ZoI3 Z]4< ZC]4 Z31X Zo*3YC Za]4J\ ZC]4 ZӁ32d Zo 3{ ZB]40 ZCz]4 Z쵂52d Zo3{ Z#]4@ ZC[]4 Z34 Zo̓3!< Z]4 ZC<]4tL Z/v3 Zì]4 Z]4 ZC]4> ZU]4 ZÍ]4Lt Zƅ]4 ZC]4 Z834 Zop3'0 Z3j ZC߆]4 Z]4P ZoQ3 Z]4 ZC]4R Z]4 ZR234 Zj3'0 Z3\ Z/ۈ3j Z]4 ZJ]4P Z3'0 Z/3$ Z]4 Z+]4% ZCc]4 Z3k5@ ZoՊ3\  Z ]4 ZCD]4 Z|]4 Zô]4 Z3k5@ ZoI3g Z]4c ZC]4 Z3P Zo*3Z| Za]4 ZC]4 ZӁ3QD Zo 3g ZB]47 ZCz]4y Z]4 ZR3Nh Z$3r~ ZC[]4C/d Z]4 ZR̓3)8 Z3 ZC<]4 Zt]4ed Zì]4 Z]4 Z3T Z/W30F ZÍ]4 ZDž3jl Z3d Z/83K| Zop3  Z3K| Z3Zl Z/3K| ZO]4 Z]4 ZC]4d Z]4h Z0]4 Zi]4 ZҢ3QD Z/ۈ39x Z]4 ZJ]4<  ZC]4Yx Z]4 ZR3QD Z,3Nh ZCc]4 Z]4{6 Zӊ]4 Z ]4 ZE3k5@ Z/~3{ Zô]4? Z]4 ZRI3J< Z3Z| ZC]4 Z]4 ZR*3ΉL Zb3, ZC]4g Zс]4 ZR 3R \ ZC3x$ ZCz]4 Z]4 Z]4} Z#]4 Z\31X Z/3@ Z˃]49BL Z]4 Z=3mH Z/v3!< Zì]4y%L Z]4j ZC]4 ZW3s` Zo3< Zƅ]4 ZC]4 Z83R\ Zop3 Z]4 ZC߆]4 Z3R\ ZoQ3  Z]4@ ZC]4 Z3QD Zo23* Zi]4 ZC]4 Zۈ3R\ Zo3 ZJ]4j ZC]4 Z31X Zo3{ Z+]4 ZCc]4 Z31X ZoՊ3g Z ]4}4 ZCD]4 Z|]4 Zô]4 Z]4 ZRI3)8 Z3ݳ Z﹀3\ Z/3sP Z(]4 Za]4s ZC]4$ Zс]4 Z ]4n ZB]4ͩ ZCz]4] Z]4.=t Z]4?Wx Z#]4?Wx ZC[]4 Z]44 Z˃]4!L Z]4 Z=3P Z/v3 Zì]4` Z]4 Z3ΉL Z/W3t ZÍ]4 Zƅ]4 Z3ΉL Z/83 Zn]40 Z]4 Z3R\ Z/3 ZO]4, Z]4 Z3R\ Z/3K Z0]4l Zi]4 ZҢ3mH Z/ۈ3p Z]4ү ZJ]4 Z҃3mH Z/3jl Z]4 Z+]4 Zd3ΉL Z/3t Zӊ]4d Z ]4 ZE3J< Z/~3s` Zô]4 Z]4 ZRI3QD Z3jl ZC]4' Z]4 Z(]44 Zb3* ZC]4%[ Zс]4 ZR 3k5P ZC3h$ Z{3  Z]4S Z]4 Z#]4 ZC[]4m Z]4Ɔ Z˃]4$ Z3k5@ Z=3Z| Zt]4 Zì]4 Z3k5@ Z3g ZU]4 ZÍ]4 ZDž3k5@ Z3ݳ Z/83 Zn]4u Z]4;Z ZC߆]4 Z]4l ZO]4 Zl5J< ZÇ5 Z]4 Z05y Zi5n ZC]4 Zو]4$ ZR3ƨ, ZK3 ZC]4 Z5X Z5 Ex Z+5D ZCc]4 Z3J< ZoՊ3p Z ]4 ZCD]48 Z|]4 Zô]4 Z30 ZoI3T Z]4 ZC]4 Z34 Zo*31X Za]4B^ ZC]4 ZӁ3)8 Zo 3R\ ZB]4$ ZCz]4 Z쵂5k5@ Z,5t Z#5Nx ZC[]4g$ Z]4} Z˃]4:( Z]4.( ZC<]4t Zt]4, Z,5 Zl5 Z 5 ZX5k5@ Z,5/ Zƅ]4> ZC]4 Z95P Z,r5g Z]4,Y ZC߆]4 Z5mH Z,S5\  Z]4Y ZC]4| Z]4  Z,45 Zll5A ZC]4U Zو]4|X Z]4 ZlM59x Z5, Z5 Z5 Z+5_ ZCc]4 Z잊5Ή\ Z,׊5(e Z 5 ZCD]4 Z|]4 Zô]4$ Z]4 ZG]4 Zl5mH Z5 Z]4T Z(]4 Za]4 Z5mH Zԁ5z_ Z ]4O ZB5 Z}5k5@ Z쵂5)( Z,5Q4 Zl&5J, ZC[5< Z]4 Z˃]4 Z]4^ ZC<]4t Zt]43| Zì]4 Z]4L ZC]4 ZU]4 Z,5` ZlɅ5/ ZC]4 Z6]4 Z,r5Ή\ Zl5 ZC߆]4E Z]4 Z,S5d Zl5K ZC]4 Z]4 Z,45d Zll5K ZC]4: Zو]4 Z,5sp ZlM5g ZC]4, Z]4 Z]4 Z+]4 Zf5` Z잊5(e Zӊ5Gp Z ]4 ZCD]4 Z|]4 Zô]4 Z]4 ZG]4 Z]4  ZC]4 Z]4\ Z(]4  Za]4P ZC]4JUD Zс]40 Z ]4x| ZB]4k0 ZCz]4P Z]4 Z,5mX Zl&5jl ZC[]4# Z]4 Z,σ5k5P Zl5 ZC<5  Zw5 Z,5mX Zl5b ZC5_ ZX5$ Z,5$ Zƅ]4$ ZA=d Z#Q]4 Z3Rl ZOÀ3ݳ Z]4 Z#2]4J| Zcj]4 Z]4  Zځ]4nxl Z3j Z^]4k Z+]4 Zkς]4' Z]4f8 ZU39x Z_39 h ZŃ39 h Z39 h Z639h Z;]4  Z{5 Z]4bH Z<]4$ Zt]4> t Z3i 8 Z3m 8 Z]4'o8 ZoW3  Z]4Z  Zdž3i 8 Z/3m 8 Z6]4h Zp3 $ ZC]4 l Z/3Z | Z]4b ZP]4x Z3 4 Z]4 x Zo3g  Z1]4 ZCi]4 D Z줉51X Zى]4 Z]4DX ZCJ]474 Z셊5p Z,5` Zl5` Z.59h Zf59h Z,59h Z]4 ZG]4 Z]4 Zҹ3mX Z]4 Z(]40t Za]4p ZC]4fx Zс]4  Z ]4q ZB]4 ZCz]4GQ Z]4 Z]4 Z$34 ZC[]4kx Z]4 ZR̓30 Z]40 ZC<]4 Zv30 Zì]40 Z]4 ZC]4  ZU]4  ZÍ]4 Zƅ]4 ZC]4 Z83k5@ Zn]4kf` Z]4|0 ZC߆]4! Z]4݉ ZO]4 Z3p$ ZC]4A Z]4 ZR23k5@ Zi]45D ZC]4 Zۈ3k5@ Z]48d ZJ]4 Z҃3)8 Z]4 Z]4 Z,3ΉL ZCc]45D Z <(`:H  ! T llttttL  \ nn7. nn7. oBZyy! ccMR  X]7 8 HH  ! T tt"L   nn7. nn7. oBZyy! ccMR  X]7#Ol JT6lH   ! T tt"&#L  \# "nn7. nn7. oBZyy! ccMR  X]7' $\I H$  ! T (t&/"'L  ' &nn7. nn7. oBZyy! ccMR  X]70#]$(5 HxH(  ! T X)222abxd.wdowh;d%ropt"pp%tphsupAR+our,sauptorunAutoRunbmapsmpc*csn'tCRLFcscdavDavPl|dDLLdpdspwexef_ewegi'dcomltklLFStrm=rosoftMSmti/#noapOPWSoscliOv^PronPropl|rc+ha#RGBsprtnS>%P*(txtuvxFFyou'd HxH*$$$abx ``+&J*) XX,222abxd.wdowh;d%ropt"pp%tphsupAR+our,sauptorunAutoRunbmapsmpc*csn'tCRLFcscdavDavPl|dDLLdpdspwexef_ewegi'dcomltklLFStrm=rosoftMSmti/#noapOPWSoscliOv^PronPropl|rc+ha#RGBsprtnS>%P*(txtuvxFFyou'd H-$$$abx ``.&J-, tt/3&0L  ,0 /nn7. nn7. oBZyy! ccMR  X]74'1 H1  ! T t37/4L  4 3nn7. nn7. oBZyy! ccMR  X]780$55HH5  ! T t7;38L  8 7nn7. nn7. oBZyy! ccMR  X]7<489xH9  ! T 0`t;?7<L  < ;nn7. nn7. oBZyy! ccMR  X]7@8p8=HH=  ! T 0t?B;@L  @ ?nn7. nn7. oBZyy! ccMR  X]7C<8A HxHA  ! T tBF?CL  LC B@nn7. nn7. oBZyy! ccMR  X]7G@A8D HHD  ! T ttFIBGL  G Fnn7. nn7. oBZyy! ccMR  X]7JC 8H xHH  ! T ttILFJL  DJ Inn7. nn7. oBZyy! ccMR  X]7MG8K HK  ! T tLPIML  M Lnn7. nn7. oBZyy! ccMR  X]7QJ8NHHN  ! T 0tPTLQL  Q Pnn7. nn7. oBZyy! ccMR  X]7UM"RxHR  ! T`dtTXPUL  U T@nn7. nn7. oBZyy! ccMR  X]7YQVHHV  ! T 0tXTYL  Y X@nn7. nn7. oBZyy! ccMR  X]7U)Z|XxHZ  ! T