home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine 1996 / ARCHIVE_96.iso / discs / mag_discs / volume_7 / issue_09 / templed / !TemplEd / GlassFmt < prev    next >
Text File  |  1993-09-06  |  26KB  |  648 lines

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