home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / documentation / documents / a252glas < prev    next >
Internet Message Format  |  1999-04-27  |  26KB

  1. From: tb@liszt.thorn-emi-crl.co.uk (Tim Browse)
  2. Date: 23 Feb 93 14:06:26 GMT
  3.  
  4.  
  5. Proposed Glass File Format
  6. ==========================
  7.  
  8. This file/message concerns the proposal of a new Template file format.
  9.  
  10. Objectives 
  11. ~~~~~~~~~
  12.  
  13. * An alternative to the current Template file.
  14.  
  15. * Facility to hold information about entities other than windows and icons
  16.   e.g. menus, icon names, meta-icons etc.
  17.  
  18. * Make it simple to use, namely:
  19.  
  20.   + Provide a template editor that can create Glass files and convert 
  21.     Glass <-> Template files.
  22.  
  23.   + Provide support code to use any special features (e.g. meta-icons,
  24.     position independent menus etc)
  25.  
  26.   + Provide a program to create Template files from Glass files so Risc OS
  27.     Lib will work ok, and generally ease the transition.
  28.  
  29. * Reasonably efficient format, within reason - e.g. 32-bit words will be
  30.   used for number storage as opposed to bytes - I think we can handle an
  31.   overhead of a few hundred bytes in our files (at worst). Unless lots of
  32.   numbers are stored.
  33.  
  34. * Make it an extensible tagged file format.  Divide information into chunks,
  35.   and have keys + file offsets to find them.  Then if you don't understand a
  36.   certain chunk, it's ignored.  Also, a chunk must only contain relative
  37.   file offsets *within* itself so that chunks may just be copied verbatim
  38.   from one file to another.  This means someone could write a simple filter
  39.   to map the font chunk entries to different fonts and still preserve the
  40.   rest of the Glass data. i.e. it should be possible to divide up the chunks
  41.   of a Glass format file, and write them back in any order and the file
  42.   would still be a legal Glass file, as long as the header entries point to
  43.   the correct data.
  44.  
  45. * As you may have noticed, the above is very similar to Acorn's chunk file
  46.   format, and hence I propose to use the Chunk file format.  The format of
  47.   the chunks themselves will of course be defined by myself and others.
  48.   The reason I intend to use the chunk file format is that everything it
  49.   does is needed by Glass files, and I see no reason to re-invent wheels.
  50.   A filetype is still needed so I and all the other lazy people can just
  51.   double click on the file to edit it :-)
  52.   A considerable amount of file structure will be present in the chunks
  53.   themselves, and it may seem unncessary to bother with chunk files with
  54.   this first standard, but bear in mind that this format is meant to be
  55.   extended.
  56.   Remember that if this standard is adopted, you're stuck with it - so it
  57.   had better be able to handle what you might want to do in the future.
  58.  
  59. * Make people *want* to use it by providing features they want(!)
  60.  
  61. * Where necessary, a chunk will be timestamped to indicate when it was
  62.   last edited. 
  63.  
  64. * Don't use icon validation strings - there's already too much crap in them.
  65.  
  66. * Structure the file so that it's reasonably quick to load. i.e. don't
  67.   make it necessary to have to guess memory requirements (can you say
  68.   Wimp_LoadTemplate?) or to do excessive disc thrashing.
  69.   I have, in a number of places, made various trade-offs between
  70.   efficiency and convenience.
  71.  
  72. To establish a standard
  73. ~~~~~~~~~~~~~~~~~~~~~~
  74.  
  75. For the first standard, the objective is simple.  The format will allow
  76. storage of Templates as in a normal Template file, and also a system for
  77. naming Icons, so that names rather than icon numbers can be used to identify
  78. icons in programs. Most programmers use #defines (or their equivalent) 
  79. instead of numbers at the moment, but this will automate the process, by
  80. generating one or more header files containing the #defines/equates 
  81. necessary.
  82. The programmer would use a template editor to associate names with icons.
  83.  
  84. The reasoning behind this is:
  85.  
  86. * People are more likely to adopt a standard if it is initially simple and
  87.   provides some feature they like (e.g. like saving them the trouble of
  88.   checking icon numbers). I certainly need it - some windows I use  have in 
  89.   excess of 100 icons.
  90.  
  91. * People are more likely to *comment* on a standard if the basic framework
  92.   is put in place and then extensions are added as and when required.
  93.   People are, I think, less likely to wade through a 35-page document that
  94.   comes at them from nowhere, like some electronic custard pie.  And if
  95.   people don't comment on it, some important feature may be missed,
  96.   causing the standard to fall from favour, and hence from use.
  97.  
  98. * If a simple standard is put forward, it will be agreed on reasonably
  99.   quickly (I hope!) and it can start to be used. If some huge standard is
  100.   introduced it will be argued over for ages and will probably die.  I don't
  101.   want this - I want something I can use, without having to keep on
  102.   re-inventing wheels. This concept may pass over the heads of ARM
  103.   assembler programmers ;-)
  104.  
  105. * I don't have time at present to think in depth about all the features
  106.   required and produce a *complete* standard.  And if I can't think about
  107.   it in depth, I'll probably get it wrong, and I don't want to do that.
  108.  
  109. * The important thing is to have an extensible standard!  Chunk files
  110.   make this possible.
  111.  
  112.                                                                  
  113. The Proposed Standard
  114. =====================
  115.  
  116. Basic Format
  117. ~~~~~~~~~~~
  118. As mentioned, the file will be a chunk file as specified in the Acorn C (and,
  119. I assume, Objasm) manuals.  For Desktop C, it's on pp226-228 of the "Acorn
  120. Desktop Development Environment" manual.  If anyone doesn't have access to it
  121. I'm sure myself or someone else could outline the format if necessary.
  122.  
  123. In this explanation, the chunk file offset for Glass files is assumed to
  124. be "GLS_".
  125.  
  126. Chunks in Glass files
  127. ~~~~~~~~~~~~~~~~~~~~
  128.  
  129. Name       Use
  130. ~~~       ~~~
  131. GLS_INFO   Miscellaneous info about this file and the Glass version it
  132.            conforms to.
  133. GLS_FONT   Maps fonthandles used in Glass file to Risc OS font names.
  134. GLS_WIND   Window and icon definitions (much the same as Templates)
  135. GLS_NAME   Names used to refer to icons and icon groups.
  136.  
  137. Chunk formats
  138. ~~~~~~~~~~~~
  139.  
  140. Bear in mind throughout these descriptions that we know the total size
  141. of each chunk from the chunk file header.
  142.  
  143. Also, please bear in mind that although some structures may seem slightly
  144. wasteful of memory, this is the format of a disc file, and these wastages
  145. may not necessarily translate into memory wastages (e.g. indexes will only
  146. be used while loading the file, and then wholly or partially discarded).
  147.  
  148. GLS_INFO
  149. ========
  150.         Chunk    Field  Field Name &
  151.         Offset:  Size:  Meaning:
  152.  
  153.         0        4      Info_HeaderSize
  154.                         Size of this header in bytes.
  155.         4        4      Info_GlassVersion
  156.                         This is the version of the Glass Format that this
  157.                         file conforms to.  An unsigned word, at present
  158.                         assigned as follows:
  159.  
  160.                         MSB  LSB
  161.                         AAAABBCC
  162.  
  163.                         where:
  164.                         AA = reserved
  165.                         BB = Major version number
  166.                         CC = Minor version number
  167.  
  168.                         So version 2.12 would be encoded as &0000020C.
  169.  
  170.         8        4      Info_CreatorName
  171.                         Chunk offset of a null-terminated string indicating 
  172.                         the program that created this Glass file.
  173.                         e.g. "TemplEd" or "Glazier"
  174.  
  175. Comments
  176. ~~~~~~~
  177. Good so far, innit?
  178.  
  179.  
  180. GLS_FONT
  181. ========
  182.         Chunk    Field  Field Name &
  183.         Offset:  Size:  Meaning:
  184. Header:
  185.         0        4      Font_HeaderSize - size of header in bytes
  186.         4        5      Font_TimeStamp - time stamp of this chunk
  187.         9        3      Reserved - must be 0
  188.         12       4      Font_Num (0 => no fonts used in Glass file)
  189.                         Number of font handles defined in this chunk.
  190.                         Font handles always numbered 0 to Font_Num-1.
  191.  
  192. Font handle index:
  193.         i+0      4      Font_Offset 0
  194.                         Chunk offset to font data for handle 0.
  195.         i+4      4      Font_Offset 1
  196.                         Chunk offset to font data for handle 1.
  197.         ...
  198.        i+(n-1*4) 4      Font_Offset n-1
  199.                         Chunk offset to font data for handle n-1.
  200.  
  201. Font data entries: (pointed to by index entries)
  202.         d+0      4      Font_XSize
  203.                         x point size * 16
  204.         d+4      4      Font_YSize
  205.                         y point size * 16
  206.         d+8      ?      Font_Name
  207.                         A null-terminated string.
  208.                         (e.g. "Trinity.Medium.Italic\0")
  209.  
  210. Comments
  211. ~~~~~~~
  212. If no GLS_FONT chunk, it is assumed the file uses no anti-aliased fonts.
  213. The font data entries must be word aligned.
  214.  
  215.  
  216. GLS_WIND
  217. ========
  218.         Chunk    Field  Field
  219.         Offset:  Size:  Meaning:
  220. Header:
  221.         0        4      Wind_HeaderSize - size of this header in bytes
  222.         4        5      Wind_TimeStamp - time stamp of this chunk
  223.         9        1      Wind_Flags - flag field for this window chunk.
  224.  
  225.                         At present the following flags are defined:
  226.  
  227.                          bit 0: Wind_AntiAliased
  228.                          0 => This window chunk primarily uses the System 
  229.                               font.
  230.                          1 => This window chunk primarily uses anti-aliased 
  231.                               fonts
  232.  
  233.                          bit 1: Window_ThreeD
  234.                          0 => This window chunk primarily uses 'standard' 
  235.                               Risc OS icons
  236.                          1 => This window chunk primarily uses 3D 'bordered'
  237.                               icons to achieve a 3D look and feel.
  238.  
  239.                         All other bits in this word should be 0.
  240.  
  241.         10       2      Reserved - must be 0
  242.         12       4      Wind_NumWindows - number of windows defined in
  243.                         this chunk.
  244.         16       4      Wind_WindDefnSize
  245.                         Size of the Wind_WindDefn Fields in window data
  246.                         blocks (see below).
  247.                         At present 88, but may change.
  248.         20       4      Wind_IconDefnSize
  249.                         Size of the IconDefn fields in window data
  250.                         blocks (see below).
  251.                         At present 32, but may change.
  252.         24       4      Wind_IndexSize - size of index entries
  253.                         At present it is 36.
  254.         28       4      Wind_MessageFile
  255.                         Chunk offset of 0-terminated filename of the
  256.                         message file to use to expand message tags.
  257.                         0 if the default message file (whatever that
  258.                         means to the programmer's library) is to be used,
  259.                         or if no message tags are used.
  260.  
  261. Index:
  262.         i+0      12     Wind_Id
  263.                         A null-terminated string identifying the window.
  264.                         e.g. "ProgInfo".
  265.         i+12     4      Wind_Offset
  266.                         Chunk offset for data for this window entry.
  267.         i+16     4      Wind_Size
  268.                         Size of data for this window entry.
  269.         i+20     4      Wind_IndDataOffset
  270.                         Chunk offset of indirected data for this window.
  271.         i+24     4      Wind_IndDataSize
  272.                         Size of indirected data for this entry.
  273.         i+28     4      Wind_NumGroups
  274.                         Number of icon groups for this window. 
  275.         i+32     4      Wind_GroupOffset
  276.                         Chunk offset of group definitions for this entry.
  277.  
  278.      i+Wind_IndexSize   Start of next index entry (i.e. Wind_Id).
  279.  
  280. Window Data blocks:
  281.         d+0      88     Wind_WindDefn
  282.                         A window definition block as passed to the SWI
  283.                         Wimp_CreateWindow, with the exceptions noted below.
  284.                         The number of icons is explicitly obtained from this
  285.                         block from the usual field (d+84).
  286.         d+88     32     Wind_IconDefn 0
  287.                         Icon definition for first icon of this
  288.                         window (if any).  Block is as passed to the SWI
  289.                         Wimp_CreateIcon, with the exceptions noted below.
  290.         d+120    32     Wind_IconDefn 1
  291.                         etc...
  292.         
  293. Indirected Data blocks (pointed to by Wind_IndDataOffset):
  294.         Free-form entries, of byte resolution, but each entry *must*
  295.         be terminated by a 0.  Entries for icons such as writable icons 
  296.         which may have a large buffer but only a short string initially
  297.         should be padded to full length with 0s.  This is to ensure that the
  298.         indirected data size returned by the Glass SWI is correct.
  299.  
  300. Icon Group Blocks (pointed to by Wind_GroupOffset):
  301.         g+0      12     Group_Name
  302.                         Null-terminated string describing group.
  303.                         Unique within the icon group block.
  304.                         Used in conjunction with the GLS_NAME chunk.
  305.         g+12      4     Group_Type for icon group 0.
  306.                         0 => Positional group.
  307.                         No other group types allocated.
  308.         g+16      4     Group_NumIcons
  309.                         Number of icons in this group.
  310.         g+20      4     Handle of first icon of this group
  311.         g+24      4     Handle of second icon of this group.
  312.         ...
  313.                   4     Handle of last icon in this group.
  314.  
  315.         Followed by the rest of the icon group definitions.
  316.  
  317. Comments
  318. ~~~~~~~
  319.  
  320. Window chunk flags
  321. ~~~~~~~~~~~~~~~~~
  322. These flags are, at present, mainly used for customising which set of 
  323. templates an application loads.  The Glass file may contain only one type 
  324. of templates - the Glass loader routine will attempt a 'best-fit' approach 
  325. to choosing which set to load.
  326. The caller will supply the flags to match when loading template sets.
  327. There must *not* be more than one window chunk with the same flags.
  328. In practice, at run-time, only one GLS_WIND chunk will be loaded.
  329.  
  330. Window data blocks
  331. ~~~~~~~~~~~~~~~~~
  332. Offsets in these blocks should not be taken to be valid forever - use
  333. Wind_WindDefnSize and Wind_IconDefnSize to ensure any embarrassments are
  334. avoided.
  335.  
  336. Window data blocks need not be in the order they appear in the index, so
  337. long as the chunk offsets are correct.  They need not be contiguous in the
  338. chunk either.
  339.  
  340.  
  341. The exceptions in window/icon definition blocks are as follows:
  342.  
  343. Sprite area control block pointers
  344. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  345. In Glass files, sprite areas are interpreted as follows:
  346.  
  347.               0 => Default application sprite area
  348.               1 => Wimp sprite area
  349.  
  350. Option for indirected sprite-only icons only:
  351.  
  352.               2 => Use this window's sprite area pointer.
  353.  
  354. Option for window sprite areas only:
  355.  
  356. Any other value => Offset into indirected data area which specifies filename
  357.                    of sprite file to be used for this window.
  358.                    This string may be a message tag - see below.
  359.  
  360.  
  361. Indirected data
  362. ~~~~~~~~~~~~~~
  363. When indirected icons (including the window title bar) occur, the datum for
  364. a sprite name, text buffer or a validation string is actually divided into 
  365. two fields, flags and offset:
  366.  
  367.   MSB  LSB
  368.   FFOOOOOO
  369.  
  370. The 8-bit FF field is a flag field.  These flags will be allocated for 
  371. various purposes as and when they become necessary.  At present, only the 
  372. most significant bit of the flags is allocated - it is the 'message tag 
  373. bit' - if clear, the indirected data is the actual data to use in the icon,
  374. if not, it is the message tag to use to look up the actual data.
  375. The message tag format is undefined - i.e. msgstrans or DeskLib format tags
  376. or anything else is legal.
  377.  
  378. The OOOOOO field is a 24-bit offset value.  This allows for indirected data 
  379. blocks of up to 16Mb in size - this should be sufficient for most occasions.
  380. I am open to the suggestion that this field be defined as 16 bits of flag 
  381. and 16 bits of offset.
  382.  
  383.  
  384. Font handles
  385. ~~~~~~~~~~~
  386. These are, of course, the internal font handles used throughout the
  387. Glass file, and not font handles as understood by the Risc OS FontManager
  388. module.  The GLS_FONT chunk can be used to convert them to real font
  389. handles - this will usually be done by the library routines that support
  390. Glass files.
  391.  
  392. Groups
  393. ~~~~~
  394. So far, only positional groups have been allocated a group type (0).
  395. Positional groups are groups of icons that are treated as a unit in a
  396. Glass editor - they are moved in one operation etc, like a group in !Draw.
  397.  
  398.  
  399. GLS_NAME
  400. ========
  401.         Chunk    Field  Field
  402.         Offset:  Size:  Meaning:
  403. Header:
  404.         0        4      Name_HeaderSize
  405.                         Size in bytes of this header
  406.         4        5      Name_TimeStamp
  407.                         Standard 5-byte Risc OS Time stamp.
  408.                         See Risc OS 2 PRMs, p550, "Real time".
  409.         9        1      Name_Flags - the flag field for this name chunk.
  410.  
  411.                         At present the following flags are defined:
  412.  
  413.                          bit 0: Name_AntiAliased
  414.                          0 => This name chunk refers to the GLS_WIND chunk
  415.                               that primarily uses the System font.
  416.                          1 => This name chunk refers to the GLS_WIND chunk
  417.                               that primarily uses anti-aliased fonts
  418.  
  419.                          bit 1: Name_ThreeD
  420.                          0 => This name chunk refers to the GLS_WIND chunk
  421.                               that primarily uses 'standard' Risc OS icons
  422.                          1 => This name chunk refers to the GLS_WIND chunk
  423.                               that primarily uses 3D 'bordered' icons to 
  424.                               achieve a 3D look and feel.
  425.  
  426.                         All other bits in this word should be 0.
  427.  
  428.         10       2      Reserved - must be 0
  429.         12       4      Name_IconPrefix
  430.                         Chunk offset of null-terminated string specifying
  431.                         the global prefix for icon names.
  432.                         0 => no prefix.
  433.         16       4      Name_IconSuffix
  434.                         Chunk offset of null-terminated string specifying
  435.                         the global suffix for icon names.
  436.                         0 => no suffix.
  437.         20       4      Name_GroupPrefix
  438.                         Chunk offset of null-terminated string specifying
  439.                         the global prefix for group names.
  440.                         0 => no prefix.                                  
  441.         24       4      Name_GroupSuffix
  442.                         Chunk offset of null-terminated string specifying
  443.                         the global suffix for group names.
  444.                         0 => no suffix.
  445.         28       4      Name_IndexSize
  446.                         Size in bytes of name index entries.
  447.  
  448. Window name index entries:
  449.         i+0      12     Name_WindowId
  450.                         Window ID of the window this naming block refers
  451.                         to. (see GLS_WIND chunk details).
  452.         i+12     4      Name_WindowPrefix
  453.                         Chunk offset of null-terminated string specifying
  454.                         the prefix for names of icons in this window.
  455.                         0 => no prefix.
  456.         i+16     4      Name_WindowSuffix
  457.                         Chunk offset of null-terminated string specifying
  458.                         the suffix for names of icons in this window.
  459.                         0 => no suffix.
  460.         i+20     4      Name_IconOffset
  461.                         Chunk offset of icon name block for this window.
  462.  
  463.     i+Name_IndexSize    Next index entry
  464.  
  465. Icon name block:
  466.         i+0      4      Name_IconName 0
  467.                         Chunk offset of null-terminated string specifying
  468.                         the name of icon 0 of this window
  469.                         0 => anonymous icon
  470.         i+4      4      Name_IconName 1
  471.                         Chunk offset of null-terminated string specifying
  472.                         the name of icon 1 of this window
  473.                         0 => anonymous icon
  474.         ...
  475.         i+4*n    4      Name_IconName n-1
  476.                         Chunk offset of null-terminated string specifying
  477.                         the name of icon (n-1) of this window
  478.                         0 => anonymous icon
  479.         i+4+4*n  ?      Data for icon names...
  480.  
  481.  
  482. Comments
  483. ~~~~~~~
  484. There is a window name index entry + icon name block for each window that 
  485. contains icons referenced by name.  Hence a window with no icons referenced
  486. by name (eg a window with no icons such as Edit's main window) would not 
  487. have a window name index entry or icon name block.
  488.  
  489. As with the GLS_WIND chunk, although there may be multiple GLS_NAME chunks 
  490. in the file, only one is loaded at run-time, according to flags passed to
  491. the Glass loader by the client application.
  492.  
  493. Icon/Group names have 5 components, all but one of which, the actual icon or
  494. group name, may be null.  These may be combined in one of two orders:
  495. (Icon is used here but these orders also apply to groups)
  496.  
  497.    Name_IconPrefix   +
  498.    Name_WindowPrefix +
  499.    Name_IconName     +
  500.    Name_WindowSuffix +
  501.    Name_IconSuffix
  502.  
  503.    OR
  504.    ~~
  505.    Name_WindowPrefix +
  506.    Name_IconPrefix   +
  507.    Name_IconName     +
  508.    Name_IconSuffix   +
  509.    Name_WindowSuffix
  510.  
  511.  
  512. This allows for (almost) any naming scheme the user can think of.
  513. The actual ordering used is not specified in the file - it is specified
  514. to the Glass support module when decoding names.
  515.  
  516. There may not be two windows with the same name, two icon groups with the
  517. same name, or two icons with the same name.  'name' here means the full name,
  518. i.e. after all the prefixes/suffixes have been added.
  519.  
  520.                            End Of Proposed Standard
  521.  
  522.                                ------ oOo ------
  523.  
  524. Glass Relocatable Module
  525. ========================
  526.  
  527. There will be support for the Glass file format in the form of a relocatable
  528. module (RM), which will provide SWIs to access and use Glass files.  A 
  529. number of these will be analogues of Wimp SWIs for handling template.
  530.  
  531. I have a volunteer to write the first version of this module, and I hope to
  532. be able to thrash out the details of the SWIs with him soon.  Below are some 
  533. tentative ideas about what should be provided.  Contact me if you think 
  534. anything's been missed.
  535.  
  536. It seems to me that without careful thought, SWI number allocations can be 
  537. 'wasted' by not bothering with reason codes and just having a different SWI 
  538. for everything, and then realising a new chunk is needed - for this reason 
  539. only two SWIs are defined so far.
  540.  
  541. Obviously this requires an official SWI chunk from Acorn, so I am writing to 
  542. request one (as well as an official chunk file prefix).
  543.  
  544. SWIs:
  545.  
  546. Glass_FileOp
  547. ============
  548.  
  549. Operations on Glass files.
  550.  
  551. Reason codes:
  552.  
  553. Glass_FileOp 0 : Open Glass File
  554. Glass_FileOp 1 : Close Glass File
  555. Glass_FileOp 2 : Load Window Template
  556. Glass_FileOp 3 : Load Name Information
  557. Glass_FileOp 4 : Get File Version Information
  558.  
  559.  
  560. Glass_NameOp
  561. ============
  562.  
  563. Services to decode icon/group names.
  564.  
  565. Reason codes:
  566.  
  567. Glass_NameOp 0 : Decode icon name
  568. Glass_NameOp 1 : Decode group name
  569.  
  570.  
  571.  
  572. Registering message tags converters
  573. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  574. It was an interesting exercise collecting all the comments on Glass as I
  575. kept coming up with solutions to problems I thought quite neat, only to 
  576. discover that someone else had come up with the same idea a few messages
  577. later :-(.  Anyway, one of the main points of interest was the issue of
  578. message tags.  It would be nice to 'msgtrans' the whole window template(s)
  579. automatically down to the level of icon text.
  580. This is supported by the format at present, but the client has to convert
  581. the messages 'by hand'.  I thought (and so did TMOTA) that the ideal solution
  582. would be to register a message tag converter function which the Glass module
  583. would use to convert the messages automatically when loading a template.
  584. The only problem with this is that as far as I can tell, the main systems
  585. in use are Acorn's msgtrans module, RISCOS_lib's msgs module, and DeskLib's
  586. Msgs module, and these all work in different ways, and have different
  587. calling patterns.
  588.  
  589. As I see it, there are two solutions:
  590.  
  591. (1) Define a standard function type/interface to be registered with the Glass
  592. module. Then the client can write a veneer (or use a standard one) for 
  593. whatever function they want to use.
  594.  
  595. (2) Support the main libraries used, and specify what 'type' the function
  596. being registered is - i.e. DeskLib/RISCOS_lib/msgtrans.
  597.  
  598. Personally I prefer (1), but I would welcome comments on this. Obviously, if
  599. option (2) is supported, then option (1) is too, with no extra work. (i.e.
  600. choose the function type closest to the one you use and write a veneer for
  601. it).
  602.  
  603. Another connected problem is that it would be nice to specify message tags
  604. in the Glass file but not have to provide a tag. i.e. in a similar way to the
  605. DeskLib automatic help handler, if the indirected data field of an icon has 
  606. the message tag bit set, but the chunk offset is 0, then a tag is synthesised
  607. using the window name and icon number, e.g.
  608.  
  609. proginfo.1
  610. options.3
  611.  
  612. and so on.  The problem is that there are different syntaxes for message
  613. tags around.  Some are nicer than others, but ideally all should be
  614. supported.  Again, maybe a small set of different syntaxes could be 
  615. supported rather like the support for different call patterns of message
  616. tags conversion functions. Comments please!
  617.  
  618. This facility would make de-nationalising templates very easy as a Glass file
  619. editor could then have an option to save a de-nationalised version and
  620. automatically generate the message tags directly from the icon data.
  621.  
  622.  
  623. Scene of the Crime
  624. ==================
  625. If anyone wants to contact me, I read comp.sys.acorn{,.tech}, and 
  626. occasionally post to it. I am omni-present on Arcade BBS's message areas.
  627. Arcade is a UK ANSI board: 081-654-2212/081-655-4412, most speeds.
  628. Prefix with international code if outside UK, and probably lose the 0 from
  629. the front of 081 too, I shouldn't wonder.
  630.  
  631. Failing that you might be able to get me on internet:
  632.  
  633. tbrowse@thorn-emi-crl.co.uk  <---- N.B. This is a new address.
  634.                                         (And it may even work!)
  635.  
  636. Failing that, Snailmail:
  637.  
  638. 1, Arkle House,
  639. 6, Chiltern View Road,
  640. Uxbridge, 
  641. Middlesex.
  642. UB8 2PA
  643. United Kingdom.
  644.  
  645. I think that's it - I await your comments.  I'll pursue the module SWI 
  646. interface and post it when it's half decent.
  647.  
  648. Cheers,
  649.  
  650. Tim Browse
  651.  
  652.  
  653.