Version 8.1.005===============Released by KunalM, 06/03/2007 1) RCOMP ported to the TOOLS2 platform, under PREQ1182, MS3.6.2Version 8.00.002================Released by AndrewR, 3/3/2005 1) DEFECT FIX: DEF055559 - Problems building rcomp in VC6 IDEVersion 8.00.001================Released by AndrewR, 7/2/2005 1) DEFECT FIX: DEF054981 - tools_rcomp component is updated every dayVersion 8.00.000================Released by AndrewR, 4/2/2005 1) Fixed DEF054617 - rcomp doesn't build from source 2) Fixed INC049059 - incorrect line number for error reported by rcomp when building \s60\gsVersion 7.01.009============Released by KuldipN, 22/07/2004 Add UID2 and UID3 keywords to RCOMP (CR HBRT-5YJJ9C Specifying UID2 and UID3 in RSS files)Version 7.01.008============Released by DuskoJ, 10/07/2003 1) Fixed DEF022269 Resource value is read incorrectly 2) Fixed INC036025 RCOMP chinese resource complation problem Version 7.01.007============Released by Jon Chatten, 03/06/2003 1) Fixed "DEF025433 RComp core dumps on certain resource files" 2) Adjusted version number in release.txt to match binary.Version 7.06============Released by Dusko Jahora, 03/06/2003 1) Reverted fix for DEF022269Version 7.05============Released by Dusko Jahora, 02/06/20031) DuskoJ 1) Changes to RCOMP whihch are part of CR PCHY-5L3RDW "Typhoon must support 16bpp colour". 2) Fixed DEF022269 Resource value is read incorrectly (this fix was not submitted on 09/05/2003 because of an integration error)Version 7.04============Released by Dusko Jahora, 09/05/20031) DuskoJ 1) Fixed DEF022269 Resource value is read incorrectlyVersion 7.03============Released by Dusko Jahora, April 2003 1) Fixed defect DEF017151 "RCOMP should be upgraded to support files with UTF8 signature".1) William 1) Fixed defect ROS-58VCX8 "RCOMP doesn't allow + in filenames" by removing the unnecessary validation of the filenames left by the C++ preprocessor. 2) Fixed defect RED-5ACK5F "Resource compiler creates nothing for empty and bad counted byte arrays"2) Dusko 1) Fixed defect ROS-5B7MHW "RCOMP fails to handle boundary values correctly for WORD data type"NB. The handling of LABEL suggests that it would be pretty easy to add rls_string supportinto the compiler directly.Version 7.01============Released by Jon Chatten, February 2002Fixed defect ROS-56PHFA - Replaced system() call to uidcrc.exe with a call to _spawnlp -this addresses the IDE-hanging issue when epocrc.pl is integrated as a plug-in with the CWIDE on Windows 98.Removed attempt to absolutely identify uidcrc.exe - this is no longer required as the CW RCOMP/EPOCRC.PLplug-in now sets the PATH before invoking the command line tools.1) William 1) Fixed defect ROS-55KJ4U "RCOMP fails if epoc32\tools not on the path"Version 7.00============Released by David Batchelor (November/December 2001)The format of resource files changes as follows:- The initial 2 two-byte values are removed as they are completely redundant. (All the information they provide can be derived from the last 2 bytes of the file combined with the size of the file.)- Resource files now have a standard 4-byte checked-UID field at the start. The first UID is 0x101f4a6b, to indicate that the resource file potentially contains Unicode compressed according to the "Standard Compression Scheme for Unicode" (see http://www.unicode.org/unicode/reports/tr6/tr6-3.2.html). The second and third UIDs may be specified on the command-line by using an optional parameter of the form "-{0x12345678,0x9abcdef0}" (without the quotation marks). If "*" is used as the last UID, e.g. "-{0x600ddea1,*}", then the resource file's "offset" (i.e. the 20-bit number generated from the resource file's "NAME") is used as the last UID.- The UID field is immediately followed by a bit-array, one bit for each resource in the resource file, where each bit indicates whether the corresponding resource contains compressed Unicode. The bit field is padded up to a multiple of 8-bits (if necessary) with zero bits.- Each resource which contains compressed Unicode consists of a series of "runs" preceded by a 1 or 2-byte run-length (1 byte if the run is <128 bytes, else 2 bytes). The run-length value does not include itself in the byte count that it holds. The first run, the third run, the fifth run etc contain compressed Unicode. The second run, the fourth run, the sixth run etc contain other stuff. As the protocol defines that the first run is compressed Unicode, this run may obviously be of zero length - no subsequent run in that resource may be of zero length.- Rcomp only uses compressed Unicode for text fields if it yields any benefit (i.e. only if it actually makes the output file smaller).- The changes are completely transparent for code that reads resources.Version 6.03============Released by William Roberts, 30-Jul-2001Fix defect EXT-4YSCUV "Resource compiler corrupts long strings"Handle very long C++ comments, which previously caused a "token buffer overflow" message from thelexical analyser. Avoid overruning the buffer for literals by using a CHECK_APPEND() macro whichdiscards characters rather than run off the end, giving errors like<empty>(5) : string too long - 1 ignored<empty>(5) : string too long - 2 ignoredAvoid overflowing the Value array in string expressions by checking the new length beforeagreeing to concatenate the strings. Ultimately it would be best to replace Value[] with a char* which has been created with strdup() and can therefore be realloc'd to grow the string.Fix defect ARG-4TZF7J "RCOMP needs warning waivers registered with SI"Removed all warnings in tools rel build - some tools deb warnings will appear in rcomp.cpp because of problems in the mks\etc\yyparse.cpp file, but I didn't want to hide related problems in any new Symbian code we might add. Improve the -v output to show the primitive types being emitted, and to dump the IndexTable as hexoffsets followed by the resource name, e.g. IndexTable IndexTableItem 4 <empty> IndexTableItem c r_eikserv_panic_dialog IndexTableItem b8 r_eiksrv_oom_event_top IndexTableItem e4 r_eiksrv_oom_event_bot IndexTableItem 144 r_eikserv_replace_main_batteries IndexTableItem 170 r_eikserv_replace_backup_batteryand ResourceHeader r_eiksrv_tasklist_dialog ++ResourceItemArray SimpleResourceItem [Long flags] 9 SimpleResourceItem [LText16 title] SimpleResourceItem [LLink pages] SimpleResourceItem [LLink buttons] StructArrayResourceItem (Level 0) [items] ArrayLength [Word] 1 ---------------------- --ResourceItemArrayArray ++ResourceItemArray SimpleResourceItem [Word type] 1001 SimpleResourceItem [LText16 prompt] SimpleResourceItem [Word id] 1 SimpleResourceItem [Long itemflags] 0 StructTypeResourceItem (Level 0) [control] ---------------------- ++ResourceItemArray SimpleResourceItem [Byte version] 0 SimpleResourceItem [Word flags] 0 SimpleResourceItem [Word height] 8 SimpleResourceItem [Word width] 20 SimpleResourceItem [LLink array_id] ---------------------- SimpleResourceItem [LText16 trailer] ----------------------Together these changes should make it significantly easier to step through the binary image of aresource and work out which element has changed unexpectedly.Version 6.02============Released by William Roberts, 15-Feb-2001Fix awful defect in version 6.01, which caused negative integer constants to be written to the file as -1.When testing with LOCKIT, RCOMP developer should be aware that the version of RCOMP.EXE used by lockit is kept in \lockit\tools, not \epoc32\tools.Version 6.01============Released by William Roberts, 14-Feb-2001Redefined character literals ('x') to be effectively strings so that they can contain UTF8 encodingsfor interesting characters. This is handled using the same lexical rules as string literals, sothe limited escape processing is also supported. The introduction of strings surrounded by single-quotesmeans that the sequence \' is now accepted as standing for '.If the character literal string decodes to more than one Unicode character, a warning is given and therest of the string is ignored. The prevailing source character encoding is used, but there is no supportnarrow character literals in the difficult part of the CP1252 range: the interpretation of the literalis always "the Unicode encoding for the first character of the string". For example, even in a CP1252 source file building a narrow resource, a literal containing the Euro symbol will be interpreted as 0x20ac, not 0x80.LTEXT strings are now checked to ensure that they are less than 256 characters in length.The NAME statement can now take a string literal or a label, instead of the previous behaviour where thelexical analyser handled the following word differently. Any RSS file which used a keyword as a name,for example WORD.RSS, will need to be changed to specify the name as a literal: the preferred syntaxis to use string literals in all cases.Version 3.18============Released by William Roberts, 05-Aug-1999.Requires BAFL 092.Changed the handling of Unicode string resources (TEXT16 and LTEXT16) to ensure that theUnicode characters are aligned to a multiple of 2 bytes when the resource is used.Resources are never used in place: instead RResourceFile::AllocReadLC creates an HBufC8 to hold acopy of the data. This means that rather than aligning from the start of the entire resource file,instead we have to align to the start of the individual resource, because the data in an HBufC8 always starts at an aligned address.Added RCBinaryStream::Align(int nBytes) and RCBinaryStream::SetAlignBase() to support the generation of the necessary padding, and call them from suitable places in RCOSTRM.CPP.Also added code to add 1 to the offset of the end of the table of resource offsets: this is testedin BAFL as a marker to indicate the new format of resource file.Added a /verbose flag to core.cmd which invokes RCOMP with -v.Added #pragma warning( disable : 4710 ) in a couple of places to cut down on the number ofunnecessary and useless "warnings".Regenerated the test resources.Version 3.17============Released by William Roberts, 25-Jun-1999.Fixed defect where embedded Unicode characters could cause BUF<x> strings to fail a length check.Updated test code include a check for this.Added more stuff for the Engineering Automated Build.Version 3.16============Released by Pute, 9-Jun-1999. Based on work by William Roberts,26-May-1999 described in the "William's notes" section below.Character sets--------------We are moving towards a specific principle of character sets for RCOMP.Previously, the character set used by RCOMP was not well defined, later weadded the CHARACTER_SET identifier. This implied that any specific valuesinserted into strings in <n> format would be in the character set of thesource.In this design RCOMP will have trouble handling multibyte encodings likeShift-JIS because the tools it relies upon, LEX and YACC, are based onsingle-octet encodings only. Sometimes a multibyte encoding will produceartefacts that appear to be syntax elements such as double quote marks.In future the intention is that RCOMP uses UTF-8 encoding internally,provided by a pre-processing phase. This release is an interim step.In this release, when explicit values are inserted in text strings, theyare interpreted as Unicode values and converted to UTF-8. To retainbackward compatibility with CP1252 source, values 80-9F are also permittedand these will be mapped to Unicode as before when the source character setis defined to be CP1252. The use of explicit values 80-9F is deprecatedhowever.The default input character set is CP1252. Previously, the defaultcharacter set was "unknown". This possibility is no-longer supported.This was also contrary to documentation.Details:Test command procedure updated and enhanced.Test comparison files TUTEXT8.RSC and TUTEXT16.RSC have been updated toallow for the introduction of the extra characters in the CP1252 characterset. (128 used to be "not used" and is now the euro sign)Note that compilation warning messages about deprecated characters willappear durng this test.A new test source file TWTEXT.RSS and associated reference binaries havebeen added to the test suite to demonstrate explicit use of values >255.William's notes (edited by Pute):---------------Defined a new "character set" called UTF8, which supports the UTF8encoding of Unicode strings. This actually allows the whole resource source file to be entered asUTF8 if required. However the default charset remains CP1252.Arranged to support embedded Unicode characters constructed using the<xxx> notation, to support the use of 0x07ED as the end-of-paragraphmarker (see ETEXT 120). This exploits the UTF8 support by inserting theappropriate UTF8 sequence into the 8-bit data.The embedded Unicode characters are also supported in the CP1252character set, with internal use of 0x81 as an "escape" characterindicating that the following bytes are a UTF8 encoded character. Thisallows existing CP1252 resource source files to be used with the newETEXT.Added the Euro and the Z caron encodings to the cp1252_exceptions table.Only RCOMP.EXE has been rebuilt. Judging from the timestamps, the otherexecutables haven't been rebuilt for the last few releases.To build rcomp, first run ..\src\BLDEX, then MNT BLDRELBuilding is only possible from NT and makes use of lex and yacc fromT:\mks - this should be updated to use the GNUPro tools which we use tobuild GCC, as the Cygnus toolchain is something we expect to have alwaysavailable.Version 3.15============Released by SimonC, 01-Feb-1999Fixed defects EDN484092 "RCOMP needs to be Symbianised" EDN584421 "Need to rebuild RCOMP with boilerplated headers"Only RCOMP.EXE has been rebuilt. Judging from the timestamps, the other executableshaven't been rebuilt for the last few releases.To build rcomp, first run ..\src\BLDEX, then MNT BLDRELBuilding is only possible from the NT and makes use of executables on T: so this can'tbe rebuilt by licensees (which doesn't seem to have been a problem so far...)Version 3.14============Released by PNJ, 19-Mar-1997The CORE command and the test procedures rely on NT command extensions.Version 314 mods 1. In FILELINE.CPP, FileLineManager::ExtractFileName updated to add filename information planted by the preprocessor. This is a rewrite of the code that was removed in the previous release because it was violating. 2. Test code now in a formalised framework accessed via MNT TEST. The formalism isn't perfect because of the limitations imposed by the legacy command language. See TEST.HTM in the TSRC directory for more information. The test procedure relies on NT command extensions. 3. The CORE command procedure has been changed to allow preprocessor symbols to be defined. See below.CORE syntaxCORE filename [ object_directory [options] ]If options are being used the object directory parameter must be present,the default value is "." for the current directory.Options are:/UNICODE Specifies that strings are emitted as Unicode in the resource binary. Previously, this option was selected with "-u", which is the parameter currently used by RCOMP itself./DEFINE symbol [ symbol...] Specifies one or more symbols to be defined for the preprocessor pass. This must be the last option supplied because it is followed by an arbitrary number of tokens and the command language is so primitive.Version 3.13============Released by PNJ, 13-Jan-1997Version number scheme is independent of product-specific E32 chainnumbering.This is an interim release, to provide 16-bit character set functionality.Later releases are planned to provide other requested features. ExistingRSS files produce identical binaries to previous releases when compiledin the default non-Unicode mode.There are some serious defects in the source code which will takea long time to address properly, eg misuse of assert as a status check.1. Minor changes to MNT and build settings.2. Minor code changes to remove warnings.3. Renamed STRING.CPP, .H to remove ambiguity with standard header of the same name.4. rcscan::yyerror function updated so that it actually interprets formatted strings instead of ignoring the extra parameters.5. Fixed defect in String operator != which was doing the inverse of what it is supposed to do!6. Provide a qualifier for Unicode output.7. Fix erroneous error message if source file not specified.8. Fixed problem which caused run time fatal errors during source context switching.9. Introduce new tokens to differentiate between 8 and 16-bit text strings.10. Introduce a CHARACTER_SET token to specify the source character set.11. Introduce an extra test component directory.12. Introduce a command procedure wrapper for RCOMP (called CoRe)Language features-----------------CHARACTER_SET nameSpecifies the character set of the input file. The implementation currentlydoes not do much with this, but will do in the nexty release or 2. Legalvalues for name are currently:ASCII, CP1252, CP850, ISOLatin1, ShiftJIS, UnicodeNote that Unicode source text is not likely to be supported any time soon,largely because RCOMP relies on LEX and YACC which are not Unicode-aware.The default setting in this implementation is CP1252.TEXT, LTEXT and BUFNow have explicit 8 and 16-bit variants, eg TEXT8, BUF16. The unadornedvariants are internally converted to the 8 or 16-bit equivalents dependingon the presence of the -u (for unicode) command line qualifier.The prefixed counter for an LTEXT16 is still an 8-bit field.The zero terminator for a TEXT16 is a 16-bit field.For text fields, it is recommended that you continue to use the unadornedkeywords. For binary data, you should use the explicit 8-bit keywords. Thisis likely to apply most commonly to the BUF (BUF8) keyword.Version 0.03.12===============1) Reduced verbosity.2) Released a version compatible with NT4.Version 0.03.11===============1) PVCS'ed RCOMP and generally tidied it up.2) Fixed empty BUF crash.3) Fixed extra trailing comma crash.4) Cleaned up the build warnings.5) Added ...BUF<n>... where n is an integer giving max length of BUF.6) The .exe is now called rcomp.exe.Version 3.06, MartinW, 05 Jul 96================================1. Added enum handling. e.g. ENUM ExampleEnum { Elem1, Elem2} STRUCT a { BYTE b;} RESOURCE a c { b = ExampleEnum::Elem2;}This should set up b with the value 1.Version 3.05, MartinW, 30 May 96================================1.Deal with long (>42characters) resource names in output to header file.2.Prevent assertion failure in case of missing comma after first item in an array of struct's.Version 3.04, MartinW, 29 Apr 96================================Avoid using cin by reading from a specified file (-s<filename>). The cin approach suffered from something to do with the source file being left open even when the program ended. This was the case at least with a test program built using C++ 1.51 and run under NT 3.51.e.g. void main() { char a; cin << a; } TestProgram < a.src del a.src <---- "file in use by another process".Version 3.03, MartinW, 18 Apr 96================================1.Handle syntax error with numbers more effectively so assert does not fail.2.Accept 0 for double without warning.Version 3.02, MartinW, 11 Apr 96================================Corrected defect to do with line number in error message for text beingconverted to a number.Version 3.01, MartinW, 9 Apr 96===============================1.I added more error handling so that more proper error messages are given.2.I altered the error message format so that it is suitable for VC++. Brief seems to cope with this new format quite happily. VC++ didn't seem to like e.g. ".\t1.rss" at the start but "C:\rcomp\src\t1.rss" worked.3.The drive and directory for the file name specified with -i is used to provide the full paths for all filenames given in error messages. If the -i file name is not a full path then the current directory and drive are used in combination with the partial path to create a full path.Version 3.00, MartinW, 19 Mar 96================================To use this resource compiler execute "mnt getrel". The egrs.bat fileis an example of how the resource compiler may be run. The GNUpreprocessor is used (t:\tools\gnucpp.exe) first and the outputpassed to rc3.exe. The fc4bat.exe file is used to avoid writing theheader output file if it has in fact not changed.Details about this version--------------------------This is a completely new version based on yacc and lex along with C++.Overview of system: Source file (e.g.pic.rss) -> Preprocessing -> Lexer -> Parser -> Data structures (using C++ classes) -> Data file output (e.g. pic.rsg) -> Header file output (e.g. pic.h) The GNU C++ preprocessor was used. The output from this includes directives giving line numbering following inclusion of header files. The lexer uses this to store data which the parser then uses to output error messages in Brief format. The lexer and parser are generated by lex and yacc respectively from rcomp.l and rcomp.y. These define the tokens and the grammar for the resource script language. Supporting C++ classes are compiled and linked along with the output from lex and yacc. The batch file rs.bat takes the file specified by the first parameter and passes it to the GNU preprocessor. The output is piped through to rcomp.exe. The names of the data output file and the header file are specified based on the name given to rs.bat. The -i flag is used to give the original name (as passed to the preprocessor) for error reporting. A program called fc4bat.exe is used to give an errorlevel if the specified files do not match. This is used to avoid changing the date on the header file if it has not changed.Issues for porting to other platforms: 1) atof has been used. The output of this is written to the rsc file. The format must be that expected by the program reading the rsc file rather than the format of the machine used to generate the file. 2) The MKS versions of yacc and lex were used. These are PC versions of the UNIX tools. The non-standard features were avoided however only the PC versions have been used. 3) Stream handling has been used. Apparently there may be differences in implementations of this extension to C++.