home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / sltools_1 / SetDate / ReadMe next >
Text File  |  1994-11-01  |  6KB  |  140 lines

  1.          ____              _____
  2.         (____   ____ _____  |   \  ___  _____  ____
  3.              \ |___    |    |   | /___\   |   |___
  4.         _____/ |____   |   _|___/ |   |   |   |____
  5.  
  6.              ©   1 9 9 4   S t r a y l i g h t
  7. ___________________________________________________________
  8.  
  9.                        About SetDate
  10.  
  11. Whenever I change an application or a module, I invariably
  12. forget to change the date in the version string.  It gets
  13. rather annoying after a while, and it causes great
  14. confusion too.
  15.  
  16. Near the beginning of my C programming days, I wrote a
  17. program which intercepted calls to the compiler and added a
  18. `-setdate' option, which created a header file containing
  19. the date in a particular format.  This was then included in
  20. necessary source files, and everything was wonderful.
  21. Almost.  There were problems.  Firstly, I had to fake the
  22. datestamp on the header file I created to prevent
  23. recompilations.  Secondly, and more importantly, if I
  24. wanted to change the date, I still had to remember to force
  25. a recompile of the source files which included it (usually
  26. the one which displayed the progInfo window).  This was
  27. clearly unsatisfatory.  Thirdly, it occasionally got the
  28. directory wrong, and I was left with files called
  29. `timenow.h' all over my hard disk.
  30.  
  31. My reasoning behind trying to extend cc's syntax was fairly
  32. simple -- it meant that Make would create the header at the
  33. same time as compiling.  It is an unfortunate side-effect
  34. of using Make that you can only define one command per
  35. dependency, which is one of the reasons I stopped using it.
  36.  
  37. Having written the parts of the DLLManager concerned with
  38. messing with AOF files, I decided that a much nicer was of
  39. doing this was to create an object file containing the
  40. date, which could then be linked with the other object
  41. files in the project.  I also decided that this should be a
  42. standalone program, unlike my previous effort, so that it
  43. could also be used from assembler.  I had stopped using
  44. Make in favour of raw amu and homegrown makefiles by this
  45. point.  My new approach has several advantages. It doesn't
  46. cause dependency problems.  If inserted in the makefile
  47. appropriately, it recreates its AOF file whenever the image
  48. is relinked, so the date is always correct.  Thirdly, it
  49. didn't get the directory wrong.
  50. ___________________________________________________________
  51.  
  52.                        Using SetDate
  53.  
  54. SetDate's command line syntax is fairly simple.  The first
  55. argument is the name of the output file it is to produce.
  56. This is followed by 0 or more definitions of symbols to
  57. create.  These have the format
  58.  
  59.   <identifier> [ `=' <date format> ]
  60.  
  61. Each one will create a string containing the date, and
  62. export a symbol with the given name containing its address.
  63. If you don't supply a date format, a default one is
  64. provided, which will output dates like `9 September 1993'.
  65. The formats are an extended version of those used by the
  66. SWI OS_ConvertDateAndTime.
  67.  
  68. Note that if you want the date format to contain spaces, as
  69. it normally will do, you should enclose it in double
  70. quotes.
  71.  
  72. As an example, to create a file `o.version' containing a
  73. single symbol `version' containing the version string for
  74. the progInfo window, you might use the command
  75.  
  76.   setDate o.version version="1.05 (%zdy %mo %ce%yr)"
  77.  
  78. Typing the command
  79.  
  80.     setdate -help
  81.  
  82. will display a quick reminder of this syntax, together with
  83. a list of the date formatting commands available.
  84.  
  85. --- Use with C programs
  86.  
  87. You should note that the symbols created by SetDate should
  88. be declared as
  89.  
  90.   extern char <name>[];
  91.  
  92. --- Use in modules
  93.  
  94. When you write modules in assembler, you can use SetDate to
  95. set up the module's help string.  To help you do this, the
  96. excape sequence `\t' will insert the correct number of tabs
  97. to move the cursor to column 16 as required to make the
  98. `*Help Modules' display line up neatly.  Note that the date
  99. format required is `%dy %m3 %ce%yr'.
  100.  
  101. You should then link the objects into the library using
  102. linker options `-base 0 -bin' -- this will ensure that the
  103. help string offset is correct in the linked module. This
  104. has an unfortunate side effect -- you can't use the
  105. linker's relocation feature.  However, this isn't really
  106. too much of a hardship -- external symbols become offsets
  107. from the module base rather than absolute addresses.
  108.  
  109. As an example, you might construct a module help string
  110. with the command
  111.  
  112.   setdate o.version help="MyModule\t3.25 (%dy %m3 %ce%yr)"
  113. ___________________________________________________________
  114.  
  115.                      Technical details
  116.  
  117. SetDate was written in C, largely because I already had an
  118. AOF generation library in C, so it seemed silly rewriting
  119. it in assembler.  Seeing as it's only 5K anyway, I don't
  120. think that anyone's overly bothered about that.
  121.  
  122. The source, weighing in at almost 300 lines, was compiled
  123. using Norcroft RISC OS ARM C (that's the Acorn compiler),
  124. linked using Dave Daniels' drlink with a small AOF library
  125. and Straylight's `astubs' Shared C Library stubs, which are
  126. about 3-4K smaller than Acorn's.
  127.  
  128. Straylight do not release source code.  Don't bother asking
  129. for it.
  130. ___________________________________________________________
  131.  
  132.                   Copying and distribution
  133.  
  134. You may give copies of setDate and this documentation to
  135. anyone you want.  You may not sell copies of either, except
  136. as part of a PD compilation disk, and even then not for
  137. more than 2 pounds sterling.  You may not alter either the
  138. documentation or the application in any way.
  139. ___________________________________________________________
  140.