kernel/eka/release_old.txt
changeset 0 a41df078684a
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 
       
     2 Version 1.02.371
       
     3 ================
       
     4 (Made by Dennis 04/04/2002)
       
     5 
       
     6 1)	TimBa
       
     7 	1)	Fix for BAD-58CDM4: Locale change has no effect on contact filtering.
       
     8 2)	ChrisM
       
     9 	1)	Fix for MOS-58EJ8V (Integrator calibration doesn't work properly)
       
    10 		Removed the "patches" from the Y coordinate digitizertoscreen calculation and
       
    11 		changed the Y calibration constants to work with this.
       
    12 	2)	Fix for CAR-57RETM (WINSCW UDEB Emulator crashes when launched in console mode)
       
    13 	3)	Fix for TAR-58LEUV (Emulator title - variant indication) CR ref MTAR-58LDG2
       
    14 	4)	Fix for SHY-58GGR5 (Test case that leads to unhandled exception
       
    15  		in DThread::GetDesMaxLength)
       
    16 
       
    17 3)	Nicolas
       
    18 	1)	Fixed defect THY-588MLT (Integrator board with ARM926
       
    19 		core module does not boot).  The ARM920 clock setting
       
    20 		code can not be reused as-is for ARM926.  Modified
       
    21 		bootstrap to figure out which core is being used and
       
    22 		branch to the appropriate code.	 A software reset is
       
    23 		necessary halfway through the ARM926 clock
       
    24 		configuration.	See comments in HwInitialise for more
       
    25 		details.  For ARM926, the clocks are set to:
       
    26 			  CPU:			125mhz
       
    27 			  system bus:	25mhz
       
    28 			  local bus:	31.25mhz (CPU clock / 4)
       
    29 4) 	AndrewJ
       
    30 	1) 	Fixed defect JON-58DHHP where Assabet lffs media driver has an error in 
       
    31 		suspend resume operation.
       
    32 5)	MarkCa
       
    33 	1)	Fixed CAN-58GG5E (MEDMMC is not leave-safe.)  Used non-leaving new in
       
    34 		D_MEDMMC.CPP.
       
    35 
       
    36 6)	PeteS
       
    37 	1)	Added Lubbock Base port.
       
    38 
       
    39 Version 1.02.370
       
    40 ================
       
    41 (Made by CarlosF, 12/03/2002)
       
    42 
       
    43 1)	JonathanM
       
    44 	1)	Fix for defect MET-57ZHTH - "TDblQueBase has incorrect copy constructor
       
    45 		and operator ="
       
    46 
       
    47 2)	Nicolas
       
    48 	1)	Fixed defect MET-57YN7A (Power Sequence at EmergencyStandby).
       
    49 		Migrated 6.1 fix: In DPowerModel::PowerEmergencyStandbyDfc(),
       
    50 		PowerEmergencyStandby() is now called for all power handlers
       
    51 		*before* switching off the machine.
       
    52 	2)	Fixed defect MET-57YMU7 (Template Port requires 'EARLY
       
    53 		DEBUG' examples in the template code).
       
    54 	3)	Modified template port to use the same UART API as
       
    55 		recent ports, e.g. Uart1Data() and Uart2Data()
       
    56 		replaced with UartData(TUint32 aUartBase).
       
    57 	4)	Fixed defect THY-585N22 (OOM during process creation
       
    58 		can crash the kernel).	Now uses HBufC::New() instead
       
    59 		of NewL() in svProcessCreate() to allocate the
       
    60 		command-line buffer.
       
    61 
       
    62 3)	Markdo
       
    63 	1) 	Fixed defect DON-585LNV "Media door open does not work on WINS with
       
    64 		Mmc card controller". Removed call from PcCard Controller to set up a
       
    65 		media change callback in WINS. Only MmcCard Controller sets this callback
       
    66 		now.
       
    67 
       
    68 4)	ChrisM
       
    69 	1)	Fixed defect MOS-586BWV (integrator had digitizer and mouse driver loaded
       
    70 		in e32 text shell roms).  Removed mouse driver from rom.
       
    71 	2)	Fixed defect MOS-55DJN4 (New integrator video driver should use constants
       
    72 		rather than magic numbers)
       
    73 	3)	Tidied up integrator digitizer calibration.
       
    74 	4)	Fixed defect OMC-586LJF assabet rom size
       
    75 	5)	Fixed defect OMC-586K5Z mainline warnings
       
    76 
       
    77 5)	Pete
       
    78 	1) 	Change to the WINS local drive mappings.
       
    79 		The entire local drive mapping for WINS is now as follows:-
       
    80 		Local drive 0:	Internal RAM drive (EFixedMedia0) - Y:
       
    81 		Local drive 1:	MMC Card on MMC socket 0 (ERemovableMedia0) - X: 
       
    82 		Local drive 2:	MMC Card on MMC socket 1 - Partition1 (ERemovableMedia1)
       
    83 		Local drive 3:	MMC Card on MMC socket 1 - Partition2 (ERemovableMedia1)
       
    84 		Local drive 4:	PC Card on PC Card socket 0 (ERemovableMedia2)
       
    85 		Local drive 5:	PC Card on PC Card socket 1 (ERemovableMedia3)
       
    86 		Local drive 6:	Not currently assigned
       
    87 		Local drive 7:	Not currently assigned
       
    88 		Local drive 8:	Internal LFFS drive (EFixedMedia1) - W: 
       
    89 	2) 	Implemented CR PHAR-54RJMT 'We should be able to simulate password
       
    90 		protected disks on the emulator'.
       
    91 		1) The method of mapping drive letter to local drive number on the WINS
       
    92 		emulator has been changed from being a fixed mapping, to one that uses
       
    93 		enviroment variables to specify the mapping. When the system starts up
       
    94 		it sets environment variables to reconstuct the same mapping as before:
       
    95 		Y:-LocDrv 0, X:-LocDrv 1, W:-LocDrv8. (This is done in SetupEmulatorPaths()
       
    96 		in \e32\euser\emul\win32\up_path.cpp). However, these default mappings can
       
    97 		overidden or new mappings created in EPOC.INI using the following syntax:
       
    98 		
       
    99 			_EPOC_LocDrv_<locDrvNum> <drvLetter>: <FileSystemID string> 
       
   100 			
       
   101 		The FileSystem ID indicates which file system should be mounted on the
       
   102 		local drive in question. The following file system IDs are defined:
       
   103 			'Fat' and 'Lffs'.
       
   104 		For example, to map X: to local drive 1 specifying the FAT file system:  
       
   105 			'_EPOC_LocDrv_1 X: Fat'
       
   106 		The file system ID is read by the text shell as it starts up and mounts the
       
   107 		appropriate file system on any local drive that it finds a mapping for.	
       
   108 		2) A start-up media password can now be assigned to any MMC card - again
       
   109 		using environment variables to store the password. Passwords are set in
       
   110 		EPOC.INI using the syntax:
       
   111 		
       
   112 			EPOC_LocDrv_<locDrvNum>_PWord_<cardNum> <password>
       
   113 			
       
   114 		'locDrvNum' is the number of the local drive and 'cardNum' is the number of
       
   115 		the MMC card on that drive. The latter is only relevant on local drive 1 where
       
   116 		two virtual MMC cards are emulated (with the user hot swapping between cards
       
   117 		by hitting F4 while F5 is down). For example, to set Card0 on local drive 1:
       
   118 			'EPOC_LocDrv_1_PWord_0 aaa1'
       
   119 			
       
   120 		3) The start-up state of the MMC card in local drive 1 can be configured to be
       
   121 		any one of the following: No MMC card, MMC Card0 or MMC Card1. The user
       
   122 		subsequently toggles between each of these states each time they hit the F4 key
       
   123 		while F5 is down. The start-up state is set in EPOC.INI using the syntax:
       
   124 		
       
   125 			_EPOC_Active_LocDrv_1 <StartUpState>
       
   126 			
       
   127 		'StartUpState' can be one of the following values:  -1 - card present,
       
   128 		0 - MMC Card0, 1 - MMC Card1. For example, to set the start up state to MMC Card1:
       
   129 			'EPOC_Active_LocDrv_1 1' 		
       
   130 
       
   131 6)	MarkCa
       
   132 	1)	Removed SD specific parts of MMC controller.  EPBUSM no longer built for MEIG.
       
   133 
       
   134 7)	TimBa
       
   135 	1)	Fix for COY-56DEYY: "MatchesPartial function uses undocumented
       
   136 		feature of CompareC". TDesC16::HasPrefix function added.
       
   137 
       
   138 
       
   139 Version 1.02.369
       
   140 ================
       
   141 (Made by ChrisM, 06/03/2002)
       
   142 
       
   143 0) 	ArunsakhS
       
   144 	1) 	Fix for defect  BAD-57HF3Y - "Locale persistence broken" 
       
   145 		A new HAL atrribute was added to TAttribute in Hal_data.h for the
       
   146 		defect fix above. The new attribute is "ELocaleLoaded". 
       
   147 		Made the required changes to "config.hcf" and "values.hda" in HAL 
       
   148 		and all the reference platform components. Added the test for
       
   149 		ELocaleLoaded in the test "T_newhal" in HAL. 
       
   150 
       
   151 1)	RobertJ
       
   152 	1)	Silenced some warnings in:
       
   153 		\e32\drivers\medmmc\epoc\d_medmmc.cpp
       
   154 		\e32\drivers\medmmc\epoc\d_medsdp.cpp
       
   155 	2) 	Correction of comms header file to correct KCapsBpsxxxx constants
       
   156 		\e32\include\d32comm.h
       
   157 		JAN-57WL3N  "Comm port capability constants same, missing"
       
   158 		(was SAS-554K4P in GT6.1)
       
   159 	3)	Fixed JAN-57WL8G "Possible access violations in e32 drivers under OOM?"
       
   160 		was HAR-56DPLW in GT6.1
       
   161 		\e32\drivers\dfir\d_fir.cpp
       
   162 		\e32\drivers\ecomm\d_comm.cpp
       
   163 		\e32\drivers\ecommdce\epoc\d_commdce.cpp
       
   164 
       
   165 2)	CarlosF
       
   166 	1)	Fixed defect MOS-579LUN powering down digitiser causes machine to hang
       
   167  		when screen is tapped.
       
   168 	2)	Changes to Serial Port: the existing power-down timeout after finishing 
       
   169 		transmitting has been made configurable through the introduction of a new
       
   170 		member to the comms config structure (this is now TCommConfigV02).
       
   171 		Changes to d_comm.cpp (ARM and WIN32 emulator) to support this. Also when
       
   172 		it powers down as a consequence of having timed out it now completes the
       
   173 		requests with KErrTimedOut instead of KErrAbort.
       
   174 	3)	Further changes to the digitiser extension on Assabet and Brutus in order to
       
   175 		fix problems with Silent Running.
       
   176 	4)	Fixed defect THE-57LHGD Unable to use the Profiler tool on Assabet.
       
   177 
       
   178 3) 	MichaelP
       
   179 	1)	Added data member access function TInt BytesToBeTransfered() to class
       
   180 		THwaDataTfReq (k32hwa.[h|inl]).
       
   181 	2) 	In T_HWA (\f32test\DEVICE\t_hwa.cpp) changed test of "HWA device specific
       
   182 		function (2)": the address that is now used lies within the DSP bridge
       
   183 		shared memory area.
       
   184 	3)	Fixed address and size of reserved RAM area in \Helen\Bootstrap\Helen.s.
       
   185 
       
   186 4)	MarkCa
       
   187 	1)	Fixed CAN-579MLN MultiMediaCard controller does not pre-check current
       
   188 		password.
       
   189 
       
   190 5)	Nicolas
       
   191 	1)	Fixed defect THY-57QNYA (incorrect default debug port
       
   192 		on assabet).  The default port is now UART3
       
   193 		everywhere.
       
   194 		
       
   195 7)	ChrisM
       
   196 	1)	Fix for DON-57RNLR (Screen is not switched on when coming back from digitiser
       
   197 		power-down)
       
   198 	2)	Fix for defect PEN-57XBRV ("EPOC Emulator" should be replaced)
       
   199 		Changed the emulator name from EPOC Emulator to Symbian OS Emulator by default.
       
   200 		Name can be specified in epoc.ini with the keyword EmulatorName.
       
   201 
       
   202 
       
   203 Version 1.02.368
       
   204 ================
       
   205 (Made by RobertJ, 11/02/2002)
       
   206 
       
   207 1)	ChrisM
       
   208 	1)	Fix for defect ROS-55CGCR - "EPOC.EXE logo fails to conform to Corporate ID guidelines"
       
   209 
       
   210 3)	JonathanM
       
   211 	1)	Fix for defect MET-572N7U - "Destroying FixedContiguous TransferBuffers causes
       
   212 		memory to be 'lost' to the free pool"
       
   213 
       
   214 4) 	Pete
       
   215 	1) 	Further extended the local drive caps class (TLocalDriveCapsV3)
       
   216 		by adding the following member:-
       
   217 			TUint iExtraInfo;		
       
   218 	2)	Modified the MMC Media driver to supply the above information as part of
       
   219 		the Media Driver Caps() function.
       
   220 	3)	Fixed a defect where the 'iHiddenSectors' field in
       
   221 		the disk caps. info was not being initialised if a default boot
       
   222 		partition wasn't detected in the MBR.
       
   223 
       
   224 Version 1.02.367
       
   225 ================
       
   226 (Made by PeterS, 02/02/2002)
       
   227 
       
   228 1)	RobertJ
       
   229 	1) CR CLCT-55JENG. Modified \e32\include\d32usbc.h & \e32\include\d32usbc.inl
       
   230 	argument TInt& aLen for RDevUsbcClient::Write and
       
   231 	RDevUsbcClient::WriteEndpointZero changed to TInt aLen
       
   232 
       
   233 2)	JonathanM
       
   234 	1)	Fix for defect FID-563G8A - "TPckgBuf cannot return a const reference"
       
   235 	2)  Fix for defect PAR-56MGEB - "Generic EDISP driver lives in the wrong place."
       
   236 	3)	Removed last vestiges of Cogent from E32
       
   237 	4)	Fix for defect THY-4XPH4C - "T_CURRENCYFORMAT fails from time to time"
       
   238 	5)	Fix for defect MET-56UJ35 - "Unhandled Leave in Kernel Server"
       
   239 	6)	Fix for defect MET-56VJY6 - "Session creation can crash machine under OOM conditions"
       
   240 
       
   241 3)	MarkCa
       
   242 	1)	Added caps buffer zeroing to MEDMMC and MEDLFS on MINT and MINK.
       
   243 
       
   244 4) Nicolas
       
   245 	1)	CR JPAR-54XMZD: ROM building and run time configuration of debug port
       
   246 		- On selected targets the current debug port can be
       
   247 		  viewed and changed at run-time thanks to a new eshell
       
   248 		  command (debugport).	See rombuild release notes for details
       
   249 		  about ROM building time configuration.
       
   250 		- Debug port setting applies everywhere (i.e. bootstrap
       
   251 		  traces, early debug mode, non early debug mode (variant)
       
   252 		  and debug monitor) *but* run-time port switching is not
       
   253 		  supported in early debug mode as in this case the port
       
   254 		  initialisation is done by the bootstrap.
       
   255 		- The bootstrap fetches the debug port from the ROM
       
   256 		  header and copy it to a new field in the the super page.
       
   257 		- A new HAL attribute (EDebugPort) has been added and
       
   258 		  a default implementation based on userhal has been provided.
       
   259 		- Assabet port modified.  The accepted debug port
       
   260 		  values are 1 (UART1) and 3 (UART3).  The default is 3.
       
   261 		- Brutus port always uses UART3.
       
   262 		- Integrator (MINT) port modified.  The accepted debug
       
   263 		  port values are 0 (UART0), 1 (UART1) and 42 (JTAG DCC).  The
       
   264 		  default is 0.
       
   265 		- KHARDWAREASSIST flag removed.	 Ports supporting JTAG
       
   266 		  DCC output should use the new scheme.
       
   267 		- Modified accordingly the template port
       
   268 	2)	Modified bootvariant.mke in MINT port so that a symbol
       
   269 		file for bootromv1.bin is generated.
       
   270 	3)	Fixed long standing bug in MISA variants: BOOTMISA.LIB was
       
   271 	  	not suffixed by a variant-specific identifier.  This was
       
   272 	  	not discovered before as the libraries were identical on
       
   273 	  	assabet and brutus.  The libraries are now called
       
   274 	  	BOOTMISAAB.LIB and BOOTMISABA.LIB.
       
   275 	4)	"abld clean bootmisa" now removes symbol files for both
       
   276 		assabet and brutus.
       
   277 
       
   278 5)	ChrisM
       
   279 	1)	Euser source reorg for ipr categorisation CR GBON-567RCZ
       
   280 		- created new directory  base\e32\euser\utils
       
   281 		- moved us_array.cpp, us_func.cpp, us_lex8.cpp, us_lex16.cpp, us_heap.cpp 
       
   282 		  and us_que.cpp into the new dir which has a cat D ipr file.
       
   283 		- created new file us_desx.cpp which contains all the exported constructors
       
   284 		  from us_des8.cpp and us_des16.cpp
       
   285 		- created a new header file in utils which contains some inline funcs which 
       
   286 		  are needed in us_desx.cpp and the old us_des8.cpp and us_des16.cpp files
       
   287 		- + some panic numbers and a few other shared bits.
       
   288 		- removed the exported constructors from us_des8.cpp and us_des16.cpp
       
   289 
       
   290 
       
   291 
       
   292 
       
   293 Version 1.02.366
       
   294 ================
       
   295 (Made by MarkCa, 15/01/2002)
       
   296 
       
   297 1)	MarkCa
       
   298 	1)	Modified MEDMMC to support partial reads, write-through caching and
       
   299 		multi-block writes.  Multi-block writes are a compile-time option
       
   300 		that is not compiled in by default.
       
   301 	2)	Removed packed struct optimization from PS_MMC.CPP.
       
   302 	3)	Changed debug print statements in D_MEDSDP.CPP so can distinguish
       
   303 		from D_MEDMMC.CPP.
       
   304 	4)	Fixed FID-54YK2B (MEDMMC buffer not DMA-safe.)  Pages of physically
       
   305 		contiguous RAM are allocated by the EPBUS controller at bootup and
       
   306 		the media driver uses a virtual function to find out where they are.
       
   307 		Note this is a convenience for the principal EPBUS client, i.e.,
       
   308 		MEDMMC / MEDSDU.  If other drivers want to be clients of EPBUS, they
       
   309 		should still allocate their own internal buffers.
       
   310 	5)	Fixed MBR.H header file to use include guards and #include <e32std.h>.
       
   311 	6)	Fixed FID-54VENJ (MMC: Same debug trace used for different functions.)
       
   312 		Changed debug text for DMMCStack::SchedGroundDown().
       
   313 
       
   314 2) 	Peter
       
   315 	1) 	Added support on MMC Card Controller for mechanical write protect switch.
       
   316 	2) 	Extended the local drive caps class (now extended to TLocalDriveCapsV3)
       
   317 		by adding two extra members:-
       
   318 			TUint iMediaSubType;
       
   319 			TInt64 iTotalDiskCapacity;
       
   320 	3) 	Added support for multiple Peripheral Bus Controllers.
       
   321 		For all platforms other than WINS, these are now loaded as kernel
       
   322 		extensions which then register themselves with the kernel from
       
   323 		the extension DLL entry-point. Each Controllers register once for
       
   324 		each socket that it controls and the kernel supports up to
       
   325 		KMaxPBusSockets(4) sockets (i.e. the system could support four different
       
   326 		Controllers each managing a single socket, two different Controllers
       
   327 		each managing a pair of sockets etc). The Peripheral Bus Controller
       
   328 		DLLs have been renamed. All used to be build as EPBUS.DLL. Now PC Card
       
   329 		Controllers are built as EPBUSP.DLL and MMC Controllers are built as
       
   330 		EPBUSM.DLL. For non-WINS platforms, the kernel no longer links with the
       
   331 		Peripheral Bus object and a platform can be configured with multiple
       
   332 		Controllers, a single Controller or no Controllers simply by the inclusion
       
   333 		(or non-inclusion) of the Controller extension DLL in the rom OBY file. The
       
   334 		WINS and MEIG platforms now support dual Controllers, both a PC Card
       
   335 		Controller and an MMC Controller. (Note, to achieve this in WINS, the kernel
       
   336 		now links to EPBUSP.DLL and EPBUSM.DLL). Changes to support this include:-
       
   337 		a) Added the function:-
       
   338 		   	void Kern::RegisterPBusController(TPBusNum aMachineBusNum,
       
   339 				DPeriphBusController* aController,TPBusNum aControllerBusNum)
       
   340 		which should be called from the Controller extension DLL entry-point for
       
   341 		each bus that the Controller manages in order to register that Controller
       
   342 		for that bus. 'aControllerBus' is the number of the bus relative to that
       
   343 		particular Controller as opposed to 'aMachineBus' which is the bus number
       
   344 		relative to the entire machine (e.g. on a machine configured with two
       
   345 		Controllers each managing two buses, then when the 2nd controller registers
       
   346 		for it's 2nd bus, the machine bus number of this is 3, but the number relative
       
   347 		to the 2nd Controller is 1).  
       
   348 		b) With there now being potentially multiple Controllers,
       
   349 		the function to retrieve the pointer to the Controller now takes a  bus
       
   350 		number as a parameter and becomes:-
       
   351 			DPeriphBusController* Kern::PBusController(TPBusNum aMachineBusNum)
       
   352 		c) Added the function 
       
   353 			TPBusNum Kern::PBusControllerBusNum(TPBusNum aMachineBusNum)
       
   354 		which returns the bus number relative to its owning Controller for a given 
       
   355 		machine bus number.
       
   356 		d) The kernel now keeps a count of Controller registered. This means the
       
   357 		platform specific HAL function ImpHal::TotalSupportedBuses() is now
       
   358 		redundant and has been removed.
       
   359 		e) Modified the extension DLL entry-point function for the generic
       
   360 		Peripheral Bus Controller to allocate the Controller object and perform
       
   361 		secondary initialisation before registering the Controller with the kernel.
       
   362 		This makes the function P::InitialiseLocalDrives() redundant and it has
       
   363 		therefore been removed. Also, the function DPeriphBusController::NewL() is
       
   364 		no longer exported. (Still exported from WINS Controllers which aren't
       
   365 		extensions and therefore still need to to initialised directly by the kernel).
       
   366 		f) Removed the function DPeriphBusController::TotalSupportedDrives() and
       
   367 		replaced this with a straight call to the variant of the same name:
       
   368 			Custom::TotalSupportedDrives().
       
   369 		Following on from this, removed the data member iTotalSupportedDrives
       
   370 		from the classes TPcCardMachineInfo and TMmcCardMachineInfo.
       
   371 		g) Added the pure virtual function:
       
   372 			TPBusNum DPeriphBusController::BaseBusNumber()
       
   373 		to the generic Peripheral Bus Controller class which returns the
       
   374 		machine bus number of the first bus under the control of this Peripheral
       
   375 		bus Controller. Provided implementations of this in the DPcCardController
       
   376 		and DMMCController classes. These read the required information from the
       
   377 		corresponding TPcCardMachineInfo and TMmcCardMachineInfo classes. Added the 
       
   378 		corresponding data member iBaseBusNumber to each of these classes which
       
   379 		is supplied from the variant.  
       
   380 		h) Constructors for TPBusCallBack made inline rather than being exported
       
   381 		from the Peripheral Bus Controller so that the kernel no longer needs to
       
   382 		link with EPBUS.LIB.
       
   383 		i) Moved the function:
       
   384 			DPBusMediaDriver::SetCurrentConsumptionInMilliAmps()
       
   385 		to the Media Driver base class - DMediaDriver and removed the function
       
   386 		DMediaDriver::DeltaCurrentConsumptionInMilliAmps() which was now redundant.
       
   387 		Also added a destructor to the DMediaDriver class to reset the current
       
   388 		consumption when the object is destroyed. This again required in order that
       
   389 		the kernel need no longer link with EPBUS.LIB (as this needs to reset
       
   390 		the media driver current consumption on a media change - with object
       
   391 		destruction not occuring until the next mount).
       
   392 		j) Change to the WINS local drive mappings to include emulation of PC Card
       
   393 		drives as well as MMC drives.
       
   394 		The entire local drive mapping for WINS is now as follows:-
       
   395 		Local drive 0:	Internal RAM drive (EFixedMedia0) - Y:
       
   396 		Local drive 1:	1st special MMC Card on MMC socket 0 (ERemovableMedia0) - X: 
       
   397 		Local drive 2:	2nd special MMC Card on MMC socket 0 (ERemovableMedia0) - V:
       
   398 		Local drive 3:	MMC Card on MMC socket 1 (ERemovableMedia1)
       
   399 		Local drive 4:	PC Card on PC Card socket 0 (ERemovableMedia2)
       
   400 		Local drive 5:	PC Card on PC Card socket 1 (ERemovableMedia3)
       
   401 		Local drive 6:	Not currently assigned
       
   402 		Local drive 7:	Not currently assigned
       
   403 		Local drive 8:	Internal LFFS drive (EFixedMedia1) - W: 
       
   404 		k) For MEIG, MISA and MTEMPLATE platforms, the Peripheral Bus variant interface has
       
   405 		been removed from the variant DLL and is instead built as a separate kernel extension - either
       
   406 		as EPBUSPV.DLL for PC Card Controller variants or EPBUSMV.DLL for MMC Controller variants.
       
   407 		For these platforms, registration of the Controller with the kernel takes place via a call
       
   408 		from the Controller variant extension DLL entry point rather than from the Controller extension
       
   409 		DLL entry point. For all other platforms, the Controller variant remains as part of the main
       
   410 		variant DLL. These platforms therefore have no separate Controller variant DLL.
       
   411 		As a result of this change, the Controller DLL entry
       
   412 		point has been moved out of the generic layer of the Peripheral Bus
       
   413 		Controller (PS_PBUS.CPP) into the ASSP layer. 
       
   414 		Splitting the Controller variant out of the main
       
   415 		variant DLL is necesssary where there are multiple
       
   416 		Peripheral Bus Controllers on a platform - otherwise the variant DLL has to contain
       
   417 		multiple Controller variants.
       
   418 		l) Deleted V32PCCD.H, and V32PCCDI which were being used as a general definition of the
       
   419 		PC Card Controller variant interface for all platforms. Each peripheral bus ASSP layer
       
   420 		should define its own variant interface as required for that impelementation. This
       
   421 		should be defined in the header file \e32\epbus\epoc\<assp>\v32pccdv.h (or v32mmcv.h
       
   422 		for MMC Controllers). Implemented this for all supported platforms.
       
   423 
       
   424 		NOTE: The power model extension - EPOWER.DLL must be loaded before any Peripheral
       
   425 		Bus Controller extensions - EPBUS?.DLL or EPBUS?V.DLL (i.e. in the OBY file, the
       
   426 		lines that specify the inclusion of EPBUS??.DLL must occur after the line which
       
   427 		specifies the inclusion of EPOWER.DLL).
       
   428 
       
   429 3)	RobertJ
       
   430 	1)	Changed string descriptor text in pa_usbc.cpp to remove reference
       
   431 		to EPOC and ER6.2
       
   432 
       
   433 	2)	Removed function CopyMaxToClient in d_usbc.cpp, this was in effect a
       
   434 		duplicate of CopyToClient. Code now uses CopyToClient in all cases.
       
   435 
       
   436 	3)	In usbdma.cpp & k32usbc.h changed interface to
       
   437 		TDmaBuf::RxCopyPacketToClient & TDmaBuf::RxCopyDataToClient to take
       
   438 		an explicit length argument. This removes the need to modify the
       
   439 		TEndpointTransferInfo
       
   440 		Modified d_usbc.cpp to reflect change in the calling interface to 
       
   441 		TDmaBuf::RxCopyPacketToClient & TDmaBuf::RxCopyDataToClient
       
   442 
       
   443 4)	MichaelP
       
   444 	1)	Fixed compile time error in /e32/drivers/ehwa/d_hwa.cpp which only occurred
       
   445 		when GETPUTDATA_ARE_KERNELSERVERCALLS had been #defined.
       
   446 	2)	Added parameter 'TInt aNumWindows' to functions DHwaTask::Init() and
       
   447 		THwaTaskHwInterface::Init(), which are declared in k32hwa.h.
       
   448 	3)	Introduction of boolean flag iInUse to class THwaDataTfReq: used to identify
       
   449 		transfer requests which are currently being processed by the PDD.
       
   450 	4)	HWA bogus PDDs: changed order of calls to DHwaTask::GetNextRequest to account
       
   451 		for change no. 3).
       
   452 	5)	Moved HWA device state member iStatus from class DHwaDevice to class
       
   453 		DHwaDevicePdd; maintaining its correct value is now up to the PDD.
       
   454 
       
   455 
       
   456 Version 1.02.365
       
   457 ================
       
   458 (Made by AndrewJ, 12/12/2001)
       
   459 
       
   460 1)	Morgan
       
   461 	1)	Integrated DPassiveDebugger enhancements from \tools\debugger_stub\...
       
   462 		into Helen variant: \helen\debugger\...
       
   463 
       
   464 2)	ChrisM
       
   465 	1)	Fixed MET-54HLQA (T_NEWHAL tests fail)
       
   466 	2)	Fixed MET-555GLS (On WINS HAL function EDisplayMemoryAddress should return the Window Handle)
       
   467 
       
   468 3)	Dennis
       
   469 	1)	Fixed HEY-54JJ9Y (DPlatLibrary not filled in for some loads)
       
   470 
       
   471 4)	JonathanM
       
   472 	1)	Fix for 6.1 defect MOS-54NLHX - "__PROFILE_DISPLAY macro in e32def.h has error"
       
   473 
       
   474 5)	WilliamRo
       
   475 	1)	Fixed ROS-54MGXX "WINSCW builds enable C++ exceptions and RTTI" by adding 
       
   476 		appropriate #pragmas to the __CW32__ section of e32def.h
       
   477 
       
   478 6)	Nicolas
       
   479 	1)	Fixed MOS-54QM2W (Building bootstrap MMU layer &
       
   480 		special bit patterns in permissions): The MMU
       
   481 		permissions are now global variables defined in the
       
   482 		variant part of the bootstrap and used by the generic
       
   483 		ones.
       
   484 	2)	Removed the write-through version of the generic
       
   485 		bootstrap MMU library.	This was used only by the
       
   486 		Helen port which now uses the same code as everything
       
   487 		else and selects write-through behaviour by changing
       
   488 		the MMU permissions in the variant (see previous
       
   489 		entry).	 See commented out code at the top of helen.s
       
   490 		and helenc.cpp to switch between write-back and
       
   491 		write-through.
       
   492 	3)	Fixed THY-54XJFZ (When fast RAM used, cache should be
       
   493 		disabled for kernel stacks, data and heap).  When
       
   494 		those entities are in DRAM, they are always cacheable.
       
   495 		When they are in FRAM, they are mapped using the map
       
   496 		flags specified in the FRAM bank.  This allows to
       
   497 		enable/disable the cache on a per-bank basis.
       
   498 
       
   499 7)	RobertJ
       
   500 	1)	Fixed HEY-54JME9. Removed mini-loader
       
   501 		"Drive specifier missing on libraries loaded with the mini-loader"
       
   502 
       
   503 8)	MichaelP
       
   504 	1)	Removed /e32/drivers/ subdirectories ecommdma and emcbsp. These two drivers were
       
   505 		introduced by the Helen port and are actually TI-specific. Since they are not even
       
   506 		used by the current Helen port, we can safely get rid of them.
       
   507 
       
   508 9)	PeterH
       
   509 	1)	Integrated changes to DEF files from the mainline.
       
   510 		Frozen exports are now marked with the R3UNUSED flag where appropriate.
       
   511 		This is to support the thumb stub optimisation where the R3 register is
       
   512 		use to generate a smaller import stub for a function if it isn't used to
       
   513 		receive parameters.
       
   514 
       
   515 10)	MarkCa
       
   516 	1)	Updated MLNK EPBUS port to detect all events in ISR.
       
   517 	2)	Reduced EPBUS by c1.2k by using packed TMMCCommandSpec structure.
       
   518 
       
   519 Version 1.02.364
       
   520 ================
       
   521 (Made by MichaelP, 20/11/2001)
       
   522 
       
   523 1)	MarkCa
       
   524 	1)	Changed DFlashDevice::SetupWrite() in \integratorap\lffs\flashfile.cpp
       
   525 		to use wrapper class for testing if write buffer available instead of
       
   526 		testing bits in 32bit value.
       
   527 	2)	Fixed CAN-547HD3 (Controller panics when no events to handle.)
       
   528 
       
   529 2)	RobertJ
       
   530 	1)	Corrected coding comments in d_usbc.cpp & minor clarification in pa_usbc.cpp
       
   531 	2)	Implemented new USB VID.
       
   532 	3)	Further cleanup work following deconfiguration on USB client SIN-535KPU
       
   533 	4)	Propagated fix for PBN-4TKJ7J "Bluetooth panics with HCI error 23".
       
   534 		In \brutusa\vi_com2.cpp, reordered ISR rx now done first
       
   535 		then tx, removed uart tx busy spin.
       
   536 
       
   537 3)	Nicolas
       
   538 	1)	Fixed FID-53YD58 (Bootstrap doesn't dump all MMU
       
   539 		pages): off-by-one error.
       
   540 	2)	Enabled cache for exception vector page when it is in
       
   541 		DRAM (cache still disabled if the page is in fast RAM
       
   542 		as TC RAM and cache are not compatible).
       
   543 
       
   544 4)	ChrisM
       
   545 	1)	Fixed ALM-53LHP4 (Fixed Calibration settings are not saved).  Assabet only defect, 
       
   546 		problem was in the variant vi_xyin.cpp in DDigitiserSA1100::DigitiserToScreen.
       
   547 	2)	Fixed FOD-54MET2 (Display bytesPerLine calculated as bits not bytes).  Fixed the problem 								in template port + integrator.
       
   548 
       
   549 5) 	AndrewJ
       
   550 	
       
   551 	1)	Fixed DOM-4XWC5P (Medlfs driver  is not reliable) This problem was concerned with 
       
   552 		flash devices not erasing properly when suspended, on assabet boards. This was 
       
   553 		fixed by not suspending an erase unless both chips have gone into suspend mode 
       
   554 		properly.
       
   555 	2)	Fixed FID-53YDJC (Error LFFS driver SetupWrite() function) Semi implemented 
       
   556 		suggestion in defect report though still need to issue dummy command after 
       
   557 		correct register has been read, otherwise command issued does not work.
       
   558 
       
   559 6)	JonM
       
   560 	1)	Implemented change request JMET-544FUM - "Change RTransferWindow::MapInBuffer() to
       
   561 		return error code and not panic"
       
   562 
       
   563 7)	CarlosF
       
   564 	1)	Fixed MOU-543FVR HAL attribute ECaseSwitch returns wrong value for Assabet.
       
   565 		The following files were modified:
       
   566 		\assabetb\hal\config.hcf
       
   567 		\assabetb\hal\values.hda
       
   568 		\assabetb\lffs\loadlffs.cpp
       
   569 		\assabetb\vi_hal.cpp
       
   570 		\hal\inc\hal_data.cpp
       
   571 		\hal\tsrc\t_new_hal.cpp.
       
   572 		Fixed FRS-534EWW T_SERIAL fails on Assabet. The following files were
       
   573 		modified:
       
   574 		\assabetb\bmisa\visaabu.def
       
   575 		\assabetb\v32scpld1111.h
       
   576 		\assabetb\vi_com1.cpp
       
   577 		\assabetb\vi_com3.cpp
       
   578 		\assabetb\vi_cpld1111.h
       
   579 		\assabetb\vi_hw.cpp
       
   580 		\assabetb\vi_power.cpp.
       
   581 
       
   582 8)	MichaelP
       
   583 	1)	HWA API implementation now corresponds to API document version 0.15:
       
   584 		a) Removed enum TTaskPriority from d32hwa.h (was not used).
       
   585 		b) Two new functions in class RHwaTask:
       
   586 		   TInt PutData(RTransferBuffer& aBuf, TInt aBytesToBeTransfered,
       
   587 		                TInt* aBytesTransfered=NULL, TInt TransferId=KTfBufIdNull);
       
   588 		   and
       
   589 		   TInt PutData(RTransferBuffer& aBuf, TRequestStatus& aStat,
       
   590 		                TInt aBytesToBeTransfered, TInt* aBytesTransfered=NULL,
       
   591 		                TInt aTransferId=KTfBufIdNull);
       
   592 		   which allow the user to specify the number of bytes to be transferred to the
       
   593 		   DSP (rather than the whole buffer).
       
   594 		c) New member in class TTaskDataTfInfo (d32hwa.h): TInt iBytesToBeTransfered;
       
   595 		d) Renamed THwaPanic enums from EHwaXxx to EHwaPanicXxx (k32hwa.h).
       
   596 		e) Added virtual destructor for class THwaTaskHwInterface to prevent resource
       
   597 		   leaking in derived classes.
       
   598 		f) Removed function TInt DHwaTask::Priority() (was not used).
       
   599 		g) New member in class THwaDataTfReq (k32hwa.h): TInt iBytesToBeTransfered;
       
   600 		h) Removed data member iPriority from class DHwaTask: moved to class
       
   601 		   THwaTaskHwInterface; thus the task priority is now managed entirely by the PDD.
       
   602 		i) Added three additional arguments to TInt THwaTaskHwInterface::DoInputFrom(const
       
   603 		   DHwaTask& /*aTask*/, TInt /*aOutputIndex*/, TInt /*aInputIndex*/,
       
   604 		   TInt /*aConnectionId*/) to pass the task index and connection ID information to
       
   605 		   the PDD.
       
   606 		j) Made function void DHwaDevice::SetStatus(THwaDeviceStatus aStatus) public
       
   607 		   (was: protected).
       
   608 		k) Merged two functions of class DHwaDevice
       
   609 		   TInt TaskCallPutData(DHwaTask* aTask, const TAny* aArg);
       
   610 		   TInt TaskCallGetData(DHwaTask* aTask, const TAny* aArg);
       
   611 		   into one function
       
   612 		   TInt TaskCallTransferData(DHwaTask* aTask, const TAny* aArg, THwaDataTfDir aDir);
       
   613 		l) Fixed kernel heap memory leak caused by incorrect call to S::TransferWindowClose()
       
   614 		   in destructor DHwaTask::~DHwaTask().
       
   615 
       
   616 	2)	USB client implementation:
       
   617 		a) Added "#define SET_DESCRIPTOR_REQUEST_SUPPORTED" to k32usbc.h (in commented-out
       
   618 		   form).
       
   619 		b) Added "const TUint16 KUsbVendorId_Symbian = 0x0E22;" to usb.h (USB-IF assigned
       
   620 		   Vendor ID).
       
   621 
       
   622 
       
   623 Version 1.02.363
       
   624 ================
       
   625 (Made by Dennis 26/10/2001)
       
   626 
       
   627 1)	MarkCa
       
   628 	1)	Updated Linkup MMC port with event checking asserts.
       
   629 	2)	Modified P32MMC.H to allow per-platform configuration.  The file
       
   630 		can only be included into ASSP-specific builds.  It reads a header
       
   631 		file MMC_CFG.H from \epoc32\include\kernel\ASSP.
       
   632 	3)	Fixed FID-4ZKEKQ (Inefficient memfill in MMC driver.)  Use Mem::Fill()
       
   633 		instead of loops to fill buffers with 0xff in DoFormat() for
       
   634 		DMmcMediaDriverFlash.
       
   635 
       
   636 2)	Nicolas
       
   637 	1)	Fixed THY-52WJTE (DLL static data support doesn't
       
   638 		allow for DLLs which only have BSS): The "$DAT" chunk
       
   639 		which holds the initial content of the DATA section is
       
   640 		not created when there is no DATA section.
       
   641 		Additionally it is not created for ROM-based DLLs as
       
   642 		the initial content is fetched from ROM in that case.
       
   643 	2)	Fixed generic bootstrap defect FID-53BKSD (920T
       
   644 		MMU_Invalidate is wrong): The ARM920T version of that
       
   645 		function now only invalidates TLB and I-cache.
       
   646 	3)	Fixed kernel defect THY-53FE32 (Confusion between
       
   647 		TheKernelPage and TKernelPage ctor)
       
   648 	4)	Fixed generic bootstrap defect THY-53LC9Y (crash when
       
   649 		only exception handlers and supervisor stack/heap in
       
   650 		IRAM).  Reversed exception code and supervisor
       
   651 		heap/stack allocation order in fast RAM to ensure that
       
   652 		stack/heap always at top of bank where the bootstrap
       
   653 		stack is.  Otherwise the adjusted stack value after
       
   654 		enabling MMU is wrong.
       
   655 	5)	Fixed generic bootstrap defect FID-53LKTG (Bootstrap
       
   656 		test code: heap test is useless, author should be
       
   657 		shot).  Kernel data is now really checked.
       
   658 	6)	Modified bootstrap tests to take into account possible
       
   659 		exception vectors relocation to highmem.
       
   660 	7)	Removed deprecated "screensize" keyword from bootstrap
       
   661 		test obey files.
       
   662 
       
   663 3)	ChrisM
       
   664 	1)	Fixed WIR-53FANN (RArrayBase::HeapSort makes assumption about max iEntrySize value)
       
   665 		Changed temp buffer in HeapSort functions to use the const KSimpleArrayMaxEntrySize
       
   666 	2)	Fixed MOS-53FLUF (HAL attribute ordering incorrect).  Moved EPenState from
       
   667  		before EKeyboardState to after ESystemDrive.
       
   668 	3)	Fixed MOS-53RHP3v(Screen width and height returned by HAL are constant).  Added func
       
   669 		to hal\src\emul.cpp to return the current sizes defined in epoc.ini.
       
   670 
       
   671 4)	Carlosf
       
   672 	1)	Changes to Assabet Variant to fix a problem with the External Interrupts
       
   673 		dispatching. Modified \assabetb\vi_hw.cpp.
       
   674 	2)	Fixed BAN-52BKKC Physical device driver for serial port have a defect and
       
   675 		can cause loss of data.
       
   676 
       
   677 5)	Pete
       
   678 	Migrated the fixes for the following 6.1 defects:
       
   679 	1) Fixed PAS-4WRMQS: "Requeing a read() after PowerOn Panics the Driver/Kernel".
       
   680 	Problem caused by driver registering for PC Card IREQ events twice without
       
   681 	de-registering in between. This causes a panic in the PC Card Controller.
       
   682 		- Modified the Brutus and Assabet PC Card serial PDDs
       
   683 		(DITXBA4.PDD/DITXAB4.PDD) so that rather than registering and de-registering
       
   684 		for notification of PC Card IREQ events whenever they need to disable serial
       
   685 		interrupts, the drivers keep the notification request registered - and simply
       
   686 		enable and disable IREQ events on that socket.
       
   687 		- Changed the PC Card Controller so that registering a TPBusCallBack object
       
   688 		for event notification (with DPcCardController::RegisterEvent()) which is
       
   689 		already registered returns an error rather than causing a kernel panic.
       
   690 		- Modified the PC Card Controller by adding support for a new configuration
       
   691 		request flag: KPccdConfigOverrideNormalPwrEvents. If a configuration is
       
   692 		requested (via DPcCardController::RequestConfig()) which contains this flag
       
   693 		setting then normal machine power handling by the Controller for the socket
       
   694 		in question will be disabled - leaving the PC Card Controller client to
       
   695 		implement its own power handling policy. This only applies to machine power
       
   696 		on/ power off events. The Controller will continue to handle emergency power
       
   697 		down and media change events. The power handling override will remain in
       
   698 		force as long as the configuration is applied (i.e. this condition is removed
       
   699 		following a call of DPcCardController::ReleaseConfig(),
       
   700 		DPcCardController::DeregisterClient(), a media change event etc). This
       
   701 		feature is required to support PC Card serial cards in order to support the
       
   702 		'idle off' power policy which serial ports now implement.  Without this, even
       
   703 		though the PC Card serial driver will ignore a machine power down call when
       
   704 		it still has a write request in progress, the PC Card Controller will still 
       
   705 		turn off the VCC supply to the card and thus power it down.		
       
   706 	2) Fixed SCE-534GAE: "Problems with Serial Comms LDD power handling"
       
   707 		- Modification to the serial port LDDs, ECOMM.LDD (including the WINS version)
       
   708 		and ECOMMDCE.LDD to fix a problem with the way it implements the 'idle off'
       
   709 		power policy. Although it currently ignores Power-Off notifications, it does
       
   710 		not ignore Power-On notifications and instead completes any outstanding request
       
   711 		with KErrAbort. Hence, if the machine happens to be powered off and then back
       
   712 		on again before the serial port has had an inactivity timeout, any outstanding
       
   713 		requests will wrongly be completed with KErrAbort as the machine turns back on.
       
   714 		- Another problem fixed is associated with the fact that the
       
   715 		current comms driver power handler doesn't actually power the
       
   716 		device down on a normal power down event. However, the driver
       
   717 		itself uses the power model at other times to control power
       
   718 		to the device (e.g. when closing the driver). Hence,
       
   719 		DChannelComm::DoPowerDown() is never called and the driver
       
   720 		closes leaving the comms h/w powered up. This is now fixed,
       
   721 		with the driver calling DoPowerDown directly when required.
       
   722 	3) Fixed SCE-52YHQE: "Serial change notifier problems".
       
   723 
       
   724 6)	WilliamR
       
   725 	1)	Fix defect ROS-53TDGG "Access Violation in CreateFirstDllRefTable" by allowing for
       
   726 		GetModuleHandleA to return 0. This is essentially the same code as used in 
       
   727 		CreateDllRefTable() which handles dynamically loaded DLLs.
       
   728 
       
   729 
       
   730 Version 1.02.362
       
   731 ================
       
   732 (Made by ChrisM, 05/10/2001)
       
   733 
       
   734 1)	CarlosF
       
   735 	1)	Port defect fix for defect ALM-4VQB5V Ditizer freezes (was: The Brutus
       
   736 		board freezes after entering 50-60 characters with HWR) from 6.1.
       
   737 		Modified \assabetb\vi_xyin.cpp and \brutusa\vi_xyin.cpp.
       
   738 
       
   739 2)	MarkCa
       
   740 	1)	Fixed FID-4ZWDMZ (MMC program poll is too slow to be useful.)
       
   741 		Use TMilliSecondCallBack instead of TTickLink.  Pure virtual DMMCStack
       
   742 		function ProgramPollPeriod() replaced with pure virtual DMMCController
       
   743 		function ProgramPeriodInMilliSeconds().
       
   744 	2)	Moved Integrator LFFS drive to k:.  ImpHal::TotalSupportedDrives() now
       
   745 		returns 9 instead of 2, as does unused Variant::PeriphBusMachineInfo().
       
   746 		MEDLFS changed to use 22MB of flash across three pairs of chips.
       
   747 		The memory range is a contiguous block, which can be specified at
       
   748 		compile time in \integratorap\lffs\ffs_config.h.
       
   749 
       
   750 3)	JonM
       
   751 	1)	Fixed defect FER-4XDK9G - "Assabet timers go off at strange intervals."
       
   752 	2)	Fixed defect MET-52AF29 - "Power off/on may freeze Assabet/Brutus"
       
   753 	3)	Fixed defect in TSa1100::SetRtcData. This needed to wait longer for the new value to take effect.
       
   754 	4)	Moved HELEN's exported headers from E32 to the HELEN variant.
       
   755 		This helps fix defect MAY-4XWM9Q - "e32 does not build in an IPR-E OCK".
       
   756 		It also moves what should probably be IPR category B stuff from a cat E directory.
       
   757 
       
   758 4)	MichaelP
       
   759 	1)	HWA API implementation now corresponds to API doc version 0.14
       
   760 		a) THwaTaskHwInterface::DoCloseTask() now has a parameter TBool
       
   761 		   aCallbackRequest which indicates whether or not the PDD should
       
   762 		   finally call DHwaTask::CloseComplete()
       
   763 		b) RHwaTask::Logon() now has a second parameter TUint aFlagsWord which
       
   764 		   can be used to make a logon request more specific
       
   765 		c) RHwaTask functions Start(), Suspend(), Resume(), and SetPriority()
       
   766 		   are now asynchronous; however this is transparent to the user as the
       
   767 		   asynchronousness is wrapped up in the d32hwa.inl inline header file
       
   768 		d) Renamed DHwaTask::DoLogonComplete() to LogonComplete()
       
   769 	2)	USB PIL: Endpoint Data Toggles are now correctly reset after Set_Interface and
       
   770 		Set_Configuration requests.
       
   771 
       
   772 5)	AndrewT
       
   773 	1)	Fixed BAN-52BKTN (CAsyncCallBack ctor TCallBack& could be const). Made
       
   774 		the TCallBack parameters to the constructor and Set() const.
       
   775 	2)	Fixed BAN-52BKV2 (Should inline TInt RSubSessionBase::SubSessionHandle() be
       
   776 		const?). Added const to this member.
       
   777 	3)	Fixed THE-52WJR6 (Equality operators for TThreadId and TProcessId should be
       
   778 		const). Made the accessor and comparison operators const on these classes.
       
   779 6)	RobertJ
       
   780 	1) 	Incorrect behaviour in usb client after getting deconfigured then
       
   781 		configured, without an intervening reset.
       
   782 		Data toggles were not getting reset,
       
   783 		ldd wasn't cancelling user requests,
       
   784 		PIL layer wasn't cancelling ldd requests and
       
   785 		psl layer was trying to drain fifo because RPE bit was set.
       
   786 		RPE will get reset on next read when RPC gets cleared and fifo is
       
   787 		automatically emptied.
       
   788 	2)	Fixed FID-52HBTA: USB driver not leave safe
       
   789 	3)	Fixed ROS-534EAV: usbdma.cpp mixes new[] and delete
       
   790 
       
   791 7)	ChrisM
       
   792 	1)	Fixed  PAR-52CLSB (920T bootstrap code is Cat D it should be Cat E).  Changed
       
   793 		categorisation to E after source code recategorisation CR - CMOS-52WJ5V
       
   794 	
       
   795 
       
   796 8)	Pete
       
   797 	1)	Removed Cogent source
       
   798 	2)	Removed Windermere source
       
   799 	3)	Removed MEDCRM and MEDCRR media driver source.
       
   800 
       
   801 Version 1.02.361
       
   802 ================
       
   803 (Made by AndrewT, 31/08/2001)
       
   804 
       
   805 1)	AndrewT
       
   806 	1)	Fixed EDNATHE-4QQKZM (RThread().Suspend() deadlocks the emulator) again.
       
   807 		The original fix was incomplete.
       
   808 	2)	Fixed HEY-4XHGD5 (Remove \e32\include\K32DBGDD.H)
       
   809 	3)	Fixed MET-4YSM3M (Text shell DIR command problems)
       
   810 
       
   811 2)	Nicolas
       
   812 	1)	Fixed FID-4VHGDK (Debug should show current thread
       
   813 	  	after exception).  When a thread or process panics or
       
   814 	  	takes an unhandled exception, the name and ID of the
       
   815 	  	thread/process is displayed in the kernel traces (only
       
   816 	  	if KPANIC is set).
       
   817 	2)	Replaced void GetExceptionVectorsInfo(addr, size) with
       
   818 	  	TUint32 ExcVectorsAddr() in generic bootstrap because
       
   819 	  	vector table size not used anymore.  Documented that
       
   820 	  	in bootstrap doc version 1.2.
       
   821 	3)	Small changes following RHR 113.2 (exception code in
       
   822 	  	fast RAM) review.
       
   823 	4)	Exception vectors are now moved to highmem on assabet.
       
   824 	5)	Updated makefiles used to build bootstrap tests for
       
   825 	  	MLNK, MINT and VTEMPLATE now that the generic test
       
   826 	  	code is contained in libraries.
       
   827 
       
   828 3)	Chris
       
   829 	1)	Fixed problem with cirrus not turning display on introduced with LCD changes for GT111
       
   830 	2)	finished implementation of mapping video chunk from more than one physical region
       
   831 	3)	Updates to video driver code from code review.  Split video driver up into bit which needs porting and the interface.
       
   832 	4)	Changes to video driver for CR LROS-4Z7E7Z to allow scdv get all display modes
       
   833 	5)	updated video test code to include tests for palette when not in palettized video mode and updated assabet and brutus
       
   834 		to report if backlight is supported via HAL and fixed inconsistency between assabet,brutus and the template reporting
       
   835 		different error value if palette functions called on a none palettized video mode.
       
   836 	6)	Fixed  FID-4ZGJ2L WINS/WINC doesn't handle command line args correctly.  If executable command path 
       
   837 		has spaces it will be quoted.  If a quote is found it skips until the next one.
       
   838 	7)	Fixed MOS-4Y4D9K Two taps on screen required to turn on display.
       
   839 
       
   840 4)	AndrewJ
       
   841 	1)	Fixed THY-4YCP96 stopped Null pointer from being derefrenced in LFFS media driver
       
   842 
       
   843 5)	JonM
       
   844 	1)	Fixed defect FID-4WUGL4 - "MMU secondary config is annoying"
       
   845 		The MMU secondary config is now obtained from a constant (KMmuSecondaryConfig) contained
       
   846 		in the bootstrap's variant library.
       
   847 	2)	Fixed defect FID-4XTC27 - "Bank width corrupted in BDB"
       
   848 	3)	Fixed defect FID-4Y3CP3 - "Should fill unused Rom config blocks"
       
   849 	4)	TransferBuffer performance greatly improved.
       
   850 	5)	API CHANGE: DTransferWindow::MapInBufferL is now non-leaving and has been
       
   851 		renamed to MapInBuffer.
       
   852 	6)	Fixed bug in DPlatProcess::RemoveChunk, this no longer flushed the data chache
       
   853 		when removing EFixedAddress chunks.
       
   854 	7)	Extended T_HWA test to include a benchmark test for PutData. Also made this
       
   855 		work on Integrator.
       
   856 	8)	Fix for defect PAR-4VMKV7 - "WD_VT100 has lost its basic nature and now depends on the Comms drivers!!"
       
   857 		WD_VT100.CPP Has now reverted being output only, via the debug port.
       
   858 		The implementation using the ECOMM driver has been added as WD_VT100_ECOMM.CPP
       
   859 	9)	Fix for defect FID-4YTET9 - "Manufacturer in HAL should be a UID"
       
   860 		(Made TManufacturer definition obviousely extendable by using UIDs.)
       
   861 	10)	Fixed defect SAS-4ZTD5D - "Missing l7200a t_trace.cpp file for bootstrap tests"
       
   862 		Also fixed build failure with Integrator bootstrap test code.
       
   863 	11)	Fixed defect SAS-4ZSGBU - "Exports inconsistent. v32isaab.h includes not exported"
       
   864 	12)	Fixed defect FER-4XGDVT - "Integrator can't cope with time being set randomly"
       
   865 	13)	Removed #include <e32transbuf.h> from e32std.h
       
   866 
       
   867 6)	MarkCa
       
   868 	1)	Implemented MEDLFS driver for Integrator.  Mounts on local drive 1
       
   869 		and provides access to 2 * 4Mb flash chips.  ELFFS is not mounted
       
   870 		by default.
       
   871 
       
   872 7)	CarlosF
       
   873 	1)	Changes to Assabet bootstrap and Variant to make Assabet's CPU and Memory
       
   874 		bus clock speed configurable. Also includes an option to always format the
       
   875 		C:\ drive on start-up if LFFS filesystem is mounted on this media.
       
   876 	2)	Changes to SA1100 ASSP to enable WAIT signal detection on Assabet PCCard 
       
   877 		IO accesses. This is required as the Assabet controller needs to be
       
   878 		configured to detect the assertion of this signal on accesses to IO space
       
   879 		contrary to Brutus which has this detection enabled by default.
       
   880 
       
   881 8)	TimBa
       
   882 	1)	Folding now folds 0xA0 (non-breaking space) to normal space (0x20)
       
   883 
       
   884 9)	Andy Curran (Uikon)
       
   885 	1)	Fix for (PER-4Z5DW6) Switch On/Off Control Panel Dialog case closed option does not work.
       
   886 		Really just correcting a few typos.  Fix tested with success.  Fix accepetd by Nicolas T.
       
   887 
       
   888 10)	MichaelP
       
   889 	1)	Updated Helen port (mhelen target) to 6.1 port sources from 30 July
       
   890 		2001 (Perforce revision 10426). Many changes, among them items 2) - 6).
       
   891 	2)	Added directory stdarmWT (containing some files) under /bootstrap/mmu/:
       
   892 		"Bootstrap MMU Write-Through Mode." 
       
   893 	3)	Added directory ecommdma (also containing some files) under
       
   894 		/e32/drivers/: "Implements the Logical device driver for a serial port
       
   895 		using DMA transfers." This driver is used by the mhelen target.
       
   896 	4)	New kernel exports for mhelen: 
       
   897 		THelen::ReadIntMask(unsigned int);
       
   898 		THelen::SetMcBspReg(unsigned int, unsigned int, unsigned int);
       
   899 		THelen::SetComBSPStatus(int);
       
   900 	5)	Re-activated #define __EARLY_DEBUG__ in
       
   901 		\e32\ekern\epoc\arm\Helen\KA_UTL.CPP.
       
   902 	6)	Added file \e32\rombuild\HelenTests.oby.
       
   903 	7)	HWA API: RHwaTask functions GetData / PutData are now kernel exec calls
       
   904 		(as opposed to kernel server calls) --> significant performance
       
   905 		increase.
       
   906 		The previous behaviour (i.e. server calls) can be had by uncommenting 
       
   907 		//#define GETPUTDATA_ARE_KERNELSERVERCALLS in d32hwa.h.
       
   908 	8)	HWA API: Constant value changed: KTfBufIdNull = 0x0 (was: 0xf0000000).
       
   909 	9)	Added overloaded function
       
   910 		DTransferWindow* Kern::TransferWindowFromHandle(TInt aHandle, DThread* aThread);
       
   911 		to \e32\include\k32std.h, exported and frozen for all targets. Function
       
   912 		is implemented in \e32\ekern\ks_transbuf.cpp. This function is used
       
   913 		where the current thread is not the same as the one that created the
       
   914 		window handle.
       
   915 	10)	T_HWA has now integrated profiling support, activated by calling "t_hwa
       
   916 		profile". 
       
   917 
       
   918 11)	RobertJ
       
   919 	1)	Added a new constructor each for RArray and RArrayPointer. This enables
       
   920 		the sort/find to be used with an existing array with memory allocated
       
   921 		outside of these classes.
       
   922 
       
   923 
       
   924 Version 1.02.360
       
   925 ================
       
   926 (Made by Peter, 06/08/2001)
       
   927 
       
   928 1)	MarkCa
       
   929 	1)	Fixed FID-4X8JKB (TMMCCommandDesc::Direction() should be const.)
       
   930 	2)	Fixed MMC controller defect in ExecCommandSM() / EStDeselectEndCheck
       
   931 		where cmd was not reset after the stack was popped.
       
   932 	3)	Optimized DMMCcontroller::PowerUpBus() to initialize stack once for
       
   933 		all drives.  Check if initialized successfully and still powered up.
       
   934 		If so, complete immediately.  Retain ability to power down and power
       
   935 		up again if failed because of unknown password (CMD3 RTO.)
       
   936 
       
   937 2)	Chris
       
   938 	1)	Changed brutusa\video.mmp to use visaba.lib not visaab.lib and cixyba.lib not cixyab.lib
       
   939 	2)	Updated headers and removed dead code from files changed for LCD driver improvements.
       
   940 	3)	Removed "screensize" keyword from header.iby files
       
   941 
       
   942 3)	AndrewT
       
   943 	1)	Fixed NEO-4X8CFY (TTime::WeekNoInYear() function returns wrong 
       
   944 		week number if  week start day is not monday). Rewrote the
       
   945 		second half of the offending function to do the right calculations.
       
   946 
       
   947 4)	Michael
       
   948 	1)	Commented out #define __EARLY_DEBUG__ in
       
   949 		\e32\ekern\epoc\arm\Helen\KA_UTL.CPP.
       
   950 	2)	Deleted line "screensize=320x240x12" from
       
   951 		\e32\rombuild\mhelen\header.iby.
       
   952 	3)	Added to \hal\inc\hal_data.h enum TManufacturer
       
   953 		"EManufacturer_TexasInstruments" and enum TMachineUid
       
   954 		"EMachineUid_Helen=0x101F3EE3".
       
   955 	4)	HWA API:
       
   956 		a) Introduction of concept of input and output index for tasks with
       
   957 		   multiple I/Os. These indices are additional (& optional) arguments for
       
   958 		   RHwaTask functions InputFrom(), DisConnectInput(), InputConnection(),
       
   959 		   and OutputConnection(), and are also part of class TTaskConnectInfo.
       
   960 		b) New RHwaTask querying functions: GetTaskProperties() and
       
   961 		   GetTaskStatus().
       
   962 		c) With these come two new classes: TTaskPropertyInfo (this not new but
       
   963 		   updated), and TTaskStatusInfo.
       
   964 		d) RHwaDevice::Tasks() now returns a find-handle -- the handle is no
       
   965 		   longer a component of the filled TTaskPropertyInfo structure.
       
   966 		e) RHwaDevice::CreateTask() has an additional parameter aNumWindows (#
       
   967 		   of transfer windows for DHwaTask object).
       
   968 		f) RHwaTask functions Logon() and LogonCancel() are now void.
       
   969 		g) RHwaTask::SetOwningDevice() is now a protected class member and no
       
   970 		   longer documented in the API doc.
       
   971 		h) Class RHwaDevice is now a friend of class RHwaTask.
       
   972 		i) Removed RHwaTask functions GetStatus() and GetTaskID().
       
   973 		j) Removed RHwaTask default constructor (was empty).
       
   974 		k) Removed enum THwaTaskLogon (was not used).
       
   975 
       
   976 5)	Nicolas
       
   977 	1)	Modified MCOY bootstrap to take into account the super
       
   978 	  	and CPU pages layout changes introduced in E32 359.
       
   979 	2)	MCOY ASSP layer now contains static arrays for the
       
   980 	  	various stacks and initialises the PP::* and Arm::*
       
   981 	  	stack "top" pointers.  Note that it would be possible
       
   982 	  	to perform the stack allocation in the bootstrap
       
   983 	  	instead.
       
   984 	3)	Fixed MAY-4V4E5V (Breakpoints don't work on ARM
       
   985 	  	architecture 5 processors). Now two opcodes in the
       
   986 	  	undefined space are used: a 16 bit one for THUMB and a
       
   987 	  	32 bit one for ARM (previously a unique 16 bit pattern
       
   988 	  	was used).  RDebug::SetBreakPoint() has now a new
       
   989 	  	overload which allows to specify what kind of
       
   990 	  	breakpoint is excepted.  The old overload is
       
   991 	  	deprecated (it returns KErrGeneral systematically).
       
   992 	4)	Cosmetic changes to bootstrap and kernel following
       
   993 	  	code review.
       
   994 	5)	Removed dubious assert from bootstrap which crashed
       
   995 	  	Brutus when warm-booting: MarkRamImageInBank() can
       
   996 	  	actually be called with a BDB containing
       
   997 	  	KBdbBankTypeRamAsRom in that case because the BDB
       
   998 	  	initialised during cold boot is reused.  This allows
       
   999 	  	to skip bank size/width detection.
       
  1000 6)	William
       
  1001 	1)	Add CleanupArrayDelete template to E32BASE.H, and remove the __EPOC_CLEANUP_SUPPORT__
       
  1002 		include guards to complete Epoc32 Proposal SW1-87 (See STORE 0049 notes from 1998) 
       
  1003 	2)	Export EKDATA.DEF so that ASSPs can get it from a published place, rather than
       
  1004 		referring to ..\e32\bmarm\ekdata.def. Modified various MMP files to get this file
       
  1005 		from \epoc32\release\marm\ekdata.def instead.
       
  1006 
       
  1007 7)	Pete	
       
  1008 	1)	Fixed FID-4XEE3C "Remount of fixed media broken". Change to the function
       
  1009 		DPrimaryMediaBase::NotifyMediaStatusChange() which is called on media
       
  1010 		change, but more significantly when forcing a remount on a drive. The change
       
  1011 		involves only attempting to reset media driver current consumption if the
       
  1012 		media is removable (since only drivers for removable media track current
       
  1013 		consumption). This fixes a problem where the kernel heap became corrupt when
       
  1014 		forcing a remount on a fixed drive.
       
  1015 	2) 	Added the following functions to the TBusLocalDrive class:-
       
  1016 
       
  1017 		a) TInt SetMountInfo(const TDesC8* aMountInfo,TInt aMountInfoThreadHandle);
       
  1018 			The SetMountInfo() function allows a descriptor to be associated with
       
  1019 		a local drive - which is passed down to the corresponding media driver for the
       
  1020 		drive as that driver is opened. This therefore provides a means of supplying
       
  1021 		additional information to the driver at creation time. In the case of 'secure'
       
  1022 		drives, a driver may not open successfully unless the correct mount information
       
  1023 		is supplied at creation time. Mount information, once passed into the drive, is
       
  1024 		stored in the correspnding DPrimaryMedia object for the drive and is therefore
       
  1025 		available for subsequent remounts of the drive following media change or machine
       
  1026 		power down events. Mount information can be cleared by passing in a NULL mount
       
  1027 		info descriptor.
       
  1028 
       
  1029 		b) TInt ForceRemount(TUint aFlags);
       
  1030 			This forces a local drive to be remounted. This is a replacement for the
       
  1031 		function UserSvr::ForceRemountMedia(TMediaDevice aDevice) since the latter
       
  1032 		requires knowlege of the h/w platform in quesion in order to select the 
       
  1033 		appropraite TMediaDevice value for a particular drive.
       
  1034 	3)	Added SetMountInfo() function to TLocDrv class and modified TLocDrv::Open()
       
  1035 		so this no longer takes a 'const TDesC* aMountInfo' parameter. Corresponding
       
  1036 		change to DMedia::Open() function which also no longer has a 
       
  1037 		'const TDesC* aMountInfo' a parameter. The mount info is intead stored in the
       
  1038 		DPrimaryMedia class which has two new functions:-
       
  1039 			TInt SetMountInfo(TLocalDriveMessageData &aMountInfo,TInt aMediaNum);
       
  1040 			TMediaDrvDescData* MountInfo(TInt aMediaNum);
       
  1041 	4)	Change to DMediaDriver class which now supplies the DoCreate() function and instead
       
  1042 		requires a derived driver class to supply the pure virtual function:-
       
  1043 			Int Open(TMediaDevice aMediaDevice).
       
  1044 		In most cases, convertion of existing non-removable drivers will require the existing
       
  1045 		DoCreate() function to be renamed Open().
       
  1046 
       
  1047 
       
  1048 Version 1.02.359
       
  1049 ================
       
  1050 (Made by JonathanM, 18/07/2001)
       
  1051 
       
  1052 1)	Morgan
       
  1053 	1)	Implemented CR MHEY-4XHN9D "Move DPassiveDebugger implementation out
       
  1054 		of the core kernel"
       
  1055 		Exported the following functions and K32DBG.H
       
  1056 			ImpMmu::AllocatePageTable(unsigned long, unsigned long, int)
       
  1057 			DPlatProcess::DataSectionBase(DPlatChunk *) const
       
  1058 			ImpMmu::FreePageTable(int, int)
       
  1059 		Moved ka_edbg.cpp from all ASSPs and
       
  1060 		\e32\ekern\epoc\arm\kc_edbg.cpp into a device-driver/extention in
       
  1061 		\tools\debugger_stub\passivestub\...
       
  1062 	2)	Removed DDebugger initialisation calls from boot.
       
  1063 		A DDebugger implementation should load itself as an extension or a
       
  1064 		device driver, and install using Plat::SetDebugger(debugger);
       
  1065 	3)	Added __ENABLE_NOTIFY_DEBUGGER__ macro to enable/disable debug support
       
  1066 		in the kernel.  Currently on in UREL and UDEB builds by default.
       
  1067 	4)	Cogent passive debugger now lives in \tools\debugger_stub\passivestub
       
  1068 		and is built as EDEBUG.LDD.  Include this as an extension to get
       
  1069 		Lauterbach OS aware debug.  Or load it as an LDD with DEBUGGER.EXE
       
  1070 			"DEBUGGER load" from the command line
       
  1071 	5)	Helen debugger now lives in \helen\debugger and built as EDEBUG.LDD
       
  1072 		See 4) for usage.
       
  1073 
       
  1074 2)    Nicolas
       
  1075 	1)	The kernel data/bss section can be relocated to any fast
       
  1076 		RAM bank by setting KBdbFlagKernelData in the
       
  1077 		appropriate BDB bank descriptor (generic bootstrap
       
  1078 		only).
       
  1079 	2)	The supervisor stack/heap can be relocated to any fast
       
  1080 		RAM bank by setting KBdbFlagSvStackHeap in the
       
  1081 		appropriate BDB bank descriptor (generic bootstrap
       
  1082 		only).
       
  1083 	3)	The kernel stacks (reentrant, null, irq, fiq, exception)
       
  1084 		can be relocated to any fast RAM bank by setting the
       
  1085 		relevant bit (KBdbFlagStack*) in the appropriate BDB
       
  1086 		bank descriptor (generic bootstrap only).
       
  1087 	4)	The kernel stacks are now allocated by the generic
       
  1088 		bootstrap (either in DRAM or fast RAM).	 Super and CPU
       
  1089 		pages layout modified to pass stack info to the kernel.
       
  1090 		Each variant using the generic bootstrap calls
       
  1091 		Arm::Init1Stacks() from ImpHal::Init1() to initialise
       
  1092 		the stacks.
       
  1093 	5)	For the windermere port which does not use the generic
       
  1094 		bootstrap, the stacks are statically allocated in the
       
  1095 		ASSP layer and ImpHal::Init1() initialises the
       
  1096 		Arm::*StackTop and PP::*StackTop pointers.
       
  1097 	6)	The exception vectors, handler and dispatch table can
       
  1098 	  	be relocated to any fast RAM bank by setting
       
  1099 	  	KBdbExcCode4k in the appropriate bank descriptor
       
  1100 	  	(generic bootstrap only).  There also exist
       
  1101 	  	KBdbExcCode8k and KBdbExcCode12k in case the exception
       
  1102 	  	handlers get bigger in the future.
       
  1103 	7)	The exception vectors are now located at 0xFFFF0000 on
       
  1104 	  	platforms which support this.  Grep for
       
  1105 	  	__CPU_EXC_VECTORS_MOVABLE in u32std.h for a
       
  1106 	  	comprehensive list.  As a consequence dereferencing
       
  1107 	  	NULL pointers in privileged mode now enters the debug
       
  1108 	  	monitor.
       
  1109 	8)	Fix defect CLE-4Y4EMG (Bootstrap doesn't fill in Rom
       
  1110 		config section completely): ROM type fields now
       
  1111 		correctly initialised in the super page.
       
  1112 	9)	Bootstrap test code added for assabet.
       
  1113 	10)	Bootstrap documentation updated.
       
  1114 	11)	Template port updated.
       
  1115 
       
  1116 
       
  1117 3)	Michael
       
  1118 	1)	Fixed Helen crashing (exc id 26) at boot-up time: ImpHal::Idle() in 
       
  1119 		\e32\ekern\epoc\arm\Helen\KA_UTL.CPP
       
  1120 	2)	Modified macro test() in e32test.h such that it now also displays the
       
  1121 		respective source filename when an RTest test fails. Added the necessary
       
  1122 		overloaded operator() and constructor to class RTest in us_test.cpp.
       
  1123 		An occasional stack overflow problem has been fixed: we now pass the filename
       
  1124 		string as a const TText* rather than a const TDesc& (_S() vs. _L()).
       
  1125 	3)	Fixed DPlatChunk::SetContiguousRamL() and DPlatChunk::SetHardwareL() in
       
  1126 		\e32\ekern\epoc\kp_chk.cpp: too much memory was	reserved upon creation of a
       
  1127 		transfer buffer, too little freed after closing it.
       
  1128 	4)	Fixed CBitMapAllocator::ExtractRamPages() in \e32\euser\cbase\ub_bma.cpp:
       
  1129 		eliminated a condition when the do/while loop would never be left.
       
  1130 	5)	added two exported static kernel functions: DThread* Kern::SvThread() and
       
  1131 		DProcess* Kern::SvProcess(), frozen for mawd, mcga, mcoy, meig, mhelen, mint,
       
  1132 		misa, mlnk, mtemplate, wins
       
  1133 	6)	HWA API:
       
  1134 		- changed task parameter TaskID from type TInt to TUid
       
  1135 		- RHwaTask::Close() and RHwaDevice::CloseTask() now return an TInt error code
       
  1136 		  from the kernel (actually from the PDD), rather than being void
       
  1137 		- T_HWA: creating a contiguous transfer buffer from the user side now works,
       
  1138 		  added test of task messaging functions, misc. fixes.
       
  1139 
       
  1140 4)	Tim Band and Arun Sachamuneewongse
       
  1141 	1)	Added three 'next favourite' language specifiers to TLocale and
       
  1142 		SLocaleData, and setters and getters for them in TLocale.
       
  1143 
       
  1144 5)	JonathanM
       
  1145 	
       
  1146 	LCD Driver Portability Enhancements
       
  1147 
       
  1148 	Moved all display related code into new kernel extension (VIDEODRIVEREX)
       
  1149 	New LDD stub (VIDEODRIVERLDD) provides access to this implementation.
       
  1150 
       
  1151 	Added HAL attributes
       
  1152 
       
  1153 		EDisplayIsMono,                // Display is monochrome
       
  1154 		EDisplayIsPalettized,          // True if display is in a paletized mode
       
  1155 		EDisplayBitsPerPixel,          // Number of bits per pixel for current display mode
       
  1156 		EDisplayMaxBitsPerPixel,       // Max color resolution display mode
       
  1157 		EDisplayMemoryAddress,         // Start of video memory
       
  1158 		EDisplayOffsetToFirstPixel,    // Offset of first displayed pixel from EDisplayMemoryAddress
       
  1159 		EDisplayOffsetBetweenLines,    // Number of bytes between the first pixel in successive lines
       
  1160 		EDisplayPaletteEntry,          // To get, pass entry number (Color returned as 0x00bbggrr)
       
  1161 									   // To set, pass entry in bits 31-24, color in bits 23-0
       
  1162 		EDisplayIsPixelOrderRGB,       // True if physical pixel layout is RGB, false for BGR
       
  1163 		EDisplayIsPixelOrderLandscape, // True if physical pixel layout is landcape, false for portrait
       
  1164 
       
  1165 	Added new exports to EKERN
       
  1166 
       
  1167 		DPlatChunkHw::DoCreateL(class TPhysAddrs* aAddr,TInt aCount,TChunkType aChunkType)
       
  1168 		TBool Plat::CheckInWservThread()                     // Returns true if current thread is the registerd WSERV thread
       
  1169 		void Hal::SetDisplaySizeInPixels(const TSize& aSize) // Inform kernel of display size in pixels
       
  1170 		void Hal::SetPhysicalScreenSize(const TSize& aSize)  // Inform kernel of display size in twips
       
  1171 		void Hal::SetMaximumDisplayColors(TInt aMaxColors)   // Inform kernel of number of phsysical colors
       
  1172 
       
  1173 	Removed the following methods
       
  1174 
       
  1175 		ImpHal::DisplaySizeInPixels()
       
  1176 		ImpHal::PhysicalScreenSize()
       
  1177 		ImpHal::MaximumDisplayColors()
       
  1178 
       
  1179 		Hal::DisplaySizeInPixels()
       
  1180 		Hal::PhysicalScreenSize()
       
  1181 
       
  1182 		ImpPsu::DisplayOn()
       
  1183 
       
  1184 		Custom::DisplaySize();
       
  1185 		Custom::PhysicalScreenSize();
       
  1186 		Custom::DisplayOn();
       
  1187 		Custom::DisplayOff();
       
  1188 		Custom::MaximumDisplayColors()=0;
       
  1189 
       
  1190 		P::ClearScreen()
       
  1191 
       
  1192 6)	JonathanM
       
  1193 
       
  1194 	Fixes for base release.
       
  1195 
       
  1196 	1) Updated E32 and F32 version numbers.
       
  1197 	2) Added IPR Policy files to base\assabetb\bootstrap\test (Category E)
       
  1198 	   and base\helen\debugger (Category B).
       
  1199 	3) Fixed WINS EDISP build warning.
       
  1200 	4) Changed T_VIDEO so that it doesn't build for WINS.
       
  1201 	5) Modified OBY files for varients which now use the new VideoDriverExtension.
       
  1202 	   These now have "#define USE_VIDEODRIVEREXTENSION"
       
  1203 	6) Removed spuriours Kern::Printfs.
       
  1204 	7) Renamed Integrator VideoDriverExtension to match romkit name pattern.
       
  1205 	8) Fixed bug in MISA videodriver GetPaletteEntry function.
       
  1206 	9) Removed always on tracing from brutus screen driver code.
       
  1207 	10) Fixed Integrator ROM building (needed to include video driver by correct name
       
  1208 	    and exclude the old Neon250 kernel extension.
       
  1209 
       
  1210 
       
  1211 Version 1.02.358
       
  1212 ================
       
  1213 (Made by Michael, 19/06/2001)
       
  1214 
       
  1215 1)	MichaelP
       
  1216 	1)	Added (many) and modified (some) files for the MHELEN ASSP base port.
       
  1217 	2)	Modified macro test() in e32test.h such that it now also displays the
       
  1218 		respective source filename when an RTest test fails. Added the necessary
       
  1219 		overloaded operator() and constructor to class RTest in us_test.cpp.
       
  1220 	3)	Reverted the change of the test() macro mentioned under 2) because of stack
       
  1221 		overflow problems with some programs which were detected during the link
       
  1222 		stage. This needs to be further investigated. For the time being we use the
       
  1223 		old version of test().
       
  1224 	4)	Updated HWA driver (LDD + WINS PDD) and API code. Added (bogus) PDD for Helen.
       
  1225 
       
  1226 2)	Nicolas
       
  1227 	1)	rom.cfg: suppressed no-header option for integrator.
       
  1228 	2)	Fixed defect FER-4XDH9P (Switch On messages not
       
  1229 	  	received) on WINS by calling Power::SwitchOn() when
       
  1230 	  	waking up following normal or emergency standby.
       
  1231 	3)	Deleted Eiger custom bootstrap because the port
       
  1232 	  	actually uses the generic one.
       
  1233 
       
  1234 3)	MarkCa
       
  1235 	1)	Fixed EDNHLJT-4WZGTD (Secure mmc - "Invalid" after cancelling pw change
       
  1236 		& FM panic) and related EDNHAAO-4WZFYR (Secure MMC: Note "Invalid" shown
       
  1237 		after updating the file system.)  New media attribute KMediaAttHasPassword
       
  1238 		shadows PWD_LEN != 0 in card, and controller backs up store before
       
  1239 		password operation, recovering on failure.
       
  1240 	2)	Fixed CAN-4WJHJN (6.0) and EDNMCAN-4VYKTY (6.1) ("File server must accept
       
  1241 		new MultiMediaCard password encoding scheme".)  Password notifier
       
  1242 		changed to encode passwords as Unicode.
       
  1243 	3)	Enabled debug password notifier for F32 fix EDNPCHY-4VWP5B
       
  1244 		(problems with secure mmc implementation.)  This completes after
       
  1245 		a user specified period and is used to debug using F32 when a
       
  1246 		notifier is raised.
       
  1247 	4)	Implemented CR PSCE-4VMP3K to set hard limit for RAM drive.  New HAL
       
  1248 		attribute EMaxRAMDriveSize must be set to size in bytes, where value
       
  1249 		includes FAT.
       
  1250 
       
  1251 4)	TimBa	Fixed bug in MatchF: if argument was an empty descriptor, it always
       
  1252 		returned null. Now if the candidate is nonempty it returns KErrNotFound.
       
  1253 
       
  1254 Version 1.02.357
       
  1255 ================
       
  1256 (Made by Carlos, 31/05/2001)
       
  1257 
       
  1258 1)	William
       
  1259 	1)	Change DebugThreadPanic to use a struct for the debugger-friendly values, so that
       
  1260 		a simple autoexp.dat change will display the panic details properly.
       
  1261 
       
  1262 2)	Dennis
       
  1263 	1)	Fixed defect HAR-4WSGJ5 (RArray::FindInUnsignedKeyOrder not returning KErrNotFound).
       
  1264 		This was due to problems with the special case handling of 4 byte entries in the ARM
       
  1265 		assembler version.
       
  1266 	2)	Fixed problem with MCOY failing to boot when image was loaded using RedBoot
       
  1267 		instead of RT bootloader.
       
  1268 		There were two problems - a spurious CIU interrupt and the fact that the RTC correction
       
  1269 		and LastSetTime were uninitialised.
       
  1270 
       
  1271 3)	Nicolas (RHR 113.1 completly implemented)
       
  1272 	1)	5mx: Set LCD contrast to its default level every time
       
  1273 	  	the screen is switched on.  This works around the
       
  1274 	  	regression introduced while cleaning up the Hal class (p4 changelist 
       
  1275 	  	(the screen was completely black and unusable).  
       
  1276 	2)	Fixed typo in ImpMmu::UnmapPage(): confusion between pde and pte.
       
  1277 	3)	Added support for TC RAM banks in generic bootstrap.
       
  1278 	  	Hardware-specific initialisation is left as an
       
  1279 	  	exercise to the system integrator.  It should be done
       
  1280 	  	in HWInitialise().
       
  1281 	4)	Added new consistency checks in generic bootstrap
       
  1282 	  	(ROM/RAM bank ordering, bank overlap in
       
  1283 	  	physical/linear space).  Enabled for UDEB only.
       
  1284 	5)	Partially implemented scheme allowing to fake IRAM on
       
  1285 	  	assabet (disabled).
       
  1286 	6)	Reorganised bootstrap test code: generic code moved
       
  1287 	  	from brutusa to bootstrap.
       
  1288 	7)	Ported bootstrap test code on assabet.
       
  1289 
       
  1290 4)	JonathanM
       
  1291 	1)	Added a new export to the BLD.INF files for BRUTUSA and ASSABETB.
       
  1292 		VI_POWER.H is now exported to KERNEL\SA1100\ to enable the sound drivers to
       
  1293 		set their power requirements.
       
  1294 
       
  1295 5)	AndrewCu
       
  1296 	1)	Small changes to the RNotifier class in e32 (for Uikon 6.2 Dialog Server work).
       
  1297 
       
  1298 6)	Tim Band
       
  1299 	1)	Changed TChar functions that query the type of the character so that
       
  1300 		they do not make an Exec call
       
  1301 	2)	Made Private Use Area characters graphical and printable according
       
  1302 		to their meaning
       
  1303 	3)	New folding code that respects Unicode
       
  1304 	4)	Removed Uzbek, Tajik and Azerbaijani from language list, added
       
  1305 		Tagalog in place of Azerbaijani
       
  1306 
       
  1307 7)	CarlosF
       
  1308 	1)	Several changes to Assabet Variant to get LFFS to mount on C:\ drive. This ended up
       
  1309 		being made configurable, Switch 4 of the switch-pack on the Companion Chip Card
       
  1310 		is used to decide wheter to Mount FAT or LFFS on drive C:\.
       
  1311 
       
  1312 1)	Nicolas (RHR 113.1 completly implemented)
       
  1313 	1)	5mx: Set LCD contrast to its default level every time
       
  1314 	  	the screen is switched on.  This works around the
       
  1315 	  	regression introduced while cleaning up the Hal class (p4 changelist 
       
  1316 	  	(the screen was completely black and unusable).  
       
  1317 	2)	Fixed typo in ImpMmu::UnmapPage(): confusion between pde and pte.
       
  1318 	3)	Added support for TC RAM banks in generic bootstrap.
       
  1319 	  	Hardware-specific initialisation is left as an
       
  1320 	  	exercise to the system integrator.  It should be done
       
  1321 	  	in HWInitialise().
       
  1322 	4)	Added new consistency checks in generic bootstrap
       
  1323 	  	(ROM/RAM bank ordering, bank overlap in
       
  1324 	  	physical/linear space).  Enabled for UDEB only.
       
  1325 	5)	Partially implemented scheme allowing to fake IRAM on
       
  1326 	  	assabet (disabled).
       
  1327 	6)	Reorganised bootstrap test code: generic code moved
       
  1328 	  	from brutusa to bootstrap.
       
  1329 	7)	Ported bootstrap test code on assabet.
       
  1330 
       
  1331 
       
  1332 Version 1.02.356
       
  1333 ================
       
  1334 (Made by Pete, 10/05/2001)
       
  1335 
       
  1336 1)	MarkCa
       
  1337 	1)	Added base support for store LFFS optimization.  KDriveAttTransaction
       
  1338 		bit added to \e32\include\e32std.h.
       
  1339 
       
  1340 2)	Dennis
       
  1341 	1)	Added mouse driver and VGA video driver for Integrator.
       
  1342 	2)	Renamed the text window server DServer object to "TextWindowServer".
       
  1343 
       
  1344 3)	Morgan
       
  1345 	1)	Implemented Silent Running on Assabet
       
  1346 
       
  1347 4)	Pete
       
  1348 	Further changes to MMC Controller:-
       
  1349 	1) 	Renamed the function 
       
  1350 		DMMCSession::FillCommandDesc(TMMCArgumentTUint32,TUint8*,TUint32) to
       
  1351 		FillCommandArgs() since it doesn't actually result in the command descriptor
       
  1352 		array being updated.	
       
  1353 	3) 	Removed check from DMMCStack::IssueCommandCheckResponseSM() whether
       
  1354 		a multiblock read/write command has been selected with a total length less than 
       
  1355 		a block. This is redundant.
       
  1356 	4) 	Modified DMMCStack::CIMReadWriteBlocksSM(). This
       
  1357 		function no longer sets up the command descriptor array for special block transfer 
       
  1358 		commands (but expects this to have been already done before the function is called).		
       
  1359 	8) 	Further change to the WINS local drive mappings. The entire local drive mapping for
       
  1360 		WINS is now as follows:-
       
  1361 		Local drive 0:	Internal RAM drive (EFixedMedia0) - Y:
       
  1362 		Local drive 1:	1st special MMC Card on MMC socket 0 (ERemovableMedia0) - X: 
       
  1363 		Local drive 2:	2nd special MMC Card on MMC socket 0 (ERemovableMedia0)
       
  1364 		Local drive 3:	MMC Card on MMC socket 1 (ERemovableMedia1)
       
  1365 		Local drive 4:	Not currently assigned
       
  1366 		Local drive 5:	Not currently assigned
       
  1367 		Local drive 6:	Not currently assigned
       
  1368 		Local drive 7:	Not currently assigned
       
  1369 		Local drive 8:	Internal LFFS drive (EFixedMedia1) - W:
       
  1370 
       
  1371 5)	Pete
       
  1372 	1)  	Modified bootstrap for Cirrus7211a so that this now runs at 36MHz.
       
  1373 
       
  1374 6)	Nicolas 
       
  1375 	1)	Added fixed size internal RAM banks in generic
       
  1376 	  	bootstrap.
       
  1377 	2)	Introduced support for area relocation in generic
       
  1378 		bootstrap.  Every kind of file (including the primary)
       
  1379 		can be relocated to an internal RAM bank.
       
  1380 	3)	Updated generic bootstrap version number to 2.1.
       
  1381 	4)	Submitted Richard's bootstrap test files.
       
  1382 	5)	Removed MCORE stuff from generic bootstrap.
       
  1383 	6)	Inversed order of "static" and "const" in _LIT()
       
  1384 	  	definition to avoid lint warning.
       
  1385 	7)	Added assabet.mbc (metabuild script).	 
       
  1386 	8)	Implemented RProcess::GetMemoryInfo().  This allows to
       
  1387 	  	extend GDB so it can attach itself to running threads.
       
  1388 
       
  1389 7)	Michael
       
  1390 	1) 	Added overloaded function:
       
  1391 		DTransferBuffer* TransferBufferFromHandle(TInt aHandle, DThread *aThread)
       
  1392 		to \e32\include\k32std.h, exported and frozen for all BUILDS. Function
       
  1393 		implemented in \e32\ekern\ks_transbuf.cpp. This function is used where the
       
  1394 		current thread is not the same as the one that created the handle.
       
  1395 	2)	Changed behaviour of DPlatTransferBuffer::~DPlatTransferBuffer() and
       
  1396 		DPlatTransferBuffer::DoClose() in \e32\ekern\emul\win32\kp_transbuf.cpp and 
       
  1397 		\e32\ekern\epoc\kp_transbuf.cpp: iChunk gets only deleted if it actually exists,
       
  1398 		i.e. is non-NULL
       
  1399 	3)	Numerous changes to HWA implementation (User API, LDD and WINS PDD), work
       
  1400 		still ongoing.
       
  1401 
       
  1402 Version 1.02.355
       
  1403 ================
       
  1404 (Made by Nicolas, 04/05/2001)
       
  1405 
       
  1406 1)	William
       
  1407 	1)	Changed the WINC-only KernelStarted semaphore to be anonymous, to prevent
       
  1408 		problems with concurrent WINC execution on a multiple processor build machine.
       
  1409 		This will not re-open defect EDNGBON-4JYNU6 "Inaccessibility of request
       
  1410 		semaphores breaks EPOC connect" because this isn't a request semaphore.
       
  1411 	2)	Fixed TGlobalAlloc to use User::AllocL rather than new[], and User::Free instead of
       
  1412 		the mismatched delete. This will now work even if new[] plays funny tricks (which
       
  1413 		is the case with CodeWarrior) and makes the User::ReAllocL call legitimate.
       
  1414 
       
  1415 2)	Nicolas
       
  1416 	1)	Merged 6.1 release branch back into the mainline.
       
  1417 
       
  1418 Version 1.02.354
       
  1419 ================
       
  1420 (Made by Dennis, 20/04/2001)
       
  1421 
       
  1422 1)	AndrewJ
       
  1423 	1) 	Changed the misa kernel.iby file to detect whether the build is for 
       
  1424 	   	Assabet varient. If it is for assabet an alternative estart is 
       
  1425 		included in the rom which automatically loads the LFFS on to K: drive 
       
  1426 		as well as other tasks performed by estart. This should not take place
       
  1427 		on any other platform.
       
  1428 	2)	The generic estart is only loaded (in f32) for non Assabet platform as
       
  1429 		added a definition call CUSTOM_ROM that is only defined for assabet. 
       
  1430 	3) 	Added estart.cpp /assabetb/ and loadlffs.cpp to /assabetb/lffs/ for
       
  1431 		new estart.exe component loaded only fopr Assabet.
       
  1432 	4)	removed /test/ subdirectory in /assabetb/lffs/ as nothing it it is or 
       
  1433 		should be used.
       
  1434 	5)	removed obsolete definition of BASE_ROM from F32tests.oby,
       
  1435 		E32tests.Oby and Alltests.oby
       
  1436 
       
  1437 2)	Morgan
       
  1438 	1)	Deleted \e32\bmarm\EXYIN.DEF
       
  1439 	2)	Added EPenState attribute to HAL to get/set state of the digitiser.
       
  1440 	3)	Added EKeyboardState.
       
  1441 	4)	Added pen/display get/set functionality to BRUTUS HAL DLL and driver.
       
  1442 	5)	Added Enable() and Disable() functions to digitiser driver on Brutus.
       
  1443 	6)	Tweeked Brutus digitiser driver to send switch on events when coming
       
  1444 		out of standby or hibernation (disabled) mode.
       
  1445 	7)	Removed LCD switch on from LCD power handler.
       
  1446 	8)	Generic kernel now doesn't call DisplayOn().
       
  1447 	9)	Added Power::SwitchOn() that can be called from device drivers to
       
  1448 		send a ESwitchOn event if the KPowerUserCpu bit is not set.  Does the
       
  1449 		same thing as a call to SetRequirement(KPowerUserCpu | ...) but is
       
  1450 		easier to understand.
       
  1451 		Added variant that takes a TRawEvent to specify which event is sent
       
  1452 		for switch on.
       
  1453 		Call Power::SwitchOn() from your device driver to cause full UI switch
       
  1454 		on.
       
  1455 	10)	Tidied Brutus HAL DLL startup code.
       
  1456 	11)	Made text window server take responsibility for turning on the screen
       
  1457 		at switch on.
       
  1458 	12)	Tidied Assabet HAL DLL startup code and removed spurious panicking
       
  1459 		code.
       
  1460 	13)	Updated HAL\DOC\HAL.DOC boilerplate startup code.
       
  1461 	14)	Made display on imply switch on, and send events as appropriate
       
  1462 	15)	assabetb, cirrus7211a, series5mx1 variant updates to maintain current
       
  1463 		behaviour.
       
  1464 	16)	Changed the prototype of DPowerModel::PowerStandby() to return an error
       
  1465 		value.
       
  1466 
       
  1467 3)	Dennis
       
  1468 	1)	Fixed a problem with creation of fixed address chunks with initial
       
  1469 		size zero.
       
  1470 
       
  1471 4)	Jonathan
       
  1472 	1)	Removed redundant Hal and UserHal functions from kernel and ASSPs.
       
  1473 	2)	Refroze kernel exports for all platforms other than WINS/WINC.
       
  1474 	3)	Removed associated variant functions and, where necessary to implement
       
  1475 		the HAL API, re-implemented them via a HAL driver on the mainstream
       
  1476 		platforms Brutus, Assabet and VTemplate. Other variant DLLs still
       
  1477 		contain some redundant functions and may not have implementations for
       
  1478 		all appropriate HAL attributes.
       
  1479 
       
  1480 5)	Carlos
       
  1481 	1)	Several changes to Assabet Variant to get PC Card working
       
  1482 	2)	Assabet builds its own ATA driver (vi_medata.cpp). The generic ATA
       
  1483 		driver is not used. Changed the MISA kernel.iby to allow Brutus to use
       
  1484 		the generic ATA driver and Assabet to use its Variant-specific one.
       
  1485 
       
  1486 6)	Dennis
       
  1487 	1)	Added integrator port. No screen or serial drivers yet.
       
  1488 
       
  1489 7)	Pete 	
       
  1490 	4)	Fixed SCE-4V7S6C "MMC Controller card init. function is in-efficient
       
  1491 		and unnecessarily complex". This entailed:-
       
  1492 
       
  1493 		- Add new TMmcCardArray class to replace the DMMCStack::iCxNewAcqArray[]
       
  1494 		and DMMCStack::iCards[] arrays and their associated functionality.
       
  1495 		- Removal of ASSP layer function DMMCStack::PhysicalCardSlots()
       
  1496 		  function as this was duplicating information already returned in the
       
  1497 		  ASSP layer function DMMCController::SetMachineInfo() function.
       
  1498 		- Addition of generic layer DMMCStack::Init() function to determine
       
  1499 		  the max. number of cards for the platform once - at Controller
       
  1500 		  init. time rather than every time a card stack is initialized.
       
  1501 		- Modification to DMMCStack::PowerDownStack() function to add an extra
       
  1502 		  argument to this function (TBool aMediaChange) indicating whether
       
  1503 		  the power down is required due to media change or not.
       
  1504 		- Removal of the 'update stack' implementation in the generic layer of
       
  1505 		  the Controller. This was intended to re-scan for new cards after a
       
  1506 		  media change. This is now redundant since all cards are always
       
  1507 		  powered down on media change.
       
  1508 		- Various comments added throughout PS_MMC.CPP to aid clarity.
       
  1509 	5)	Fixed FID-4UZLFG "Increase number of supported local drives"
       
  1510 
       
  1511 8)	Nicolas
       
  1512 	1)	Added \brutusa\brutusa.mbc
       
  1513 	2)	Cogent: Moved call to ImpHal::EnableIrqs() from ImpPic::Init3() to
       
  1514 	  	beginning of ImpHal::Init3() to avoid the board hanging forever while
       
  1515 	  	initialising the PCI base module.
       
  1516 
       
  1517 9)	William
       
  1518 	1)	Removed temporary WINSCW workaround in up_i64.cpp, now that the CodeWarrior
       
  1519 		compiler supports the BT instruction.
       
  1520 	2)	Added WINSCW-specific variation of the path constants in up_path.cpp
       
  1521 	3)	Rearranged win32/up_trp.cpp version of TTrap::Trap() so that the register
       
  1522 		saving happens before the C++ code to manipulate iResult and aResult. This
       
  1523 		avoids a problem where the CodeWarrior compiler was saving EBX on the stack and
       
  1524 		and using it as a temporary during the iResult/aResult mangling, causing the
       
  1525 		wrong EBX value to be restored during Leave.
       
  1526 
       
  1527 Version 1.02.353
       
  1528 ================
       
  1529 (Made by RobertJ, 26/03/2001)
       
  1530 
       
  1531 1)	Carlos
       
  1532 	1)	Several Changes in Assabet Bootstrap and vi_power.cpp in order to get
       
  1533 		the Power Management/Sleep Mode working properly.
       
  1534 	2)	Changes to Assabet Keyboard driver/controller
       
  1535 	3)	Removed #define __USE_LEDS_FOR_SYSTEM_DEBUG. User software can now use
       
  1536 		those LEDs if they wish.
       
  1537 	4)	Had to implement a function in the Assabet Variant to allow enabling
       
  1538 		RTC Interrupts. Surprisingly the SA1100 ASSP does not have these
       
  1539 		functions!
       
  1540 	5)	Some changes to the SA1100 Interrupt controller (only affect Assabet
       
  1541 		as they were changes in the way External Interrupts are handled).
       
  1542 	6)	Needed to export the Kernel function ImpMmu::LinearToPhysical as this
       
  1543 		will be called from the Assabet Variant (vi_power.cpp).
       
  1544 	7)	Got rid of the debug message printed every time the Variant is called:
       
  1545 		after waking up, a call to re-enable the Debug Port would attempt to
       
  1546 		print this out and crash!
       
  1547 
       
  1548 2)	Alastair
       
  1549 	1)	Added initial transfer buffer functionality.  Chief classes are
       
  1550 		RTransferBuffer and RTransferWindow user-side, described in
       
  1551 		E32TransBuf.h, and DTransferBuffer and DTransferWindow
       
  1552 		kernel-side, described in K32Std.h.  Test program is built from
       
  1553 		e32test\mmu\t_transbuf.cpp, though the test isn't fully
       
  1554 		complete yet.  Also, the scheme doesn't yet cater for transfer
       
  1555 		buffer access via transfer windows for "fixed" processes, though
       
  1556 		it will shortly.
       
  1557 		
       
  1558 3)	Nicolas
       
  1559 	1)	Introduced example metabuild script for MCGA (see
       
  1560 		\cogent1\cogent1.mbc).
       
  1561 
       
  1562 4)	MarkCa
       
  1563 	1)	Fixed CAN-4TXKZQ (Using a PC Card can wrongly produce password
       
  1564 	  	notifier)
       
  1565 	2)	Fixed CAN-4TWM6E (L7200 MMC Controller takes control of second UART)
       
  1566 		Fix affects t_atadrv, so changed \l7200a\va_hw.cpp to use non-zero
       
  1567 		machine uid.
       
  1568 	3)	Fixed CAN-4TYFHS (Reading to the end of a MultiMediaCard can produce
       
  1569 		an out-of-range error)
       
  1570 	4)	Fixed EDNTDAS-4L4JZ8 (Thread leakage using emulators)
       
  1571 	5)	Fixed TOD-4RXJSS (Race condition causing accessing of already delete
       
  1572 		pointer when deleting DChannelComm)
       
  1573 	6)	Fixed CAN-4UBJU2 (Controller does not process all error conditions)
       
  1574 	7)	Changed l7200\pa_mmc.cpp to return KMMCErrNotSupported because pre 2.1
       
  1575 		controller.
       
  1576 	8)	Added __MLNK__ case to cpu defines in u32std.h.
       
  1577 	9)	Fixed CAN-4UNE8D (MMC Controller access violation after emergency power
       
  1578 		down)
       
  1579 	10)	Removed KPBUS1 | KPBUS2 | KPBUSDRV tracing from mlnk\header.iby.
       
  1580 	
       
  1581 5)	AndrewJ
       
  1582 	1)	Enabled LFFS on assabet.
       
  1583 	2)	Edited vi_hw.cpp and vi_pbus.cpp to enable LFFS on K: with PC Card
       
  1584 	  	disabled.
       
  1585 	3)		put in fixes from 6.1 Numbers: 	SCE-4TVQ78	
       
  1586 						TOD-4RWEHL
       
  1587 
       
  1588 6)	Dennis
       
  1589 	1)	Fixed XScale RTC rounding problem
       
  1590 	2)	Added check for imprecise aborts on XScale - fault the kernel if they
       
  1591 	  	occur.
       
  1592 	3)	iExtraData=FSR for both data and prefetch aborts.
       
  1593 
       
  1594 	*** Release note for XScale delivery ***
       
  1595 
       
  1596 	This release supports the Intel IQ80310 evaluation board based on the
       
  1597 	XScale 80200 processor (Coyanosa). Code for this board can be built by
       
  1598 	specifying platform MCOY on the build command line.
       
  1599 
       
  1600 	The following property definitions are used to specify the CPU type (in
       
  1601 	\e32\include\u32std.h):
       
  1602 
       
  1603 	__CPU_XSCALE__
       
  1604 		Means that the CPU is based on the XScale microarchitecture
       
  1605 	__CPU_ARMV5TE
       
  1606 		Means that the CPU supports the ARMv5TE instruction set
       
  1607 	__CPU_ARM_ABORT_MODEL_RESTORED
       
  1608 		Means that the base register is unaltered if a load/store with base
       
  1609 		register writeback is aborted.
       
  1610 	__CPU_SPLIT_CACHE
       
  1611 		Means that the CPU uses separate instruction and data caches
       
  1612 	__CPU_SPLIT_TLB
       
  1613 		Means that the CPU uses separate instruction and data TLBs
       
  1614 	__CPU_WRITE_BUFFER
       
  1615 		Means that the CPU uses a write buffer
       
  1616 	__CPU_WRITE_BACK_CACHE
       
  1617 		Means that the CPU (data) cache supports write-back operation and that
       
  1618 		the OS uses this mode for normal RAM allocations.
       
  1619 	__CPU_CACHE_WRITE_ALLOCATE
       
  1620 		Means that the CPU (data) cache supports line allocation on writes and
       
  1621 		that the OS uses this mode for normal RAM allocations.
       
  1622 	__CPU_CACHE_FLUSH_BY_LINE_ALLOC
       
  1623 		Means that the (data) cache is cleaned/flushed by using an explicit
       
  1624 		line allocate instruction.
       
  1625 	__CPU_CACHE_POLICY_IN_PTE
       
  1626 		Means that the (data) cache policy can be changed between writethrough
       
  1627 		and writeback on a page-by-page basis using flags in the page table
       
  1628 		entries.
       
  1629 	__CPU_HAS_CACHE_TYPE_REGISTER
       
  1630 		Means that the CPU possesses the cache type register as specified in
       
  1631 		the ARM architecture reference manual (CP15 CRn=CRm=0, opc2=1)
       
  1632 	__CPU_HAS_SINGLE_ENTRY_ITLB_FLUSH
       
  1633 		Means that the CPU supports the 'Flush single ITLB entry by MVA'
       
  1634 		instruction (MCR P15, 0, Rn, C8, C5, 1)
       
  1635 	__CPU_HAS_SINGLE_ENTRY_ICACHE_FLUSH
       
  1636 		Means that the CPU supports the 'Flush single ICache line by MVA'
       
  1637 		instruction (MCR P15, 0, Rn, C7, C5, 1)
       
  1638 	__CPU_HAS_BTB
       
  1639 		Means that the CPU has a branch target buffer which needs to be
       
  1640 		flushed explicitly in conjunction with partial ICache flushes.
       
  1641 	__CPU_USE_MMU_TEX_FIELD
       
  1642 		Means that the CPU supports the extended page table permissions (TEX)
       
  1643 		field.
       
  1644 	__CPU_EXC_VECTORS_MOVABLE
       
  1645 		Means that the CPU allows the exception vectors to be relocated to
       
  1646 		FFFF0000.
       
  1647 
       
  1648 	All E32 and F32 automatic tests pass on this release, with the exception
       
  1649 	of:
       
  1650 		T_PCCD1, T_PCCD2 - because the board does not support PCMCIA
       
  1651 		T_DEBUGGER - because the debugger uses a bit pattern for breakpoints
       
  1652 			which is defined in ARM Arch 5 (was undefined on ARM Arch 4). This
       
  1653 			is being handled as a defect (defect number MAY-4V4E5V).
       
  1654 
       
  1655 	The branch target buffer is not enabled by this release. This is due to a
       
  1656 	known problem when executing THUMB code with the BTB enabled.
       
  1657 
       
  1658 7)	Pete
       
  1659 	1) 	First release of Hardware Accelerator (HWA) LDD and a crude emulation
       
  1660 		of a HWA PDD on WINS.
       
  1661 	2) 	Changes to MMC Controller to support SD Memory card initialisation.
       
  1662 	3) 	Added TMMCCardArray class and various other minor changes to the MMC
       
  1663 		Controller such (e.g. more comments).
       
  1664 	4)	Improved the WINS MMC emulation. Two cards are now emulated rather
       
  1665 		than one as before. Also, better account of the current card status is
       
  1666 		taken when deciding how to respond to an MMC command.
       
  1667 	5) 	Change to the WINS local drive mapping. Local drive 2 
       
  1668 		is now the primary partition on the second emulated MMC card rather
       
  1669 		than a secondry partition on the first emulated MMC card.
       
  1670 	6)	Temporarily disabled PC Card Peripheral bus (EPBUS.DLL) on Cirrus Logic
       
  1671 		board and replaced this with MMC Peripheral bus to facilitate development
       
  1672 		of SD Memory card development. (PC Card support will be restored once
       
  1673 		the multiple peripheral bus Controllers are supported).
       
  1674 	
       
  1675 8)	William
       
  1676 	1)	Added exported destructor to CAsyncCallBack, to solve a problem with
       
  1677 		the CodeWarrior compiler.
       
  1678 
       
  1679 Version 1.02.352
       
  1680 ================
       
  1681 (Made by Morgan, 08/03/2001)
       
  1682 
       
  1683 0)	Requires E32TOOLS(173), E32TOOLP(226), F32(260)
       
  1684 	from \\epoc\development\base\ongoing\...
       
  1685 
       
  1686 1)	Morgan
       
  1687 	1)	Split functions in UP_DLL.CPP into separate source files.  This
       
  1688 		allows the linker to discard unused functions.
       
  1689 		Functions are grouped by functional area. up_dll_file.cpp,
       
  1690 		up_dll_global.cpp, up_dll_static, up_dll_tls.cpp.
       
  1691 	2)	Split EDLL.LIB into EDLL.LIB containing the entrypoint and
       
  1692 		EDLLSTUB.LIB containing the class Dll stub functions.
       
  1693 	3)	Removed strange .idata$3 padding from UP_DLL.CPP since (we think) it
       
  1694 		is a hack for a defunct version of GCC
       
  1695 	4)	Moved thumb gcc helper functions into up_gcc.cpp in EGCC.LIB
       
  1696 	5)	Removed thumb gcc helper functions from uc_exe.cpp.  These are now in
       
  1697 		EGCC.LIB that should be included in the link of a GCC EXE or GCC DLL.
       
  1698 	6)	Moved float gcc helper functions into up_gcc_float.cpp in EGCC.LIB
       
  1699 	7)	Removed null definition of atexit() from up_dll.cpp
       
  1700 	8)	Deleted \e32\euser\epoc\arm\uc_dll.cpp since it is not used anywhere
       
  1701 	9)	Integrated MAWD DDebugger bug fix (again)
       
  1702 	10)	Added default cpu definition for __MTEMPLATE__ in U32STD.H to make it
       
  1703 		compile
       
  1704 
       
  1705 2)	Carlos
       
  1706 	1)	Disabled the Pc Card on Assabet as it is not fully working and causes
       
  1707 		problems when using the CF loader to download an image.
       
  1708 
       
  1709 3)	Dennis
       
  1710 	1)	Added basic port to Intel XScale 80200 CPU on IQ80310 board.
       
  1711 	2)	Fixed defect HAS-4U7N92 (T_WWINS hangs on Brutus). This is due to the
       
  1712 		smaller screen size compared with the Series 5.
       
  1713 		Modified notifier stuff to take account of the screen size.
       
  1714 
       
  1715 4)	RobertJ
       
  1716 	1) 	Added notification of clear stall to USB Client
       
  1717 	2) 	Fixed dma handling code for USB Client.
       
  1718 
       
  1719 5)	Alastair
       
  1720 	1)	Added initial transfer buffer functionality.  Chief classes are
       
  1721 		RTransferBuffer and RTransferWindow user-side, described in
       
  1722 		E32TransBuf.h, and DTransferBuffer and DTransferWindow
       
  1723 		kernel-side, described in K32Std.h.  Test program is built from
       
  1724 		e32test\mmu\t_transbuf.cpp, though the test isn't fully
       
  1725 		complete yet.  Also, the scheme doesn't yet cater for transfer
       
  1726 		buffer access via transfer windows for "fixed" processes, though
       
  1727 		it will shortly.
       
  1728 		
       
  1729 6)	Nicolas
       
  1730 	1)	Introduced example metabuild script for MCGA (see
       
  1731 		\cogent1\cogent1.mbc).
       
  1732 
       
  1733 7)	MarkCa
       
  1734 	1)	Fixed CAN-4TXKZQ (Using a PC Card can wrongly produce password notifier)
       
  1735 	2)	Fixed CAN-4TWM6E (L7200 MMC Controller takes control of second UART)
       
  1736 		Fix affects t_atadrv, so changed \l7200a\va_hw.cpp to use non-zero
       
  1737 		machine uid.
       
  1738 	3)	Fixed CAN-4TYFHS (Reading to the end of a MultiMediaCard can produce an
       
  1739 		out-of-range error)
       
  1740 	4)	Fixed EDNTDAS-4L4JZ8 (Thread leakage using emulators)
       
  1741 	5)	Fixed TOD-4RXJSS (Race condition causing accessing of already delete
       
  1742 		pointer when deleting DChannelComm)
       
  1743 	6)	Fixed CAN-4UBJU2 (Controller does not process all error conditions)
       
  1744 	7)	Changed l7200\pa_mmc.cpp to return KMMCErrNotSupported because pre 2.1
       
  1745 		controller.
       
  1746 	8)	Added __MLNK__ case to cpu defines in u32std.h.
       
  1747 	9)	Fixed CAN-4UNE8D (MMC Controller access vilation after emergency power
       
  1748 		down)
       
  1749 	10)	Removed KPBUS1 | KPBUS2 | KPBUSDRV tracing from mlnk\header.iby.
       
  1750 
       
  1751 Version 1.02.351
       
  1752 ================
       
  1753 (Made by Carlos, 20/02/2001)
       
  1754 
       
  1755 1)	Carlos
       
  1756 	1)	Added Assabet Variant (\Assabetb). This is an interim release 
       
  1757 		(see Release_Notes.txt)
       
  1758 	2)	Debug Monitor on SA1100 ASSP: now gets the serial port number to 
       
  1759 		be used as debug port from the variant TInt Variant::DebugInit().
       
  1760 	3)	Interrupt Controller on SA1100 ASSP: expanded the Interrupt controller
       
  1761 		to work with Conceptual Interrupts (IRQ11-27) and external interrupts.
       
  1762 		Also disabled the watchdog to free-up the OST Timer3 as an auxillary
       
  1763 		timed interrupt source for LFFS.
       
  1764 	4)	Several changes to Brutus' Variant according to what's decribed above.
       
  1765 	5)	FIR Driver: Assabet allows setting the IR range. Therefore a new
       
  1766 		Synchronous Request was introduced to deal with this.
       
  1767 	6)	ecomm driver - as above, passes the setting for the range on
       
  1768 		iSIRSettings member of the Config structure.
       
  1769 	7)	Implemented EARLY DEBUG on SA1100 ASSP.
       
  1770 	8)	A few changes on the SA1100 ASSP implementation of PC Card Controller.
       
  1771 	9)	SA1100 Text shell: changed Background/foreground colours to improve
       
  1772 		visibility on Assabet.
       
  1773 	10)	Text Shell (generic): now traps EKeyIncBrightness and
       
  1774 	   	EKeyDecBrightness.
       
  1775 	11)	HAL: added Machine ID for Assabet on hal_data.h.
       
  1776 	12)	HAL: changed hal.iby file to include an HAL##VARIANT##.DLL to get
       
  1777 	   	round the problem of having two Variants coming off the same ASSP but
       
  1778 	   	not sharing the same HAL. Changed the hal.mmp on \assabetb, \brutus,
       
  1779 		\cirrus721, \cogent1, \l7200, \series5mx1 and \vtemplate.
       
  1780 		NOTE: Had to change \romkit\base.iby to allow overnight builds to
       
  1781 		build correctly.
       
  1782 	13)	MISA EKERN def file (e32\bmisa\ekernu.def) - includes a new export
       
  1783 		Plat::BindExtInterrupt(..) to allow binding to external interrupts
       
  1784 		on Assabet.
       
  1785 	14)	Some changes on MISA .IBY files. LFFS is excluded for the time being,
       
  1786 		even on Brutus. It will be put back when Assabet's LFFS is ready. The
       
  1787 		bootstrap is now passed with the Variant extension to its name. Now
       
  1788 		includes a Hal LDD in kernel.iby.
       
  1789 	15)	MISA Variants allowed (\e32\rombuild\rom.cfg): now allows 3 variants, 
       
  1790 		Brutus (BA), Assabet-only (A0) and Assabet+Companion Card (AB).
       
  1791 
       
  1792 2)	MarkCa
       
  1793 	1)	UART media change must now be explicitly compiled in for linkup
       
  1794 		MMC port.
       
  1795 	2)	t_atadrv will now not run media change tests on linkup.  Machine
       
  1796 		UID modified in va_hw.cpp to avoid clash with Cogent.
       
  1797 
       
  1798 3)	William
       
  1799 	1)	Introduce __CW32__ defines for CodeWarrior, and adjust various
       
  1800 		compiler-related definitions accordingly.
       
  1801 	2)	Workaround bugs in the CW inline assembler
       
  1802 	3)	Remove spurious WINBASEAPI decorations in euniw.h, which upset
       
  1803 	  	CodeWarrior.
       
  1804 
       
  1805 4)	RobertJ
       
  1806 	1)	Fixed problem with FIR reads in D_FIR.CPP, the LDD. When read
       
  1807 		completes to LDD from the PDD it was possible for another read to
       
  1808 		complete the same user request.
       
  1809 	2)	Added first release of USB client for SA-1100. Components are
       
  1810 		EUSBC.LDD, which is a generic LDD, and EUSBCC.DLL. \EUSBCC is the USB
       
  1811 		Client Controller and loads as a KERNEL extension.
       
  1812 
       
  1813 Version 1.02.350
       
  1814 ================
       
  1815 (Made by Dennis, 05/02/2001)
       
  1816 
       
  1817 1)	William
       
  1818 	1)	Adjust the x86 inline assember in euser\emul\win32 so that it is
       
  1819 		acceptable to the CodeWarrior compiler: change the 8000h style
       
  1820 		constants to 0x8000, and change "_asm SomeLabel:" into "SomeLabel:".
       
  1821 
       
  1822 2)	Dennis
       
  1823 	1)	Added APIs to support execution of data as code, for use by just in
       
  1824 		time compilers for Java and also for the ARM JBit extension. New APIs
       
  1825 		are:
       
  1826 
       
  1827 		TInt RChunk::CreateLocalCode(TInt aSize, TInt aMaxSize, TOwnerType);
       
  1828 
       
  1829 		This creates a data chunk with a globally unique virtual address which
       
  1830 		is allocated from the top of virtual address space (as for EXE and DLL
       
  1831 		code chunks). The chunk is accessible only by the current process
       
  1832 		(unlike DLL code chunks) and is marked by the kernel as containing
       
  1833 		code. This means that on a split-TLB machine the ITLB will be flushed
       
  1834 		when a reschedule occurs to or from a process with a chunk of this
       
  1835 		type mapped into it and also when pages are decommitted from such a
       
  1836 		chunk. The globally unique virtual address means that the ICache need
       
  1837 		not be flushed on a reschedule.
       
  1838 
       
  1839 		RHeap* UserHeap::ChunkHeap(RChunk& aChunk, TInt aMinLength, TInt aGrowBy=KMinHeapGrowBy);
       
  1840 
       
  1841 		This creates a heap in an already existing chunk. It is intended to
       
  1842 		allow a heap to be created in a local code chunk; this heap can then
       
  1843 		be used to hold code fragments from a JIT compiler.
       
  1844 
       
  1845 		void User::IMB_Range(TAny* aStart, TAny* aEnd);
       
  1846 
       
  1847 		This performs whatever cache cleaning/flushing operations are
       
  1848 		necessary in order to guarantee correct execution of code in the
       
  1849 		specified address range (from aStart inclusive to aEnd exclusive),
       
  1850 		under the assumption that this code has been loaded/modified by user
       
  1851 		code. Typically this will involve cleaning the data cache for the area
       
  1852 		concerned, draining the write buffer and flushing the instruction
       
  1853 		cache and branch target buffer for the area concerned.
       
  1854 
       
  1855 	2)	Added a new chunk type EUserSelfModCode to TChunkType to represent the
       
  1856 		new chunks. Added a new attribute DPlatChunk::ECode to the DPlatChunk
       
  1857 		iAttributes field to signify any chunk containing code.
       
  1858 
       
  1859 	3)	Added code to notify the ARM ETM of reschedules if the PROCID register
       
  1860 		exists (conditioned on __CPU_HAS_ETM_PROCID_REG).
       
  1861 
       
  1862 	4)	Added support for kernel trace via the JTAG port on ARM720 and ARM920.
       
  1863 		The KHARDWAREASSIST bit in the debug mask controls whether tracing is
       
  1864 		directed to the JTAG port or to a UART.
       
  1865 
       
  1866 	5)	Modified perl script halcfg.pl so that the output file is not opened
       
  1867 		until the inputs have been parsed - this prevents strange error
       
  1868 		messages due to a zero length file being generated.
       
  1869 
       
  1870 
       
  1871 Version 1.02.310
       
  1872 ================
       
  1873 (Made by Morgan, 09/04/2001)
       
  1874 
       
  1875 1)	Jonathan
       
  1876 	1)	Move notes for releases prior to creation of 6.1 release branch to
       
  1877 	  	releases_old.txt.
       
  1878 
       
  1879 2)	Pete
       
  1880 	1)	Fixed SCE-4V7S6C "MMC Controller card init. function is in-efficient and
       
  1881 		unnecessarily complex". This entailed:-
       
  1882 
       
  1883 		- Add new TMmcCardArray class to replace the DMMCStack::iCxNewAcqArray[]
       
  1884 		and DMMCStack::iCards[] arrays and their associated functionality.
       
  1885 		- Removal of ASSP layer function DMMCStack::PhysicalCardSlots() function as
       
  1886 		this was duplicating information already returned in the ASSP layer function
       
  1887 		DMMCController::SetMachineInfo() function.
       
  1888 		- Addition of generic layer DMMCStack::Init() function to determine the max.
       
  1889 		number of cards for the platform once - at Controller init. time rather than
       
  1890 		every time a card stack is initialized.
       
  1891 		- Modification to DMMCStack::PowerDownStack() function to add an extra
       
  1892 		argument to this function (TBool aMediaChange) indicating whether the power
       
  1893 		down is required due to media change or not.
       
  1894 		- Removal of the 'update stack' implementation in the generic layer of the
       
  1895 		Controller. This was intended to re-scan for new cards after a media change.
       
  1896 		This is now redundant since all cards are always powered down on media
       
  1897 		change.
       
  1898 		- Various comments added throughout PS_MMC.CPP to aid clarity.
       
  1899 	2)	Fixed FID-4UZLFG "Increase number of supported local drives"
       
  1900 
       
  1901 
       
  1902 Version 1.02.309
       
  1903 ================
       
  1904 (Made by Will Ramsay, 03/04/2001)
       
  1905 
       
  1906 1)	Requires  E32TOOLP(226), F32(237)
       
  1907 	from \\epoc\development\base\ongoing\...
       
  1908 
       
  1909 2)	Backported Morgan's 6.2 changes to remove import stubs:
       
  1910 	1)	Split functions in UP_DLL.CPP into separate source files.  This
       
  1911 		allows the linker to discard unused functions.
       
  1912 		Functions are grouped by functional area. up_dll_file.cpp,
       
  1913 		up_dll_global.cpp, up_dll_static, up_dll_tls.cpp.
       
  1914 	2)	Split EDLL.LIB into EDLL.LIB containing the entrypoint and
       
  1915 		EDLLSTUB.LIB containing the class Dll stub functions.
       
  1916 	3)	Removed strange .idata$3 padding from UP_DLL.CPP since (we think) it
       
  1917 		is a hack for a defunct version of GCC
       
  1918 	4)	Moved thumb gcc helper functions into up_gcc.cpp in EGCC.LIB
       
  1919 	5)	Removed thumb gcc helper functions from uc_exe.cpp.  These are now in
       
  1920 		EGCC.LIB that should be included in the link of a GCC EXE or GCC DLL.
       
  1921 	6)	Moved float gcc helper functions into up_gcc_float.cpp in EGCC.LIB
       
  1922 	7)	Removed null definition of atexit() from up_dll.cpp
       
  1923 	
       
  1924 
       
  1925 Version 1.02.308
       
  1926 ================
       
  1927 (Made by MarkCa, 20/03/2001)
       
  1928 
       
  1929 1)	Morgan/AndrewF
       
  1930 	1)	Fixed FOD-4TAH7A "DMA double buffering will not work on Halla".
       
  1931 		This is an interface change and it is not source compatable.
       
  1932 		Added extra buffer fill during transfer initialisation for double
       
  1933 		buffered HW.  Added explicitly named enums and new imp functions
       
  1934 		in ASSP to make writing ImpDMA easier.
       
  1935 	2)	Changed all ASSPs, and added implementation details to template
       
  1936 		port.
       
  1937 		Detail of changes required to \e32\ekern\epoc\arm\<assp>\KA_DMA.CPP:
       
  1938 		a) Remove ImpDma::NextBlock()
       
  1939 		b) Add the following functions:
       
  1940 
       
  1941 		/**
       
  1942 		 * No more DMA blocks for this transfer
       
  1943 		 *
       
  1944 		 * TO DO: (mandatory)
       
  1945 		 *
       
  1946 		 * Modify to suit your hardware. The code below is just an example
       
  1947 		 *
       
  1948 		 * If your DMA hardware has multiple buffers this function should be
       
  1949 		 * used to disable the empty buffer
       
  1950 		 */
       
  1951 		void ImpDma::FinalBlock(TInt aChannel);
       
  1952 		
       
  1953 		/**
       
  1954 		 * Get the reason for the DMA interrupt.
       
  1955 		 * Called from TDmaInterrupt::Service()
       
  1956 		 *
       
  1957 		 * TO DO: (mandatory)
       
  1958 		 *
       
  1959 		 * Modify to suit your hardware. The code below is just an example
       
  1960 		 *
       
  1961 		 * EBufferEmpty indicates that one buffer is empty
       
  1962 		 * EStall indicates the entire transfer is complete, ie both buffers
       
  1963 		 * empty, FinalBlock() has been called.
       
  1964 		 * EError indicates a transfer error
       
  1965 		 * (ELastBuffer indicates that one buffer is empty and FinalBlock()
       
  1966 		 * has been called. On most hardware it is sufficient to return
       
  1967 		 * EBufferEmpty in this case)
       
  1968 		 *
       
  1969 		 */
       
  1970 		Dma::TDmaState ImpDma::GetState(TInt aChannel);
       
  1971 
       
  1972 		//
       
  1973 		// Return ESingleBuffer or EDoubleBuffer
       
  1974 		//
       
  1975 		Dma::TDmaBufferMode ImpDma::BufferMode();
       
  1976 
       
  1977 
       
  1978 2)	Nicolas
       
  1979 	1)	Fixed STE-4UEQC2 "The case off event and possibly some other events
       
  1980 		do not get through WSERV correctly".  EPOC doesn't any more send
       
  1981 		two ESwitchOn notifications instead of one when starting up.  The
       
  1982 		emulator now sends only one ESwitchOn notification when being
       
  1983 		switched back on after an emergency power off.  The emulator sends
       
  1984 		ECaseOpen or ECaseClose notifications when F11 is pressed while not
       
  1985 		in standby mode.  And finally the emulator doesn't any more switch
       
  1986 		off automatically when the case is closed (this is up to the
       
  1987 		user-side event consumer).
       
  1988 	2)	Fixed STE-4UJPEC "Some of the HAL attributes are not supported".
       
  1989 		The following attributes are now supported on WINS: EPenDisplayOn,
       
  1990 		ECaseSwitch, ECaseSwitchDisplayOn, ECaseSwitchDisplayOff.
       
  1991 	3)	T_NEWHAL TestGetAll() output modified to make it readable on a
       
  1992 		small screen (key press expected when screen is full).
       
  1993 3)	MarkCa
       
  1994 	1)	Fixed CAN-4UNE8D (MMC Controller access vilation after emergency power
       
  1995 		down)
       
  1996 	2)	Removed KPBUS1 | KPBUS2 | KPBUSDRV tracing from mlnk\header.iby.
       
  1997 
       
  1998 
       
  1999 Version 1.02.307
       
  2000 ================
       
  2001 (Made by Nicolas, 27/02/2001)
       
  2002 
       
  2003 1)	Jonathan
       
  2004 	Manual e32test cleanup:
       
  2005 	1)	Moved T_COLOUR from a manual to a support test since no-one bothers
       
  2006 		implementing text video modes other than mono. Made those screen
       
  2007 		drivers that didn't already return KErrNone from SetMode(EMono).
       
  2008 	2)	Moved T_PS and T_WWINS from manual to support tests since they're not
       
  2009 	  	useful.
       
  2010 	3)	Nuked T_PTNOS test and D_PTNOS test driver.
       
  2011 	4)	Nuked T_REGRAM registry test (which was lurking unused since v6.0).
       
  2012 	5)	Made T_INF prompt for confirmation that displayed values are OK, so
       
  2013 		if not OK an error appears in the test log.
       
  2014 	6)	Fixed FID-4TXFVX "Wrong defaults for MainBatteryGood()".
       
  2015 	7)	Fixed FID-4TYF78 "FIQ link with battery state is broken".
       
  2016 	8)	Fixed BAR-4SMG99 "Efficiently implement the "MergeModifiers" function
       
  2017 	  	in e32\include\K32KEYS.INL".
       
  2018 	9)	Fixed FID-4RRMTH "bootstrap: Bug searching for sleep info block".
       
  2019 
       
  2020 2)	MarkCa
       
  2021 	1)	Fixed CAN-4TXKZQ (Using a PC Card can wrongly produce password
       
  2022 	  	notifier)
       
  2023 	2)	Fixed CAN-4TWM6E (L7200 MMC Controller takes control of second UART)
       
  2024 		Fix affects t_atadrv, so changed \l7200a\va_hw.cpp to use non-zero
       
  2025 		machine uid.
       
  2026 	3)	Fixed CAN-4TYFHS (Reading to the end of a MultiMediaCard can produce
       
  2027 	  	an out-of-range error)
       
  2028 	4)	Fixed EDNTDAS-4L4JZ8 (Thread leakage using emulators)
       
  2029 	5)	Fixed TOD-4RXJSS (Race condition causing accessing of already delete
       
  2030 		pointer when deleting DChannelComm)
       
  2031 	6)	Fixed CAN-4UBJU2 (Controller does not process all error conditions)
       
  2032 
       
  2033 3)	Dennis
       
  2034 	1)	Fixed defect HAS-4U7N92 (T_WWINS hangs on Brutus). This is due to the
       
  2035 		smaller screen size compared with the Series 5.
       
  2036 		Modified notifier stuff to take account of the screen size.
       
  2037 	2)	Fixed defect HAD-4T2EJ5 (P::TimerLockSpecToTicks returns incorrect
       
  2038 	  	value).
       
  2039 	3)	Fixed defect MAT-4TYKLE (Profiler doesn't work on Quartz/Brutus).
       
  2040 
       
  2041 
       
  2042 Version 1.02.306
       
  2043 ================
       
  2044 (Made by Markdo, 07/02/2001)
       
  2045 
       
  2046 1)	Tim Band
       
  2047 	1)	Fixed BAD-4SVJY8 "Unavoidable initialisation cost for TRect, TPoint
       
  2048 		and TSize"
       
  2049 
       
  2050 2)	Alastair
       
  2051 	1)	Fixed EDNTBAD-4Q8M2F "CBufSeg can leak memory"
       
  2052 	2)	Fixed EDNATHE-4QQJSU
       
  2053 		"Inconsistent error handling in use of S::MakeHandleAndOpen",
       
  2054 		though there's still some work to be done in this area.
       
  2055 	3)	Fixed FID-4RKDJT
       
  2056 		"Use Cogent key translation tables on template port"
       
  2057 	4)	Fixed HAD-4RLFVN
       
  2058 		"Template header.iby has exyin.dll as file instead of extension"
       
  2059 	5)	Fixed HAD-4RLFSY
       
  2060 		"Template header.iby missing kerneltrace entry"
       
  2061 	6)	Fixed FID-4SNDAD
       
  2062 		"TemplatePort: Tick counter not invalidated when time changed"
       
  2063 
       
  2064 3)	Morgan
       
  2065 	1)	Integrated fix for DPassiveDebugger allocation bug for
       
  2066 		WINDERMERE
       
  2067 
       
  2068 4)	Jonathan
       
  2069 	1)	Created new \e32\ekern\emul\win32\d_entry.cpp as a copy of
       
  2070 		\e32\euser\emul\win32\up_dll.cpp. This allows edev.lib to be built
       
  2071 		for WINS in an IPR Category E only build. To preserve layering WINS
       
  2072 		device driver initialisation no longer wires the kernel.
       
  2073 	2)	Documented the deprecated nature of UserHAL enums in e32hal.h.
       
  2074 		Added minimal documentation to \hal\inc\hal.h and hal_data.h.
       
  2075 
       
  2076 5)	MarkCa
       
  2077 	1)	Update linked build by removing warnings from linkup ekern and
       
  2078 		implemented polling after MMC data transfers.
       
  2079 
       
  2080 Version 1.02.304
       
  2081 ================
       
  2082 (Made by Pete, 19/01/2001)
       
  2083 
       
  2084 1) Morgan
       
  2085 	1)	Fixed EDNSCHM-4M7PAJ. Added RMessagePtr::IsNull()
       
  2086 	2)	Fixed EDNJPAR-4KLLCA "Brutus bootstrap contains large delay..."
       
  2087 	3)	Fixed EDNRFID-4NVFWF "Bootstrap test-code has Brutus-specific code"
       
  2088 	4)	Fixed EDNRFID-4MVEQV "Bootstrap: bug in RAM width checking"
       
  2089 	5)	Fixed EDNRFID-4MVKBL "Bootstrap attempts to write to ROM"
       
  2090 	6)	Fixed EDNRFID-4NXETX "Bootstrap: bugs mapping IO as sections"
       
  2091 	7)	Fixed EDNWROS-4LQEPN "bootstrap component -WHAT output incorrect"
       
  2092 	8)	Fixed EDNRFID-4LGBVH "Bootstrap should keep PE file"
       
  2093 	9)	Fixed EDNRFID-4PXFYK "Add buffered, not cached flag to bootstrap"
       
  2094 	10)	Fixed EDNRFID-4PTHXH "Flush D TLBs & Cache in bootstrap after enabling
       
  2095 	   	MMU"
       
  2096 	11) Fixed EDNRFID-4MVJZQ "Bootstrap bugs finding initial scratch RAM"
       
  2097 		Tested on COGENT, BRUTUS, [UDEB,UREL]
       
  2098 	12)	Fixed HEY-4STFK7 "Template port: Definition of interrupt names
       
  2099 	   	should..."
       
  2100 	13)	Fixed TOD-4RJJ75 "Corruption of K::TickQ". This fix creates a change
       
  2101 	   	in the behaviour of the emulator - comms power handler active requests
       
  2102 	   	keep the power requirement up. In practice this means that the
       
  2103 	   	emulator will never power off. A proper fix will have to wait for v7.
       
  2104 
       
  2105 2)  Pete
       
  2106 	1) 	Fixed a problem introduced in release 303 with the
       
  2107 		Cirrus bootstrap which was mapping in 16K rather than 12K for the h/w
       
  2108 		registers.
       
  2109 	2)	Changes to the MMC Controller - to the way that the
       
  2110 		ASSP layer reports the operating PSU voltage. Removed TOCR class.
       
  2111 
       
  2112 3)	Dennis
       
  2113 	1)	Modified low-memory notification system. There are now two TChanges
       
  2114 		flags: EChangesFreeMemory and EChangesOutOfMemory. The first is raised
       
  2115 		if the free memory level crosses the relevant threshold, and the
       
  2116 		second is raised if an allocation fails due to insufficient free
       
  2117 		memory.
       
  2118 
       
  2119 4)	Jonathan
       
  2120 	1)	Brutus HAL: Fixed defect EDNABOT-4MCGNL "HALData::EKeyboardClickVolume
       
  2121 	  	doesn't accept valid value". Key click and digitiser click are not
       
  2122 	  	supported on Brutus for 6.1. Changed the values reported by HAL to
       
  2123 	  	reflect this. Cogent was similarly incorrect.
       
  2124 	2)	Added memory traces for kernel stack and data.
       
  2125 	3)	Brutus keyboard: Fixed defect JAN-4RLLH3 "Brutus board doesn't map
       
  2126 	  	EKeyDevice key codes". Made Fn modifier generate EKeyDevice0-9. Fixed
       
  2127 	  	some Fn and Shift translation errors.
       
  2128 
       
  2129 5)	Markdo	
       
  2130 	1)	Implemented Pc Card Controller for Cogent. Controller is disabled (by
       
  2131 		setting total supported drives to 1) until timer problem sorted out.
       
  2132 	2)	Fixed problem in Brutus Pc Card Controller where reset signal not
       
  2133 		asserted for long enough when powering up. Reduced length of time spent
       
  2134 		in Sa1100::BootWaitMilliSeconds when called in \brutus1\vi_pbus.cpp.
       
  2135 	3)	Ensured that uart1 in linkup initialised in release builds.
       
  2136 	4)	Implemented dma on linkup.
       
  2137 		
       
  2138 6)	MarkCa
       
  2139 	1)	Merged in MMC security code.  _LOCKABLE_MEDIA in e32svr.h is not
       
  2140 		commented out any more.
       
  2141 	2)	Updates to linkup example mmc port.
       
  2142 
       
  2143 
       
  2144 Version 1.02.303
       
  2145 ================
       
  2146 (Made by RobertJ, 13/12/2000)
       
  2147 
       
  2148 1)	Nicolas
       
  2149 	1)	ECOMMDCE: Cancel power handler timer and reset power requirements in
       
  2150 		DChannelComm dtor (pasted from ECOMM).  This avoid a kernel panics
       
  2151 		in DPowerHandler::RemovePowerModel() when a DCE comm port is
       
  2152 		closed.
       
  2153 	2)	Added DISTRIBUTION.POLICY file (cat. E) to \e32\rombuild\mlnk and
       
  2154 		removed superfluous ones from E32 and BOOTSTRAP.
       
  2155 	3)	Modified rom.bat to avoid spurious error msg when some files
       
  2156 		included in the ROM image contain "warning" or "error".
       
  2157 
       
  2158 2)	Dennis
       
  2159 	1)	Removed all MCORE code.
       
  2160 	2)	Minor consolidation of MMU-related #ifdefs in order to support ARM920.
       
  2161 		__CPU_SOFTWARE_CACHE_FLUSH, __CPU_CACHE_CONFIGURABLE have gone.
       
  2162 		__CPU_ARMV3 is no longer supported.
       
  2163 
       
  2164 		Remaining #ifdefs with meanings are:
       
  2165 
       
  2166 		__CPU_CACHE_POLICY_IN_PTE
       
  2167 			This means that you can select write through or write-back caching
       
  2168 			on a page-by-page basis.
       
  2169 		__CPU_WRITE_BACK_CACHE
       
  2170 			This means that write-back caching is being used. This may be
       
  2171 			either because the cache only supports write-back mode (eg SA1100)
       
  2172 			or the cache supports both modes and write-back mode is being used
       
  2173 			(eg ARM920). If this is not defined and the cache can support both
       
  2174 			modes, write-through caching will be used.
       
  2175 		__CPU_CACHE_FLUSH_BY_DATA_READ
       
  2176 			This option is only applicable if write-back caching is in use.
       
  2177 			It means that the cache must be flushed by reading spurious data
       
  2178 			(i.e. SA1100 mode). Currently the data used for flushing is always
       
  2179 			mapped at 0x430fe000 and a cache size of 8K is assumed.  If this
       
  2180 			option is not selected and write-back caching is in use, the
       
  2181 			ARM920 method is used (ie flush each line by way/set index) and
       
  2182 			the CP15 cache config register is read to determine the size and
       
  2183 			layout of the cache.
       
  2184 		__CPU_SPLIT_CACHE
       
  2185 			This means that the processor has separate instruction and data
       
  2186 			caches.
       
  2187 		__CPU_SPLIT_TLB
       
  2188 			This means that the processor has separate instruction and data
       
  2189 			TLBs.
       
  2190 
       
  2191 	3)	Added low memory notification. This uses two thresholds (low and
       
  2192 		good).  If a low-level chunk adjust or allocation of page tables fails
       
  2193 		due to out-of-memory or causes the amount of free memory to drop below
       
  2194 		the low threshold, all change notifiers are signalled. If a low-level
       
  2195 		chunk adjust or freeing of page tables causes the amount of free
       
  2196 		memory to rise above the good threshold change notifiers are also
       
  2197 		signalled. A new change notifier flag (EChangesFreeMemory) has been
       
  2198 		added to signify the occurrence of one of these conditions. A new
       
  2199 		function
       
  2200 
       
  2201 			TInt UserSvr::SetMemoryThresholds(TInt low, TInt good)
       
  2202 
       
  2203 		has been added to set the thresholds at which notification occurs.
       
  2204 
       
  2205 		Test program T_CHUNK has been extended to test this system.
       
  2206 
       
  2207 	4)	Fixed defect EDNATHE-4LCEWZ (Sessions using global message pool can
       
  2208 		lose available slots).
       
  2209 	5)	Fixed defect PAR-4R6DGK (WS_MAIN.CPP should have an extra line of debug
       
  2210 		to warn you that you have booted in test mode).
       
  2211 	6)	Fixed defect EDNJPAR-4L2LMM (WS_MAIN.CPP has a leave without a trap).
       
  2212 	7)	Fixed defect EDNJPAR-4N9GU2 (TEiger:: missing from added 7211 functions
       
  2213 		in ka_eiger.cpp)
       
  2214 	8)	Fixed defect HAS-4R5NPC (JTAG trace example in template variant).
       
  2215 
       
  2216 3)	Alastair
       
  2217 	1)	Fixed EDNJHAS-4QLRPC "All 3rd UIDs wrong" (in the template port).
       
  2218 		Uids are now the UNICODE rather than narrow values.
       
  2219 	2)	Split this file up on the assumption that its large size is the
       
  2220 		reason P4 sometimes has difficulty accepting changes to it.
       
  2221 		Old release notes are now in release_old.txt.
       
  2222 	3)	Fixed EDNJHAS-4QNRUB "Template variant include file in E32" by moving
       
  2223 	   	it into the vtemplate directory and exporting it from there.
       
  2224 	4)	Fixed EDNJHAS-4QNR4M "Template ASSP is in the wrong place"
       
  2225 	5)	Changed include paths in VTemplate .mmp files so that they no longer
       
  2226 	  	refer to \e32\include.
       
  2227 	6)	Added DISTRIBUTION.POLICY files (cat. E) to the \VTemplate
       
  2228 	  	directories.
       
  2229 	7)	Fixed  EDNABRY-4L8NR2 "Text console appears stripy on Windows 95"
       
  2230 	8)	Fixed problem with emulator parent window appearing jazzed if no
       
  2231 		bitmap is specified on Windows9x platforms.
       
  2232 	9)	Fixed EDNJBRN-4MEP5F
       
  2233 		"Threads that use a shared heap don't get their stack 0x29 filled".
       
  2234 	10)	Fixed EDNATHE-4QQKZM
       
  2235 		"RThread().Suspend() deadlocks the emulator".
       
  2236 		Under WINS/WINC, if a thread is about to suspends itself then it
       
  2237 		relinquishes the kernel critical first.
       
  2238 	11)	Fixed EDNTEEA-4L4BHV
       
  2239 		"WINS emulator does not remember its previous position".
       
  2240 		Emulator only remembers its position if it's shutdown with Alt+F4 or
       
  2241 		via the Windows menus, not with typing "exit" in eshell or exiting
       
  2242 		from a test.  It is clever about not "reappearing" off-screen.
       
  2243 	12)	Extended Dennis' low memory notification changes to work under WINS.
       
  2244 	13)	Fixed defect FID-4RDJTJ
       
  2245 		"Template port keyboard driver generates streams of keyup"
       
  2246 	14)	Fixed defect FID-4RHKC9
       
  2247 		"Template Idle function should not be naked"
       
  2248   	15)	Fixed defect EDNNGRE-4LGJU7
       
  2249   		 "UserHal::SwitchOff() hangs emulator if mouse is pressed".
       
  2250   		Problem: Emulator would power off but not minimise since mouse button
       
  2251   		was down, and power on requires impossible window restoration.
       
  2252   		Solution: No longer minimise and maximise Emulator window to emulate 
       
  2253   		Power Off and Power On.  Instead, blank screen for Power Off.  Power
       
  2254   		back on when EStdKeyOff (F9 by default) is pressed.  Power on also if
       
  2255   		screen is tapped, or case is opened (toggle F11 by default), depending
       
  2256   		upon EPointerSwitchesOn and ECaseOpenSwitchesOn
       
  2257 		HAL/machine_configuration settings: these values now default to TRUE
       
  2258 		for WINS.
       
  2259 
       
  2260 4)	MarkCa
       
  2261 	1)	Fixed defect EDNJHET-4PTLUD (Emulator crashes on startup if com
       
  2262 		ports used by another program under win98.)
       
  2263 
       
  2264 5)	Pete
       
  2265 	1)  Modified the FIR LDD so it conforms with latest power handling scheme
       
  2266 		(i.e. it requests it's power requirement on all tx requests while at
       
  2267 		the same time setting a timer to releases these requirements if it is
       
  2268 		allowed to expire). This in turn required an extra function to be
       
  2269 		added to each FIR PDD - PowerRequirement() which returns the FIR power
       
  2270 		requirements for that particular platform.
       
  2271 	2)	Fixed warnings when building WINS version of MMC Controller.
       
  2272 	3)	Modified TBusLocalDrive class and the associated local media
       
  2273 		sub-system so that an info. descriptor can be passed down to the media
       
  2274 		driver which is available to the driver at the point at which it is
       
  2275 		opened.
       
  2276 	4)	Fixed warnings when building WINS version of MMC Media Driver.
       
  2277 	5)	Applied various bug fixes supplied by Pete Sanders for Cirrus Logic
       
  2278 	  	build:-
       
  2279 		 - Increased BDB IO block size from 8K to 16K in bootstrap.
       
  2280 		 - Moved addition of power handler from Variant::Init3() to
       
  2281 		   Variant::Init4().
       
  2282 		 - Set mem. config registers for both banks of 8Mb flash in
       
  2283 		   Variant::Init1().
       
  2284 		 - Fixed problem with digitizer resistive plate enable signals.
       
  2285 
       
  2286 6)	Morgan
       
  2287 	1)	Fixed EDNGTIN-4KUH3E "Dll::FileName inconsistent in ARMI",
       
  2288 		Mini-loader now forms the filename correctly.
       
  2289 	2)	Fixed memory allocation bug in DPassiveDebugger
       
  2290 	2.1)	Fixed empty members of DProcess for bootstrapped processes,
       
  2291 		(kernel and file server) for the benefit of the debugger
       
  2292 	3)	Enabled DPassiveDebugger on Cogent UDEB builds
       
  2293 	4)	EDNMHEY-4N3FV8 "TDma::iChannel should be set back to ENotBound ..."
       
  2294 	5)	PAR-4R5EGK "Definition of interrupt name should be in ASSP header ..."
       
  2295 		Moved interrupt name definitions from ka_pic.cpp to a32*.h
       
  2296 		MCGA, MISA, MAWD, MLNK, MEIG
       
  2297 	6)	Updated Cogent1, Brutusa, Series5mx1, l7200a, cirrus7211x, variants to
       
  2298 		use symbolic interrupt names
       
  2299 	7)	Updated \e32\rombuild\rom.cfg to match stricter options in ROMBUILD
       
  2300 
       
  2301 7)	Jonathan
       
  2302 	1)	Changed meaning of KMEMTRACE kernel trace option. Now only traces
       
  2303 	  	changes in chunk committed size and does not trace RHeap allocation.
       
  2304 
       
  2305 8)	Markdo
       
  2306 	1)	Changed WINS simulated mmc drive to 1MB size (from 2MB).
       
  2307 
       
  2308 9)	William
       
  2309 	1)	Added iRomRootDirectoryList to TSuperPage in K32STD.H
       
  2310 	2)	Added TExtensionRomHeader in E32ROM.H
       
  2311 	3)	Modified epoc\kp_ini.cpp to get the iRomRootDirectoryList from the
       
  2312 	  	superpage
       
  2313 	4)	Changed bootstrap to pass the iRomRootDirectoryList address vai the
       
  2314 		superpage, and added code to support extension ROMs. If a valid
       
  2315 		extension ROM is found, the Root Directory List comes from the
       
  2316 		extension rather than the main ROM.
       
  2317 
       
  2318 
       
  2319 Version 1.02.302
       
  2320 ================
       
  2321 (Made by Nicolas, 19/10/2000)
       
  2322 
       
  2323 1)	Alastair	
       
  2324 	1)	Applied fix which will be made on the release branch to EDNJBON-4PBJFD
       
  2325 		"Crystal emulator won't run under Windows 98"
       
  2326 	2)	Replaced calls to Win32 "W" suffixed functions, which won't work on 
       
  2327 	      	Windows9x platforms, with new versions supplied in EUNIW.DLL.
       
  2328 	3)	Merged in Template Port from //epoc/release/bpk/....  This builds as
       
  2329 		platform MTemplate and the variant is described by the \VTemplate
       
  2330 		directory.  Function comments have been changed to JavaDoc format.
       
  2331 		Changes have also been made in accordance with Jonathan's changes to
       
  2332 		E32 version 301, detailed below ...
       
  2333 		\e32\include\v32arm.h --> \e32\ekern\epoc\katemplate\v32template.h
       
  2334 		\e32\include\v32templateassp.h --> \e32\ekern\epoc\katemplate\a32templateassp.h
       
  2335 		\e32\include\v32templatev1.h --> \e32\ekern\epoc\katemplate\v32template1.h
       
  2336 		
       
  2337 2)	Nicolas
       
  2338 	1)	Fixed defect EDNNTHY-4PMKJW "RDebug Breakpoints Are Sometimes
       
  2339 		Ignored Under Brutus".  The B bit is now set in
       
  2340 		KRomSectionPermissions and KRomPtePermissions.  As a side-effect,
       
  2341 		on CPUs with write-through caches the write buffer is now used for
       
  2342 		shadowed pages.  On SA-1100, setting B ensures the main data cache
       
  2343 		is used instead of the mini one, and so fixes the defect.
       
  2344 
       
  2345 3)	Pete
       
  2346 	1)	Added WINS platform layer for MMC Controller.
       
  2347 	2)	Changed the WINS EPBUS.DLL from being a PC Card Controller
       
  2348 		to being an MMC Controller (i.e emulation of the PC
       
  2349 		Card Controller has now been disabled in WINS and replaced
       
  2350 		with an MMC Controller emulator). Similarly, the Media Driver
       
  2351 		for WINS drive X: is now a MMC Media driver rather than a CF card
       
  2352 		Media Driver. 
       
  2353 	3) 	Fixed defect EDNMCAN-4P5C37 "File Mgr:Memory card menu is
       
  2354 		not dynamic'. Fixed by powering down any MMC cards while
       
  2355 		the media door is open and not allowing any operations on
       
  2356 		the cards during this time.
       
  2357 	4)	Implemented inactivity timer on MMC Controller. While the
       
  2358 		MMC bus is powered up, if a given period elapses (set at the
       
  2359 		ASSP/Variant layer) where no MMC bus activity has taken place,
       
  2360 		then the MMC clock is turned off and power removed from the
       
  2361 		bus.
       
  2362 
       
  2363 4)	Dennis
       
  2364 	1)	Fixed defect EDNDFER-4N2K8R (Wrong error code returned by fix to
       
  2365 		another bug). DThread::Read/Write now return KErrDied if the target
       
  2366 		thread has exited.
       
  2367 
       
  2368 5)	Jonathan
       
  2369 	1)	Removed old distrib IPR files and script.
       
  2370 
       
  2371 
       
  2372 Version 1.02.301
       
  2373 ================
       
  2374 (Made by MarkCa, 29/09/2000)
       
  2375 
       
  2376 0)	Must add the following line (BEFORE LINE 44) to
       
  2377 	\\epoc\main\romkit\include\base.iby when releasing to mainline:
       
  2378 		extension[VARID]=ASSP_DIR\BUILD_DIR\epower.dll     System\Libs\EPower.dll
       
  2379 
       
  2380 1)	Pete
       
  2381 	1) 	Merged in changes to MMC Controller from Cambridge base porting
       
  2382 		branch.
       
  2383 	2)	Improved scheme in MMC Controller on how information on
       
  2384 		number of MMC sockets and media drives is returned.
       
  2385 		This is now set in the variant layer as you would expect.
       
  2386 	3)	Removed workaround for broken MCR instruction on ARM915T from
       
  2387 		\E32\EKERN\EPOC\ARM\KC_MMU.CPP.
       
  2388 	4)	Changes to Cogent DTE serial port drivers. Also to
       
  2389 		Cogent IREQ1 interrupt control code. These changes,
       
  2390 		together your Cogent board re-configured with config 'p120_05_v12'
       
  2391 		and also a PCB cut/strap modification to each DTE serial port to
       
  2392 		reverse the TX and RX signals will allow the Cogent DTE serial ports
       
  2393 		to work fully.
       
  2394 		Cogent EUART3.PDD which had been temporarily modified
       
  2395 		to drive 'SERIAL 1' rather than 'SERIAL 2' (PCB designations) has now
       
  2396 		been changed to drive 'SERIAL 2'.
       
  2397 
       
  2398 2)	MarkCa
       
  2399 	2)	Added linkup port from BPC.  Build with assp MLNK, variant LA.
       
  2400 
       
  2401 3)	Nicolas
       
  2402 	1)	Fixed defect EDNNTHY-4P3GT6 (RDebug::SingleStep() does not stop
       
  2403 		after one instruction sometimes).  Fix applied to arm generic and
       
  2404 		windermere.
       
  2405 
       
  2406 4)	Jonathan
       
  2407 	1)	Include file re-org for IPR reasons - ASSP-specific include files live
       
  2408 	  	in the ASSP directory under ekern:
       
  2409 		- Include files describing ASSPs (TEiger etc) are named a32*.h:
       
  2410 			v32eiger.h -> ekern\epoc\arm\721x\a32eiger.h
       
  2411 			v32s1100.h -> ekern\epoc\arm\sa1100\a32sa1100.h
       
  2412 			v32wind.h  -> ekern\epoc\arm\windermere\a32windermere.h
       
  2413 			v32cog.h   -> ekern\epoc\generic\cogent\a32cogent.h
       
  2414 		- Custom interface files are named v32*.h:
       
  2415 			v32arm.h   -> ekern\epoc\arm\721x\v32eiger.h
       
  2416 			v32arm.h   -> ekern\epoc\arm\sa1100\v32sa1100.h
       
  2417 			v32awd.h   -> ekern\epoc\arm\windermere\v32windermere.h
       
  2418 			v32arm.h   -> ekern\epoc\generic\cogent\a32cogent.h
       
  2419 			v32mcore.h -> ekern\epoc\generic\cogent\a32cogent.h
       
  2420 		- All variant-specific include files moved to the variants.
       
  2421 		- kc_std.h -> kc_arm.h.
       
  2422 	2)	New exported file for the text notifier interface
       
  2423 	  	\e32\include\twintnotifier.h split out from ws_std.h, which is no
       
  2424 	  	longer exported.
       
  2425 
       
  2426 5)	Morgan
       
  2427 	1)	Integrated fix from 6.0 branch: Fixed EDNTRIN-4BPCTM2 "Detection of
       
  2428 		pointer events stops - multiple platforms" for MAWD. Keyboard now
       
  2429 		detects switch on keys while sleeping.
       
  2430 	2)	Removed \brutus\v32isa.h and references
       
  2431 	3)	Called through to the variant for the following functions on MISA
       
  2432 			TBool ImpPsu::ExternalPowerPresent();
       
  2433 			TSupplyStatus ImpPsu::MainBatteryStatus();
       
  2434 			TInt ImpPsu::MainBatteryMilliVolts();
       
  2435 			TSupplyStatus ImpPsu::BackupBatteryStatus();
       
  2436 			TInt ImpPsu::BackupBatteryMilliVolts();
       
  2437 	4)	Moved MISA, MCGA, MCGM, MEIG default power models to variant layer so
       
  2438 		they can be replaced as necessary
       
  2439 	5)	Removed P::SwitchOffBacklight().  Calls to this can be replaced with
       
  2440 		Hal::SetBacklightOn(EFalse)
       
  2441 	6)	Promoted P::OsSwitchOnScreen() to Plat:: so it can be called from the
       
  2442 		power model.
       
  2443 	7)	Added Plat::DebugInit() to force re-initialisation of the trace port
       
  2444 		after switch off.
       
  2445 	8)	Fixes to the interface and implementation of DDebugger/DPassiveDebugger
       
  2446 
       
  2447 6)	Alastair
       
  2448 	1)	Applied fixes already made on release branch for EDNABRY-4PHFJJ:
       
  2449 		"Emulator support for international keyboards is broken on Windows9x
       
  2450 		platforms" and EDNSRES-4P4EFD: "CopyAnyWhere page fault on Win 98".
       
  2451 
       
  2452 
       
  2453 Version 1.02.300
       
  2454 ================
       
  2455 (Made by Dennis, 13/09/2000)
       
  2456 
       
  2457 1)	Alastair
       
  2458 	1)	Renamed K32ADDR.H to M32ADDR.H and removed references to it from
       
  2459 		WINS/WINC builds, since it isn't required.
       
  2460 	2)	Fixed Base v6.1 defect EDNWROS-4MJKWH
       
  2461 			 "Request for a change to emulator window size calculation".
       
  2462 		The Emulator window no longer defaults to the Series5 Fascia bitmap
       
  2463 		size, and expands to accommodate the specified digitizer size if
       
  2464 		necessary.
       
  2465 
       
  2466 2)	William
       
  2467 	1)	Modified COGENT1 MMP files to use \e32\bmarm DEF files in all cases
       
  2468 	2)	Fixed a few places in RArrayBase where delete was being used on a
       
  2469 		TAny* pointer. This should be User::Free() as there is no destructor
       
  2470 		to be called.
       
  2471 	3)	Fixed EDNMMIR-4JQDYY "E32DEF.H doesn't correctly use all the features
       
  2472 		of GCC" by changing the definitions of CONST_CAST etc.
       
  2473 	4)	Fixed EDNWROS-4MEJRS "_LIT generates compiler warnings when string
       
  2474 		contains large Unicode constants" as suggested in the defect report.
       
  2475 	5)	Replaced lots of M*Core PP:Fault(PP:ESystemException) calls with
       
  2476 		distinct Mcore::Panic(Esomething) calls so that we can tell which is
       
  2477 		which.
       
  2478 	6)	Export \e32\bmarm\eloclu.def 
       
  2479 	7)	Remove excess ".." in bootstrap makefile variables BUILDDIR and
       
  2480 	  	TARGETDIR
       
  2481 
       
  2482 3)	Jonathan
       
  2483 	1)	Changes to distrib mechanism:
       
  2484 		- "mnt distrib generic" no longer includes source under \e32\euser
       
  2485 		  since this is "IPR Category D: Additional" source. Split out MMP
       
  2486 		  files under \e32\euser into new \e32\additional.inf file.
       
  2487 		- New "mnt distrib Additional" is similar to "generic" but does
       
  2488 		  include the \e32\euser source.
       
  2489 
       
  2490 4)	Dennis
       
  2491 	1)	Merged in MCore source from Motorola.
       
  2492 	2)	Added GCC helpers for 64-bit integers (long long) to EUSER so that the
       
  2493 		same .DEF file can be used for ARM and MCore.
       
  2494 	3)	Added test program SAVEHAL to HAL component to store the modifiable HAL
       
  2495 		values in \System\Data\HAL.DAT
       
  2496 
       
  2497 6)	Markdo
       
  2498 	1)	Added support for pci interrupts on Cogent.
       
  2499 
       
  2500 
       
  2501 Version 1.02.276
       
  2502 ================
       
  2503 (Made by Morgan, 31/08/2000)
       
  2504 
       
  2505 1)	Alastair
       
  2506 	1)	Fixed defect EDNABRY-4NFNPX
       
  2507 			"HAL component should create HAL.LIB from a dummy HAL.DLL project".
       
  2508 		Now a dummy HAL.LIB can be created for ARMI, ARM4 or THUMB builds by
       
  2509 		executing "abld build armi", or some similar command(s), for dependent
       
  2510 		components to link to.  The HAL.DLL created in the ARMI, ARM4 or THUMB
       
  2511 		release directories is an empty implementation and should be ignored.
       
  2512 
       
  2513 2)	Morgan
       
  2514 	1)	Fixed defect EDNJBED-4NAFQ2 "Switch makes the digitiser freeze"
       
  2515 		1) Gave the LCD a power handler so it can respond to on/off calls
       
  2516 		from the power model.  (Effects MISA, MAWD)
       
  2517 		2) PowerStandby can now be aborted.  Power handlers are given a
       
  2518 		power-on call if they were sent power-off and standby is later
       
  2519 		aborted.  (Effects generic kernel)
       
  2520 		3) Changed the MISA digitiser wrt 2
       
  2521 		4) Improved the PM heuristics in the WINS and EPOC comms drivers to
       
  2522 		guess when it is busy.  (Effects WINS/EPOC comms)
       
  2523 
       
  2524 
       
  2525 Version 1.02.275
       
  2526 ================
       
  2527 (Made by Alastair, 24/08/2000)
       
  2528 
       
  2529 1)	Alastair
       
  2530 	1)	Fixed defect EDNPHAR-4N3HRA "Access Violation when closing RLibrary
       
  2531 `		handle".
       
  2532 		Note that entrypoints of DLLs which are statically-linked
       
  2533 		to, having already been dynamically-loaded, will not have their
       
  2534 		entrypoints called in the statically-linked context.
       
  2535 
       
  2536 
       
  2537 Version 1.02.274
       
  2538 ================
       
  2539 (Made by MarkCa, 17/08/2000)
       
  2540 
       
  2541 1)	Morgan
       
  2542 	1)	Fixed EDNMHEY-4N3FAY.  Removed references to V32ETNA.H from MEIG and
       
  2543 		MAWD platforms.
       
  2544 
       
  2545 2)	MarkCa
       
  2546 	1)	Fixed EDNTBLT-4MFKKY (peripherals need to be started after extensions
       
  2547 		loaded). The pbus code has been moved to P::InitialiseLocalDrives(),
       
  2548 		which is called from InitialiseLocalDrivesL().
       
  2549 
       
  2550 
       
  2551 Version 1.02.273
       
  2552 ================
       
  2553 (Made by Alastair, 2/8/2000)
       
  2554 
       
  2555 1)	Alastair
       
  2556 	1)	Removed enum EKeyEuro from E32Keys.h - fixes EDNGASR-4MKLHW
       
  2557 			"EKeyEuro should not be 0x80 but 0x20AC in e32keys.h"
       
  2558 
       
  2559 2)	MarkCa
       
  2560 	1)	Fixed defect EDNPSCE-4MFPQC Media Change doesn't work properly
       
  2561 		on MMC Controller
       
  2562 		\e32\drivers\medmmc\epoc\d_medmmc.cpp
       
  2563 			Added return value checking for Engage() calls, particularly in
       
  2564 			DMmcMediaDriverFlash::SessionEndDfc() where value is used to
       
  2565 			determine behaviour on media door opening / closing.
       
  2566 		\e32\epbus\epoc\linda\pa_mmc.cpp
       
  2567 			Added KPBUS1 conditional door interrupt debug trace.
       
  2568 		\e32\epbus\epoc\linda\pa_std.h
       
  2569 			Made MediaState() definition in TLindaMMCMediaChange virtual.  It
       
  2570 			is implicitly virtual because it is derived from TMediaChangeBase.
       
  2571 		\e32\include\p32mmc.h
       
  2572 			Made TMediaState MediaState() pure virtual function in
       
  2573 			TMMCMediaChange.  The function is pure virtual from
       
  2574 			TMediaChangeBase anyway.  Added AccessMediaChange(TPBusNum aBus)
       
  2575 			function to DMMCController.  MediaChange(TPBusNum aBus) is
       
  2576 			declared as a pure virtual protected function in
       
  2577 			DPeriphBusController, and so is not accessible from
       
  2578 			DMMCSession::Engage().
       
  2579 		\e32\include\p32mmc.inl
       
  2580 			Added definition for DMMCController::AccessMediaChange(TPBusNum
       
  2581 			aBus).  This is an accessor function that simply returns
       
  2582 			MediaChange(aBus).
       
  2583 		\e32\epbus\ps_mmc.cpp
       
  2584 			Added checking to DMMCSession::Engage() to return KErrNotReady if
       
  2585 			media driver tries to launch a write while the door for the
       
  2586 			associated bus is opened.
       
  2587 		\e32test\pccd\t_mmcdrv.cpp
       
  2588 			Added test code to check above modifications.  Source file must be
       
  2589 			explicitly recompiled with TEST_DOOR_CLOSE #define set to non-zero
       
  2590 			for test to work.
       
  2591 
       
  2592 3)	Jonathan
       
  2593 		1)	Disallow reads/writes to/from dead threads. Fixes EDNDFER-4MFNER.
       
  2594 		2)	Also removed some old code from ks_thrd, commented out since ER1.
       
  2595 
       
  2596 4)	Nicolas
       
  2597 	1)	Fixed EDNNTHY-4MNJXK (Kernel crash after calling ARM4 code from
       
  2598 		THUMB code).
       
  2599 		In the exception reporting code in __ArmVectorUndef(), the address of
       
  2600 		the invalid ARM opcode is now forced to a four-byte boundary before
       
  2601 		fetching the opcode. Fixed both in kc_int.cpp (arm generic) and
       
  2602 		ke_int.cpp (windermere).
       
  2603 
       
  2604 
       
  2605 Version 1.02.272
       
  2606 ================
       
  2607 (Made by RobertJ, 20/07/2000)
       
  2608 
       
  2609 1) Morgan
       
  2610 	1)	Added a TVersion member to the Debugger API
       
  2611 	2)	Added a iDebugger member to TKernelPage so it is available
       
  2612 		to externel debugger software over JTAG/BDM, at a constant
       
  2613 		address.  Removed K::Debugger.
       
  2614 	3)	Fixed EDNMMAT-4M6KHZ "TLex::Val returns the wrong number"
       
  2615 
       
  2616 2) 	Alastair
       
  2617 	1)	Fixed EDNJBON-4MBMC8 '"set _epoc_drive_j=...." causing emulator
       
  2618 		problems' by removing trailing spaces from _EPOC_DRIVE_? environment
       
  2619 		variables as they are read.
       
  2620 
       
  2621 3)	Dennis
       
  2622 	1)	Fixed EDNKLIG-4LVJST (Device turns off when time changed).
       
  2623 		The problem was due to K::TickCounter being updated when the system
       
  2624 		time changed. This no longer happens - K::TickCounter now increments
       
  2625 		every tick when the machine is on and does not change when the machine
       
  2626 		is off. The offset between K::TickCounter and the real time clock is
       
  2627 		remembered in order to make locked timers work.
       
  2628 
       
  2629 
       
  2630 Version 1.02.271
       
  2631 ================
       
  2632 (Made by Morgan, 5/07/2000)
       
  2633 
       
  2634 1) Morgan
       
  2635 	1)	Fixed EDNBBOY-4LWGW2
       
  2636 	2)	Fixed MCGA Monitor warnings
       
  2637 	3)	Fixed Cirrus7211a MMP warnings
       
  2638 
       
  2639 
       
  2640 Version 1.02.270
       
  2641 ================
       
  2642 (Made by RobertJ, 29/06/2000)
       
  2643 
       
  2644 1) RobertJ
       
  2645 	1)	Fixed EDNMHEY-4L3KX7 "References to Licensee hardware in generic code"
       
  2646 	2)	Changed \e32\drivers\dfir\epoc\d_fir.cpp to return an error code for a
       
  2647 		read failure
       
  2648 	3)	Changed \e32\drivers\dfir\epoc\d_fir.cpp test for buffer full from
       
  2649 		>= to > as limit excluded valid transfer address.
       
  2650 	4)	Changed \e32\drivers\dfir\epoc\dmabuff.cpp error code was not always
       
  2651 		correctly returned. It could return zero when in error
       
  2652 	5)	Changed \brutusa\vi_fir.cpp to remove 1ms wait after write to
       
  2653 		spin until TUR flag set (fifo is empty) then TBY flag transmitter busy.
       
  2654 		This is to remove as much latency as possible in tx->rx turnaround
       
  2655 
       
  2656 2) Jonathan
       
  2657 	1)	Fixed EDNJHAS-4LQPA5: changed MMAD to use ARM Base Restored Data
       
  2658 		Abort Model.
       
  2659 
       
  2660 3) Pete
       
  2661 	1)	Fixed EDNPSCE-4L3CHV "Device driver slow open
       
  2662 		mechanism doesn't work properly on machines with more than one PCMCIA
       
  2663 		slot."
       
  2664 		In fact, the slow open mechanism is OK as long as a
       
  2665 		separate unit number can be used to open a serial channel on each
       
  2666 		slot. Hence, the change really just involves enabling the PC Card
       
  2667 		Serial driver on Brutus to open on either PC Card slot.
       
  2668 			Bottom slot - Unit number 3 (Com4).
       
  2669 			Top slot - Unit number 4 (Com5).
       
  2670 		Also a change to the function DPhysicalDevice::CheckForSlowOpening()
       
  2671 		just to make this more logical.
       
  2672 
       
  2673 4) MarkCa
       
  2674 	1)	Removed Kern::Printf() debug from DLindaMMCStack::DoPowerUpSM() in
       
  2675 		\e32\epbus\epoc\linda\pa_mmc.cpp.
       
  2676 
       
  2677 Version 1.02.269
       
  2678 ================
       
  2679 (Made by Dennis, 22/06/2000)
       
  2680 
       
  2681 1) Alastair
       
  2682 	1)	Using CP_ACP rather that CP_UTF8 for EPOC.INI file text conversion
       
  2683 		since CP_UTF8 is not supported on Windows 95
       
  2684 	2)	Fixed EDNWROS-4L5NLW "Text window server has hardcoded width of 80
       
  2685 		characters in some places" and EDNNGRE-4H2MKK "ConsoleBase does not
       
  2686 		work on small screens" by replacing the hardcoded widths of 80
       
  2687 		characters by iTextScreenSize.iWidth in
       
  2688 		\e32\drivers\edisp\emul\win32\wd_wins.cpp.
       
  2689 	3)	Fixed EDNNSIH-4LCLNE "Access violation when loading SMUM.DLL..."  by
       
  2690 		using the base name of a dll rather than it's full name to get a Win32
       
  2691 		handle to it, in case it's already been loaded from a different
       
  2692 		directory.
       
  2693 	4)	Fixed EDNRCLF-4L4FB2 "User::LeaveIfError crash while trying to connect
       
  2694 		to File Server Session in WINC" Now the dll reference table for the
       
  2695 		starting process includes efile.dll and dependent dlls if efile.dll
       
  2696 		has already been loaded by the process.  This ensures that the
       
  2697 		efile.dll's entry point is called on startup where necessary and that
       
  2698 		the file server is started.
       
  2699 	5)	Fixed EDNRCLF-4LALXK "E32Initialize Crash".
       
  2700 		UpWins::__DllAttachProcess() now changes "TRUE" return value from
       
  2701 		Win32 DLLs to KErrNone.
       
  2702 
       
  2703 
       
  2704 2) Morgan
       
  2705 	1)	EDNRFID-4FQKKQ Zero-filled the 'Visibility Map' in the text window
       
  2706 		server, during initialisation.
       
  2707 	2)	EDNMHEY-4L9NKJ Added TRawEvent::ECaseOpen and TRawEvent::ECaseClose
       
  2708 		events
       
  2709 	3)	Added idle off behaviour to the comms LDD D_COMM.  This stops the
       
  2710 		machine turning off while
       
  2711 			a) there is a write request outstanding,
       
  2712 			b) 20 seconds elapse after the last character has been sent,
       
  2713 			c) there is a read request outstanding
       
  2714 	4)	Altered comms PDD for all variants wrt above.
       
  2715 
       
  2716 3) Dennis
       
  2717 	1)	Yet another 'fix' for defect EDNGBON-4JYNU6 (Inaccessibility of request
       
  2718 		semaphores breaks EPOC connect). For WINC the semaphore name has been
       
  2719 		reverted to be the same as ER5U.
       
  2720 
       
  2721 4) Pete
       
  2722 	1)	Changes required to move Cirris Logic bootstrap over
       
  2723 		to the new bootstrap scheme.
       
  2724 
       
  2725 
       
  2726 Version 1.02.268
       
  2727 ================
       
  2728 (Made by Markdo, 07/06/2000)
       
  2729 
       
  2730 1) Alastair
       
  2731 	1)	Fixed EDNTJOS-4JGME4 "Dialog title EPOC32 fault needs to be changed"
       
  2732 	2)	If dll entrypoints return TRUE, the return value is changed to
       
  2733 		KErrNone.
       
  2734 		This change means that Win32 DLLs linked to by EPOC DLLs can return
       
  2735 		TRUE without resulting in a KErrBadLibraryEntryPoint error.
       
  2736 
       
  2737 2) Nicolas
       
  2738 	1)	Fixed bugs preventing from building __EARLY_DEBUG__-enabled MCGA
       
  2739 		kernels.
       
  2740 
       
  2741 3) Dennis
       
  2742 	1)	Fixed EDNPPAN-4KEELX (HAL attribute for keyboard backlight needed).
       
  2743 	2)	Fixed EDNPPAN-4KPEEL (HAL attribute EAccessoryPower needed).
       
  2744 	3)	Fixed EDNJPAR-4KLLGL (HAL TManufacturer not generic).
       
  2745 	4)	Fixed EDNRFID-4KTFD3 (Bootstrap doesn't clear first new page table).
       
  2746 	5)	Removed ARM architecture 3 maths code from UC_I64.CPP and UC_REALX.CPP.
       
  2747 		The architecture 4 code is always used now.
       
  2748 
       
  2749 Version 1.02.267
       
  2750 ================
       
  2751 (Made by Alastair, 23.5.2000)
       
  2752 
       
  2753 1) Dennis
       
  2754 	1)	Fixed problem with all ARM bootstraps caused by switching mode from
       
  2755 		svc26 to svc32 in a subroutine - LR will contain flags since the BL
       
  2756 		was executed in 26-bit mode, giving an incorrect return address for
       
  2757 		32-bit mode. Fixed by masking top 6 bits of LR if the routine was
       
  2758 		actually entered in 26-bit mode.
       
  2759 	2)	Fixed defect EDNGBON-4JYNU6 (Inaccessibility of request semaphores
       
  2760 		breaks EPOC connect). Thread request semaphores are no longer added
       
  2761 		to the K::Semaphores container so that other EPOC code cannot access
       
  2762 		them directly. On EPOC they are also unnamed, on Win32 they are named
       
  2763 		PROCESSNAME::THREADNAME{EPOCTHREADID} so that the Win32 semaphore
       
  2764 		inherits this name and can be found by EPOC connect.
       
  2765 	3)	Fixed defect EDNSCHM-4K7MTC (CActiveScheduler::Error() broken on ARM).
       
  2766 	4)	Fixed defect EDNDBAR-4K5EU3 (Close functions in RArray...)
       
  2767 	5)	Fixed defect EDNMBOX-4JZEAP (TDblQueLink should allow multiple deques).
       
  2768 	6)	Fixed defect EDNACLN-4JQK2F (HAL::Get panics on low memory).
       
  2769 	7)	Fixed defect EDNSCHM-4JHRRS (RTimer::Inactivity only useful for switch
       
  2770 		off)
       
  2771 
       
  2772 2) Nicolas
       
  2773 	1)	Debug::EnableBreakPoint() now flushes instruction cache after writing
       
  2774 		breakpoints into memory.  This fixes the transient test failures
       
  2775 		observed on brutus.
       
  2776 
       
  2777 3)	Alastair
       
  2778 	1)	Introduced new scheme into WINS/WINC so that Dll entry-points are
       
  2779 		called by EPOC in much the same way that they are called on a target
       
  2780 		device.
       
  2781 		When a process is started or when a library is loaded, the Kernel
       
  2782 		creates a Dll reference table for the executable to mimic the Dll
       
  2783 		information available on the target device.  EPOC under WINS/WINC can
       
  2784 		thus call Dll entry-points at the appropriate times.  This change
       
  2785 		means that the Win32 Dll entrypoint mechanism is no longer used for
       
  2786 		calling Dll entry-points, and therefore avoids deadlock occurring due
       
  2787 		to the "hidden" critical section used by Windows operating systems
       
  2788 		while making entry-point calls.  This change fixes Symbian defect
       
  2789 		EDNATHE-4GAL54 -
       
  2790 			"Emulator hangs during startup"
       
  2791 		Whether this change will also fix similar deadlocks occuring with the
       
  2792 		Emulator running  with NT SP5 on Compaq PCs remains to be seen.
       
  2793 	2)	Added WINS/WINC base address for HAL.DLL - 0x6b000000
       
  2794 
       
  2795 4) Morgan
       
  2796 	1)	Undid a change to TMillisecondTimer::CounterExpired that was causing
       
  2797 		the digitiser to crash on Series5mx.
       
  2798 
       
  2799 
       
  2800 Version 1.02.266
       
  2801 ================
       
  2802 (Made by MarkCa, 16/05/00)
       
  2803 
       
  2804 1) Pete
       
  2805 	1)	Fixed EDNPHAR-4JCNSC (Can't access removable drives
       
  2806 		on latetst Brutus Roms).
       
  2807 	2) 	Fixed a couple of problems to allow UserSvr::ForceRemountMedia()
       
  2808 		to work when a non-removable drive is specified. This now
       
  2809 		allows the media driver for a non-removable drive to be swapped
       
  2810 		successfully.
       
  2811 	3) 	Modified the ISR for the Brutus PCMCIA/CF Card Serial driver (COM4)
       
  2812 		so that it now handles all pending UART interrupts in
       
  2813 		a single call rather than just the highest priority interrupt. This
       
  2814 		fixes problems with the driver where it could 'lose track' of
       
  2815 		interrupts when multiple interrupts were pending.
       
  2816 		This fixes EDNACLE-4JZL3V (Brutus PCMCIA Serial I/O Adapter hangs...)
       
  2817 		and EDNPREF-4JCKV (Protocol hanging on Brutus board).
       
  2818 	4) 	Modified the Brutus PCMCIA/CF Card Serial driver (COM4)
       
  2819 		to support change notification.
       
  2820 	5)	Fixed a problem with Brutus built-in serial ports
       
  2821 		(COM1 and COM2) which were not correctly configuring the port when
       
  2822 		either Odd or Even parity was selected.
       
  2823 
       
  2824 2) RobertJ
       
  2825 	1)	Fixed \brutusa\vi_com2.cpp, \brutusa\vi_fir.cpp, \brutusa\v32isaba.h
       
  2826 		to cope with transceiver SIR/FIR mode change
       
  2827 
       
  2828 3) Morgan
       
  2829 	Fixed some anomalies in the power handling code:
       
  2830 	1)	Removed ImpHal::Standby() and ImpHal::Standby(aWakeup) (from
       
  2831 		MAWD, MISA, MCGA, MEIG, MMAD)
       
  2832 		and replaced it with appropriate code in the power model.
       
  2833 		The correct way to turn off the machine from kernel-side is to call
       
  2834 			a) DPowerModel::PowerStandby() for immediate kernel-side switchoff
       
  2835 			b) Kern::AddEvent(ESwitchOff) for ordered user shutdown
       
  2836 		To turn off from user side, we call UserHal::SwitchOff().
       
  2837 	1.2)Renamed K::SwitchOff() to Power::SwitchOff()
       
  2838 		Renamed K::PowerOn() to Power::PowerOn()
       
  2839 		Removed DPowerModel::PowerStandby(aWakeup) because it is useless.
       
  2840 	2)	UserHal::SwitchOff calls Power::SwitchOff which calls PowerStandby on
       
  2841 		all power handlers.  This will cause
       
  2842 		DPowerModel::PowerTransition(EPowerNone) to be called (when each power
       
  2843 		hander has called SetRequirement(0)).  The power model should then
       
  2844 		call DPowerModel::PowerStandby() to turn the machine off. (see a)
       
  2845 		above).
       
  2846 	3)	DPowerModel::PowerStandby() works out when the next alarm is due, and
       
  2847 		turns off the machine by calling the appropriate
       
  2848 		DPowerModel::DoPowerStandby(/*aWakeup*/) function.
       
  2849 	4)	Added a User-Cpu-In-Use flag to the power model's power-requirement.
       
  2850 		This stops the machine turning off while there is user-side processing
       
  2851 		but no device drivers (power handlers) active.  This flag does NOT
       
  2852 		prevent idle.  This flag is unset when UserHal::SwitchOff is called,
       
  2853 		and set for PowerOn.
       
  2854 
       
  2855 Version 1.02.265
       
  2856 ================
       
  2857 (Made by Morgan, 18/4/2000)
       
  2858 
       
  2859 0)	Must change \\epoc\main\generic\romkit\include\base.iby line
       
  2860 		file[VARID]=ASSP_DIR\BUILD_DIR\cVARLETTERxyVARIANT.dll System\Libs\Exyin.dll
       
  2861 	to
       
  2862 		extension[VARID]=ASSP_DIR\BUILD_DIR\cVARLETTERxyVARIANT.dll System\Libs\Exyin.dll
       
  2863 	when integrating to mainline.
       
  2864 
       
  2865 1) Morgan
       
  2866 	1)	Made all XYInputs into kernel-extensions
       
  2867 	2)	Removed TXYInput from M32HAL.H
       
  2868 
       
  2869 2) Dennis
       
  2870 	1)	Fixed EDNJPAR-4G5FA8 (missing chunk types)
       
  2871 	2)	Fixed EDNMBOX-4DSJXH (missing #include guards on e32des8.h
       
  2872 		and e32des16.h)
       
  2873 	3)	Fixed EDNJBON-4DCEHD (Kern::Printf doesn't support %c)
       
  2874 	4)	Fixed EDNPBAA-4HXEST (TDes::Format doesn't support %i)
       
  2875 	5)	Fixed EFNATHE-4GYFQ8 (Thread semaphores named after thread)
       
  2876 	6)	Fixed EDNJHAS-4HCQAF (SA1100 standby)
       
  2877 	7)	Fixed EDNDBAR-4C5E7V (RArray<> should have a TArray interface).
       
  2878 	8)	Fixed EDNJHAS-4HXEGT (Literal length as compiler constant).
       
  2879 	9)	Fixed EDNJHAS-4HXELS (Compile-time TFixedArray).
       
  2880 	10)	Fixed EDNJHAS-4HXEPN (Support for profiling).
       
  2881 	11)	Added CleanupStack checking functions:
       
  2882 			CleanupStack::Pop(TAny* aExpectedItem)	check top item and pop
       
  2883 			CleanupStack::PopAndDestroy(TAny* aExpectedItem)	check top
       
  2884 			item, pop and destroy
       
  2885 			CleanupStack::Pop(TInt aCount, TAny* aExpectedItem)	Pop aCount
       
  2886 			items, checking last one
       
  2887 			CleanupStack::PopAndDestroy(TInt aCount, TAny* aExpectedItem)
       
  2888 			Pop/destroy aCount items, checking last one
       
  2889 	12)	Removed compiler warnings from E32 and variants.
       
  2890 	13)	Added EMemoryRAMFree option to HAL to get amount of free RAM.
       
  2891 	14) Fixed EDNCDUG-4J3QA8 (collate.h includes files not in \epoc32\include).
       
  2892 
       
  2893 3)	Alastair
       
  2894 	1)	Fixed EDNABRY-4JGJG4 "Test T_Float fails under WINS/WINC"
       
  2895 
       
  2896 
       
  2897 Version 1.02.264
       
  2898 ================
       
  2899 (Made by Morgan, 7/4/2000)
       
  2900 
       
  2901 1) Morgan
       
  2902 	1)	Added DPowerHandler::DoPowerTransition(aPowerState) virtual
       
  2903 		function to the power handlers.  Power handlers should
       
  2904 		implement this if they need notification when the power state
       
  2905 		of the machine changes.
       
  2906 	2)	Added DPowerModel::PowerTransition to call the power handlers.
       
  2907 		Added pure virtual function DPowerModel::DoPowerTransition()
       
  2908 		to replace the DPowerModel::SetPowerState function, (which has
       
  2909 		now been killed).
       
  2910 	3)	Added Power Model locking - Power::[Un]LockPowerModel().  This
       
  2911 		prevents the power model from shifting power states during
       
  2912 		power critical periods.
       
  2913 	4)	Added ECaseState to the HAL.
       
  2914 	5)	Removed ImpHal::EmergencyStandby() from all platforms.  This fn
       
  2915 		is not used or needed any more.
       
  2916 
       
  2917 2) Nicolas
       
  2918 	1)	Improvements and bug fixes in RDebug API implementation
       
  2919 		so in-target-debugging will be usable on ER6 devices.
       
  2920 		USER-LEVEL VISIBLE CHANGES:
       
  2921 		* Debugging resources owned by the debugger and the
       
  2922 		  debuggee are automatically released when the
       
  2923 		  debugger/debuggee ends (this includes automatically
       
  2924 		  closing the debugging session).
       
  2925 		* SDebugInfo has a new field containing the start
       
  2926 		  address of the debuggee's data/bss chunk: this is
       
  2927 		  mandatory to support the current toolchain in
       
  2928 		  gdbstub.
       
  2929 		* THUMB breakpoints supported.  Let A be the address
       
  2930 		   of a breakpoint to be set/cleared.  In THUMB mode, A
       
  2931 		   should be passed as-is to RDebug.     In ARM mode, A+2
       
  2932 		   should be passed.  See below for a rationale.
       
  2933 		* New class TArmBreakPoint added in kc_std.h.  It
       
  2934 		  contains breakpoint characteristics and an inline
       
  2935 		  function that can be used to insert a hardcoded ARM
       
  2936 		  or THUMB breakpoint in user code.
       
  2937 		INTERNAL CHANGES:
       
  2938 		* Breakpoint notification in __ArmVectorUndef() was
       
  2939 		  disabled.  It is now re-enabled.  Code updated to
       
  2940 		  take into account both THUMB and ARM.
       
  2941 		* Support for ARM BX instruction has been added to
       
  2942 		  single-stepping code.  THUMB single-stepping still
       
  2943 		  not supported.
       
  2944 		* In Debug::Continue(), removed code which stepped
       
  2945 		  over breakpoints located at the start address
       
  2946 		  because GDB already does the same thing.  Removed
       
  2947 		  too, code which stepped over hardcoded breakpoints
       
  2948 		  because it was buggy and hardcoded breakpoints are
       
  2949 		  uncommon.
       
  2950 		* New scheme used for breakpoints: a single 16-bit
       
  2951 		  opcode is used for both ARM and THUMB breakpoint.
       
  2952 		  For ARM, this pattern must replace the upper 16-bits
       
  2953 		  of the instruction to break at.  As little-endian is
       
  2954 		  used, the breakpoint bit pattern is actually at
       
  2955 		  address+2, hence the API change described above.
       
  2956 		* CPU-dependent modifications done in both generic ARM
       
  2957 		  and in windermere.
       
  2958 	2)    Fixed defect EDNNTHY-4H6PXT (PC address computed at
       
  2959 		  start of __ArmVectorUndef() is wrong in THUMB mode).
       
  2960 
       
  2961 3) AndrewB
       
  2962 	1)	Removed K32SND.H, K32SND.INL, D32SND.H and D32SND.INL
       
  2963 		from the export section of bld.inf. These files should
       
  2964 		no longer be public since all sound functionality is now
       
  2965 		managed by the Media Server.
       
  2966 
       
  2967 4)	MarkCa
       
  2968 	1)	\E32\EPBUS\EMUL\WIN32\PP_PCCD.CPP
       
  2969 		Added ReadPasswordFromStore() and EncodePassword().
       
  2970 		Added logic to RPlatPccdChunk::(Read|Write) to automatically unlock
       
  2971 		card if pw in store  Replaced assertion w. return code in
       
  2972 		DPlatPcCardController::WritePasswordData().  Added comments to describe
       
  2973 		how emulated mechanism corresponds with real MMC mechanism.
       
  2974 		Modified password store to use 128-bit card ids to simulate mmc better.
       
  2975 		DPlatPcCardController::PasswordControl(),
       
  2976 		DPlatPcCardController::PasswordStoreLengthInBytes(),
       
  2977 		DPlatPcCardController::(Read|Write)PasswordStore()
       
  2978 		All modified to give same behaviour as default DPeriphBusController
       
  2979 		virtual functions if _LOCKABLE_MEDIA is not #defined.
       
  2980 	2)	\E32\EPBUS\EMUL\WIN32\PP_STD.H
       
  2981 		DPlatPcCardController prototypes for above.
       
  2982 		Removed panics EWinsPcCard(MappingNotInStore|PswdStoreBadWriteDesc).
       
  2983 	3)	\E32\INCLUDE\E32SVR.H
       
  2984 		Added "//#define _LOCKABLE_MEDIA" so WINS PC Card controller can be
       
  2985 		built without locking mechanism.
       
  2986 
       
  2987 5)	Morgan
       
  2988 	1)	Changed declaration of Custom::DriveSettings to pure virtual on
       
  2989 		MAWD and MMAD and MIEG platforms.
       
  2990 	2)	k32snd.h and d32snd.h are no longer exported, so:
       
  2991 		Changed \series5mx\va_sdrv.h to get k32snd.* and d32snd.*
       
  2992 		from \e32\include. Changed \cirrus72x1\va_sdrv.h to get k32snd.*
       
  2993 		and d32snd.* from \e32\include.  Modified k32snd.h and d32snd.h
       
  2994 		to get header files from \e32\include
       
  2995 
       
  2996 6)	Alastair
       
  2997 	1)	Removed unused __USE_CRITICAL_SECTION__ #defines from the WINS/WINC
       
  2998 		kernel.
       
  2999 	2)	Removed badly-spelt LedArrangeVerticaly keyword from the EPOC.INI file
       
  3000 		processing code - use LedArrangeVertically instead.
       
  3001 	3)	Named the WINS/WINC kernel critical section mutex so that it can be
       
  3002 		shared between processes.
       
  3003 	4)	Fixed Symbian ER5u defect EDNHLOO-4HGKKJ
       
  3004 		"EXPORT_C used instead of IMPORT_C in header file".
       
  3005 
       
  3006 7) 	Pete
       
  3007 	1)	Added extra member to TDriveInfoV1 class:-
       
  3008 			TInt iRuggedFileSystem
       
  3009 		With this set (to KRuggedFileSystem), it indicates to the
       
  3010 		file server that it should implement a rugged file system.
       
  3011 		This required the addition of a new variant function - DriveSettings()
       
  3012 		so the ruggedization option can be selected at the variant level.
       
  3013 	2) 	Added latest versions of LFFS Media drivers for WINS and Brutus - 4th
       
  3014 		candidate version (R1.2) of LFFS.
       
  3015 	3) 	Modification to E32 local media subsystem so that the reading
       
  3016 		of partition information from the media driver on mounting
       
  3017 		a drive is done asynchronously. This affects the media driver API as
       
  3018 		follows:-
       
  3019 
       
  3020 		TInt DMediaDriver::PartitionInfo(TPartitionInfo &anInfo);
       
  3021 		becomes
       
  3022 		void DMediaDriver::ReadPartitionInfo(TInt &aResult,const TCallBack& aCallBack);
       
  3023 
       
  3024 		The ReadPartitionInfo() call just initiates the reading of partitiion
       
  3025 		information with this typically being concluded on an interrupt. From
       
  3026 		the interrupt, the driver signals the conclusion of the requests by
       
  3027 		call 'aCallback', having first written the result of the request to
       
  3028 		'aResult'. The partition info is now written by the driver directly
       
  3029 		into its member data - DMediadriver::iPartitionInfo rather than being
       
  3030 		passed back to the local media subsystem.
       
  3031 
       
  3032 8)	Dennis
       
  3033 	1)	Renamed iCount member of CObjectIx to iHighWaterMark. Added new member
       
  3034 		iNumEntries which counts the number of actual entries in the index.
       
  3035 		The Count() member function now returns iHighWaterMark so its meaning
       
  3036 		is unchanged. Added new ActiveCount() member function to return the
       
  3037 		new iNumEntries member.
       
  3038 		Changed Exec::HandleCount() to return the number of actual handles open
       
  3039 		rather than the high water mark of the handles array as before.
       
  3040 
       
  3041 Version 1.02.263
       
  3042 ================
       
  3043 (Made by MarkDo, 30.03.2000)
       
  3044 
       
  3045 1)	Morgan
       
  3046 	1)	Reorganised the super-page into TSuperPage, TKernelPage,
       
  3047 		and TMachineConfiguration.  TMachineConfiguration has
       
  3048 		been promoted from WINS.
       
  3049 		TSuperPage holds values discovered by the bootstrap that
       
  3050 		are required by the generic kernel.  TKernelPage
       
  3051 		contains generic kernel data that needs to be preserved
       
  3052 		over a warm reset.  TMachineConfiguration contains
       
  3053 		system wide settings that should be persisted over a
       
  3054 		warm reset and machine state saves (backup).
       
  3055 	2)	Changed P::SetMachineConfiguration() and
       
  3056 		P::MachineConfiguration() to use the new
       
  3057 		TMachineConfiguration on all platforms.
       
  3058 	3)	Removed iDebugger from the super page
       
  3059 	4)	Fixed some warnings
       
  3060 	5)	Changed the bootstraps for MEIG and MAWD to match new
       
  3061 		superpage layout.
       
  3062 		Changed bootstrap\include\superpage.h to match new
       
  3063 		bootstrap.
       
  3064 	6)	Removed PowerRestart functions since the power model
       
  3065 		never calls them.
       
  3066 
       
  3067 
       
  3068 Version 1.02.262
       
  3069 ================
       
  3070 (Made by Dennis, 23.03.2000)
       
  3071 
       
  3072 1)	Alastair
       
  3073 	1)	Added calls to Sleep(0) before all occurrences of SetEvent(),
       
  3074 		ReleaseSemaphore() and ReleaseMutex() in accordance with advice given
       
  3075 		in MSDN Knowledge Base article Q173260.  This change should make one
       
  3076 		variant of the Emulator Hanging bug less likely to occur.
       
  3077 
       
  3078 2)	MarkCa
       
  3079 	1)	\E32\EPBUS\EMUL\WIN32\PP_PCCD
       
  3080 		Added ReadPasswordFromStore() and EncodePassword().
       
  3081 		Added logic to RPlatPccdChunk::(Read|Write) to automatically unlock
       
  3082 		card if pw in store.
       
  3083 		\E32\EPBUS\EMUL\WIN32\PP_STD.H
       
  3084 		DPlatPcCardController prototypes for above.
       
  3085 
       
  3086 3)	MarkDo
       
  3087 	1)	Added additional media attributes KMediaAttLockable and
       
  3088 		KMediaAttLocked.
       
  3089 
       
  3090 4)	Pete
       
  3091 	1) 	Removed the EUSER class UserPcCardCntrl.
       
  3092 	2)	Modified the function MBusDev::DoAsyncLateOpen() to
       
  3093 		now take an additional second parameter 'TInt anOpenInfo'.
       
  3094 
       
  3095 5)	Dennis
       
  3096 	1)	Removed the EPOC registry - files US_REG.CPP, UB_REG.CPP and KP_REG.CPP
       
  3097 		along with TRegistryCategory, TRegistryItemName, TRegistryItemValue,
       
  3098 		CRegistry, CPersistentRegistry and Environment classes.
       
  3099 	2)	Removed most UserHal:: functions - these have been superseded by HAL::
       
  3100 		functions.
       
  3101 	3)	Removed RThread::Create() overload taking a RProcess& parameter and
       
  3102 		removed RProcess* parameter from the overload taking an RLibrary*
       
  3103 		parameter. Threads may now only be created in the current process.
       
  3104 	4)	Reassigned ARM domains following demise of registry. 2 is still used
       
  3105 		for page tables, 3 is now used for the RAM drive and 4 for F32.
       
  3106 	5)	Change to Brutus bootstrap to link at 0xc8000000 for compatibility
       
  3107 		with 12Mb bootloader.
       
  3108 
       
  3109 
       
  3110 Version 1.02.261
       
  3111 ================
       
  3112 (Made by Robert, 17.3.2000)
       
  3113 
       
  3114 1)	Morgan
       
  3115 	1)	Added User::ResetInactivityTime() to reset all
       
  3116 		RTimer::Inactivity timers
       
  3117 	2)	Added TRawEvent::EKeyRepeat for adding auto repeated key events
       
  3118 		to the event queue
       
  3119 
       
  3120 2)	Pete
       
  3121 	1)	Added kernel functions to read, write and return the
       
  3122 		size of the Peripheral Bus Controller password store.
       
  3123 
       
  3124 3)	MarkCa
       
  3125 		1)	Added WINS PC Card locking features to test mmc (Crystal) functions
       
  3126 
       
  3127 			\E32\EKERN\KW_EXEC.CPP
       
  3128 			Modified ExecHandler::Drive(ReadPasswordData|PasswordStoreLengthInBytes)()
       
  3129 		to call P functions.
       
  3130 
       
  3131 			\E32\EKERN\KS_SVR.CPP
       
  3132 			Modified svDriveWritePasswordData to call P::WritePeriphBusPasswordData().
       
  3133 
       
  3134 			\E32\EPBUS\EMUL\WIN32\PP_PCCD.CPP
       
  3135 			Modified DPlatPcCardController::PasswordControl().
       
  3136 			Implemented DPlatPcCardController::(Read|Write)PasswordStore(),
       
  3137 			DPlatPcCardController::PasswordStoreLengthInBytes().
       
  3138 			Read and write routines return KErrLocked if locked and accessing
       
  3139 			EPccdAttribMem memory.  This still allows chunks to be created for
       
  3140 			locked cards.
       
  3141 
       
  3142 		\E32\EPBUS\EMUL\WIN32\PP_STD.H
       
  3143 			Prototypes for above and store panic codes.
       
  3144 
       
  3145 4)	RobertJ
       
  3146 	1)	Entered suppilied mods to Linda SIR in vm_com2.cpp for all variants
       
  3147 
       
  3148 
       
  3149 Version 1.02.260
       
  3150 ================
       
  3151 (Made by Alastair, 10.3.2000)
       
  3152 
       
  3153 
       
  3154 1)	Alastair
       
  3155 	1)	Updated e32 rombuild scripts to pick up the test .IBY files
       
  3156 		generated by Bldmake from the new directory structure implied
       
  3157 		by recent changes to E32TOOLP.
       
  3158 
       
  3159 	2)	Added temporary hack to bootstrap component extension makefile
       
  3160 		so that mainline rombuilds for MEIG, MAWD and MMAD will still work,
       
  3161 		now that the rombuild system has been changed to work with output
       
  3162 		produced by the generic bootstrap build system.
       
  3163 
       
  3164 2)	Pete
       
  3165 	1)	Modified PC Card Controller emulator (EPBUS) in WINS
       
  3166 		to implement Peripheral bus password functions (Lock/Unlock/Clear).
       
  3167 		This is only possible on the simulated CF cards in Socket 0 (not the
       
  3168 		simulated Compact rom card in socket 1).
       
  3169 
       
  3170 3)	MarkCa
       
  3171 	1)	\E32\EUSER\US_KSVR: converted
       
  3172 		TBusLocalDrive::((Lock|Unlock)Drive)|ClearPassword) from async to sync.
       
  3173 		\E32\E32SVR.H: changed TBusLocalDrive prototypes.
       
  3174 
       
  3175 Version 1.02.259
       
  3176 =================
       
  3177 (Made by MarkCa 03-03-00)
       
  3178 
       
  3179 1)	Morgan
       
  3180 	1)	Guarded POS hooks with #define __SUPPORT_PARTNER_OS__ and updated
       
  3181 		U32STD.H appropriately.  This removes partner OS support from most
       
  3182 		platforms.
       
  3183 	2)	'Enhanced' the POS hooks.  Kernel lock is now done after the POS
       
  3184 		reschedule hook, instead of before.  This makes it necessary to
       
  3185 		check for the POS rescheduler being interrupted.  If it has been
       
  3186 		interrupted then we now make an early exit from the int-vector to
       
  3187 		prevent running DFCs from the nested interrupt.
       
  3188 
       
  3189 2)	William
       
  3190 	1)	Fixed the borders for text-window server windows on EPOC devices.
       
  3191 		WINS uses true Unicode fonts, but EPOC devices have a cp1252 font
       
  3192 		built in, and so need to continue using the cp1252 encoding for the
       
  3193 		box drawing characters.
       
  3194 
       
  3195 3)	MarkCa
       
  3196 	1)	Added TBusLocalDrive -> Exec -> ExecHandler functions for MMC
       
  3197 		password support.
       
  3198 
       
  3199 4)	Pete
       
  3200 	1)	Added PasswordControl() function to TLocDrv,DMediaDriver and
       
  3201 		DPeriphBusController classes.
       
  3202 
       
  3203 Version 1.02.258
       
  3204 ================
       
  3205 (Made by Pete 24/02/00)
       
  3206 
       
  3207 1)	Alastair
       
  3208 	1)	Updated a few .mmp files to hardcode .def file locations.
       
  3209 
       
  3210 2)	Dennis
       
  3211 	1)	Made TDesC8::Left(), TDesC8::Right(), TDesC16::Left() and
       
  3212 		TDesC16::Right() truncate the requested length to Length() instead
       
  3213 		of panicing.
       
  3214 	2)	Export COLLATE.H to \Epoc32\Include instead of \Epoc32\Include\Kernel
       
  3215 		since it contains public interfaces.
       
  3216 	3)	Added DEBUG mode checking to ensure that heaps are not referenced by
       
  3217 		DFCs. Before calling a DFC the current heap pointer is changed to
       
  3218 		0xC90FDAA2 and is restored when the DFC returns.
       
  3219 
       
  3220 3)	Morgan
       
  3221 	1)	Removed \hal\group.  BLD.INF is now in \hal.  Removed annoying
       
  3222 		"Nothing to do" declarations.  Updated all variant hals to match.
       
  3223 
       
  3224 4)	Robert
       
  3225 	1)	Added new export ClearIrError for Linda in ka_linda.cpp and v32linda.h
       
  3226 
       
  3227 5)	Pete
       
  3228 	1)	Signal change notification added to Cogent DTE serial drivers (COM3 &
       
  3229 	  	COM4).
       
  3230 	2)	Fixed problem with signal change notification on DTE
       
  3231 		and DCE serial drivers where it was possible for a transition on a
       
  3232 		modem status line to occasionally fail to trigger notification.
       
  3233 	3) 	Added CF Card Serial driver for Brutus (COM4) - not yet tested.
       
  3234 
       
  3235 
       
  3236 Version 1.02.257
       
  3237 ================
       
  3238 (Made by Dennis, 14-02-2000)
       
  3239 
       
  3240 1)	Dennis
       
  3241 	1)	Added HAL component.
       
  3242 	2)	Removed calls to most UserHal functions except for those which are
       
  3243 		always available from the kernel.
       
  3244 	3)	Inlined ::operator new(TUint, TLeave) and
       
  3245 		CBase::operator new(TUint, TLeave) to remove the need for the
       
  3246 		TLeave parameter to be generated by the compiler.
       
  3247 	4)	Kernel now always disables auto switch off by default.
       
  3248 	5)	Added RTimer::Inactivity() and CTimer::Inactivity() functions to
       
  3249 		support generic user inactivity timers.
       
  3250 	6)	Added K::InactivityQ and TInactivityLink to the kernel to implement
       
  3251 		generic user inactivity timers.
       
  3252 	7)	Added User::InactivityTime() to return the time elapsed since the last
       
  3253 		user event.
       
  3254 
       
  3255 2)	Morgan
       
  3256 	1)	Exported hal_int.h into the system\kernel include dir
       
  3257 	2)	Made \hal\group\config.mke generic so it works for HALs in
       
  3258 		\hal component and also works for HALs in \<variant>\hal.
       
  3259 		Renamed <variant>.hda and <variant>.hcf to values.hda and
       
  3260 		config.hcf.
       
  3261 	3)	Added HALs to linda b,c,1 variants
       
  3262 	4)	Updated Variant::DisplayOn for all linda variants.
       
  3263 		Code from Sampsa - not tested locally.
       
  3264 	5)	Fixed EPBUS build error in pa_std.h on MMAD platform
       
  3265 	6)	Added kernel-extension loading to kernel init.
       
  3266 		Kernel extensions are loaded just before the file-server.
       
  3267 		Extensions can have writable static data but global constructors
       
  3268 		are not called.
       
  3269 	8)	Made keyboard drivers on all platforms into kernel-extensions.
       
  3270 	9)	Removed TKeyboard.
       
  3271 	10)	Fixed bug in TIdler::Idle().  There are now 64 ticks in a second.
       
  3272 
       
  3273 3)	Jonathan
       
  3274 	1)	Fixes to "mnt distrib" mechanism and dsitrib.txt files.
       
  3275 		Made distrib.pl checking stricter: Checks for mising distrib.txt files
       
  3276 		and for non-existent files listed in distrib.txt.
       
  3277 
       
  3278 4)	Pete
       
  3279 	1) 	Re-enabled the ACD on MEIG.
       
  3280 	2)	Enabled main battery voltage measurement on Cirrus 7211
       
  3281 		board (which is simulated using a pot. on the board). Also reference
       
  3282 		voltage measurement. Disabled backup battery measurement.
       
  3283 	3)	Added digitizer driver for Cirrus 7211 board - using
       
  3284 		ADC channels to measure screen position.
       
  3285 	4)	Generally tidied up variant for Cirrus 7211 board.
       
  3286 	5)	Modified MEIG bootsrap so it resets DRAM width to
       
  3287 		32bit. (Cirrus 7211 repro program sets it to 16bit).
       
  3288 	6) 	Temporarily re-assigned Cogent UART3.PDD to use
       
  3289 		UARTB rather than UARTC since UARTC/UARTD still have h/w problems
       
  3290 		with setting thier interrupt mask registers. This means Cogent now
       
  3291 		has a single DCE and DTE serial port. The ports are now assigned:-
       
  3292 
       
  3293 		Driver	Port Number	Uart	Port Type
       
  3294 		------	-----------	----	---------
       
  3295 		EUART1	Serial 0	UART-A	DCE
       
  3296 		EUART2	Serial 2	UART-C	Not working
       
  3297 		EUART3	Serial 1	UART-B	DTE
       
  3298 		EUART4	Serial 3	UART-D	Not working
       
  3299 
       
  3300 Version 1.02.256
       
  3301 ================
       
  3302 (Made by Simon, 01-02-2000)
       
  3303 
       
  3304 1)	Dennis
       
  3305 	1)	Added aLength parameter to Dll::GlobalRead() to specify how much data
       
  3306 		to read.
       
  3307 	2)	Added UserSvr::HalGet() and UserSvr::HalSet().
       
  3308 
       
  3309 2)	Pete
       
  3310 	1)	Modified Linda MMC Controller to include calls on the
       
  3311 		power model to reduce the clock frequency during MMC operation (and
       
  3312 		restore to normal clock frequency afterwards).
       
  3313 	2) 	Corresponding changes to the Linda power model to support MMC clock
       
  3314 		switching.
       
  3315 	3)	Added various additional functions to TLinda class to
       
  3316 		support power model clock switching.
       
  3317 	4)	Added CF card modem serial PDD to MAWD - DATXB13
       
  3318 
       
  3319 3)	Morgan
       
  3320 	1)	Integrated Matt's changes for the LCD on the HPs
       
  3321 
       
  3322 4)	Simon
       
  3323 	1)	Restructured e32 source directory, and moved varients to new components
       
  3324 
       
  3325 
       
  3326 Version 1.02.255
       
  3327 ================
       
  3328 (Made by Dennis, 19th January 2000)
       
  3329 
       
  3330 1)	Morgan
       
  3331 	1)	Bug fix for WINS emulator-configuration on the command-line
       
  3332 		(EDNATHE-4ETJPC)
       
  3333 	2)	MMAD LC/LB/L1 clock moved to 52Mhz and changed LCD settings
       
  3334 	3)	EXPORT_Ced some more functions (in ImpAsic) for use by ENOS
       
  3335 	4)	Integrated changes from Nile to MMAD keyboard drivers
       
  3336 	5)	Added TRUST changes to MMAD bootstrap
       
  3337 	6)	Modification to the POS fiq vector to defer POS reschedule
       
  3338 		when interrupted from irq or svc mode
       
  3339 
       
  3340 2)	Dennis
       
  3341 	1)	Removed X86 build
       
  3342 	2)	Removed NoLongerSupported... functions from EUSER and EKERN
       
  3343 	3)	Removed TReal96. Removed the implementations of Math:: functions which
       
  3344 		use TReal96; only the TRealX implementations now remain. Rewrote some
       
  3345 		code in UM_RTOD.CPP (real to text conversion) to use TRealX instead of
       
  3346 		TReal96.
       
  3347 	4)	Removed SObjectIxArray, SObjectConArray and SObjectConIxArray. These
       
  3348 		data members are now part of CObjectIx, CObjectCon and CObjectConIx
       
  3349 		respectively.
       
  3350 	5)	Inlined CObjectCon::UniqueID() and CObjectCon::Count()
       
  3351 	6)	Changes to descriptor code from Andrew Thoelke. Copy constructors are
       
  3352 		no longer explicitly defined (compiler generated instead). A protected
       
  3353 		empty destructor has been added to TDesC8 and TDesC16 to prevent the
       
  3354 		passing of TDesC and TDes parameters by value, which would result in
       
  3355 		object slicing. To cope with static descriptors, an empty atexit()
       
  3356 		function has been added to UP_DLL, UP_EXE and KC_EXE for all platforms.
       
  3357 	7)	Added machine coded 16-bit descriptor code for ARM (UC_DES16.CPP). This
       
  3358 		is enabled by __DES16_MACHINE_CODED in U32STD.H.
       
  3359 	8)	Inlined TCallBack functions.
       
  3360 	9)	Removed TChar copy constructor. This means that TChar parameters passed
       
  3361 		by value are now passed in registers by GCC. Modified machine coded
       
  3362 		functions which take a TChar parameter to account for this.
       
  3363 	10)	Removed TLex8 and TLex16 copy constructors.
       
  3364 	11)	UserSvr::StaticCallList(), UserSvr::DynamicCallList() and
       
  3365 		RLibrary::LibraryCallList() are no longer exported.
       
  3366 	12) RChunk::CreateDllStatic(), RChunk::ReserveAt() and all overloads of
       
  3367 		RChunk::Read() and RChunk::Write() have been removed.
       
  3368 	13)	Added inline functions for converting TProcessId and TThreadId to and
       
  3369 		from TUint.
       
  3370 	14)	Removed RThread::Mark(), RThread::SetMark(), RThread::NotifyIfDie(),
       
  3371 		RThread::SetNotifyIfDie(), RThread::Busy() and RThread::SetBusy().
       
  3372 	15)	Removed RProcess::Mark(), RProcess::SetMark() and RProcess::Busy().
       
  3373 	16)	Removed User::Abort() and User::Dying().
       
  3374 	17)	Inlined TRawEvent default constructor, TRawEvent::Type() and
       
  3375 		TRawEvent::Ticks().
       
  3376 	18)	Removed RLoader::LoadProcess and RLoader::LoadLibrary functions which
       
  3377 		don't take a TUidType. RLoader::Version() and RLoader::LoadProcess()
       
  3378 		are no longer exported.
       
  3379 	19)	Changed CCaptureKeys to use RArray instead of CArrayFixFlat.
       
  3380 	20)	Removed class RMmu.
       
  3381 	21)	Removed CArrayFixA etc.
       
  3382 	22)	Options %E, %F, %G in TDes::AppendFormatList() now convert a TRealX
       
  3383 		instead of a TReal96.
       
  3384 	23)	Fixed bug in chunk creation - between setting the domain and the
       
  3385 		iOwningProcess, the SetNameL could leave. The chunk destructor would
       
  3386 		then erroneously free the domain.
       
  3387 
       
  3388 3)	Alastair
       
  3389 	1)	Removed SROS, ARM3 and MARM targets from BLD.INF and GENERIC.INF.
       
  3390 	2)	Fixed minor problem with DIFILB.MMP.
       
  3391 	3)	Added support for specifying color depths Gray256 and Color64K in the
       
  3392 		EPOC.INI file with the ColorDepth keyword.  Changed the Emulator color
       
  3393 		depths default to all supported color depths rather than just Gray2,
       
  3394 		Gray4 and Gray16.
       
  3395 	4)	Made processing of all EPOC.INI file keywords case-insensitive, and
       
  3396 		extended maximum line length from 80 to 256 characters.  EPOC.INI
       
  3397 		syntax errors are now captured and displayed in a Message box before
       
  3398 		causing the Emulator to exit.  Text from the EPOC.INI file is
       
  3399 		converted to UNICODE before processing.
       
  3400 
       
  3401 4)	Mark
       
  3402 	1)	Added KLindaUidValue and used to set iMachineUniqueId in superpage
       
  3403 		for MMAD L1/LB/LC.
       
  3404 
       
  3405 5)	Pete
       
  3406 	1)	Merged in latest changes to MMC Controller and MMC Media driver.
       
  3407 		The Controller now supports multiple block read/writes requests
       
  3408 		and the Media driver makes use of the multiple block reads.
       
  3409 	2)	Added support in TCogent for the 2nd Dual UART device (ST16C2552) and
       
  3410 		also suppport for its associated interrupts (in KA_PIC.CPP).
       
  3411 	3)	Added DCE serial drivers to Cogent - not yet fully functional. Also
       
  3412 		re-organized cogent serial PDDs. These are now assigned as follows:-
       
  3413 			Serial 0 - DCE using ST16C552 device (CTS/RTS).
       
  3414 			Serial 1 - DCE using ST16C552 device (CTS/RTS).
       
  3415 			Serial 2 - DTE using ST16C2552 device (RTS,DTR/CTS,DSR,RI).
       
  3416 			Serial 3 - DTE using ST16C2552 device (RTS,DTR/CTS,DSR,RI).
       
  3417 	4) 	Removed TLocalDrive class from EUSER (use TBusLocalDrive instead).
       
  3418 	5)	Changed TBusLocalDrive Read(), Write() Format() functions to use a
       
  3419 		TInt64 rather than a TInt to specify position within the drive.
       
  3420 	6) 	Removed RLogicalChannel class from EUSER (use RBusLogicalChannel
       
  3421 	   	instead).
       
  3422 	7)	Removed RDevComm class from EUSER (use RBusDevComm instead).
       
  3423 
       
  3424 Version 1.02.254
       
  3425 ================
       
  3426 (Made by Pete, 21st December 1999)
       
  3427 
       
  3428 1)	Petteri
       
  3429 	1)	Added extended serial port functionality as required by Linda. A new
       
  3430 		pair of device drivers has been added to enable Linda to act as a DCE
       
  3431 		device in addition to DTE. New notifications and capabilities have
       
  3432 		been added.
       
  3433 
       
  3434 		Files changed:
       
  3435 		Inc\D32comm.h		Inc\D32comm.inl
       
  3436 		Inc\K32comm.h		Inc\K32comm.inl
       
  3437 		Inc\K32std.h		Inc\V32linda.h
       
  3438 		Dcomm\D_comm.cpp	Vmadlc\Vm_com1.cpp
       
  3439 		Vmadlc\Vm_com2.cpp	Vmadlb\Vm_com1.cpp
       
  3440 		Vmadlb\Vm_com2.cpp	Varmca\Va_com1.cpp
       
  3441 		Varmca\Va_com2.cpp	Varmcl\Va_com1.cpp
       
  3442 		Varmcl\Va_com2.cpp	Varmp2\Va_com1.cpp
       
  3443 		Varmpb\Va_com1.cpp	Varmpc\Va_com1.cpp
       
  3444 		Varmpc\Va_com2.cpp	Varmpd\Va_com1.cpp
       
  3445 		Varmpd\Va_com2.cpp	Varmpd\Va_com3.cpp
       
  3446 		Vawdb1\Va_com1.cpp	Vawdb1\Va_com2.cpp
       
  3447 		Vcgac1\Va_com1.cpp	Vcgac1\Va_com2.cpp
       
  3448 		Visaba\Vi_com1.cpp	Visaba\Vi_com2.cpp
       
  3449 		Visaba\Vi_com3.cpp	Vrosr1\Va_coms.cpp
       
  3450 		Vx86pc\Vx_comm.cpp	Dpwins\D_cdrv.cpp
       
  3451 		Kamad\Ka_linda.cpp	Bmmad\Ekernu.def
       
  3452 		Group\Bld.inf		Ksrc\Ks_chn.cpp
       
  3453 
       
  3454 		Files added:
       
  3455 		Dcomm\D_commdce.cpp	Vmadlc\Vm_com1dce.cpp
       
  3456 		Group\Ecommdce.mmp	Group\Dmtxlc1dce.mmp
       
  3457 		Group\Dmtxlb1dce.mmp	Vmadlb\Vm_com1dce.cpp
       
  3458 
       
  3459 2) 	Pete
       
  3460 	Changes to the above DCE serial drivers and the new notification aspects
       
  3461 	of the DTE serial drivers:-
       
  3462 	1)	Added DCE serial driver for Linda L1 together with the corresponding
       
  3463 		changes to the existing DTE serial drivers for Linda L1.
       
  3464 	2)	Postponed various notification completion calls to a DFC. Also, now
       
  3465 		uses DThread::Write() were appropriate to return completion
       
  3466 		information to the client thread.
       
  3467 	3)	Changed implementation of NotifyFlowControlChange() so this only
       
  3468 		completes when a change to a h/w signal has actually changed the Tx
       
  3469 		flow control status. Also, now XON/XOFF changes trigger this notifier
       
  3470 		too.
       
  3471 	4) 	Slight change to the way NotifySignalChange() is implemented.
       
  3472 	5)	Implemented notification changes to WINS serial driver.
       
  3473 
       
  3474 3) 	Pete
       
  3475 	Converted MEIG build to the Cirrus Logic 7211 - a ARM Architecture V4
       
  3476 	device. MEIG can now be built for ARM4, ARMI and THUMB and can no longer
       
  3477 	be used on ARM 7110 (Eiger) platforms.
       
  3478 	1)	Modifications to Varmca variant (i.e. Cirrus Logic 7211 evaluation
       
  3479 	  	board:
       
  3480 		- Alterations to reflect changed GPIO allocation for the Rev.B
       
  3481 		  evaluation board.
       
  3482 		- Fixed problem with diagnostic LED.
       
  3483 	2) 	Fixed a problem with enabling additional CL-PS7111 interrupts.
       
  3484 	3) 	Fixed a problem with TEiger::SetUart2Config() so that the 2nd 7211
       
  3485 		serial port now works OK.
       
  3486 	4)	Altered MEIG bootstrap to use ARMv4 rather than ARMv3 coprocessor
       
  3487 		instructions to flush the cache and TLB. Also, now maps an extra page
       
  3488 		for the additional 7211 Eiger specific registers.
       
  3489 	5)	Changed the definitions for MEIG in U32STD.H to use ARM4 rather than
       
  3490 		ARM3 settings.
       
  3491 	6)	Added added support for additional 7211 registers in the TEiger class.
       
  3492 	7)	Modifed BLD.INF so that only the CA variant is built for MEIG
       
  3493 		builds. The PB,PC,PD,P2,CL variants are no longer built.
       
  3494 
       
  3495 4) 	Pete
       
  3496 		1) 	Changes to e32\dcomm\d_comm.cpp to fix a s/w flow control
       
  3497 		problem. If SetConfig() is called on the serial port with
       
  3498 		KConfigSendXon set in config.iHandshake and the port h/w has not yet
       
  3499 		been initialised then the driver attempts to send an XON char with the
       
  3500 		h/w off. No XON char is transmitted and no subsequent data can be
       
  3501 		transmitted.
       
  3502 
       
  3503 5) 	Morgan
       
  3504 	1)	Bug fix for MMAD LB and LC variants
       
  3505 
       
  3506 Version 1.02.253
       
  3507 ================
       
  3508 (Made by Morgan, 3/12/99)
       
  3509 
       
  3510 0)	Use with F32(201)
       
  3511 
       
  3512 1)	Dennis
       
  3513 	1)	Use section mapped garbage area for SA1100 cache flushing. Main cache
       
  3514 		flush area is at 0x43000000, mini cache at 0x43100000.
       
  3515 	2)	Added new function Mmu::FlushUnmap() which is called when RAM is
       
  3516 		unmapped. This function flushes a writeback DCache to ensure that no
       
  3517 		modified lines remain which relate to the unmapped memory.
       
  3518 	3)	Added new function Mmu::FlushCode() which is called after new code
       
  3519 		is loaded into RAM - in DPlatProcess::Loaded and DPlatLibrary::Loaded.
       
  3520 		This flushes the ICache on a split-cache machine.
       
  3521 	4)	Reinstated machine coded CActiveScheduler::Start() and CServer::RunL()
       
  3522 		after applying the RunError() modifications from last release.
       
  3523 	5)	Added new define __CPU_EXC_VECTORS_MOVABLE in U32STD.H for
       
  3524 		SA1100. This signifies that the processor offers a choice about the
       
  3525 		virtual address used for the exception vector table. Changed SA1100
       
  3526 		bootstrap to place the vectors at 0xFFFF0000 and changed Mmu::Init1()
       
  3527 		to set the end of the home section to 0xFFF00000 on SA1100.
       
  3528 	6)	Fixed scheduler bug which caused a null pointer dereference in the case
       
  3529 		where TheCurrentVMProcess=NULL, i.e. during boot.
       
  3530 	7)	Modified SA1100 bootstrap to output boot tracing to the same port as
       
  3531 		kernel tracing. Added more boot tracing. Tracing can now be done after
       
  3532 		the MMU is enabled, since the output char function checks the MMU
       
  3533 		control register.
       
  3534 	8)	Modified SA1100 bootstrap to set the correct RAM wait states when
       
  3535 		running from RAM, since the bootloader sets pessimistic values.
       
  3536 	9)	Modified SA1100 bootstrap to mark the exception vectors as cacheable
       
  3537 		and as readable by all code and writeable by none.
       
  3538 	10)	Removed __MCGA__ hacks from KCARM. We now use __CPU_ARMV3 define to
       
  3539 		determine whether to use architecture 3 or 4 MMU instructions.
       
  3540 	11)	EXE code chunks are now allocated at the top of virtual address space
       
  3541 		in the same region as DLL code chunks. Also they don't move during a
       
  3542 		reschedule. This means that split-cache machines need never flush the
       
  3543 		ICache except following loading of new code to RAM.
       
  3544 	12)	When sharing a DLL code chunk, copy entry point from the library whose
       
  3545 		code chunk is being shared.
       
  3546 	13)	Added "kerneltrace 0x80000000" to every HEADER.IBY file, so panics are
       
  3547 		always traced in debug builds.
       
  3548 
       
  3549 2) Morgan
       
  3550 	1)	Fixed a couple of warnings
       
  3551 	2)	Removed the 256 character limit from process command lines
       
  3552 		Added Exec::ProcessCommandLineLength
       
  3553 		Added RProcess::CommandLineLength()
       
  3554 		Added RProcess::CommandLine(TDes&)
       
  3555 		Changed UserSvr::ProcessCreate to take an additional cl HBufC parameter
       
  3556 		Changed svProcessCreate and S::ProcessCreate[L] accordingly, and added
       
  3557 		cleanup code.
       
  3558 		Changed RLoader::LoadProcess RMessage to take additional cl parameter
       
  3559 		Changed WINS getFileNameAndCommandLine initialisation function
       
  3560 		DProcess::Create now takes and additional command line HBufC
       
  3561 	3)	Fixed PWM interface in TLinda
       
  3562 	4)	Added EStdKeyApplication<n> enumerations
       
  3563 	5)	Added KHARDWAREASSIST to the KTRACE #defines for switching on
       
  3564 		hardware that can assist with kernel tracing
       
  3565 	6)	Mapped in CBA on EStdKeyDevice0..EStdKeyDevice3 on MMAD LB and LC
       
  3566 		variants
       
  3567 	7)	Added hardware assist tracing to Variant::DebugOutput() on
       
  3568 		MMAD platforms
       
  3569 	8)	Changed the XYInputType on MMAD platforms to EXYInputDeltaMouse,
       
  3570 		and MCGA to EXYInputMouse by implementing ImpHal::XYInputType()
       
  3571 	9)	Integrated Matthew's new MMAD L1 variant
       
  3572 	10)	Integrated Matthew's WINS changes for mapping application keys
       
  3573 
       
  3574 3)	Simon
       
  3575 	1)	Use Cogent extended PCI space if available
       
  3576 
       
  3577 Version 1.02.252
       
  3578 ================
       
  3579 (Made by Simon 25-11-1999)
       
  3580 
       
  3581 1) Morgan
       
  3582 	1)	Process create now correctly notifies the debugger of the new main
       
  3583 		thread.
       
  3584 	2)	VMADLB and VMADLC report correct physical screen dimensions.
       
  3585 	3)	Updated the MMAD bootstrap to take new flash initialisation values
       
  3586 	4)	Pushed DPassiveDebugger Rom-library-hunting into 3rd stage kernel
       
  3587 		initialisation.  This is to allow the kernel heap to grow as required.
       
  3588 		Also, reorganised strings in the DPassiveDebugger tables to take up
       
  3589 		less room.
       
  3590 	5)	Added EVT100.MMP to build the vt100 display driver.
       
  3591 
       
  3592 2)	Alastair
       
  3593 	1)	Changed exception-handling for system threads under WINS/WINC so that
       
  3594 		exceptions are passed on to the system debugger for handling rather
       
  3595 		than producing the Plat 46 dialog.
       
  3596 
       
  3597 3)	Andrew T
       
  3598 	1)	Fixed regression defect EDNMDON-4DJK8E (from Defect tracking V3.0) as
       
  3599 		suggested.
       
  3600 	2)	Added a further check on the message slot handle in
       
  3601 		Kern::MessageComplete to verify that it lies within the kernel heap,
       
  3602 		prior to the validity check. This prevents bogus message handles from
       
  3603 		causing a kernel exception and crashing the kernel.
       
  3604 	2a)	Modified E32 t_svr test to test the new check.
       
  3605 
       
  3606 4)	Andrew B
       
  3607 	1)	Added virtual "RunError" function to CActive definition in E32BASE.H,
       
  3608 		and modified CActive::Scheduler::Start() to use new CActive::RunError
       
  3609 		function when RunL leaves. It is a source compatible but not binary
       
  3610 		compatible change.
       
  3611 	2)	Modified U32STD.H to prevent machine-coded versions of CServer::RunL()
       
  3612 		and CActiveScheduler::Start() being used until the implementations are
       
  3613 		updated to reflect the changes to the C++ versions.
       
  3614 	3)	Fixed long-standing defect in CActive::Deque() which stopped active
       
  3615 		objects being re-added to scheduler. Updated T_ACT.CPP to test
       
  3616 		CActive::Deque() defect and new RunError function.
       
  3617 
       
  3618 Version 1.02.251
       
  3619 ================
       
  3620 (Made by Morgan, 25/10/99)
       
  3621 
       
  3622 1)	Alastair
       
  3623 	1)	Removed local function loadEnvironmentVariablesL() from
       
  3624 		KPWINS\KP_INI.CPP.  This change addresses ER5u software problem
       
  3625 		EDNKDEY-4AAKEW "Long environment variables stop the emulator working".
       
  3626 		The full emulator (from Mainline build 00019) still appears to work OK
       
  3627 		without this function.  Note that this change means that F32 will no
       
  3628 		longer search the system path for DLLs to be loaded dynamically.
       
  3629 
       
  3630 	2)	Added code to make it possible to set the User::JustInTime() value
       
  3631 		from the EPOC.INI file for WINS debug builds, using the syntax
       
  3632 
       
  3633 			JustInTime	1	# turn on just-in-time debugging
       
  3634 			JustInTime	0	# turn off just-in-time debugging
       
  3635 
       
  3636 		Presumably only the latter will ever be used since JustInTime
       
  3637 		debugging is enabled in WINS debug builds by default.  The keyword is
       
  3638 		case-insensitive.  This change addresses ER5 defect EDN414664 "Should
       
  3639 		be possible to set User::JustInTime from the EPOC.INI file".
       
  3640 
       
  3641 	3)	Refrozen EKERN.DLL for WINS/WINC so that the four functions referenced
       
  3642 		by ordinal in source code appear at the start of the frozen .DEF file.
       
  3643 		This means WINS/WINC executables linking to EKERN.LIB will need to be
       
  3644 		rebuilt with the latest EKERN.LIB before they will run against the
       
  3645 		latest EKERN.DLL.
       
  3646 
       
  3647 2)	Morgan
       
  3648 	1)	TMachineInfo::iXYInputPresent has become iXYInputType.  Added
       
  3649 		enum TXYInputType in e32hal.h.  This can take one of the values
       
  3650 		EXYInputNone, EXYInputPointer, EXYInputMouse (delivers absolute
       
  3651 		values in mouse events), EXYInputDeltaMouse (delivers relative
       
  3652 		values in mouse events).
       
  3653 	2)	Removed MouseButtonDown and SetMouseButtonDown from UserHal and
       
  3654 		Hal classes.  Binary incompatable change.  Incompatability limited
       
  3655 		to the functions added last release.
       
  3656 	3)	Removed unused events from TRawEvent:  EFlipChange, ESimButton*
       
  3657 		and EPointerMoveBy.  Removed unused TFlipPos from TRawEvent.
       
  3658 	4)	Updated MMAD emulated-mouse driver to use new API
       
  3659 
       
  3660 3)	Alex
       
  3661 	1)	Added a preliminary version of MMC stack controller and MMC media
       
  3662 		driver (currently disabled) to the "peripheral bus" drivers family.
       
  3663 	2)	Added Linda implementation of MMC stack ASSP layer.
       
  3664 
       
  3665 4)  Bob
       
  3666 	1)	Applied suggested fix to TLinda::ArtError and TLinda::IrError in
       
  3667 		kamad\ka_linda.cpp
       
  3668 		Reset the fifo only when error condition, not after every byte
       
  3669 
       
  3670 5) 	Pete
       
  3671 		Change to bootloader to support CL-PS7211.
       
  3672 		Temporarily disabled ADC on Cirrus Logic board due to problems with it.
       
  3673 
       
  3674 
       
  3675 Version 1.02.250
       
  3676 ================
       
  3677 (Made by Morgan, 27/9/99)
       
  3678 
       
  3679 1)	Morgan
       
  3680 	1)	Added the very random number generator Math::Random and Kern::Random.
       
  3681 		Any device drivers that can derive random bits from their devices
       
  3682 		should call Kern::RandomSalt(TUint aBitOfSalt) to mix up the kernel's
       
  3683 		random pool.  Only the LSB is used.
       
  3684 	2)	MAWD Arm::IrqDispatch adds random salt from TWind::RtcTickCount()
       
  3685 		MEIG Arm::IrqDispatch adds random salt from TEiger::RtcTickCount()
       
  3686 		MISA Arm::IrqDispatch adds random salt from TSa1100::OstData()
       
  3687 		MCGA Arm::IrqDispatch adds random salt from TCogent::TimerCounter()
       
  3688 	3)	Added DPowerModel::NotifyEvent called from Kern::AddEvent.  Override
       
  3689 		this function in your power model to implement auto timeout behaviour.
       
  3690 			eg
       
  3691 			DMachinePowerModel::NotifyEvent()
       
  3692 				{ iLcdPowerHandler->ResetAutoSwitchOffTimer(); }
       
  3693 	4)	Fixed HW IO mapping problem in the MMAD bootstrap
       
  3694 	5)	Fixed \e32\rmmad\header.iby.  Now includes screen size.
       
  3695 
       
  3696 2)	Chris
       
  3697 	1)	Fixed bug in TDMA (generic dma) affecting receive transfers large
       
  3698 		enough to require breaking down into multiple dma operations.
       
  3699 	2)	Changes to TLinda fns DmaSrcSize() and DmaDestSize().
       
  3700 	3)	Changed ImpDma::GetInterrupt() and added code to set up the correct
       
  3701 		device widths of peripherals for dma on Linda.
       
  3702 	4)	Changed fast ir LDD to store ir frames on 4 byte boundaries.
       
  3703 	5)	Changed PDD/LDD fast ir interface to be more generic and added
       
  3704 		Caps/Config.
       
  3705 	6)	Added incomplete Linda fast ir pdd(difilb). Supports 1M and 4M.
       
  3706 
       
  3707 3)	Jonathan
       
  3708 	1)	Fixed ER5u defect EDNGASR-46SD7V "Special keycodes conflict with
       
  3709 		Unicode values" by making non-character keys start at 0xff80 and
       
  3710 		special keys start at 0xff70, within the UNICODE private area.
       
  3711 			inc\e32keys.h
       
  3712 
       
  3713 4)	Petteri
       
  3714 	1)	Added base mouse support.
       
  3715 		[Note, this API has not been finalised.  If you use these
       
  3716 		APIs expect source and binary incompatable changes next
       
  3717 		release]
       
  3718 		Files changed:
       
  3719 		Vmadlc\Vm_hw.cpp	Usrc\Us_exec.cpp
       
  3720 		Vmadlc\Vm_keyb.cpp	Kpehal\Kph_inf.cpp
       
  3721 		Vmadlb\Vm_hw.cpp	Kamad\ka_inf.cpp
       
  3722 		Vmadlb\Vm_keyb.cpp	Kpepoc\Kp_dat.cpp
       
  3723 		Inc\E32svr.h		Bmarm\Euseru.def
       
  3724 		Inc\E32hal.h		Bmmad\Ekernu.def
       
  3725 		Inc\U32std.h		Bmawd\Ekernu.def
       
  3726 		Inc\M32hal.h		Bmcga\Ekernu.def
       
  3727 		Inc\M32std.h		Bmeig\Ekernu.def
       
  3728 		Kaisa\Ka_inf.cpp	Bmisa\Ekernu.def
       
  3729 		Kacga\Ka_inf.cpp	Bmros\Ekernu.def
       
  3730 		Kaeig\Ka_inf.cpp	Bwins\Euseru.def
       
  3731 		Karos\Ka_inf.cpp
       
  3732 		Keawd\Ka_inf.cpp
       
  3733 	2)	Added virtual cursor support for Linda
       
  3734 
       
  3735 5)	Simon
       
  3736 	1)	MCGA will now 'dual boot' on CMA120 and CMA102
       
  3737 
       
  3738 6)	Alastair
       
  3739 	1)	Changed GROUP\GENERIC.INF so that ELOCL.DLL is not built for
       
  3740 		THUMB.
       
  3741 
       
  3742 7)  Malcolm
       
  3743 	1)  Added new feature to rom.bat find template files by scanning
       
  3744 		the e32/r*/ directories for .oby files.  The config file now
       
  3745 		simply specifies which one is the default - if this is not
       
  3746 		present then another template is picked.  The new
       
  3747 		--list-templates option lists the known templates, along with
       
  3748 		a description.  The description is picked up from a line in
       
  3749 		the .oby file starting //#NAME:
       
  3750 
       
  3751 	2)	Added ability to reuse rom.oby file in rom.bat (--reuse).
       
  3752 		This is not recommended but is useful for quick .oby file
       
  3753 		hacks.  There is a heuristic employed to determine the ASSP of
       
  3754 		the rom.oby file from its name, or it can be specified
       
  3755 		directly.
       
  3756 
       
  3757 	3)  Changed MAWD, MEIG, MISA, MAD, SROS and SARM bootstraps to
       
  3758 		pick up the kernel trace mask from the rom header (requires
       
  3759 		rombuild > 125 to write the info there).
       
  3760 
       
  3761 8)	Alex
       
  3762 	1)	Fixed multiplier for TMillisecondTimer on MMAD, and adjusted
       
  3763 		delay in keyboard driver.
       
  3764 
       
  3765 
       
  3766 Version 1.02.197
       
  3767 ================
       
  3768 (Made by Morgan, 26/8/99)
       
  3769 
       
  3770 SOURCE-ONLY RELEASE
       
  3771 Built with MSVC6
       
  3772 
       
  3773 1)	Jason
       
  3774 	1)	Removed Casius MISA variant and all references to FPGA14 from MISA
       
  3775 	  	code.
       
  3776 	2)	Uncached screen chunk in \KAISA\KA_INI.CPP to fix stripy cursors.
       
  3777 	3)	Update the MISA OST timer and match registers (KA_INI.CPP) over switch
       
  3778 	  	off/on.
       
  3779 	4)	MISA Seting of RTC clock now wait for one 32KHz tick.
       
  3780 	5)  MISA Codec sample rate divider functions fixed.
       
  3781 	6)  MISA Tick code fixed.
       
  3782 	7)  InitSystemTime() implemented for MISA.
       
  3783 	8)	MISA Bootstrap now uses correct MMU permissions for page tables.
       
  3784 		Pagetables unlocked and locked (KA_ISA.CPP) in MISA sleep code.
       
  3785 	9)	MISA Mini-Cache is now mappable and flushable, using new mappings of
       
  3786 		EUserRwNotBuff, ESupRwNotBuff.
       
  3787 	10) \VISABA\VI_HW.CPP variant tidied up with Eikon friendly constants.
       
  3788 	11) \VISABA\VI_XYIN.CPP	restructured.
       
  3789 	12) Added OS Timer Watchdog Enable to MISA sleep code and cleared all
       
  3790 		the OST status bits after wakeup.
       
  3791 	13) Fixed possible MISA millisecond timer code bug.
       
  3792 
       
  3793 2)	Alastair
       
  3794 	1)	Removed ESOUND.LDD and ESDRV.PDD - these projects are now part of
       
  3795 		E32TEST.
       
  3796 	2)	Used #defines in GROUP\GENERIC.INF to ensure that KC_EXE.LIB is not
       
  3797 		built for THUMB.
       
  3798 	3)	Moved EUSER from BLD.INF to GENERIC.INF so that it's built only for
       
  3799 		generic platforms rather than ASSP-specific platforms.  Used #defines
       
  3800 		so that it's not built for THUMB.
       
  3801 	4)	Added empty target "FINAL" to GROUP\BOOTROM.MKE.
       
  3802 	5)	Disabled VC6 warning C4414 - short jump to function converted to near,
       
  3803 		in UPWINS\UP_I64.CPP and UPWINS\UP_REALX.CPP.
       
  3804 	6)	Fixed BOOTROM.MKE so that SROS builds correctly report their
       
  3805 	  	releasable.
       
  3806 	7)	Added extension makefile KCARM\ABORTH.MKE to copy the correct abort
       
  3807 		handler object file to \Epoc32\Build\...., and corresponding Perl file
       
  3808 		KCARM\ABORTH.PL.
       
  3809 	8)	Changed IBY files in ROMBUILD directory to #include the E32TEST and
       
  3810 		F32TEST IBY files generated by ABLD TEST ROMFILE.
       
  3811 	9)	Removed narrow frozen .DEF files.
       
  3812 	10)	Re-frozen all .DEF files in new format so that the C++ name
       
  3813 		appears with the mangled name for all exports and windiff can be
       
  3814 		used to compare frozen .DEF files with generated .DEF files.
       
  3815 
       
  3816 3)	Petteri
       
  3817 	1)	Added a new variant (Vmadlc) for Linda Macro m1.3BB rack.
       
  3818 
       
  3819 		Files changed:
       
  3820 		Group\Bld.inf		Kbmad\E32var.iby
       
  3821 		Kbmad\Rom.cmd		Kbmad\Rom.oby
       
  3822 
       
  3823 		Files added:
       
  3824 		Vmadlc\Distrib.txt	Vmadlc\Vm_com1.cpp
       
  3825 		Vmadlc\Vm_com2.cpp	Vmadlc\Vm_hw.cpp
       
  3826 		Vmadlc\Vm_kdata.cpp	Vmadlc\Vm_keyb.cpp
       
  3827 		Vmadlc\Vm_pbus.cpp	Vmadlc\Vm_xyin.cpp
       
  3828 		Inc\V32madlc.h		Group\Cmkdlc.mmp
       
  3829 		Group\Cmkylc.mmp	Group\Cmxylc.mmp
       
  3830 		Group\Dmtxlc1.mmp	Group\Dmtxlc2.mmp
       
  3831 		Group\Vmadlc.mmp	Bmmad\Vmadlc.def
       
  3832 		Bmmad\Vmadlcu.def
       
  3833 
       
  3834 4)	Morgan
       
  3835 	1)	Improved the MMAD TIdler to perform tickQ correction and to take notice
       
  3836 		of active millisecond timers
       
  3837 	2)	Wired in the TRtc class to the SetSystemTime function
       
  3838 	3)	Corrected ImpMmu::FlushShadow for MMAD
       
  3839 	4)	Added a flag to MilliSecondTimer so we can tell if the Millisecond
       
  3840 		timers are being used while in Idle
       
  3841 	5)	Bug fix to TDma::GetLargestXfer which was delivering odd count values
       
  3842 	6)	Added initialisation function optimisation for pipe and copy commands
       
  3843 		in ImpDma
       
  3844 	7)	Incorporated TLinda::SetStateDiscriminator into the ImpDma
       
  3845 		initialisation functions
       
  3846 
       
  3847 5)	Pete
       
  3848 	1)	E32 provides the following function to facilitate notification
       
  3849 		of media change events:-
       
  3850 		TInt UserSvr::MediaChangeNotify(TMediaDevice aDevice,TRequesStatus *aStat);
       
  3851 		This currently only supports a single request to be outstanding on any
       
  3852 		socket at any given time. Hence, for platforms which have more than one
       
  3853 		socket, it is only possible to be notified of a media change on one of
       
  3854 		these sockets. This has been changesd to allow a request to be
       
  3855 		outstanding on each socket.
       
  3856 	2) 	Removed support for 2nd PC Card socket from VARMPD - no longer have a
       
  3857 		rack with this h/w functional.
       
  3858 	3) 	Modified function UserSvr::ForceRemountMedia(TMediaDevice aDevice) to
       
  3859 		allow a fixed drive as well as a removable drive to be specified. It
       
  3860 		can now be called after having installed a new media driver to force
       
  3861 		a remount on the appropriate drives. This fixes a problem where a new
       
  3862 		driver for a fixed device is loaded but there is no way to force F32
       
  3863 		to remount the local drives associated with the media driver.
       
  3864 	4)	Modifications to Varmca variant:
       
  3865 		- Alterations to reflect changed GPIO allocation for the LCD interface
       
  3866 		on Rev.B evaluation board.
       
  3867 		- Enabled diagnostic LED.
       
  3868 		- Enabled SPI-ADC device.
       
  3869 
       
  3870 6)	Chris
       
  3871 	1)	Added mouse driver to Cogent + hardware cursor.
       
  3872 	2)	Changed name of serial driver on Cogent to that expected by Romkit.
       
  3873 	3)	Tidied up fast ir.
       
  3874 	4)	Changed unit masks for Com2 and Com3 on Brutus.
       
  3875 	5)	Modified Cogent serial drivers. Passes T_Serial.
       
  3876 
       
  3877 
       
  3878 7)	Jonathan
       
  3879 	1)	Removed kc_exc.cpp and ke_exc.cpp from all distributions until IPR
       
  3880 		issues are clarified.
       
  3881 
       
  3882 8)	Dennis
       
  3883 	1)	Added __SWITCH_TO_ARM and __END_ARM macros for use in test programs to
       
  3884 		enable them to build in THUMB without rewriting assembler code.
       
  3885 	2)	Modified test ROM build script to work with new GCC.
       
  3886 	3)	Initialise .data and .bss for ROM-resident device drivers when driver
       
  3887 		is loaded.
       
  3888 	4)	Corrected TLocDrv::Caps(TDes8& aCapsBuf) so it doesn't assume that the
       
  3889 		descriptor parameter is a TBuf8.
       
  3890 	5)	Removed Kern::Printf() from Kern::PowerGood() - this causes the serial
       
  3891 		driver to lock up since it gets called in the serial driver's ISR.
       
  3892 	6)	Modifications to ROM.BAT:
       
  3893 		Added --inst option to specify instruction set. If not specified,
       
  3894 		defaults to first instruction set listed for the ASSP in ROM.CFG.
       
  3895 		Build (--build) can now be UDEB or UREL only. If not specified,
       
  3896 		defaults to the first build listed in ROM.CFG (ie UDEB).
       
  3897 		Changed format of ROM.CFG - [VARIANTS] section has been scrapped.
       
  3898 		[ASSPS] section now lists for each ASSP the ROMBUILD flags to use, the
       
  3899 		variants supported and the instruction sets supported.
       
  3900 
       
  3901 9)	Simon
       
  3902 	1)	Mouse is now optional, ie doesn't hang if no mouse connected
       
  3903 
       
  3904 
       
  3905 Version 1.02.196
       
  3906 ================
       
  3907 (Made by William, 13.8.99)
       
  3908 
       
  3909 SOURCE-ONLY RELEASE
       
  3910 Built with MSVC6 and ARMv4 (GCC 518).
       
  3911 
       
  3912 CHANGES TO RELEASABLE
       
  3913 1)	William
       
  3914 	1)	CAKD*.MMP files no longer specify ASSP_LIBRARY EKERN.LIB, so that they
       
  3915 		can be built correctly for THUMB.
       
  3916 
       
  3917 	2)	U32STD.H now defines __SUPPORT_THUMB_INTERWORKING for ARMv4T, using
       
  3918 		#ifdef __ARM_ARCH_4T__ to distinguish between MAWD compiled with the
       
  3919 		new GCC and MAWD compiled with the old toolchain.
       
  3920 
       
  3921 	3)	The GCC "_call_via_rX" helper functions required by THUMB code are
       
  3922 		hacked into up_dll.cpp and uc_exe.cpp. This should be removed and
       
  3923 		replaced by the proper GCC.LIB mechanism.
       
  3924 
       
  3925 	4)	RequestComplete tracing is now conditional on KTHREAD+KSEMAPHORE
       
  3926 
       
  3927 	5)	BOOTROM.MKE CLEAN target now removes intermediate .o files
       
  3928 
       
  3929 
       
  3930 Version 1.02.195
       
  3931 ================
       
  3932 (Made by Alastair, 2.8.99)
       
  3933 
       
  3934 SOURCE-ONLY RELEASE
       
  3935 Built with MSVC6
       
  3936 
       
  3937 CHANGES TO RELEASABLE
       
  3938 1)	Alastair
       
  3939 	1)	E32 now releases zip files for ARMI, ARM4 and THUMB in the same style
       
  3940 	  	as it's other releasables.  Note that generic EUSER.LIB and EDISP.LIB
       
  3941 	  	are still released with the ASSP-specific releasables, though all
       
  3942 	  	other generic stuff is now contained in the 3 new zip files.  To use
       
  3943 	  	these releasables it's necessary to use E32TOOLP version 120 and the
       
  3944 	  	new GCC compiler.
       
  3945 
       
  3946 		This change is academic for this release since it's source-only, also
       
  3947 		it has, in fact, been built with the old gcc compiler.
       
  3948 
       
  3949 1)	Alastair
       
  3950 	1)	Hopefully fixed ER5u defect EDNDMAI-49UE4V
       
  3951 		'"KERN RE-ENTRANT" Panic' in KPWINS\KP_UTL.CPP by converting the
       
  3952 		UNICODE RDebug::Print text to NARROW 256 characters at a time using
       
  3953 		a stack variable rather than allocating space on the heap.
       
  3954 
       
  3955 	2)	Fixed ER5 defect EDNKDEY-45NHVH
       
  3956 		"Unhandled exception checking for priority key (emulator only)" in
       
  3957 		WSRC\KY_TRAN.CPP by making sure that capture key data is not left
       
  3958 		uninitialised when Windows produces a character code that the EPOC
       
  3959 		translation tables didn't.
       
  3960 
       
  3961 	3)	Fixed ER5u defect EDNWROS-46YC3V "Plat fault or Plat panic?" in
       
  3962 		KPWINS\KP_UTL.CPP so that the Fault/Panic distinction is part of the
       
  3963 		text inside the alert box rather than just in the title where nobody
       
  3964 		ever thinks to look.
       
  3965 
       
  3966 	4)	Split BLD.INF into BLD.INF and GENERIC.INF with GENERIC.INF containing
       
  3967 		details of those projects which are not ASSP-specific.  This change
       
  3968 		corresponds to changes in E32TOOLP version 120 and is designed to
       
  3969 		support building E32 with the new GCC compiler for the new targets.
       
  3970 		To build E32 it is now necessary to build the generic libraries, then
       
  3971 		the ASSP-specific libraries, then the generic releasables, then the
       
  3972 		ASSP-specific releasables.
       
  3973 		Updated .OBY files so that, if E32 is built with the old GCC compiler,
       
  3974 		they will look for the generic releasables in the right places.  They
       
  3975 		will need more updating to work with the new compiler though.
       
  3976 
       
  3977 	5)	Changed EKERN.MMP and KC_EXE.MMP so that EKERN links to KC_EXE.LIB
       
  3978 		rather than KE_EXE.LIB under MAWD.
       
  3979 
       
  3980 	6)	Now building E(EXE|DLL).LIB rather than E(EXE|DLL).o under MARM and
       
  3981 		E(EXE|DLL).obj under WINS.  This means that using this version of
       
  3982 		E32 requires E32TOOLP version 120.
       
  3983 
       
  3984 	7)	Changed E32DEF.H so that WINS/WINC warning C4710, about functions not
       
  3985 		being inlined, is disabled for MSVC versions 5 or later, rather than
       
  3986 		just MSVC5.
       
  3987 
       
  3988 	8)	Commented out user-side tracing macros under WINS/WINC builds in
       
  3989 		INC\U32STD.H because they cause the kernel to go re-entrant.  This
       
  3990 		should be investigated further.
       
  3991 
       
  3992 	9)	Integrated changes for compiling with VC6 from Ann Windsor and William
       
  3993 		Roberts.  Changes to EKERNU.DEF and EUSERU.DEF mean that this release
       
  3994 		of E32 will not build with MSVC5 and the import libraries from this
       
  3995 		release will not be compatible with MSVC5.
       
  3996 
       
  3997 2) Malcolm
       
  3998 	1)  Enabled debug monitor for SROS, and protected some MMU
       
  3999 		instructions for single builds.
       
  4000 	2)	Added new trace level, KMEMTRACE that dumps alloc/free/realloc and
       
  4001 		chunk adjustments (chunks in SINGLE only) to the debug log
       
  4002 
       
  4003 3) Morgan
       
  4004 	1)	Made Mmu::AllocPageTable public so it can be accessed by the debugger
       
  4005 	2)	Added MMAD-specific debugger implementation, and null debuggers for
       
  4006 		those platforms without support
       
  4007 	3)	Moved useful ARM Mmu definitions into kcarm\kc_mmu.h
       
  4008 	4)	MMAD debugger now updates the thread id register, remaps the Rom
       
  4009 		as small pages, and allocates some free pages for SW breakpointing.
       
  4010 	5)	Removed explicit references to variants from KC_UTL.CPP and removed
       
  4011 		reference to the Eiger variant (V32ARM.H) from the global header
       
  4012 		KC_STD.H.  Pushed P::StartupBeep into the ASSP layer.  Re-organised
       
  4013 		P::OutputToCom1 functionality so the variant is only referenced in
       
  4014 		ASSP layer. Changed P::ScreenInfo() to use the Hal function instead
       
  4015 		of calling the variant directly.
       
  4016 	6)	Defined TExtInterrupt in KC_STD.H, but it should really be moved into
       
  4017 		the Eiger platform which seems to be its only client.
       
  4018 	7)	Modified the Asic::Debug* functions for all ASSPs
       
  4019 	8)	Added MMAD interfaces for the Psu and Rtc to V32MAD.H and wired them
       
  4020 		into the kernel
       
  4021 	9)	Implemented EDNWROS-49ZKUX "Unhelpful trace message"
       
  4022 
       
  4023 4) Dennis
       
  4024 	1)	Added alignment checking on 16-bit descriptor functions in DEBUG mode.
       
  4025 	2)	Modified User::HandleException() to trap leaves by the exception
       
  4026 		handler and pass them on after clearing the last chance flag and doing
       
  4027 		User::WaitForAnyRequest();
       
  4028 
       
  4029 5) Chris
       
  4030 	1)	Added slow ir pdd for Linda (dmtxlb2).
       
  4031 	2)	Added serial pdd for Cogent (datxcg1 and datxcg2).
       
  4032 	3)	Made small change to Brutus slow ir pdd (ditxba2).
       
  4033 
       
  4034 
       
  4035 Version 1.02.189
       
  4036 ================
       
  4037 (Made by Kal Patel, 22nd July 1999)
       
  4038 
       
  4039 1)	Jonathan
       
  4040 	1)	TStringToDateTime::NextToken():
       
  4041 		Fixed defect EDN830354: Allow am/pm designators to be non-alpha and >3
       
  4042 		characters.
       
  4043 		Reapplied and reworked an ER5 ICF (defect EDNANOE-49BFV2): Match
       
  4044 		against abbreviated month names instead of leading substrings of
       
  4045 		months.
       
  4046 		usrc\us_parse.cpp
       
  4047 
       
  4048 2)	Morgan
       
  4049 	1)	Added an implementation of TMillisecondTimer for MMAD
       
  4050 		kamad\ka_pic.cpp
       
  4051 	2)	Implemented workaround for ARM915T MMU MCR instruction bug
       
  4052 		Interrupts are disabled over writes to the domain access control
       
  4053 		register
       
  4054 		kcarm\kc_int.cpp
       
  4055 		kcarm\kc_sched.cpp
       
  4056 		inc\kc_std.h
       
  4057 	3)	Fixed the definition of delta and tick TTimerModes
       
  4058 		inc\v32linda.h
       
  4059 	4)	Added a new class TIdler, that switches off rescheduling and the tick
       
  4060 		during idle, and reenables it shortly before a timer is due.
       
  4061 		kamad\ka_idle.cpp
       
  4062 		kamad\ka_std.h
       
  4063 	5)	Exported functions from DPowerModel for those power models that
       
  4064 		are implemented outside of the platform kernel
       
  4065 		inc\k32power.h
       
  4066 		ksrc\ks_power.h
       
  4067 	6)	Moved the MMAD variant to VMADLB, and invented a custom layer suitable
       
  4068 		for MMAD.  VARMLB.DLL is now VMADLB.DLL. CA*LB.DLL is now CM*LB.DLL.
       
  4069 		DATXLB1.DLL is now DMTXLB1.DLL.
       
  4070 		varmlb\*
       
  4071 		inc\v32mad.h
       
  4072 		inc\v32madlb.h
       
  4073 		group\ca*lb.mmp
       
  4074 		group\varmlb.mmp
       
  4075 
       
  4076 3)	Alastair
       
  4077 	1)	Added RESOURCE target to GROUP\BOOTROM.MKE.
       
  4078 	2)	Removed defunct .DEF files from BSARM, BSCGA and BSROS.
       
  4079 	3)	Removed defunct UPEPOC\UP_CON.CPP.
       
  4080 	4)	Removed defunct BLD.CMD files from various directories.
       
  4081 	5)	Updated GROUP\E32.FTC to include the MCGA releasables.
       
  4082 	6)	Changed GROUP\BOOTROM.MKE to copy KBMCGA\COGENT.BIN to
       
  4083 		\EPOC32\Release\MCGA\BOOTROM.BIN.  Updated KBMCGA .OBY files
       
  4084 		accordingly.
       
  4085 	7)  Changes to support building with new compiler (*.oby files,
       
  4086 		/group/mnt.bat files, /group/bld.inf files etc)
       
  4087 
       
  4088 4)	Simon
       
  4089 	1)	Fixed problem with cogent timer interrupt going off for no good reason
       
  4090 		kacga\ka_pic.cpp
       
  4091 	2)	Fixed problem in vcgac1\va_keyb.cpp that caused intermittent exceptions
       
  4092 
       
  4093 5)	Malcolm
       
  4094 	1) Added new RAM Loaded code functionality
       
  4095 	2) Modifications for Unicode SROS
       
  4096 	3) Incorporated Kista-Patch-Baseport-3.00-990717A
       
  4097 		kbros/rose.inc
       
  4098 		vrosr1/va_xyin.cpp
       
  4099 		karos/ka_rose.cpp
       
  4100 		INC/D32COMM.H, INC/V32Rose.h
       
  4101 		vrosr1/va_coms.cpp
       
  4102 		group/DATXR11.MMP
       
  4103 		group/bld.inf
       
  4104 
       
  4105 6)	Kal
       
  4106 	1) Added the Aort handler functionality for flash filing system use
       
  4107 		karos/ka_ini.cpp
       
  4108 		karos/ka_excep.cpp
       
  4109 		karos/ka_std.h
       
  4110 		karos/ka_rose.cpp
       
  4111 		WSRC/wd_rose4.cpp
       
  4112 		group/EKERN.MMP
       
  4113 		INC/V32Rose.h
       
  4114 	2) Added Fast Timers on A1C
       
  4115 		karos/ka_rose.cpp
       
  4116 		karos/ka_pic.cpp
       
  4117 		karos/ka_std.h
       
  4118 		INC/distrib.txt
       
  4119 		INC/V32FTick.h
       
  4120 		group/bld.inf
       
  4121 
       
  4122 
       
  4123 Version 1.02.188
       
  4124 ================
       
  4125 (Made by Dennis, 13th July 1999)
       
  4126 
       
  4127 1) Morgan
       
  4128 	1)	Removed the SPI controller from MMAD platform
       
  4129 		kamad\ka_spi.cpp
       
  4130 		kamad\ekern.mmp
       
  4131 		kamad\ka_psu.cpp
       
  4132 	2)	Used a more efficient method for draining the write buffer on MMAD
       
  4133 		kcarm\kc_mmu.cpp
       
  4134 		kamad\ka_ini.cpp
       
  4135 	3)	Included a missing call to POS in the slow swi dispatcher
       
  4136 		kcarm\kc_int.cpp
       
  4137 	4)	Frozen BMMAD
       
  4138 		bmmad\*.def
       
  4139 	5)	Added a gcc-helper static library (EGCC.LIB) which currently
       
  4140 		only contains the __fixuns* helper functions
       
  4141 		upepoc\up_gcc.cpp
       
  4142 		group\egcc.mmp
       
  4143 	6)	Implemented RTC emulation
       
  4144 		kamad\ka_utl.cpp
       
  4145 		kamad\ka_std.h
       
  4146 		kamad\ka_pic.cpp
       
  4147 	7)	Added state discriminator functions to TLinda and updated Linda Dma
       
  4148 		kamad\ka_dma.cpp
       
  4149 		kamad\ka_linda.cpp
       
  4150 		inc\v32linda.h
       
  4151 
       
  4152 2) Petteri
       
  4153 	1)	Added an improved version of
       
  4154 		varmlb\va_keyb.cpp
       
  4155 
       
  4156 3) Alastair
       
  4157 	1)	Added Graham Asher's updates to his change to UMATH\UM_DTOR.CPP so that
       
  4158 		it builds in narrow variants.
       
  4159 	2)	Added GROUP\BOOTROM.MKE - a bldmake-compatible custom-build makefile
       
  4160 	  	for building bootstraps.
       
  4161 	3)	Removed some hacks from MNT.BAT now that MAKMAKE from E32TOOLP version
       
  4162 		109 builds static libraries to \EPOC32\Release\MARM rather than
       
  4163 		\EPOC32\Release\MEIG.
       
  4164 	4)	Moved \e32\inc\conswins.def to \e32\inc\econs.def and listed it for
       
  4165 		export to \epoc32\release\wins\econs.def.  Made a corresponding change
       
  4166 		to \e32\inc\consmarm.def and removed \e32\inc\consmisa.def.
       
  4167 	5)	Moved the implementation of the RConsole and TConsoleKey classes into
       
  4168 		EWSRV.DLL from ECONS.DLL. Stopped exporting all functions from the
       
  4169 		CConsoleTextWin Class under WINS/MARM except the function to create a
       
  4170 		new console.  Removed the dummy export from the text window server.
       
  4171 		This means there is no longer a mutual link-time dependency between
       
  4172 		ECONS.DLL and EWSRV.DLL - ECONS.DLL merely depends upon EWSRV.DLL, and
       
  4173 		the WINS ECONS.DLL has the same API as the WINC one. and not vice
       
  4174 		versa.
       
  4175 	6)	Added fetcher definition file, E32.FTC, to the group directory.
       
  4176 	7)	Fixed ER5U defect EDNABRY-48YFUC "Compiling E32 with MSVC6 reveals
       
  4177 	  	problems with TPtr8 and TPtr16 copy constructors."
       
  4178 		Fixed in USRC\US_DES8.CPP by taking the contents of the function
       
  4179 		TPtr8::Set(TPtr8 &aPtr) function and adding it to function
       
  4180 		TPtr8::TPtr8(const TPtr8& aTPtr).  This change is not binary compatible
       
  4181 		backwards with code which calls the TPtr8 copy constructor either
       
  4182 		explicitly or implicitly and relies upon the previous behaviour of the
       
  4183 		copy constructor.  The previous behaviour merely made sure that the
       
  4184 		copied TPtr pointed to the same descriptor as the original TPtr, while
       
  4185 		the new behaviour also makes sure that the TPtr's iType is set
       
  4186 		correctly.
       
  4187 		These changes were necessary for TPtr8s to work correctly when compiled
       
  4188 		with MSVC6.  I have made corresponding changes to the TPtr16 copy
       
  4189 		constructor.
       
  4190 	8)	Changed KPWINS\KP_GUI.CPP so that the Windows character code
       
  4191 		translation is suppressed if the Ctrl, Alt and Shift keys are all
       
  4192 		depressed.  This means that the heap-checking code for APPs which used
       
  4193 		the Ctrl-Alt-Shift-A combination will now work again, as the EPOC key
       
  4194 		translation will not be overridden by the Windows translation.
       
  4195 
       
  4196 4) Chris
       
  4197 	1) 	Added export to mmu to enable creation of DHardware chunk from Ram.
       
  4198 	2) 	Slight change to TDma to allow it to break up non-contigous transfer
       
  4199 	   	buffers.
       
  4200 	3) 	Added fast infra-red LDD(Efir) to misa and mmad and a fast infra-red
       
  4201 	   	PDD(Difiba) to misa.
       
  4202 	4) 	Changes to TSa1100 variant class to implement infra red and dma on
       
  4203 	   	misa.
       
  4204 		ImpDma class impemented also for misa.
       
  4205 	5) 	Added 572000,1152000 and 4000000 baud defs to d32comm.h.
       
  4206 
       
  4207 5) Dennis
       
  4208 	1)	Added routine ImpExc::AdjustRegisters() to restore registers on ARM
       
  4209 		processors to allow an aborted instruction to be retried.
       
  4210 	2)	Added TException::Bind(), TException::UnBind() exported functions to
       
  4211 		allow device drivers to bind to exceptions.
       
  4212 	3)	Various Snowdrop-specific fixes which didn't make it for ER5.
       
  4213 	   (Euro, Digitiser factory settings, Windermere DRAM refresh, ROM size,
       
  4214 	   digitiser EEPROM calibration)
       
  4215 	4)	Prefetch aborts now have exception ID EExcCodeAbort instead of
       
  4216 	  	EExcGeneral.
       
  4217 	5)	Added ExecHandler::RomHeaderAddress() to windermere kernel.
       
  4218 	6)	Rearranged VAWDB1U.DEF so that VariantInitialise__Fv is at ordinal 1
       
  4219 		(this is necessary or else nothing works).
       
  4220 	7)	Fixed bug in new RTest where RDebug::Printf(_L("<string>")) would panic
       
  4221 		if <string> contained a % character. This was due to <string> being
       
  4222 		passed into AppendFormatList which was then interpreting the % as a
       
  4223 		format specification.
       
  4224 	8)	Modified assembler code in EUSER to allow thumb interworking by making
       
  4225 		all subroutine returns and indirect function calls use the BX
       
  4226 		instruction.  Macros have been used so that the ARM-only version with
       
  4227 		no BX instructions can still be built - this is necessary for
       
  4228 		StrongARM builds.
       
  4229 
       
  4230 		Macros employed are:
       
  4231 
       
  4232 		__JUMP(cc,r) = BXcc r or MOVcc PC, r
       
  4233 		__POPRET(rlist) = LDMFD SP!, {rlist,lr} \ BX lr or LDMFD SP!,{rlist,pc}
       
  4234 		__CPOPRET(cc,rlist) = LDMccFD SP!, {rlist,lr} \ BXcc lr or LDMccFD SP!, {rlist,pc}
       
  4235 
       
  4236 		NOTE: Thumb interworking is still disabled by default, since the new GCC
       
  4237 		is not yet fully deployed.
       
  4238 
       
  4239 	9)	Made minimal modification to EKERN to permit thumb user code to execute
       
  4240 		correctly. This involves changing two instances of "mov pc, lr" in the
       
  4241 		SWI handler to __JUMP(,lr) and also involves changing
       
  4242 		DArmPlatThread::CallFunction to use separate routines depending on
       
  4243 		whether an ARM or THUMB context is being modified. Also, when saving
       
  4244 		context following a SWI call, the saved PC points to a BX instruction
       
  4245 		instead of to the return address from the Exec:: function.
       
  4246 
       
  4247 		NOTE: All supervisor mode code is expected to be ARM. Much more
       
  4248 		extensive modification of the kernel would be required to permit THUMB
       
  4249 		device drivers.
       
  4250 
       
  4251 	10)	Compiled and tested E32 with the new version of GCC. This produces
       
  4252 		several warnings, mostly "comparison of signed and unsigned", "ANSI
       
  4253 		C++ does not permit declaration without type", "Taking address of
       
  4254 		temporary" and "XXX declared but not used" (for variables or functions
       
  4255 		only used from within assembler code). Modified the source to remove
       
  4256 		these warnings.
       
  4257 
       
  4258 	11)	Compiled and tested E32 using THUMB test executables. These all work
       
  4259 		apart from those which contain ARM assembler code.  Disabled
       
  4260 		breakpoint exception since this can crash the kernel with an alignment
       
  4261 		fault if an undefined instruction is encountered in THUMB code.
       
  4262 		Fixing this properly would require a lot of work on the debugger to
       
  4263 		fully support THUMB.
       
  4264 
       
  4265 		NOTE: To build THUMB executables, the _call_via_r0() helper functions
       
  4266 		are required. These were added to EEXE.O for testing purposes, but will
       
  4267 		eventually be in the GCC helper library.
       
  4268 
       
  4269 	12)	Modified TDes::AppendFormatList() so that variable precision
       
  4270 		specifications are now allowed, and so that the precision
       
  4271 		specification is also applied to strings.
       
  4272 
       
  4273 6) Simon
       
  4274 	1)	Improved ps/2 keyboard initialisation within kacga
       
  4275 
       
  4276 7) Mark
       
  4277 	1)	Enabled unicode WINS/WINC to run on Windows 9x. Introduced euniw.dll
       
  4278 		to convert between unicode and relevant narrow Win32 functions.
       
  4279 		Added exported set of functions to euser.dll that return a pointer
       
  4280 		to either the relevant 'W' Win32 function or a wrapper function in
       
  4281 		euniw.dll. These functions and the initialisiation of the function
       
  4282 		pointers is implemented in upwins\up_uansi.cpp.
       
  4283 	2)	Changed unicode to narrow WINS/WINC conversion from UTF-8 to
       
  4284 		CP_ACP in WinCOutput::Write and Debug::DebugFunction.
       
  4285 
       
  4286 Version 1.02.187
       
  4287 ================
       
  4288 (Made by Alastair, 9.6.99)
       
  4289 
       
  4290 
       
  4291 1)	Jason
       
  4292 	1)	Added sleep and wakeup code for MISA
       
  4293 	2)	Enabled LCD and Keyboard for Brutus wakeup.
       
  4294 	3)	Added MCP controller accessor functions for MISA
       
  4295 	4)	Modified power model to share MCP clock
       
  4296 	5)  Added definitions for the Brutus UCB1200 codec chip.
       
  4297 	6)	Added touch screen controller for Brutus, including touch to wakeup.
       
  4298 	7)  Fixed Brutus keyboard controller to not enable interrupt edges that it
       
  4299 		does not use.
       
  4300 	8)  Added the missing function TSa1100::UartTxBusy() to MISA
       
  4301 		\inc\v32s1100.h
       
  4302 			\v32ucb12.h
       
  4303 		\kaisa\ka_isa.cpp
       
  4304 			  \ka_ini.cpp
       
  4305 			  \ka_power.cpp
       
  4306 			  \ka_power.h
       
  4307 		\kbisa\sa1100.inc
       
  4308 			  \sa1100.s
       
  4309 		\visaba\vi_hw.cpp
       
  4310 			   \vi_keycn.cpp
       
  4311 			   \vi_xyin.cpp
       
  4312 
       
  4313 2)	Morgan
       
  4314 	1)	Made Mmu::UnlockPageTables and Mmu::LockPageTables public so
       
  4315 		code that calls Mmu::LogicalToPhysical() can unlock and
       
  4316 		access the page tables.
       
  4317 		\inc\m32hal.h
       
  4318 	2)	Unlocked the page tables in TDma::NextBlock() function
       
  4319 		\kpepoc\kp_dma.cpp
       
  4320 
       
  4321 3)	Petteri
       
  4322 	1)	Added Linda serial driver.
       
  4323 	2)	Added 230.4K speed to d32comm.h and modified old serial drivers
       
  4324 		to dislike it.
       
  4325 		\group\datxlb1.mmp
       
  4326 		\inc\d32comm.h
       
  4327 			\v32linda.h
       
  4328 		\kamad\ka_linda.cpp
       
  4329 		\varmca\va_com1.cpp
       
  4330 			   \va_com2.cpp
       
  4331 		\varmcl\va_com1.cpp
       
  4332 			   \va_com2.cpp
       
  4333 		\varmlb\va_com1.cpp
       
  4334 		\varmp2\va_com1.cpp
       
  4335 		\varmpb\va_com1.cpp
       
  4336 		\varmpc\va_com1.cpp
       
  4337 			   \va_com2.cpp
       
  4338 		\varmpd\va_com1.cpp
       
  4339 			   \va_com2.cpp
       
  4340 		\vawdb1\va_com1.cpp
       
  4341 			   \va_com2.cpp
       
  4342 
       
  4343 4)	Graham Asher (merged by Jonathan)
       
  4344 	1)	Implement standard Unicode collation and add new collation functions
       
  4345 		to allow loose matching.
       
  4346 	2)	Fill up all the available TLanguage slots (00 to 99); codes added
       
  4347 		include those requested for Roxette; this is a provisional solution
       
  4348 		pending the introduction of a saner language and locale number API.
       
  4349 	3)	Fix problems in TLex16::Val(TRealX&,TChar) &
       
  4350 		TLex16::Val(TReal64&,TChar) in Unicode-to-8-bit conversion (defect
       
  4351 		EDN769607).
       
  4352 	4)	Obsolete functions yet to be removed:
       
  4353 		TInt TDesC16::CompareC(const TDesC16& aDes,const TInt16*
       
  4354 							   aCollationRules) const;
       
  4355 		TInt TDesC16::CompareC(const TDesC16& aDes,TUint32
       
  4356 							   aDesiredCollationRulesId,TUint32&
       
  4357 							   aActualCollationRulesId) const;
       
  4358 		static TInt Mem::CompareC(const TUint16* aLeft,TInt aLeftL,const
       
  4359 								  TUint16* aRight,TInt aRightL,const TInt16*
       
  4360 								  aCollationRules);
       
  4361 		static TInt Mem::CompareC(const TUint16* aLeft,TInt aLeftL,const
       
  4362 								  TUint16* aRight,TInt aRightL,TUint32
       
  4363 								  aDesiredCollationRulesId,TUint32&
       
  4364 								  aActualCollationRulesId);
       
  4365 		static TInt Mem::CollationRuleSets();
       
  4366 		static TInt Mem::CollationRuleSetId(TInt aIndex);
       
  4367 		static const TInt16* Mem::CollationRuleSetByIndex(TInt aIndex);
       
  4368 		static const TInt16* Mem::CollationRuleSetById(TUint32
       
  4369 													   aDesiredId,TUint32&
       
  4370 													   aActualId);
       
  4371 
       
  4372 5)	Jonathan
       
  4373 	1)	Fixed "ambiguous overload for `bool ? TChar : char'" errors from new
       
  4374 		gcc compiler.
       
  4375 			umath\um_rtod.cpp
       
  4376 
       
  4377 6)	Alastair
       
  4378 	1)	To build this release of e32tools you'll need the latest version - 108
       
  4379 		- of E32toolp.  If you're going to use this release at all, you'll
       
  4380 		need to be building your component with the latest version of
       
  4381 		e32toolp, since import libraries are only released in the MARM release
       
  4382 		and WINS debug directories and also because EDLL.O and EEXE.O won't
       
  4383 		link properly with older versions of e32toolp.
       
  4384 	2)	Renamed MARM platform to MEIG and SARM platform to SEIG just as far as
       
  4385 		E32 is concerned.  Other components will still build for the MARM (and
       
  4386 		SARM) platforms.  This change means that rombuild obey files will need
       
  4387 		to change to reflect the new location of e32 releasables in
       
  4388 		\EPOC32\Release\Meig instead of \EPOC32\Release\Marm.
       
  4389 	3)	Changed zips of releasables put onto the network. There is now one zip
       
  4390 		file for each platform.  There is also a zip file for exported header
       
  4391 		files.  Hence, the contents of S:\e32\zip includes
       
  4392 			export.<ver>, wins.<ver>, meig.<ver>, misa.<ver> ,mawd.<ver> winc.<ver>.
       
  4393 		Each of the meig, misa and mawd zip files should contain everything
       
  4394 		necessary for building components which depend on E32 for marm.
       
  4395 		The files within these zip files now also have full pathnames so ensure
       
  4396 		you unzip them into the root of your EPOC drive with any flags required
       
  4397 		to recreate the directory structure.
       
  4398 	4)	Added new MAKMAKE keyword ASSPEXPORTS to various .MMP files so that
       
  4399 		they search ASSP-specific deffile directories rather than CPU-specific
       
  4400 		deffile directories by default.  E.G. EKERN.DLL built for narrow MISA
       
  4401 		REL will refer to \E32\BMISA\EKERN.DEF rather than
       
  4402 		\E32\BMARM\EKERN.DEF.  These .MMP files are for EKERN, EPBUS, VARMCL,
       
  4403 		VARMLA, VARMLB, VARMP2, VARMPB, VARMPC, VARMPD, VAWDB1, VISABA,
       
  4404 		VISACA, VROSR1, VCGAC1, VARMCA.  This keyword means that the import
       
  4405 		library for a project build for MEIG will go into
       
  4406 		\EPOC32\Release\MEIG\<rel|urel>\ rather than
       
  4407 		\EPOC32\Release\MARM\<rel|urel>\.
       
  4408 
       
  4409 		Where .MMP files have links to the import libraries for these
       
  4410 		components I have listed the libraries with new keyword ASSPLIBRARY
       
  4411 		and taken them out of any existing LIBRARY statements.  This ensures
       
  4412 		that the generated- makefile will search in the correct place for the
       
  4413 		import library.  Any other components linking to these libraries will
       
  4414 		have to do the same thing.
       
  4415 	5)	Kernel include headers are now exported to \EPOC32\Include\Kernel
       
  4416 		rather than \EPOC32\Include, so if your component includes these
       
  4417 		headers you'll need to add \EPOC32\Include\Kernel as a SYSTEMINCLUDE
       
  4418 		file in your .MMP file.
       
  4419 	6)	Added new command, MNT CHECKREL, to check that all releasables are
       
  4420 		present before doing an MNT PUTREL.
       
  4421 		Before doing MNT CHECKREL or MNT PUTREL call BLDMAKE -v RELFILES to
       
  4422 		create the lists of releasables.
       
  4423 	7)	Changed edll, exdll, eexe and kc_exe so that they all build as static
       
  4424 		libraries rather than object files in accordance with ER5u makmake
       
  4425 		changes.
       
  4426 	8)	Changed second uids in device driver .MMP files to zero so that makmake
       
  4427 		will apply the correct ones automatically.
       
  4428 	9)	Changed .MMP files to take advantage of changes in makmake .MMP
       
  4429 		#defines.
       
  4430 	10)	Replaced all B[plat].PRJ files for use with BLDMAKE with BLD.INF in
       
  4431 		accordance with latest BLDMAKE changes.
       
  4432 	11)	Moved ETIMR and T_DEVC to project E32TEST.
       
  4433 	12)	Removed all E*.REL files from GROUP directory and changed MNT.BAT so
       
  4434 		that MNT PUTREL looks for .REL files generated by BLDMAKE instead.
       
  4435 		Updated BLD.INF accordingly.
       
  4436 	13)	Changed #defines in the following files now that __MEIG__ is being used
       
  4437 		to mean __MARM__ and __MARM__ is being used to mean ARM CPU:
       
  4438 			INC\U32STD.H, INC\M32STD.H, PSRC\PS_PCCD.CPP,
       
  4439 			KCARM\KC_INT.CPP, DPEPOC\D_MEDINT.CPP, DPEPOC\D_MEDCRR.CPP,
       
  4440 			DPEPOC\D_MEDCRM.CPP, DPEPOC\D_MEDATA.CPP.
       
  4441 	14)	Removed EVALID.PL and EVALID.BAT from GROUP dir now that this version
       
  4442 		of EVALID is being released as part of E32TOOLP.
       
  4443 	15) Created directory \E32\BMEIG.  Moved .DEF files for the following
       
  4444 		projects from \E32\BMARM\ to \E32\BMEIG:
       
  4445 			EKERN, EPBUS, VARMCL, VARMP2, VARMPB, VARMPC, VARMPD.
       
  4446 	16)	Removed unnessary __XCON__ #defines and swapped them with __WINC__
       
  4447 		instead where necessary.
       
  4448 	17)	Removed XWSRV.MMP, XPBUS.MMP, XCONS.MMP, EXYIN.MMP and EKEYB.MMP - they
       
  4449 		were no longer required now that libraries can be built separately.
       
  4450 		Note that this means the import libraries must be built before building
       
  4451 		the other releasables because of the mutual imports between some E32
       
  4452 		Dlls.
       
  4453 	18)	Changed variant .MMP files to link to the respective variant versions
       
  4454 		of exyin.lib and ekeyb.lib now that exyin.lib and ekeyb.lib are no
       
  4455 		longer built as import libraries.
       
  4456 	19)	Removed WINS #defines from around the dummy export for the text window
       
  4457 		server so that it has a dummy export for other builds.  Frozen the dummy
       
  4458 		export in \E32\BMARM\EWSRV.DEF.
       
  4459 	20)	Removed export command from MNT.BAT and EXPORT.PL from group directory
       
  4460 		now that and equivalent command is provided by BLDMAKE.
       
  4461 	20)	CONSWINS.DEF, CONSMARM.DEF and CONSMISA.DEF are now exported to
       
  4462 		directory \EPOC32\Release\<Platform>\ rather than \EPOC32\Include.
       
  4463 	21)	Changed #defines in K32ADDR.H, U32STD.H, V32COG.H in accordance with
       
  4464 		makmake #define changes for __SROS__ and __SCGA__.
       
  4465 	22)	Adjusted BLD.INF so that kernel headers are exported to
       
  4466 		\EPOC32\Include\Kernel\ rather than \EPOC32\Include.  This means that
       
  4467 		any projects requiring the kernel headers will have to have
       
  4468 		\EPOC32\Include\Kernel added to the list of SYSTEMINCLUDE paths within
       
  4469 		their .MMP files.
       
  4470 	23)	Removed all .DEF files from the B<plat> directories which are now
       
  4471 		referenced in the BMARM directory.  Renamed BSROS BMROS and removed
       
  4472 		BSARM and BSCGA.
       
  4473 	24)	Added extra commands to MNT.BAT to copy edll.o and eexe.o from the MEIG
       
  4474 		release directories to the MARM ones pro tem, and to zip them up for
       
  4475 		MEIG, MAWD and MISA.
       
  4476 	25)	Changed rom.oby files in KBARM and KBSARM directories to incorporate
       
  4477 		changes resulting from the new way E32 is built.  A few changes in
       
  4478 		other rom.oby files may also be required.
       
  4479 	26)	Excluded Graham Asher's change to UMATH\UM_DTOR.CPP since they won't
       
  4480 		build in narrow variants.
       
  4481 	27)	Fixed up MEIG EKERN.DEF following Pete's DMedia changes.
       
  4482 	28)	Changed P::Print so that in release builds it uses Win32's
       
  4483 		OutputDebugString() rather than putting up a message box.  This has
       
  4484 		always been the behaviour in debug builds.  As a result of this change,
       
  4485 		test output will no longer appear in an annoying sequence of message
       
  4486 		boxes.
       
  4487 
       
  4488 7)	Pete
       
  4489 	1) 	Modification to DMediaDriver class so a media driver
       
  4490 		can be configured to allow read/write/format requests simultaneously
       
  4491 		with each other. By default, a driver only allows one
       
  4492 		request to be outstanding at any time but by setting the
       
  4493 		DMediaDriver member iFlags to KMediaDrvMultipleReqs,
       
  4494 		a read/write and format command may each be outstanding at a given
       
  4495 		time.
       
  4496 		\ksrc\ks_locd.cpp
       
  4497 		\inc\k32std.h
       
  4498 		\inc\k32std.inl
       
  4499 
       
  4500 Version 1.02.186
       
  4501 ================
       
  4502 (Made by Malcolm, 21st May 1999)
       
  4503 
       
  4504 Petteri
       
  4505 	1)	Added a new variant (Varmca) for the Rev.A of the new Cirrus
       
  4506 		Logic 711X evaluation board. This port is not complete: digitiser
       
  4507 		driver, most of ADC code, second serial port and some other
       
  4508 		small things are missing. Also, the board is still evolving.
       
  4509 
       
  4510 		New files added:
       
  4511 		Varmca\Va_c6700.cpp	Group\Cakdca.mmp
       
  4512 		Varmca\Va_com1.cpp	Group\Cakyca.mmp
       
  4513 		Varmca\Va_com2.cpp	Group\Caxyca.mmp
       
  4514 		Varmca\Va_hw.cpp	Group\Dasnca.mmp
       
  4515 		Varmca\Va_kdata.cpp	Group\Datxca1.mmp
       
  4516 		Varmca\Va_keyb.cpp	Group\Datxca2.mmp
       
  4517 		Varmca\Va_pbus.cpp	Group\Varmca.mmp
       
  4518 		Varmca\Va_sdrv.cpp	Inc\V32armca.h
       
  4519 		Varmca\Va_spi.cpp
       
  4520 		Varmca\Va_xyin.cpp
       
  4521 		Varmca\Va_std.h
       
  4522 
       
  4523 		Old files modified:
       
  4524 		Group\Bmarm.prj
       
  4525 		Group\Emarm.rel
       
  4526 		Kbarm\E32var.iby
       
  4527 		Kbarm\Rom.oby
       
  4528 		Kbarm\Setvars.cmd
       
  4529 		( and also:
       
  4530 		Kamad\Ka_linda.cpp
       
  4531 		Inc\V32linda.h )
       
  4532 
       
  4533 Jason
       
  4534 	1)	MISA Idle code fix.
       
  4535 		\kaisa\ka_utl.cpp
       
  4536 		\kcarm\kc_int.cpp
       
  4537 		\kbisa\sa1100.s
       
  4538 
       
  4539 Jonathan
       
  4540 	1)	Added Protea, Cassius and inc{c|k} files to distrib.txt files
       
  4541 		bmarm\distrib.txt
       
  4542 		bmisa\distrib.txt
       
  4543 		inc\distrib.txt
       
  4544 		group\distrib.txt
       
  4545 
       
  4546 Version 1.02.185
       
  4547 ================
       
  4548 (Made by Malcolm, 14th May 1999)
       
  4549 
       
  4550 Malcolm et al.
       
  4551 	1)  Prepared E32 for automatic building and testing.  Each kbXXX
       
  4552 		directory should now have the following files:
       
  4553 
       
  4554 		rom.cmd that takes an .oby file as the first parameter (and
       
  4555 		then the standard build/variant as before).
       
  4556 		test.oby that builds a rom with all the test code for that
       
  4557 		platform.  Test.oby should also include batch files called
       
  4558 		z:\test\e32auto.bat, z:\test\f32auto.bat and
       
  4559 		z:\test\allauto.bat that run respectively the e32, f32 and all
       
  4560 		tests for this platform.  For now, these are taken from
       
  4561 		\e32test\group./
       
  4562 		bld.cmd that creates udeb and urel roms, given that all of
       
  4563 		e32, f32 and the test suites have been built.  Typically this
       
  4564 		makes the bootstrap code then calls rom.cmd.
       
  4565 
       
  4566 		This change has been implemented for misa, marm, mcga & sros.
       
  4567 
       
  4568 
       
  4569 Alastair
       
  4570 	1)	Changed RDebug::Print for WINS/WINC so that output is appended to file
       
  4571 		EPOCWIND.OUT in the PC's temporary directory, as well as being sent
       
  4572 		where it is currently.  In UNICODE builds, the output is converted to
       
  4573 		UTF-8 before being appended to the file.
       
  4574 	2)	Changed WINC Console output under UNICODE builds so that it can be
       
  4575 		redirected to a file.  The output is converted to UTF-8 before being
       
  4576 		sent to the console.
       
  4577 
       
  4578 Simon
       
  4579 	1)	Merged in Cogent
       
  4580 		\kacga\*
       
  4581 		\bmcga\*
       
  4582 		\vcgac1\*
       
  4583 		\wsrc\wd_vgacga.cpp
       
  4584 		\wsrc\wd_vtcgakb.cpp
       
  4585 
       
  4586 	2)	Modified coproc related bits for ARM4 on Cogent
       
  4587 		\kcarm\kc_sched
       
  4588 		\kcarm\kc_mmu
       
  4589 
       
  4590 Petteri
       
  4591 	1)  Minor Linda screen and keyboard related changes.
       
  4592 		\kamad\ka_ini.cpp
       
  4593 		\kamad\ka_linda.cpp
       
  4594 		\inc\v32linda.h
       
  4595 		\varmlb\va_hw.cpp
       
  4596 		\varmlb\va_keyb.cpp
       
  4597 		\wsrc\wd_mad.cpp
       
  4598 
       
  4599 
       
  4600 Malcolm
       
  4601 	1)  Changes to mnt.bat.  Directories are now enummerated in
       
  4602 		dir.prj rather than being hard-coded into mnt.bat all over the
       
  4603 		place.  Two perl helper scripts have been created to interface
       
  4604 		to PVCS.
       
  4605 		\group\mnt.bat
       
  4606 		\group\dopvcs.pl
       
  4607 		\group\lock.pl
       
  4608 		\group\dir.prj
       
  4609 
       
  4610 
       
  4611 Petteri
       
  4612 	1)  Minor changes in order to tidy up DisplayOn()
       
  4613 		\kamad\ka_ini.cpp
       
  4614 		\inc\v32linda.h
       
  4615 		\varmlb\va_hw.cpp
       
  4616 		\wsrc\wd_mad.cpp
       
  4617 
       
  4618 
       
  4619 Petteri
       
  4620 	1)  Speed improvements to Linda screen driver.
       
  4621 		\wsrc\wd_mad.cpp
       
  4622 
       
  4623 	2)  Modified keyboard related files so that Linda keyboard
       
  4624 		driver works properly.
       
  4625 		\varmlb\va_keyb.cpp
       
  4626 		\varmlb\va_kdata.cpp
       
  4627 		\group\cakylb.mmp
       
  4628 
       
  4629 
       
  4630 Malcolm
       
  4631 	1)  Upgraded the MNT DISTRIB command to cope with per-file
       
  4632 		inclusion/exclusion.  Now uses perl to parse distrib.txt
       
  4633 		files.  These files have changed in format.  The format is
       
  4634 		now lines of the format:
       
  4635 		<filename>   <licensee>
       
  4636 		If the filename is Default, then all the files in this
       
  4637 		directory will be included.  If the licensee text contains
       
  4638 		"Epoc" then this is part of the generic release.
       
  4639 		To always exclude a file I suggest using a licensee of "Never".
       
  4640 		Comments can be started with the # character and last to the
       
  4641 		end of the line. \inc\distrib.txt and \group\distrib.txt files
       
  4642 		are good examples.
       
  4643 		The distrib.txt files themselves are never included.
       
  4644 		At the moment, this script requires pkzip version 2.5, called
       
  4645 		pkzip25 to be in the path.  This is due to limitations with
       
  4646 		the previous versions of pkzip.
       
  4647 		\group\distrib.pl
       
  4648 		\group\mnt.bat
       
  4649 		\*\distrib.txt
       
  4650 
       
  4651 	2)  Fixed single process scheduler bug
       
  4652 		\kcarm\kc_sched.cpp
       
  4653 
       
  4654 	3)	Merged in Simon's automatic test changes.
       
  4655 		\usrc\us_test.cpp
       
  4656 		\inc\e32test.h
       
  4657 
       
  4658 	4)  Added export.pl that will export E32 headers appropriately.
       
  4659 		\group\export.pl
       
  4660 
       
  4661 
       
  4662 Petteri
       
  4663 	1)  Added text screen driver for Linda
       
  4664 		\wsrc\wd_mad.cpp
       
  4665 		\group\edisp.mmp
       
  4666 
       
  4667 
       
  4668 Malcolm
       
  4669 	1)  Removed all the li.prj files & moved the distribution comments
       
  4670 		to distrib.txt files. Updated mnt.bat to deal with this.
       
  4671 		\group\mnt.bat
       
  4672 		*\li.prj
       
  4673 		*\distrib.txt
       
  4674 
       
  4675 	2)  Boilerplated Roxette sources
       
  4676 		\vrosr1\*
       
  4677 		\karos\*
       
  4678 		\kbros\*
       
  4679 
       
  4680 
       
  4681 Malcolm
       
  4682 	1) 	Major reorganisation of the E32 tree.  Tags: Pre-ER5u-Reorg is
       
  4683 		before this, Post-ER5u-Reorg is after it.
       
  4684 
       
  4685 		What was upmarm and upmx86 has had the common parts extracted
       
  4686 		into upepoc and the architecture dependant bits moved to
       
  4687 		ucmarm and ucmx86 respectively.
       
  4688 		\upmarm\*
       
  4689 		\upmx86\*
       
  4690 		\ucmarm\*
       
  4691 		\ucmx86\*
       
  4692 		\upepoc\*
       
  4693 		group\ekern.mmp
       
  4694 		group\eexe.mmp
       
  4695 		group\xcons.mmp
       
  4696 
       
  4697 	2)	Ucdt has been moved over to Usrc
       
  4698 		\ucdt\*
       
  4699 		\usrc\*
       
  4700 		group\euser.mmp
       
  4701 
       
  4702 	3) 	Roxette (SROS) has been merged in
       
  4703 		\karos\*
       
  4704 		\kbros\*
       
  4705 		\vrosr1\*
       
  4706 		\bsros\*
       
  4707 		group\ekern.mmp
       
  4708 		group\bsros.prj
       
  4709 		group\esros.rel
       
  4710 		group\euser.mmp
       
  4711 		group\ekern.mmp
       
  4712 		group\edisp.mmp
       
  4713 		group\eexe.mmp
       
  4714 		group\ekdata.mmp
       
  4715 		group\inck.rel
       
  4716 		group\vrosr1.mmp
       
  4717 		wsrc\wd_rose*
       
  4718 
       
  4719 	4)	Removed EPBUS reference in epbus
       
  4720 		group\epbus.mmp
       
  4721 
       
  4722 	5)	Added support for screen dimension keys (flip keys)
       
  4723 		inc\e32keys.h
       
  4724 		inc\e32panic.h
       
  4725 		usrc\us_evnt.cpp
       
  4726 
       
  4727 	6) 	Changes to timers to disambiguate periodic and locked timers for the
       
  4728 		lower layers by encoding a value in the repeat field
       
  4729 		ksrc\ks_tim.cpp
       
  4730 		inc\k32std.h
       
  4731 
       
  4732 	7) 	New function UserSvr::RomHeaderAddress(), replacing the use of
       
  4733 		KRomLinAddr	constant.  This is so the F32 is single-process agnostic.
       
  4734 		All address constants have been moved to k32addr.h
       
  4735 		inc\k32addr.h
       
  4736 		kpepoc\kp_ini.cpp
       
  4737 		inc\u32std.h
       
  4738 		inc\e32rom.h
       
  4739 		inc\e32svr.h
       
  4740 		inc\m32hal.h
       
  4741 
       
  4742 
       
  4743 Jason
       
  4744 	1)	Added debug monitor for MISA
       
  4745 		\KAISA\KA_MON.CPP
       
  4746 		\INC\M32STD.H
       
  4747 		\GROUP\EKERN.MMP
       
  4748 
       
  4749 Morgan
       
  4750 	1)	Upgraded Dma abstraction to cope with transfers across page boundaries
       
  4751 		\INC\M32STD.H
       
  4752 		\KAMAD\KA_DMA.CPP
       
  4753 		\KPEPOC\KP_DMA.CPP
       
  4754 	2)	Fixed function prototype for DPowerHandler::SetRequirement(TUint &aState)
       
  4755 		\inc\k32power.h
       
  4756 		\ksrc\ks_power.cpp
       
  4757 		\b*\ekern*.def
       
  4758 	3)	Implemented Hal::ModifyLedMask()
       
  4759 		\kpehal\kph_inf.cpp
       
  4760 	4)	Fixed key translator to use User::LowerCase instead of User::Fold
       
  4761 		for EMatchKeyCaseInsens
       
  4762 		\wsrc\ky_tran.cpp
       
  4763 	5)	Merged in changes for MMAD
       
  4764 		\inc\u32std.h
       
  4765 		\inc\v32linda.h
       
  4766 		\kbmad\*
       
  4767 		\kamad\*
       
  4768 		\varmlb\*
       
  4769 	6)	Corrected remote serial screen cursor positioning
       
  4770 		\wsrc\wd_vt100.cpp
       
  4771 	7)	Fixed mismatched #defines of
       
  4772 			__CPU_SPLIT_TLBS and __CPU_SPLIT_TLB
       
  4773 			__CPU_CACHE_CONFIGURABLE and __CPU_CACHE_SELECTABLE
       
  4774 		\kcarm\kc_mmu.cpp
       
  4775 	8)	Removed NotBuffered attribute from the read-only EKernelCode and
       
  4776 		EUserCode chunks
       
  4777 		\kcarm\kc_mmu.cpp
       
  4778 	9)	Added Platform dependent constants for page table attributes
       
  4779 		\kcarm\kc_mmu.cpp
       
  4780 	10) Integrated the debug monitor into MMAD
       
  4781 		\kamad\ka_mon.cpp
       
  4782 		\inc\m32std.h
       
  4783 	11) Uncommented the two lines of code that flush the D-Cache on
       
  4784 		split cache processors
       
  4785 		\kcarm\kc_sched.cpp
       
  4786 		\kcarm\kc_mmu.cpp
       
  4787 	12) More bug fixes for MMAD
       
  4788 		\kamad\ka_linda.cpp
       
  4789 	13) Implemented Rom groping in the bootstrap
       
  4790 
       
  4791 
       
  4792 Jonathan
       
  4793 	1)	Fixed fix for EDN430762 in 170; trap handler was not being correctly
       
  4794 		zeroed.
       
  4795 		kpwins\kp_utl.cpp
       
  4796 	2)	Reinstated unused functions SetLine and GetLine cos they're pure
       
  4797 		virtual in the base class and so need to exist.
       
  4798 		wsrc\wd_wins.cpp
       
  4799 	3)	Made RTest::Getch() pause for input even in non-manual mode.
       
  4800 		usrc\us_test.cpp
       
  4801 
       
  4802 Version 1.02.181
       
  4803 ================
       
  4804 (Made by Pete, 5th May 1999)
       
  4805 
       
  4806 1)	Pete
       
  4807 	1)	Added the (exported) function:-
       
  4808 			TBusLocalDrive::Format(TInt aPos,TInt aLength)
       
  4809 		so that it is possible to format just a part of a
       
  4810 		drive.
       
  4811 	2) 	Changed the local drive allocation for Brutus/WINS as follows:-
       
  4812 
       
  4813 		Local-Drive-Num	Assignment
       
  4814 		(Let-EPOC/WINS)
       
  4815 		0 (C:/Y:)	EFixedMedia0 (Internal Ram)
       
  4816 		1 (D:/X:)	ERemovableMedia0 (1st partition on PC Card Socket0)
       
  4817 		2 (E:)		ERemovableMedia1 (1st partition on PC Card Socket1)
       
  4818 		3 (F:)		ERemovableMedia0 (2nd partition on PC Card Socket0)
       
  4819 		4 (G:)		ERemovableMedia1 (2nd partition on PC Card Socket1)
       
  4820 		5 (H:)		ERemovableMedia0 (3rd partition on PC Card Socket0)
       
  4821 		6 (I:)		ERemovableMedia1 (3rd partition on PC Card Socket1)
       
  4822 		7 (J:)		Not used
       
  4823 		8 (K:/W:)	EFixedMedia1 (Flash File System)
       
  4824 
       
  4825 	3) 	Backed out the change made in V180 to TTrapK::Trap() in kpwins\kp_utl.cpp as
       
  4826 		this is suspected to be causing problems in WINS Unicode builds.
       
  4827 	4) 	Fixed a problem with the function ImpHal::Idle() on ISA builds
       
  4828 		(KAISA\KA_UTL.CPP).
       
  4829 	5)	Fixed a problem with EPBUS.DLL which resulted in an exception
       
  4830 		if an attempt was made to open a media driver for a peripheral
       
  4831 		bus device (ie derived from DPBusMediaDriver) on an
       
  4832 		internal drive. This typically only causes a problem on machines
       
  4833 		which have a local drive designated as an internal drive in addition
       
  4834 		to the standard Internal Ram drive (ie EFixedMedia1). This isn't a
       
  4835 		problem on Snowdrop/Protea. There generally isn't a problem on the
       
  4836 		internal Ram drive (ie EFixedMedia0) since the IRAM media driver
       
  4837 		(MEDINT.PDD) opens successfully on this device before any drivers for
       
  4838 		removable devices. (It would have caused a problem if ATA media driver was
       
  4839 		loaded before the IRAM media driver).
       
  4840 	6)	Modified E32VAR.IBY and ROM.OBY in \KBISA to allow ISA UNICODE rom's
       
  4841 		to be built successfully.
       
  4842 	7)	Added a LFFS media driver (MEDLFS.PDD) to the WINS and Brutus platforms.
       
  4843 		The WINS version emulates a media device by performing reads/writes to the
       
  4844 		file <temp>LFSLDRV.BIN (e.g. C:\TEMP\LFSLDRV.BIN). The Brutus version uses
       
  4845 		2Mb of flash in Static Memory bank 1 and thus requires a pair of 1M x 16 flash
       
  4846 		chips to be fitted to this bank. These devices aren't fitted on a standard Brutus
       
  4847 		rack as shiped from Intel. The Brutus media driver is a read-only implementation
       
  4848 		in this release.
       
  4849 
       
  4850 Version 1.02.180
       
  4851 ================
       
  4852 (Made by Pete, 29th April 1999)
       
  4853 
       
  4854 	This is an ER5U release
       
  4855 
       
  4856 1)	Jonathan
       
  4857 	1)	Fixed EDN430762 (E32TEST T_REG.EXE fails in WINS REL).
       
  4858 		TTrapK::Trap() in kpwins\kp_utl.cpp mixed assembler and C++ and was
       
  4859 		being broken by MSVC5's aggressive optimisations when built for
       
  4860 		WINS/WINC REL/UREL. The fixed code is still vulnerable to compiler
       
  4861 		changes because it still contains one C++ statement and could
       
  4862 		therefore be confused by the compiler setting up a stack frame or
       
  4863 		trashing the cx register.
       
  4864 		TTrap::Trap() in upwins\up_trp.cpp and upmx86\up_trp.cpp would contain
       
  4865 		the same problem but we can't build the user library under MSVC5 with
       
  4866 		optimisations enabled for other reasons so the problem does not
       
  4867 		appear.
       
  4868 
       
  4869 2)	Pete
       
  4870 	1)	Modifications to Brutus variant (VISABA) to fix a problem with the PC Card
       
  4871 		interface CD signals on GPIO7 (socket1) and GPIO4 (socket0). These were being
       
  4872 		reconfigured to their alternate function (upper port of LCD interface) within
       
  4873 		the function Variant::DisplayOn().
       
  4874 	2) 	Change to the way the ISA PC Card Controller handles a media change interrupt so
       
  4875 		that it now queues a 20ms millisecond callback to handle switch debounce rather
       
  4876 		than doing this directly from the interrupt service routine.
       
  4877 	3) 	In the ISA PC Card Controller abstraction, removed some redundant functions calls
       
  4878 		called during media change and socket interrupt handling. These functions had been
       
  4879 		carried over from the MARM platform.
       
  4880 	4) 	Disabled idle mode for now in the ISA platform (ImpHal::Idle()). There appears to be a
       
  4881 		problem with PC Card IREQ interrupts (implemnted using GPIO edge triggered interrupt)
       
  4882 		bringing the machine out of idle such that the machine eventually hangs.
       
  4883 	5) 	Implemented a new Pc Card Controller to Variant interface for ISA platforms (TPcCardControllerIsaInterface
       
  4884 		in V32PCCDI.H). This includes the following new functions:-
       
  4885 			- const TDesC8& SocketIntSource(TSocket aSocket,TPccdEvent anEvent);
       
  4886 			- void InitSocketInt(TSocket aSocket,TPccdEvent anEvent);
       
  4887 			- void ClearSocketInt(TSocket aSocket,TPccdEvent anEvent);
       
  4888 		This is allows the socket interrupt implementation on ISA platforms to performed
       
  4889 		at the variant layer
       
  4890 
       
  4891 3)	Alex
       
  4892 	1)	Modifications to ISA bootstrap (which is really tailored for the reference Brutus
       
  4893 		platform) to support running code from RAM rather than FLASH. This means that images larger
       
  4894 		than 4Mb (the previous limit on this platform due to the size of the flash bank) can be
       
  4895 		handled. Use with E32UTILS REPROB V027.
       
  4896 
       
  4897 4)	Pete
       
  4898 	(inc\E32SVR.H)
       
  4899 		Modification to TLocalDriveCapsV2 to add the data member
       
  4900 		iEraseBlockSize. This is to support an F32 Flash File System.
       
  4901 
       
  4902 
       
  4903 Version 1.02.166
       
  4904 ================
       
  4905 (Made by Jonathan, 23rd February 1999)
       
  4906 
       
  4907 1)	Jason
       
  4908 	1)	Implemented Millisecond timer for MISA.
       
  4909 	2)  Made the ATA Media driver as part of the ROM for MISA.
       
  4910 
       
  4911 2)	Dennis
       
  4912 	1)	Replaced Snowdrop digitiser default calibration values with values
       
  4913 		supplied by Amazon.
       
  4914 	2)	Modified Windermere LCD controller Timing2 register setting as
       
  4915 		requested by Amazon.
       
  4916 	3)	Changed Snowdrop current consumption and battery threshold values
       
  4917 		to those supplied by Amazon.
       
  4918 
       
  4919 3)	Morgan
       
  4920 	1)	Replaced the code that stops the machine turning off if an absolute
       
  4921 		timer is due soon.
       
  4922 
       
  4923 4)	Jonathan & Co
       
  4924 	1)	Boilerplated source.
       
  4925 	2)	Removed historical epocfns.txt, sizes.txt, sizes.xls from .\group.
       
  4926 
       
  4927 5)	Alastair
       
  4928 	1)	Replaced hard-coded R: with %s% in MNT.BAT.
       
  4929 	2)	Changed MNT PUTSRC to use T:\Tools\Zip.exe rather than
       
  4930 		T:\Tools\PKZip.exe.
       
  4931 	3)	Changed MNT GETREL to get the WINC debugging releaseables for DEB and
       
  4932 		UDEB builds.
       
  4933 	4)	Removed non-existent V32ARMS1.H, V32SASIC.H and duplicate listing of
       
  4934 		K32POWER.H from \E32\INC\INCK.PRJ.
       
  4935 	5)	Removed non-existent D32FTIM.H, D32FTIM.INL and *.FRZ from
       
  4936 		\E32\INC\INCC.PRJ.
       
  4937 	6)	Added CONSWINS.DEF, CONSMARM.DEF and CONSMISA.DEF to \E32\INC\INCK.PRJ.
       
  4938 	7)	Removed CAKDP2 Series5 keyboard variants from EMARM.REL.
       
  4939 	8)	Removed ELOCL variants from EMARM.REL, EWINS.REL and EWINC.REL.
       
  4940 	9)	Moved \E32\INC\INCC.PRJ to \E32\GROUP\INCC.REL and \E32\INC\INCK.PRJ to
       
  4941 		\E32\GROUP\INCK.REL and changed MNT.BAT so that these .REL files are
       
  4942 		treated in the same way as all the other .REL files.
       
  4943 	10)	Updated validation process to use William's new EVALID.BAT (added to
       
  4944 		E32\Group pro tem.).
       
  4945 	11)	Removed empty file \E32\Inc\M32hal.inl.
       
  4946 
       
  4947 
       
  4948 Version 1.02.165
       
  4949 ================
       
  4950 (Made by Pete, 16th February 1999)
       
  4951 
       
  4952 1)	Jason
       
  4953 	1)	Removed fixed Rom address from MMU initialisation bootstrap code.
       
  4954 
       
  4955 2)	Morgan
       
  4956 	1)	Fix for defect EDN964446 to prevent WINS standby going re-entrant.
       
  4957 
       
  4958 3)	Mark
       
  4959 	1)	Implemented PC card driver for MISA.
       
  4960 
       
  4961 4)	Dennis
       
  4962 	1)	Applied Jason Robinson's patch for defect EDN061952 (cannot force a
       
  4963 		cold reset by holding down both shift keys).
       
  4964 	2)	Fixed problem EDN106813 (snowdrop pathological failure mode).
       
  4965 
       
  4966 5)	Pete
       
  4967 	1)	Added range checking to the Pc Card h/w chunk allocation functions
       
  4968 		(derived versions of RPccdChunkBase::CreateL()) in MARM, MISA and MAWD
       
  4969 		builds to prevent this allocating memory chunks beyond the physical
       
  4970 		region assigned to the Pc Card memory.
       
  4971 
       
  4972 
       
  4973 Version 1.02.164
       
  4974 ================
       
  4975 (Made by Jonathan, 10th February 1999)
       
  4976 
       
  4977 1)	Jonathan
       
  4978 	1)	Disabled the crash debug monitor.
       
  4979 	2)	Fixed problem EDN941329 "RThread::GetRamSizes() Crashes the Kernel" by
       
  4980 		making RThread::GetRamSizes() return 0 for the heap size in combined
       
  4981 		stack+heap chunks.
       
  4982 	3)	Applied Dennis' fix for EDN157244 "Process creation can leak memory"
       
  4983 		by promoting DPlatProcess::FirstThread() to DProcess::FirstThread()
       
  4984 		and checking for case where OOM occurs after thread creation.
       
  4985 
       
  4986 2)	Dennis
       
  4987 	1)	Fixed problem EDN256123 (adding a thread to a dead process crashes the
       
  4988 		kernel). Create empty process handles array after deleting the
       
  4989 		original one, and when creating a new thread check that the owning
       
  4990 		process is not dead.
       
  4991 	2)	COM061952: Put in Jason Robinson's bootstrap fix for Windermere so
       
  4992 		that cold resets (both shift keys down) should now work on Snowdrop.
       
  4993 
       
  4994 3)	Morgan
       
  4995 	1)	User::LoadLogicalDevice and User::LoadPhysicalDevice now supply
       
  4996 		match-Uid's KLogicalDeviceDriverUid and KPhysicalDeviceDriverUid on
       
  4997 		their calls to RLoader::LoadLibrary
       
  4998 
       
  4999 4)	Pete
       
  5000 	1)	Added the function TPBusCallBack::Clear() (exported from EPBUS.DLL) to
       
  5001 		clear the source of a Peripheral Bus event (e.g. IREQ interrupt from
       
  5002 		PC card). This is a 'generic' version of the temporary fix applied in
       
  5003 		E32-162 for defect 'CF Card interrupts being missed on Snowdrop
       
  5004 		machines'. Also, removed the functions
       
  5005 		DPcCardController::EnableEvent() and DPcCardController::DisableEvent()
       
  5006 		and replaced them with TPBusCallBack::Enable() and
       
  5007 		TPBusCallBack::Disable() respectively.
       
  5008 	2)	Added the functions DPcCardController::PwrUpProfile() and
       
  5009 		DPcCardController::SetPwrUpProfile() to read/modify the power up
       
  5010 		profile of the PC Card Controller (ie time reset applied, pause after
       
  5011 		card becomes ready, timeout period when waiting for card to become
       
  5012 		ready).  Removed the parameter 'aResetProfile' from
       
  5013 		DPeriphBusController::PowerUpBus(), DPcCardController::PowerUpCard(),
       
  5014 		and DPcCardController::RestoreCardPower() as this information is now
       
  5015 		superfluous.
       
  5016 	3) 	Increased synchronous busy timeout period on ARM ATA driver from 15mS
       
  5017 		to 20mS to support large Lexar CF cards.
       
  5018 	4) 	Enabled CF card rail (Vpc) monitoring in Snowdrop variant. Also
       
  5019 		modified this so that checking is performed periodically as long as
       
  5020 		the rail is on (in addition to once when first turned).
       
  5021 	5) 	Change to ARM ATA driver so it checks for 'card not busy' if it times
       
  5022 		out on a command. If the card isn't busy then it processes this as if
       
  5023 		it had received a normal card interrupt.
       
  5024 
       
  5025 
       
  5026 Version 1.02.163
       
  5027 ================
       
  5028 (Made by Pete, 3rd February 1999)
       
  5029 
       
  5030 1) Morgan
       
  5031 	1)	Fixed a problem that was causing Dll entrypoints to be called
       
  5032 		with EDllProcessAttach twice.
       
  5033 
       
  5034 2) Jason
       
  5035 	1)	Restored the RAM drive to MISA.
       
  5036 
       
  5037 3) Dennis
       
  5038 	1)	Fixed problem EDN591058 (remote thread write to end of chunk can
       
  5039 		fail). Use sizeof(TDes8) instead of sizeof(TBuf8<1>)-1 for checking
       
  5040 		to avoid alignment problems.
       
  5041 	2)	Fixed problem EDN468376 (RHeap::Compress can leave heap
       
  5042 		corrupted). In the situations where a free cell header would have
       
  5043 		been chopped in half, an extra page of RAM is now left allocated to
       
  5044 		the heap.
       
  5045 	3)	Fixed problem EDN102617 (undefined instruction exception kills the
       
  5046 		kernel). Modified undefined instruction handler to run Exc::Dispatch
       
  5047 		in mode_und rather than mode_abt.
       
  5048 	4)	Modified super page signature so that it includes the E32 version
       
  5049 		number. This means that when a machine is reprogrammed to a
       
  5050 		different version of E32, a cold reset will be forced when the
       
  5051 		machine is first booted even if the user attempts to do a warm
       
  5052 		reset.
       
  5053 
       
  5054 4)	Jonathan
       
  5055 	1)	Fixed problem EDN671244 (RDebug::ReadMemory can reset the machine)
       
  5056 		by trapping calls from Debug::DebugFunction to Debug::ReadMemory and
       
  5057 		Debug::WriteMemory.
       
  5058 	2)	Fixed problem EDN471656 (underlying cause of which was RAM disk
       
  5059 		size not being a multiple of page size) by applying Andrew/Pete's
       
  5060 		modified fix.
       
  5061 
       
  5062 5)	Pete
       
  5063 	1)		Renamed current implementation of the class TLocalDrive as
       
  5064 		TBusLocalDrive. Also, changed TBusLocalDrive::Caps() from the form:-
       
  5065 			TInt Caps(TLocalDriveCaps &anInfo);
       
  5066 		to
       
  5067 			TInt Caps(TDes8& anInfo);
       
  5068 		with the later taking a TLocalDriveCapsBuf.
       
  5069 			Re-introduced a TLocalDrive class which is BC with the E32-114
       
  5070 		version. The TLocalDrive class will be maintained to support disk
       
  5071 		utilities which need a level of direct disk access. However,
       
  5072 		TLocalDrive functions: Enlarge(), ReduceSize() and Format() now
       
  5073 		return KErrNotSupported. TBusLocalDrive is intended to be used only
       
  5074 		by F32 and there is no BC commitment with this. (Fixes EDN545357).
       
  5075 	2)	Added EPBUS.MAP to MARM,MISA,MAWD release files.
       
  5076 	3)	Modification to prevent CF card from being powered down during a
       
  5077 		write operation when the machine is turned off. This involves a
       
  5078 		change to DPcCardController::PowerStandby() so that it waits a short
       
  5079 		period for any critical operation to complete. If still critical
       
  5080 		after that period then it goes ahead and powers down the sockets,
       
  5081 		but generates an emergency reset event so that clients can attempt to
       
  5082 		recover. (Fixes EDN201114).
       
  5083 	4)	Modification to IRAM media driver (EPOC Platform) so that when it is
       
  5084 		first mounted, it takes its initial size directly from the super
       
  5085 		page rather than the IRAM chunk size (which is in multiples of a
       
  5086 		page size).
       
  5087 
       
  5088 
       
  5089 Version 1.02.162
       
  5090 ================
       
  5091 (Made by Morgan, 27th January 1999)
       
  5092 
       
  5093 1) Dennis
       
  5094 	1)	Fixed problem EDN153887 (using infra-red lowers RS232 RTS line) -
       
  5095 		modified VAWDB1\VA_COM1.CPP to ensure that UART1 SIR enable bit is
       
  5096 		always cleared.
       
  5097 	2)	Store garbage values in K::SvThread and K::SvProcess on completion of
       
  5098 		a kernel server function to guard against inadvertent use of these in
       
  5099 		executive calls or DFCs.
       
  5100 	3)	Fixed problem EDN741588. Modified S::ChunkCompressAll() in KS_CHK.CPP
       
  5101 		so that it only attempts to compress the kernel heap if its critical
       
  5102 		section is not blocked.
       
  5103 	4)	Added extra command 'R' to crash debugger to print the values of all
       
  5104 		processor registers across all processor modes at the point where the
       
  5105 		debugger was entered.
       
  5106 
       
  5107 2) Jason
       
  5108 	1)	Restored link to MISA Idle code with-in the bootstrap.
       
  5109 	2)	MISA DRAM initialisation made to match the documentation.
       
  5110 
       
  5111 3) Jonathan
       
  5112 	1)	Added missing "Distribution:" comments to PSRC\LI.PRJ and
       
  5113 		KBAWD\LI.PRJ. Modified "mnt check" to check that all LI.PRJs contain
       
  5114 		"Distribution:" comments.
       
  5115 	2)	Added new "mnt distrib" verb for zipping up a copy of E32 source for
       
  5116 		distribution to a named licensee. This verb is intended to be used
       
  5117 		on a clean freshly-got copy of the source.
       
  5118 		"mnt distrib acme" will produce \E32-acme.zip for acme.
       
  5119 		"mnt distrib generic" will produce an unencumbered \E32-generic.zip.
       
  5120 
       
  5121 4) Pete
       
  5122 	1)	Fixed EDN590829 (CF Card interrupts being missed on snowdrop
       
  5123 		machines).  Fixed by clearing the interrupt directly from the media
       
  5124 		driver interrupt callback rather than relying on it to be cleared by
       
  5125 		the PC Card controller before the callback.  This affects CF cards
       
  5126 		which 'claim' to support pulse mode interrupts but actually seem to
       
  5127 		implement level mode interrupts.
       
  5128 
       
  5129 
       
  5130 Version 1.02.161
       
  5131 ================
       
  5132 (Made by MarkD, 19 January 1999)
       
  5133 
       
  5134 1) Dennis
       
  5135 	1)	New Snowdrop digitiser and SPI code from Mark Ball.
       
  5136 	2)	Battery low interrupt now disables UART and Codec interrupts on
       
  5137 		EIGER to prevent watchdog death due to permanently asserted
       
  5138 		interrupt from UART when power is removed abruptly.
       
  5139 	3)	Reinstated __COMMS_MACHINE_CODED__ in VA_COM1.CPP for P2 and PD
       
  5140 		variants, after fixing problem caused by hard-coded vtable offset.
       
  5141 
       
  5142 2) Pete
       
  5143 	1)	Fixed two problems with the ATA command timeout
       
  5144 		implementation on the ARM ATA driver. (The timeout catches
       
  5145 		situations where a request is made on the card which ought to be
       
  5146 		signalled by an interrupt from the card when complete, but where the
       
  5147 		card fails to generate an interrupt):-
       
  5148 			a) Changed to use a ticklink rather than a
       
  5149 		TMilliSecondCallBack to implement the timeout.
       
  5150 			b) Fixed a problem where the timeout could be requeued
       
  5151 		before the previous timeout had completed.
       
  5152 	2) 	Increased synchronous busy timeout period on ARM ATA driver from
       
  5153 		8mS to 15mS to support KingMax CF cards.
       
  5154 	3) 	Modification to function DMediaDriver::RequestSetup()
       
  5155 		so it now returns KErrInUse if the data member iReqStat isn't NULL.
       
  5156 		This prevents the possibility of more than one request at a time on a
       
  5157 		single media driver.
       
  5158 	4) 	Stopped releasing WINS .BMP files (ie killed SWINS.REL).
       
  5159 
       
  5160 3) Morgan
       
  5161 	1)	Turned off emulation of the WINS backlight
       
  5162 
       
  5163 
       
  5164 Version 1.02.160
       
  5165 ================
       
  5166 (Made by Jason, 12th January 1999)
       
  5167 
       
  5168 1) Mark
       
  5169 	1) 	Fixed a problem with MISA such that the screen wasn't being turned
       
  5170 		on.
       
  5171 
       
  5172 2) Dennis
       
  5173 	1)	Added kernel crash debugger to MARM and MAWD builds. When a kernel
       
  5174 		fault occurs, the debugger will start instead of the machine just
       
  5175 		restarting.  The crash debugger is enabled by compiling with
       
  5176 		__ENABLE_DEBUG_MONITOR__ defined in M32STD.H.
       
  5177 	2)	Got the C++ build going again. Compiling with
       
  5178 		__MINIMUM_MACHINE_CODE__ defined in U32STD.H will result in a build
       
  5179 		with all non-essential machine code removed. All tests pass on EIGER
       
  5180 		in debug and release builds.
       
  5181 	3)	Assembler-coded most TWind functions (KE_WIND.CPP).
       
  5182 	4)	Made RPointerArray<T>::Count() and RPointerArray<T>::Find*() const.
       
  5183 	5)	Added check in svProcessTerminate in KS_SVR.CPP so that calling
       
  5184 		RProcess().Terminate() does not crash the kernel.
       
  5185 
       
  5186 3) Jason
       
  5187 	1 )	MISA five layer split done created \e32\kaisa\ removed \e32\keisa\.
       
  5188 
       
  5189 4)	Morgan
       
  5190 	1)	Added Dll::FileName() which will return the drive, path, and filename
       
  5191 		of the library it is called from.  (Added UserSvr::DllFileName and
       
  5192 		associated EXEC functions to support this).  Dll's that exist on the
       
  5193 		ROM drive and have not been RLibrary::Load()ed will return only the
       
  5194 		drive, (ie. "Z:").
       
  5195 	2)	Fixed bugs in LoadLogicalDevice and LoadPhysicalDevice that was causing
       
  5196 		unbalanced calls to the entrypoint of drivers (with EProcessDetatch and
       
  5197 		EThreadAttach).
       
  5198 	3)	Removed cleanup code from user side code RLoader::LoadLibrary.  Cleanup
       
  5199 		of half loaded dll's is now performed loader side as it should be.
       
  5200 	4)	Fixed a problem with switch-off-on-case-close.
       
  5201 	5)	S::LoadLibraryExact now creates a handle into the Loader thread rather
       
  5202 		than into the loading client.  DLibrary::LoadedL transfers handles and
       
  5203 		created dependencies as required.  See Note F32 126.2.2
       
  5204 
       
  5205 
       
  5206 Version 1.02.159
       
  5207 ================
       
  5208 (Made by Pete, 21st December 1998)
       
  5209 
       
  5210 THIS RELEASE OF E32 REQUIRES F32 125
       
  5211 
       
  5212 1) Jonathan
       
  5213    1)	Added TLanguage enums { ELangTaiwanChinese, ELangHongKongChinese,
       
  5214 		ELangPrcChinese, ELangJapanese, ELangThai }.
       
  5215 
       
  5216 2) Morgan
       
  5217 	1)	Removed old static power functions that are no longer used from
       
  5218 		classes P, K, and ImpPsu.
       
  5219 	2)	Removed TKeyboard::SwitchOn() and TXYInput::SwitchOn().  And for those
       
  5220 		variants that required it, upgraded the keyboards and digitisers to be
       
  5221 		first class power handlers.
       
  5222 	3)	Changed KLogicalDeviceDriverUid for Unicode and Narrow builds because
       
  5223 		the Ldd interface has changed.  This change stops old device drivers
       
  5224 		loading on the new kernel.
       
  5225 	4)	Uniquely identified each architecture of the kernel with a Uid.  This
       
  5226 		change stops libraries that link to the kernel from loading on the
       
  5227 		wrong architecture.
       
  5228 
       
  5229 3) MarkD
       
  5230 	1)	Performed the PC Card reorganisation for MISA.
       
  5231 	2) 	Fixed a problem in KEISA\KE_INI where the requested video chunk size wasn't
       
  5232 		rounded to page size.
       
  5233 	3)	Added a serial driver for Brutus using serial ports 1 (VISABA\VI_COM1.CPP)
       
  5234 		and 3 (VISABA\VI_COM2.CPP).
       
  5235 
       
  5236 4) Alastair
       
  5237 	1)	Fixed ER5 defect EDN381842 "WINS 'large' fascia problem under Win95/98".
       
  5238 		If not running under Windows_NT SetupEmulatorPaths() function in upwins\up_path.cpp
       
  5239 		takes account of the fact that Win32 GetModuleFileName() will report a full path
       
  5240 		rather than a virtual path if the Emulator is running on a subst'ed drive from a
       
  5241 		DOS prompt.
       
  5242 
       
  5243 5) Petteri
       
  5244 	1)	Changes to VARMCL variant to fully enable the PC Card Controller. All PC Card tests
       
  5245 			now pass on this variant.
       
  5246 
       
  5247 6) Dennis
       
  5248 	1)	Merged in more Amazon changes to Windermere port.
       
  5249 	2)	Modified Plat::ScreenInfo for Windermere to return the address of the screen RAM
       
  5250 		bitmap rather than the palette.
       
  5251 	3)	Fixed a bug in the text window server introduced in 158 which stops pointer drag
       
  5252 		from working.
       
  5253 
       
  5254 7) Pete
       
  5255 	1)		Various changes to facilitates a better partitiioning of
       
  5256 		functions between EKERN and EPBUS and to allow ROMS to be built without an EPBUS
       
  5257 		component. Functions which previously called either TPBusCallBack or
       
  5258 		Kern::PBusController() in the indepedant layer have now been moved to the Asic
       
  5259 		layer:-
       
  5260 			Modification of class DPrimaryMedia into an Indepedent layer class
       
  5261 		DPrimaryMediaBase and a Asic layer class DPrimaryMedia.
       
  5262 			Modification of class DMediaChangeNotifier into an Indepedent layer class
       
  5263 		DMediaChangeNotifierBase and a Asic layer class DPrimaryMedia.
       
  5264 			Functions K::PowerUpPeriphBus(), K::BusDevPowerStatus() are now platform
       
  5265 		dependent (hence moved to class P). Also creation of the functions P::ForceMediaRemount(),
       
  5266 		ImpHal::TotalSupportedBuses() and ImpHal::TotalSupportedDrives().
       
  5267 
       
  5268 Version 1.02.158
       
  5269 ================
       
  5270 (Made by Pete, 7th December 1998)
       
  5271 
       
  5272 1) Morgan
       
  5273 	1)	Bug fix for MARM and MAWD Emergency power down. (Screen not powered up
       
  5274 		after emergency power down).  Effects KEAWD\KE_POWER.CPP and
       
  5275 		KAEIG\KA_POWER.CPP
       
  5276 	2)	Pointer-switch-on now behaves as it did in E32(156).
       
  5277 	3)	Added MISA power model.
       
  5278 
       
  5279 2) Pete
       
  5280 	1) 		Split out the PC Card Controller from the kernel into a new
       
  5281 		component - EPBUS.DLL. The independant layer code, previously in \KSRC,
       
  5282 		files KS_PCCD.CPP and KS_PSOCK.CPP has been moved into \PSRC.
       
  5283 		The architecture layer code files have been renamed from K?_PCCD.CPP
       
  5284 		to P?_PCCD.CPP (e.g. \KAEIG\KA_PCCD.CPP renamed PA_PCCD.CPP).
       
  5285 			As far as the interface with the kernel is conserned, EPBUS.DLL
       
  5286 		is now a 'generic' Peripheral Bus Controller rather than specifically a
       
  5287 		PC Card Controller. Machines which have a MultiMedia card interface or
       
  5288 		a USB interface rather than a PC Card interface will have a Peripheral
       
  5289 		Bus Controller supplying services for these interfaces instead. This has
       
  5290 		involved quite extensive modifications to the classes which previously
       
  5291 		implemented the PC Card media change (DMediaChange) and supply voltage
       
  5292 		(TPcCardVcc) since large parts of these implementations are common for
       
  5293 		any Peripheral Bus Controller.
       
  5294 			The classes associated with the 'generic' Peripheral Bus Controller
       
  5295 		are defined in P32STD.H. Of these functions, the code for those asociated with
       
  5296 		media change and supply voltage classes is in PS_PSU.CPP and the code for the
       
  5297 		Controller interface itself is in PS_PBUS.CPP. The independant layer code for
       
  5298 		the PC Card Controller implementation in now in PS_PCCD.CPP and PS_PSOCK.CPP
       
  5299 		(defined in P32PCCD.H).
       
  5300 			The variant layer code for the Peripheral Bus Controller is still supplied
       
  5301 		by the variant DLL. However, the bulk of the PC Card Controller functions have
       
  5302 		been removed from the main Custom class and moved to a TPcCardControllerInterface
       
  5303 		class (defined in V32PCCD.H). The custom now has a single function:-
       
  5304 			TAny* Custom::CreatePeriphBusControllerInterface()
       
  5305 		which returns a pointer to this class. This will allow variant layer code for other
       
  5306 		types of Peripheral Bus Controller to be supplied by the variant DLL without bloating
       
  5307 		the basic Custom class with these functions.
       
  5308 			Removed the majority of the exported functions of the class UserPcCardController
       
  5309 		(all apart from PwrDown() and NotifyChange()) from EUSER.DLL. Also, constructors for the
       
  5310 		classes TPccdChnk, TPccdConfigInfo, TPccdRegionInfo and TPccdType. The DEF file entries for
       
  5311 		these functions have been replaced with NotSupported entries.
       
  5312 			Similarly, fixed up the MARM/WINS EKERN DEF files to replace all the entries for
       
  5313 		exported PC Card Controller functions with NotSupported entries.
       
  5314 		[Note: No Pc Card reorganisation for MISA.]
       
  5315 	2)		The class TPccdCallback has become TPBusCallBack. A single callback can now be
       
  5316 		registed for mutiple events, with the event now specified by a mask rather than an enum.
       
  5317 		This has simplified the implemenation of the classes DPrimaryMedia and DMediaChangeNotifier.
       
  5318 	3) 		Modified the variant function PcCardMemPhysicalAddress() to take an extra
       
  5319 		parameter - 'TPccdMemType'. Prior to this, the variant just returned
       
  5320 		the physical address per socket, with the kernel adding an offset
       
  5321 		dependant on the memory type. Unfortunatley, the PS7111 has a
       
  5322 		different PC Card memory offset scheme to that used in the PS7110.
       
  5323 		Hence the need for it to be calculated in the variant (since 7111 and
       
  5324 		7110 share the same kernel).
       
  5325 
       
  5326 
       
  5327 Version 1.02.157
       
  5328 ================
       
  5329 (Made by Dennis, 1st December 1998)
       
  5330 
       
  5331 NOTE:	Must be used with F32 version.
       
  5332 		No ISA or Windermere binaries.
       
  5333 		Outstanding problem with machine-code serial PDDs (non-machine code
       
  5334 		version has been released) and with Windermere power-off.
       
  5335 		Bldmake-generated batch files are no longer released as source so
       
  5336 		bldmake <all> must be run to create the batch files before any building
       
  5337 		can be done.
       
  5338 
       
  5339 1) Morgan
       
  5340 	1)	Added uid-type-safety overloads to RLibrary::Load() and
       
  5341 		RProcess::Create() to only load Dlls and Exes that match
       
  5342 		the supplied Uids.
       
  5343 			eg
       
  5344 		lib.Load(_L("\\system\\plugins\\PLUGIN.DLL");
       
  5345 			should change to
       
  5346 		lib.Load(_L("\\system\plugins\\PLUGIN.DLL"),
       
  5347 				 TUidType(KNullUid, KPluginUid, KNullUid);
       
  5348 			where KPluginUid is either KPluginUid8 or KPluginUid16.
       
  5349 	2)	SARMBE-RIP
       
  5350 	3)	Added a new power management framework in INC\K32POWER.H.  Here is a
       
  5351 		quick overview:
       
  5352 		A DPowerHandler performs power related functions previously resident
       
  5353 		in DLogicalChannel, and also provides mechanisms for communicating
       
  5354 		with the machine's power model.  A DPowerModel, (DEigerPowerModel on
       
  5355 		the Series5, DWinsPowerModel on WINS), logs all DPowerHandlers in
       
  5356 		the system and their power requirements.  The power model controls
       
  5357 		power up and power down behaviour of all shared power units.  This
       
  5358 		allows it to dictate the machine's power management policy.  (See
       
  5359 		document POWER001 in the Base database for more grusome details).
       
  5360 		These changes break binary compatability for DLogicalChannels, and
       
  5361 		existing device drivers that require power management.
       
  5362 
       
  5363 		* Here is some guidance on how to update existing
       
  5364 		  DLogicalChannels to use E32(157):
       
  5365 			// 1. given an old Ldd "Tomfoolery":
       
  5366 			class DTomfooleryLdd : public DLogicalChannel
       
  5367 				{
       
  5368 			public:
       
  5369 				~DTomfooleryLdd();
       
  5370 				[...]
       
  5371 				// override DLogicalChannel pure virtual functions
       
  5372 				virtual void DoPowerUp();
       
  5373 				virtual void DPowerDown();
       
  5374 				virtual void DoEmergencyPowerDown();
       
  5375 				}
       
  5376 
       
  5377 			// 2. modify the class declaration to insert a power handler
       
  5378 			class DTomfooleryPowerHandler;
       
  5379 			class DTomfooleryLdd : public DLogicalChannel
       
  5380 				{
       
  5381 			public:
       
  5382 				~DTomfooleryLdd();
       
  5383 				[...]
       
  5384 				// these power functions no longer need to be virtual
       
  5385 				// but you may wish to keep them virtual to maintain
       
  5386 				// Ldd-Pdd compatability.
       
  5387 				virtual void DoPowerUp();
       
  5388 				virtual void DoPowerDown();
       
  5389 				virtual void DoEmergencyPowerDown();
       
  5390 			public:
       
  5391 				// add power handling to this channel
       
  5392 				DTomfooleryPowerHandler *iPowerHandler;
       
  5393 				}
       
  5394 
       
  5395 			// 3. add a new power handler to the TOMFOOL.CPP file
       
  5396 			class DTomfooleryPowerHandler : public DPowerHandler
       
  5397 				{
       
  5398 			public:
       
  5399 				DTomfooleryPowerHandler(DTomfooleryLdd *aLdd) : iLdd(aLdd) {}
       
  5400 				virtual TInt DoPowerOn() { return iLdd->DoPowerUp; }
       
  5401 				virtual void DoPowerStandby() { iLdd->DoPowerDown(); }
       
  5402 				virtual void DoPowerRestart() { iLdd->DoPowerDown(); }
       
  5403 				virtual void DoPowerEmergencyStandby() { iLdd->DoEmergencyStandby(); }
       
  5404 			public:
       
  5405 				DTomfooleryLdd *aLdd;
       
  5406 				}
       
  5407 
       
  5408 			// 4. change DTomfooleryLdd::DoCreateL and destructor
       
  5409 			void DTomfooleryLdd::DoCreateL(...)
       
  5410 				{
       
  5411 				[...]
       
  5412 				iPowerHandler=new (ELeave) DTomfooleryPowerHandler(this);
       
  5413 				// register the power handler so we get power events
       
  5414 				User::LeaveIfError(Power::AddPowerHandler(iPowerHandler));
       
  5415 				[...]
       
  5416 				// ask the PowerManager to power us up
       
  5417 				iPowerHandler->PowerOn();
       
  5418 				}
       
  5419 			DTomfooleryLdd::~DTomfooleryLdd()
       
  5420 				{
       
  5421 				[...]
       
  5422 				// ask the PowerManager to power us down
       
  5423 				iPowerHandler->PowerStandby();
       
  5424 				// remove the power handler from the system
       
  5425 				Power::RemovePowerHandler(iPowerHandler);
       
  5426 				delete iPowerHandler;
       
  5427 				}
       
  5428 
       
  5429 			// 5. Finally, redirect calls to DLogicalChannel::PowerGood()
       
  5430 			// and SetPowerConsumption() through the new iPowerHandler and
       
  5431 			// remove all references of RegisterEmergencyPowerDownHandlerL()
       
  5432 
       
  5433 		It should also be noted that DLogicalChannel::PowerOn() and
       
  5434 		DLogicalChannel::PowerDown() are no longer called called during
       
  5435 		S::CreateLogicalChannel() and DLogicalChannel::Close().
       
  5436 	4)	Moved WINS, MAWD and MARM over to the new power models.  Changed
       
  5437 		DPcCardCntrl, and DLddSound to use the new facilities.
       
  5438 		Also Altered DComm, DChannelComm, and DEigerComm.
       
  5439 		[Note: Models not added for MMAD, MISA.]
       
  5440 	5)	Removed duplicate implementations of P::PowerOff, P::PowerOn,
       
  5441 		P::Standby(), and P::CheckSupplies in WINS.
       
  5442 
       
  5443 2) Jo
       
  5444 	1)	Fixed EPOC software problem SW1-266 "TLocale isn't updated in
       
  5445 		WINC/WINS when the time zone is changed"
       
  5446 		Added a line to KPWINS\KP_INI to update locale data on EStartupCold
       
  5447 		when the time zone on the PC is changed.
       
  5448 
       
  5449 3) Jane
       
  5450 	1)  Split kearm directory into kcarm for cpu only code and kaeig for
       
  5451 		asic code.
       
  5452 		Made the kcarm code generic for any arm processor, so that all arm
       
  5453 		based ports can eventually share it.
       
  5454 		Added a set of __CPU_ #defines for "cpu properties" such as whether
       
  5455 		cache is write-back or write-through, whether there is a write
       
  5456 		buffer, and so forth. Used these to make the kcarm directory
       
  5457 		generic.
       
  5458 		These properties are set up in u32std.h from the build #define.
       
  5459 		Moved the MAD port to the new scheme - it shares the kcarm directory
       
  5460 		and has its own asic dependent directory, kamad.
       
  5461 		The MARM and MAD ports have new .MMP files for ekern (ekernx),
       
  5462 		ekdata (ekdatx) and ke_exe (kc_exe).
       
  5463 		I am particularly pleased with the new TMadPanic - it made it all
       
  5464 		worthwhile...
       
  5465 
       
  5466 4)	Alastair
       
  5467 	1)	Changed PP::TheMachineName to "Epoc".  Take note SDK people, this
       
  5468 		means the default .INI file loaded from the emulator's data
       
  5469 		directory will be EPOC.INI rather than SYSTEM.INI.  I've also
       
  5470 		removed the facility to specify the fascia bitmap within the
       
  5471 		<machine>.ini file - instead the emulator will expect the fascia
       
  5472 		bitmap to have the same base name as it's corresponding ini file -
       
  5473 		so if the emulator is invoked with the -Mgeofox1 switch it will try
       
  5474 		to load geofox1.bmp.  By default the emulator will try to load
       
  5475 		epoc.bmp.  I've updated E32's SWINS release component accordingly.
       
  5476 	2)	Updated EKERN.MMP and EUSER.MMP to take advantage of MAKMAKE's new
       
  5477 		FIRSTOBJECT keyword (E32TOOLP 097).  Merged Jane's new EKERNX.MMP
       
  5478 		into EKERN.MMP, and old KE_EXE.MMP into Jane's new KC_EXE.MMP
       
  5479 		following these changes.
       
  5480 	3)	Exporting the following functions from ekern under WINS/WINC by
       
  5481 		ordinal rather than name
       
  5482 			EXPORTS E32KernelDispatchAddress @279 NONAME
       
  5483 			EXPORTS _E32Initialise @280 NONAME
       
  5484 			EXPORTS _E32DeInitialise @281 NONAME
       
  5485 			EXPORTS _E32ExitProcess @282 NONAME
       
  5486 
       
  5487 		Euser.dll has been changed to look up these functions by ordinal.
       
  5488 		The latter 3 functions were previously only exported under WINC, and
       
  5489 		do nothing and are not called under WINS.  The hack in MAKMAKE to
       
  5490 		handle the linking of these functions by ordinal has been removed
       
  5491 		(E32TOOLP O97).
       
  5492 	4)	Removed Plat::EnterCS() and Plat::LeaveCS() from ESDRV.CPP and
       
  5493 		ECDRV.CPP
       
  5494 		- these fixes should no longer be required to avoid deadlock since a
       
  5495 		generic fix has been applied to E32 version 155.
       
  5496 	5)	Added 2 new exports to EUSER.DLL in E32WINS.H
       
  5497 			IMPORT_C void SetEmulatorColorDepth(TUint& aDepths);
       
  5498 			IMPORT_C void EmulatorColorDepth(TUint& aDepths);
       
  5499 		SetEmulatorColorDepth() is called by EKERN.DLL which will set colour
       
  5500 		depths supported by the emulator according to the specification of
       
  5501 		the ColorDepth keyword in the System.ini file.  Syntax is
       
  5502 			ColorDepth {Gray2} {Gray4} {Gray16} {Color16} {Color256}
       
  5503 					   {Color4K} {Color16M}
       
  5504 		If the ColorDepth keyword is not specified supported colour depths
       
  5505 		will default to Gray2,Gray4 and Gray16 for backward compatibility.
       
  5506 		Users of EmulatorColorDepth() will need to pass a bitmap reference
       
  5507 		to the function which will be set based on the following constants
       
  5508 		defined in E32WINS.H
       
  5509 			const TUint KEmulGray2=		0x00000001;
       
  5510 			const TUint KEmulGray4=		0x00000002;
       
  5511 			const TUint KEmulGray16=	0x00000004;
       
  5512 			const TUint KEmulGray256=	0x00000008;
       
  5513 			const TUint KEmulColor16=	0x00000010;
       
  5514 			const TUint KEmulColor256=	0x00000020;
       
  5515 			const TUint KEmulColor4K=	0x00000040;
       
  5516 			const TUint KEmulColor64K=	0x00000080;
       
  5517 			const TUint KEmulColor16M=	0x00000100;
       
  5518 	6)	Changed RThread::Panic() so that in WINS DEBUG builds it calls a new
       
  5519 		function, ThreadPanicBreakpoint2, in upwins\up_debug.cpp, with
       
  5520 		information about the thread being panicked and also the name of the
       
  5521 		killing thread.  This fixes Epoc S/W problem 356 "The __DEBUGGER
       
  5522 		macro that catches panics should be un-commented out."  To get the
       
  5523 		Windows ID of the panicking thread in RThread::Panic() I changed the
       
  5524 		code which keeps a list of Epoc threads in EUSER.DLL so that it
       
  5525 		contains the Epoc thread ID as well as the Windows one and added a
       
  5526 		function to upwins\up_thrd.cpp, TUint32 WinsEpocThreadWinID(TUint
       
  5527 		aEpocID), which returns the Windows ID corresponding to the Epoc ID
       
  5528 		passed in as a parameter.
       
  5529 	7)	Split header inc\e32wins.h into 2 headers, e32wins.h and u32wins.h.
       
  5530 		U32wins.h contains euser functions that should not need to be used
       
  5531 		by any component except E32.
       
  5532 	8)	Removed all the logical and physical device driver deffiles from
       
  5533 		\E32\INC, since makmake always ensures the right function is
       
  5534 		exported at ordinal one for LDD and PDD targettypes.
       
  5535 	9)	Changed the Emulator's path scheme.  Now, if a directory called
       
  5536 		'Data\' is found in the same directory as the executable which
       
  5537 		started the Emulator, the Emulator's data directory will be
       
  5538 		considered to be this directory and expected to contain .INI files
       
  5539 		and any corresponding bitmaps.  Also, directories 'C\' and 'Z\' in
       
  5540 		the executable's directory will be mapped to the emulated C: and Z:
       
  5541 		drives.  If a 'Data\' directory is not found in the executable's
       
  5542 		directory, the old scheme will be assumed where the Emulator's data
       
  5543 		directory is '\Epoc32\Data\' and the emulated C: drive is mapped to
       
  5544 		'Epoc32\WINS\C\'.
       
  5545 	10)	Fixed Epoc S/W problem 466
       
  5546 			"Plat: 46 fault when running EXEs from a different directory".
       
  5547 		The emulator now looks in the directory containing the emulated Z
       
  5548 		directory for filenames specified without a drive, rather than in
       
  5549 		the directory containing the executable that started up the
       
  5550 		emulator; so if Z is mapped to \Epoc32\Release\WINS\DEB\Z\, the
       
  5551 		emulator will look in \Epoc32\Release\WINS\DEB\ for these files.
       
  5552 		Note that mappings for emulated C and Z drives will be overwritten
       
  5553 		if specified in the environment, but can safely be set in the
       
  5554 		EPOC.INI file using the _EPOC_DRIVE_? keyword.  Any attempted
       
  5555 		mapping for the Z drive which does not specify a directory ending in
       
  5556 		\Z or \Z\ will fail.
       
  5557 	11)	Removed references to all bldmake-generated batch files from LI.PRJ
       
  5558 		files containing them, and updated MNT.BAT so that directories \BWINC,
       
  5559 		\BVC4 and \BVC4WINC are not archived (they contain nothing but
       
  5560 		bldmake-generated files anyway).  This means that to build E32 from
       
  5561 		source bldmake must always be called first to generate the batch files,
       
  5562 		and ensures these batch files are more likely to be up-to-date.
       
  5563 
       
  5564 5)	Jonathan
       
  5565 	1)	Retired KEARM directory following Jane's changes. The MAWD and MISA
       
  5566 		builds depended on some files in KEARM, so these files were copied:
       
  5567 			KEISA:	ke_edbg.cpp, ke_edbg.h, ke_dma.cpp
       
  5568 			KEAWD:	ke_edbg.cpp, ke_edbg.h, ke_dma.cpp,
       
  5569 					ke_exc.cpp, ke_thrd.cpp,
       
  5570 					ke_exe.cpp, ke_kdata.cpp
       
  5571 	2)	Updated MNT.BAT to reflect all of the above directory changes.
       
  5572 	3)	Hacked a workaround to MSVC++ 5.0 (sp3) assembler bug, where MSVC
       
  5573 		incorrectly fixes up conditional jumps when the destination is a C++
       
  5574 		function. Files affected: upwins\up_realx.cpp, upwins\up_i64.cpp.
       
  5575 
       
  5576 6)	Dennis
       
  5577 	1)	Fixed bug in serial comms driver relating to zero-length reads. If
       
  5578 		the receive buffer was empty when a zero-length read was requested,
       
  5579 		the driver would enter an inconsistent state and the request would
       
  5580 		not be completed unless a terminating character was specified.
       
  5581 
       
  5582 7) 	Pete
       
  5583 	1)		Added the class RBusDevCom which is intended as a replacement
       
  5584 		for RDevCom (although the latter is still supported). This new class
       
  5585 		allows the support of serial devices such as PC Card modems which
       
  5586 		require the asynchronous power up of the card. The changes included
       
  5587 		in E32-120 allowed these types of cards to be initially powered up
       
  5588 		just before a channel was opened on the device. They didn't however
       
  5589 		support the repowering of an open channel (which again needs to be
       
  5590 		asynchronous) after the machine has been turned off. The RBusDevCom
       
  5591 		now provides the means to support for this scenario. If a channel is
       
  5592 		opened on a serial device which requires asynchronous powering then
       
  5593 		all DoControl() and DoRequest() calls are preceded by a fast exec
       
  5594 		call to check whether the device needs repowering. (Channels open on
       
  5595 		standard serial devices don't suffer the penatly of this
       
  5596 		exec. call).
       
  5597 			Added the class RBusLogicalChannel (RBusDevCom is derived from
       
  5598 		this class) which is intended as a replacement for RLogicalChannel -
       
  5599 		to be used for devices which may need to be asynchronously powered
       
  5600 		either before opening or while the channel is use. RLogicalChannel
       
  5601 		would continue to be the choice for classes of devices which don't
       
  5602 		require this behaviour.
       
  5603 			Modifications to the TLocalDrive class. This now makes use of the
       
  5604 		MBusDev class - created as part of the implementation of the
       
  5605 		RBusLogicalChannel class.
       
  5606 			Fixed a problem with the TLocalDrive class CheckMount() function
       
  5607 		so that it can't lock the file system doing continuous re-mounts
       
  5608 		when a CF card is inserted that never asserts its RDY signal.
       
  5609 	2)		Added a member 'iHiddenSectors' to TLocalDriveCaps
       
  5610 		to report the number of sectors on a media device reserved before
       
  5611 		the start of the first partition.
       
  5612 	3)		Added a new version of the
       
  5613 		DPcCardCntrl::RegisterEvent() function taking an extra parameter
       
  5614 		'TUint aFlag'. This allows the better support of PC cards which use
       
  5615 		level mode interrupt requests rather than pulse mode. The flag is
       
  5616 		set when level mode is required meaning the PC Card Controller can
       
  5617 		avoid failing to clear the interrupt in the PC Card Controller
       
  5618 		hardware.
       
  5619 	4)		Merged various changes to the MAWD architecture layer, the MAWD
       
  5620 		B1 variant layer and the MARM P2 variant layer including a new SPI
       
  5621 		implementation for MAWD, support for ETNA Rev3 etc.
       
  5622 			Added a function Plat::WaitAtLeastAMicroSecond() for use by the
       
  5623 		ATA media driver.
       
  5624 
       
  5625 
       
  5626 Version 1.02.156
       
  5627 ================
       
  5628 (Made by Jonathan, 27th October 1998)
       
  5629 
       
  5630 N.B. WINS DEB/UDEB will only work with F32 122 OR LATER.
       
  5631 
       
  5632 1) Dennis
       
  5633 	1)	Reintroduced debug/release interoperability for WINS. Removed
       
  5634 		CBase::iName and SObjectIxArray::iPadding. Deleted all debug DEF
       
  5635 		files.
       
  5636 	2)	Merged in Andrew Thoelke's E32 proposals:
       
  5637 		i)	SW1-77 Compiler-generated constant descriptors.
       
  5638 		ii)	SW1-14 C++ range-checking template wrapper for fixed arrays.
       
  5639 		iii) SW1-87 CleanupClosePushL and related cleanup-stack things.
       
  5640 	3)	Globally disabled warning about not inlining functions in MSVC++ 5.0.
       
  5641 
       
  5642 2) Jonathan
       
  5643 	1)	Fixed version bug in mnt getbld.
       
  5644 	2)	Fixed pvcs paramater error for bsarm and bsarmbe dirs in mnt *lock.
       
  5645 
       
  5646 3)	Alastair
       
  5647 		1) Added the following Unicode Uid values
       
  5648 			KLogicalDeviceDriverUidValue	0x100039cf
       
  5649 			KPhysicalDeviceDriverUidValue	0x100039d0
       
  5650 			KKernelUidValue					0x100039e2
       
  5651 			KUserDllUidValue				0x100039e5
       
  5652 			KLocaleDllUidValue				0x100039e6
       
  5653 			KConsoleDllUidValue				0x100039e7
       
  5654 			KDisplayDllUidValue				0x100039eb
       
  5655 			KCustomDllUidValue				0x100039e8
       
  5656 			KKeyboardDllUidValue			0x100039e9
       
  5657 			KKeyboardDataUidValue			0x100039e0
       
  5658 			KKeyboardTranUidValue			0x100039e1
       
  5659 			KXYInputDllUidValue				0x100039ea
       
  5660 
       
  5661 		N.B. some of these values are defined in the file E32UID.IBY (from
       
  5662 		\e32\kbarm\,\e32\kbisa\, etc).  If this file is to be used in creating
       
  5663 		UNICODE roms then the preprocessing stage prior to rombuilding should
       
  5664 		define the _UNICODE macro.
       
  5665 		2)	Updated .MMP files in accordance with the UNICODE plan.
       
  5666 		3)	Changed MNT.BAT to get E32TOOLP version 096.
       
  5667 
       
  5668 
       
  5669 Version 1.02.155
       
  5670 ================
       
  5671 (Made by Morgan, 20th October 1998)
       
  5672 
       
  5673 NB: REQUIRES F32 VERSION 121 OR ABOVE, WSERV VERSION 100 OR ABOVE
       
  5674 
       
  5675 0)	Jonathan
       
  5676 	1)	Added Distribution lines to the LI.PRJ files in all subdirectories to
       
  5677 		identify licensee-specific source.
       
  5678 
       
  5679 1)	Graham Asher, 13/10/98
       
  5680 	These changes affect the Unicode builds only. They make it possible to use
       
  5681 	several different sets of collation rules in the same locale, which is
       
  5682 	needed for East Asian locales; and they make it easier to write collation
       
  5683 	rules for these and other locales.
       
  5684 
       
  5685 	\inc\collate.h
       
  5686 	introduced TCollationRepertoire - stores a series of rule sets so that one
       
  5687 	can choose, say, between sorting on stroke count and radical, or JIS code,
       
  5688 	without changing locale.  added new collation operators to make it easier
       
  5689 	to write complex collation rules reorganised TCollate constructors to make
       
  5690 	them easier for Mem functions to call
       
  5691 
       
  5692 	\inc\e32des16.h
       
  5693 	added new TDesC16::CompareC overloads to allow selection of rule set
       
  5694 
       
  5695 	\inc\e32panic.h
       
  5696 	added EBadCollationRulesIndex panic number
       
  5697 
       
  5698 	\inc\e32std,h
       
  5699 	added Mem functions to enumerate collation rule sets and select them when
       
  5700 	comparing; these are new CompareC overloads
       
  5701 
       
  5702 	\inc\u32std.h
       
  5703 	changed LCharSet to include a collation repertoire (instead of just a ptr
       
  5704 	to the rules) and a collation attribute repertoire
       
  5705 	(TUnicodeAttributeRepertoire) for storing locale-specific character
       
  5706 	attribute tables like radical and stroke count
       
  5707 
       
  5708 	\inc\unicode.h
       
  5709 	added the new structures used by TCollationRepertoire, and added
       
  5710 	TUnicodeAttributeRepertoire and its constituents; added
       
  5711 	TUnicode::GetAttribute, so that collation can use locale-specific
       
  5712 	attributes, and abolished TUnicode::TranslateFromUnicode and
       
  5713 	TUnicode::TranslateToUnicode
       
  5714 
       
  5715 	\lsrc\ls_unic.cpp
       
  5716 	now contains collation repertoire ptr, not rules ptr, and an attribute
       
  5717 	repertoire ptr for any attributes supported by the locale
       
  5718 
       
  5719 	\ucdt\uc_des16.cpp
       
  5720 	implementation of new TDesC16::CompareC overloads
       
  5721 
       
  5722 	\ucdt\uc_exec.cpp
       
  5723 	TChar::TranslateFromUnicode and TChar::TranslateToUnicode now do nothing;
       
  5724 	have not abolished them like the TUnicode functions of the same names
       
  5725 	because of binary compatibility
       
  5726 
       
  5727 	\ucdt\uc_func.cpp
       
  5728 	added new Mem functions to enumerate and retrieve collation rules; and
       
  5729 	implemented new Mem::CompareC overloads
       
  5730 
       
  5731 	\unicode\collate.cpp
       
  5732 	reorganised constructor arguments; implemented new operators including
       
  5733 	those that retrieve locale-specific attributes; increased subkey size to
       
  5734 	16 bits
       
  5735 
       
  5736 	\unicode\unicode.cpp
       
  5737 	abolished TUnicode::TranslateFromUnicode and TUnicode::TranslateToUnicode
       
  5738 
       
  5739 2)	Dennis
       
  5740 	1)	Machine coded most of the TEiger functions because things like keyboard
       
  5741 		scanning were taking a ridiculously long time (nearly 500us).
       
  5742 	2)	Fixed bug SW1-256 - TInt64::TInt64(TReal) won't compile under VC5.
       
  5743 	3)	Fixed bug SW1-738 - Scheduler bug may leave processes unprotected.
       
  5744 	4)	Added extra function calls to serial comms PDD VA_COM1.CPP to cope
       
  5745 		with new chained interrupts.
       
  5746 
       
  5747 3)	Alastair
       
  5748 	1)	Changed Emulator title bar to read "EPOC Emulator".
       
  5749 	2)	Changed \e32\dpwins\d_medint.cpp and \e32\kpwins\kp_pccd.cpp
       
  5750 		to use Win32 function GetTempPath() to get the system
       
  5751 		temporary path rather than manually checking the "temp" environmental
       
  5752 		variable.  Fixes Epoc Software problem SW1-112.
       
  5753 	3)	Changed WINS F11 key case closed behaviour so that "case
       
  5754 		closed" is added to the WINS title bar rather than the case
       
  5755 		bitmap being displayed.
       
  5756 	4)	Removed possibility of specifying the case bitmap within
       
  5757 		WINS's system.ini file, and all references to the case bitmap.
       
  5758 	5)	Disabled Emulator Window maximise button since the button
       
  5759 		served no purpose.
       
  5760 	6)	Added new header \E32\INC\E32WINS.H containing the following
       
  5761 		WINS-specific functions to be exported from EUSER.DLL
       
  5762 
       
  5763 		IMPORT_C TInt SetupEmulatorPaths();
       
  5764 		IMPORT_C TPtrC EmulatorPath();
       
  5765 		IMPORT_C TPtrC EmulatorDataPath();
       
  5766 		IMPORT_C TInt SetupEmulatedDrive(const TChar aDrive,const TDesC& aPath);
       
  5767 		IMPORT_C TInt MapEmulatedFileName(TDes& aBuffer,const TDesC& aFileName);
       
  5768 
       
  5769 		These functions are defined in new file
       
  5770 		\E32\UPWINS\UP_PATH.CPP, and replace various drive-mapping
       
  5771 		activities in different places in E32 and F32.  They also
       
  5772 		incorporate changes to make the Emulator runnable from
       
  5773 		anywhere.  If the Emulator is running from a traditional
       
  5774 		\Epoc32\Release\WINS\<build>\ directory, then emulated C: and Z:
       
  5775 		drives and the Emulator data directory will be as before;
       
  5776 		otherwise, emulated C: and Z: will be subdirectories 'C' and 'Z'
       
  5777 		of the Emulator directory, and the Emulator data directory
       
  5778 		will be the 'data' subdirectory of the Emulator directory.
       
  5779 	7)	Fixed Epoc Software problem SW1-153 "Allow applications to simulate
       
  5780 		running from C: or D: on WINS".  F32 has been changed so that
       
  5781 		an Epoc path, rather than a full Win32 path, is passed to
       
  5782 		the kernel's DPlatLibrary::DoLoad() function.  The path is mapped
       
  5783 		to a Win32 path using MapEmulatedFileName() for the Win32 call to
       
  5784 		LoadLibrary(), but DPlatLibrary.iFileName is set to the Epoc
       
  5785 		path rather than the full Win32 path.  It is iFileName that function
       
  5786 		RLibrary.FileName() returns.  Previously F32 would
       
  5787 		pass in the full Win32 path and DPlatLibrary::DoLoad() would
       
  5788 		convert it to an Epoc path to set the iFileName value, but for
       
  5789 		libraries on the emulated Z drive only.
       
  5790 	8)	In \E32\KPWINS\KP_GUI.CPP, replaced some old dos function
       
  5791 		calls with newer, more UNICODE-friendly, Win32 ones.
       
  5792 	9)	Added 2 new, case-sensitive, command-line flags.
       
  5793 		Use EPOC.EXE -C<emulated C drive> -- (that's 2 dashes) to
       
  5794 		specify the emulated C drive.
       
  5795 		Use EPOC.EXE -T -- to specify that the system temporary path
       
  5796 		should be used as the emulated C drive.
       
  5797 		These flags will override the default settings and any _EPOC_DRIVE_C
       
  5798 		setting in the environment or in the System.ini file.
       
  5799 	10)	Removed obselete code defaulting maximum free RAM under WINS from
       
  5800 		\E32\KPWINS\KP_HAL.CPP.  The default is now applied by
       
  5801 		\E32\KPWINS\KP_GUI.CPP.
       
  5802 	11)	Changes to support international keyboard variants - these changes
       
  5803 		will mean that WSERV version 100 (or above) and it's corresponding
       
  5804 		changes are required to provide sensible keyboard behaviour.
       
  5805 		a) Changed WINS EKERN.DLL so that character codes are passed onto the
       
  5806 		Window Server in the 2 high bytes of the TRawEvent iScanCode
       
  5807 		member variable.
       
  5808 		b) Changed WINS EKTRAN.DLL to translate Epoc scan codes to the
       
  5809 		character code provided in the 2 high bytes of the aScanCode
       
  5810 		parameter if this code is available.
       
  5811 		c) Changed EWSRV.DLL so that the 2 high bytes of the TRawEvent
       
  5812 		iScanCode are ignored where appropriate.
       
  5813 		d) Changed WINC ECONS.DLL to support international keyboard
       
  5814 		input.
       
  5815 		e) Removed \E32\KPWINS\KP_KYBD.CPP - this file used to provide
       
  5816 		limited international keyboard support - UK/US variants only.
       
  5817 	12)	Added KConsoleDllUid, 0x100000C5, to \E32\INC\E32UID.H.
       
  5818 	13) Made changes to \E32\WSRC\CO_TWIN.CPP to resolve the ECONS.DLL
       
  5819 		problem in line with the version of Epoc S/W Proposal SW1-84
       
  5820 		revised 27/8/98.  Some changes to the Eikon console will be
       
  5821 		required for the solution to be fully effective.  The changes
       
  5822 		don't go quite as far as the proposal - the text console only
       
  5823 		attempts to load ECONSEIK.DLL, not ECONS?*.DLL, since the
       
  5824 		dll-loading code does not handle wildcards.
       
  5825 	14) Changed \E32\KPWINS\KP_GUI.CPP so that under WINS the pointer
       
  5826 		name (TMachineInfoV1.iXYInputName) is always either _L("PEN"),
       
  5827 		_L("MOUSE") or _L("NONE").  This value can be set via
       
  5828 		\Epoc32\Data\System.ini using keyword "PointerType", and
       
  5829 		defaults to _L("PEN").  E.G. "PointerType mouse".
       
  5830 	15) Changed \E32\KPWINS\KP_GUI.CPP to allow Emulator windows to be
       
  5831 		created which are larger than the PC screen.
       
  5832 	16)	Changed \E32\GROUP\SWINS.REL to include the new symbian fascia.bmp and
       
  5833 		friends from R:\SDK\ZIP\SDKMODELS.007.
       
  5834 	17)	Added new function and an enum to E32WINS.H
       
  5835 
       
  5836 			IMPORT_C TInt EmulatorFlip(TEmulatorFlip aEmulatorFlip);
       
  5837 			enum TEmulatorFlip
       
  5838 				{EEmulatorFlipRestore,EEmulatorFlipInvert,EEmulatorFlipLeft,EEmulatorFlipRight};
       
  5839 
       
  5840 		Calling this function, defined in \E32\UPWINS\UP_GUI.CPP, will change
       
  5841 		the size and orientation of the emulator's parent and child windows
       
  5842 		and bitmap.
       
  5843 	18)	Implemented Epoc Proposal SW1-93 "Help for debugging Panics on WINS".
       
  5844 		In WINS DEBUG mode, when a thread is panicked, a function in
       
  5845 		\E32\UPWINS\UP_DEBUG.CPP will be called which will break into the
       
  5846 		debugger and provide comprehensive information about the panic.  Source
       
  5847 		file UP_DEBUG.CPP will be needed for this to work properly.  I've
       
  5848 		removed the __DEBUGGER() macro from RThread::Panic() since it should no
       
  5849 		longer be required.
       
  5850 	20)	Added 2 new functions to E32WINS.H - AddToWinsEpocThreadList() and
       
  5851 		RemoveFromWinsEpocThreadList().  These enable the kernel to create and
       
  5852 		maintain a list of "real" Epoc threads (as opposed to fake WINS
       
  5853 		hardware threads) within EUSER.DLL.  New function
       
  5854 		UpWins::__EpocThread() in UP_STD.H is called by EDLL.OBJ (linked into
       
  5855 		every WINS Epoc dll) to check whether the current thread is in this
       
  5856 		list, so that EUSER's E32Dll() routine is only called when real Epoc
       
  5857 		threads attach to and detach from loaded Epoc dlls.  As a result of
       
  5858 		this change dlls linked to the new version of EDLL.OBJ will not run
       
  5859 		against older versions of EUSER.DLL.  All these new functions are
       
  5860 		defined in new file \E32\UPWINS\UP_THRD.CPP.  This change addresses
       
  5861 		Epoc Proposal SW1-19, though I haven't removed the calls to E32Dll()
       
  5862 		with parameters EDllProcessAttach and EDllProcessDetach yet since the
       
  5863 		window server, and perhaps other components, make use of these.
       
  5864 
       
  5865 4) Morgan
       
  5866 	1)	Added interrupt chaining to TInterrupt.  This breaks binary
       
  5867 		compatability for this class, but maintains source compatability.
       
  5868 		Attempts to Bind the old TInterrupt class with the new kernel will
       
  5869 		fail with KErrNotSupported.
       
  5870 
       
  5871 
       
  5872 Version 1.02.151
       
  5873 ================
       
  5874 (Made by Pete, 12 October 1998)
       
  5875 
       
  5876 1) Morgan
       
  5877 	1)	Updated TLinda and KEMAD\KE_PIC.CPP to take the new interrupts
       
  5878 	2)	Added some kernel access functions so device drivers can
       
  5879 		find DPhysicalDevices, DLogicalDevices, DChunks, and DLibraries
       
  5880 	3)	Added TDma::Fill()
       
  5881 	4)	Fixed a bug in the ImpDma interface
       
  5882 	5)	Added hooks for automatic chaining of Dma buffers
       
  5883 
       
  5884 2) Pete
       
  5885 	1) 		Re-organisation of the SPI bus / ADC channel
       
  5886 		measurement code in MARM and MAWD builds:-
       
  5887 			TSpiController is now an abstract class. A
       
  5888 		TSpiController derived class is defined and instanciated in each
       
  5889 		variant. During initialisation, the kernel calls
       
  5890 		TSpiController* Custom::CreateSpiController() to create the
       
  5891 		appropriate SPI controller device.
       
  5892 			TSpiController now includes the following
       
  5893 		pure virtual functions which (hopefully) encompass the variant
       
  5894 		specific aspects of this device:-
       
  5895 			- void TSpiController::InitialiseSpiDevice();
       
  5896 			- void TSpiController::StartAveragedReading();
       
  5897 			- void TSpiController::StartOneShotReading();
       
  5898 			Created the file VA_SPI.CPP in each MARM/MAWD
       
  5899 		variant to implement the above functions (the code for which
       
  5900 		has been essentially extracted from the appropriate KE_SPI.CPP
       
  5901 		file). Also moved the following SPI related functions out of
       
  5902 		VA_HW.CPP into VA_SPI.CPP:-
       
  5903 		- TBool Custom::TestBootSequence()
       
  5904 		- TInt Custom::BindSpiChannel(const TDesC8& aName)
       
  5905 		- TBool Custom::EightChannelAdcFitted().
       
  5906 			The TSpiController device no longer relies on
       
  5907 		the digitizer driver to drive it to pull off and process
       
  5908 		entries from its queue of ADC channels waiting for an ADC reading.
       
  5909 		The Controller now has its own 8mS tick to perform
       
  5910 		this. The later can be suspended/resumed by the variant using:-
       
  5911 			- void TSpiController::Suspend();
       
  5912 			- void TSpiController::Resume();
       
  5913 		(For PB-PD/P2 MARM and B1 MAWD variants, the
       
  5914 		digitizer driver does indeed suspend this operation and
       
  5915 		drives processing of pending channels itself so as not to
       
  5916 		change the operation of this driver).
       
  5917 	2) 		Re-organisation of the way the PC Card Controller
       
  5918 		hardware (e.g. Etna) is implemented for MARM builds to make
       
  5919 		use of the fact that the variant DLL can now contain static
       
  5920 		data. The h/w chunks are no longer allocated in the
       
  5921 		architecture layer (KE_INI.CPP), but are
       
  5922 		allocated within the variant as part of the Custom::Init3()
       
  5923 		function. As such, the function
       
  5924 		Custom::PcCardCntrlPhysicalAddress() has become redundant.
       
  5925 	3) 		The function Hal::ColdStart() is now properly
       
  5926 		exported.
       
  5927 
       
  5928 3) Petteri
       
  5929 	1) Changes to MARM display driver (WD_EIGER.CPP) so to handle
       
  5930 	different screen sizes. Previous one assumed 640x240.
       
  5931 	2) Changes to bootstrap and MARM variant layer to allocate an
       
  5932 	additional h/w chunk for the extra registers in the CL-PS7111 device.
       
  5933 	3) Various changes to the Cirrus Logic evaluation board
       
  5934 	variant - to bring back as a supported variant.
       
  5935 
       
  5936 4)	Dennis
       
  5937 	1) Put SCREENVARIANT code back into MARM bootstrap.
       
  5938 
       
  5939 Version 1.02.150
       
  5940 ================
       
  5941 (Made by Alastair, 23rd September 1998)
       
  5942 
       
  5943 This release is not intended for ER4, though it could be used as part
       
  5944 of an ER4 SDK.
       
  5945 
       
  5946 1)	Alastair
       
  5947 	1)	Changed ECDRV.PDD, ESDRV.PDD and ESOUND.LDD as suggested by replies
       
  5948 		to topic "WINS sound and comms cause deadlocks with STDLIB" under
       
  5949 		category "Known Epoc Problems" in Notes database
       
  5950 		"Symbian Tech Support General", except that the change to
       
  5951 		ECDRV.PDD has been modified slightly so that it doesn't break test
       
  5952 		T_SERIAL.EXE.  The ECDRV.PDD change has been tested with a version of
       
  5953 		T_SERIAL.EXE modified to simulate the conditions which
       
  5954 		could previously cause deadlock.
       
  5955 		These changes address the following bugs/proposals, but do not
       
  5956 		represent a permanent solution:
       
  5957 			Epoc Software problem SW1 - 176 "WINS sound driver
       
  5958 				deadlock in ESTLIB E32Dll() function."
       
  5959 			Series5 Software problem SW1 - 503 "ECDRV.PDD can cause
       
  5960 				deadlocks in simple test programs".
       
  5961 			Epoc proposal SW1 - 19 "Implement true EPOC32 handling of
       
  5962 				E32Dll() under WINS".
       
  5963 		The change to ESOUND.LDD fixes Epoc Software problem SW1 - 179
       
  5964 		"ESOUND.LDD plays silence indefinitely for short sound samples".
       
  5965 
       
  5966 
       
  5967 Version 1.02.144
       
  5968 ================
       
  5969 (Made by Dennis, 7th August 1998)
       
  5970 
       
  5971 1) Matthew
       
  5972 	1)	Added code to MISA platform so that the cpu goes into idle mode when
       
  5973 		in the idle thread.
       
  5974 	2)	Added \e32\keisa\todo.txt - a to-do list for the MISA platform.
       
  5975 
       
  5976 2) Dennis
       
  5977 	1)	Fixed bug in comms device driver D_COMM.CPP which left unwanted DFCs
       
  5978 		queued after a power-down. These then attempted to complete requests
       
  5979 		twice. Power down now cancels any pending DFCs.
       
  5980 
       
  5981 3) Jonathan
       
  5982 	1)	Removed tests for redundant files from valid command in mnt.bat.
       
  5983 	2)	Updated build.txt to add dire warnings about checking e32ver.h and
       
  5984 		advice about MNT VALIDating releases.
       
  5985 
       
  5986 
       
  5987 Version 1.02.143
       
  5988 ================
       
  5989 (Made by Pete, 20th July 1998)
       
  5990 
       
  5991 1) Dennis
       
  5992 	1) Fixed SW1-586 incorrect handling of signed zeros.
       
  5993 
       
  5994 2) Morgan
       
  5995 	1) Updated V32Linda.h to reflect the latest hw
       
  5996 	2) Added TDma class and supporting classes Dma, ImpDma
       
  5997 	3) Changed MMAD bootstrap to use the same modular scheme as MARM
       
  5998 
       
  5999 3)	Alastair
       
  6000 	1)	Fixed Epoc Software problem SW1-107 'WINS RThread::Resume problem on
       
  6001 		Win95' by not faulting the platform unless Win32 API function
       
  6002 		GetLastError() reports an error as well as ResumeThread().
       
  6003 
       
  6004 4) Pete
       
  6005 	1) 	Fixed a problem with ATA media driver such that it sometimes failed
       
  6006 		to reduce machine current consumption - having raised it due to a
       
  6007 		read or write to the CF card.
       
  6008 	2) 	Fixed a problem with ATA media driver. As part of the exec. call to
       
  6009 		read/write/format the card, the driver sends a command to the card,
       
  6010 		to read/write the appropriate number of sectors. Each time a sector
       
  6011 		is complete, the card generates an interrupt so the driver can
       
  6012 		either read the data from the sector or supply the data for the next
       
  6013 		sector to be written. There was a problem with the driver such that,
       
  6014 		if the first interrupt from the card occurred while still in the
       
  6015 		initial exec. call, the interrupt could be prematurely cleared. The
       
  6016 		driver then only detects that the sector has been processed when a 2
       
  6017 		second time-out occurs on the operation - making the operation
       
  6018 		appear very slow. This only seems to have been a problem for Viking
       
  6019 		and Panasonic CF cards.
       
  6020 	3) 	Alteration to the ATA media driver to improve speed of transfer,
       
  6021 		particularly on reads from the card. Before, the driver queued a DFC
       
  6022 		for the completion of each sector read from the card (to write it
       
  6023 		back the thread making the request). The media driver's buffer has
       
  6024 		now been increased so that this can be filled under interrupt. A DFC
       
  6025 		in now only queued when the buffer is full.
       
  6026 
       
  6027 
       
  6028 Version 1.02.142
       
  6029 ================
       
  6030 (Made by Pete, 1st July 1998)
       
  6031 
       
  6032 1) Matthew
       
  6033 	1)	Changed MISA bootstraps to use the same modular scheme as MARM.
       
  6034 	2)	Added functions to TSa1100 for new hardware registers in revision D.
       
  6035 1) Dennis
       
  6036 	1)	Added thread write function DThread::WriteNoCheck() which doesn't
       
  6037 		perform the strict checking that DThread::Write() does.
       
  6038 	2)	Changed TLex::Val(TReal*) to use TRealX in its intermediate
       
  6039 		calculations in order to increase the precision of the final
       
  6040 		result. Added a new function Math::MultPow10X which multiplies a
       
  6041 		TRealX argument by an integer power of 10. This is basically a
       
  6042 		higher precision version of Math::Pow10.
       
  6043 1) Pete
       
  6044 	1)	Changed MARM ATA and CROM media driver to use
       
  6045 		DThread::WriteNoCheck(). Fixes SW1-482.
       
  6046 
       
  6047 
       
  6048 Version 1.02.141
       
  6049 ================
       
  6050 (Made by Pete, 10th June 1998)
       
  6051 
       
  6052 1) Jonathan
       
  6053 	1)	Removed private assignment operators from TSglQueIterBase and
       
  6054 		TDblQueIterBase as per EPOC32 Proposal SW1-53.
       
  6055 	2)	Made inline RSubSessionBase::SubSessionHandle() public as per EPOC32
       
  6056 		Proposal SW1-45.
       
  6057 	3)	Bumped up the E32 KMediaDriverInterface*VersionNumber.
       
  6058 	4)	Changed the default WINS memory emulation from 4MB to 64MB as per
       
  6059 		EPOC32 Proposal SW1-88.
       
  6060 	5)	New code page 1252 and Unicode character information tables derived
       
  6061 		from release 2.1 of the character database from Unicode Inc.
       
  6062 		Fixes EPOC32 Software Problems SW1-42 and also adds:
       
  6063 			80 & U+20AC	  New euro currency symbol
       
  6064 			8E			  LATIN CAPITAL LETTER Z WITH CARON (= U+017D)
       
  6065 			9E			  LATIN SMALL LETTER Z WITH CARON (= U+017E)
       
  6066 			U+FFFC		  OBJECT REPLACEMENT CHARACTER
       
  6067 	6)	From Graham Asher:
       
  6068 		The enumerated type TChar::TCategory in e32std.h, used only in the
       
  6069 		Unicode build, has been changed to accommodate the new character
       
  6070 		categories in unidata2.txt.
       
  6071 
       
  6072 2) Matthew
       
  6073 	1)	Changed the TSa1100 class - removed SetHalt(), which had been
       
  6074 		copied over from TEiger, and renamed IntLevels() to	IntsPending()
       
  6075 		and IntTypes() to IntLevels() to conform with the terminology in
       
  6076 		the SA1100 documentation. Breaks misa kernel-side compatability.
       
  6077 	2)	Removed lccr followers from MISA, which were working around a bug
       
  6078 		in the SA1100.
       
  6079 	3)	Changed MISA ScreenInfo function to return the address of the
       
  6080 		beginning of the palette (rather than the pixel data for 8bpp).
       
  6081 		The screen driver will have to change to take account of this.
       
  6082 	4)	Removed TSa1100 palette functions - the screen driver should write
       
  6083 		to memory instead.
       
  6084 	5)	Removed Cassius-A releasables from the releasables, because we had
       
  6085 		the hardware taken from us.
       
  6086 	6)	Changed Windamere(AWD) and SARMBE architectures to set year to
       
  6087 		rombuild year on a cold boot, which I forgot in the last release
       
  6088 		(see 3.13 in release 140).
       
  6089 	7)	Fixed Epoc32 defect SW1-33 ("Problem in Plat::Fault in Unicode
       
  6090 		builds") by changing Length() calls to Size() calls.
       
  6091 	8)	Changed sound ldd to use DThread::Read() and Write() rather than
       
  6092 		doing its own thing this fixes S5 defect SW1-231 ("Machine warm
       
  6093 		reset when playing sound while spy running").
       
  6094 	9)	Changed svChangeLocale() function so that it triggers
       
  6095 		RChangeNotifiers.
       
  6096 	10)	Changed keyboard translator dll so that the default library is
       
  6097 		closed when not in use.
       
  6098 	11)	Incremented EPOC comms-driver minor version number (but not WINS
       
  6099 		one) and put a check into the pdds so that they will not be used
       
  6100 		with early versions of the ldd. Partially fixes Bluebell defect
       
  6101 		SW1-5 ("Triple beep reset when turning on the link").
       
  6102 	12)	Added an explicit call to compress the kernel heap to
       
  6103 		S::ChunkCompressAll(). This fixes the E32 bit of Series-5 defect
       
  6104 		SW1-356 ("Large uncompressible heaps in system components").
       
  6105 	13)	Fixed bug in sound ldd which caused sine waves to not be
       
  6106 		cancelled in WINS on PCs which did not support aLaw.
       
  6107 
       
  6108 3) Dennis
       
  6109 	1)	Fixed bug in ARM710.S in EIGER bootstrap code. In function
       
  6110 		EigerSetCSnWidth register R1 is accidentally overwritten, causing
       
  6111 		the ROM to be set up incorrectly if its bus width is not 32 bits.
       
  6112 	2)	Implemented EPOC32 proposal SW1-69. User::StartThread modified to do
       
  6113 		the DLL attach and detach in separate functions, so that the 1K of
       
  6114 		stack used in these functions can be reused during actual running of
       
  6115 		the thread.
       
  6116 	3)	Fixed problem SW1-51 - renamed TPointerArray<T> to RPointerArray<T>
       
  6117 		and TSimpleArray<T> to RArray<T>. Replaced TArray(U)Int with
       
  6118 		RArray<T(U)Int>.  Replaced the destructor with a Close() function to
       
  6119 		do memory deallocation.  Frozen DEF files modified so that renamed
       
  6120 		functions are at same ordinal as before, with Close() functions at
       
  6121 		the same ordinals as the destructors were.
       
  6122 	4)	Fixed problem SW1-47 - modified code in DebugFunction ProfileResult
       
  6123 		to get the tick period from Hal::TickPeriod instead of hardcoding it
       
  6124 		to 15625us.
       
  6125 	5)	Fixed problem SW1-622 - modified heap code so that all free cells
       
  6126 		are at least 16 bytes in debug mode, since this is the minimum
       
  6127 		allocated cell size.
       
  6128 	6)	Modified RHeap::ReAlloc() so that the nestingLevel field in debug
       
  6129 		mode is preserved.  This prevents test programs failing a kernel
       
  6130 		heap check due to one of the kernel's arrays being reallocated
       
  6131 		during the test.
       
  6132 	7)	Modified handlers for vectors 0x00 and 0x14 (reset and reserved) to
       
  6133 		fault with a simulated exception EExcInvalidVector rather than
       
  6134 		looping forever.  iCodeAddress=0x00 or 0x14, iDataAddress=value of
       
  6135 		lr on jumping to 0x00 or 0x14.
       
  6136 	8)	Added functions RChunk::IsReadable() and RChunk::IsWritable() so
       
  6137 		that user code can determine whether or not a chunk is mapped into
       
  6138 		its process address space.
       
  6139 	9)	Fixed problem SW1-370 (Math::Mod is not sufficiently
       
  6140 		accurate). Changed the algorithm from x%y=x-y*INT(x/y) to a
       
  6141 		bit-by-bit shift and subtract algorithm.  Added operator%,
       
  6142 		operator%=, Mod() and ModEq() functions to TRealX class to implement
       
  6143 		the new algorithm.
       
  6144 
       
  6145 4) Petteri
       
  6146 	1)	Fixed a bug in Math::Round(). (SW1-402)
       
  6147 	2)	Fixed a couple of bugs in the text window server.
       
  6148 	3)	Changed Ekern.mmp as required by changes in Makmake.
       
  6149 
       
  6150 5) Alastair
       
  6151 	1)	Changed mnt.bat so that mnt getsrc no longer attempts to make
       
  6152 		the Epoc work directories.
       
  6153 	2)	Changed WinCOutput::Write(const TDesC &aDes) so that WINC
       
  6154 		programs can write output to STDOUT for redirection.  This change
       
  6155 		applies to ascii builds only.
       
  6156 	3)	Changed the kernel so that the Windows Alt-F4 keyboard
       
  6157 		shortcut for closing applications works for WINS.
       
  6158 	4)	Changed #define in kpwins\kp_chunk.cpp so that the code which
       
  6159 		checks that requests for more memory won't cause the emulated
       
  6160 		memory allocation limit to be exceeded applies for WINS only, not
       
  6161 		WINC.  This won't change WINC behaviour because the emulated
       
  6162 		memory limit under WINC was always zero, which meant that the
       
  6163 		check wasn't applied anyway.
       
  6164 	5)	Changed kpwins\kp_gui.cpp in line with Epoc Proposal SW1-21,
       
  6165 		so that emulated drive assignment is possible from
       
  6166 		\Epoc32\Data\System.ini.
       
  6167 		Syntax is
       
  6168 		_EPOC_DRIVE_<letter> <path>
       
  6169 
       
  6170 6) Jo
       
  6171 	1)	Fixed Series 5 software problem SW1-440 ("PDD returns different errors
       
  6172 		in WINS and ARM").  Both WINS and ARM now return KErrNotSupported.
       
  6173 	2)	Fixed Series 5 software problem SW1-943 ("XXX_CAST macros in E32DEF.H
       
  6174 		are written incorrectly")
       
  6175 
       
  6176 7) Pete
       
  6177 	1)	Implemented asynchronous rather than synchronous system
       
  6178 		for read,write and format operations on local media devices.
       
  6179 		This affects the TLocDrv and DMediaDriver classes.
       
  6180 	2)	Changed API on for local media devices so that for any given
       
  6181 		operation (eg read,write,format,reduce size) the position on the
       
  6182 		device is specified as a TInt64 rather than TInt. This will allow
       
  6183 		very large media devcies to be supported. This affects the TLocDrv,
       
  6184 		DMedia and DMediaDriver classes.
       
  6185 
       
  6186 		Taking changes 1 & 2 for DMediaDriver, the functions
       
  6187 			TInt DMediaDriver::ReduceSize(TInt aPos,TInt aLength);
       
  6188 			TInt DMediaDriver::Read(TInt aPos,TInt &aLength,const TAny* aTrg,TInt aHandle,TInt anOffset);
       
  6189 			TInt DMediaDriver::Write(TInt aPos,TInt &aLength,const TAny* aSrc,TInt aHandle,TInt anOffset);
       
  6190 			TInt DMediaDriver::Format(TInt aPos,TInt &aLen);
       
  6191 
       
  6192 		become:-
       
  6193 			TInt DMediaDriver::ReduceSize(TInt64 &aPos,TInt aLength);
       
  6194 			void DMediaDriver::Read(TInt64 &aPos,TInt *aLength,TLocalDriveMessageData &aTrg,DThread *aThread,TRequestStatus *aStatus);
       
  6195 			void DMediaDriver::Write(TInt64 &aPos,TInt *aLength,TLocalDriveMessageData &aSrc,DThread *aThread,TRequestStatus *aStatus);
       
  6196 			void DMediaDriver::Format(TInt64 &aPos,TInt *aLength,DThread *aThread,TRequestStatus *aStatus);
       
  6197 	3)	Withered the UserPcCardCntrl class. Now all functions are 'not supported'
       
  6198 		apart from:-
       
  6199 			void UserPcCardCntrl::PwrDown(TSocket aSocket);
       
  6200 			TInt UserPcCardCntrl::NotifyChange(TSocket aSocket,TRequestStatus *aReqStat);
       
  6201 		which are implemented using the corresponding UserSvr functions
       
  6202 		described below.
       
  6203 		The media device functions previously provided by UserPcCardCntrl
       
  6204 		are now provided by D_DRVIF.LDD in E32UTILS.
       
  6205 		The PC Card controller functions previously provided by UserPcCardCntrl
       
  6206 		are now provided by D_PCCDIF.LDD in E32UTILS.
       
  6207 	4)	Added the following UserSvr local media functions:
       
  6208 			void UserSvr::ForceRemountMedia(TMediaDevice aDevice);
       
  6209 		Causes remount on next access to specifed device (ie
       
  6210 		media change simulation).
       
  6211 			TInt UserSvr::MediaChangeNotify(TMediaDevice aDevice,TRequestStatus *aReqStat);
       
  6212 		Request notification of power of powerup and media change
       
  6213 		events on the specified media device.
       
  6214 	5)	In MARM build the function:-
       
  6215 			TInt DArmPlatPcCardSocket::EventCallBackEnable(TPccdEvent anEvent)
       
  6216 		no longer performs a clear of any pending events before enabling an
       
  6217 		event callback type. Also, it now performs an additional check that
       
  6218 		a power down of a PC Card hasn't occured (ie Kern::PowerGood()) before
       
  6219 		enabling PC Card IREQ events.
       
  6220 
       
  6221 
       
  6222 Version 1.02.140
       
  6223 ================
       
  6224 (Made by Morgan, 14th May 1998)
       
  6225 
       
  6226 1) Graham
       
  6227 		1) Added P3 variant to the rom building capabilities in KBARM
       
  6228 
       
  6229 2) Dennis
       
  6230 		1)	Added support for multiple kernels/variants in the same ROM.
       
  6231 			This requires F32 096 and ROMBUILD version 093.
       
  6232 		2)	Added TSimpleArray<>, TPointerArray<>, TArrayInt simple array classes.
       
  6233 		3)	Changed occurrences of CArray* in the kernel to TSimpleArray<>.
       
  6234 		4)	Rearranged ARM boot code into a form which is easier to adapt to other
       
  6235 			hardware and which facilitates multiple-boot ROMs.
       
  6236 		5)	EKERN.EXE no longer links to the variant DLL. Instead, the variant DLL
       
  6237 			is found by searching a list of possible variants.
       
  6238 		6)	Added executive call UserSvr::RomRootDirectoryAddress() to enable F32 to
       
  6239 			obtain the address of the ROM file system root directory. This address is
       
  6240 			now determined at boot time from a list of possible root directories, one
       
  6241 			for each variant which the ROM supports.
       
  6242 		7)	Added code to enable profiling of threads (measures CPU time used by each
       
  6243 			thread in the system). To use this, rebuild the MARM REL version with the
       
  6244 			symbol __PROFILE__ defined at the top of M32STD.H. You will also need test
       
  6245 			program T_PROF.EXE and device driver D_PROF.LDD from E32TEST.
       
  6246 		8)	Added two new format options %O and %o to Kern::Printf. %o prints the short
       
  6247 			name of a CObject and %O prints the full name. Also modified Kern::Printf
       
  6248 			to print (null) if a NULL pointer is passed into %S, %O or %o.
       
  6249 		9)	Modified statements of the form Kern::Printf(_L("%S"),&obj->FullName())
       
  6250 			to Kern::Printf(_L("%O"),obj).
       
  6251 		10)	Added a generic algorithm for determining the size and configuration of
       
  6252 			DRAM devices to the ARM bootstrap code.
       
  6253 		11)	Modified ARM/ISA/X86 bootstrap to map in the PageTableInfo array at
       
  6254 			0x41080000. The fixed offset from the page directory simplifies remapping
       
  6255 			during a reschedule.
       
  6256 		12)	Added fields iHomePdes, iPdes and iNumPdes to the definition of DPlatChunk.
       
  6257 			These indicate directly which PDEs are used by the chunk and simplify
       
  6258 			moving a chunk around. Modified the scheduler to use these fields when
       
  6259 			switching processes. Added a function DPlatChunk::SetPdeInfo to set up
       
  6260 			these fields.
       
  6261 		13)	Removed the current consumption setting code from the scheduler. Added
       
  6262 			a function K::TotalCurrentConsumptionInMilliAmps() which calculates the
       
  6263 			machine current by adding K::TotalCurrentMilliAmps to the machine current,
       
  6264 			determined by simply looking to see if the null thread is running.
       
  6265 		14)	Modified DPlatProcess::LookupChunk to do a binary search on the chunk list
       
  6266 			instead of a straight entry-by-entry search.
       
  6267 		15)	Fixed a bug in DPlatChunk::ReallocateHomeAddress which would result in a
       
  6268 			chunk being left without a home address if all linear addresses in the
       
  6269 			home section were exhausted.
       
  6270 		16)	Modified text window server so that it loads EDISP.DLL from Z:\SYSTEM\LIBS
       
  6271 			and invokes ordinal 1 in order to create the screen device driver, rather
       
  6272 			than being statically linked to EDISP.DLL. This is necessary for multi-boot
       
  6273 			ROMs since EDISP.DLL is hardware dependent.
       
  6274 		17)	Added WINDERMERE architecture (\E32\KEAWD), Bluebell V1 variant (\E32\VAWDB1),
       
  6275 			and dual-boot EIGER/WINDERMERE test ROM (\E32\KBAWD).
       
  6276 			This builds and runs on Rack D but is obviously completely untested on
       
  6277 			Windermere. There are some outstanding issues with the Windermere port:
       
  6278 			i)		Standby code may be faulty - problem with restoring state when machine
       
  6279 					powers back up.
       
  6280 			ii)		PC card/CF card code requires modification to use LDRH/STRH 16 bit
       
  6281 					instructions rather than relying on EIGER 'mad-mad mode'.
       
  6282 			iii)	Bootstrap needs modifying to detect Windermere.
       
  6283 			iv)		SPI controller and LCD controller setup may be incorrect.
       
  6284 
       
  6285 3) Matthew
       
  6286 		1) Got rid of MARM P1 (banana) variant.
       
  6287 
       
  6288 		2) Bug fixes to MISA so it can be run in 4bpp and 16bpp modes.
       
  6289 
       
  6290 		3) Changed misa to use the hardware rtc to keep track of the time, instead of
       
  6291 		   counting ticks.
       
  6292 		   Unfortunately the 32MHz crystal is very slow to warm up, so a cold boot is now
       
  6293 		   much slower than it was because it has to wait for the crystal to stabilise.
       
  6294 
       
  6295 		4) Changed misa bootstraps to be fractionally more like the marm one.
       
  6296 
       
  6297 		5) Moved the WINS-specific setting of the daylight-saving mode out of the
       
  6298 		   independent layer and into KPWINS. Removed the resetting of the
       
  6299 		   daylight-saving from the change-locale function. These mean that S5
       
  6300 		   defect SW1-558 ("Remove windows dependency") has been fixed.
       
  6301 
       
  6302 		6) Fixed bug in DLogicalChannel::Request(), which previously, in WINS,
       
  6303 		   could have sent a request from a thread which had no right to do a request
       
  6304 		   on that channel.
       
  6305 
       
  6306 		7) Integrated Andrew Baldwin's wonderful new WINS sound pdd, which will not
       
  6307 		   offend your ears. Many thanks to Andrew for this.
       
  6308 
       
  6309 		8) Modified sound ldd so that it can pass multiple samples to the pdd. Modified
       
  6310 		   pdds to use this new functionality. This reduces the amount of time spent in
       
  6311 		   the service routine.
       
  6312 
       
  6313 		9) Fixed S5 defect SW1-228 ("Dial setup errors") in sound LDD.
       
  6314 
       
  6315 		10)Incrememented sound driver minor version number, to stop people mixing old
       
  6316 		   and new pdds/ldds.
       
  6317 
       
  6318 		11)Put an __DEBUGGER() macro into K::PanicCurrentThread() - previously these
       
  6319 		   panics were just stopping WINS without giving you a chance to jump in with
       
  6320 		   a debugger.
       
  6321 
       
  6322 		12)Added int3's to WINS DEBUG versions Plat::Panic() and Plat::Fault() so they
       
  6323 		   break into the debugger whatever the state of the JustInTime flag.
       
  6324 
       
  6325 		13)Changed MISA and MARM cold-boot to read the year from the rom header and set
       
  6326 		   the time to 10:10 January 1st of that year. Fixes Bluebell defect SW1-134.
       
  6327 
       
  6328 		14)Made the private function KernelCompressAll() into the public
       
  6329 		   User::CompressAllHeaps(). This is to allow Shell to trigger heap compression
       
  6330 		   more easilly (see Bluebell defect SW1-299).
       
  6331 
       
  6332 4) Morgan
       
  6333 		1) Integrated the MADLinda architecture and build system
       
  6334 		2) Bug fix to KESARMBE\KE_PIC.CPP
       
  6335 		3) Changed occurences of DisableIrqs and EnableIrqs to DisableIrqsToLevel2 and
       
  6336 		   RestoreIrqs in SARMBE architecture
       
  6337 		4) Added callback hook for the idle loop
       
  6338 		5) Added Kern::PhysicalDeviceFromHandle
       
  6339 		6) Added an external debugger interface (K32DBG.H).  Used it to bolt on an
       
  6340 		   InfoOutput debugger for MSDEV.  On the MARM platforms bolted on a logging
       
  6341 		   debugger for use by an external JTAG debugger, (like TI's).  No debugger
       
  6342 		   for X86.
       
  6343 
       
  6344 5) Jonathan
       
  6345 		1) Made Eiger and Windemere text drivers return correct screen size
       
  6346 		   from CScreenDriverMarm::Init() instead of assuming 80x24.
       
  6347 		   Removed old #ifdefed-out SetMode() code from Eiger driver.
       
  6348 
       
  6349 
       
  6350 ================
       
  6351 Big version number increment to skip over Liffey release.
       
  6352 ================
       
  6353 
       
  6354 Version 1.02.128
       
  6355 ================
       
  6356 (Made by Jonathan Harris, 8th May 1998)
       
  6357 
       
  6358 1) Jonathan
       
  6359 	1)	P::SetMachineConfiguration(): Don't update the bits of the SuperPage that
       
  6360 		belong to the boot code (including the exception info), apart from the
       
  6361 		display contrast.
       
  6362 
       
  6363 
       
  6364 Version 1.02.127
       
  6365 ================
       
  6366 (Made by Graham Darnell, 26th March 1998)
       
  6367 
       
  6368 1) Dennis
       
  6369 	1) Added a new variant function Variant::SetSoundDriverEnabled(TBool) for use
       
  6370 	   with Snowball in order to allow user code to enable/disable the speaker
       
  6371 	   using UserHal::SetSoundDriverEnabled().
       
  6372 
       
  6373 	2) Added some code to Variant::Init3 for P2 variant to enable correct operation
       
  6374 	   with either a single ROM device, 4Mb on CS0 and 2Mb on CS1, or 4Mb on both.
       
  6375 
       
  6376 2) Matthew, Pete and Rob Pym
       
  6377 	1) Converted the MISA build from being for a Digital IT board to being for
       
  6378 	   SA-1100 based hardware. This has an identical user-side API to MARM, so
       
  6379 	   MARM releasables will run unchanged. To build a rom use the MARM F32.
       
  6380 
       
  6381 	2) Added variants VISABA for a Digital's "Brutus" board and VISACA for a
       
  6382 	   Cassius rack.
       
  6383 
       
  6384 	   Note: TO BUILD A TEXT-SHELL ROM FOR BRUTUS YOU WILL NEED THE ESHELL.EXE
       
  6385 			 FROM F32 096 OR HIGHER. PRIOR TO THIS, THE SHELL TRIES TO CREATE
       
  6386 			 A CONSOLE WINDOW LARGER THAN THE BRUTUS SCREEN AND CRASHES.
       
  6387 
       
  6388 3) Matthew
       
  6389 	1) Changed all interrupt-binding and startup-beep internals to use Narrow
       
  6390 	   descriptors in the Unicode build.
       
  6391 
       
  6392 	2) Added code to read extra digitiser information in E2 on P1, P2 and PD
       
  6393 	   variants. Changed the digitiser drivers on P2 and PD machines to use this
       
  6394 	   extra information, so different digitisers can be used on these machines.
       
  6395 
       
  6396 	   If the new  E2 information is invalid due to a new rom has been put into
       
  6397 	   an old machine, then this is detected due to the x rise-time being zero,
       
  6398 	   and the driver defaults to the previous good values.
       
  6399 
       
  6400 	   If you wish to program your E2 with values suitable for the standard
       
  6401 	   digitiser use XYSpread/16=6; X-Rise=1; Y-Rise=1; Pen-down discard=0.
       
  6402 
       
  6403 	3) Moved TVideoMode enum from d32video.h to e32twin.h, and stopped e32twin.h
       
  6404 	   including d32video.h, thus fixing SW1-921.
       
  6405 
       
  6406 	4) Changed sound LDD to make sure that the internal state is implies no
       
  6407 	   request is pending when a play request is completed. Thanks to Andrew
       
  6408 	   Baldwin for finding this.
       
  6409 
       
  6410 	5) Changed some RChangeNotifier internals so that the internal state implies
       
  6411 	   no request is pending when a request is completed.
       
  6412 
       
  6413 4) Graham/Matthew
       
  6414 	1) Changed the WINC memory information function so that it doesn't emulate a
       
  6415 	   machine with 4 megs of ram.
       
  6416 
       
  6417 	2) Removed some critical-section switching in the WINS thread-startup code.
       
  6418 	   This fixes a bug which occasionally caused WINC to hang on fast machines
       
  6419 	   if a thread did an exec call very soon after being resumed for the first
       
  6420 	   time.
       
  6421 
       
  6422 		3) Removed another 'dance of the semaphores' during WINS thread
       
  6423 		   startup. This seemed to prevent a resumer proceeding
       
  6424 		   until all resumee dll entry points have been called. Since
       
  6425 		   there seems to be no reason for this and since this was
       
  6426 		   causing a problem when threads were resumed inside
       
  6427 		   dll entry code, there seemed no point in keeping it.
       
  6428 		   However, this might be something to watch out for.
       
  6429 
       
  6430 	3) On WINS/WINC, the call to tick the tick-queue is now sandwiched between a
       
  6431 	   Plat::EnterCS() and a Plat::LeaveCS(). This will make these platforms far
       
  6432 		   more robust, but might break work-arounds that may or may not exist in
       
  6433 		   user code.
       
  6434 
       
  6435 5) Morgan
       
  6436 	1) Fixed Bluebell defect SW1-43.
       
  6437 
       
  6438 	2) Added Dll::FreeData().  This should be called in the EProcessDetatch
       
  6439 	   of those Dlls sporting static data.
       
  6440 
       
  6441 6) Graham
       
  6442 		1) Added comms and sound device drivers to the WINC
       
  6443 		   releasables.
       
  6444 
       
  6445 
       
  6446 Version 1.02.126
       
  6447 ================
       
  6448 (Made by Jonathan, 26th February 1998)
       
  6449 
       
  6450 1) Matthew
       
  6451 	1) Tweaked MMP files in preparation for misa platform.
       
  6452 
       
  6453 	2) Added lots of useful constants to k32std.h - these will be used in the
       
  6454 	   misa platform.
       
  6455 
       
  6456 	3) Removed the obsolete DriveName and PccdSlotHame() functions from the
       
  6457 	   variant layers.
       
  6458 
       
  6459 2) Graham
       
  6460 	1) Added K32KEYS, K32COMM, and K32SND header files to INCK release
       
  6461 
       
  6462 	2) Split off the S1 variant into its own project
       
  6463 
       
  6464 	3) Removed S1 variant from E32 project
       
  6465 
       
  6466 	4) Fixed a bug in the MARM architecture that assumed that an eight channel
       
  6467 	   ADC was fitted when powering up.
       
  6468 
       
  6469 3) Dennis
       
  6470 	1) Modified RHeap definition so that it is now derived from RHeapBase,
       
  6471 	   which contains all the non-debug data members. This is to force GCC
       
  6472 	   to put the vptr in the same place that it always was in release builds.
       
  6473 	   This is to enable test code to run on a real machine with EUSER.DLL
       
  6474 	   replaced from RAM.
       
  6475 
       
  6476 	2) Changed UP_CON.CPP in UPMARM, UPMX86 and UPWINS to only include <e32def.h>
       
  6477 	   instead of up_std.h. Previously, modifying k32std.h would cause up_con.cpp
       
  6478 	   to be rebuilt but not the real econs.dll.
       
  6479 
       
  6480 4) Alastair
       
  6481 	1) Added edll.pdb and eexe.pdb to ewinsdb.rel because following the move
       
  6482 	   to using makmake edll.obj and eexe.obj no longer contain their own
       
  6483 	   debugging information.
       
  6484 	2) Updated .MMP files previously using the START MARM .. END block keyword
       
  6485 	   DLLNAME so that they use the new LINKAS keyword instead.  Updated MNT.BAT
       
  6486 	   to get e32tools 091 and e32toolp 091.
       
  6487 
       
  6488 5) Jonathan
       
  6489 	1)	Added new SwitchOn() digitizer driver call. Needed by the Snowball
       
  6490 		variant to reinit the digitizer after power-off.
       
  6491 
       
  6492 
       
  6493 Version 1.02.125
       
  6494 ================
       
  6495 (Made by Graham, 16th February 1998)
       
  6496 
       
  6497 1)	Morgan
       
  6498 	1)	Allowed static data for Rom Ldds/Pdds.  These require the 'fixed'
       
  6499 		keyword in the obey file.
       
  6500 
       
  6501 2)  Graham
       
  6502 		1)      Removed debug/release interoperability from WINS/WINC.
       
  6503 
       
  6504 
       
  6505 Version 1.02.124
       
  6506 ================
       
  6507 (Made by Jonathan, 10th February 1998)
       
  6508 
       
  6509 1) Jonathan
       
  6510 	1)	Incremented KMediaDriverInterfaceMinorVersionNumber because the
       
  6511 		media interface has changed (actually, it changed back in 120).
       
  6512 	2)	Added new TPasswordToken member to TMachineConfiguration on WINS,
       
  6513 		updated on setting the password or machine configuration.
       
  6514 	3)	For internal consistency, WINS now actually limits the amount of
       
  6515 		available memory on the 'machine' to the parameter set in
       
  6516 		system.ini, and defaults to 3M if no value is set. Previously WINS
       
  6517 		merely _reported_ 3M if no default was set, but allowed you to
       
  6518 		allocate past 3M. This broke test code.
       
  6519 	4)	Fixed generation of event on Off keypress on Snowball 1.
       
  6520 	5)	Incorporated Pete's change: Snowball 1 variant no longer waits for
       
  6521 		400ms for SanDisk to come out of reset. Instead, the media driver
       
  6522 		polls the SanDisk on first use.
       
  6523 
       
  6524 2) Alastair
       
  6525 	1)	Updated e32base.h and ub_sec.cpp with Andrew Thoelke's changes to
       
  6526 		implement EPOC32 proposal PR-0077, that a new function be provided
       
  6527 		to return the maximum possible length that an encrypted piece of
       
  6528 		data could become under the encryption scheme in use given the
       
  6529 		initial length of the data.
       
  6530 	2)	Changed mnt getrel so that it doesn't attempt to get the non-existent
       
  6531 		.PDB files for release builds.
       
  6532 
       
  6533 3) Basher
       
  6534 	1)	Changed K::EmergencyPowerDown() and K::EmergencyPowerDownDfcFn()
       
  6535 		functions (ks_power.cpp).
       
  6536 
       
  6537 	2)	Changed Variant::EmergencyStandby() - on the folowing varients
       
  6538 		varmcl, varmpd, varmsa and varmsb.
       
  6539 
       
  6540 	3)	\varms1\va_mati.cpp changed - implementing safe EmergencyPowerDwn
       
  6541 		control. EmergencyCallBack function added and the SectorWrite function
       
  6542 		changed to control emergency system shutdown to prevent Liffy's
       
  6543 		internal CF card from corruption.
       
  6544 
       
  6545 4) Morgan
       
  6546 	1)	Added VARMLA variant and bigendian support
       
  6547 
       
  6548 5) Graham
       
  6549 		1)      Changed variant structure for VARMCL, VARMPB, VARMPC,
       
  6550 				VARMPD, VARMP1, VARMP2, VARMS1, VARMLA.
       
  6551 
       
  6552 				The variant object is now created on the kernel heap.
       
  6553 				This allows the variant code to have state and will
       
  6554 				result in many simplifications of code that interacts
       
  6555 				between variant and architecture layers. It will also
       
  6556 				allow for improved customisation possibilities for
       
  6557 				our licensees.
       
  6558 
       
  6559 				Questions concerning historical and cross-platform
       
  6560 				binary compatibility are yet to be resolved.
       
  6561 
       
  6562 		2)      Cleaned up E32STD.H. This now follows the new standard:
       
  6563 
       
  6564 						CBase *Function(TDes &aParameter);
       
  6565 						becomes
       
  6566 						CBase* Function(TDes& aParameter);
       
  6567 
       
  6568 		3)      Snowball PTR2 varmsb and Delaware varmpg removed.
       
  6569 
       
  6570 6) Petteri
       
  6571 		Changes to the text window server:
       
  6572 		1)      Four different window classes have been reduced into just one.
       
  6573 
       
  6574 		2)      The notifier server now has a thread of its own and uses text window
       
  6575 				server API for its output.
       
  6576 
       
  6577 		3)      ASCII font has been changed to get the window borders back.
       
  6578 
       
  6579 		4)      There is now a constant KCONSFULLSCREEN, which can be used to create
       
  6580 				a full-size window whatever the size of the screen.
       
  6581 
       
  6582 		5)      Windows can be moved, resized and scrolled using the mouse or a pen.
       
  6583 
       
  6584 		6)      OnTop flag has been added. If the flag is set, the window stays on top
       
  6585 				of other windows.
       
  6586 
       
  6587 		7)      The size of notifier windows now depends on the length of the text
       
  6588 				which is being displayed. Buttons can have more than just one character
       
  6589 				and they are centred. One button option now works properly. Pressing
       
  6590 				ESCAPE returns value 0, ENTER returns 1. The notifier window stays on
       
  6591 				top of other windows.
       
  6592 
       
  6593 		8)      Info prints are also variable-sized and they stay on top of other windows.
       
  6594 
       
  6595 		9)      System.ini files are now read correctly in Unicode build. (Files written
       
  6596 				in Unicode cannot be read.)
       
  6597 
       
  6598 		10)     Colour support has been added. WINS supports a mode EColor256, where a
       
  6599 				palette of 256 colours is available. SetTextAttribute() provides an easy
       
  6600 				way to display text in colour. The following attributes are available:
       
  6601 				ETextAttributeNormal, ETextAttributeBold, ETextAttributeInverse and
       
  6602 				ETextAttributeHighlight. Palettes (if supported) can be manipulated and
       
  6603 				read with SetPaletteEntry() and GetPaletteEntry(). SetTextColors() changes
       
  6604 				colours for text foreground and background. Colours for window background,
       
  6605 				window borders and screen background are set with SetUIColors().
       
  6606 
       
  6607 		11)     The text window server API has 8 new functions:
       
  6608 					 TInt SetWindowPosAbs(const TPoint &aPosition) (Sets window position.)
       
  6609 					 TInt ScreenSize(TSize &aSize) (Returns screensize in characters.)
       
  6610 					 TInt SetMode(TVideoMode aMode)
       
  6611 					 void SetPaletteEntry(TUint anIndex,TUint8 aRed,TUint8 aGreen,TUint8 aBlue)
       
  6612 					 void GetPaletteEntry(TUint anIndex,TUint8 &aRed,TUint8 &aGreen,TUint8 &aBlue)
       
  6613 					 void SetTextColors(TUint anFgColor,TUint aBgColor)
       
  6614 					 void SetUIColors(TUint aWindowBgColor,TUint aBorderColor,TUint aScreenColor)
       
  6615 					 void SetTextAttribute(TTextAttribute anAttribute)
       
  6616 
       
  6617 Version 1.02.123
       
  6618 ================
       
  6619 (Made by Jonathan, 27th January 1998)
       
  6620 
       
  6621 1) Alastair
       
  6622 	1)  Changed MNT.BAT so that no attempt is made to release PDB files for
       
  6623 		WINS and WINC release builds, because MAKMAKE generated makefiles do
       
  6624 		not create them by default.
       
  6625 
       
  6626 	2)	Removed references to defunct directory \e32\dmedia from MNT.BAT.
       
  6627 
       
  6628 2) Jonathan
       
  6629 	1)	Drain the Snowball 1 digitizer FIFO before enabling its interrupt to
       
  6630 		prevent it from generating spurious and unwelcome penup/downs on
       
  6631 		startup.
       
  6632 	2)	P::SetMachineConfiguration() : delete the current password and update
       
  6633 		the password from the new configuration.
       
  6634 	3)	Dropping DTR on Snowball 1's 2nd serial port (the phone port)
       
  6635 		asserts the ONKEY signal to the phone, allowing users of that serial
       
  6636 		port to turn the phone on/off.
       
  6637 	4)	Corrected size returned by Custom::XYInputSize() on Snowball().
       
  6638 	5)	Hugely simplified the Snowball 1 key data tables.
       
  6639 	6)	Added special support for the Snowball 1's Off key in the keyboard
       
  6640 		driver. But this doesn't work.
       
  6641 	7)	Belatedly updated kbarm files with support for Snowball 1.
       
  6642 
       
  6643 Version 1.02.122
       
  6644 ================
       
  6645 (Made by Graham, 23rd January 1998)
       
  6646 
       
  6647 1) Jonathan
       
  6648 	1)  Snowball 1. Don't reset the ASIC on startup.
       
  6649 
       
  6650 2) Dennis
       
  6651 	1)	New serial comms LDD and modified PDDs for all variants.
       
  6652 
       
  6653 	2)	WINS comms LDD is now separate from the real comms LDDs. WINS LDD lives in
       
  6654 		DPWINS directory with the WINS PDD, and is currently the same as the old comms LDD.
       
  6655 
       
  6656 	3)	Added hooks to KEARM\KE_INT.CPP to allow another operating system to be bolted on to EPOC32.
       
  6657 
       
  6658 	4)	Added test program T_PTNOS.CPP with LDD D_PTNOS.CPP to test the partner OS hooks.
       
  6659 
       
  6660 	5)	Added a check to KPEPOC\KP_PROC.CPP to prevent two copies of a fixed-address
       
  6661 		process from being created. DPlatProcess::DoCreate will leave with
       
  6662 		KErrAlreadyExists if it finds a matching EXE code chunk belonging to a fixed
       
  6663 		address process.
       
  6664 
       
  6665 	6)	Added some more facilities to T_TERM.CPP, including file upload and download
       
  6666 		and loopback.
       
  6667 
       
  6668 	7)	Fixed typo in ARM boot code which caused problems by failing to map in the
       
  6669 		CS1 ROM if ROM address 0x10000ec6 (physical) contained zero.
       
  6670 
       
  6671 	8)	Fixed bug which could cause processes to be run with incorrect domain access
       
  6672 		if an interrupt occurs during a reschedule. This caused machine to reset
       
  6673 		during heavy keyboard use.
       
  6674 
       
  6675 	9)	Added missing __NAKED__ declaration to ARM assembler versions of
       
  6676 		TDes8::AppendNumUC() and TDes8::AppendNumFixedWidthUC().
       
  6677 
       
  6678 	10)	Fixed problem in DThread::Write() (all 3 variants) - it was returning an error
       
  6679 		code if the source descriptor had zero length and a null pointer.
       
  6680 
       
  6681 3) Graham
       
  6682 		1)      Created a new public header file - E32PANIC.H - which
       
  6683 				contains the base panic numbers.
       
  6684 
       
  6685 		2)      Split the test programs off into a new E32TEST
       
  6686 				project.
       
  6687 
       
  6688 	3)	Removed full exception handling from WINS and WINC if running under Windows '95.
       
  6689 		E32's exception handling system relies on being able to asynchronously
       
  6690 		meddle with another threads context and stack in order to inject a call
       
  6691 		to an exception handler into that thread's normal train of execution. This
       
  6692 		technique works with NT but Windows 95 is not up to it. It is clear that
       
  6693 		not every operating system would be able to handle this. Consider, for example,
       
  6694 		the possibility that the thread is inside an OS call when the call is injected.
       
  6695 
       
  6696 4) Alastair
       
  6697 	1)	Moved build system over to MAKMAKE.  The batch files for building E32 are
       
  6698 		created by e32tools's BLDMAKE.  From the GROUP directory, type BLD or CLEAN
       
  6699 		or PREPARE without any arguments for help on how to use the new batch
       
  6700 		commands.  MAKMAKE has not yet been applied to the build system for MISA,
       
  6701 		MX86.  CLEAN.BAT uses NMAKE to do its cleaning, so a PREPARE.BAT
       
  6702 		needs to have been done first.  PREPARE.BAT will make the makefiles and
       
  6703 		build the working directories.
       
  6704 
       
  6705 	2)	Renamed freeze files from .FRZ to .DEF, including CONSMARM.FRZ, CONSMISA.FRZ
       
  6706 		and CONSWINS.FRZ.
       
  6707 
       
  6708 	3)	Removed WINS_UID statements from all source files.
       
  6709 
       
  6710 	4)	Changed EDLL.O, EXDLL.O, EEXE.O so they are built by separate makefiles
       
  6711 		rather than that of EUSER for MARM.
       
  6712 
       
  6713 	5)	Changed KE_EXE.O so that it is built by a separate makefile rather than
       
  6714 		that of EKERN for MARM.
       
  6715 
       
  6716 	6)	Added SARMBE platform to the build process so big-endian single-process ARM
       
  6717 		platform can be built.
       
  6718 
       
  6719 
       
  6720 Version 1.02.121
       
  6721 ================
       
  6722 (Made by Graham, 10th Dec 1997)
       
  6723 
       
  6724 1) Dennis
       
  6725 	1)	Fixed bug whereby CObjectIx::~CObjectIx could crash if Close()ing an object
       
  6726 		in the index caused other objects to be removed from the index and thereby
       
  6727 		caused the array to be ReAlloc()ed.
       
  6728 
       
  6729 	2)	Speeded up TInt64 multiply a bit more on the ARM.
       
  6730 
       
  6731 	3)	Added a mechanism whereby every DFC knows whether or not it is pending. Kern::Add
       
  6732 		will now only queue the DFC if it is not already queued. DFCs are flagged unqueued
       
  6733 		just before being run. A Queued() function is provided to discover whether a DFC
       
  6734 		is currently queued or not, and a Cancel() function is provided to cancel a DFC
       
  6735 		which is currently pending.
       
  6736 
       
  6737 	4)	Added missing break statements to case EConsoleSetTitle and case EConsoleSetSize
       
  6738 		in ws_main.cpp
       
  6739 
       
  6740 	5)	Fixed bug in KBARM\BOOTROM1.S and KBSARM\BOOTROM1.S where a register was being
       
  6741 		corrupted (subroutine WordMove corrupts r3) leading to the kernel BSS section not
       
  6742 		being correctly zeroed on reset.
       
  6743 
       
  6744 	6)	Fixed bug in TInt64::GetTReal() ARM machine code version - wrong shift count in one
       
  6745 		instruction.
       
  6746 
       
  6747 	7)	Added new function KFormat() to KS_UTL.CPP to do limited printf-style formatting
       
  6748 		without using any EXEC calls. Modified Kern::Printf to use this function instead
       
  6749 		of TDes::AppendFormatList(). This enables Kern::Printf to be used in fast exec
       
  6750 		calls, interrupts etc. Use a static buffer to receive the formatted string instead
       
  6751 		of an automatic one to avoid gobbling a large amount of stack.
       
  6752 
       
  6753 	8)	Added a new flag ExecMutateFlag which is set by the IRQ and FIQ dispatchers if
       
  6754 		an interrupt occurs in SVC mode. The fast executive dispatcher tests this flag on
       
  6755 		return from the exec function and if it is set, DFCs and/or a reschedule will be
       
  6756 		executed in the same way as for a slow exec call. This fills a hole in the interrupt
       
  6757 		scheme whereby if an FIQ occurred during a fast executive call and queued a DFC,
       
  6758 		the DFC would not be run before user code was resumed. This flag can also be set
       
  6759 		by a fast executive call in order to allow rescheduling to occur.
       
  6760 
       
  6761 	9)	Changed some executive calls from slow to fast to reduce overhead in the case where
       
  6762 		a reschedule is not needed. These are ChunkBase, ChunkSize, ChunkBottom, ChunkTop,
       
  6763 		ChunkMaxSize, MutexCount, MutexWait, MutexSignal, ProcessId, ProcessExitReason,
       
  6764 		ProcessExitType, ProcessExitCategory, ProcessPriority, ProcessFlags, SemaphoreCount,
       
  6765 		SemaphoreWait, SemaphoreSignal1, ServerReceive, SessionSend, ThreadId,
       
  6766 		ThreadPriority, ThreadProcessPriority, ThreadFlags, ThreadExitType, ThreadExitReason,
       
  6767 		ThreadExitCategory, ThreadRequestCount, ThreadRequestComplete, WaitForAnyRequest
       
  6768 		and SvSendReceive.
       
  6769 
       
  6770 	10) Use a different stack for IRQs (IrqStack) rather than the reentrant stack. This
       
  6771 		allows IRQs to be enabled during a fast executive call. ThreadRequestComplete,
       
  6772 		SessionSend, SvSendReceive, ServerReceive enable IRQs during their execution.
       
  6773 
       
  6774 	11)	Modified the exception handling mechanism. All exceptions are now placed into
       
  6775 		one of three categories:
       
  6776 
       
  6777 		Fatal		(exceptions in IRQ, FIQ or ABT mode) - these always cause a kernel fault
       
  6778 		Critical	(SVC mode or UND mode with the kernel locked) - these cause a kernel
       
  6779 					fault unless exception trapping is enabled (DThread::iExceptionErrorCode)
       
  6780 		Noncritical	(user mode or UND mode with the kernel unlocked) - these are handled by
       
  6781 					exception trapping, thread exception handler, global exception handler
       
  6782 					in that order. If none of these is active, the current thread is paniced,
       
  6783 					and if that thread has the system flag set a kernel fault results.
       
  6784 
       
  6785 	12)	If an exception occurs while the kernel is locked, DFCs will not be run at the end
       
  6786 		of the exception handler.
       
  6787 
       
  6788 	13)	PD Variant::Init3() now sets CS1 ROM size to 4Mb and total ROM size to 8Mb.
       
  6789 
       
  6790 
       
  6791 2) Morgan
       
  6792 	1)	Renamed Dll::Data to Dll::InitialiseData()
       
  6793 	2)	Fixed zeroing bss for Dll data in ROM
       
  6794 
       
  6795 
       
  6796 Version 1.02.120
       
  6797 ================
       
  6798 (Made by Jonathan, 24th Nov 1997)
       
  6799 
       
  6800 1) Pete
       
  6801 	A) Various changes to PC Card Controller to fully support I/O cards as well as memory cards:-
       
  6802 
       
  6803 	1)	Added a new (exported) PC card controller function -
       
  6804 		TInt DPcCardCntrl::RestoreCardPower(TSocket aSocket, TInt aResetProfile).
       
  6805 		This re-applies power to a PC Card which has previously been successfully powered by the system.
       
  6806 		If a media change has occurred on the socket since it was last powered then function will
       
  6807 		immediately return KErrGeneral. The power up process is the same as carried out by the controller
       
  6808 		function PowerUpCard() - wait up to 2.5Secs for card to become ready using specified reset
       
  6809 		profile. However, this function doesn't implement a TRequestStatus mechanism when complete.
       
  6810 		It is left to the caller to poll the card status. If the card had previously been configured when
       
  6811 		powered and the configuration options allow the configuration to be restored (see 3) then the
       
  6812 		card will be reconfigured automatically when it is re-powered.
       
  6813 	2) 	Modified the PC card controller function DPcCardCntrl::PowerUpCard() so that, like RestoreCardPower()
       
  6814 		it re-configures PC cards which were previously configured when the card was powered down if a media
       
  6815 		change hasn't happened since. Also, the optional last parameter (was TInt aResetLen, now TInt
       
  6816 		aResetProfile) now specifies both the reset length and a pause after the card becomes ready. The upper
       
  6817 		16bit word specifies a pause period (in 20mS units) after the card signals it is ready before the
       
  6818 		controller updates the socket status (and TRequestStatus is signalled). The lower 16bit word specified
       
  6819 		the length of the reset pulse (also in 20mS units) applied to the card.
       
  6820 	3) 	Added a new version of the PC card controller function DPcCardCntrl::RequestConfig(). The new
       
  6821 		version has an additional parameter 'TUint aFlag' (the old version is now obsolete). The only
       
  6822 		flag currently defined is 'KPccdConfigRestorable' which is set if the config may be restored
       
  6823 		automatically by the controller if the card is re-powered (see 1 and 2).
       
  6824 	4) 	Added new values to TPccdSocketStatus (to support 1,2 and 14). This can now have the following
       
  6825 		values:-
       
  6826 		- ESocketFullyOff: 	Card not present or present but not yet powered.
       
  6827 		- ESocketPoweredDown: 	Card present, not currently powered but has been powered
       
  6828 						and could be restored to previous configuration (ie no media change
       
  6829 						since it was last powered).
       
  6830 		- ESocketBatTooLow:	Card present, but not currently powered. A previous attempt to
       
  6831 						power the card failed because the main battery voltage was too low.
       
  6832 		- ESocketNotReset:	Card present and powered, waiting for it to become ready.
       
  6833 		- ESocketReady:		Card present, powered and ready.
       
  6834 		- ESocketCorruptCard:	Card present but not powered since it cannot be recognised by
       
  6835 						controller (not used yet).
       
  6836 	5) 	Changed the PC card controller event type that causes the mount status of TLocalDrive objects
       
  6837 		(associated with PC card media) to be updated. Before, the status was updated on a power-up
       
  6838 		event (EPccdEvPwrUp) meaning that any subsequent access to the TLocalDrive object would
       
  6839 		be preceded by a remount.  Having it on power-up rather than power-down meant the media drive
       
  6840 		system only had to bind to one event rather than EPccdEvPwrDown and EPccdEvEmergencyPwrDown.
       
  6841 		This however meant it was not possible to power-down cards during periods of inactivity. The
       
  6842 		media drive system now binds to power-down events.
       
  6843 	6) 	Change to ATA media driver (MEDATA) on ARM architectures brought about by the emergency power
       
  6844 		down changes in E32-V115. The driver was bound to the PC card controller emergency power down
       
  6845 		event. Since the driver's event callback is now called on a DFC, changes have been necessary
       
  6846 		to handle card writes aborted by emergency power down.
       
  6847 	7) 	Added a new (exported) PC card controller function -
       
  6848 			TInt DPcCardCntrl::SetEvent(TSocket aSocket, TPccdEvent anEvent, TInt anInfo);
       
  6849 		This allows drivers etc to generate PC card events. It also allows extra info to be passed to
       
  6850 		callback functions via 'anInfo' (see 8 below).
       
  6851 	8)	TPccdCallBack has an extra member 'TInt iCallBackInfo' which can be used to provide extra info.
       
  6852 		on a PC card controller event. Extra info on the reason for card power down is now provided in
       
  6853 		iCallBackInfo for EPccdEvPwrDown events.
       
  6854 	9) 	The following functions have been added to the custom DLL:-
       
  6855 			TPtrC PcCardMediaChangeIntSource(TInt aMediaChange)
       
  6856 			void ClearPcCardMediaChangeInt(TInt aMediaChange)
       
  6857 			TMediaState PcCardMediaState(TInt aMediaChange);
       
  6858 		Prior to these changes the PC card controller media change implementation was completely
       
  6859 		implemented in the architecture level and above, meaning that variations to the media change
       
  6860 		system couldn't be handled without a new architecture.
       
  6861 		Also added an additional member 'TInt iMediaDoorCloseDelay' to 'TPccdCntrlMachineInfo' (returned by the
       
  6862 		custom function PcCardMachineInfo()) which allows the media door switch de-bounce parameter to be specified
       
  6863 		in the custom.
       
  6864 	10) 	Support for dual voltage PC Card sockets added. These are sockets where the VCC voltage can be
       
  6865 		altered depending on the type of card detected (typically 3.3V or 5V). The system implemented,
       
  6866 		initially sets the socket VCC depending on the voltage setting indicated by the cards VS (voltage sense)
       
  6867 		signals. Dynamically changing the socket VCC once the card is powered (in response to information in
       
  6868 		a card's CIS etc) is not supported.
       
  6869 	11) 	Added a new (exported) PC card controller function -
       
  6870 			TPccdSocketVcc DPcCardCntrl::SocketVcc(TSocket aSocket);
       
  6871 		This returns the current VCC setting for the specified socket. Note that this function
       
  6872 		returns info on its current VCC setting even when the supply is turned off.
       
  6873 	12) 	Generally tidy up of the ARM PC card controller VCC implementation. Additions of the following
       
  6874 		function to custom DLL:-
       
  6875 			PcCardVccInfo(TInt aPsu,TPccdCntrlVccInfo &aninfo).
       
  6876 		TPccdCntrlVccInfo is defined:-
       
  6877 			class TPccdCntrlVccInfo
       
  6878 				{
       
  6879 			public:
       
  6880 				TUint iVoltageSupported;
       
  6881 				TInt iMaxCurrentInMicroAmps;
       
  6882 				TUint iVoltCheckInterval;
       
  6883 				TPccdPsuVoltChkMthd iVoltCheckMethod;
       
  6884 				};
       
  6885 		This specifies the voltage(s) that the supply supports (5V,3.3V etc), the maximum current
       
  6886 		it can supply, when the o/p of the supply should be checked (once when first turned on,
       
  6887 		or continuously while on) and how the voltage should be check (via the ADC channel reserved
       
  6888 		for the PC card controller or via a variant layer function).
       
  6889 	13) 	TPcCardPsu renamed to TPcCardVcc since it now has functionality which could
       
  6890 		only be attributed to a VCC supply (eg 10&12 above) rather than a generic PC Card supply.
       
  6891 	14)	Added an additional member 'TInt iDisableOnLowBattery' to 'TPccdCntrlMachineInfo' (returned by the
       
  6892 		custom function PcCardMachineInfo()). This can be used to set a battery level (see TSupplyStatus) such that
       
  6893 		if the main battery level is below this level, the PC card controller will no longer power up
       
  6894 		any PC cards. Set to EZero to disable this feature.
       
  6895 	15) 	Fixed problem clearing PC Card IREQ interrupts on ARM. On ARM platforms the PC card controller
       
  6896 		IREQ interrupt service routine was clearing the interrupt in the controller hardware (ETNA)
       
  6897 		before calling any ISRs bound by drivers. Since it is generally the driver ISR which clears
       
  6898 		the source of the interrupt on the card you end up with a second bogus IREQ interrupt. This
       
  6899 		only occurs when 'level mode' interrupts are enabled, not 'pulse mode'. Pulse mode interrupts
       
  6900 		are selected if supported which is why the problem was only discovered so late in the day.
       
  6901 	16)	Changed the reset timing when powering up a PC card. Now:- Apply reset for 100mS, wait up to 2.5Seconds
       
  6902 		for card to become ready, delay any access to the card for a further 100mS after ready. (Was:- apply reset
       
  6903 		for 60mS, wait 2.5Seconds for ready and no delay on subsequent access).
       
  6904 	17) 	Fixed problem in PC card serial port PDD where the destructor could be called before the member
       
  6905 		'iSocket' was initiated. The destructor calls PcCardCntrl::PowerDownCard(iSocket). This was
       
  6906 		a particular problem on rack D where the PC card socket is socket 1 (CF card socket is socket 0)
       
  6907 		and the rack hw doesn't fully isolate the two sockets. Certain comms programs attempt to open a channel
       
  6908 		on the PC card serial port while a channel is already open on this device. These subsequent attempts fail
       
  6909 		calling the PDD destructor which then was incorrectly powering off the wrong socket. Due to the h/w
       
  6910 		implementation, this was actually resulting in the serial PC card being reset.
       
  6911 	18) 	Fixed a problem affecting EXTFIQ. Once you bound a TInterrupt to EXTFIQ it was not possible to unbind
       
  6912 		again.
       
  6913 	19) 	Added the following test programs to TPCCD:-
       
  6914 		i)T_MEDCH (and associated LDD MEDCH.LDD): Soak test of Compact Flash (ATA) - h/w media changes.
       
  6915 		ii)T_EXTFIQ (and associated LDD EXTFIQ.LDD): Continuously generates EXTFIQ on rack D using EXTFIQ.LDD.
       
  6916 		iii)T_BEXFIQ (and associated LDD BEXFIQ.LDD): Generates EXTFIQ on rack D, associated LDD binds and clears
       
  6917 		FIQ.
       
  6918 		Also modified DRVSOAK to better support emergency power down testing.
       
  6919 
       
  6920 	B) 	Modification to serial comms in order to support PC card serial devices:-
       
  6921 
       
  6922 	20) 	Added mechanism for opening a channel on a PC Card I/O device. These devices requires an asynchronous
       
  6923 		power-up of the card before the standard channel open mechanism can take place. In the case of some PC
       
  6924 		Cards (e.g. Serial port cards) there needs to be a further asynchronous phase after creating the PDD
       
  6925 		before the channel is fully open.
       
  6926 		Added a kernel slow exec function:-
       
  6927 			TInt RLogicalChannel::CheckOpenMode(const TDesC &aLogicalDevice,const TVersion &aVer,TInt aUnit);
       
  6928 		This is called once each time a channel is opened. If the return value is <0 then the open proceeds as
       
  6929 		normal. Otherwise, it indicates that a 1 or 2 phase asynchronous open is required. (This function would
       
  6930 		normally ripple down to the custom DLL).
       
  6931 		Added a kernel supervisor function:-
       
  6932 			TInt RLogicalChannel::DoSlowOpen(TInt aMode,TInt anInfo,TRequestStatus &aStatus);
       
  6933 		This initiates the asynchronous parts of the operation. 'aMode' is either KChanSlowOpenPhase1 or
       
  6934 		KChanSlowOpenPhase1 to indicate whether its the aynchronous phase before or after the normal open. 'anInfo'
       
  6935 		is derived from the value returned from CheckOpenMode() and normally indicates the PC Card socket in
       
  6936 		question. TInt RLogicalChannel::DoCreate() has been modified to include these extra operations.
       
  6937 		An extra pure virtual function:-
       
  6938 			TInt DComm::CompleteSlowOpen(DThread *aThread,TRequestStatus *aReqStat);
       
  6939 		had to be added to DComm in order to implement the 2nd asynchronous open phase.
       
  6940 	21) 	Modified PC card serial port PDD to take advantage of the above PDD open scheme (20) so that the PDD now
       
  6941 		fully controls the PC card. (Before it relied on the media system having already powered up the PC Card and
       
  6942 		didn't properly perform the 2nd part of the initialisation). Also modified the PDD so that it re-applies
       
  6943 		power and re-configures the Serial PC Card each time the system comes out of standby (eg machine switched
       
  6944 		off, emergency power down etc).
       
  6945 	22) 	Changes to LDD to handle PC Card media change events (ie media door open or card removal - dependant on
       
  6946 		platform).
       
  6947 			As far as I can gather, in the serial LDD, iStatus==EClosed never occurs. I now force the LDD into
       
  6948 		this state from a PC Card PDD when a media change is detected. The serial port now needs to be disabled
       
  6949 		(for good) because it has been powered down (and in all likelyhood removed). Once in this state
       
  6950 		you never should to change to any other state. Any write requests return with KErrNotReady which hopefully
       
  6951 		will give any client a clue that they shouldn't have removed the PC card serial port while using it. This
       
  6952 		is an intermediate solution. The eventual plan (involving a the invention of a new RDevCom type class) will
       
  6953 		handle the media change and re-power the serial PC card (if still there) before any requests get down to
       
  6954 		the LDD. However, you need an asychronous supervisor kernel call to restore a PC card after media change
       
  6955 		which can't be acheived with the present scheme. It is possible to re-power the PC card when coming out of
       
  6956 		standby (machine turned off etc) because you know the same PC card is still present and hence you don't
       
  6957 		need to alter any memory allocation associated with the card.
       
  6958 	23)	Modified PC card serial port PDD to enable serial interrupts for modem signal status changes (CTS,DCD,DSR,
       
  6959 		RI). Prior to this, h/w flow control wasn't supported on this serial device.
       
  6960 	24) 	Modified PC card serial port PDD to update system current consumption info. This info is derived from the
       
  6961 		PC card CIS where possible.
       
  6962 	25) 	Modified PC card serial port PDD to determine its baudrate capabilities from 'max baudrate supported' field
       
  6963 		(if present) in the CIS. Also, limit baudrate (capabilities) to 19200 if serial card doesn't contain a FIFO.
       
  6964 	26) 	Added the following test programs to TCOMM:-
       
  6965 		i)T_MODEM1: Test code for PC Card Modem Serial Ports (analogue loopback).
       
  6966 		ii)T_COMSOAK1: Serial port soak test program (requires loopback connector).
       
  6967 		iii)T_AMPV: Approval test code for PC Card Adapter.
       
  6968 		iv) T_MODEM2: T_SERIAL for PC card serial port. Instead of looping COM1 to COM2(Etna) it loops
       
  6969 			COM1 to COM3 expecting a PC Card Socket I/O Serial card.
       
  6970 		Also modified T_TERM so it can be used to open a channel on COM3. (Also added extra error reporting).
       
  6971 
       
  6972 2) Jonathan
       
  6973 	1)	Old Snowball variant SA retired.
       
  6974 	2)	New Snowball variant S1 for Prototype 3 units. Major changes from SB:
       
  6975 		- Combined PDD for Eiger and ASIC serial ports using shared modem
       
  6976 		  status interrupt.
       
  6977 		- Variant-specific LDD for use on ASIC serial port only - implements
       
  6978 		  Spark phone's weird CTS handshaking.
       
  6979 		- QuickEmergencyStandby handler.
       
  6980 	3)	New PhysicalScreenWidth and PhysicalScreenHeight values for
       
  6981 		\epoc32\data\system.ini, see kpwins\kp_gui.cpp .
       
  6982 	4)  Prevented *\va_sdrv.cpp from trying to Disable or UnBind when unbound
       
  6983 		from its interrupt.
       
  6984 
       
  6985 
       
  6986 Version 1.02.119
       
  6987 ================
       
  6988 (Made by Morgan, 7th Nov 1997)
       
  6989 
       
  6990 1) Alastair
       
  6991 	1) SARM
       
  6992 		Integrated Single-process code into e32 source allowing SARM roms to be
       
  6993 		created.  Build commands are mnt sarm, sarmall, sarmrel etc.  There are no
       
  6994 		releaseables and no facilities for building test programs.  SARM builds
       
  6995 		use the "__SINGLE__" macro for distinguishing Single-process-specific
       
  6996 		code.  Work directories are \epoc32\build\e32\sarm\[build] and
       
  6997 		\epoc32\release\sarm\[build].  SARM makefiles are generated into
       
  6998 		\e32\bsarm using perl to process makefiles from \e32\bmarm as a
       
  6999 		temporary measure prior to the use of makmake for creating e32
       
  7000 		makefiles.  SARM roms are built from directory \e32\kbsarm, and require
       
  7001 		a special version of rombuild - the makefile for this special version
       
  7002 		will be released with e32tools version 082.
       
  7003 
       
  7004 	Major changes
       
  7005 	a)	\e32\kbsarm - contains special versions of bootrom1.s and rom.oby.
       
  7006 
       
  7007 	b)	\e32\inc - changes to e32rom.h, k32std.h, m32mmu.h, m32std.h and
       
  7008 		v32eiger.h so that different linear address constants are defined
       
  7009 		for __SINGLE__ builds.
       
  7010 
       
  7011 								__SINGLE__						(MULTI)
       
  7012 		KRomHeaderLinAddr		0x00000000						0x50000000
       
  7013 		KSuperPageLinAddr		0xC0000000						0x40000000
       
  7014 		KHomeBase				0xC0000000						0x80000000
       
  7015 		KHomeEnd				KHomebase+0x3fffff				0xffffffff
       
  7016 		KHwLinBase				0xa0000000						0x60000000
       
  7017 		KHwLinEnd				0xbfffffff						0x7fffffff
       
  7018 		KEigerBaseAddress		0x80000000						0x58000000
       
  7019 
       
  7020 	c)	\e32\kpepoc\kp_chk.cpp - __SINGLE__ chunks are allocated in the kernel's
       
  7021 		heap - they cannot change in size and don't move.  Since SARM roms do not
       
  7022 		utilise the MMU.  The actual size of a chunk is a compromise between the
       
  7023 		initial and maximum sizes requested when a chunk is created.
       
  7024 
       
  7025 	File changes
       
  7026 	d)	bsarm\*
       
  7027 		dpepoc\d_medint
       
  7028 		group\mnt.cmd
       
  7029 		inc\ - e32rom.h, k32std.h, m32mmu.h, m32std.h, v32eiger.h
       
  7030 		kbsarm\*
       
  7031 		kearm\ - ke_ini, ke_int, ke_mmu, ke_utl
       
  7032 		kpehal\ - kph_inf, kph_pic
       
  7033 		kpemmu\ - kpm_mmu.cpp
       
  7034 		kpepoc\ - kp_chk, kp_ini, kp_proc, kp_reg, kp_std.h, kp_thrd, kp_utl
       
  7035 		ksrc\ - ks_svr, ks_utl
       
  7036 		varmpd\va_hw
       
  7037 		wsrc\wd_eiger
       
  7038 
       
  7039 	2)	Added UNICODE.H to e32\inc\incc.prj so that the file is released.
       
  7040 
       
  7041 	3)	Changed WINS command line processing such that only switches specified
       
  7042 		before "--" is encountered are processed.  Switches after the "--" switch,
       
  7043 		or all switches if the "--" switch is not specified, are ignored.
       
  7044 
       
  7045 	4)	Added -L<language Index> switch to WINS command line so that
       
  7046 		different Epoc locales can be specified.  Eg "WSEXE -L5 --" will
       
  7047 		mean that elocl5.dll rather than elocl.dll is loaded.
       
  7048 
       
  7049 2) Dennis
       
  7050 	1)	Rewrote MMU code. Major changes are:
       
  7051 		i)		Linear address map has changed - see file KEARM\KE_MMU.CPP
       
  7052 		ii)		RAM drive is at fixed linear address but no longer composed of consecutive
       
  7053 				physical RAM pages.
       
  7054 		iii)	The free page pool has been removed.
       
  7055 		iv)		The ROM is mapped with section descriptors on the ARM instead of 4K pages.
       
  7056 		v)		Chunks can be adjusted in place rather than only in the home section.
       
  7057 		vi)		On the ARM extra protection has been added for page tables, registry
       
  7058 				and RAM drive.
       
  7059 		vii)	ROM layout is different - the kernel data is at 80000000, followed by
       
  7060 				static data for fixed-address ROM processes (see below). The kernel
       
  7061 				stack follows the last fixed-address data chunk, and the home section
       
  7062 				starts with the kernel stack chunk.
       
  7063 
       
  7064 	2)	Modified process handling and scheduling:
       
  7065 		i)		Now have two classes of process. One class has its chunks mapped down
       
  7066 				into the data section while running, the other class has its chunks
       
  7067 				at the same linear address all the time. The latter class is used for
       
  7068 				system servers. It reduces the need for cache flushing - this is only
       
  7069 				required if any chunks have moved - and thus gives a considerable speed
       
  7070 				increase.
       
  7071 		ii)		ROM fixed address processes specified in .OBY file
       
  7072 				RAM fixed address processes specified by setting KImageFixedAddressExe flag
       
  7073 		iii)	On the ARM, a domain will be allocated to every fixed-address process.
       
  7074 				All the process' local chunks will be located in this domain. In addition,
       
  7075 				every global chunk created by a fixed-address process will be allocated
       
  7076 				a domain. The use of domains removes the need for page directory
       
  7077 				manipulation when switching between these processes.
       
  7078 		iv)		The scheduler has been machine coded for ARM and ISA. Actions performed
       
  7079 				on switching between processes now depend on the attributes of these
       
  7080 				processes.
       
  7081 
       
  7082 	3)	Added ARM machine coded message passing and semaphore code.
       
  7083 
       
  7084 	4)	Modified inter-process reading and writing code. Two functions have been added:
       
  7085 		i)		TAny* DPlatThread::CurrentAddress(TAny *anAddress);
       
  7086 				This function returns the current linear address corresponding to an
       
  7087 				address in the thread's address space. No translation is done for addresses
       
  7088 				above 0x40000000 or if the thread's process is currently running.
       
  7089 				This function is used to convert addresses for reading.
       
  7090 		ii)		TAny* DPlatThread::CurrentAddress(TAny *anAddress, TInt& aMaxSize);
       
  7091 				This function returns the current linear address corresponding to an
       
  7092 				address in the thread's address space and also the maximum size of a write
       
  7093 				to the thread's address space (end of chunk - specified address).
       
  7094 				Chunk lookup is always performed.
       
  7095 				This function is used to convert addresses for writing.
       
  7096 
       
  7097 	5)	Kernel faults now restart the system from the reset vector. The MMU backup
       
  7098 		page has been removed.
       
  7099 
       
  7100 	6)	Added double-ended chunks. These are regions of memory where the committed
       
  7101 		region can start at any address in the reserved range, rather than always starting
       
  7102 		at the base of the reserved range. Added functions
       
  7103 		i)		RChunk::CreateDoubleEndedLocal()
       
  7104 				Create a local double-ended chunk with a specified maximum size and
       
  7105 				a specified initial committed region.
       
  7106 		ii)		RChunk::CreateDoubleEndedGlobal()
       
  7107 				Create a global named double-ended chunk with a specified maximum size and
       
  7108 				a specified initial committed region.
       
  7109 		iii)	RChunk::AdjustDoubleEnded()
       
  7110 				Adjust the position and/or size of the committed region. If the initial
       
  7111 				and final regions intersect, the contents of the intersection are
       
  7112 				unchanged. Other parts of the committed region have undefined contents.
       
  7113 		iv)		RChunk::Bottom()
       
  7114 				Returns the offset of the base of the committed region from the base of
       
  7115 				the reserved region (RChunk::Base()).
       
  7116 		v)		RChunk::Top()
       
  7117 				Returns the offset of the top of the committed region from the base of
       
  7118 				the reserved region. ( Top() = Bottom()+Size() )
       
  7119 		RChunk::Size() always returns the size of the committed region.
       
  7120 
       
  7121 	7)	Extended the CBitMapAllocator class. Functions added are:
       
  7122 		i)		TInt Alloc(TInt aCount, TInt& aConsecutive)
       
  7123 				Allocates from the first free position as many consecutive positions as
       
  7124 				possible, up to aCount. Returns the first free position, and aConsecutive
       
  7125 				equal to the number of positions allocated.
       
  7126 		ii)		TInt AllocAligned(TInt anAlignment)
       
  7127 				Allocates a position whose number is an exact multiple of 2^anAlignment.
       
  7128 		iii)	TInt AllocAlignedBlock(TInt anAlignment)
       
  7129 				Allocates a block of 2^anAlignment consecutive positions such that the
       
  7130 				first position is an exact multiple of 2^anAlignment. Returns the
       
  7131 				first position.
       
  7132 		iv)		AllocAt(TInt aPos, TInt aCount)
       
  7133 				Allocates aCount positions starting at aPos.
       
  7134 		v)		Free(TInt aPos, TInt aCount)
       
  7135 				Frees aCount positions starting at aPos.
       
  7136 		iv)		TBool IsFree(TInt aPos, TInt aCount)
       
  7137 				Returns TRUE if and only if positions [aPos,aPos+aCount) are all free.
       
  7138 
       
  7139 	8)	Modified Math::Sin, Math::Cos and Math::Tan functions to return exact answers
       
  7140 		when input values are exact multiples of pi/2. This is done by adding tests of
       
  7141 		the form
       
  7142 		IF ( ABS(x MOD pi) < 2^-52 * ABS(x) )
       
  7143 			return exact answer
       
  7144 		ELSE
       
  7145 			do calculation as before
       
  7146 		ENDIF
       
  7147 
       
  7148 	9)	Modified TTime::Convert(const TDateTime&) and TTime::DateTime() in order
       
  7149 		to minimise the number of divisions involved and to use 32 bit arithmetic
       
  7150 		rather than 64 bit wherever possible. The latter of these functions gets
       
  7151 		called frequently by the window server on a periodic timer.
       
  7152 
       
  7153 	10)	Added functions TDes8/TDes16 :: (Append)NumFixedWidth(UC)
       
  7154 		These convert 32-bit integers to descriptors in a specified radix, adding leading
       
  7155 		zeros up to the specified field width. These are intended to replace calls of
       
  7156 		the form
       
  7157 			des.Format(_L("%08x"),value)
       
  7158 		which are very inefficient. All Format() calls in E32 have been replaced, apart
       
  7159 		from the ones which use an overflow handler.
       
  7160 
       
  7161 	11)	Fixed problem with comms driver causing reset if an interrupt occurs while the
       
  7162 		kernel server is closing a comms channel. This was caused by the interrupt queuing
       
  7163 		a DFC which refers to the comms channel being closed. The DFC runs after the
       
  7164 		kernel server has deleted the channel, and resets the machine when it tries to
       
  7165 		access the nonexistent channel.
       
  7166 
       
  7167 	12)	Files changed:
       
  7168 		dcomm\	d_comm.cpp
       
  7169 		dpepoc\	d_medint.cpp
       
  7170 		dvideo\	ws_disp.cpp
       
  7171 		inc\	e32base.h, e32des8.h, e32des16.h, e32rom.h, e32std.h, e32svr.h,
       
  7172 				k32std.h, k32std.inl, m32std.h, m32std.inl, m32hal.h, u32std.h, v32eiger.h
       
  7173 				m32mmu.h and m32mmu.inl have been removed
       
  7174 		kbarm\	bootrom1.s, rom.oby
       
  7175 		kbx86\	boot486.asm, bootrom.asm, build.cmd, e32d.oby, e32r.oby, m486.bat,
       
  7176 				romdefs.inc, romhead.inc
       
  7177 		kbsarm\	bootrom1.s
       
  7178 		kearm\	ke_dat.cpp, ke_dbg.cpp, ke_ini.cpp, ke_int.cpp, ke_mmu.cpp, ke_pccd.cpp,
       
  7179 				ke_pic.cpp, ke_psu.cpp, ke_std.h, ke_thrd.cpp, ke_utl.cpp
       
  7180 				ke_all.cpp deleted, ke_sched.cpp added
       
  7181 		keisa\	ke_dat.cpp, ke_dbg.cpp, ke_ini.cpp, ke_int.cpp, ke_mmu.cpp, ke_pccd.cpp,
       
  7182 				ke_std.h, ke_thrd.cpp, ke_utl.cpp
       
  7183 				ke_all.cpp deleted, ke_sched.cpp added
       
  7184 		kex86\	ke_exc.cpp, ke_ini.cpp, ke_int.cpp, ke_mmu.cpp, ke_std.h, ke_thrd.cpp,
       
  7185 				ke_utl.cpp
       
  7186 				ke_all.cpp deleted
       
  7187 		kpehal\	kph_dbg.cpp, kph_inf.cpp, kph_pic.cpp
       
  7188 		kpemmu\	kpm_mmu.cpp
       
  7189 				kpm_all.cpp, kpm_regn.cpp, kpm_sect.cpp deleted
       
  7190 		kpepoc\	kp_chk.cpp, kp_dat.cpp, kp_dev.cpp, kp_ini.cpp, kp_proc.cpp, kp_reg.cpp,
       
  7191 				kp_sched.cpp, kp_sem.cpp, kp_thrd.cpp, kp_utl.cpp
       
  7192 		kpwins\	kp_chk.cpp, kp_ini.cpp, kp_proc.cpp, kp_std.h, kp_thrd.cpp, kp_utl.cpp
       
  7193 		ksrc\	ks_chk.cpp, ks_exec.cpp, ks_ldd.cpp, ks_lib.cpp, ks_mes.cpp, ks_pdd.cpp,
       
  7194 				ks_proc.cpp, ks_svr.cpp, ks_thrd.cpp, ks_utl.cpp
       
  7195 		ubas\	ub_bma.cpp, ub_obj.cpp, ub_std.h
       
  7196 		ucdt\	uc_des8.cpp, uc_des16.cpp, uc_exec.cpp, uc_func.cpp, uc_ksvr.cpp,
       
  7197 				uc_reg.cpp, uc_std.h, uc_time.cpp
       
  7198 		umath\	um_rtod.cpp, um_sin.cpp, um_tan.cpp
       
  7199 		upmarm\	up_des8.cpp, up_exec.cpp, up_utl.cpp
       
  7200 		upmx86\	up_exec.cpp
       
  7201 		upwins\	up_exec.cpp
       
  7202 		vx86pc\	vx_vga.cpp
       
  7203 
       
  7204 
       
  7205 3) Morgan
       
  7206 	1)	Added dll process attach and detach for ARM and X86 builds
       
  7207 	2)	Added RThread::Context(TDes8 &aDes) to retrieve the register contents of
       
  7208 		a sleeping thread.
       
  7209 	3)	Added RChunk::ReserveAt(TUint8 *) to force allocation of a chunk at the
       
  7210 		specified linear address.
       
  7211 	4)	Ldd/Pdds with static data was broken.  Now fixed.
       
  7212 	5)	Loading Dlls with writable static data now allocates a Data/Bss chunk
       
  7213 		and offers it to F32 to be fixed up.
       
  7214 	6)	Added TInt Dll::Data() to initialise Dll writable static data
       
  7215 
       
  7216 
       
  7217 Version 1.02.118
       
  7218 ================
       
  7219 (Made by Jonathan, 15th October 1997)
       
  7220 
       
  7221 1) Dennis
       
  7222 	1)	Rewrote CObjectIx, CObjectCon and CObjectConIx classes to do their own
       
  7223 		array handling instead of using CArrayFixFlat.
       
  7224 
       
  7225 	2)	Added ARM machine-coded versions of CObjectIx::At, CObjectIx::operator[],
       
  7226 		CObjectCon::At and CObjectCon::operator[].
       
  7227 
       
  7228 	3)	Added ARM machine-coded versions of CActiveScheduler::Start() and
       
  7229 		CServer::RunL().
       
  7230 
       
  7231 	4)	Removed CArrayFixFlat from DPlatProcess. Custom array handling code is now
       
  7232 		used to store the chunks being used by a process.
       
  7233 
       
  7234 	5)	Added ARM machine-coded versions of some commonly used fast Exec:: calls and
       
  7235 		of DPlatProcess::LookupChunk().
       
  7236 
       
  7237 2) Morgan
       
  7238 	1)	Added -M<machineName> switch to WINS command line to pick up
       
  7239 		alternate System ini files from \epoc32\Data.  eg WSEXE -Mfungus
       
  7240 		will use \epoc32\data\fungus.ini
       
  7241 	2)	Froze the Custom Dll against V1.01 E32(114)
       
  7242 	3)	Froze the Variant Dlls (P1,P2,PB,PC,PD,PG,SA,SB,CL) against V1.01 E32(114)
       
  7243 
       
  7244 3) Jonathan
       
  7245 	1)	Changed Snowball A & B physical screen size to 4.4"x1.375".
       
  7246 	2)	New TSAsic::SetCrystalSpeed function in varmsb\va_sasic.cpp.
       
  7247 	3)	Added cakysbd keyboard driver for Snowball B which has a, b, z and :
       
  7248 		instead of arrow keys.
       
  7249 	4)	Snowball B variant autodetects 4MB or 8MB ROM, 1MB or 4MB RAM
       
  7250 	5)	New Hal::StartupReason() type EStartupSafeReset. Currently this is only
       
  7251 		returned by Snowballs when "Home" and "Back" are pressed at boot.
       
  7252 	6)	Replaced Variant::ColdReset with more general Variant::StartupReason.
       
  7253 		This breaks Morgan's variant & custom freezes against 114 for this one
       
  7254 		function, but that's OK because the kernel really is the only component
       
  7255 		that should be calling this.
       
  7256 	7)	New UserSvr::ResetMachine(TMachineStartupType) function. Currently only
       
  7257 		allows a reset type of EStartupWarmReset. Implemented by generating a
       
  7258 		TPlatFault::ESoftwareWarmReset. After the reset the kernel may
       
  7259 		actually report a reason other than EStartupWarmReset if either:
       
  7260 		-	EStartupWarmReset isn't supported (mx86/misa/wins)
       
  7261 		-	The variant supports munging of reset types, ie by holding down
       
  7262 			keys at boot, and those keys are held down (various marm variants).
       
  7263 	8)	New custom and parent functions AutoSwitchOffType, which returns
       
  7264 		ESwitchOffEvent on Snowballs A & B, ESwitchOffHard on other variants.
       
  7265 	9)	New TRawEvent::ESwitchOff. The kernel generates this at auto-switchoff
       
  7266 		time instead of just switching off if the above function returns
       
  7267 		ESwitchOffEvent. The window server (or one of its clients) must call
       
  7268 		UserHal::SwitchOff fairly soon after receiving this event. Made the
       
  7269 		text window server do this. Auto-switchoff is still disabled by default
       
  7270 		on Snowballs A & B becuase wakeup is still broken.
       
  7271 
       
  7272 
       
  7273 4) Matthew
       
  7274 	1)	Enabled hardware filtering on SA and SB digitisers.	Also boosted
       
  7275 		sampling rate to 112 pps.
       
  7276 
       
  7277 	2)	Changed SB variant so that the san-disk is mapped to InternalMedia0
       
  7278 		(ie C:). Make sure you get rid of MEDINT.PDD from your .oby file when
       
  7279 		building roms, or F32 will pick this up and you will still have the
       
  7280 		ram disk as C:.
       
  7281 
       
  7282 
       
  7283 Version 1.02.117
       
  7284 ================
       
  7285 (Made by Jonathan, 5th September 1997)
       
  7286 
       
  7287 1) Dennis
       
  7288 	1)	Rewrote Math:: transcendental functions to use simpler algorithms
       
  7289 		and to run faster. All functions now use polynomial approximations
       
  7290 		instead of rational functions.
       
  7291 
       
  7292 	2)	Added Math::PolyX function to do fast polynomial evaluation using
       
  7293 		TRealX for argument, coefficients and result.
       
  7294 
       
  7295 	3)	Updated T_R64BM to benchmark more functions and to use a range of
       
  7296 		different argument values.
       
  7297 
       
  7298 	4)	Added new test program T_MATH2.EXE to test the accuracy of the
       
  7299 		transcendental functions.
       
  7300 
       
  7301 	5)	Fixed SW-21.
       
  7302 		Changed way in which DLLs statically linked to an EXE are handled.
       
  7303 		Instead of opening a process-relative handle on the DLL, the process'
       
  7304 		code chunk now holds a list of DLLs on which it depends. This list
       
  7305 		is only deleted when the chunk itself is deleted, thus solving the
       
  7306 		problem of two instances of the same EXE running concurrently.
       
  7307 		Added function UserSvr::ExeAddDependency to add a DLL to the process
       
  7308 		code chunk's dependency list.
       
  7309 
       
  7310 2) Matthew
       
  7311 	1)	Added software filtering to Snowball digitiser drivers.
       
  7312 
       
  7313 	2)	Moved initial calibration of digitiser into the TDigitiserXxx::Init3().
       
  7314 		This has also meant that some of the E2Prom functions needed to be
       
  7315 		exported - I exported all the public functions.
       
  7316 		This change has allowed Hal::Init3 to be rearranged to how it was in 114.
       
  7317 
       
  7318 	3)	Fixed small bug in Snowball B Comm2 driver, which was acting as though
       
  7319 		it supported 57600bps.
       
  7320 
       
  7321 3) Rob Pym
       
  7322 	1)	Added support for ARM 7115 - this chip has a few more peripherals
       
  7323 		than the ARM 7110. New functions in ke_eiger.cpp and ke_pic.cpp.
       
  7324 
       
  7325 	2)	Added CL variant for the Cirrus Logic ARM 7115 evaluation board.
       
  7326 		[Jonathan:] Releasables not released because it doesn't build.
       
  7327 
       
  7328 
       
  7329 Version 1.02.116
       
  7330 ================
       
  7331 (Made by Jonathan, 26th August 1997)
       
  7332 
       
  7333 1) Dennis
       
  7334 	1)	Added new extended-precision real class TRealX, defined in
       
  7335 		e32math.h. This class provides 64 bit precision and a dynamic
       
  7336 		range of approx. 1E-9863 to 1E+9863. All member functions are
       
  7337 		assembler coded for speed.
       
  7338 
       
  7339 	2)	Changed GCC compiler helper functions to use TRealX instead
       
  7340 		of TReal96 to speed things up. Also modified all UM_xxx files
       
  7341 		to use TRealX instead of TReal96, apart from UM_DTOR and
       
  7342 		UM_RTOD.
       
  7343 
       
  7344 	3)	Added new test programs T_TREALX, T_R64BM, T_RXBM. T_TREALX
       
  7345 		tests the TRealX member functions. T_R64BM does a benchmark
       
  7346 		test for TReal64 field operations and transcendental functions.
       
  7347 		T_RXBM does a benchmark test for TRealX field operations.
       
  7348 
       
  7349 	4)	Added machine coded versions of Math::Sqrt() and some other
       
  7350 		Math:: functions for ARM.
       
  7351 
       
  7352 2) Jonathan
       
  7353 	1)	Fixed data TX on varmsa/va_com2.cpp and varmpd/va_com3.cpp when
       
  7354 		Fifos are disabled; no longer trys to output >1 byte on TX interrupt.
       
  7355 
       
  7356 	2)  Variant::Init3() on Snowball A & B sets AutoSwitchOffBehavior to
       
  7357 		ESwitchOffDisabled because power management isn't yet implemented.
       
  7358 
       
  7359 	3)	Changed table in Snowball B Variant::SetLcdContrast to correct for
       
  7360 		strange hardware.
       
  7361 
       
  7362 	4)	To reduce noise in the output logs, all .cmd files to build E32 now
       
  7363 		invoke NMAKE with the -nologo flag.
       
  7364 
       
  7365 3) Pete
       
  7366 	1) 	Added Internal ATA media driver (MATISB.PDD) for Lavender prototype B
       
  7367 		build.
       
  7368 
       
  7369 	2)	Change to internal ram media driver on WINS/ARM so that it only
       
  7370 		opens on media device type EFixedMedia0 rather than any fixed media
       
  7371 		type.
       
  7372 
       
  7373 4) Matthew
       
  7374 	1)	Fixed bug in Snowball digitiser drivers which caused execeptions when
       
  7375 		the pen was down. Fixed by moving the queueing of the pen-up timer from
       
  7376 		the interrupt service routine into the Dfc.
       
  7377 
       
  7378 	2)	Added code to read the CTS signal in the Snowball prototype B com2 PDD.
       
  7379 
       
  7380 	3)	Temporarilly made the Snowball prototype B com2 PDD ignore framing
       
  7381 		errors at 38400 bps. This is to allow people downstream to use the port.
       
  7382 
       
  7383 	4)	Further modifications to T_SERIAL for Snowball compatibility.
       
  7384 
       
  7385 Version 1.02.115
       
  7386 ================
       
  7387 (Made by Jonathan, 16th August 1997)
       
  7388 
       
  7389 1) Graham
       
  7390 		1)      Changed in RAM standby code to have a delay loop
       
  7391 				rather than the previous faulty inmplementation
       
  7392 				which attempted to validate the ROM by
       
  7393 				continually reading it until it returned a known
       
  7394 				good value - this was erroneous because the ROM
       
  7395 				reads were coming from the cache anyway.
       
  7396 
       
  7397 				Then I commented out this code and replaced it with
       
  7398 				the traditional code that runs from ROM (this was
       
  7399 				only introduced as a result of some hardware paranoia
       
  7400 				when we were getting 'unable to switch on' bugs in
       
  7401 				the run up to V1.00
       
  7402 
       
  7403 		2)      Updated minor version number to 02.
       
  7404 
       
  7405 2) Dennis
       
  7406 	1)	Modified emergency power-down FIQ handler so that it
       
  7407 		only performs the bare minimum of tasks when the machine
       
  7408 		is powered up again. Other more time-consuming tasks have
       
  7409 		been moved into a DFC.
       
  7410 
       
  7411 	2)	Added new machine code versions of TInt64 functions for MARM,
       
  7412 		WINS and MX86 which don't use the TInt64A class.
       
  7413 
       
  7414 	3)	Added machine coded versions of some 8-bit descriptor functions
       
  7415 		for MARM in new file UPMARM\UP_DES8.CPP.
       
  7416 
       
  7417 	4)	Added machine coded versions of RHeap::Alloc(), RHeap::Free()
       
  7418 		for MARM REL.
       
  7419 
       
  7420 	5)	Modified Mem::Copy() to run faster when source and destination
       
  7421 		addresses are unaligned, or when a small copy is required.
       
  7422 
       
  7423 3) Ann
       
  7424 		1)		Fixed rounding bug where the number of intervening zeros
       
  7425 				after the decimal point in a descriptor was being ignored
       
  7426 				when next non-zero digit is out of range of precision when
       
  7427 				converting to real.
       
  7428 
       
  7429 4) Matthew/Jonathan
       
  7430 		1)		Added Snowball B variant for use with the Snowball prototype.
       
  7431 
       
  7432 		2)		With a TSAsic class to access the ASIC on the Snowball prototype.
       
  7433 
       
  7434 5) Matthew
       
  7435 		1)		Added digitiser drivers for snowballs A and B.
       
  7436 
       
  7437 		2)		Added a virtual SetCalibration() function to the TXYInput
       
  7438 				class, so that future digitiser drivers can use hardware
       
  7439 				calibration, if this is available.
       
  7440 				Currently none of the drivers use this (including the Snowball
       
  7441 				ones) and they return KErrNotSupported.
       
  7442 
       
  7443 		3)		Added a comm pdd for the Snowball prototype asic. There are
       
  7444 				several known bugs in this driver.
       
  7445 				Made some modifications to T_SERIAL so that it does not test
       
  7446 				things beyond the capabilities of the comm port when running
       
  7447 				on a Snowball.
       
  7448 
       
  7449 6) Jonathan
       
  7450 		1)		Fixed problem caused by reading IID register too often in
       
  7451 				Snowball A 2nd comm pdd.
       
  7452 		2)		Added IR support to Snowball B 1st comm pdd (untested).
       
  7453 
       
  7454 		Failing on Snowball B prototype:
       
  7455 		-	tests t_power, t_timer, t_chunk, t_serial, t_idrv, t_pccd1, t_pccd2
       
  7456 		-	Power up after switch-off
       
  7457 
       
  7458 
       
  7459 Version 1.01.114
       
  7460 ================
       
  7461 (Made by Graham, 29th July 1997)
       
  7462 
       
  7463 1) Matthew
       
  7464 		1)      SW1-244 Fixed sound driver so that it no longer returns
       
  7465 				KErrAlreadyExists if a prepare function is called
       
  7466 				twice. Changed test code accordingly.
       
  7467 
       
  7468 2) Morgan
       
  7469 		1)      SW3-1556 Removed dependency in M32HAL.H on M32DBG.H and
       
  7470 				re-inserted dependency on M32DBG.H in appropriate .CPP
       
  7471 				files.
       
  7472 
       
  7473 
       
  7474 Version 1.01.113
       
  7475 ================
       
  7476 (Made by Graham, 25th July 1997)
       
  7477 
       
  7478 1) Dennis
       
  7479 	1)	Fixed CSW3-1559, CSW3-1560, CSW3-1530, SW1-91, SW1-155, SW1-158
       
  7480 		Added doubly-linked tree structure to DLibrary objects to record which
       
  7481 		DLLs depend on which. The access count of a DLibrary object is now equal to
       
  7482 		the number of thread/process handles open on it, plus the number of other
       
  7483 		DLibrary objects which have a dependency on it. Added code to DLibrary::Close()
       
  7484 		to check that a DLL is really in use (directly or indirectly) by traversing
       
  7485 		the tree structure and to delete it if it is not. Added a new supervisor function
       
  7486 		UserSvr::DllAddDependency() used by the loader to record DLL dependencies.
       
  7487 
       
  7488 2) Matthew
       
  7489 	1)	Fixed bug in sound ldd which caused buffers to be orphaned on the kernel heap if
       
  7490 		a prepare function was called twice. This now returns KErrAlreadyExists.
       
  7491 		Added test code to t_sound.
       
  7492 
       
  7493 3) Graham
       
  7494 		1)      Made further changes to the backup battery levels:
       
  7495 
       
  7496 				Good -> Low     2850
       
  7497 				Low -> Replace  2800
       
  7498 
       
  7499 				Replace -> Low  2850
       
  7500 				Low -> Good     2900
       
  7501 
       
  7502 				Not present     2000
       
  7503 
       
  7504 		2)      SW1-201. Reduced the maximum voltage of the main battery
       
  7505 				from 3100mV to 3000mV.
       
  7506 
       
  7507 		3)      SW1-179. Removed redundant IMPORT_C declarations from
       
  7508 				E32BASE.H on:
       
  7509 
       
  7510 				CServer::NewSessionL
       
  7511 				CSession::ServiceL
       
  7512 
       
  7513 		4)      Added Charles Wier's ASSERT macro.
       
  7514 
       
  7515 		5)      Changed the battery voltage reading algorithm. I used
       
  7516 				to do one one dummy read on the adc channel then wait
       
  7517 				10mS then take the real reading. I now do 10 dummy
       
  7518 				reads at the rate of one every millisecond and then
       
  7519 				take the real reading.
       
  7520 
       
  7521 		6)      Fixed the .REL files to release Dutch and French
       
  7522 				localisation dlls and a french keyboard table for MARM P2.
       
  7523 
       
  7524 		7)      Added Scandinavian localisation dll in WINS and MARM
       
  7525 				builds.
       
  7526 
       
  7527 		8)      Added DANISH/NORWEGIAN keyboard table (CAKDP2.DN) and
       
  7528 				SWEDISH/FINNISH keyboard table (CAKDP2.SF) for P2
       
  7529 				MARM builds.
       
  7530 
       
  7531 Version 1.01.112
       
  7532 ================
       
  7533 (Made by Graham, 17th July 1997)
       
  7534 
       
  7535 1) Dennis
       
  7536 	1)	Fixed CSW-2710, SW1-114
       
  7537 		Changed four kernel faults to K::PanicCurrentThread with new KERN-EXEC
       
  7538 		panic numbers; these are KK::EMesAlreadyPending, KK::EEvntRequestPending
       
  7539 		and two instances of PP::EIllegalWsProcess.
       
  7540 
       
  7541 	2)	Fixed CSW3-880
       
  7542 		Corrected checking of filename length in RLoader::LoadProcess() and added
       
  7543 		a check for the command line length.
       
  7544 
       
  7545 	3)	Fixed CSW3-1340
       
  7546 		Changed the code to allow both heap min size and heap max size to be zero.
       
  7547 		However if heap max size < 256, then a value of 256 will actually be used.
       
  7548 
       
  7549 	4)	Fixed CSW3-1601
       
  7550 		Set up the value of K::TickCounter in the RTC tick ISR rather than in code
       
  7551 		which runs asynchronously to the RTC tick. Reinitialise K::TickCounter when
       
  7552 		the system time is changed.
       
  7553 
       
  7554 	5)	Fixed CSW3-1670
       
  7555 		Added function TBool TTickQ::CheckMidnightCrossover(TInt aSecs) to check if
       
  7556 		a midnight crossover has occurred and set iTomorrowStarts accordingly. Added
       
  7557 		overloaded function void TSecondQ::SystemTimeChanged(TUint& aChanges)
       
  7558 		to abort all absolute and locked timers and set the EChangesMidnightCrossover
       
  7559 		bit in aChanges if a system time change results in a midnight crossover.
       
  7560 		TSecondQ::SystemTimeChanged() now calls this function, as does
       
  7561 		ExecHandler::LocaleSet(). Updated T_CHNOT.CPP to test the new RChangeNotifier
       
  7562 		behaviour.
       
  7563 
       
  7564 	6)	Modified prefetch abort handler to set iDataAddress to the value of lr when
       
  7565 		the exception occurred.
       
  7566 
       
  7567 	7)	Corrected User::StartThread to call DLL entrypoints with EDllThreadDetach
       
  7568 		rather than EDllThreadAttach when the thread exits.
       
  7569 
       
  7570 	8)	Set the RTC correction to zero on a cold start. (Forgot this last time!)
       
  7571 
       
  7572 2) Graham
       
  7573 		1)      Added code to fetch the language index and the keyboard
       
  7574 				index from E2. Added these values to the machine info
       
  7575 				structure (UserHal::MachineInfo()) by adding class
       
  7576 				TMachineInfoV2 which derives from TMachineInfoV1.
       
  7577 
       
  7578 		2)      Modified the text window server to load a different
       
  7579 				localisation module and keyboard module according to
       
  7580 				the language and keyboard indexes read from E2.
       
  7581 
       
  7582 		3)      Increased the adjustment for current consumption
       
  7583 				that is made prior to establishing whether the main
       
  7584 				battery status should fall.
       
  7585 
       
  7586 		4)      Reduced the voltage levels at which the main battery
       
  7587 				status changes. Low is now at 2150mV, Replace is now
       
  7588 				at 1900mV (P2 and PD variants only).
       
  7589 
       
  7590 		5)      Reduced the max backup battery voltage to 3100mV in
       
  7591 				line with the max main battery voltage  (P2 and PD
       
  7592 				variants only).
       
  7593 
       
  7594 		6)      Reduced the voltage levels at which the backup up
       
  7595 				battery status changes:
       
  7596 
       
  7597 								Old (mV)        New (mV)
       
  7598 				Good -> Low     2900            2800
       
  7599 				Low -> Replace  2800            2750
       
  7600 
       
  7601 				Replace -> Low  2850            2780
       
  7602 				Low -> Good     3000            3000
       
  7603 
       
  7604 				Not present     2000            2000
       
  7605 
       
  7606 		7)      Added kernel side EXPORTS for:
       
  7607 						S::ChunkCreate
       
  7608 						S::LibraryLoadExact
       
  7609 						S::MutexCreate
       
  7610 						S::PhysicalDeviceLoad
       
  7611 						S::PhysicalDeviceFree
       
  7612 						S::SemaphoreCreate
       
  7613 
       
  7614 
       
  7615 3) Basher
       
  7616 		1)      Added new function in the keyboard translation dll
       
  7617 				(ChangeKeyData) which loads a different keyboard data
       
  7618 				module.
       
  7619 
       
  7620 4) Pete
       
  7621 		1)      When interrogating the CIS of a PC Card to determine the cards type,
       
  7622 				the PC Card controller verifies the integrity of the CIS by
       
  7623 				attempting to follow each CIS chain to the end. While performing this
       
  7624 				operation the controller is currently reading each tuple entirely
       
  7625 				rather than just checking its type and link. This is un-necesary and
       
  7626 				in fact not recomemded. Unknown tuples may contain active registers.
       
  7627 				This change fixes the problem.
       
  7628 
       
  7629 
       
  7630 Version 1.01.111
       
  7631 ================
       
  7632 (Made by Graham, 11th July 1997)
       
  7633 
       
  7634 1) Jonathan
       
  7635 	1) Small fix to DPccdCntrlInterface::DoNotifyChange and DoChangeFlag to return
       
  7636 	   KErrGeneral instead of panicing on being passed an invalid socket number.
       
  7637 	2) Kernel now exports all of DPlatChunkHw so that device drivers can map
       
  7638 	   in their own memory-mapped registers etc.
       
  7639 	3) Added 2nd serial port (16550-based) to Snowball MARM variant. Currently
       
  7640 	   just a dummy because of a suspected bug triggered by ~DPlatChunkHW().
       
  7641 	4) Variant::TestBootSequence on Snowball is always True. This enables an
       
  7642 	   (alternative) etest.exe to be run on boot, which starts elink before booting
       
  7643 	   normally.
       
  7644 	5) Added etestl.exe which does the above.
       
  7645 
       
  7646 2) Pete
       
  7647 	1)	Fixed SW3-1226
       
  7648 		Makes it possible to force accesses to as particular type of PC Card
       
  7649 		memory (ie Common,Attribute,I/O) to be 8-bit accesses only (ie 32bit
       
  7650 		word accesses disabled). This mode can be enabled in the function
       
  7651 		Variant::PcCardCntrlMemConfig() by returning KMemConfigByteAccess.
       
  7652 		This is to support h/w implementations which can't support 32-bit accesses
       
  7653 		to PC Card memory.
       
  7654 
       
  7655 3) Dennis
       
  7656 	1)	Fixed SW3-1321
       
  7657 		Moved the RTC correction value and last set time into the super page so
       
  7658 		that they will be preserved over warm resets. This stops strange offsets
       
  7659 		from being added to the system time when the machine is switched off and on.
       
  7660 
       
  7661 	2)	Moved the definition of the super page from M32STD.H to K32STD.H. Added a
       
  7662 		super page to the WINS build. Moved the battery statistics (insertion time,
       
  7663 		time on main battery, time on external power, battery power used) from K::
       
  7664 		into the super page so that they will be preserved over warm resets.
       
  7665 
       
  7666 	3)	Fixed SW3-1419
       
  7667 		Removed all user access from user data chunks in the home section. Changed
       
  7668 		the way the stack/heap chunk is created on thread creation - the pages are
       
  7669 		now allocated using DPlatChunk::AdjustL() instead of AdjustUserL(). This means
       
  7670 		that the pages are immediately mapped with the correct page permissions
       
  7671 		rather than with full user access. Removed the line in DPlatProcess::Loaded()
       
  7672 		which applies the final page permissions to the main thread's stack/heap chunk.
       
  7673 
       
  7674 	4)	Fixed SW3-1317
       
  7675 		Modified function RUserHeap::SvClose() so that if it finds the access count of
       
  7676 		the heap negative, it panics the owning process rather than causing a kernel fault.
       
  7677 
       
  7678 	5)	Fixed SW3-1311
       
  7679 		Fixed operator precedence error in CObjectIx::Remove().
       
  7680 
       
  7681 	6)	Fixed SW3-770, SW3-1539
       
  7682 		Modified DPlatProcess::DoSetPriority() to recursively descend the tree of threads
       
  7683 		owned by the process and adjust their priorities (previously, thread-relative threads
       
  7684 		were not adjusted).
       
  7685 		Introduced a new set of absolute thread priorities which enable the priority of a
       
  7686 		thread to be made independent of the priority of its owning process.
       
  7687 		Note that this upgrade requires a modification to the SHELL to set the priority of
       
  7688 		the EIKON server thread to EPriorityAbsoluteForeground instead of EPriorityMore.
       
  7689 
       
  7690 	7)	Fixed SW3-319
       
  7691 		Added a new exported function Kern::PanicCurrentThread(const TDesC&, int) which panics
       
  7692 		a thread by sending a message to the kernel server (like K::PanicCurrentThread).
       
  7693 		Modified D_COMM.CPP to call this function instead of DPlatThread::Panic().
       
  7694 
       
  7695 	8)	Fixed SW3-1604
       
  7696 		Modified RThread::RaiseException() so that if the exception is unhandled, it panics
       
  7697 		with ECausedException rather than calling User::Exit(KErrDied);
       
  7698 
       
  7699 	9)	Fixed SW3-4688
       
  7700 		Modified UPWINS\UP_TRP.CPP to do a ret 4 at the end of User::Leave() instead
       
  7701 		of a compiler-generated ret 0. Applied the same modification to the X86 build.
       
  7702 
       
  7703 	10) Fixed SW3-1408, SW3-1671
       
  7704 		Modified UCDT\UC_REGN.CPP TRegion::SubRect() to return without doing anything if
       
  7705 		the rectangle to be subtracted is empty. Applied the same modification to the
       
  7706 		ARM version in UPMARM\UP_UTL.CPP.
       
  7707 
       
  7708 	11)	Fixed SW-4688
       
  7709 		Modified UPWINS\UP_TRP.CPP User::Leave() to end with a ret 4 instead of a ret 0.
       
  7710 		Applied the same modification to the MX86 version.
       
  7711 
       
  7712 	12)	Fixed SW3-1149
       
  7713 		Added an inline accessor function for the iThread member of CAsyncOneShot to
       
  7714 		allow the handle to be changed.
       
  7715 
       
  7716 	13)	Fixed SW3-1604
       
  7717 		Modified RThread::RaiseException() so that if the exception is unhandled, it
       
  7718 		panics with ECausedException rather than calling User::Exit(KErrDied);
       
  7719 
       
  7720 	14)	Fixed SW-5529
       
  7721 		Modified RLibrary::LoadRomLibrary in UPMARM\UP_LIB.CPP and UPMX86\UP_LIB.CPP
       
  7722 		to close a handle in all possible cases.
       
  7723 
       
  7724 	15) Fixed SW-5530
       
  7725 		Modified KS_SEM.CPP, KS_MUTX.CPP and KS_CHK.CPP so that if a global object is
       
  7726 		created with a thread-relative handle, it has no owner.
       
  7727 
       
  7728 	16)	Modified DPlatThread::Die() so that if a system thread panics, the machine resets.
       
  7729 
       
  7730 	17)	Fixed SW1-22
       
  7731 		Modified CObjectIx destructor to invalidate each array entry after closing it.
       
  7732 		Modified CObjectIx::Remove() to panic if an attempt is made to remove an entry with
       
  7733 		a null object pointer.
       
  7734 		Modified S::Close() to check if the handle is valid before attempting to close it.
       
  7735 
       
  7736 	18)	Fixed CSW3-1426
       
  7737 		Made 0x10 (DLE, non-breaking space character in OPL) a whitespace character.
       
  7738 
       
  7739 	19)	Fixed CSW-5500
       
  7740 		Check for nDig<0 in doGeneral() function, return KErrGeneral in this case.
       
  7741 
       
  7742 4) Matthew
       
  7743 	1) Fixed SW3-883
       
  7744 	   Moved the undertaker notification call Kern::NotifyThreadDeath() from
       
  7745 	   DThread::Cleanup() to DThread::DoDie(), so it is called before any child threads
       
  7746 	   are killed.
       
  7747 	   Added test to T_THREAD.
       
  7748 
       
  7749 	2) Fixed SW3-1173
       
  7750 	   Made "%X" give upper-case, instead of lower-case hex.
       
  7751 	   Added test to T_BUF.
       
  7752 
       
  7753 	3) Changed T_SOUND test code so that it actually tests that keyclicks are disabled
       
  7754 	   during recording.
       
  7755 
       
  7756 	4) Renamed Variant::TVarmpdPanic to TVarmp2Panic in P2 variant.
       
  7757 
       
  7758 	5) Made varmp2\va_prom.cpp #include v32armp2.h instead of v32armpd.h.
       
  7759 
       
  7760 5) Graham
       
  7761 		1) Anns fix for incompatibility between random number
       
  7762 		   generation on WINS and MARM.
       
  7763 
       
  7764 		2) Martin Tasker's updated header files E32BASE.H and
       
  7765 		   E32DEF.H for MSVC 5.0 compliance.
       
  7766 
       
  7767 		3) Increased RAM refresh rate to the maximum in the
       
  7768 		   bootstrap. This can then be slowed down in the
       
  7769 		   variant layer if applicable.
       
  7770 
       
  7771 		4) Changed the reschedule code to run with interrupts on.
       
  7772 
       
  7773 		5) Added Charles Wier's __DECLARE_TEST_DEBUG that compiles
       
  7774 		   out in release mode.
       
  7775 
       
  7776 		6) Added Charles Wier's RTest::SetConsole(CConsoleBase*).
       
  7777 
       
  7778 		7) SW3-716 sanitise E32KEYS.H for the resource compiler.
       
  7779 
       
  7780 		8) SW3-1556 released M32MMU.H and .INL in INCK and removed
       
  7781 		   dependency in M32HAL.H on M32DBG.H.
       
  7782 
       
  7783 		9) SW3-1557. Fixed an ASSERT in Mmu::AllocShadowPage().
       
  7784 
       
  7785 		10) Added new Central European language enums to TLanguage.
       
  7786 
       
  7787 		11) Changed RNotifier::Connect to use its own version number
       
  7788 			instead of the operating system version number - the
       
  7789 			notifier interface is updated independently of E32.
       
  7790 
       
  7791 		12) Merged in new in localisation files since 110.
       
  7792 
       
  7793 		13) Fixed bug in ARM architecture which caused ADC code
       
  7794 			to be called when the variant specified that no
       
  7795 			ADC was fitted - caused problems for Delaware.
       
  7796 
       
  7797 		14) Changed the main battery monitoring code to compensate
       
  7798 			for voltage drops with high current consumption when
       
  7799 			calculating changes in battery status.
       
  7800 
       
  7801 		15) Changed the main battery monitoring code to increase
       
  7802 			the frequency that it samples the main battery voltage
       
  7803 			when other components are interested in obtaining
       
  7804 			accurate readings of that voltage.
       
  7805 
       
  7806 		16) Changed the P2 and PD sound driver to divorce its ability
       
  7807 			to play digital sound from the main battery status. It
       
  7808 			now has two threshhold voltages - one at 2200mV below
       
  7809 			which no sound driver operation will begin and another
       
  7810 			at 2000mV below which any sound driver operation that
       
  7811 			is in progress will be aborted.
       
  7812 
       
  7813 		17) Fixed the backup battery code which caused its status to
       
  7814 			oscillate between Good and Low every time you switched
       
  7815 			off and on.
       
  7816 
       
  7817 			These fixes, in combination should fix CSW-5376, CSW3-682,
       
  7818 			CSW3-1672
       
  7819 
       
  7820 6) Basher
       
  7821 		1) Added new user server function "ChangeLocale" to change
       
  7822 		   localisation dll.
       
  7823 
       
  7824 Version 1.00.110
       
  7825 ================
       
  7826 (Made by Graham , 5th June 1997)
       
  7827 
       
  7828 1) Graham / Jonathan / Morgan / Colly
       
  7829 		1) Fixed a bug in the Comms LDD emergency power down code.
       
  7830 		   This was causing interrupts to be enabled which then
       
  7831 		   caused the kernel irq handling routine to reenable
       
  7832 		   fiqs thus causing the fiq handler to be reentered with
       
  7833 		   subsequent death of a random nature to any user code
       
  7834 		   that might happen to be lying around within reach.
       
  7835 		   Multiple SW's hopefully.
       
  7836 
       
  7837 		2) Introduced interrupt protection around
       
  7838 		   TEiger::ModifyRegister8. This had been introduced into
       
  7839 		   TEiger::ModifyRegister32 a long time ago but somehow got
       
  7840 		   missed out of the 8 bit variant.
       
  7841 
       
  7842 		3) Added protection against rogue irqlevels passed into
       
  7843 		   Hal::RestoreIrqs();
       
  7844 
       
  7845 		4) Added NOPs into the following type of ARM assembler
       
  7846 		   construct:
       
  7847 
       
  7848 				asm("stmia lr, {r13-r14}^");
       
  7849 				asm("add lr, lr, #8");
       
  7850 
       
  7851 		   This now becomes:
       
  7852 
       
  7853 				asm("stmia lr, {r13-r14}^");
       
  7854 				asm("mov r0, r0");
       
  7855 				asm("add lr, lr, #8");
       
  7856 
       
  7857 		   The ARM manual advises against using a banked register
       
  7858 		   directly after any user-bank load or store multiple
       
  7859 		   instruction.
       
  7860 
       
  7861 		5) Added T_IRQS test code developed by Alastair.
       
  7862 
       
  7863 
       
  7864 Version 0.01.109
       
  7865 ================
       
  7866 (Made by Graham , 3rd June 1997)
       
  7867 
       
  7868 1) Dennis
       
  7869 	1) 2/6/97
       
  7870 	Fixed SW-3795, SW-3798
       
  7871 	Set main battery insertion time after initialising RTC
       
  7872 	When system time is set, main battery insertion time is changed
       
  7873 	by (new system time-old system time)
       
  7874 	Moved initialisation of Locale data from S::Initialise() to P::Initialise()
       
  7875 	just after Hal::Init1(). This is necessary to make sure that the home time
       
  7876 	offset is initialised before the system time on a cold start.
       
  7877 
       
  7878 		2) Fixed alloc heaven problem in KS_CHN.CPP whereby a
       
  7879 		physical channel is created and not deleted if the
       
  7880 		corresponding logical channel creation failed.
       
  7881 
       
  7882 2) Matthew
       
  7883 	1) Changed sound and comms emergency power-down code to do their completions
       
  7884 	with DFCs. This seems to fix the exception-type resets associated with
       
  7885 	emergency power-downs.
       
  7886 
       
  7887 	2) Fixed a bug in the sound driver's write-to-thread code where the home
       
  7888 	address of the user buffer was not being used. Spotted by Colly.
       
  7889 
       
  7890 	3) Fixed bug in sound driver where if an Open() failed with OOM then any
       
  7891 	subsequent attempts to open would fail with KErrInUse. Spotted by Colly.
       
  7892 
       
  7893 3) Pete
       
  7894 		1) Fixed SW3-998: Prevents emergency power downs occuring
       
  7895 		   while servicing PC Card interrupts from generating an exception.
       
  7896 
       
  7897 
       
  7898 		2) Fixed SW3-974: Machine reset inserting CF card with OOM.
       
  7899 		   Fix is low risk (FLW). One part affects code only called in OOM
       
  7900 		   situation, and the other is minor change to a destructor.
       
  7901 
       
  7902 4) Graham
       
  7903 		1) Fixed a bug in the comms logical device driver. This bug
       
  7904 		   prevented the machine from switching on sometimes in the
       
  7905 		   presence of an oscillating DSR input (like Nautilus).
       
  7906 
       
  7907 		2) Fixed a bug in the backup battery handling when switching
       
  7908 		   on. This again was preventing machine from turning on
       
  7909 		   occasionally. Thanks to Colly, Bill and Morgan for help
       
  7910 		   finding this one. SW3-666 (the number of the beast).
       
  7911 
       
  7912 		3) SW3-877. Slowed down the turning off of the display
       
  7913 		   when switching off normally - the previous behaviour
       
  7914 		   may have been damaging to the lcd panel. (UNAPPROVED)
       
  7915 
       
  7916 		4) SW3-997 fixed a keyboard table bug when pressing FN+B
       
  7917 		   followed by the space bar - previously gave a little
       
  7918 		   circle; now gives a circumflex. (UNAPPROVED)
       
  7919 
       
  7920 		5) Upped the LCD pump value to 11 from 8. SW3-354.
       
  7921 		   (UNAPPROVED)
       
  7922 
       
  7923 		6) Changed MachineInfo for P2 to describe the microprocessor
       
  7924 		   as an ARM 7100 rather than an ARM 7110. SW3-1028.
       
  7925 		   (UNAPPROVED).
       
  7926 
       
  7927 5) Morgan
       
  7928 		1) Fixed RTC error. Conversion between parts per 4000000
       
  7929 		   and parts per 2^24 was wrong.
       
  7930 
       
  7931 Version 0.01.108
       
  7932 ================
       
  7933 (Made by ---, --- May 1997)
       
  7934 
       
  7935 1) Matthew
       
  7936 	1) 22/5/97
       
  7937 	Fixed SW-5406: Made the fall-back alarm sound slightly less offensive.
       
  7938 	Forward and backward compatible.
       
  7939 
       
  7940 	2) 22/5/97
       
  7941 	Fixed SW-4899: WINS comms pdd no longer calls the ldd's transmit ISR the
       
  7942 	extra time.
       
  7943 	Backward compatible, not forward if you were assume the transmit ISR
       
  7944 	can only be called once.
       
  7945 
       
  7946 	3) 22/5/97
       
  7947 	Fixed SW3-293: Moved EWSRV.DLL to base 0x42800000 so it no longer clashes
       
  7948 	with dsound.ldd.
       
  7949 	Forward and backward compatible.
       
  7950 
       
  7951 	4) 22/5/97
       
  7952 	Fixed SW3-372: Added the '%.' label to TTime::FormatL. This gives the
       
  7953 	locale decimal separator. Test code in T_TIME.
       
  7954 	Backward compatible, not forward compatible - previous versions of
       
  7955 	E32 reduced '%.' to '.' whatever the locale information was.
       
  7956 
       
  7957 2) Morgan
       
  7958 	1) 23/5/97
       
  7959 	Fixed SW-4604:  When a growing Ram Drive hits a page containing
       
  7960 	page tables the page allocator attempts to move them.  This code was
       
  7961 	assuming all four page tables in the page were in use which is not
       
  7962 	always the case, causing the allocator to Leave.  To fix this, trapped
       
  7963 	the Leave when an unused page table is not found in the PageDir.
       
  7964 	Forward and Backward compatible.
       
  7965 
       
  7966 	2) 27/5/97
       
  7967 	Applied the correct Uids and capitalised the names of EKern and EFile
       
  7968 	by hand during startup.   Required because neither of these processes
       
  7969 	are loaded by the file server (which is normally responsible for doing
       
  7970 	that).
       
  7971 
       
  7972 	3) 27/5/97
       
  7973 	Added RProcess::SetType(const TUidType &aType) and test code.
       
  7974 	Backward compatible
       
  7975 
       
  7976 3) Ann
       
  7977 	1) 27/5/97
       
  7978 	Changed KRealFormatNoExponent to use a maximum of aMaxSigFigs digits.
       
  7979 	Updated test code accordingly.
       
  7980 
       
  7981 4) Graham
       
  7982 	1) 28/5/97
       
  7983 	SW3-495. Reduced the risk of E32 getting out of step with case
       
  7984 		opening/closing
       
  7985 
       
  7986 		2) 28/5/97
       
  7987 		Introduced BLDARMREL as a synonym for ARMREL in MNT.CMD and
       
  7988 		removed the need to do MAKEWORK before building.
       
  7989 
       
  7990 
       
  7991 Version 0.01.107
       
  7992 ================
       
  7993 (Made by ---, --- May 1997)
       
  7994 
       
  7995 1) Graham
       
  7996 		1) Removed MEDCRR.MAP and DATXPD3.MAP from MARM releaseables
       
  7997 
       
  7998 		   Forward and backward compatible.
       
  7999 
       
  8000 		2) Removed EKERN.LIB from WINC releaseables
       
  8001 
       
  8002 		   Forward and backward compatible.
       
  8003 
       
  8004 		3) Upgrade 003
       
  8005 
       
  8006 		   Fixed SW3-282. If the 'switch off when case is closed' option was
       
  8007 		   enabled and one switched off, closed the case, then attempted to wake
       
  8008 		   the machine up using the external buttons or by asserting dsr, then
       
  8009 		   the machine would remain dead until the next warm reset.
       
  8010 
       
  8011 		   This was fixed by reading the state of the case when coming out of
       
  8012 		   standby as well as every second while switched on.
       
  8013 
       
  8014 		   Forward and backward compatible.
       
  8015 
       
  8016 		4) Upgrade 007
       
  8017 
       
  8018 		   Removed the ability to turn on using the digitiser after an emergency
       
  8019 		   power down. This makes the behaviour consistent with 'Switch on when
       
  8020 		   case is opened'. SW-5282
       
  8021 
       
  8022 		   Forward and backward compatible.
       
  8023 
       
  8024 		5) Upgrade 008
       
  8025 
       
  8026 		   Upgraded P2 and PD digitiser drivers to include debouncing logic
       
  8027 		   (SW-874 and duplicates).
       
  8028 
       
  8029 		   Forward and backward compatible.
       
  8030 
       
  8031 		6) Upgrade 009
       
  8032 
       
  8033 		   Upgraded P2 and PD comms pdd's. These now implement the following
       
  8034 		   current consumption scheme.
       
  8035 
       
  8036 				RS232 drivers enabled           2mA
       
  8037 				Cable connected                 + 22 mA
       
  8038 				Ir enabled                      0 mA
       
  8039 				Ir receiving                    0 mA
       
  8040 				Ir transmitting                 + 35 mA
       
  8041 
       
  8042 		   The cable is detected by either:
       
  8043 
       
  8044 				1) DSR high
       
  8045 				2) Character received
       
  8046 
       
  8047 		   Forward and backward compatible.
       
  8048 
       
  8049 2) Pete
       
  8050 		1) Upgrade 001
       
  8051 
       
  8052 		   Fixed SW3-331. Formatting of Local Drives was being done cardSize/32
       
  8053 		   bytes at a time. This was OK on smaller CF cards but on larger ones
       
  8054 		   (eg 16M Hitachi CF) it was locking up the machine for long periods
       
  8055 		   (because F32 which is running during each sub-format is at a high
       
  8056 		   priority). Changed so that a Local Drive is formatted
       
  8057 		   Min(16K,size/32) bytes at a time.
       
  8058 
       
  8059 		   Forward and backward compatible.
       
  8060 
       
  8061 		2) Upgrade 004
       
  8062 
       
  8063 		   In addition to having the option to disable compatibility checking between a cards
       
  8064 		   Vcc level requrements and those supported by a machine, it is now possible
       
  8065 		   to disable Vcc current and Vpp level compatibility checking in
       
  8066 		   TPcCardConfig::IsMachineCompatible().
       
  8067 
       
  8068 		   Backward compatible, not forward.
       
  8069 
       
  8070 		3) Upgrade 005
       
  8071 
       
  8072 		   Fixed a problem parsing device info. tuples which fail to provide the
       
  8073 		   end of field character. TCisReader::FindReadRegion() now checks the
       
  8074 		   length of such a tuple and doesn't rely on the terminating character
       
  8075 		   being present.
       
  8076 
       
  8077 		   Forward and backward compatible.
       
  8078 
       
  8079 		4) Upgrade 006
       
  8080 
       
  8081 		   Various changes to Pc Card Serial Port PDDs:
       
  8082 		   - Added Cellular Card Phone Serial Driver (VA_NCCP.CPP) for Rack D.
       
  8083 		   - Fixed a problem with the standard Modem Card Serial Driver (EUART3.PDD)
       
  8084 			 when writing to the card at 115Kbps. The driver wasn't making full
       
  8085 			 use of the Tx FIFO and was spending too long servicing interrupts
       
  8086 			 resulting in a triple beep reset due to the watchdog timing out.
       
  8087 			 Also disabled Vpp compatibility checking in order to support the
       
  8088 			 WorldPort modem.
       
  8089 			 The full list of supported modems is now:-
       
  8090 			- Socket I/O serial port
       
  8091 			- Dacom Goldcard V34 + Fax
       
  8092 			- Dacom GoldCard Global (V34+Fax)
       
  8093 			- Hayes Optima 288
       
  8094 			- US Robotics WorldPort
       
  8095 			- MegaHertz XJ2288
       
  8096 			- Trellis Datacom PC288V2
       
  8097 			- Com1 Modem Card MC218
       
  8098 			- Paldio Data card
       
  8099 		   - Changes to Delaware standard Modem Card Serial Driver (EUART2.PDD)
       
  8100 			 to bring it up to same standard as the Rack D driver.
       
  8101 			 None of this affects Protea P2.
       
  8102 
       
  8103 		   Forward and backward compatible.
       
  8104 
       
  8105 3) Ann
       
  8106 		1) Upgrade 002
       
  8107 
       
  8108 		   Fixed SW-4304, SW3-415.  TRealFormat changes.  Changed
       
  8109 		   Calculator mode to discard trailing zeros first and then to decide on
       
  8110 		   exponential or non-exponential format based on the number of digits
       
  8111 		   available.  If the number of digits (including significant leading/trailing
       
  8112 		   zeros) when using non-exponential format would exceed aMaxSigFigs, then
       
  8113 		   exponential format would be used, so reducing to no more than aMaxSigFigs.
       
  8114 		   Fixed SW3-416.  The above changes should been this situation won't
       
  8115 		   occur, but leaves space for sign now, just in case!
       
  8116 		   Also T_FLOAT test code improved and updated.
       
  8117 
       
  8118 
       
  8119 Version 0.01.106
       
  8120 ================
       
  8121 (Made by Graham, 19th May 1997)
       
  8122 
       
  8123 1) Graham
       
  8124 		1) Implemented MNT VALID verb.
       
  8125 
       
  8126 		   Forward and backward compatible.
       
  8127 
       
  8128 		2) Updated all version numbers to 1.0(106)
       
  8129 
       
  8130 		   The compatibilty issues for this are quite complicated.
       
  8131 		   However, I believe these changes to be both forward and
       
  8132 		   and backward compatible.
       
  8133 
       
  8134 		3) Added .MAP files to MARM releasables.
       
  8135 
       
  8136 		   Forward and backward compatible
       
  8137 
       
  8138 		4) Changed idle current to 38mA, backlight current to 98mA.
       
  8139 
       
  8140 		   Forward and backward compatible
       
  8141 
       
  8142 		5) Upgrade 004
       
  8143 
       
  8144 		   Changed the WINS fascia to reflect the changed order on the
       
  8145 		   application bar.
       
  8146 
       
  8147 		   Forward and backward compatible
       
  8148 
       
  8149 		6) Upgrade 009
       
  8150 
       
  8151 		   Fix which defends against the possibility that the Flash ROM will not
       
  8152 		   wake up quickly enough when coming out of standby. We jump into RAM
       
  8153 		   to execute the standby instruction. When we come out of standby we
       
  8154 		   check the ROM is reading correctly before jumping back.
       
  8155 
       
  8156 		   Forward and backward compatible
       
  8157 
       
  8158 		7) Upgrade 010
       
  8159 
       
  8160 		   SW-5179 Return an error if an attempt is made to turn the backlight
       
  8161 		   on when the main batteries are set to 'replace' and no external power
       
  8162 		   is being applied.
       
  8163 
       
  8164 		   Forward and backward compatible
       
  8165 
       
  8166 		8) Upgrade 011
       
  8167 
       
  8168 		   Reduce default on time of backlight to one minute and make it
       
  8169 		   sensitive to user activity.
       
  8170 
       
  8171 		   Forward and backward compatible
       
  8172 
       
  8173 		9) Upgrade 012
       
  8174 
       
  8175 		   SW-5319 Changed default screen contrast of PD and P2 variants
       
  8176 
       
  8177 		   Forward and backward compatible
       
  8178 
       
  8179 	   10) Upgrade 013
       
  8180 
       
  8181 		   SW-3264 Changed default auto power down behaviour to
       
  8182 		   'Enabled always' and reduced the default timeout to
       
  8183 		   3 minutes.
       
  8184 
       
  8185 		   Forward and backward compatible
       
  8186 
       
  8187 	   11) Upgrade 014
       
  8188 
       
  8189 		   SW-3232 Swop round FN-Q,D and FN-Q,T
       
  8190 
       
  8191 		   Forward and backward compatible
       
  8192 
       
  8193 2) Dennis
       
  8194 		1) Changed wait states on CS1 ROM from 4 to 2 on P2 variant.
       
  8195 
       
  8196 		   Forward and backward compatible
       
  8197 
       
  8198 		2) Modified ImpHal::PrepareForRepro() to leave the cache and
       
  8199 		   write buffer enabled. It is only necessary that the page
       
  8200 		   directory entries for the FLASH are marked as not
       
  8201 		   cacheable or bufferable and that the TLB and cache are
       
  8202 		   flushed, which was already the case.
       
  8203 
       
  8204 		   Forward and backward compatible
       
  8205 
       
  8206 		3) Upgrade 001
       
  8207 
       
  8208 		   Rewrote some of the TRegion member functions in ARM assembly language in an attempt to
       
  8209 		   speed up the operation of the window server, which uses these functions extensively, and
       
  8210 		   which was found to be responsible for slow operation of the machine when a large number
       
  8211 		   of applications are open. See defect reports SW-3500 and SW-4478 and the replies to them.
       
  8212 
       
  8213 		   Forward and backward compatible
       
  8214 
       
  8215 3) Ann
       
  8216 		1) Upgrade 002
       
  8217 
       
  8218 		   Fixed a bug in Math::Pow() (defect report SW-4624) so that
       
  8219 		   KErrOverflow errors are not incorrectly returned as KErrArgument
       
  8220 		   errors.  This occured because of differencing of infinity - which is
       
  8221 		   now checked for.  Updated maths test code (t_math) to test this
       
  8222 		   change fully.
       
  8223 
       
  8224 		   Forward and backward compatible
       
  8225 
       
  8226 		2) Upgrade 025
       
  8227 
       
  8228 		   Fixed SW3-317 KRealFormatNoExponent mode was not checking for
       
  8229 		   KExtraSpaceForSign flag.  Now checks and changed to act accordingly.
       
  8230 		   Also added this to test code.
       
  8231 
       
  8232 
       
  8233 4) Morgan
       
  8234 		1) Upgrade 003
       
  8235 
       
  8236 		   Set a constant string in the SuperPage when platform initialisation
       
  8237 		   has completed.  This string is checked on warm resets to validate
       
  8238 		   cold start initialisation has completed successfully at some point
       
  8239 		   in the past.
       
  8240 
       
  8241 		   Forward and Backward compatible except for machine configuration
       
  8242 		   compatiblity. So, machine configurations may not be passed
       
  8243 		   between old and new versions of E32. You must perform a cold
       
  8244 		   reset having upgraded to the version of E32 because of this
       
  8245 		   change.
       
  8246 
       
  8247 
       
  8248 		2) Upgrade 019
       
  8249 
       
  8250 		   Fix for SW3-91 and SW3-66:  Shared code chunks are Open()ed properly
       
  8251 		   in DProcess::Create().  New code chunks are named "$EXE[<Checksum>]"
       
  8252 		   and no longer have an owner.
       
  8253 
       
  8254 		3) Upgrade 026
       
  8255 
       
  8256 		   Initialised TheSuperPage.iXtalError to 0 in Hal::Init1() on a cold boot
       
  8257 		   for those platforms that don't do it themselves in their variant
       
  8258 		   initialisation.
       
  8259 
       
  8260 5) Matthew
       
  8261 		1) Upgrade 005
       
  8262 
       
  8263 		   Changed "Rings" alarm sound to be the same as those on the 3a. Thanks to Jezar
       
  8264 		   for his help with this.
       
  8265 
       
  8266 		   Also adjusted the trailing silence in algorithmic alarms as suggested.
       
  8267 		   Fixes SW3-22.
       
  8268 
       
  8269 		   Forward and backward compatible
       
  8270 
       
  8271 		2) Upgrade 006
       
  8272 
       
  8273 		   Fixed SW3-256: Arm sound ldd no longer links to localisation dll.
       
  8274 
       
  8275 		   Forward and backward compatible
       
  8276 
       
  8277 		3) Upgrade 007
       
  8278 
       
  8279 		   Fixed bug SW3-25: Requests on logical channels by threads which did not open
       
  8280 		   that channel will now panic the rogue thread, rather than potentially crashing
       
  8281 		   the whole machine.
       
  8282 
       
  8283 		   Added test code to T_SOUND.
       
  8284 
       
  8285 		   Forward and backward compatible
       
  8286 
       
  8287 		4) Upgrade 008
       
  8288 
       
  8289 		   Fixed bug SW3-9. Wins fixed (again) to take account of NT daylight saving settings.
       
  8290 
       
  8291 		   Forward and backward compatible
       
  8292 
       
  8293 		5) Upgrade 023
       
  8294 
       
  8295 		   Fixed SW3_315. In the sound LDDs play and record dfc functions the value of
       
  8296 		   iThread.iExit is now tested, and if it is not EExitPending then the function
       
  8297 		   returns straight away.
       
  8298 
       
  8299 		   Forward and backward compatible
       
  8300 
       
  8301 6) Pete
       
  8302 		1) Upgrade 015
       
  8303 
       
  8304 		   SW3-138 Change to CF card interrupt enable scheme. Currently the MTD keeps
       
  8305 		   card IREQ interrupts enabled in Etna while its open. These are normally
       
  8306 		   disabled at the card level but enabled in the card during a write operations.
       
  8307 		   When the media switch is broken or when a dodgy CF card is present, this can
       
  8308 		   resulting in a watchdog timeout due to the card permanently asserting IREQ and
       
  8309 	   not responding to the interrupt clear. This change leaves IREQ disabled
       
  8310 		   in Etna until required for the write operation.
       
  8311 
       
  8312 		   Forward and backward compatible
       
  8313 
       
  8314 		2) Upgrade 016
       
  8315 
       
  8316 		   Change only for variants with 2 sockets (ie RackD). Currently on these systems,
       
  8317 		   when a media change occurs, the PC Card controller does the following
       
  8318 		   to each socket in turn before turning off Vpc:
       
  8319 		   - Disable IREQ
       
  8320 		   - Disable Etna interface
       
  8321 		   However, because the two sockets have an individual IREQ, but share
       
  8322 		   the same Data/Address buffers, when the Etna interface is disabled on
       
  8323 		   the 1st socket, it causes the RESET signal to the 2nd to become
       
  8324 		   active. This in turn causes the 2nd socket to permanently assert IREQ
       
  8325 		   (which is now Rdy/Bsy) while its IREQ interrupt could potentially be
       
  8326 		   enabled. Result is continuous interrupts followed by watchdog
       
  8327 		   timeout.
       
  8328 		   The fix is to disable IREQs on both sockets before disabling the Etna
       
  8329 		   interface. This is done in the variant code for Rack D - ie no impact
       
  8330 		   on Protea P2.
       
  8331 
       
  8332 		   Forward and backward compatible
       
  8333 
       
  8334 		3) Upgrade 017
       
  8335 
       
  8336 		   Change to test program DRVSOAK so that it monitors the amount of
       
  8337 		   spare RAM while soak test is running.
       
  8338 
       
  8339 		   Forward and backward compatible
       
  8340 
       
  8341 		4) Upgrade 027
       
  8342 
       
  8343 		   Fixed SW3-440. Older SanDisk CF cards still sometimes timeout when
       
  8344 		   running on batteries. Increased timeout in CF card media driver from 60ms
       
  8345 		   to 70ms.
       
  8346 
       
  8347 		   Forward and backward compatible
       
  8348 
       
  8349 		5) Upgrade 028
       
  8350 		   Fixed SW3-434. Allow CIS parsing functions not to reject a CIS which
       
  8351 		   has incorrect link tuples.
       
  8352 		   If a CIS chain contains no link tuples then a check is made for a link target
       
  8353 		   tuple at address 0 in common memory (as before). However, if a link
       
  8354 		   target isn't found here then we assume a normal end of the CIS chain
       
  8355 		   (rather than marking the entire CIS chain as invalid as before).
       
  8356 		   If a CIS chain contains a 'Long Link to attribute memory' tuple but no link
       
  8357 		   target tuple is found at address: (specified offset x2) then we also check for a
       
  8358 		   link target tuple at address: (specified offset x1).
       
  8359 
       
  8360 		   Forward and backward compatible
       
  8361 
       
  8362 7) William
       
  8363 		1) Upgrade 020
       
  8364 
       
  8365 		   Changes to test programs so that they run from CF card on top of the full
       
  8366 		   Protea ROM. T_CTRAP, T_POWR, T_UID from TBAS, the rest from TCDT. Still more changes
       
  8367 		   required to fix "Z:\Test" assumptions and the strange bug with the EIKON console.
       
  8368 		   T_CTRAP will now fail on WINS debug because it checks the stack depth.
       
  8369 
       
  8370 		   Forward and backward compatible
       
  8371 
       
  8372 		2) Upgrade 021
       
  8373 
       
  8374 		   Extend RChangeNotifier to do EChangesSystemTime: effects E32STD.H and KSRC\KS_TIM.CPP, KS_NOFTY.CPP
       
  8375 		   There is a Defect for this, but it's really an E32 Proposal trying to be noticed...
       
  8376 
       
  8377 		   Backward compatible, not forward compatible if you take
       
  8378 		   advantage of this new feature.
       
  8379 
       
  8380 		3) Upgrade 022
       
  8381 
       
  8382 		   Check in DThread::Cleanup to see if the dying thread is the one which currently owns the event hook.
       
  8383 		   If so, cause a 'graceful' kernel fault instead of an
       
  8384 		   'ungraceful' one further down the line (SW3-205).
       
  8385 
       
  8386 		   Forward and backward compatible
       
  8387 
       
  8388 		4) Upgrade 024
       
  8389 
       
  8390 		   Fixed SW3-73. Puts the first 8 characters of the Panic/Fault category into the codeAddress
       
  8391 		   and dataAddress of the last exception information (except, of course, if we are faulting
       
  8392 		   because of an exception...)
       
  8393 
       
  8394 		   Forward and backward compatible
       
  8395 
       
  8396 8) Geert
       
  8397 		1) Upgrade 029
       
  8398 
       
  8399 		   Fully source and binary compatible. Not link compatible, however. See below for details.
       
  8400 
       
  8401 		   Fixed SW3-11, replacing the following EUSER.DLL exported functions with binary equivalents:
       
  8402 
       
  8403 			CArrayFix<TAny>::CArrayFix(TBufRep aRep,TInt aRecordLength,TInt aGranularity);
       
  8404 			CArrayFix<TAny>::~CArrayFix();
       
  8405 			CArrayFixFlat<TAny>::CArrayFixFlat(TInt aRecordLength,TInt aGranularity);
       
  8406 			CArrayFixFlat<TAny>::~CArrayFixFlat();
       
  8407 			CArrayFixSeg<TAny>::CArrayFixSeg(TInt aRecordLength,TInt aGranularity);
       
  8408 			CArrayFixSeg<TAny>::~CArrayFixSeg();
       
  8409 			CArrayVar<TAny>::CArrayVar(TBufRep aRep,TInt aGranularity);
       
  8410 			CArrayVar<TAny>::~CArrayVar();
       
  8411 			CArrayPak<TAny>::CArrayPak(TBufRep aRep,TInt aGranularity);
       
  8412 			CArrayPak<TAny>::~CArrayPak();
       
  8413 
       
  8414 		   All CArrayXxx<TAny> stock instances acquire inline ctors just like the template ones.
       
  8415 		   If you use any of these classes then to be able to link against the new EUSER.LIB
       
  8416 		   will require re-compilation.
       
  8417 
       
  8418 		   A clean build should be sufficient.
       
  8419 
       
  8420 		2) Upgrade 030
       
  8421 
       
  8422 		   Entirely backward compatible. Forward compatible for all software that doesn't use the new service.
       
  8423 		   And additional forward incompatible change now allows the element just past the array to be addressed
       
  8424 		   using CArrayXxx::End().
       
  8425 
       
  8426 		   Fixed SW3-374, adding new exported function
       
  8427 
       
  8428 				TAny* CArrayFixBase::Back(TInt anIndex) const;
       
  8429 
       
  8430 		   as well as inline wrappers to CArrayFix<T> and CArrayFix<TAny>.
       
  8431 
       
  8432 		   These functions provide functionality equivalent to CBufBase::BackPtr(), being CArrayFixXxx::End()
       
  8433 		   counterparts for fast _backward_ iteration.
       
  8434 
       
  8435 		   Also introduced modifiable overloads of End() inline wrappers and relaxed index range checks for
       
  8436 		   CArrayFixXxx::End() as well as Back().
       
  8437 
       
  8438 9) Jonathan
       
  8439 		1) Upgrade 031
       
  8440 
       
  8441 		   Fixes SW3-334
       
  8442 
       
  8443 		   Debug::SetBreakpoint only allowed breakpoints to be set at 0x2xxxxxxx (and at
       
  8444 		   0x5xxxxxxx in debug releases). Eikon apps get loaded into memory between
       
  8445 		   0x9000~ and 0xFFFF~.
       
  8446 
       
  8447 		   Debug::SetBreakpoint allows breakpoints between 0x9000~ and 0xFFFF~.
       
  8448 
       
  8449 		   No API change. Doesn't depend or tread on any previous upgrade.
       
  8450 
       
  8451 		   Forward and backward compatible
       
  8452 
       
  8453 
       
  8454 Version 0.01.105
       
  8455 ================
       
  8456 (Made by Pete, 8th May 1997)
       
  8457 
       
  8458 1) Dennis
       
  8459 		1) Modified the scheduler to set machine current consumption to either
       
  8460 		   running or idle current depending on whether the null thread is
       
  8461 		   being scheduled.
       
  8462 		2) Added functions Custom::BacklightCurrentInMilliAmps() and
       
  8463 		   ImpHal::BacklightCurrentInMilliAmps and code to include the
       
  8464 		   backlight current in K::TotalCurrentMilliAmps when it is on.
       
  8465 		3) Fixed a problem with average battery current calculation - the function
       
  8466 		   was using a hard-coded tick rate of 10 ticks per second.
       
  8467 		4) Changed function DLogicalChannel::SetCurrentConsumptionInMilliAmps from
       
  8468 		   protected to public since in practice it is always the PDD which calls it.
       
  8469 		5) Modified the sound and COM1 PDDs to set the current consumption according
       
  8470 		   to the device state.
       
  8471 
       
  8472 2) Morgan
       
  8473 		1) Digitiser calibrated from values in E-squared Prom on a Cold Start.
       
  8474 		2) Calibration preserved over a warm reset.
       
  8475 		3) Plugged in crystal error and machine unique Id values from the E-squared.
       
  8476 		4) DPlatProcess destructor closes the process code chunk, and Create() adds
       
  8477 		   newly created code chunks to the list of Kernel chunks.
       
  8478 		5) RLoader::LoadProcess() Kill()s the new process on a failed load.
       
  8479 
       
  8480 
       
  8481 3) William
       
  8482 		1) Reorganise CDeltaTimer creation to fix SW-4030
       
  8483 		2) Remove TDblQueLInkBase::EnQue() assertion, to fix SW-4991
       
  8484 		3) Reset auto switchoff timeout when an absolute timer completes, to fix SW-4870
       
  8485 
       
  8486 4) Ann
       
  8487 		1) Fixed bug SW-4351 in Math::Mod().  Now returns KErrTotalLossOfPrecision
       
  8488 		if an accurate answer cannot be given.
       
  8489 		2) Reorganised maths test code so it now builds for ARM.
       
  8490 
       
  8491 
       
  8492 5) Andrew       1) Fixed bug SW-4180. SetReserveL(TInt) is now available only
       
  8493 				for CArrayFixFlat<T>, CArrayFixFlat<TAny> and CArrayPtrFlat<T>.
       
  8494 				The parameter is new the reserved size of the array, not the
       
  8495 				reserved expansion space.
       
  8496 
       
  8497 6) Pete		1) TPcCardSocket::SetSocketStatus() made virtual function.
       
  8498 		2) Added the inline function
       
  8499 		TPcCardSocket::EventCallBacksRequested(TPccdEvent anEvent).
       
  8500 		Used to determine if there are any clients expecting notification of
       
  8501 		a particular PC Card event.
       
  8502 		3) CROM Media Driver Caps() no longer sets the drive attributes as
       
  8503 		KDriveAttRom.
       
  8504 		4) Fixed problem parsing Configuration table entry tuples where the
       
  8505 		last two entries both have the same configuration entry value. Prior to
       
  8506 		this, only the first of the two was reported.
       
  8507 		5) ATA Media Driver now leaves card interrupts enabled in the PC Card
       
  8508 		Controller h/w, and enables/disables these as required on the card. This
       
  8509 		is quicker than the previous scheme where it was continuously enabling
       
  8510 		and disabling interrupts in controller h/w on each Write() request.
       
  8511 		6) Media Driver Open() failures due to media change now only return
       
  8512 		KErrNotReady rather than any other error value.
       
  8513 		7) ATA Media Driver now verifies that a partition is a DOS partition
       
  8514 		(extended DOS partitions not supported).
       
  8515 		8) ATA Media Driver now uses Pulse mode interrupts where possible.
       
  8516 		Previously it always used Level mode interrupts.
       
  8517 		9) Change to ATA Media Driver - for write requests
       
  8518 		which straddle a sector boundary and require prior reading of two
       
  8519 		consecutive sectors, the read is now performed with a single read
       
  8520 		command (of two sectors) rather than two reads of one sector.
       
  8521 		10) Default attribute memory access speed for 3.3V
       
  8522 		socket is 600ns rather than 300ns (as per PC Card Spec.).
       
  8523 		11) Withered Custom::DriveName() and Custom::PcCardSocketName() in
       
  8524 		custom dll.
       
  8525 		12) Prevented DPrimaryMedia queueing same DFC twice.
       
  8526 		13) Introduce Media Driver Interface version number.
       
  8527 		14) Made media driver current consumption values more realistic.
       
  8528 
       
  8529 7) Jonathan
       
  8530 
       
  8531 		1) The Debug class won't let the user insert breakpoints or
       
  8532 		   single-step into ROM code before the aDebugLimit argument to
       
  8533 		   Debug::Open.  Gdbstub sets aDebugLimit to its own location in
       
  8534 		   ROM, thus preventing breakpoints/stepping into code before it in
       
  8535 		   ROM (including EUser, EKern etc) which might otherwise break.
       
  8536 
       
  8537 		2) The Debug class ignores the user-supplied aDebugLimit in Release
       
  8538 		   builds and prevents setting of breakpoints/single-stepping
       
  8539 		   anywhere in the ROM.
       
  8540 
       
  8541 		3) Binary incompatibility (affects gdbstub & test code, doesn't
       
  8542 		   affect RDebug::Printf):
       
  8543 		   Debugger functions in the RDebug & Debug classes changed to use
       
  8544 		   thread Ids instead of opaque DThread pointers. Components that
       
  8545 		   call RDebug::ReadMemory() or RDebug::WriteMemory() should pass in
       
  8546 		   RThread().Id() as the first argument to these functions to retain
       
  8547 		   their current functionality.
       
  8548 
       
  8549 		4) New DThread* Kern::ThreadFromId(TThreadId) for use by Debug
       
  8550 		   class. Also changed S::ThreadOpen(... TThreadId, ...) to use it.
       
  8551 
       
  8552 8) Matthew
       
  8553 		1) Fixed SW-3783 - by default, the comms driver now uses descriptor
       
  8554 		   MaxLength() rather than Length() for reads.
       
  8555 		   Note: This fix has meant a change to the inline function RDevComm::Read(),
       
  8556 		   so anyone using this function should recompile with the new E32. You
       
  8557 		   know who you are.
       
  8558 		2) Fixed bug in comms driver so that it no longer crashes if you
       
  8559 		   request that it writes beyond the end of a descriptor.
       
  8560 		3) Stopped WINS sound pdd from gurgling when you do a PlaySineWave().
       
  8561 		4) Moved DTMF volume information from sound LDD into the PDDs, since
       
  8562 		   it depends on the frequency response of the hardware.
       
  8563 		5) Tiny amount of fiddling with algorithmic alarm sounds.
       
  8564 		6) Made the __WINS_UID() macro expand in WINC builds, implementing the E32
       
  8565 		   proposal.
       
  8566 		7) Removed the EChangesAll enum from E32STD.H since if it used it may break
       
  8567 		   forwards compatability. This should only effect BAFL.
       
  8568 		8) Added a User::SetCurrencySymbol() function for setting the system-wide
       
  8569 		   currency symbol.
       
  8570 
       
  8571 9) Graham
       
  8572 				1) Added German keyboard table which now gets
       
  8573 				   released as CAKDP2.GE
       
  8574 				2) Released IMPORT_C from TInt64A functions. These
       
  8575 				   were not being exported anyway.
       
  8576 				3) Exported RLibrary::LoadRomLibrary on EPOC
       
  8577 				   platforms
       
  8578 				4) Fixed update of battery statistics when the
       
  8579 				   main batteries are changed (SW-5096, SW-4228).
       
  8580 				5) Fixed update of main and backup battery statuses
       
  8581 				   when switching on (SW-3401, SW-4479).
       
  8582 				6) Changed UK, US, and German keyboard tables to give
       
  8583 				   the multiplication and division signs when the
       
  8584 				   appropriate keystrokes are made.
       
  8585 				7) Shortened the beeps for Cold Start, Warm Start,
       
  8586 				   and Kernel Fault.
       
  8587 
       
  8588 
       
  8589 10) Jal
       
  8590 				1) Added build infrastructure for ELOCL.GE
       
  8591 				   (the german localisation dll).
       
  8592 
       
  8593 Version 0.01.104
       
  8594 ================
       
  8595 (Made by William, 2nd May 1997)
       
  8596 
       
  8597 1) William
       
  8598 
       
  8599 		1) Removed the TRAPD() from DThread::RequestComplete, which still seems
       
  8600 		   to cause lots of E32USER-CBase 71 and 63 panics when used in the
       
  8601 		   harsh environment of real test roms
       
  8602 		2) Remove reference to GateFunction in EGATE.DEF to fix the T_DUID.DLL test
       
  8603 		3) Add extra test cases to TCDT\T_THREAD.CPP
       
  8604 		4) Add missing XCUST*.DEF files to BMARM\LI.PRJ
       
  8605 
       
  8606 Version 0.01.103
       
  8607 ================
       
  8608 (Made by Morgan, 1st May 1997)
       
  8609 
       
  8610 1) Graham
       
  8611 
       
  8612 		1) Fixed a problem with the code which looks for both shift
       
  8613 		   keys when switching on after a warm reset in order to
       
  8614 		   change it into a cold reset.
       
  8615 
       
  8616 		2) Fixed a problem with constructing the encrypted password
       
  8617 		   in the super page.
       
  8618 
       
  8619 Version 0.01.102
       
  8620 ================
       
  8621 (Made by Morgan, 30th April 1997)
       
  8622 
       
  8623 1) Pete
       
  8624 		1) Change to PC Card Serial Driver (EUART3.PDD) for Rack D. Added
       
  8625 		followers for 16550 registers IER,LCR,MCR rather than relying on
       
  8626 		them being read/write registers. Tested this driver using
       
  8627 		COMMS(033) app. Sent/received files at various baud rates up to
       
  8628 		57600 (didn't test at 115K) using XMODEM without any problems. The
       
  8629 		above driver works with the following PC Card Serial Ports/Modems:
       
  8630 			- Socket I/O serial port
       
  8631 			- Dacom Goldcard V34 + Fax
       
  8632 			- Hayes Optima 288
       
  8633 		2) Now possible for ATA media driver to return the following errors
       
  8634 		on read or write command fails:
       
  8635 			KErrCorrupt  - Bad block detected / sector ID error.
       
  8636 			KErrWrite    - Write fault.
       
  8637 			KErrTimedOut - Timeout waiting for ATA controller to negate
       
  8638 					   BSY bit.
       
  8639 			KErrLocked   - Timeout waiting for ATA controller to assert
       
  8640 					   RDY bit).
       
  8641 			KErrGeneral  - Protocol error (wrong state of DRQ bit
       
  8642 					   detected).
       
  8643 			KErrUnknown  - General ATA controller error.
       
  8644 			KErrCancel   - Command aborted
       
  8645 			KErrDied     - Uncorrectable error encountered.
       
  8646 		Prior to this, all the above conditions resulted in KErrTimedOut.
       
  8647 		(All of these get translated as before by F32 but the extra
       
  8648 		information from the driver is useful).
       
  8649 		3) Format command now implemented using ATA WriteSectors command rather
       
  8650 		than FormatTrack. This is because there seem to be a variety of
       
  8651 		implementations of the FormatTrack command and also it can take a significant
       
  8652 		time to complete (>200ms) on some cards which require CHS addressing.
       
  8653 		4) Changes to various trace o/ps to prevent system watchdog timeouts on media
       
  8654 		changes with tracing on.
       
  8655 
       
  8656 2) William
       
  8657 		 1) Use Win32 IsBadReadPtr/IsBadWritePtr functions to provide better emulation of
       
  8658 			EPOC32 kernel exception handling (should allow us to handle the access violations
       
  8659 			that the kernel has contingency plans for, even under the MSDEV debugger).
       
  8660 		 2) Fix SW-1799 by preventing the Win32 thread priority from being raised too high
       
  8661 		 3) Fix SW-???? by ignoring the KNotifyIfDie flag when WINS threads die (as per EPOC32).
       
  8662 		 4) Trace the Win32 Thread ID and the WINS thread name in the debug window (WINS debug builds)
       
  8663 		 5) Fix SW-4346 by making CalcChunkHeapCompression wary of corrupt heaps and wrapping the
       
  8664 			invocation from ChunkCompressAll in a suitable exception trap.
       
  8665 		 6) Arrange to keep iHandles valid (but empty) after thread cleanup
       
  8666 		 7) Fix SW-3718 by making ChangeNotifier handles thread-relative.
       
  8667 		 8) Prevent WINS RProcess::SetPriority from changing the Win32 process priority (SW-1799)
       
  8668 		 9) Limit the size of a heap cell to 1 Gigabyte (SW-4528)
       
  8669 		10) Fix SW-4389 by ignoring UserSvr::InitRegisterCallback calls after initial bootstrap.
       
  8670 		11) Fix SW-3527 by ensuring that the SYSTEM.INI screenwidth is rounded up to a multiple of 16.
       
  8671 		12) Fix T_QUE, T_DLL1, T_DLL2 and T_SVR2 test failures.
       
  8672 
       
  8673 3) Graham
       
  8674 				1) Fixed WINS problem with expanded MachineInfo
       
  8675 				   structure.
       
  8676 
       
  8677 4) Bruce
       
  8678 				1) Two field dates are now accepted for all locales. Fixed year 2000 bug.
       
  8679 				   Removed hard-coded 'am'/'pm' and replaced these with data
       
  8680 				   retrieved from the localisation dll.
       
  8681 
       
  8682 5) Ann
       
  8683 			1) Fixed bug in TLex8::ScndigAfterPoint() (SW-4304) - now reads in first 18 significant
       
  8684 			   digits rather than just first 18 digits.
       
  8685 			2) Fixed bug in TLex8::Val() (SW-4355) - overflow in some cases was being returned as
       
  8686 				   positive regardless of actual sign.
       
  8687 
       
  8688 Version 0.01.101
       
  8689 ================
       
  8690 (Made by Graham, 29rd April 1997)
       
  8691 
       
  8692 1) Graham
       
  8693 				1) SW-1921 Fixed the occasional load click by disabling interrupts while creating the click.
       
  8694 				2) Added localised keyboard tables to the P2 build
       
  8695 				   system and created CAKDP2.UK and CAKDP2.US. CAKDP2.DLL
       
  8696 				   remains and gives a layout consistent with the keyboards
       
  8697 				   currently on our Limes.
       
  8698 				3) Change the rombuilding system to accept a localisation
       
  8699 				   parameter. So you may use "rom rel p2 uk". If you specify
       
  8700 				   just "rom rel p2", you get what you always used to.
       
  8701 				4) SW-3330 Fixed repeating keys when entering 'Raw'
       
  8702 				   mode in the text window server while a key is depressed.
       
  8703 				5) SW-3837 introduced ELangInternationalFrench
       
  8704 				6) SW-4181 allocated WINS DLL address for MEDCRM.PDD
       
  8705 				7) Solved problem with watchdog timer going off sometimes
       
  8706 				   when coming out of standby.
       
  8707 				8) Changed Hal information names in preparation for the
       
  8708 				   final ROM.
       
  8709 				9) Changed supply voltage information so that it
       
  8710 				   never returns a voltage above the stated maximum
       
  8711 				   for that battery and returns zero millivolts if
       
  8712 				   the battery status is EZero. Changed the maximum
       
  8713 				   voltage for the main battery to 3100mV and for the
       
  8714 				   backup battery to 3200mV. SW-4194 SW-4237.
       
  8715 			   10) Implemented the reading of ADC channel 7 on a cold
       
  8716 				   boot in order to detect when test department boot
       
  8717 				   to final test is required.
       
  8718 			   11) SW-3563 Displaying years >2000 as 2 digits in
       
  8719 				   abbreviated form.
       
  8720 			   12) SW-4339 Set CurrencyNegativeInBrackets to EFalse
       
  8721 				   in both the US and UK localisation dlls.
       
  8722 			   13) Added structure for UserHal::CpuInfo(TDes8& aInfo)
       
  8723 			   14) Added UserSvr::WsRegisterSwitchOnScreenHandling().
       
  8724 				   If a window server wants to take control of
       
  8725 				   turning on the screen, then it should call this
       
  8726 				   function with ETrue and may then call
       
  8727 				   UserSvr::WsSwitchOnScreen(). It may relinquish
       
  8728 				   control back to the Os by calling the register
       
  8729 				   function again with EFalse.
       
  8730 			   15) Added the functions:
       
  8731 						UserHal::SaveXYInputCalibration();
       
  8732 						UserHal::RestoreXYInputCalibration(aType);
       
  8733 				   Restore takes an argument that may be EFactory (to
       
  8734 				   restore the factory set calibration) or ESaved to
       
  8735 				   restore the previously saved calibration.
       
  8736 			   16) Added the following to the Machine Information
       
  8737 				   structure:
       
  8738 						TInfoName iProcessorName
       
  8739 						TInt iProcessorClockInKHz
       
  8740 						TInt iSpeedFactor
       
  8741 						TInt iMaximumDisplayColors
       
  8742 
       
  8743 2) William
       
  8744 		1) Added WINS SYSTEM.INI support for "MegabytesOfFreeMemory" which also turns on the
       
  8745 		   mechanism for limiting the total amount of memory which WINS can allocate.
       
  8746 		2) Number some more enumerated types associated with panics and faults. Note that this
       
  8747 		   includes removing #ifdef __XCON in KPWINS\KP_STD.H so that the KPWINS platform fault
       
  8748 		   numbers will change: prior permission was obtained from the BC police.
       
  8749 		3) In DEBUG builds, change RHeap::Free to fill the released block with 0xDE rather than 0
       
  8750 		4) Add __ASSERT_DEBUG to catch double insertion of a TDblQueLink (and fix two places in
       
  8751 		   the Base which weren't constructing a link when creating an object).
       
  8752 		5) Fix SW-3707 by not panicing unnecessarily in DPlatProcess::AllocateDataSectionBase()
       
  8753 		6) Fix SW-2104 in DTimer::Cancel(), by not calling RequestComplete on a dead thread, and
       
  8754 		   not doing the expensive timer scan in DThread::Cleanup().
       
  8755 		7) Fix SW-1185 by interpreting EKeyIncContrast to mean "bigger number in SetContrast" in the
       
  8756 		   text window server.
       
  8757 
       
  8758 3) Morgan
       
  8759 		1) Preserved the password and its enabled state over a warm reset.
       
  8760 
       
  8761 4) Matthew
       
  8762 		1) Added PlaySineWave() function to RDevSound. Also added an iMaxSineWaveFrequency
       
  8763 		   member variable to the sound caps structure. Frequencies are in Hz.
       
  8764 		2) Changed sound LDD so that it gets the alarm name via the kernel's
       
  8765 		   locale-message-text service. LS_SND.CPP and K32LSND.H have thus been scrapped.
       
  8766 		3) Fixed bug in sound LDD which caused a kernel panic if FlushRecordBuffer() was
       
  8767 		   called after a record request had failed with bad power.
       
  8768 
       
  8769 
       
  8770 Version 0.01.100
       
  8771 ================
       
  8772 (Made by Graham, 23rd April 1997)
       
  8773 
       
  8774 1) Dennis
       
  8775 		1) Modified ARM boot code to automatically work out the size and bus width of
       
  8776 		   the ROMs connected to CS0 and CS1 chip selects. This information is stored
       
  8777 		   in the super page in the iRomConfig entries. Both banks of ROM are then mapped
       
  8778 		   to consecutive linear addresses.
       
  8779 		2) Added a new function Hal::PrepareForRepro, which re-maps all the ROM in the
       
  8780 		   machine. This is to make sure repro works correctly even if ROM page shadowing
       
  8781 		   is in use. This function uses the information stored in the iRomConfig entries
       
  8782 		   in the super page to work out which ROM to map and how to map it.
       
  8783 		3) Removed ROM mapping calls from VA_HW.CPP for all variants, and added code to set
       
  8784 		   up the ROM speed and type. For P2 variant, added code to set up the ROM size
       
  8785 		   for CS1 and the total ROM size. This is required to ensure that repro will work
       
  8786 		   correctly even if the CS1 ROM is initially blank.
       
  8787 		4) Added code to SF_MAIN.CPP to load an LDD (BOOT.LDD) from Z: immediately prior to
       
  8788 		   loading the window server. This allows any shadowing of the ROM for bug fixes to
       
  8789 		   be done.
       
  8790 		5) Added a new function UserHal::RomInfo to read the iRomConfig entries from the
       
  8791 		   super page. Updated T_INF.CPP to display this information.
       
  8792 		6) Modified ARM boot code to allocate 1K for each page table instead of 4K as it
       
  8793 		   does at the moment. Also use page tables 6 onwards for ROM mapping instead of
       
  8794 		   8 onwards, since page tables 6 and 7 are unused at the moment.
       
  8795 		   This saves 44K RAM for the standard Protea configuration.
       
  8796 		7) Modified ARM boot code to make checking the RAM configuration non-destructive.
       
  8797 
       
  8798 2) Graham
       
  8799 				1) SW-3765 Export TReal96::IsZero by number instead of by name.
       
  8800 				2) SW-3760 Removed E32VIRT.H from the release
       
  8801 				3) SW-3759 Removed temporary __ARRAY_NO_PTRS__ from E32DEF.H
       
  8802 				   and appropriate function definitions.
       
  8803 				4) SW-3058 Removed __DECLARE_DLL_UID().
       
  8804 				5) SW-3480 Removed default Southern daylight savings
       
  8805 				   time from the UK localisation DLL.
       
  8806 				6) SW-3565 Implemented ~ as FN+J on Lime keyboards
       
  8807 				7) SW-3564 Implemented the dial key as Fn+Menu on a
       
  8808 				   Lime and as F3 on WINS. This comes through as
       
  8809 				   EStdKeyDial and EKeyDIal (in E32KEYS.H).
       
  8810 
       
  8811 3) Morgan
       
  8812 		1) Moved the locale configuration into the SuperPage to preserve it
       
  8813 		   over a warm-reset.
       
  8814 		2) Implemented TDes::TrimAll();
       
  8815 		3) Checked Uid[1] in S::PhysicalDeviceLoad and S::LogicalDeviceLoad.
       
  8816 		   Added WINS Uids to the device drivers in the Base.
       
  8817 		4) Cold reset is now: Warm-reset followed by LeftShift+RightShift+On
       
  8818 		   to make it harder to do by accident.
       
  8819 		5) Fixed K::TickCounter synchronisation after standby, and initialised
       
  8820 		   iLastLock for locked timers.
       
  8821 
       
  8822 4) Matthew
       
  8823 		1) Fixed SW-2855 - the TRegion::Sort() and CArrayXxxBase::Sort() functions
       
  8824 		   have been changed from having no return value to returning TInts, they
       
  8825 		   will return KErrGeneral if there is a stack overflow.
       
  8826 		2) Fixed blitting bug in eiger text window server which caused blocks of
       
  8827 		   screen to be cleared.
       
  8828 		3) Fixed bug in sound driver which made it crash when given a zero-length
       
  8829 		   sample.
       
  8830 
       
  8831 5) Jal
       
  8832 				1) Added TLocaleMessageText to E32SVR.H
       
  8833 
       
  8834 6) Alastair
       
  8835 		1)	Changed e32\wsrc\ws_main.cpp so that the eikon shell is not loaded
       
  8836 			if the machine is in test department boot mode.
       
  8837 		2)	Created new project e32\etest producing an executable which will be
       
  8838 			loaded instead of ewsrv.exe if the machine is in test department
       
  8839 			boot mode.  This executable will attempt to load ewsrv.exe and
       
  8840 			final.exe from the root directory of a cf card containing euser.dll,
       
  8841 			edisp.dll and econs.dll	from the base in directory D:\system\libs.
       
  8842 			If this attempt fails, etest.exe will try to load elink.exe from
       
  8843 			Z:\system\libs which will open the remote link so that the machine
       
  8844 			can be booted down the serial port.  If this fails etest.exe will
       
  8845 			attempt to boot the machine up normally.
       
  8846 
       
  8847 7) Pete
       
  8848 			1) Fixed 'Emergency power down with CF card powered results in cold
       
  8849 			reset' (SW-3620). This was due to QuickEmergencyStandby() not
       
  8850 			disabling the Etna's wait state controller properly.
       
  8851 			2) Force ATA and CROM media drivers on ARM to only return KErrNotReady
       
  8852 			rather than any other error value when a request is interrupted by a
       
  8853 			media change.
       
  8854 			3) Added the function CardIsReady() to class DPcCardCntrl. This should
       
  8855 			be used periodically while using the PC Card Controller to check that
       
  8856 			a media change hasn't occured. The new function is a quicker alternative
       
  8857 			to the function CardIsReadyAndVerified(). The later is now only used once
       
  8858 			at the start of each interface with the controller.
       
  8859 			4) Requests to Write or Format the CROM card now return KErrAccessDenied
       
  8860 			rather than KErrNotSupported.
       
  8861 			5) PC Card Controller now calls P::ResetAutoSwitchOffTimer() on each
       
  8862 			call off RPccdWindow::SetupChunkHw() to stop the machine going into
       
  8863 			standby in the middle of a long write to a CF card etc.
       
  8864 
       
  8865 Version 0.01.099
       
  8866 ================
       
  8867 (Made by Graham, 18th April 1997)
       
  8868 
       
  8869 1) William
       
  8870 		1) Fix SW-3331 by ignoring Undertakers owned by threads which have themselves already died
       
  8871 		2) Tweak UPWINS\BLD.CMD to bootstrap ECONS.LIB more reliably
       
  8872 		3) Arrange for absolute timers to complete with KErrOverflow for times too far in the future
       
  8873 		   instead of treating them as times in the past (starts to fix SW-3566)
       
  8874 
       
  8875 2) Graham       1) Fixed leaving without a trap harness. This was
       
  8876 				   calling a slow executive function to panic the
       
  8877 				   thread inside a fast executive trap function.
       
  8878 				   Moved the call to panic to the user side.
       
  8879 				2) Added V32ARMP2.H to INCK release.
       
  8880 				3) Fixed a problem with 098 which meant that
       
  8881 				   EKERN.DLL was linking to ELOCL.US rather
       
  8882 				   than ELOCL.DLL (In WINS).
       
  8883 				4) Included device driver def files in the INCK
       
  8884 				   release.
       
  8885 
       
  8886 3) Matthew
       
  8887 				1) Fixed Sound device driver's DTMF tone generating
       
  8888 				   interrupt handler.
       
  8889 
       
  8890 4) Ann
       
  8891 		1) Fixed doCalculator() function so that KRealFormatCalculator mode displays in no exponent
       
  8892 		 mode only if full precision may be seen in this mode or if no mor precision will be available
       
  8893 		 in exponent mode.
       
  8894 		2) Fixed doNoExponent() function so that KRealFormatNoExponent mode reduces the number of
       
  8895 		 significant figures used if the given no won't fit.  Now only raises an error if value is too
       
  8896 		 big or too small to fit into the given width.
       
  8897 
       
  8898 
       
  8899 Version 0.01.098
       
  8900 ================
       
  8901 (Made by Graham, 16 April 1997)
       
  8902 
       
  8903 Note: This release is neither 100% binary compatible with 097, nor 100% source compatible.
       
  8904 	The binary incompatibility is to do with UID allocation changes, the source incompatibility
       
  8905 	with the correction of "overriden".
       
  8906 	The UID changes are such that narrow release DLLs should work as they are. Other targets need
       
  8907 	tweaking, which maktran 063 will do for you. See below for details.
       
  8908 
       
  8909 1) GrahamA
       
  8910 
       
  8911 IMPLEMENTATION OF UNICODE CHARACTER CLASSIFICATION, CONVERSION AND COLLATION
       
  8912 
       
  8913 NEW FILES
       
  8914 e32\inc\collate.h
       
  8915 	header for Unicode collation system
       
  8916 
       
  8917 e32\inc\unicode.h
       
  8918 	header for Unicode character classification system
       
  8919 
       
  8920 e32\unicode\collate.cpp
       
  8921 	Unicode collation system
       
  8922 
       
  8923 e32\unicode\unicode.cpp
       
  8924 	Unicode character classification and attribute retrieval
       
  8925 
       
  8926 e32\unicode\unitable.cpp
       
  8927 	tables of Unicode character attributes; this file is generated by the READTYPE utility from unidata2.txt.
       
  8928 
       
  8929 CHANGED FILES
       
  8930 e32\bmarm\elocl.mak:
       
  8931 e32\bmisa\elocl.mak:
       
  8932 e32\bmx86\elocl.mak:
       
  8933 e32\bwins\elocl.mak:
       
  8934 	added ls_unic.cpp to list of source files
       
  8935 
       
  8936 e32\bmarm\eloclu.def:
       
  8937 e32\bmarm\eloclud.def
       
  8938 e32\bmisa\eloclu.def:
       
  8939 e32\bmisa\eloclud.def
       
  8940 e32\bmx86\eloclu.def
       
  8941 e32\bwins\eloclu.def
       
  8942 	removed UpperTable, LowerTable, FoldTable, CollTable, TypeTable; added CharSet.
       
  8943 	(where relevant) added ls_unic.cpp to list of source files
       
  8944 
       
  8945 e32\bmarm\euser.def:
       
  8946 e32\bmarm\euser.frz:
       
  8947 e32\bmarm\euserd.def:
       
  8948 e32\bmarm\euserd.frz:
       
  8949 e32\bmisa\euser.def:
       
  8950 e32\bmisa\euser.frz:
       
  8951 e32\bmisa\euserd.def:
       
  8952 e32\bmisa\euserd.frz:
       
  8953 e32\bmx86\euser.def:
       
  8954 e32\bmx86\euser.frz:
       
  8955 e32\bwins\euser.def:
       
  8956 e32\bwins\euser.frz:
       
  8957 	added TChar::GetUpperCase, TChar::GetLowerCase
       
  8958 
       
  8959 e32\bmarm\euser.mak:
       
  8960 e32\bmisa\euser.mak:
       
  8961 e32\bmx86\euser.mak:
       
  8962 e32\bwins\euser.mak:
       
  8963 	added collate.cpp, unicode.cpp and unitable.cpp to list of source files, and collate.h and unicode.h
       
  8964 	to dependencies where needed
       
  8965 
       
  8966 e32\bmarm\euseru.def:
       
  8967 e32\bmarm\euseru.frz:
       
  8968 e32\bmarm\euserud.def:
       
  8969 e32\bmarm\euserud.frz:
       
  8970 e32\bmisa\euseru.def:
       
  8971 e32\bmisa\euseru.frz:
       
  8972 e32\bmisa\euserud.def:
       
  8973 e32\bmisa\euserud.frz:
       
  8974 e32\bmx86\euseru.def:
       
  8975 e32\bmx86\euseru.frz:
       
  8976 e32\bwins\euseru.def:
       
  8977 e32\bwins\euseru.frz:
       
  8978 	added TChar::Compose, TChar::Decompose, User::Fold (new overload), TUnicode::Fold,
       
  8979 	TChar::GetBDCategory, TChar::GetCJKWidth, TChar::GetCategory, TUnicode::GetCategory,
       
  8980 	TChar::GetCombiningClass, TChar::GetInfo, TCHar::GetLowerCase, TUnicode::GetLowerCase,
       
  8981 	TChar::GetNumericValue, TChar::GetTitleCase, TChar::GetUpperCase, TUnicode::GetUpperCase,
       
  8982 	TChar::IsAssigned, TChar::IsMirrored, TChar::IsTitle, User::TitleCase,
       
  8983 	TChar::TranslateFromUnicode,TChar::TranslateFromUnicode.
       
  8984 	changed entry for RLogicalChannel::DoCreate to suit new signature
       
  8985 
       
  8986 e32\dsound\d_sound.cpp
       
  8987 	changed an erroneous use of TChar::Fold to TChar::UpperCase
       
  8988 
       
  8989 e32\inc\d32ftim.inl
       
  8990 	corrected penultimate arg to RLogicalChannel::DoCreate to suit new type (const TDesC8 *, not const TDesC 8).
       
  8991 
       
  8992 e32\inc\e32std.h
       
  8993 	added Unicode functions and constants to TChar class
       
  8994 	added Unicode functions to User class
       
  8995 
       
  8996 e32\inc\e32std.inl
       
  8997 	added inline definitions of TChar::Fold and TChar::TitleCase
       
  8998 
       
  8999 e32\inc\k32std.h
       
  9000 	added declarations for ExecHandler::GetLocaleCharSet, Locl::CharSet, K::CharSet
       
  9001 
       
  9002 e32\inc\u32std.h
       
  9003 	added definition of LCharSet and removed character type bits (__U, __L, etc.), from Unicode build
       
  9004 	defined EExecGetLocaleCharSet and DExecGetLocaleCharSet
       
  9005 	added declaration for Exec::GetLocaleCharSet
       
  9006 
       
  9007 e32\kearm\ke_int.cpp
       
  9008 e32\keisa\ke_int.cpp
       
  9009 e32\kex86\ke_int.cpp
       
  9010 e32\kpwins\kp_utl.cpp
       
  9011 	added ExecHandler::GetLocaleCharSet to the dispatch table
       
  9012 
       
  9013 e32\ksrc\ks_dat.cpp
       
  9014 	in the Unicode build, removed K::TypeTable, K::UpperTable, K::LowerTable, K::FoldTable and K::CollTable
       
  9015 	and added K::CharSet
       
  9016 
       
  9017 e32\ksrc\ks_exec.cpp
       
  9018 	added Unicode functionality to existing functions; added ExecHandler::GetLocaleCharSet
       
  9019 
       
  9020 e32\ksrc\ks_ini.cpp
       
  9021 	in the Unicode build, removed initialisation of K::TypeTable, K::UpperTable, K::LowerTable,
       
  9022 	K::FoldTable and K::CollTable and added initialisation of K::CharSet
       
  9023 
       
  9024 e32\lsrc\ls_lat1.cpp
       
  9025 	in the Unicode build, used preprocessor directives to remove unused material
       
  9026 
       
  9027 e32\lsrc\ls_table.cpp
       
  9028 	added preprocessor directives to select Unicode-build or Ascii-build material as appropriate
       
  9029 
       
  9030 e32\lsrc\ls_std.h
       
  9031 	in the Unicode build, removed the LAlphabet class and added the TheCharSet object
       
  9032 
       
  9033 e32\tbas\t_key.cpp
       
  9034 e32\t_cdt\t_buf.cpp
       
  9035 	collation tests now work with new Unicode stuff
       
  9036 
       
  9037 e32\t_cdt\t_char.cpp
       
  9038 	now works with new Unicode stuff; and in the Unicode build tests character classification and
       
  9039 	my new collation system
       
  9040 
       
  9041 e32\tlocale\t_chset.cpp
       
  9042 	now works with new Unicode stuff
       
  9043 
       
  9044 e32\ucdt\uc_des.cpp
       
  9045 	changed two erroneous uses of TCharF to TCharUC
       
  9046 
       
  9047 e32\ucdt\uc_des16.cpp
       
  9048 e32\ucdt\uc_des8.cpp
       
  9049 	Capitalize and CopyCP convert first letter to title case, not upper case, in the Unicode build
       
  9050 
       
  9051 e32\ucdt\uc_exec.cpp
       
  9052 	character classification and conversion functions (TChar::IsUpper, etc.) now work for all
       
  9053 	Unicode values in the Unicode build; added new Unicode-only functions like TChar::IsMirrored
       
  9054 	and TChar::GetNumericValue
       
  9055 
       
  9056 e32\ucdt\uc_func.cpp
       
  9057 	the Unicode versions of Mem::CompareC now use the Unicode locale-specific string-based collation
       
  9058 	system implemented by the TCollate class in the new source file collate.cpp
       
  9059 
       
  9060 e32\ucdt\uc_ksvr.cpp
       
  9061 	changed type of penultimate arg to RLogicalChannel::DoCreate from const TDesC* to const TDesC8*
       
  9062 	so that it works in the Unicode build: this caused changes to exported function signatures in the
       
  9063 	.def and .frz files
       
  9064 
       
  9065 e32\ucdt\uc_lex16.cpp
       
  9066 e32\ucdt\uc_lex8.cpp
       
  9067 	changed two erroneous uses of TChar::Fold to TChar::UpperCase: folding isn't guaranteed to make
       
  9068 	characters upper case, and doesn't in the Unicode build, but UpperCase is
       
  9069 
       
  9070 e32\upmarm\up_exec.cpp
       
  9071 e32\upmx86\up_exec.cpp
       
  9072 e32\upwins\up_exec.cpp
       
  9073 	added Exec::GetLocaleCharSet
       
  9074 
       
  9075 e32\upmarm\up_lib.cpp
       
  9076 e32\upmx86\up_lib.cpp
       
  9077 	changed an erroneous use of CompareC to CompareF
       
  9078 
       
  9079 2) William
       
  9080 		 1) Used Win32 InterlockedIncrement/InterlockedDecrement to implement WINS LockedInc and LockedDec
       
  9081 		 2) Implemented first-cut exception->leave translation for WINS (as per MARM)
       
  9082 		 3) Added exception trapping to DThread::RequestComplete, to fix SW-2274
       
  9083 		 4) Arranged not to complete requests if the requesting thread has already died
       
  9084 		 5) Enhance T_HEAP test to include truly concurrent access to shared heaps
       
  9085 		 6) Fix incorrect semaphore count on default heaps (as shown by the revised T_HEAP!)
       
  9086 		 7) Correct implementation of DThread::GetRamSizes for shared heaps, to fix SW-2671
       
  9087 		 8) Fix WINS implementation of RDebug::Print, which was assuming a zero-terminated string
       
  9088 		 9) Add T_REASON, a utility which loops printing the restart reason using RDebug::Print.
       
  9089 			This isn't a test program as such, but can be put on a CF card as \System\libs\wserv.exe
       
  9090 			to help debug endless restarting.
       
  9091 		10) Improve DSession destructor to dequeue any messages which are marked EDelivered, in the
       
  9092 			hope of fixing SW-1407 and friends.
       
  9093 		11) Implement scheme to orphan kernel CObjects when their owner goes away, to fix SW-1665 (again!)
       
  9094 
       
  9095 3) Dennis
       
  9096 		1) Modified prefetch abort, data abort and undefined instruction exception
       
  9097 		   handlers in ke_int.cpp to save correct context if exception occurs in
       
  9098 		   supervisor mode.
       
  9099 
       
  9100 4) Matthew
       
  9101 		1) Fixed SW-2408 (problems with signals when you come out af standby).
       
  9102 		2) Fixed SW-3293 (cancelling fallback alarm causes panic).
       
  9103 		3) Fixed bug with emergency power down during fallback sound.
       
  9104 		4) Increased DTMF buffer so if can now cope with 32 characters.
       
  9105 		5) Made kernel noises (keyclicks, buzzes and sound driver activity) obey
       
  9106 		   the state of the sound info. KErrAccessDenied is returned when sound
       
  9107 		   cannot be played. Fixes SW-2725.
       
  9108 		6) Yet more fiddling with algorithmic alarm sounds - fixed nasty distortion
       
  9109 		   occuring with chimes.
       
  9110 		7) Fixed potential memory leaks in CSecurityBase and CConsoleBase.
       
  9111 		8) Fixed TTime::RoundUpToNextMinute() and TTime::operator+(TTimeIntervalMonth)
       
  9112 		   so they now handle negative values correctly.
       
  9113 		9) Fixed SW-1974 (Switching on IrDA gives 0xff in Rx buffer).
       
  9114 		10) Changed comms PDD so that RS232 hardware is not enabled when IrDA is in use.
       
  9115 		11) Changed "KeyClickOverriden" to "KeyClickOverridden" in lots of places.
       
  9116 		12) Fixed SW-3097 (Wins Hal switch statement missing a break after TickPeriod).
       
  9117 
       
  9118 5) Graham
       
  9119 				1) Fixed (with help from Morgan) booting up into a text
       
  9120 				   shell on a normal eikon-based machine by placing
       
  9121 				   the appropriate components (EWSRV.EXE EUSER.DLL ECONS.DLL
       
  9122 				   EDISP.DLL ESHELL.EXE) in the \system\libs directory on
       
  9123 				   a CF card.
       
  9124 				2) Fixed SW-3163 (Alarms when the case is closed and
       
  9125 				   'switch off when case is closed' is enabled).
       
  9126 				3) Fixed SW-3091 (Auto switch of in the presence of
       
  9127 				   'switch on when case opens').
       
  9128 				4) Fixed SW-2893 (UserHal::MaxDisplayContrast(TInt&) in
       
  9129 				   WINS).
       
  9130 
       
  9131 6) Geert
       
  9132 		1) Removed the encoding of build variants in uid[0] of E32 images. Introduced
       
  9133 		   differentiation between EXEs and DLLs in uid[0]. EXEs have a uid[0] of
       
  9134 		   KExecutableImageUid [0x1000007a], DLLs come with one of KDynamicLibraryUid
       
  9135 		   [0x10000079]; ie, DLLs don't change for narrow release builds, EXEs get the
       
  9136 		   value previously used for narrow debug builds. EXEs won't load unless they
       
  9137 		   have their uid[0] changed.
       
  9138 
       
  9139 		2) Changed lots of other private and public UIDs, taking care to preserve
       
  9140 		   compatibility for ARM builds. Unless you release an EXE you're alright, and
       
  9141 		   even EXEs can be fixed at rom build time.
       
  9142 		   UIDs of interest can be found in a bare <e32uid.h>, which, in addition to
       
  9143 		   KExecutableImageUid and KDynamicLibraryUid contains KLogicalDeviceDriverUid
       
  9144 		   and KPhysicalDeviceDriverUid--uid[1] values for device drivers--and unrelated
       
  9145 		   KMachineConfigurationUid.
       
  9146 
       
  9147 		3) Removed the second PREP stage from the rom build process.
       
  9148 
       
  9149 7) Morgan
       
  9150 		1) Fixed a chunk problem with RAM loading the same process twice.
       
  9151 
       
  9152 8) Pete
       
  9153 		1) Fixed 'Panic in DPlatMediaChange::TickService()' in WINS
       
  9154 		(SW-1962). Now ignore further media change events (F5 keydown)
       
  9155 		while the door state is open (as per ARM).
       
  9156 		2) Fixed problems parsing the CIS of Multifunction PC Cards.
       
  9157 		3) Temporarily fixed 'Occasional Write() / Format()
       
  9158 		timeouts when accessing CF card' (SW-3311) by increasing the
       
  9159 		WaitForNotBusy() watch dog in the CF media driver from 40mS to 60mS.
       
  9160 		4) Door close event in WINS (F5 keyup) now processed
       
  9161 		when the machine is in standby.
       
  9162 		5) CRom(Prog) media driver (MEDCRR.PDD) now
       
  9163 		calculated the CRom size by attempting to read the intelligent ID
       
  9164 		from each flash device. This driver now has 'high' priority to allow
       
  9165 		it to open in preference to the normal CRom media driver.
       
  9166 
       
  9167 
       
  9168 Version 0.01.097
       
  9169 ================
       
  9170 (Made by ???, ??? April 1997)
       
  9171 
       
  9172 1) MarkT
       
  9173 		1) Added Early write completion to serial driver - D_COMM.CPP.
       
  9174 		   To enable set the flag KConfigWriteBufferedComplete in the
       
  9175 		   iHandshake of TCommConfigV01 and writes will be completed when
       
  9176 		   they are in the transmit buffer as oppose to waiting until they are
       
  9177 		   in the hardware.  To flush data from the transmit buffer either
       
  9178 		   use Write(0), (Write(0) will not complete until transmit buffer
       
  9179 		   is empty), or unset KConfigWriteBufferedComplete and do a
       
  9180 		   write as normal.
       
  9181 
       
  9182 2) Pete		1) Change to CF media driver (MEDATA.PDD) so that this reverts to CHS
       
  9183 		addressing if the LBA disk size is found to be invalid. Allows us to
       
  9184 		work with Epson PC ATA card.
       
  9185 		2) Fixed a problem such that the second socket on rack D (E:) wasn't
       
  9186 		properly being reset following a media change (DPcCardSocket::Reset1()
       
  9187 		wasn't being called) - only applies to racks modified for
       
  9188 		VPC control via the CHRGEN signal.
       
  9189 		3) Pc Card Controller now fully supports Memory Space Description fields
       
  9190 		when parsing Configuration Table Entry tuples.
       
  9191 		4) Pc Card Controllers attribute memory chunk increased from 8K to 64K.
       
  9192 		5) Added the Delaware variant (VARMPG).
       
  9193 		6) Added PC Card Serial Driver (EUART3.PDD) for Rack D - ie providing a third
       
  9194 		serial port on Rack D when PC Card Modem or Serial card is inserted into the PC
       
  9195 		Card Socket (68pin socket). To use it you have to switch the '3.3V/5V' switch to
       
  9196 		the 5V position (LEFT) and apply a 5V/500mA supply to the '+5V'pin next to this
       
  9197 		switch. Unfortunately, without a modification to Rack D it is not possible to
       
  9198 		turn this socket on/off under s/w control. The driver assumes the card is
       
  9199 		permanently powered and if the rack goes into standby (or the media change switch
       
  9200 		is operated) then the card is no longer useable.
       
  9201 		This driver has only received limited testing:-
       
  9202 		- With a Serial PC Card it passes T_SERIAL up to 115K baud as long as the power-off
       
  9203 		tests are disabled and the serial port FIFO is enabled. (Passes T_SERIAL up to
       
  9204 		19200baud with FIFO disabled).
       
  9205 		- Dacom V34 PC Card modem responds to an AT<CR> with T_TERM.
       
  9206 		7) Change to CROM media driver so that the page latch
       
  9207 		is reset after each access. This ensures that the page containing the
       
  9208 		cards CIS is always selected at the start of each access.
       
  9209 		8) Fixed problem where DPccdCntrlInterface::DoNotifyChange was adding the same TPccdCallBack
       
  9210 		to two event queues. This resulted in the wrong event callback being
       
  9211 		called on media change. This eventually lead to the situation where
       
  9212 		the DMediaChange Dfc wasn't queued and the door close event was
       
  9213 		missed. Any subsequent access to the CF card returned KErrNotReady.
       
  9214 		(Fixes SW-2557)
       
  9215 
       
  9216 3) William
       
  9217 		1) Fixed HeapOffset/ChunkCompressAll interactions to ensure heap safety: the HeapOffset
       
  9218 		   is now set by RHeap::ChunkHeapCreated after the RHeap has been fully created, and
       
  9219 		   ChunkCompressAll now respects the RHeap critical sections.
       
  9220 		2) Add "DebugMask nnn" facility to WINS SYSTEM.INI (sadly you have to specify the
       
  9221 		   bitmask as a decimal number, but it's still useful).
       
  9222 		3) Start adding explicit numbering to some of the panic enumerated types, in particular
       
  9223 		   TBasePanic, TCdtPanic and TExcType.
       
  9224 		4) Implement CConsoleTextWin::SetTitle
       
  9225 		5) Add T_HCOMP.CPP heap compressing program used to cause ChunkCompressAll problems.
       
  9226 		6) Add __KTRACE_ANY which is similar to the previous version of __KTRACE_OPT
       
  9227 
       
  9228 4) Graham
       
  9229 		1) Made pointer click volume default to soft (on a cold boot)
       
  9230 				2) Removed Steve Townsend's change to TRegn::Clear()
       
  9231 				3) Removed the leading 'V' from version names
       
  9232 				4) Changed the fold and collate tables of the ISO
       
  9233 				   LATIN1 character set so that 'a with a ring above
       
  9234 				   it' and 'ae combined into one character' both
       
  9235 				   fold to an 'a' and so that 'o with a slash through
       
  9236 				   it' folds to an 'o'.
       
  9237 				5) Froze the complete kernel interface on all builds
       
  9238 				   except WINC.
       
  9239 				6) Published CConsoleBase interface def files in
       
  9240 				   CONSWINS.FRZ, CONSMARM.FRZ, and CONSMISA.FRZ.
       
  9241 				   These are released in the INCC zip file so they
       
  9242 				   will end up in \EPOC32\INCLUDE
       
  9243 
       
  9244 5) Morgan
       
  9245 		1) Released E32 as PETRANned components, complete with Uids.
       
  9246 		2) Removed RLibrary::UidL() and RLibrary::Gate() from the API
       
  9247 		3) Introduced TUidType RLibrary::Type() and
       
  9248 		   TUidType RProcess::Type().
       
  9249 		4) TLoaderInfo has changed, so this E32 and the new F32 must be
       
  9250 		   used as a pair.
       
  9251 
       
  9252 6) Matthew
       
  9253 		1) Fixed comms drivers so they return the correct Ir Capabilities
       
  9254 		   (KCapsSIR115kbps on Eiger).
       
  9255 		2) Fixed bug in WINS sound pdd which meant that sometimes cancelling
       
  9256 		   a play request would only finish after the sound had finished playing
       
  9257 		   anyway.
       
  9258 		3) Fixed bug in sound LDD which meant that samples up to the length of
       
  9259 		   the buffer could be played or recorded on one go. Now descriptors
       
  9260 		   must be less than or equal to the half the size of the buffer.
       
  9261 		4) Added code to check that the power was not too low for playing or
       
  9262 		   recording before it started. Also added code which checks the power
       
  9263 		   level while it is in use and aborts if the power drops too low.
       
  9264 		5) Further changes to the algorithmic alarm sounds - they now use beats,
       
  9265 		   as on the 3a.
       
  9266 		6) Added EChangesPowerStatus to the change notifier. This change occurs
       
  9267 		   when either of the two battery statuses changes, or if external power
       
  9268 		   is connected or disconnected.
       
  9269 		7) Fixed bugs in TTime::DayNoInWeek() and TTime::DateTime() which were
       
  9270 		   giving the wrong values for negative TTimes.
       
  9271 		8) Added horizontal tabs, delete and ascii bell to test window server.
       
  9272 		   Also made it ignore the null character and vertical tabs.
       
  9273 
       
  9274 Version 0.01.096
       
  9275 ================
       
  9276 (Made by Graham, 2nd April 1997)
       
  9277 
       
  9278 Binary compatible with 095
       
  9279 
       
  9280 1) Graham
       
  9281 		1) Improved backup battery voltage monitoring
       
  9282 		2) Fixed a bug in the sound driver in the presence of
       
  9283 		   emergency power loss. This should cure all reported
       
  9284 		   problems of not being able to turn the machine back
       
  9285 		   on after playing sounds with low batteries.
       
  9286 
       
  9287 2) Dennis
       
  9288 		1) Fixed bug in unsigned division routine when used with
       
  9289 		   a divisor >= 0x80000000.
       
  9290 
       
  9291 3) William
       
  9292 		1)	Implement primitive support for WINS memory gauge (SW-1183)
       
  9293 			Note that this won't limit the total memory allocated, so the gauge can
       
  9294 			exceed 100% (see Defects database for details).
       
  9295 		2)	Report allocated base address even for chunks of committed size 0 (SW-1876)
       
  9296 		3)	Fix dangling pointer problem with DChunk::AdjustL (SW-1793)
       
  9297 		4)	Implement Steve Townsend's suggested shortcut in User::Free and User::FreeZ
       
  9298 		5)	Tidy up handling of config structures in DoControl in D_COMM.CPP (SW-1970)
       
  9299 
       
  9300 4) Matthew
       
  9301 		1) Fixed SW-1994: Playing no sound can lock up machine.
       
  9302 
       
  9303 5) Pete
       
  9304 		1) Measurement of Vpc when powering up Pc Cards has now been enabled. This is in order
       
  9305 		   to reject cards which are found to be drawing excessive current.
       
  9306 		   (This had been disabled until it was possible to convert the ADC reading to millivolts).
       
  9307 
       
  9308 Version 0.01.095
       
  9309 ================
       
  9310 (Made by Graham, 26th March 1997)
       
  9311 
       
  9312 1) William
       
  9313 		1) Fixed bug with shared heaps (SW-1665) and added failure scenario to the T_RHEAP test.
       
  9314 		2) Fixed SW-1884 bug about timer.At() alarms going off early after switchoff, and
       
  9315 		   enhanced T_POWR test to check for this.
       
  9316 
       
  9317 2) Morgan
       
  9318 		1) Added code to calibrate the digitiser based on the values in the
       
  9319 		   E-squared on a cold start.  This may mean that if your E-squared
       
  9320 		   contains wildly outrageous values the digitiser will be out of
       
  9321 		   kilter.  You can run \E32\TBAS\T_PROM to rectify this.
       
  9322 
       
  9323 3) Matthew
       
  9324 		1) Fixed B5/B6 bug SW-1726 (volume suddenly shooting to maximum).
       
  9325 
       
  9326 		2) Moved algorithmic alarm data into the localisation dll, so the names can
       
  9327 		   be changed.
       
  9328 
       
  9329 		3) Fixed B5/B6 bug SW-1630 in Comms PDDs: trying to set Mark and Space now
       
  9330 		   returns an error, and they are not returned as part of the capabilities.
       
  9331 
       
  9332 		4) Changes to Etna comms:
       
  9333 			Fixed bug where the TEtna class was ignoring the Parity-Enable bit.
       
  9334 			Removed the Uart interrupt enable from the boot up, since it was being
       
  9335 			switched off anyway, and made the Etna comms driver switch interrupts on.
       
  9336 
       
  9337 		5) Added Comms driver power handling code. The behaviour is now that read and
       
  9338 		   write requests are completed with KErrAbort on normal switch-off and with
       
  9339 		   KErrBadPower if there is an emergency power down. On a power down the input
       
  9340 		   signals drop. On switch off, writes will keep going until the end of the
       
  9341 		   hardware fifo.
       
  9342 
       
  9343 		6) Fixed some bugs in the Comms LDD to do with signals.
       
  9344 
       
  9345 		7) Added Grahams K32DBGDD.H header file, which contains a helpful class for
       
  9346 		   debugging device drivers.
       
  9347 
       
  9348 4) Jal
       
  9349 		1) Changes to the Pccd interface controller to allow
       
  9350 				   access to media change notification. Added to UserPcCardCntrl:
       
  9351 
       
  9352 						IMPORT_C static TInt NotifyChange(TSocket aSocket,TRequestStatus *aReqStat);
       
  9353 
       
  9354 5) Graham
       
  9355 				1) Tightened up the backlight handling code and added various
       
  9356 				   backlight tests to T_POWR.CPP
       
  9357 
       
  9358 		2) Made Steve Townsends modification to TRegion.
       
  9359 
       
  9360 				3) Fixed a bug in Unicode in UM_RTOD.CPP
       
  9361 
       
  9362 6) Jonathan
       
  9363 				1) t_dbg: Added memory read/write tests to user data and, on
       
  9364 				   MARM, to Eiger registers.
       
  9365 				2) Forced RDebug::WriteMemory() to use Mem::Move for aligned
       
  9366 				   writes so that writing to Eiger registers works.
       
  9367 
       
  9368 7) Dennis
       
  9369 		1) Added code to implement real-time clock correction based on a
       
  9370 		   measured crystal error value in parts per 2^24, written into
       
  9371 		   K::XtalError at startup.
       
  9372 8) Pete
       
  9373 		1) On media change, before writing to a thread which
       
  9374 		   has requested notification of media change, a check has been added to
       
  9375 		   verify the thread has not been destroyed.
       
  9376 		2) Fixed a problem with CRom media driver (MEDCRM.PDD).
       
  9377 		   Reads/writes from a position which wasn't on a word boundary (or of a
       
  9378 		   length in bytes which wasn't a multiple of 4), weren't previously supported.
       
  9379 		3) Implemented a 40ms watchdog timeout on writes to CF cards (MEDATA.PDD).
       
  9380 		4) Pc Card Controller now supports extended device
       
  9381 		   speed bytes when parsing Device Information Tuples.
       
  9382 		5) Added extra fixed media enum to TMediaDevice in E32PCCD.H.
       
  9383 		6) Various changes to Pc Card Controller to reduce code size.
       
  9384 		7) It is now possible to disable the media change
       
  9385 		   implementation by setting iTotalMediaChanges=0 in Custom::PcCardMachineInfo().
       
  9386 		8) Pc Card inactivity power down and 'not locked' power down periods can now be
       
  9387 		   set at the custom layer in Custom::PcCardMachineInfo().
       
  9388 
       
  9389 Version 0.01.094
       
  9390 ================
       
  9391 (Made by Graham, 20th March 1997)
       
  9392 
       
  9393 1) William
       
  9394 		1) Changed __KTRACE_OPT for exact matches on multiple trace bits, and tweaked some
       
  9395 		   of the debug messages a bit.
       
  9396 		2) Enabled __KTRACE_OPT for WINS builds, writing to "Output" window under MSDEV
       
  9397 		3) Automatically set KPANIC trace bit if debug mask is non-zero
       
  9398 		4) Use aThread==NULL to mean &Plat::CurrentThread() in ObjectFromHandle functions,
       
  9399 		   and adjusted the callers appropriately
       
  9400 		5) Check in SvSendReceive to make sure that the iSvSession is not NULL, and
       
  9401 		   fault if it is: the most likely reason for this is a User::Panic in the Supervisor
       
  9402 		   thread, so we check to see if the message code is ESvThreadPanic and extract the
       
  9403 		   Panic category and code as appropriate.
       
  9404 		6) Added a new TCDT\T_KILLER.CPP test program.
       
  9405 		7) Added simple calibration of WINS ticks, to fix SW-1384 by making the clocks run on time...
       
  9406 		8) Arranged for Plat::Panic to add 0x10000 to the afult number and call Plat::Fault, so that
       
  9407 		   the machine will restart rather than loop forever.
       
  9408 		9) Put back tweaked VA_RCHG.CPP battery charging driver: it will charge batteries without
       
  9409 		   melting the machine, but it won't do so automatically: still needs more work.
       
  9410 
       
  9411 2) Graham
       
  9412 		1) Changed rack B,C,and D keyboard tables to interpret FN+cursor
       
  9413 		   keys as home, end, page down and up.
       
  9414 
       
  9415 		2) Updated all keyboard tables to handle ctrl+fn as outlined in
       
  9416 		   the 090 release notes - not sure what happened to these changes,
       
  9417 		   they seemed to disappear some time after 090
       
  9418 
       
  9419 		3) Added code to handle low battery situations a lot faster.
       
  9420 		   Typically, we remove power from all devices within 110uS and go
       
  9421 		   into standby within 130uS.
       
  9422 
       
  9423 		4) Enhanced the P2 keyboard driver. It no longer locks the keyboard
       
  9424 		   out fully when three keys are pressed simultaneously. Rather, it
       
  9425 		   waits until fewer then three keys remain pressed before beginning
       
  9426 		   to deliver keyboard events again.
       
  9427 
       
  9428 		5) Fixed a bug in the keyboard when switching on with the dictaphone
       
  9429 		   keys - it delivered the key down event but never delivered a
       
  9430 		   key up event when the key was released.
       
  9431 
       
  9432 3) Ann
       
  9433 		1) Changed TRealFormat KRealFormatExponent mode to be able to use
       
  9434 		either significant figures or decimal places.  Default is still
       
  9435 		decimal places, but oring in the KUseSigFigs flag to the format type
       
  9436 		will allow use of significant figures instead.
       
  9437 
       
  9438 		2) Changed TRealForamtFixed mode so that negative numbers < -1 are
       
  9439 		are "0" rather than "-0" when 0 dp are used.
       
  9440 
       
  9441 4) Dennis
       
  9442 	1) Exec::ThreadRead8, ThreadRead16, ThreadWrite8, ThreadWrite16, ThreadGetDesLength,
       
  9443 	   ThreadGetDesMaxLength now return an error code of KErrArgument if the pointer into the
       
  9444 	   remote thread address space is invalid, rather than panicing the caller. This fixes
       
  9445 	   problem SW-1013.
       
  9446 
       
  9447 	2) Supervisor server functions invoked with a bad pointer will now panic the caller,
       
  9448 	   rather than causing a system fault and rebooting the machine.
       
  9449 
       
  9450 	3) The sound driver LDD has been changed to allow only one channel to be open at a time.
       
  9451 	   This fixes problem SW-1165.
       
  9452 
       
  9453 	4) All key and pointer clicks are now disabled during sound recording. This fixes
       
  9454 	   problem SW-817.
       
  9455 
       
  9456 5) Morgan
       
  9457 	1) Read the E-Squared ROM into RAM on a cold boot.
       
  9458 
       
  9459 
       
  9460 Version 0.01.093
       
  9461 ================
       
  9462 (Made by Graham, 14th March 1997)
       
  9463 
       
  9464 1) Pete
       
  9465 		1) Fixed a problem with inter-thread reading from CF card.
       
  9466 	2) Fixed a timeout problem with some CF cards when
       
  9467 	formatting.
       
  9468 
       
  9469 2) Jonathan
       
  9470 	1) StrongARM port (ISA) brought up-to-date but not tested.
       
  9471 
       
  9472 	*) Base team please note that (rightly or wrongly) the ARM Custom
       
  9473 	   API is shared with ISA (file inc\v32arm.h), so any changes or
       
  9474 	   additions to the ARM Custom API must be reflected in the ISA
       
  9475 	   Custom implementation.
       
  9476 
       
  9477 3) Graham
       
  9478 		1) Fixed handling of the emergency power down queue. This
       
  9479 		   problem was due to the bad design of single queues - it
       
  9480 		   is impossible to fully check that you are enqueued without
       
  9481 		   traversing the queue from the top. We might look into
       
  9482 		   adding a more useful single queue type.
       
  9483 
       
  9484 Version 0.01.092
       
  9485 ================
       
  9486 (Made by Graham, 13th March 1997)
       
  9487 
       
  9488 
       
  9489 1) Pete
       
  9490 	1) Fixed problem with Format() in Compact Rom (repro version)
       
  9491 	media driver (MEDCRR.PDD) such that it was only formatting the first
       
  9492 	2M of a CRom card.
       
  9493 	2) Compact Rom media driver (MEDCRM.PDD) now included in release.
       
  9494 
       
  9495 2) Graham
       
  9496 		1) Fixed an bug in the mmu abstraction which assumed that the page
       
  9497 		   directory was aligned linearly in the same way as it was aligned
       
  9498 		   physically.
       
  9499 
       
  9500 3) William
       
  9501 		1) Fixed a problem with threads dying
       
  9502 
       
  9503 Version 0.01.091
       
  9504 ================
       
  9505 (Made by Graham, 12th March 1997)
       
  9506 
       
  9507 1) SimonB
       
  9508 		1) Fix for Serial PDD in NT 4
       
  9509 		2) Removal of dependancy on MSVCRT40*.DLL
       
  9510 
       
  9511 2) Morgan
       
  9512 		1) Added screen information to TRomHeader for the bootstrap
       
  9513 		2) Fixed corrupted ExcInfo on MARM by adding a FiqStack and
       
  9514 		   moving the exceptions onto the ExceptionStack.
       
  9515 		3) Moved TExcInfo to E32HAL.H
       
  9516 		4) System Death due to an exception now saves ExcInfo in the
       
  9517 		   Superpage and causes a Kernel Fault.  Startup, Fault and
       
  9518 		   Exception reasons are available through:
       
  9519 				UserHal::StartupReason()
       
  9520 				UserHal::FaultReason()
       
  9521 				UserHal::ExceptionId()
       
  9522 				UserHal::ExceptionInfo()
       
  9523 				   There should be a Shell dialogue which retrieves
       
  9524 				   this information after a kernel fault. This will
       
  9525 				   enable us to pin down the offending code. Also, along
       
  9526 				   with each new Protea image, MAKSYM should be run and
       
  9527 				   the generated log file should be placed on the network
       
  9528 				   as well. This will give the address of every function
       
  9529 				   in every module of the ROM.
       
  9530 		5) Changed the startup beeps
       
  9531 				ColdStart    1 beep
       
  9532 				WarmStart    2 beeps
       
  9533 				KernelFault  3 decending beeps
       
  9534 		6) Fixed SW-1069 - WINC heaps can grow up to 8Mb
       
  9535 
       
  9536 3) Graham
       
  9537 		1) Enabled the shift key when typing e.g. CTRL-1 a to give
       
  9538 		   a-umlaut.
       
  9539 
       
  9540 		2) Solved the œ sign problem on WINS - this had been
       
  9541 		   re-introduced by Simon's WINS internationalisation
       
  9542 		   code.
       
  9543 
       
  9544 		3) Re-introduced some digitiser inertia code to prevent
       
  9545 		   wobble.
       
  9546 
       
  9547 		4) Re-structured the Spi controller code.
       
  9548 
       
  9549 		5) Fixed a bug in CObjectCon::CheckUniqueFullName() that was
       
  9550 		   preventing two processes of the same name being loaded.
       
  9551 		   This cures problems with T_KHEAP.EXE and T_PROC1.EXE.
       
  9552 
       
  9553 		6) Fixed T_KEYS.EXE by updating it for the new ISO LATIN 1
       
  9554 		   keyboard tables.
       
  9555 
       
  9556 		7) Made TInt64::GetTInt() and TInt64::GetTReal() const.
       
  9557 
       
  9558 		8) Swapped the dictaphone keys round (again?)
       
  9559 
       
  9560 		9) Changed the emergency power down list to be on a single
       
  9561 		   queue instead of an object container.
       
  9562 
       
  9563 		10) Changed the P2 keyboard table to make FN-e give e acute
       
  9564 			and FN-SHIFT-e to give E acute. This is just to test that
       
  9565 			such things are possible although it might be cool to just
       
  9566 			leave this in since e acute is probably the most-used
       
  9567 			accented character in English.
       
  9568 
       
  9569 		11) Moved the accenting keys from CTRL+1-6 to FN+Q and FN+Z-B
       
  9570 
       
  9571 		12) Completed anti-ghosting logic to disallow more than one
       
  9572 			modifier and more than one normal key at the same time.
       
  9573 
       
  9574 		13) Changed the text window server so that a pointer click outside
       
  9575 			the region of any window will cause the foreground window to
       
  9576 			change.
       
  9577 
       
  9578 		14) Implemented battery voltage monitoring
       
  9579 
       
  9580 		15) Increased the number of frozen functions in the kernel to
       
  9581 			avoid BITGDI recompilations when E32 is released. Lane, you
       
  9582 			will have to recompile, hopefully for the last time, for
       
  9583 			this version of E32.
       
  9584 
       
  9585 		16) Changed keyboard driver to recognise when the machine is
       
  9586 			turned on. It will then scan the keyboard and deliver a
       
  9587 			keyboard event only if the dictaphone keys are down. It then
       
  9588 			waits for all keys to be up before proceeding to deliver
       
  9589 			further events.
       
  9590 
       
  9591 4) Matthew
       
  9592 		1) Fixed B5 bug SW-266 ("%+0*S" formatted incorrectly).
       
  9593 
       
  9594 		2) Put in Ir power-down fix (from Mark Ball).
       
  9595 
       
  9596 		3) Added emergency power down handling to sound driver. The driver
       
  9597 		   completes statuses with KErrBadPower on emergency power down.
       
  9598 		   This fixes B5 bug SW-384.
       
  9599 
       
  9600 		4) Added two functions to sound driver - BytesPlayed() and
       
  9601 		   ResetBytesPlayed() wich give the user feedback on how playing is
       
  9602 		   progressing.
       
  9603 
       
  9604 		5) Increased the volume of EVolumeMedium in Eiger sound PDD so the
       
  9605 		   steps are more even. "Fixes" SW-543 (No apparent difference
       
  9606 		   between volume settings).
       
  9607 
       
  9608 		6) Moved sound test code from F32 to E32.
       
  9609 
       
  9610 5) Jonathan
       
  9611 	1) Added SA ARM variant for Snowball.
       
  9612 
       
  9613 	2) Fixed #defines in ROM.OBY file to make PREP happy.
       
  9614 
       
  9615 	3) Made screen size a variant-dependent thing on ARM:
       
  9616 		- Screen size is no longer hard-coded in ARM text window server
       
  9617 		  (wd_eiger.cpp) or ImpHal::Init3(). Text window server no
       
  9618 		  longer handles switching bit depth.
       
  9619 		- LCD initialisation moved out of boot code into
       
  9620 		  ImpHal::Init3(), with size-dependant LCD initialisation in
       
  9621 		  Variant::Init3().
       
  9622 		- ARM boot code uses screensize parameters in ROM header to
       
  9623 		  determine video RAM size and placement of page tables.
       
  9624 
       
  9625 6) Dennis
       
  9626 		1) Fixed a bug in the high-resolution timer code, and added a
       
  9627 		   Cancel() function to TMilliSecondCallBack.
       
  9628 
       
  9629 		2) Added a logical device driver for the high-resolution
       
  9630 		   timer (EFTIM.LDD) accessed via RFastTimer class in
       
  9631 		   D32FTIM.H
       
  9632 
       
  9633 		3) Fixed some bugs in 486 build of E32 and speeded it up
       
  9634 		   by enabling the processor cache and by coding the Mem::
       
  9635 		   functions in assembler.
       
  9636 
       
  9637 7) Ann
       
  9638 		1) Fixed a bug in TLex8::Val() which setting next to start of
       
  9639 		string if an overflow occurred, causing problems for EIKON.
       
  9640 
       
  9641 8) Pete
       
  9642 	1)  On ARM architecture, moved code for Etna device out of the Kernel
       
  9643 	 into the Variant DLL for P1,P2,RackC and RackD builds.
       
  9644 	2) Added iInterruptInfo to TPccdConfigInfo class. Users of
       
  9645 	UserPcCardCntrl::GetConfig() must rebuild - only Pc Card test code should
       
  9646 	be using this.
       
  9647 	3) Changes to the inter-thread Read()/Write() functions and the Format()
       
  9648 	function of DMediaDriver to take a reference to a length (TInt &aLen rather
       
  9649 	than TInt aLen). Read/Write/Format requests which would result in excessive time 		spent in the Kernel now only partly complete. They then return TErrTooBig
       
  9650 	with aLength adjusted to the remaining length.
       
  9651 	4) Removed the current thread read/write functions
       
  9652 	Read(TInt aPos,TintaLength,TDes8 &aTrg) and Write(TInt aPos,TDesC8 &aSrc) from 	class DMediaDriver as the inter thread read/write versions now perform the same 		function if the target thread is found to be current.
       
  9653 	5) ARM Ata media driver now adjusts auto power down timeout of CF card to 1sec. 		This prevents it from going into sleep mode between access which could affect CF 		card transfer rates (default is 5mS).
       
  9654 
       
  9655 Version 0.01.090
       
  9656 ================
       
  9657 (Made by Graham, 26th February 1997)
       
  9658 
       
  9659 1) Graham
       
  9660 		1) Changed CTRL+FN+key behaviour. This is a complicated
       
  9661 		   issue. If one hits CTRL+FN+'1' on a Lime, then it is clear
       
  9662 		   that the Control and Function modifiers should be set.
       
  9663 		   However, what should the keycode be? It should be '1'
       
  9664 		   and not '_'. Higher level software is more interested in
       
  9665 		   the fact that CTRL+FN+'1' has been pressed than CTRL+'_' has
       
  9666 		   been pressed. For this reason, in 089, the keyboard tables
       
  9667 		   were changed to make CTRL override FN as far as keycode code
       
  9668 		   production was concerned.
       
  9669 
       
  9670 		   However, consider the keystroke CTRL+FN+LeftArrow. In this
       
  9671 		   case, the opposite is true. Higher level software is more
       
  9672 		   interested in the fact that CTRL+HOME has been pressed
       
  9673 		   than that CTRL+FN+LeftArrow has been pressed.
       
  9674 
       
  9675 		   So, in this release I have changed the keyboard tables to
       
  9676 		   cater for both problems by judging each key on an
       
  9677 		   individual basis. On a Lime, the keycode produced for:
       
  9678 
       
  9679 		   CTRL+FN+'1' - CTRL+FN+'9'    ->      '1' - '9'
       
  9680 		   CTRL+FN+'A' - CTRL+FN+'Z'    ->      0x01 - 0x1a
       
  9681 		   CTRL+FN+LeftArrow            ->      Home
       
  9682 		   CTRL+FN+RightArrow           ->      End
       
  9683 		   CTRL+FN+UpArrow              ->      PgUp
       
  9684 		   CTRL+FN+DownArrow            ->      PgDn
       
  9685 		   CTRL+FN+Tab                  ->      CapsLock
       
  9686 		   CTRL+FN+Esc                  ->      Off
       
  9687 		   CTRL+FN+'                    ->      '
       
  9688 		   CTRL+FN+.                    ->      .
       
  9689 		   CTRL+FN+<space>              ->      Backlight
       
  9690 		   CTRL+FN+,                    ->      Help
       
  9691 
       
  9692 		2) Changed the raw key code on WINS for the Alt key from
       
  9693 		   EStdKeyLeftAlt to EStdKeyLeftFunc. Attempted to get the
       
  9694 		   windows key to be the Epoc32 Alt key.
       
  9695 
       
  9696 		3) Various additions to do with REPROing the upper 2Mb on
       
  9697 		   Limes.
       
  9698 
       
  9699 		4) Protected the eiger internal registers from user mode access
       
  9700 
       
  9701 		5) Introduced anti-ghosting algorithm into the P2 keyboard
       
  9702 		   driver. It doesn't, however, get rid of the ghost FN key
       
  9703 		   when you hold down LeftShift, DownArrow, and RightArrow
       
  9704 		   together. This leads me to believe that not all the diodes
       
  9705 		   have been fitted on the modifier keys.
       
  9706 
       
  9707 		   The algorithm is basically one of 2-key rollover. So, any
       
  9708 		   keypresses made when two keys are already held down should
       
  9709 		   be ignored. Naturally, this is no good when you want to
       
  9710 		   hold down certain complex modifier and key combinations.
       
  9711 		   So, these special cases are compensated for in the software
       
  9712 		   in the knowledge diodes should be fitted into the modifier keys
       
  9713 		   to prevent any matrix-ghosting.
       
  9714 
       
  9715 2) Ann
       
  9716 	1) Fixed bug spotted by Natascha in doCalculator() so that values
       
  9717 	   with negative exponents are displayed correctly.
       
  9718 
       
  9719 
       
  9720 Version 0.01.089
       
  9721 ================
       
  9722 (Made by Jane, 21st February 1997)
       
  9723 
       
  9724 1) SimonB
       
  9725 	1) Removed dependency on WINMM. Timer now based on a RealTime thread
       
  9726 	   and sleeps.
       
  9727 	   Required for Win95 and general compatibility.
       
  9728 
       
  9729 	2) Changed WINS Comms PDD to work with Windows 95
       
  9730 
       
  9731 	3) Mark T's Comms PDD bug fixes integrated.
       
  9732 
       
  9733 		4) International Keyboard support. Just UK and US at the
       
  9734 		   moment, more to follow.
       
  9735 
       
  9736 		5) Removed first chance exceptions from WINS loading.
       
  9737 		   IsBadWritePtr replaced by VirtualQuery.
       
  9738 
       
  9739 2) Jane
       
  9740 
       
  9741 	1) Finished the CObjectCon improvements suggested by Andrew. Note
       
  9742 	   that to pick these up you need the new version of
       
  9743 	   CheckUniqueName which takes CObject*s rather than names.
       
  9744 	   The time taken to Add 0x600 named objects to a container has
       
  9745 	   gone down from 14 seconds to 6 seconds.
       
  9746 
       
  9747 	2) Added code for _ftol() to WINS and X86 builds. The function
       
  9748 	   header is in e32std.h
       
  9749 
       
  9750 	3) Fixed various debugging printfs by supplying a simple overflow
       
  9751 	   handler so that long strings are truncated rather than
       
  9752 	   panicing the caller.
       
  9753 
       
  9754 3) Graham
       
  9755 
       
  9756 		1) Fixed the œ gives ae keyboard problem by converting all
       
  9757 		   keyboard tables from CP850 to ISO Latin 1.
       
  9758 
       
  9759 		2) Introduced a new key code - EKeyHelp. This is now F2
       
  9760 		   on WINS.
       
  9761 
       
  9762 		3) Changed the WINS keyboard tables so that the dictaphone
       
  9763 		   keys give the correct raw scan code as well as the
       
  9764 		   appropriate Epoc32 key code. Did the same trick for
       
  9765 		   the menu, help and off keys.
       
  9766 
       
  9767 		4) Fixed up the P2 keyboard tables. Note that the backlight
       
  9768 		   keys have to be handled in higher level software -
       
  9769 		   presumably the window server. On Protea the key code used
       
  9770 		   is EKeyBacklightToggle. However, a really skillful
       
  9771 		   implementation would handle EKeyBacklightOn and
       
  9772 		   EKeyBacklightOff as well (in case future hardware has
       
  9773 		   both on and off keys for the backlight).
       
  9774 
       
  9775 		5) Fixed the P2 sticky shift and function modifiers.
       
  9776 
       
  9777 		6) Removed the keyclick on shift, function and control keys.
       
  9778 		   This has only been implemented on P2.
       
  9779 
       
  9780 4) Pete
       
  9781 	1) Renamed EPccdEvent enums to prevent name clashing with
       
  9782 	W32STD.H.
       
  9783 	2) Enabled media change interrupts on P2 hardware.
       
  9784 
       
  9785 5) Morgan
       
  9786 		1) WarmReset+LeftShift boots with EStartupColdReset on P1,P2,PB,PC,PD
       
  9787 		2) Added startup beep
       
  9788 		3) Fixed SW-32
       
  9789 		4) Write protected the Mmu page directory backup
       
  9790 
       
  9791 6) Ann
       
  9792 		I IMPLEMENTATION OF SPECIAL VALUES:
       
  9793 
       
  9794 		TReal96, Math and TDes8/16 classes now handle "special values" - NaNs,
       
  9795 		infinities, signed zeros and denormals.
       
  9796 
       
  9797 		Changes are as follows:
       
  9798 
       
  9799 		1) Maths constants renamed:
       
  9800 			K...ExponentBigBad   now K...SpecialExponent
       
  9801 			K...ExponentSmallBad now K...ZeroExponent.
       
  9802 
       
  9803 		2) The Math member functions
       
  9804 		ASin(), ACos(), ATAn(), Exp(), Frac(), Int(), Ln(), Log(), Mod(),
       
  9805 		Pow(), Pow10(), Sin(), Cos(), Tan(), Sqrt()
       
  9806 		have been changed as follows:
       
  9807 
       
  9808 		a) to return an error corresponding to the result, i.e.
       
  9809 		KErrArgument if the result is indefined / a NaN,
       
  9810 		KErrOverflow if the result is too big to be represented or infinite
       
  9811 		positive only if the result is an integer),
       
  9812 		KErrUnderflow if the result is too small to be represented (or if the
       
  9813 		result is an integer, if the result is too large or infinite
       
  9814 		and negative),
       
  9815 		KErrNone if the result is finite and representable.
       
  9816 		b) to write a result to the aTrg IN ALL CASES rather than just
       
  9817 		the return value is KErrNone.  Hence the result is as follows:
       
  9818 		NaN if the error is KErrArgument,
       
  9819 		Positive or negative infinity as appropriate if the error is
       
  9820 			KErrOverflow (or the max value if the result is an integer),
       
  9821 		Positive or negative zero as appropriate if the error is
       
  9822 			KErrUnderflow (or the min value if the result is an integer).
       
  9823 		c) to be able to handle denormals. i.e. all numbers >= 5E-324 and <
       
  9824 		KMinTReal64=2.2250738585072015E-308.
       
  9825 
       
  9826 		3) Math member functions IsZero(), IsNaN(), IsInfinite() and
       
  9827 		IsFinite() added.  Also private member functions SetZero(), SetNaN()
       
  9828 		and SetInfinite().
       
  9829 
       
  9830 		4) TDes8/16::Num/AppendNum() returns error value or length of string
       
  9831 		as previously, but if error value is returned an appropriate string
       
  9832 		is set:
       
  9833 		"Inf" for positive overflow (KErrOverflow and positive argument)
       
  9834 		"-Inf" for negative overflow (KErrOverflow and negative argument)
       
  9835 		"0" for positive underflow (KErrUnderflow and positive argument)
       
  9836 		"-0" for negative underflow (KErrUnderflow and negative argument)
       
  9837 		"NaN" for NaN (KErrArgument)
       
  9838 
       
  9839 		5) TDes8/16::AppendFormatList() only panics for KErrGeneral and
       
  9840 		if another error value is returned by Num(), uses the string set
       
  9841 		as above.
       
  9842 
       
  9843 		6) The exponent of TReal96 zero is now -32768, the smallest exponent
       
  9844 		possible.
       
  9845 
       
  9846 		7) TReal96 member functions IsZero(), IsNaN(), IsInfinite(),
       
  9847 		IsFinite(), SetZero(), SetNaN() and SetInfinite() added.
       
  9848 
       
  9849 		II ROUNDING FLAG:
       
  9850 
       
  9851 		See Programming DB - Global Rounding Flag Required
       
  9852 		A new private member of TReal96, iFlag, has been added to
       
  9853 		indicate whether the mantissa is rounded up, rounded down or exact.
       
  9854 		This has required changes in member functions to set and use the
       
  9855 		flag where necessary.
       
  9856 
       
  9857 		Changes are:
       
  9858 
       
  9859 		1) iSign member changed from TInt16 to TInt8.
       
  9860 
       
  9861 		2) Constants for values of iFlag added to e32math.h:
       
  9862 			const TUint8 KRoundedUp=2;
       
  9863 			const TUint8 KRoundedDown=1;
       
  9864 			const TUint8 KExact=0;
       
  9865 
       
  9866 		3) New TReal96 member function TReal96::Flag() which returns the
       
  9867 		value of iFlag as a TInt.
       
  9868 
       
  9869 		4) New private function TReal96::Round() taking an argument which
       
  9870 		specifies the number of binary digits in the mantissa to perform
       
  9871 		rounding in the (MSDEV and IEEE standard default) round to nearest
       
  9872 		mode and to set the flag as appropraite has been added to be used by
       
  9873 		Normalise(), Prepare() and conversion functions.  New private member
       
  9874 		function TReal96::ShiftToNormalise() added to be used in cases where
       
  9875 		rounding will never be required e.g. assignment/construction of
       
  9876 		TReal96 from TInt.
       
  9877 
       
  9878 		5) TInt64::Multop() returns integer values between -2 and 1 with the
       
  9879 		following meanings:
       
  9880 		-2	least significant 64 bits exactly zero
       
  9881 		-1	least significant 64 bits less than TInt64(0x80000000,0) but
       
  9882 			not zero
       
  9883 		0	least significant 64 bits exactly TInt64(0x80000000,0)
       
  9884 		1	least significant 64 bits greater than TInt64(0x80000000,0)
       
  9885 		and TReal96::MultEq() changed to round according to these values.
       
  9886 
       
  9887 		6) TReal96::DivEq() rounds on the remainder after division similarly.
       
  9888 
       
  9889 
       
  9890 		All maths test code updated to test special cases including
       
  9891 		correct return values and setting target values and new functions,
       
  9892 		etc.  Also fixed to work in X86 build.
       
  9893 
       
  9894 
       
  9895 		III OTHER
       
  9896 
       
  9897 		1) UP_GCC.CPP function converting double to float changed to raise
       
  9898 		the exception.  Also all arithmetic changed to do operation and
       
  9899 		conversion and raise the exception if an error value is returned at
       
  9900 		any stage.
       
  9901 
       
  9902 		2) Function TReal96::CheckOverUnderflow() used by arithmetic now a
       
  9903 		private member function and altered to check fewer large-exponent
       
  9904 		cases for overflow.
       
  9905 
       
  9906 7) Matthew
       
  9907 		1) Fixed SW-25 from B5 database (Power off while recording hangs machine).
       
  9908 
       
  9909 
       
  9910 Version 0.01.088
       
  9911 ================
       
  9912 (Made by Jane, 12th February 1997)
       
  9913 
       
  9914 This version requires F32 053
       
  9915 
       
  9916 1) Graham
       
  9917 				1) Sorted out the digitiser. This should no longer
       
  9918 				   exhibit wobble or erroneous points when touching
       
  9919 				   the surface lightly.
       
  9920 
       
  9921 				2) Updated digitser driver to use the new digitiser
       
  9922 				   clicks rather than the keyboard clicks. These
       
  9923 				   should now be indepenently controllable.
       
  9924 
       
  9925 2) Jane
       
  9926 		1) Added an implementation of User::IsRomAddress from
       
  9927 		   Simon B.
       
  9928 
       
  9929 		2) Added CArrayFixBase::SetReserveL
       
  9930 
       
  9931 		3) Fixed a chunk bug - when a TFindChunk was opened read-only
       
  9932 		   in a process, the top bit of the process address (data
       
  9933 		   section) was set to indicate this. If another thread was
       
  9934 		   then created in the process, its heap address was incorrectly
       
  9935 		   allocated over the TFindChunk, as the latter's address was
       
  9936 		   stored with top bit set.
       
  9937 
       
  9938 		4) Fixed a shared chunk bug on 486 - when T_CHUNK opened the
       
  9939 		   Window Server chunk RO, and then did an Exec::SessionSend
       
  9940 		   to the WindowServer, there was a fault when the kernel
       
  9941 		   attempted to write the message into the Window Server's
       
  9942 		   heap. Fixed this by unsetting the WP bit in CR0, so that
       
  9943 		   supervisor can write over User RO chunks. This is OK on the
       
  9944 		   ARM, but a thing to look out for if we ever port to another
       
  9945 		   processor.
       
  9946 
       
  9947 		5) Improved CArrayPtr<T>::ResetAndDestroy as suggested.
       
  9948 
       
  9949 		6) Changed profiler end/start behaviour as detailed on Notes.
       
  9950 
       
  9951 		7) Started to optimise CObjectCon::CheckUniqueName as suggested
       
  9952 		   by Andrew Thoelke.
       
  9953 		   The time taken to store 0x200 unnamed objects has gone down
       
  9954 		   from 6 seconds to being as close to 0 as makes no difference.
       
  9955 		   More on this later...
       
  9956 
       
  9957 		8) Added __ftol to EUSER.
       
  9958 
       
  9959 		9) Added CObjectCon::AtL which leaves rather than panicking, so that
       
  9960 		   the kernel can panic a thread which passes an invalid find handle to
       
  9961 		   open, rather than dying itself.
       
  9962 
       
  9963 		10) Increased the WINS main user thread's max heap size to 8M.
       
  9964 
       
  9965 3) Pete
       
  9966 		1) Moved sections of code relating external interrupt control and binding out of
       
  9967 				the Kernel DLL and down into the Variant DLL.
       
  9968 				2) Code for Pc Card external interrupts (Ready,IREQ,Status change) added.
       
  9969 				3) CF card media driver now makes use of card IREQ signal during card writes. This
       
  9970 				now goes into idle after initiating a write to the card, with the card asserting
       
  9971 				an interrupt on completion to wake up the system.
       
  9972 				4) Added a media driver for compact rom card (MEDCRM.PDD).
       
  9973 				5) Written media driver for programming flash on compact rom card(MEDCRR.PDD).
       
  9974 				6) Modified the functions
       
  9975 		7) Changes to functions CardInfo() and ChangeFlag() of UserPcCardCntrl class.
       
  9976 				8) Monitor the Vpc voltage on first applying power to a Pc Card to check that
       
  9977 				the card isn't drawing too much current for the rail.
       
  9978 				9) Alteration to media change simulation in WINS:
       
  9979 						F5 - Media door open as long as F5 is held down.
       
  9980 						F4 - This toggles between 1 of two simulated CF cards on socket 0 (ie X:)
       
  9981 							 when hit while F5 is held down.
       
  9982 				10) All files used to simulate Pc Card memory and internal ram drive now created in
       
  9983 				systems temp directory rather than \EPOC32\DATA - ie fixed HA-262.
       
  9984 				11) Fixed problem with ATA media driver - divide by zero.
       
  9985 				12) Removed support for Rev 1.0 Asic12.
       
  9986 				13) Check battery status before commencing write to CF Card - return with
       
  9987 				KErrBadPower if battery is low.
       
  9988 				14) CF Card driver now handles emergency power down.
       
  9989 				15) Pc Card power consumption - K::PcCardCurrentMilliAmps
       
  9990 				now implemented.
       
  9991 
       
  9992 4) Matthew
       
  9993 		1) User::SetHomeTime() has been changed to return a TInt. This will return KErrOverFlow on
       
  9994 		   Arm if the new time is out of range (past about 2068, before about 1932).
       
  9995 
       
  9996 		2) Sound driver: Added more click controlling code and implemented a fallback alarm.
       
  9997 
       
  9998 
       
  9999 Version 0.01.087
       
 10000 ================
       
 10001 (Made by Graham, 5th February 1997)
       
 10002 
       
 10003 This release is binary compatible with 086
       
 10004 
       
 10005 1) Graham
       
 10006 				1) Implemented dictaphone keys in WINS:
       
 10007 						F6 Dictaphone Play
       
 10008 						F7 Dictaphone Stop
       
 10009 						F8 Dictaphone Record
       
 10010 
       
 10011 				2) Begun the production of power supply
       
 10012 				   information from UserHal::SupplyInfo().
       
 10013 				   Expanded test code in t_power accordingly.
       
 10014 
       
 10015 				3) Added the P2 variant which will be used for green
       
 10016 				   machines. Changed the keyboard variant to include
       
 10017 				   the dictaphone keys.
       
 10018 
       
 10019 				4) Added PD and P2 variants to the releaseables.
       
 10020 
       
 10021 				5) Added the function UserSvr::TestBootSequence(). This
       
 10022 				   returns true if the machine is being booted by the test
       
 10023 				   department. The file server should call this function and
       
 10024 				   load etest.exe rather than ewsrv.exe if this is the case.
       
 10025 
       
 10026 				6) Added the function UserHal::ResetAutoSwitchOffTimer().
       
 10027 
       
 10028 
       
 10029 				7) Added the function UserSvr::AddEvent(). This enables user
       
 10030 				   code to add events into the event queue. Quite apart from
       
 10031 				   the numerous applications that this might spawn, it is
       
 10032 				   necessary for user side implementation of a VT100
       
 10033 				   console driver and handwriting recognition software.
       
 10034 
       
 10035 				8) Added the EKeyMenu, EKeyBacklightOn,
       
 10036 				   EKeyBacklightOff, and EKeyBacklightToggle keycodes
       
 10037 				   to all variants. On WINS the F1 key is used as the
       
 10038 				   MENU key.
       
 10039 
       
 10040 				9) Rationalised the MARM rom building system. This is
       
 10041 				   now controlled by a single ROM.OBY file which is
       
 10042 				   preprocessed with build and variant information.
       
 10043 
       
 10044 				10) Added backlight support. The backlight may be
       
 10045 					either timed or untimed. Should the timeout
       
 10046 					be reset whenever the machine is used?
       
 10047 
       
 10048 				11) Made pointer clicks configurable separately from
       
 10049 					key clicks.
       
 10050 
       
 10051 				12) Added screen clearing on switch on if a password
       
 10052 					is set.
       
 10053 
       
 10054 				13) Added UserHal functions for PointerSwitchesOn,
       
 10055 					CaseOpenSwitchesOn, and CaseCloseSwitchesOff.
       
 10056 					Grouped these, together with the
       
 10057 					AutoSwitchOffTime, AutoSwitchOffBehavior,
       
 10058 					BacklightTime, and BacklightBehavior information,
       
 10059 					into a new TOnOffInfo structure.
       
 10060 
       
 10061 				14) Implemented switch off on case close and switch
       
 10062 					on on case open on all platforms.
       
 10063 
       
 10064 				15) Simon has implemented a visual simulation on WINS
       
 10065 					of case closing. On WINS, F11 is also used to simulate
       
 10066 					both closing and opening the case. You will
       
 10067 					notice that, while the case is closed, keyboard
       
 10068 					and pointer events have no effect. This is to
       
 10069 					simulate the fact that normally you can't get to the
       
 10070 					keyboard or screen under these conditions.
       
 10071 
       
 10072 				16) Enhanced MARM switch on on pen down to take
       
 10073 					account of the Hal variable PointerSwitchesOn.
       
 10074 
       
 10075 				17) Solved Low battery bugs (HA-357, HA-362)
       
 10076 
       
 10077 2) Ann
       
 10078 		1) Test code changes:
       
 10079 
       
 10080 		i) Additional tests added to t_math tests for Pow10().  These show
       
 10081 		that in all but one case inexact string to real conversion is due
       
 10082 		to inexact calculation by Math::Pow10(). All tests in t_math check
       
 10083 		for as much accuracy as possible.
       
 10084 
       
 10085 		ii) t_float tests are now consistent between WINS and ARM.
       
 10086 
       
 10087 		iii) Whetstone benchmark tests added
       
 10088 
       
 10089 		iv) t_r96 casting tests now include identity tests (which check
       
 10090 		consistency with MSDEV in WINS).  Casting to TInt tests changed
       
 10091 		in line with changes to source code (ii below).
       
 10092 
       
 10093 		2) Source code changes:
       
 10094 
       
 10095 		i) TReal96::MultEq() altered to do one shift rather than preparing
       
 10096 		and then shifting to left.  This avoids losing bits which may be
       
 10097 		shifted off the end by preparation, but for which there is space in
       
 10098 		the final postition.
       
 10099 
       
 10100 		ii) TReal96::operator TInt() changed to round towards zero to
       
 10101 		comply with IEEE standard and Java requirements (also MSDEV).
       
 10102 
       
 10103 		iii) TReal96::Prepare() altered to check for zero sign or zero
       
 10104 		mantissa.  If so, preparation is not done.  Im the latter case,
       
 10105 		the mantissa is meaningless and in the second preparation would
       
 10106 		result in an infinite loop which does nothing.
       
 10107 
       
 10108 3) Morgan
       
 10109 		1) Implemented Kernel Faulting.
       
 10110 		2) Reorganised low memory to include the Registry just before the
       
 10111 				   Ram Drive.  This means that the Ram Drive is shoved up and down
       
 10112 				   in memory as the Registry changes size.
       
 10113 		   Added class TLowMemory to manage the Ram Drive and Registry
       
 10114 		   memory allocation and to provide information to F32 about the
       
 10115 		   drive's changing position.
       
 10116 		3) The Ram Drive now survives Warm Resets and Kernel Faults
       
 10117 		   Implemented CPersistantRegistry to do the same for the Registry.
       
 10118 		   T_RESET tests all this jiggery pokery on MARM.
       
 10119 		4) Added integer divide by zero exception to MARM
       
 10120 		5) Implemented a user side mini-loader for loading Dlls from ROM
       
 10121 		   when an explicit ROM path is provided.
       
 10122 				   eg. lib.Load(_L("MONKEY.DLL"), _L("Z:\\Animals\\Primates\\Hairy"));
       
 10123 		   This eliminates most of the time taken to load these Dlls.
       
 10124 
       
 10125 4) Jane
       
 10126 
       
 10127 		1) Fixed MMU bug which showed up in fairly obscure kernel growth/shrinkage
       
 10128 		   situations.
       
 10129 
       
 10130 		2) Optimised page allocator for faster kernel growth.
       
 10131 
       
 10132 		3) Added a routine to compact kernel pages when the machine is reset. This function
       
 10133 		   is not called yet, except in test code.
       
 10134 
       
 10135 		4) Made a TFindChunk::Open() actually add the chunk to the process address space (unless
       
 10136 		   it is a kernel chunk) so that the chunk can be read/written from another process.
       
 10137 
       
 10138 5) Matthew
       
 10139 		1) Fixed HA-355: added %*a and %*b to TTime::Format() which give
       
 10140 		   am/pm without a space.
       
 10141 
       
 10142 		2) Fixed HA-367: descriptor formatting now accepts things like
       
 10143 		   %-10f (default fill character space) and % 5F (no "+").
       
 10144 
       
 10145 		3) Internal changes to sound driver to reduce the amount of clicking.
       
 10146 		   Also fiddled with the volumes of DTMF dialling, so it should work now.
       
 10147 
       
 10148 
       
 10149 Version 0.01.086
       
 10150 ================
       
 10151 (Made by Matthew, 22nd January 1997)
       
 10152 
       
 10153 This release is binary compatible with 085
       
 10154 
       
 10155 1) Graham
       
 10156 				1) Renamed T_PARSE to T_TPARSE to eliminate the
       
 10157 				   conflict with the F32 test program of the same
       
 10158 				   name.
       
 10159 				2) Updated the TREALTIM test programs and fixed some
       
 10160 				   super thread bugs.
       
 10161 				3) Temporarily reintroduced page-based ROM mapping so
       
 10162 				   that debugging can be tested again.
       
 10163 				4) Fixed a bug in the user side event code which
       
 10164 				   prevented position information being extracted
       
 10165 				   from the new EPointerSwitchOn events.
       
 10166 				5) Fixed bugs in the ARM implementation of
       
 10167 				   TInt64A::MulTop() and changed it to return a TInt.
       
 10168 
       
 10169 2) Ann Windsor
       
 10170 		1) Removed KTReal96MaxExponent and KTReal96MinExponent from
       
 10171 		 e32math.h
       
 10172 
       
 10173 		2) Fixed bug HA-345: constants now correct to full precision.
       
 10174 
       
 10175 		3) In t_math test code, all approximate tests now use the
       
 10176 		function testApprox().  This tests that the relative error
       
 10177 		is within a specified tolerance.
       
 10178 
       
 10179 		4) Removed all approximate tests from t_r96 and t_r64.
       
 10180 
       
 10181 		5) In Pow10(), limits for second underflow check changed so
       
 10182 		1.0E-308 underflows as expected.
       
 10183 
       
 10184 		6) TInt64A::Multop() fixed to carry from insignificant parts
       
 10185 		and now returns a TInt to indicate whether the insignificant
       
 10186 		64 bits are zero or non-zero.  TInt64::MulTop() changed
       
 10187 		accordingly.
       
 10188 
       
 10189 		7) TReal96::DivEq() fixed to force rounding up where
       
 10190 		appropriate.  This results in division being up to
       
 10191 		5E-6 secs slower in the worst case.
       
 10192 
       
 10193 		8) SReal64 and SReal32 struct definitions added to um_std.h
       
 10194 		 and removed from other umath *.cpp files
       
 10195 
       
 10196 		9) TReal96::MultEq() fixed to force rounding up where appropriate.
       
 10197 
       
 10198 3) Alastair
       
 10199 		1) Fixed bugs in release versions of T_SEC.
       
 10200 
       
 10201 4) Simon
       
 10202 		1) Protected EventQ from access from WINS Window and Timer threads.
       
 10203 		   Fixes a few WINS Bugs related to AddEvent causing an Access
       
 10204 		   Violation.
       
 10205 
       
 10206 		2) Added some new shutdown code to allow System threads to continue
       
 10207 		   execution when the machine is off. This fixes bugs like "Program
       
 10208 		   does not exit when minimized" and other miscallaneous hangings
       
 10209 		   after a PowerDown.
       
 10210 
       
 10211 		3) Change to E32Initialize to allow WINC apps to call it more than
       
 10212 		   once.
       
 10213 
       
 10214 5) Matthew
       
 10215 		1) Stopped WINS from adding 1 hour for summer time when it's winter.
       
 10216 
       
 10217 		2) Fixed bug in CRegistry::SetContents().
       
 10218 
       
 10219 
       
 10220 Version 0.01.085
       
 10221 ================
       
 10222 (Made by Jal, 10th January 1997)
       
 10223 
       
 10224 1) Morgan
       
 10225 		1) Fixed OOM alloc heaven in CreateSession and RLoader::LoadLibrary
       
 10226 		2) Renamed kernel.exe to ekern.exe in the X86 obey file so device
       
 10227 		   drivers can link to it.
       
 10228 		3) Added iLanguage bitfield and iHardware members to TRomHeader.
       
 10229 		   Updated BOOTROM.BIN to match.
       
 10230 
       
 10231 2) Jane
       
 10232 		1) E32 Proposals
       
 10233 			a) Made CObjectCon::ValidateName -> User::ValidateName (static)
       
 10234 			b) Removed copy constructors for TPoint, TSize, TRect
       
 10235 			c) Made TLocale constructor exported, removed setting to 0 from TChar
       
 10236 			   constructor.
       
 10237 			d) Removed CDeltaTimerAlloc
       
 10238 			e) Americanised Capitalise.
       
 10239 			f) Make TDesC8::Length and TDesC16::Length inline
       
 10240 			g) Implemented Rog's amendment of David's User::Notify proposal: an RNotifier
       
 10241 			   class with the following member functions-
       
 10242 					TInt Connect();
       
 10243 					void Notify(const TDesC& aLine1,const TDesC& aLine2,const TDesC& aBut1,const TDesC& aBut2,TInt& aButtonVal,TRequestStatus& aStatus);
       
 10244 					TInt InfoPrint(const TDesC& aDes);
       
 10245 
       
 10246 		2) Bug fixes
       
 10247 			a) Removed unused User time/date functions
       
 10248 			b) Kept a list of thread relative threads within the thread so that they
       
 10249 			   can be closed properly when the thread dies.
       
 10250 			c) Alloced a bit in the DThread iFlags for whether the thread is the main one, this
       
 10251 			   fixed the bug with APPRUNs not dying.
       
 10252 			d) The priority of the NULL thread was incorrect in WINS - spotted by
       
 10253 			   David Batchelor, thanks.
       
 10254 			f) Added CServer::Restart() and fixed CServer::RunL()
       
 10255 			g) Fixed HA-55 kernel alloc heaven causes kernel re-entrancy
       
 10256 
       
 10257 3) SteveG
       
 10258 		1) Fixed bug in the battery recharger hanging when free'd. Added
       
 10259 		   iChargeTick.Cancel() into the device driver destructor.
       
 10260 
       
 10261 4) Geert
       
 10262 		1) Inlined various TDateTime, TTimeIntervalXxx and TTime members.
       
 10263 
       
 10264 		2) Integrated Bruce's TTime::Parse() service. (See the proposal and
       
 10265 		   spec in E32 Proposals for details.)
       
 10266 
       
 10267 		3) Removed all Time member functions duplicating services in TTime.
       
 10268 
       
 10269 		4) Removed initialisation code from TTimeIntervalXxx's and TTime's
       
 10270 		   default ctors. Default constructed instances of these classes now
       
 10271 		   have undefined, arbitrary values.
       
 10272 
       
 10273 5) Graham
       
 10274 				1) Added functionality to the text window server to allow raw
       
 10275 				   event information to be passed through to a client. The
       
 10276 				   primary user of this is the final test program which
       
 10277 				   needs some way of testing each raw keyboard element.
       
 10278 
       
 10279 				2) Updated the double multitasking kernel functions to give
       
 10280 				   handles wrt the kernel server rather than the device
       
 10281 				   driver client. Updated the real time test program and
       
 10282 				   device driver accordingly.
       
 10283 
       
 10284 				3) Made relocatable static data changes appropriate for
       
 10285 				   our real-time needs.
       
 10286 
       
 10287 				4) Fixed a further digitiser problem. There should
       
 10288 				   now be no machines which experience complete
       
 10289 				   digitiser failure apart from those with hardware
       
 10290 				   faults in this area.
       
 10291 
       
 10292 6) Alastair
       
 10293 				1) Added overloaded NewL function for Security class which
       
 10294 				   takes a piece of security data as a parameter so that a
       
 10295 				   CSecurityBase object can be constructed using security
       
 10296 				   data stored in a file for decryption purposes.
       
 10297 
       
 10298 				2) Removed ConstructL, EncryptL, DecryptL and
       
 10299 				   IsValid functions from CSecurityBase API.
       
 10300 
       
 10301 				3) Added NewEncryptL and NewDecryptL functions to
       
 10302 				   CSecurityBase API so that objects for handling encryption
       
 10303 				   sessions and objects for handling decryption sessions can
       
 10304 				   be created.  The APIs for these object classes -
       
 10305 				   CSecurityEncryptBase and CSecurityDecryptBase - have been
       
 10306 				   added to E32BASE.H.
       
 10307 				   NewEncryptL and NewDecryptL take an initialisation
       
 10308 				   vector as a parameter to allow for pluggability with
       
 10309 				   more sophisticated encryption methods.
       
 10310 
       
 10311 				4) Written a new UB_SEC.CPP to cater for the above
       
 10312 				   changes.  The current encryption scheme produces
       
 10313 				   encrypted data in multiples of 32 bytes.
       
 10314 
       
 10315 				5) Rewritten T_SEC.CPP to test security changes.
       
 10316 
       
 10317 7) Matthew
       
 10318 		1) Changed set and free tls functions from exec to sv calls.
       
 10319 
       
 10320 		2) Fixed alloc heaven in change notifier, and changed notifier so that
       
 10321 		   you can only logon once to each notifier, so that the kernel's notify
       
 10322 		   function can be called from exec functions. This has meant API changes,
       
 10323 		   and the RUndertaker API has also been changed - the parameter has been
       
 10324 		   removed from LogonCancel - so the two are more similar.
       
 10325 
       
 10326 		3) Added iMaxVolume capability to sound driver, now the volume-by-value
       
 10327 		   takes a value from 0 to iMaxVolume, instead of 0 to 100.
       
 10328 
       
 10329 		4) Removed Time::IsValidDate().
       
 10330 
       
 10331 8) Pete
       
 10332 		1) Added custom and variant DLL for rack D h/w.
       
 10333 
       
 10334 		2) Moved sections of code relating to the Pc Card Controller h/w out of
       
 10335 		   the Kernel DLL and down into the Variant DLL.
       
 10336 
       
 10337 		3) Added the function UserHal::DriveInfo() which
       
 10338 		   returns a TInfoName for each local drive and Pc Card socket as well
       
 10339 		   as the total number of valid drives and socketss on a given variant.
       
 10340 
       
 10341 		4) Various changes to the member functions of UserPcCardCntrl
       
 10342 		   class.
       
 10343 
       
 10344 9) Ann Windsor - CHANGES TO MATHS SOURCE CODE
       
 10345 
       
 10346 I e32\inc\e32math.h
       
 10347 -------------------
       
 10348 1. Constants KTReal32MinExponent and KTReal32MinExponent, KTReal96MaxExponent,
       
 10349 KTReal96MinExponent, KTReal96ExponentBigBad and KTReal96ExponentSmallBad added.
       
 10350 
       
 10351 2. Functions added to UM_R96.CPP added to TReal96 class
       
 10352 
       
 10353 II e32\inc\e32std.h
       
 10354 -------------------
       
 10355 1. Constant KErrDivideByZero added.
       
 10356 
       
 10357 2. New constants defined for flags in TRealFormat type:
       
 10358 	KExtraSpaceForSign=0x40000000
       
 10359 	KAllow ThreeDigitExp=0x20000000
       
 10360 	KUseSigFigs=0x10000000
       
 10361 	KDoNotUseTriads=0x08000000
       
 10362 	KGeneralLimit=0x04000000
       
 10363 	KRealFormatTypeFlagsMask=0x7c000000
       
 10364 	KRealFormatTypesMask=0x0000007
       
 10365 
       
 10366 3. RealFormatType no longer enum; changed to constant TInts
       
 10367 	KRealFormatFixed=1
       
 10368 	KRealFormatExponent=2
       
 10369 	KRealFormatGeneral=3
       
 10370 and two new types added:
       
 10371 	KRealFormatNoExponent=4
       
 10372 	KRealFormatCalculator=5
       
 10373 
       
 10374 4. iDecimalPlaces member of TRealFormat name changed to iPlaces because used
       
 10375 for decimal places or significant figures as appropriate.
       
 10376 
       
 10377 5. TLex8 member function ScndigAfterPoint() added.
       
 10378 
       
 10379 
       
 10380 III e32\ucdt\uc_des.cpp
       
 10381 ----------------------
       
 10382 1. Changed in line with changes to e32std.h above.
       
 10383 
       
 10384 2. AppendFormatList() altered to allow three-digit exponents in E,e (exponent)
       
 10385 and G,g, so Printf %E,e,G and g all display numbers to the maximum range.
       
 10386 
       
 10387 
       
 10388 IV e32\umath\um_dtor.cpp
       
 10389 ------------------------
       
 10390 1. Changed TLex8::Val() appropriately to deal with the full range of values.  This
       
 10391 includes doing multiplications in TReal96's so that errors can be detected.
       
 10392 
       
 10393 2. TLex8::ScndigAfterPoint() added to do conversion from decimal after point, so that
       
 10394 trailing zeros are not included.  This ensures that e.g. 0.2900 and 0.29 have the same
       
 10395 binary representation.
       
 10396 
       
 10397 
       
 10398 V e32\umath\um_pow.cpp
       
 10399 -----------------------
       
 10400 1. Changed to check for aSrc being ±1.  If so, sets result appropriately to ensure exact
       
 10401 and to save running algorithm.
       
 10402 
       
 10403 2. Bug found and fixed: Int() being used for a number potentially larger than 32767.
       
 10404 Altered to return an error if Int() reports an error, i.e. if the input has an absolute
       
 10405 value larger than 32767 (a return value larger than 32767 would lead to an error later in
       
 10406 the function anyway).  This ensures that results over and underflow as expected.
       
 10407 
       
 10408 3. Bug found and fixed: reduce() set high part of f to 0 rather than leaving it unchanged.
       
 10409 This fixes the bug reported in B4 problem report no HA-207: overflows are now reported as
       
 10410 expected.
       
 10411 
       
 10412 
       
 10413 VI e32\umath\um_pow10.cpp
       
 10414 -------------------------
       
 10415 1. Changed to handle the full range of TReals rather than up to 1e±100.
       
 10416 
       
 10417 
       
 10418 VII e32\umath\um_r96.cpp
       
 10419 ------------------------
       
 10420 1. Set() checks that exponent does not exceed maximum (KTReal64ExponentBigBad/
       
 10421 KTReal64ExponentBigBad) and is not less than minimum (KTReal32ExponentSmallBad/
       
 10422 KTReal64ExponentSmallBad). If so, KErrArgument is returned.
       
 10423 
       
 10424 2. GetTReal()
       
 10425 i) In checking for underflow, value against which check is made changed from
       
 10426 -KTReal32MaxExponent/-KTReal64MaxExponent to KTReal32MinExponent/KTReal64MinExponent.
       
 10427 ii) Rounding has been implemented for TReal32s so that when a TReal96 mantissa is
       
 10428 converted to a TReal32 it is rounded to the nearest value using all bits available,
       
 10429 rather than just being truncated.
       
 10430 
       
 10431 3. Casting to a TInt from a TReal96 changed to check for zero by using sign and also to
       
 10432 round to nearest, rather than always rounding down.
       
 10433 
       
 10434 4. Arithmetic
       
 10435 i) Added functions AddEq(), SubEq(), MultEq() and DivEq() which perform the operations
       
 10436 +=(), -=(), *=() and /=() respectively, as these operator functions did previously, but
       
 10437 reporting an error constant, rather than panicking.
       
 10438 ii) Similarly to i), functions Add(), Sub(), Mult() and Div() have been added as the
       
 10439 non-panicking variants of operator +(), -(), *() and /().  The latter functions panic on
       
 10440 an error as described in ii).  The result is written to an input target variable.
       
 10441 iii) operator +=(), -=(), *=() and /=() perform arithmetic operations (using AddEq(),
       
 10442 SubEq(), MultEq() and DivEq() respectively) and either panic (when unsuccessful), leaving
       
 10443 the initial arguments unchanged, or otherwise return the result in *this.
       
 10444 iv) Added function CheckOverUnderflow(), to be used in AddEq(), SubEq(), MultEq() and
       
 10445 DivEq(), to check for overflow or underflow in cases where it may occur by normalising
       
 10446 the result and checking the exponent.
       
 10447 v) Added function PanicOverUnderflowDividebyZero() which is used in operator +=(), -=(),
       
 10448 *=() and /=() to panic if an error is returned by AddEq(), SubEq(), MultEq() or DivEq()
       
 10449 respectively.
       
 10450 vi) Addition operations (in AddEq()) improved to eliminate loops which change exponent by
       
 10451 1 and shift the mantissa by 1 place on each loop to make the exponents equal before
       
 10452 addition takes place, instead altering the exponent and shifting as appropriate in one
       
 10453 step.
       
 10454 vii) Fixed bug in AddEq() so that it shifts the mantissa of the bigger number right by
       
 10455 one.  This prevents failure when subtracting numbers of the same sign (or adding numbers
       
 10456 of the opposite sign) when the ms bit needs to be carried down (and hence only two bits
       
 10457 are shifted down into the extended part when preparing the result) and the last hex digit
       
 10458 of the result is 4 when prepared.
       
 10459 viii) In DivEq(), a new error KErrDivideByZero has been introduced. Also reports
       
 10460 KErrArgument if 0/0 (invalid operation).
       
 10461 
       
 10462 5. Changed Normalise() to round on last three bits to nearest value, rounding to value
       
 10463 with l.s. bit zero (even) if two values are equally near to be consistent with MSDev and
       
 10464 to minimise propagation of rounding errors in general.
       
 10465 
       
 10466 6. To be consistent with MSDev, increment and decrement operators should normalise after
       
 10467 each operation.  However, this doubles the time and ultimately decreases accuracy, so
       
 10468 has not been adopted.
       
 10469 
       
 10470 
       
 10471 VIII e32\umath\um_rtod.cpp
       
 10472 --------------------------
       
 10473 1. fDigLim() changed to handle all exponents between -1022 and 1025, i.e. all TReal64s.
       
 10474 
       
 10475 2. All do...() functions now take TInt flags as one of their parameters to enable (or
       
 10476 disable) extra space for sign, three-digit exponents, significant figures rather than
       
 10477 decimal places, triads and linited accuracy of digbuf.
       
 10478 
       
 10479 3. In addtition to the flags above, an internal flag determining whether the digbuf needs
       
 10480 rounding has been added.
       
 10481 
       
 10482 4. doExponent() altered so it can be used both directly and by doGeneral() and
       
 10483 doCalculator().  In calculator mode, trailing zeros are eliminated.  Also uses three-
       
 10484 digit exponents if allowed by flag if necesary.
       
 10485 
       
 10486 5. doFixed() altered so that a space is left for a potential sign if a flag is set.  This
       
 10487 allows positive and negative numbers of the same exponent to be of the same accuracy.
       
 10488 
       
 10489 6. doGeneral() altered in line with alterations to doFixed() and doExponent().
       
 10490 
       
 10491 7. doNoExponent() new function added to deal with calculator representation which does
       
 10492 not use exponents, i.e. numbers to a maximum number of significant figures.  This
       
 10493 function is similar to doFixed(), other than it does not pad with zeros and hence does
       
 10494 not necessarily have a decimal point or deciaml places.  If the triad length is non-zero
       
 10495 then triads are allowed by default (but can of course be disabled by a flag).  An
       
 10496 overflow error is reported if the number is too big to fit in the maximum significant
       
 10497 figures and an underflow if it is too small for any significant digits to appear i.e.
       
 10498 apparently 0.  If the number does not fit, i.e. not enough space for sign, point or triad
       
 10499 separators, then a general error is reported.
       
 10500 
       
 10501 8. doCalculator() new function added which operates as a conventional calculator would,
       
 10502 i.e. using non-exponential representation as far as possible and otherwise exponential
       
 10503 representation.  The number of figures in the display is limited by the maximum
       
 10504 significant figures.  This function will report a general error if there is insufficient
       
 10505 space availble to include a sign, decimal point and exponent, as well as the figures,
       
 10506 EVEN IF THEY ARE NOT REQUIRED.  In this way it operates as a conventional calculator.
       
 10507 doCalculator() uses either doNoExponent() or doExponent() (in calculator mode, see 4.)
       
 10508 as necessary.
       
 10509 
       
 10510 9. rtob() has been altered in line with the above changes.
       
 10511 Also it now checks that the numspace is >0, otherwise reporting a general error. iType is
       
 10512 now used to take both the user-specified flags and type.  If no type or flags are
       
 10513 specified then it leaves.  Flags are also set as necessary for the various modes (in all
       
 10514 modes, rounding is needed):
       
 10515 	fixed - does not use significant figures
       
 10516 	exponent - does not use significant figures (when accessed directly rather than
       
 10517 	through calculator)
       
 10518 	general - does not use significant figures or triads
       
 10519 	no exponent - uses significant figures
       
 10520 	calculator - uses significant figures and no triads.
       
 10521 
       
 10522 
       
 10523 IX e32\umath\um_sin.cpp
       
 10524 -----------------------
       
 10525 1. sinx() changed to ensure than sin of a multiple of pi and cos of an odd multiple of pi/2
       
 10526 give exactly zero.
       
 10527 
       
 10528 
       
 10529 X e32\umath\um_std.h
       
 10530 ---------------------
       
 10531 1. EMathUnknownPanic added to TMathPanic to deal with unknown errors.
       
 10532 
       
 10533 
       
 10534 XI e32\umath\um_tan.cpp
       
 10535 -----------------------
       
 10536 1. Tan() changed to ensure that tan of a multiple of pi gives exactly zero and tan of an
       
 10537 odd multiple of pi/2 reports an overflow error.
       
 10538 
       
 10539 
       
 10540 XII e32\umath\um_utl.cpp
       
 10541 ------------------------
       
 10542 1. Poly() changed to use TReal96s.
       
 10543 
       
 10544 
       
 10545 XIII e32\upmarm\up_gcc.cpp
       
 10546 --------------------------
       
 10547 1. Arithmetic now raises an exception if an error is returned by the TReal96 non-
       
 10548 panicking arithmetic variants.
       
 10549 
       
 10550 
       
 10551 XIV e32\upwins\up_i64.cpp
       
 10552 -------------------------
       
 10553 1. Bug found in MulTop() - the two least significant words are never multiplied together
       
 10554 and hence the possible carry from this part into the ls word of the result is ignored.
       
 10555 This part may also need to be used for rounding purposes.
       
 10556 
       
 10557 
       
 10558 CHANGES TO MATHS TEST CODE
       
 10559 --------------------------
       
 10560 I T_FLOAT
       
 10561 ---------
       
 10562 1. Altered and increased appropriately to test altered and new cases due to changes
       
 10563 in the above.  Also divided into two modules containing data only (FLTDATA1.CPP and
       
 10564 FLTDATA2.CPP) and a header file containing class definitions because the amount
       
 10565 of initialised data was too large for the GCC compiler.
       
 10566 
       
 10567 2. Altered and increased appropriately to test fully string to real conversion to
       
 10568 full range. N.B. THESE TESTS ARE CURRENTLY APPROXIMATE DUE TO AN UNRESOLVED BUG.
       
 10569 
       
 10570 
       
 10571 II T_GEN and T_GEN32
       
 10572 --------------------
       
 10573 1. Added to generate files for use by T_R64 and T_R32. These are for testing in
       
 10574 ARM, to see that the GCC and MSDEV compiler give the same results.
       
 10575 T_GEN also generates special values needed for the generation of these files and
       
 10576 for T_R32 and T_R64 test code.
       
 10577 
       
 10578 
       
 10579 III T_MATH
       
 10580 ----------
       
 10581 1. In the light of changes made to sin, cos, tan and power functions various tests have
       
 10582 been added or updated:
       
 10583 i) tests exact results are given for: zero to a power, any number to power zero, ±1 to
       
 10584 any power, sin(n*pi), cos((2n+1)*pi/2) and tan(n*pi) (where n is an integer).
       
 10585 ii) tests overflows occur as expected for Math::Pow()
       
 10586 iii) tests tan((2n+1)*pi/2) overflows.
       
 10587 
       
 10588 2. More comprehensive tests of trig functions have been included to test multiples of
       
 10589 "common" values: pi/6, pi/4, pi/3, pi/2 and pi (in addition to test for exact values
       
 10590 above).
       
 10591 
       
 10592 3. Comprehensive testing of Math::Cos() (not just Sin() ) have been added.
       
 10593 
       
 10594 4. Added test to check reduce() is working correctly.
       
 10595 
       
 10596 
       
 10597 IV T_R64 and T_R32
       
 10598 -------------------
       
 10599 1. Special values generated by T_GEN and T_GEN32 used in all tests.
       
 10600 
       
 10601 2. Casting tests for TReal32s now use TReal96s. (A special test following this shows the
       
 10602 occurrence of an (as yet unresolved) bug.)  Tests have also been added to be used when
       
 10603 exception handling is fully implemented.
       
 10604 
       
 10605 3. All tests improved and made comprehensive.
       
 10606 
       
 10607 4. Further tests added using the files generated as described in II.
       
 10608 
       
 10609 5. T_R64.CPP and T_R32.CPP have also been split so their data is in a separate file
       
 10610 to avoid duplication of code in T_GEN and T_GEN32.
       
 10611 
       
 10612 6. Arithmetic tests all test for equality rather than using BitApprox, with cases
       
 10613 which fail being removed until bugs are fixed so exact results are obtained in all cases.
       
 10614 With changes to um_r96.cpp explained in VII 2. and 4. above, T_R32 tests are now all
       
 10615 exact.
       
 10616 
       
 10617 7. Test code has been included (for use in debug mode only) to test that exceptions
       
 10618 are raised correctly by the up_gcc.cpp code (which has been copied into separate files -
       
 10619 emgcc32.cpp and emgcc64.cpp - which may be called by these tests).
       
 10620 
       
 10621 
       
 10622 V T_R96
       
 10623 --------
       
 10624 1. Special values for use in the test code have been initialised and used in the tests
       
 10625 where appropriate.
       
 10626 
       
 10627 2. Constructors of TReal96s from TInts, TReal32s and TReal64s tested fully, including
       
 10628 tests that attempting to construct from values with "bad" exponents (i.e. exponents too
       
 10629 big or too small) results in a return of KErrArgument.
       
 10630 
       
 10631 3. Test of preparing a denormal checks that the value is not already prepared. Also added
       
 10632 test of preparing of an unprepared value.
       
 10633 
       
 10634 4. Arithmetic tests
       
 10635 i) Arithmetic tests all test for equality rather than using BitApprox, with cases
       
 10636 which fail being removed until bugs are fixed so exact results are obtained in all cases.
       
 10637 ii) As a result of the bug fixed in operator/=() by Jal a test of division of denormals
       
 10638 has been added.
       
 10639 iii) Extra tests have been added to test the new member functions AddEq(), SubEq(),
       
 10640 MultEq() and DivEq() which perform arithmetic operations and report an error rather than
       
 10641 panicking if overflow, underflow or division by zero errors occur. The panicking-variants
       
 10642 are also tested to be sure panics occur as expected (to be run in debug only).
       
 10643 
       
 10644 5. Tests of GetTReal(), casting functions unary operators, increment and decrement
       
 10645 operators and equalities and inequalities have been made more comprehensive and include
       
 10646 tests for overflow, underflow and total loss of precision errors where appropriate.
       
 10647 
       
 10648 6. Tests for SetExp() and SetSign() and also for assignment operators added.
       
 10649 
       
 10650 7. Increment/decrement tests now include normalising to get results consistent with
       
 10651 Microsoft.
       
 10652 
       
 10653 Version 0.01.082
       
 10654 ================
       
 10655 (Made by Morgan, 20th December 1996)
       
 10656 
       
 10657 This release is binary compatible with 081
       
 10658 
       
 10659 1) Morgan
       
 10660 		1) Fixed a bug in the SWI vector code on the ARM that was calling
       
 10661 		   dispatchDfcAndReschedule incorrectly.
       
 10662 
       
 10663 2) Jane
       
 10664 		1) Changed the base addresses of WINS dlls as suggested by Martin Budden.
       
 10665 
       
 10666 		2) Fixed bug in CObjectIx where creating many objects could return a null handle.
       
 10667 
       
 10668 		3) Fixed Daylight saving bug in WINS
       
 10669 
       
 10670 3) Graham
       
 10671 				1) Modified bootup code so that it reads the keyboard to
       
 10672 				   set up ROM memory configuration. This will be used with
       
 10673 				   the masked ROM to check paged mode rom access
       
 10674 
       
 10675 
       
 10676 Version 0.01.081
       
 10677 ================
       
 10678 (Made by Matthew, 17th December 1996)
       
 10679 
       
 10680 This release is binary compatible with 080
       
 10681 
       
 10682 1) Matthew
       
 10683 		1) Fixed dereferencing-zero bug in CObjectCon and CObjectConIx destructors.
       
 10684 
       
 10685 		2) Changed EDLL WINS debug info to C7 format.
       
 10686 
       
 10687 
       
 10688 Version 0.01.080
       
 10689 ================
       
 10690 (Made by Jane, 16th December 1996)
       
 10691 
       
 10692 This release is binary compatible with 079
       
 10693 
       
 10694 1) Morgan
       
 10695 		1) Timers abort on power up and locale changes to universal
       
 10696 		   time, and daylight saving.
       
 10697 		2) Fixed HA-307
       
 10698 
       
 10699 2) Matthew
       
 10700 		1) Speeded up several CObjectIx, CObjectCon and CObjectConIx
       
 10701 		   functions by using pointers into arrays instead of operator[].
       
 10702 
       
 10703 3) Jane
       
 10704 		1) Added support for real time threads. These are supervisor mode threads
       
 10705 		   whose real time response is greatly improved over ordinary user threads,
       
 10706 		   as it is possible for them to interrupt the supervisor server and
       
 10707 		   non-blocked slow exec calls.
       
 10708 		   Wrote the WINS and X86 implementations of the above, and a test driver
       
 10709 		   and test program. (D_RTIM and T_RTIM).
       
 10710 
       
 10711 4) Graham
       
 10712 		1) Added ARM implementation of real time threads.
       
 10713 
       
 10714 Version 0.01.079
       
 10715 ================
       
 10716 (Made by Graham, 10th December 1996)
       
 10717 
       
 10718 This release is binary compatible with 078
       
 10719 
       
 10720 1) Graham
       
 10721 		1) Changed the bootstrap to map the ROM using ARM MMU 1Mb
       
 10722 		   sections. This reduces the number of TLB entries used
       
 10723 		   by the ROM and yields a 4% speed increase on our inter-
       
 10724 		   process message passing test (T_PROC1).
       
 10725 
       
 10726 		2) Fixed MachineInfo problems on WINS (HA-220, HA-303).
       
 10727 
       
 10728 		3) Patched up some Hal information services.
       
 10729 
       
 10730 		4) Experimentally added clicks when the digitiser is touched.
       
 10731 
       
 10732 2) Matthew
       
 10733 		1) Checked all PP::, KK::, Plat:: Panics and Faults. Some
       
 10734 		have been changed to panic the calling thread, instead of
       
 10735 		the kernel. This fixes bugs like HA-276 (Leave without TRAP).
       
 10736 
       
 10737 
       
 10738 Version 0.01.078
       
 10739 ================
       
 10740 (Made by Graham, 7th December 1996)
       
 10741 
       
 10742 This release is binary compatible with 077
       
 10743 
       
 10744 1) Simon
       
 10745 		1) Changed WINC over to use some WINS components, allowing
       
 10746 		   Store and other components to use WINS librraies for WINC
       
 10747 		   development.
       
 10748 
       
 10749 		   WINC now conists of a EKERN ECONS and EEXE but all other
       
 10750 		   components are taken from the WINS build. The BLD.CMD has
       
 10751 		   been changed to reflect this new building model.
       
 10752 
       
 10753 		2) WINS EUSER added WINC initialisation functions.
       
 10754 
       
 10755 		3) Removed unecessary files from UPWINC
       
 10756 
       
 10757 2) Graham
       
 10758 		1) Implemented User::MachineConfiguration() and
       
 10759 		   User::SetMachineConfiguration(). These may be used to
       
 10760 		   save and restore the registry and O/S information such as
       
 10761 		   whether key clicks are enabled or sound volume is loud etc.
       
 10762 		   It is hoped that this information will now be standardised
       
 10763 		   in such a way that anyone moving from one EPOC/32 machine
       
 10764 		   to another will be able to transfer their machine's
       
 10765 		   'personality' in one go.
       
 10766 
       
 10767 		2) Moved P::DebugMask() to Plat::DebugMask() as it was being
       
 10768 		   exported.
       
 10769 
       
 10770 3) Pete
       
 10771 	1) PC Cards are now powered down automatically after 5
       
 10772 	   seconds if the card is left both un-configured and with no memory
       
 10773 	   allocated.
       
 10774 	2) Fixed a problem were a CF Card was incorrectly returning
       
 10775 	   'Not supported'  on each subsequent access following the
       
 10776 	   situation were a read from the card was interrupted with a media
       
 10777 	   change. (Unfortunatley interrupted writes still cause the file server
       
 10778 	   to panic).
       
 10779 	3) Full 16bit access of CF cards (and therefore support of Hitachi
       
 10780 	   cards) now takes place when a Rev2 Etna is detected.
       
 10781 	4) General PC Card related class renameing. Also, PC Card
       
 10782 	   configuration info. has now been moved from the EKERN into the
       
 10783 	   appropriate custom DLL for ARM builds.
       
 10784 
       
 10785 
       
 10786 Version 0.01.077
       
 10787 ================
       
 10788 (Made by Graham, 6th December 1996)
       
 10789 
       
 10790 1) SteveG
       
 10791 	1) Fixed bug in battery charging LDD which hung when free'ing the
       
 10792 	   device driver. Removed debug information which was being
       
 10793 	   output to the comms port while charging was in progress
       
 10794 
       
 10795 2) Morgan
       
 10796 		1) Altered the MARM MMU PTE permissions lookup table to enable
       
 10797 		   write buffers for user data.  Fixes HA-300 (Speed).
       
 10798 		2) User::Abort now raises EExcKill exception.
       
 10799 
       
 10800 3) Jane
       
 10801 		1) Fixed Lane's shared chunk growing problem
       
 10802 
       
 10803 4) Graham
       
 10804 		1) Fixed a versioning problem with the text window notifier
       
 10805 		   server.
       
 10806 
       
 10807 Version 0.01.076
       
 10808 ================
       
 10809 (Made by Graham, December 3rd 1996)
       
 10810 
       
 10811 This release is binary compatible with 075
       
 10812 
       
 10813 1) Graham
       
 10814 		1) Added Eiger port control code which avoids output bits
       
 10815 		   reading erroneously when they are connected to circuits
       
 10816 		   with large rise or decay times.
       
 10817 
       
 10818 		2) Added Minor Version 4 to the E32 version number to reflect
       
 10819 		   the fact that this is a B4 release.
       
 10820 
       
 10821 		3) Fixed a problem in the media driver version numbering.
       
 10822 
       
 10823 2) SteveG
       
 10824 		1) Preliminary release of the battery recharging LDD, DARCP1.LDD,
       
 10825 		   for tests by the hardware dept. This is only for the real
       
 10826 		   Proteas.
       
 10827 
       
 10828 	   The LDD offers the following functions:
       
 10829 
       
 10830 	   RDevNicads::Open() to open a channel
       
 10831 
       
 10832 	   RDevNicads::Type(TInt& type) to get the charge type in progress
       
 10833 	   This will be EChargeNone, EChargeFast or EChargeTrickle
       
 10834 
       
 10835 	   RDevNicads::SetChargeType(TInt aType) to set the type
       
 10836 	   The type should be EChargeNone, EChargeFast or EChargeTrickle.
       
 10837 	   Returns an error if it is not possible to start the requested
       
 10838 	   charging method.
       
 10839 
       
 10840 	   RDevNicads::Close()
       
 10841 
       
 10842 	   The functions are defined in D32RCHG.H and D32RCHG.INL
       
 10843 
       
 10844 	   Loading the device driver using LoadLogicalDevice will start
       
 10845 	   the charging if a rechargeable battery pack is fitted. The mains
       
 10846 	   LED will flash while fast charging is in process. Once fully charged,
       
 10847 	   the battery pack is trickle charged while mains power is applied.
       
 10848 	   This can be overridden using the above functions.
       
 10849 
       
 10850 3) Morgan
       
 10851 		1) Fixed WINS so that it reports the same physical screen
       
 10852 		   size as it did before .INI-file-controlled fascia bitmaps
       
 10853 		   were introduced.
       
 10854 
       
 10855 Version 0.01.075
       
 10856 ================
       
 10857 (Made by Graham, November 28th 1996)
       
 10858 
       
 10859 This release is not binary compatible with any previous version.
       
 10860 
       
 10861 1) SteveG
       
 10862 		a) Wrote the device driver for the serial E2PROM. This is currently
       
 10863 		   only for P1 Proteas, as the racks do not have the device fitted
       
 10864 
       
 10865 		   The device driver is DAE2P1.LDD and provides all the commands
       
 10866 		   necessary for writing, reading, protecting and locking the
       
 10867 		   sixteen 16-bit registers in the E2PROM chip
       
 10868 
       
 10869 		b) Fixed bug in ARM Mem::Compare with non word aligned buffers >=16
       
 10870 
       
 10871 		c) Implemented keyboard repeats in the E32 text WServ
       
 10872 
       
 10873 		d) Added an EActive event, which is sent in WINS when the focus
       
 10874 		   is returned to the WINS window. The EInactive event is still
       
 10875 		   sent when the WINS window loses focus
       
 10876 
       
 10877 		e) Added an EUpdateModifers event, which is sent whenever the
       
 10878 		   WINS window gains focus. This event includes the current
       
 10879 		   state of the toggling modifier keys, and should be passed
       
 10880 		   on to the keyboard translator to update its modifier states
       
 10881 		   using KeyTranslator->UpdateModifiers(TInt). The modifiers
       
 10882 		   are extracted from the event using TInt TRawEvent::Modifiers();
       
 10883 		   E32 text WServ modified accordingly. This event is sent before
       
 10884 	   the EActive event. This event will also be sent when booting
       
 10885 	   up WINS, so the caps/num lock states will be correct at bootup.
       
 10886 	   KeyTranslator->UpdateModifiers() also resets the state of the
       
 10887 	   key translator to normal
       
 10888 
       
 10889 		f) Implemented keyboard clicks, the following UserHal functions
       
 10890 		   can be used to set the clicks:
       
 10891 
       
 10892 		   to set/read the volume:
       
 10893 				   UserHal::SetKeyClickLoud(TBool)
       
 10894 				   UserHal::KeyClickLoud(TBool&)
       
 10895 
       
 10896 		   to set/read if clicks are enabled:
       
 10897 				   UserHal::SetKeyClickEnabled(TBool);
       
 10898 				   UserHal::KeyClickEnabled(TBool&);
       
 10899 
       
 10900 		   to override the system on/off setting, forcing clicks off
       
 10901 		   (will be used by WServ to turn off clicks when an application
       
 10902 		   requests to disable clicks while in foreground):
       
 10903 				   UserHal::SetKeyClickOverriden(TBool)
       
 10904 				   UserHal::KeyClickOverriden(TBool&)
       
 10905 		   (This function could do with a better name...:-)
       
 10906 
       
 10907 	   Using SetKeyClickOverriden(ETrue) will disable key clicks
       
 10908 	   regardless of the system setting. The system setting can
       
 10909 	   still be changed while overriden.
       
 10910 
       
 10911 		   Note that key clicks will not work in WINS as they produced
       
 10912 		   more of a key fart than a click. The functionality is there,
       
 10913 		   and if a way of producing a suitable click is found, will be
       
 10914 		   added in a later release (function P::KeyClick() in KP_UTL.CPP)
       
 10915 
       
 10916 		g) Fixed problem with CTimers going off 1 second early - this
       
 10917 		   solves the problem of alarms going off a second or so early
       
 10918 		   in TimeW app on MARM. There still appear to be problems
       
 10919 		   in WINS, which may lie elsewhere...
       
 10920 
       
 10921 		   TSecondLink::At() now converts the absolute time you specify
       
 10922 		   to seconds since year2000, and uses this to work out the
       
 10923 		   delta value to put into the queue. This is more accurate
       
 10924 		   since the time that the queue was last ticked over is also
       
 10925 		   stored in seconds since year2000. Previously the value added
       
 10926 		   to the delta queue was the difference between the system time
       
 10927 		   and the time you supplied, which could be upto a second out
       
 10928 		   if the microseconds part of the system time was non-zero
       
 10929 		   which would be 99.9999% of the time
       
 10930 
       
 10931 2) Morgan,
       
 10932 	a) Added support for a WINS system ini file allowing some system defaults
       
 10933 		   to be setup.  The .INI file lives at \EPOC32\DATA\SYSTEM.INI
       
 10934 	   and allows you to change the screen dimentions, fascia and the
       
 10935 		   LED arrangement.
       
 10936 		   The defaults are
       
 10937 		ScreenWidth 640
       
 10938 		ScreenHeight 240
       
 10939 		ScreenOffsetX 123
       
 10940 		ScreenOffsetY 53
       
 10941 		FasciaBitmap \epoc32\data\Fascia.bmp
       
 10942 		LedOffsetX 30
       
 10943 		LedOffsetY 26
       
 10944 		LedSize 14
       
 10945 		LedGap 5
       
 10946 		LedArrangeHorizontally
       
 10947 		#LedArrangeVertically
       
 10948 
       
 10949 	b) Added exception support for MX86, MARM, and WINS:
       
 10950 
       
 10951 		   TExceptionHandler* RThread::ExceptionHandler() const;
       
 10952 	   TInt RThread::SetExceptionHandler(TExceptionHandler* aHandler,TUint32 aMask);
       
 10953 	   void RThread::ModifyExceptionMask(TUint32 aClearMask, TUint32 aSetMask);
       
 10954 	   TInt RThread::RaiseException(TExcType aType);
       
 10955 	   TBool RThread::IsExceptionHandled(TExcType aType);
       
 10956 
       
 10957 		   If a thread has no handler for an exception it is passed onto the
       
 10958 		   kernel for handling.  The default action is to panic the offending
       
 10959 		   thread.  Unhandled exceptions caused by RThread::RaiseException()
       
 10960 		   force the thread to exit via User::Exit().
       
 10961 		   Otherwise handlers are executed in the context of the thread on
       
 10962 		   which the exception is raised and control returned to the
       
 10963 		   point of the exception.
       
 10964 
       
 10965 		   When debugging under WINS, MSDEV will intercept the exception before
       
 10966 		   the handler has a chance to execute.
       
 10967 
       
 10968 	c) Fixed HA-258
       
 10969 
       
 10970 	d) Added Uids (and -type-safe-link for ROMBUILD) to the Base components under ARM.
       
 10971 	   The Uids are #defined in \Epoc32\include\E32UID.H and \e32\kbarm\E32UID.IBY.
       
 10972 
       
 10973 	e) Added an iTextSize to TLoaderInfo and TRomImageHeader for GDB
       
 10974 
       
 10975 	f) Implemented Dll::GlobalAlloc, Dll::GlobalAllocated, Dll::GlobalRead, and
       
 10976 	   Dll::GlobalWrite.
       
 10977 
       
 10978 3) Matthew
       
 10979 	a) Fixed HA-208 (IsPresent and IsValid in TUidType should return TBool).
       
 10980 	   Also changed loads of other Is*() functions to return a TBool instead
       
 10981 	   of a TInt. A few Is*() functions which returned KErr values have been
       
 10982 	   renamed:
       
 10983 
       
 10984 			CObjectCon::IsValidName -> ValidateName
       
 10985 			CObjectCon::IsUniqueFullName -> CheckUniqueName
       
 10986 			DComm::IsValid -> Validate
       
 10987 
       
 10988 	b) Fixed HA-196 (inline TLocale functions not expanded in release builds).
       
 10989 
       
 10990 	c) Fixed HA-238 (Shortcomings of KNullUid definition): removed TUidC class
       
 10991 	   and added static functions TUid::Uid(TInt) and TUid::Null() to get round
       
 10992 	   GCC bug. #defined KNullUid as TUid::Null().
       
 10993 
       
 10994 	d) Changed WINS Uid scheme so that the UId is stored in a segment of its own
       
 10995 	   called ".E32_UID", to add a UID to a windows file include the code
       
 10996 
       
 10997 			#pragma data_seg(".E32_UID")
       
 10998 			__WINS_UID(Uid1,Uid2,Uid3)
       
 10999 			#pragma data_seg()
       
 11000 
       
 11001 	   in your source.
       
 11002 
       
 11003 	e) Added the capability to detect thread death to the RChangeNotifier
       
 11004 	   (completes with the EChangesThreadDeath bit set).
       
 11005 
       
 11006 	f) Implemented User::InfoPrint() function. Also added a very simple notifier
       
 11007 	   server to the text window server so that little windows appear when
       
 11008 	   anyone calls User::Notify or InfoPrint.
       
 11009 
       
 11010 	g) Improved the Tls scheme so that it uses a CArrayFixFlat. According to my
       
 11011 	   benchmarking this should speed up Dll::Tls(), though it remains to be
       
 11012 	   seen what happens in the real world.
       
 11013 
       
 11014 	   Note that there is now a Dll::FreeTls() function, and that Dll::SetTls
       
 11015 	   can now return KErrNoMemory.
       
 11016 
       
 11017 	h) Changed midnight crossover code, to avoid costly divisions.
       
 11018 
       
 11019 	i) Changes to sound driver: Fixed several bugs to do with having two LDDs
       
 11020 	   going at once. This has caused the driver to become more sensitive to
       
 11021 	   playing and recording at once, and may mean that code that previously
       
 11022 	   worked fine now returns KErrInUse. Remember that the driver keeps
       
 11023 	   playing aLaw even after the last play request has been completed, and
       
 11024 	   keeps recording until the buffer is full. If you find problems, check
       
 11025 	   that you flush the record buffer when you have stopped recording, and if
       
 11026 	   you try to record and get KErrInUse, you may want to wait until the play
       
 11027 	   buffer has had time to drain and try again before reporting an error.
       
 11028 
       
 11029 	   Added some preliminary power handling code. Playing will stop on
       
 11030 	   switch-off and the restart from where it left off; recording will
       
 11031 	   terminate with KErrGeneral (this seemed the only appropriate value)
       
 11032 	   when you switch back on.
       
 11033 
       
 11034 	   The PDDs now support EVolumeByValue. The values are as follows:
       
 11035 
       
 11036 				0-20  = EVolumeNone
       
 11037 			21-40 = EVolumeSoft
       
 11038 			41-60 = EVolumeMedium
       
 11039 			61-80 = between EVolumeMedium and EVolumeLoud
       
 11040 			81-100 = EVolumeLoud
       
 11041 
       
 11042 4) Jane
       
 11043 		a) Changed MMU from a scheme of passing 3 parameters denoting the chunk's
       
 11044 		owner, its type (code, data etc.) and whether it was locked in physical or
       
 11045 		linear memory, to a simpler scheme where the chunk's owner is passed throughout the MMU
       
 11046 		system (there being a greatly increased possible number of chunk owners). This
       
 11047 		was to enable the ARM MMU, which is more limited than the X86 one, to cope with
       
 11048 		shared chunks being read only in one process and writable in another etc.
       
 11049 
       
 11050 		b) When creating certain types of chunks, kept a list of allocated pages, so that it
       
 11051 		is possible to support 3 possible states of permissions. (On the X86 this is achievable
       
 11052 		by merely changing the top level PDE permissions - this is not so on the ARM). This change
       
 11053 		allows the ARM MMU to support code chunks which are read/write to start with when the file
       
 11054 		server reads the code into them from a CF card, but later are both supervisor read/only
       
 11055 		when in the home section and user read/only when running.
       
 11056 
       
 11057 		c) Made a note early on of the file server's process. Changed the ram drive chunk
       
 11058 		to being two-state chunk, and when the file server runs, change the permissions on the
       
 11059 		RAM chunk (top level PDEs only) so that the file server has direct access to the
       
 11060 		RAM drive.
       
 11061 
       
 11062 		d) Made the RAM drive supervisor priviledges, so that no-one except the file
       
 11063 		server (see above) can access it.
       
 11064 
       
 11065 		e) Added size reporting functions for spy programs
       
 11066 			TInt RLibrary::GetRamSizes(TInt& aCodeSize, TInt& aConstDataSize);
       
 11067 			TInt RThread::GetRamSizes(TInt& aHeapSize, TInt& aStackSize);
       
 11068 			TInt RProcess::GetRamSizes(TInt& aCodeSize, TInt& aConstDataSize, TInt& anInitialisedDataSize, TInt& anUninitialisedDataSize);
       
 11069 
       
 11070 		f) Added Andrew Thoelke's optimisations to various Find and Locate functions - see
       
 11071 		   Notes for more details.
       
 11072 
       
 11073 
       
 11074 5) Graham
       
 11075 		1) Added and enhanced Kazuhiro Konishi's unicode/japanese changes
       
 11076 		   to the text window server.
       
 11077 
       
 11078 		2) Added the UID into the sound driver make file and removed
       
 11079 		   all the link dependancies that the sound PDDs had upon
       
 11080 		   their LDD.
       
 11081 
       
 11082 		3) Fixed the dodgy digitiser (HA-284)
       
 11083 
       
 11084 		4) Experimentally increased the digitiser sample rate to
       
 11085 		   50 samples/s.
       
 11086 
       
 11087 		5) Introduced the EPointerSwitchOn event. This event contains
       
 11088 		   x and y information and is generated when pen down causes
       
 11089 		   the machine to switch on. No further pen events should be
       
 11090 		   generated until the pen has subsequently been removed from
       
 11091 		   the surface of the digitiser. I believe appropriate windows
       
 11092 		   (i.e. the application bar window) will be able to register
       
 11093 		   with the window server an interest in these events. So, normal
       
 11094 		   windows should not be troubled by them. This should solve
       
 11095 		   problem HA-325.
       
 11096 
       
 11097 		6) Removed the text window server's beep when switching on
       
 11098 		   normally and introduced it when switching on with the
       
 11099 		   digitiser. (This only occurs on debug builds).
       
 11100 
       
 11101 6) Rog	1) Fixed RackC COM::1 bug which was causing input RS-232 lines
       
 11102 	   to be reported incorrectly.
       
 11103 7) Pete 1) Reduced the wait states introduced by Etna on CF Card
       
 11104 	   attribute memory reads. This was interfering with screen
       
 11105 	   refreshing when 16 shades of grey mode was enabled (HA285).
       
 11106 	2) CF card support when powering on and off the machine has
       
 11107 	   now been added. On power off, the card is fully powered down. On power
       
 11108 	   up, TLocalDrive objects are notified of the power down, forcing them
       
 11109 	   to re-mount the disk on the next access (HA281).
       
 11110 	3) Added the functions InCritical() and EndInCritical() to
       
 11111 	   the PC Card controller. While in-critical, media change power down is
       
 11112 	   delayed. Writes to the CF Card are now critical. Prior to this, if a
       
 11113 	   media change occured during a write to the card then this could leave
       
 11114 	   a sector with an ID error on the card.
       
 11115 	   However, there is currently a problem such that the File Server
       
 11116 	   panics if a media change occures during a write to the CF card
       
 11117 	   so this should be avoided for now.
       
 11118 	4) PC Card controller now able to access a CIS chain in common
       
 11119 	   memory as well as attribute memory.
       
 11120 	5) Removed the function User::PcCardCntrlInterface() and
       
 11121 	   replaced this with the class UserPcCardCntrl.
       
 11122 	6) Added the following functions to the above class: MediaStart(),
       
 11123 	   MediaOpen(),MediaInfo(),MediaRead(),MediaWrite(). These
       
 11124 	   allow access to a media device (eg CF Card) at a media
       
 11125 	   level (rather than a partition level as do TLocalDrive.Read() and
       
 11126 	   Write()). I.E. they allow access to the partition table etc.
       
 11127 
       
 11128 
       
 11129 Version 0.01.074
       
 11130 ================
       
 11131 (Made by Graham, November 6th 1996)
       
 11132 
       
 11133 1) Graham
       
 11134 		1) Fixed a leak in AddProtected() which caused the O/S to
       
 11135 		   panic with EBadDfc when stressed.
       
 11136 
       
 11137 		2) Added followers into the TEiger class for ports A,B,C,D
       
 11138 		   and E. Modifying these registers can now be safely
       
 11139 		   achieved without worrying about those bits which are
       
 11140 		   programmed to be input bits.
       
 11141 
       
 11142 		3) Added interrupt protection into all TEiger modify
       
 11143 		   functions.
       
 11144 
       
 11145 		4) Stopped KE_ALL debug information from coming out in all
       
 11146 		   circumstances.
       
 11147 
       
 11148 2) Morgan
       
 11149 	1) Moved WINS power off button to F9 (HA-214).
       
 11150 	2) Fixed HA-255 and added test code.
       
 11151 	3) Made semaphore and mutex names unique for each process to fix
       
 11152 		   HA-163. It is now possible to run 2 WINS kernels with the same
       
 11153 		   process name simultaniously.
       
 11154 
       
 11155 Version 0.01.073
       
 11156 ================
       
 11157 (Made by Graham, November 6th 1996)
       
 11158 
       
 11159 1) Graham
       
 11160 		1) Solved the stack problem which prevented debug information
       
 11161 		   from being emmitted in MARM debug builds.
       
 11162 
       
 11163 		2) Fixed WINS keyboard repeat problem when the WINS window
       
 11164 		   loses focus.
       
 11165 
       
 11166 2) SteveG
       
 11167 		1) Reduced stack usage of CObject::FullName, which was shoving a
       
 11168 		   TFullName on the stack for every owner of an object. Now only
       
 11169 		   one TFullName is put on the stack regardless of the number of
       
 11170 		   owners. This cures HA-273.
       
 11171 
       
 11172 Version 0.01.072
       
 11173 ================
       
 11174 (Made by Jane, October 25th 1996)
       
 11175 
       
 11176 This release is the candidate B3 release. Unless there are any show-stopping
       
 11177 bugs, our next release will be the first in the chain leading to B4, and
       
 11178 will not be binary compatible with this one.
       
 11179 
       
 11180 NOTE: Once again to speed the passage of this non-binary compatible release
       
 11181 through the system, I have released with test code failures. However in this
       
 11182 case I believe them to be test code problems. The following tests are failing
       
 11183 with kernel alloc heaven - T_CHUNK (chunk testing), T_KHEAP (thread testing)
       
 11184 and T_THREAD (undertaker testing). These tests fail in ARM debug builds only,
       
 11185 and pass on X86, which leads me to believe that these are granularity
       
 11186 issues in the kernel heap on ARM.
       
 11187 
       
 11188 1) Jane
       
 11189 		a) Implemented allocation of sub-page tables for ARM.
       
 11190 
       
 11191 		b) Fixed bugs to do with lengths of supplied filenames in
       
 11192 		   process and library loading. Took the opportunity to rationalise
       
 11193 		   the loader to do this and reduce stack impact considerably.
       
 11194 
       
 11195 		c) Added MMU debug supervisor calls to enable the porting of my
       
 11196 		   MMU system from its emulated environment, and converted several
       
 11197 		   tests to the new system.
       
 11198 
       
 11199 		d) Tidied up various APIs to their correct places, ready for
       
 11200 		   unfreeze.
       
 11201 		   Affected are the new unimplemented exception APIS, and the
       
 11202 		   RLoader::LoadLibrary
       
 11203 
       
 11204 		e) Added an enum, TKernPanic, to e32std.h
       
 11205 		   Now client threads will be panicked with values in this list,
       
 11206 		   rather than error numbers.
       
 11207 
       
 11208 	f) Fixed a couple of bugs in the low-level arm mmu implementation which
       
 11209 	   showed up with very large RAM disks.
       
 11210 
       
 11211 	g) Exported wildcards KMatchAny and KMatchOne from e32std.h
       
 11212 
       
 11213 	h) Changed RConsole::Set to RConsole::Init
       
 11214 
       
 11215 	i) Stopped RTest writing to comm ports (except in X86 builds)
       
 11216 
       
 11217 	j) Rationalised KErrxxxx constants
       
 11218 	   KErrNoLinearMemory gone, used KErrNoMemory instead
       
 11219 	   KErrSubSystem gone
       
 11220 	   KErrDomain gone, used KErrArgument instead
       
 11221 	   KErrException gone (kernel panic enum used instead)
       
 11222 	   KErrNotFound becomes -1, so that we could omit KNotFound in future.
       
 11223 
       
 11224 	   NOTE - KErrGeneral is no longer -1. This showed up quite a few
       
 11225 	   bugs in the file server which was assuming that KNotFound was the
       
 11226 	   same thing as KErrGeneral. This is no longer the case, beware!
       
 11227 
       
 11228 	 k) Added RThread::ProcessPriority() and RThread::SetProcessPriority()
       
 11229 
       
 11230 	 l) Changed void RThread::GetHeap(RHeap*&) to RHeap* RThread::Heap()
       
 11231 
       
 11232 		 m) Speeded up interprocess messaging by about 10%. A further 8%
       
 11233 			to come in next release.
       
 11234 
       
 11235 2) Steve
       
 11236 		a) Fixed UserHal::MemoryInfo which was returning an incorrect
       
 11237 		   figure for FreeRam - it was deducting the size of the RAM
       
 11238 		   disk from the real free ram size.
       
 11239 
       
 11240 3) Graham
       
 11241 		a) Changed the ADC interface to unsigned values. This should give
       
 11242 		   doubled digitiser accuracy but meant recalibration of the
       
 11243 		   digitiser on all platforms.
       
 11244 
       
 11245 		b) Updated K32VIDEO.H to include power handling functions.
       
 11246 
       
 11247 		c) Add CountDown(n) and FirstDelta() function calls to the
       
 11248 		   priority queue class.
       
 11249 
       
 11250 		d) Implemented waking up from alarms.
       
 11251 
       
 11252 		e) Implemented waking up from pen down.
       
 11253 
       
 11254 		f) Implemented ESwitchOn events on all platforms (HA-229).
       
 11255 
       
 11256 		g) Added a beep to the Text Window Server in debug builds
       
 11257 		   when an ESwitchOn event occurs.
       
 11258 
       
 11259 		h) Added a general purpose interface to the ADC channels which
       
 11260 		   measure battery voltages, thermistor readings etc.
       
 11261 
       
 11262 		i) Made Neil Lilliot's change for reducing shadowing on the LCD.
       
 11263 
       
 11264 4) Jal
       
 11265 		a) Fixed a bug in TReal96::operator/=
       
 11266 
       
 11267 Version 0.01.071
       
 11268 ================
       
 11269 (Made by Graham, October 11th 1996)
       
 11270 
       
 11271 1) Graham
       
 11272 		1) Added a millisecond timer queue to the kernel. It
       
 11273 		   currently uses FRC2. All kernel services which were
       
 11274 		   using TEiger::WaitMilliseconds should now move over
       
 11275 		   to the new services provided by this queue.
       
 11276 		2) Implemented the digitiser in terms of the millisecond
       
 11277 		   timer queue instead of the system tick queue. This enables
       
 11278 		   code to be written which can deliver more than 21 digitiser
       
 11279 		   events per second (it is currently set to 25/s). Not only
       
 11280 		   this, by driving current across the digitiser only when it
       
 11281 		   is absolutely necessary, power consumption has been
       
 11282 		   reduced. The digitiser should now work on upgraded
       
 11283 		   machines - the H/W fix for digitiser wobble involves an
       
 11284 		   increase to 1mS in the X/Y drive rise-time. In order to
       
 11285 		   take account of this rise-time, the millisecond timer was
       
 11286 		   required.
       
 11287 		3) Implemented the buzzer in terms of the millisecond timer
       
 11288 		   queue. Due to variable interrupt latency, this does not
       
 11289 		   produce a pleasing effect. So, for the time being, I have
       
 11290 		   left the buzzer monopolising FRC1. You can switch between
       
 11291 		   this and the new millisecond timer buzzer with the compile
       
 11292 		   time switch __SOFTWARE_BUZZER__ in KEARM\KE_UTL.CPP
       
 11293 		4) Introduced Hal::WaitMilliSeconds which uses the
       
 11294 		   millisecond timer. This replaces TEiger::WaitMilliSeconds.
       
 11295 		5) Added device driver power handling functions in
       
 11296 		   KS_POWER.CPP.
       
 11297 		6) Created a release of header files for those who link to
       
 11298 		   the E32 kernel (device driver writers mainly). This can
       
 11299 		   be found in R:\E32\ZIP\INCK.xxx
       
 11300 		7) Implemented the auto clibration sequence on the ADC
       
 11301 		   converter. This cures the problem which causes the first
       
 11302 		   ever pen down event to have the wrong y-coordinate.
       
 11303 
       
 11304 2) Pete
       
 11305 		1) Fixed a bug which prevented the machine booting up with
       
 11306 		   the CF card door open.
       
 11307 
       
 11308 Version 0.01.070
       
 11309 ================
       
 11310 (Made by Jane, October 4th 1996)
       
 11311 
       
 11312 1) Morgan
       
 11313 		1) Priority of a process is set according to the Executable's E32Image.
       
 11314 
       
 11315 		2) Fixed svLibraryLoadExact to deal with statically linked libraries where
       
 11316 		the ownership of the libraries handle belongs to the newly created process.
       
 11317 
       
 11318 2) SteveG
       
 11319 		1) Changed the keyboard data for P1 to have ' on shift-6, not ^
       
 11320 
       
 11321 		2) RDebug changes: Anyone can now request to be informed when a thread
       
 11322 		   panics, hits a breakpoint or causes an exception without having
       
 11323 		   called RDebug::Open. This means a panic catcher can be running
       
 11324 		   continuously and still allow GDB to be used. Previously, only one call
       
 11325 		   to RDebug::Open was allowed, meaning that the debugger could not
       
 11326 		   be used while a panic catcher was running and vice-versa.
       
 11327 
       
 11328 		   To catch panics etc, use the following code:
       
 11329 
       
 11330 			   SDebugInfo info;
       
 11331 			   TRequestStatus status;
       
 11332 			   RDebug::GetException(info,status);
       
 11333 			   User::WaitForRequest(status);
       
 11334 
       
 11335 		   SDebugInfo is defined in E32SVR.H
       
 11336 
       
 11337 		   You must kill the thread that paniced at some point using:
       
 11338 
       
 11339 			   RDebug::KillThread(info.iThread);
       
 11340 
       
 11341 		   or it will remain suspended forever. Do not use RDebug::Open
       
 11342 		   or you will prevent GDB from running at the same time.
       
 11343 
       
 11344 		   If someone starts GDB while your request to GetException is pending,
       
 11345 		   GDB takes priority and you will not recieve any notifications of threads
       
 11346 		   panicing until GDB quits
       
 11347 
       
 11348 		   Only one call to GetException can be active at any one time. It is
       
 11349 		   quite safe to call GetException while GDB is running, your request
       
 11350 		   will remain pending until the first app panics after GDB quits
       
 11351 
       
 11352 		   To cancel a request to GetException, use RDebug::CancelGetException()
       
 11353 
       
 11354 		   This feature has been buried by Jane's RUndertaker class which
       
 11355 		   should be used in preference ('cos she says it's better :-()
       
 11356 		   The ability to use GetException without calling RDebug::Open will
       
 11357 		   be removed in a later release.
       
 11358 
       
 11359 		3) Altered D_GDB, the GDB stub, so that if you launch it without
       
 11360 		   passing a program to debug on the command line, it will wait
       
 11361 		   for a thread to panic/hit a breakpoint and then call
       
 11362 		   User::Notify(). You can then start up GDB on the PC and
       
 11363 		   connect to the Protea and start debugging the thread that
       
 11364 		   paniced/hit a breakpoint.
       
 11365 
       
 11366 		   To put a hardcoded breakpoint into your code, use the line:
       
 11367 
       
 11368 			   asm(".word 0xe7ffffff");
       
 11369 
       
 11370 		   in your code. Run D_GDB without passing a command line, and
       
 11371 		   start your program. When the notify appears saying that
       
 11372 		   a program has hit a breakpoint, start up GDB on the remote
       
 11373 		   PC and start debugging...
       
 11374 
       
 11375 3) Jane
       
 11376 		1) Added KErrException. Threads which make illegal accesses etc. are
       
 11377 		   now panicked with this value.
       
 11378 
       
 11379 	2) Added RThread::RaiseException(TExcType aType)
       
 11380 		   For the time being, this just panics a thread with category
       
 11381 		   "Exception Raised" and panic number = the exception number
       
 11382 		   TExceptionType is obsolete, and will be retired at the next thaw.
       
 11383 
       
 11384 	3) Filled all user mode stacks with 0x29 to aid spy programs
       
 11385 
       
 11386 	4) Implemented the thread death notifer service. The class is
       
 11387 
       
 11388 		class RUndertaker : public RHandleBase
       
 11389 			{
       
 11390 		public:
       
 11391 			IMPORT_C TInt Create();
       
 11392 			IMPORT_C TInt Logon(TRequestStatus& aStatus,TInt& aThreadHandle) const;
       
 11393 			IMPORT_C TInt LogonCancel(TRequestStatus& aStatus) const;
       
 11394 			};
       
 11395 
       
 11396 			To use the class, create an RUndertaker and logon to it like so
       
 11397 
       
 11398 		RUndertaker u;
       
 11399 		u.Create();
       
 11400 		TRequeststatus stat;
       
 11401 		TInt handle;
       
 11402 		u.Logon(stat, handle);
       
 11403 		User::WaitForRequest(stat);
       
 11404 
       
 11405 			When a thread dies, the status word is completed, and the handle is that
       
 11406 		of the dying thread. To look at why the thread died, for example, you might
       
 11407 			do the following...
       
 11408 
       
 11409 			RThread r;
       
 11410 			r.SetHandle(handle);
       
 11411 			if (r.ExitReason()==0x666)
       
 11412 				{
       
 11413 				...
       
 11414 
       
 11415 		As you now have a handle on the dying thread, it won't go away until
       
 11416 		you close it.
       
 11417 
       
 11418 			r.Close();
       
 11419 
       
 11420 			Look at T_THREAD for examples.
       
 11421 
       
 11422 		NOTE: This service isn't guaranteed. If a thread dies while you are not
       
 11423 		logged on to your RUndertaker, obviously you'll miss it - and there is a
       
 11424 		window of opportunity after a thread has died & your status has completed
       
 11425 			and before you get chance to deal with this and logon on again.
       
 11426 
       
 11427 		NOTE2: Matt will be implementing a more general form of this in his
       
 11428 		RChangeNotifier class, which will complete to tell you that a thread
       
 11429 		has died, but not tell you *which* thread.
       
 11430 
       
 11431 4) Matthew
       
 11432 		Fixed bugs: HA-207 (%J in TTime::FormatL should abbreviate in 12hour
       
 11433 		mode) and HA-215 (CActiveScheduler::Add should assert parameter).
       
 11434 
       
 11435 5) Graham
       
 11436 		Partial implementation of a kernel millisecond timer which
       
 11437 		now runs the buzzer. Do not be alarmed if buzzing sounds
       
 11438 		different in this release.
       
 11439 
       
 11440 Version 0.01.069
       
 11441 ================
       
 11442 (Made by Jane, September 26th 1996)
       
 11443 
       
 11444 1) Jane
       
 11445 		1) Clients causing an exception are now panicked KErrAbort.
       
 11446 
       
 11447 		2) Possible fix for curtains bug. Any more reports of curtains
       
 11448 		   welcome (sort of.)
       
 11449 		   The bug was caused because of the change in behaviour such that
       
 11450 		   a client thread is still hanging around when the server processes
       
 11451 		   the disconnect. If the process creator had already closed its
       
 11452 		   process handle, then the process died immediately, but the client
       
 11453 		   thread was left. Then when the client thread eventually died, it
       
 11454 		   closed its chunks, which involved removing them from the (dead)
       
 11455 		   process's address space. BANG!
       
 11456 
       
 11457 		   Now the chunk is removed from the process address space earlier on.
       
 11458 
       
 11459 
       
 11460 2) SteveG
       
 11461 		1) Release 068 had a problem with the MARM custom DLLs,
       
 11462 		   which prevented the LEDs from flashing. Now OK.
       
 11463 
       
 11464 3) Graham
       
 11465 		1) When the kernel faulted, it used to continue to run and
       
 11466 		   possibly do all sorts of bad things.
       
 11467 		   For the time being, we just print a helpful message to
       
 11468 		   COMM1 and loop forever. (In the future we will reset.)
       
 11469 
       
 11470 
       
 11471 Version 0.01.068
       
 11472 ================
       
 11473 (Made by Jane, September 23rd 1996)
       
 11474 
       
 11475 NOTE - T_RDRV failed on certain bananas. We think that it is due
       
 11476 to a problem with the hardware - the door open interrupt is not
       
 11477 asserted for these fruit.
       
 11478 
       
 11479 1) Graham
       
 11480 		1) Removed nocallentrypoint declarations in MARM .OBY files
       
 11481 		   and added  dll= appropriately.
       
 11482 
       
 11483 		2) Fixed HA-219 which caused the digitiser to stop working
       
 11484 		   after the sound driver had been used.
       
 11485 
       
 11486 		3) Added a system of cumulative inertia into the digitiser.
       
 11487 		   Consider a system where a physical movement of the pen
       
 11488 		   produces an actual Pen Move Event only if it has moved
       
 11489 		   more than 1 pixel. Call this an inertia of value 1. So,
       
 11490 		   if the digitiser has an inertia value of 3, then it only
       
 11491 		   produces Pen Move Events when a movement of greater than
       
 11492 		   3 pixels in any direction has occured. The system I am
       
 11493 		   now experimenting with is one where the longer the pen
       
 11494 		   stays in one place, the greater inertia it acquires. So,
       
 11495 		   normally, with the pen moving all the time, no inertia
       
 11496 		   effects are apparent. But, when the pen comes to rest,
       
 11497 		   then the inertia begins to increase by one unit for every
       
 11498 		   1/4s that it remains within its 'inert event horizon'. It
       
 11499 		   is currently set so that the maximum possible inertia
       
 11500 		   value is 5. Clearly, I can't tell if this is a valuable
       
 11501 		   system until some higher level apps start running with
       
 11502 		   this O/S. So, feedback on this subject is especially
       
 11503 		   welcome.
       
 11504 
       
 11505 		4) Speculative fix for HA-217 ('Curtains').
       
 11506 
       
 11507 		5) Exported Hal::DisableIrqsToLevel1() et al. from the kernel
       
 11508 
       
 11509 		6) Reworked the kernel exception interface (TException,Exc).
       
 11510 
       
 11511 2) SimonB
       
 11512 		1) Removal of F32 code from the EWINC library
       
 11513 
       
 11514 		1) Addition of a new TWINC directory with MAK files for building all the code in TBAS. (The CPP files
       
 11515 		   used are the ones in TBAS). The header files from TBAS have been copied into TWINC, but this could
       
 11516 		   be rectified by changing the #includes to reference "..\TBAS\..."
       
 11517 
       
 11518 		1) Addition of bld and run cmd for building WINC libs, and test code. Also for running the test code.
       
 11519 
       
 11520 		1) Changes to MNT additional verbs
       
 11521 
       
 11522 					winc            build the libarries
       
 11523 					wincall
       
 11524 					wincdeb
       
 11525 					wincrel
       
 11526 					wincudeb
       
 11527 					wincurel
       
 11528 					btwinc          build the test code
       
 11529 					btwincall
       
 11530 					btwincdeb
       
 11531 					btwincrel
       
 11532 					btwincudeb
       
 11533 					btwincurel
       
 11534 					rtwinc          Run the test code
       
 11535 					rtwincall
       
 11536 					rtwincdeb
       
 11537 					rtwincrel
       
 11538 					rtwincudeb
       
 11539 					trwincurel
       
 11540 
       
 11541 
       
 11542 		1) Changes to EWINC MAK files and build cmd file to get Unicode variants to build and work. May still
       
 11543 		   need some more changes - (the mak files were completely stuffed with release builds compiling debug
       
 11544 		   code). It may be worth recreating all mak files again froms scratch
       
 11545 
       
 11546 		1) Changes to E32Initialise. With the file server in a separate Dll, the init code follows the WINS
       
 11547 		   init code method for the file server.
       
 11548 
       
 11549 3) Jane
       
 11550 		1) Added new RThread::Create which takes an open RLibrary, as discussed in EON defects -
       
 11551 				IMPORT_C TInt Create(const TDesC &aName,TThreadFunction aFunction,TInt aStackSize,TAny* aPtr,RLibrary* aLibrary,RProcess* aProcess,RHeap* aHeap, TInt aHeapMinSize,TInt aHeapMaxSize,TOwnerType aType);
       
 11552 		   This function takes all possible parameters so that a thread with an open library
       
 11553 		   handle can be created in another process, sharing a heap etc. (If the RLibrary*, RProcess*, RHeap*
       
 11554 		   are not required, just pass in NULL as usual.)
       
 11555 
       
 11556 		   The entrypoints of the library are called before the thread's entrypoint.
       
 11557 
       
 11558 		   NOTE - obviously the thread cannot access the handle it has on the library, so the library
       
 11559 		   can only get its final close when the thread dies.
       
 11560 
       
 11561 		2) Fixed a bug to do with stack chunk creation. Improved the naming scheme for chunks.
       
 11562 
       
 11563 		3) Various E32 Proposals
       
 11564 			- Processes unmarked by default
       
 11565 			- Queues don't allow shallow copies
       
 11566 			- CActive functions const
       
 11567 			- RTest Console() accessor for iConsole
       
 11568 
       
 11569 		4) Improved the kernel server protection method, which was becoming more unsafe
       
 11570 		   with the addition of each new way of shooting a client thread. (Now if the kernel
       
 11571 		   server shoots a client, it should always leave KErrKernelServerLeave, after
       
 11572 		   stashing a suitable error to shoot the client with in K::ClientErrorCode)
       
 11573 
       
 11574 		5) Fixed a few situations where the kernel was shooting itself rather than the client.
       
 11575 
       
 11576 		6) Pervasive change, such that the Owmer() of a CObject - used in forming the
       
 11577 		   name - is correct for thread-owned objects.
       
 11578 		   If a semaphore A is owned by thread B in process C its name is now C::B::A
       
 11579 		   If it was owned by process C directly it would be called C::A
       
 11580 
       
 11581 4) SteveG
       
 11582 		1) Implemented control of the LEDs on the racks and P1. It is now possible to get your
       
 11583 		   red alarm LED on your banana to flash, but it will flash green. Please note that this
       
 11584 		   is not an E32 software bug
       
 11585 
       
 11586 		2) Changed all occurances of TheSuperPage().iTotalRamSize to TheSuperPage().iMaxFreeRam,
       
 11587 		   and added iTotalRamSize and iTotalRomSize to the SuperPage. iRamDriveSize is now
       
 11588 		   setup correctly, and these figures will be returned properly when using UserHal::MemoryInfo
       
 11589 
       
 11590 		3) Added ESpecialKeyBase and ESpeicalKeyCount to E32KEYS.H. Any scancode in this range passed
       
 11591 		   to the keyboard translator will be passed through unaltered, and can be used for the
       
 11592 		   on-screen keys facility provided by the window server
       
 11593 
       
 11594 5) Morgan
       
 11595 		1) Added RLibrary::FileName()
       
 11596 		2) Corrected the key mappings for Func and Alt on the X86 build
       
 11597 		3) Extended Library and Process RAM loading to share ready loaded code chunks.  RAM loaded
       
 11598 		   Libraries can use ROM code chunks but currently Processes cannot.  Suitable code chunks
       
 11599 		   are identified by matching their checksums.
       
 11600 
       
 11601 5) Matthew
       
 11602 		1) Implemented %lx, %ld etc for formatting TInt64s. Added TLex::Val functions for TInt64s.
       
 11603 		   Removed TLex::Convert() and TLex::ConvertList().
       
 11604 
       
 11605 		2) Given DThreads and DProcesses ids: essentially just a unique TUint. Threads and processes
       
 11606 		   can be now opened by their id.
       
 11607 
       
 11608 		3) Changed Hal::RomVersion() so that it now returns version number from the rom header on
       
 11609 		   Epoc platforms.
       
 11610 6) Pete
       
 11611 		1) Changes to support Asci12-Rev2. (Still works with Rev1 though).
       
 11612 		2) ATA Driver - Validation of partition entries in MBR now added.
       
 11613 		3) ATA Driver - CHS and LBA addressing now supported (this allows us to work with Hitachi CF
       
 11614 		   card).
       
 11615 
       
 11616 7) Rog
       
 11617 		1) Introduced a rack only bug into hardware handshaking for the Serial driver. To facilitate a
       
 11618 		   timely E32 release the serial drivers will be re-released with C32. If you don't need h/w
       
 11619 		   handshaking or can get by on WINS, these drivers are just fine.
       
 11620 
       
 11621 Version 0.01.067
       
 11622 ================
       
 11623 (Made by Jal, September 7th 1996)
       
 11624 
       
 11625 1) Jane
       
 11626 		1) MMU fix to do with re-allocating linear space after RAM disk
       
 11627 		   has grown.
       
 11628 
       
 11629 		2) More build and mnt fixes.
       
 11630 
       
 11631 		3) Fixed HA-204, incorrect error given by in WINS library loading.
       
 11632 
       
 11633 		4) Fixed HA-205, bug in RThread::Create
       
 11634 
       
 11635 		5) Changed the Environment class, so that all environment variables are
       
 11636 		   stored and compared in UPPER CASE.
       
 11637 
       
 11638 		6) Changed ks_proc as requested by Colly so that names which are duplicates except
       
 11639 		   for generation are allowed.
       
 11640 
       
 11641 		7) Fixed HA-95, allowing the server to refer to the client thread when processing a
       
 11642 		   disconnect message
       
 11643 
       
 11644 		8) Fixed HA-211, RProcess::Open stops process from being destroyed
       
 11645 
       
 11646 		9) Fixed HA-210, runtime checks on queues
       
 11647 
       
 11648 		10) Implemented basic exception handling - i.e. shooting the offending thread. Fixes
       
 11649 			bugs HA-137 and HA-157
       
 11650 
       
 11651 		11) Fixed HA-212, RLibrary::Load problems after creating thread in foreign process
       
 11652 
       
 11653 
       
 11654 2) Matthew
       
 11655 		1) Bug fixes HA-188, HA-198 and HA-202. Also fixed a time-mangling bug on
       
 11656 		   the rack, which effected relative timers due to off after more than
       
 11657 		   about 30 seconds, and a bug which caused the sound LDD to panic.
       
 11658 
       
 11659 3) SteveG
       
 11660 		1) On the WINS build, F10 and F11 now send EKeySliderDown and
       
 11661 		   EKeySliderUp keypresses. F12 key is now the OFF key and
       
 11662 		   sends an EKeyOff keypress. The UserHal::SwitchOff() function
       
 11663 		   now minimizes the WINS window, simulating switching off.
       
 11664 		   Maximising the window will simulate switching on by sending
       
 11665 		   a TEvent::SwitchOn. The Shell, or whoever switches off,
       
 11666 		   should just look for EKeyOff and then call UserHal::SwitchOff
       
 11667 		   which will then work with the correct key on all platforms
       
 11668 
       
 11669 		2) Implemented the TTime::Set(TDesC& aString) function which
       
 11670 		   allows setting or constructing a TTime from a date string
       
 11671 		   in the format YYYYMMDD:HHMMSS.MMMM - any part of the string
       
 11672 		   may be omitted, but either the dot or colon must be present.
       
 11673 		   Any parts of the string which are omitted are zero'd.
       
 11674 
       
 11675 		3) Added suitable values to be returned by the WINS memory
       
 11676 		   functions in UserHal::MemoryInfo()
       
 11677 
       
 11678 		4) Fixed problem with supplying long category names when
       
 11679 		   panicing a thread - only the first 16 characters used
       
 11680 
       
 11681 4) Morgan
       
 11682 		1) Fixed HA-191 by not passing the placement new as an argument to
       
 11683 		   CArrayFixBase::ResizeL.
       
 11684 		   Fixed HA-187.  Under WINS Mutex are signaled in thread CleanUp code
       
 11685 		   rather than in the DPlatThread destructor.
       
 11686 		   Fixed a Bug in Time::FormatL to prevent the %C directive overflowing
       
 11687 		   the descriptor and causing a panic.
       
 11688 
       
 11689 		2) CArray???::FindIsq returns an index of 0 if the array is empty.
       
 11690 
       
 11691 		3) User::IsRomAddress is back.  Again.
       
 11692 
       
 11693 
       
 11694 Version 0.01.066
       
 11695 ================
       
 11696 (Made by Jane, August 23rd 1996)
       
 11697 
       
 11698 1) SteveG
       
 11699 		1) Re-fixed bug in ARM Mem::Copy and Mem::Move, which got
       
 11700 		   lost prior to releasing 0.01.065. Refixed the test
       
 11701 		   software T_FUNC.CPP as well. The bug meant that
       
 11702 		   Mem::Copy and Mem::Move didn't return the correct
       
 11703 		   address if the source and target were the same
       
 11704 
       
 11705 		2) Debugger fixed to take into account the changes in the
       
 11706 		   way threads start - the change meant the debugger no
       
 11707 		   longer set a breakpoint at the start of the thread
       
 11708 		   when starting a debug session
       
 11709 
       
 11710 2) Matthew
       
 11711 		1) Fixes to sound LDD and arm PDD.
       
 11712 
       
 11713 3) Jane
       
 11714 		1) Various build fixes, especially to WINC
       
 11715 
       
 11716 
       
 11717 Version 0.01.065
       
 11718 ================
       
 11719 (Made by Jane and Jal, 17th August 1996)
       
 11720 
       
 11721 IMPORTANT NOTE:
       
 11722 
       
 11723 To avoid delaying the chain below us, this version of E32 has been released with
       
 11724 2 known bugs and one possible bug. They are as follows...
       
 11725 
       
 11726 
       
 11727 1. Problems on ARM build when the RAM drive grows beyond 1 Meg in size. To avoid this
       
 11728    bug, this release of E32/F32 implements a maximum size of 1 Meg for the RAM drive.
       
 11729 
       
 11730 2. T_SOUND fails on the ARM platform.
       
 11731 
       
 11732 3. T_CPER (CPeriodic test) fails on EPOC platforms. However, I believe this is not a bug
       
 11733    - Graham fixed the timers but the test code is out of date.
       
 11734 
       
 11735 4. There are WINC test code problems which aren't worth delaying the release for.
       
 11736 
       
 11737 1) Graham
       
 11738 		1) Added microseconds to the system time. This required a
       
 11739 		   fix to TEiger::RtcTickCount() to counteract an Eiger
       
 11740 		   hardware anomoly - the SYSFLG 64ths do not roll over to
       
 11741 		   zero at the same time as the RTC rolls over its seconds.
       
 11742 		   It does this on the half-second instead. Enhanced T_TIMER
       
 11743 		   to test this roll-over effect.
       
 11744 
       
 11745 		2) Changed the MUTATBLE errors in E32DEF.H
       
 11746 
       
 11747 		3) Updated EMARM.REL to include the P1 variant device drivers
       
 11748 
       
 11749 		4) Fixed warnings in T_BUF.CPP.
       
 11750 
       
 11751 		5) Fixed intrnal TTickLink services to work with microseconds
       
 11752 		   instead of tenths. In order to help device-driver writers,
       
 11753 		   I have changed the name of the functions to
       
 11754 		   PeriodicInMicroSeconds and OneShotInMicroSeconds.
       
 11755 
       
 11756 		6) IMPORTANT
       
 11757 
       
 11758 		I have changed the way in which the timing services in E32 work.
       
 11759 		Although the changes mean that more of the underlying mechanism
       
 11760 		is exposed, it is hoped that this policy will result in more
       
 11761 		programmer-friendly services once the theory has been explained.
       
 11762 
       
 11763 		The theory:
       
 11764 
       
 11765 		The timing services are based upon the regular pulse that animates
       
 11766 		the operating system. The time between pulses is called the tick
       
 11767 		period and this will vary according to the platform being used.
       
 11768 		The tick period for WINS, for instance, is 100000 uS, while for
       
 11769 		MARM it is 15625 uS.
       
 11770 
       
 11771 		A new service has been introduced which enables the programmer
       
 11772 		to determine the length of the tick period in microseconds:
       
 11773 
       
 11774 	TInt UserHal::TickPeriod(TTimeIntervalMicroSeconds32& aPeriod)
       
 11775 
       
 11776 		But, for the purposes of the subsequent discussion, I will call
       
 11777 		this length of time T.
       
 11778 
       
 11779 		So, we have the following situation:
       
 11780 
       
 11781 	---|-----------|-----------|-----------|-----------|--
       
 11782 	   <----------->
       
 11783 			 T
       
 11784 
       
 11785 		At any point in time, a program may request a timing service
       
 11786 		such as User::After(x). This function should return x uS later.
       
 11787 		Let us show this on the diagram and introduce the term y.
       
 11788 
       
 11789 							User::After(x)
       
 11790 									 |
       
 11791 	---|-----------|-----------|-----+-----|-----------|--
       
 11792 	   <----------->                 <----->
       
 11793 			 T                          y
       
 11794 
       
 11795 		So, y represents the amount of time between the timing service
       
 11796 		being requested and the next system tick. It is clear that y may
       
 11797 		be any duration of time less than or equal to T.
       
 11798 
       
 11799 		Let's explore the behaviour of User::After(x) for a range of
       
 11800 		different values of x.
       
 11801 
       
 11802 		x=0
       
 11803 		---
       
 11804 		This will return on the next system tick. So, if you ask
       
 11805 		for 0 uS, you actually get y uS.
       
 11806 
       
 11807 							User::After(0)     Completes
       
 11808 									 |     |
       
 11809 	---|-----------|-----------|-----+-----|-----------|--
       
 11810 	   <----------->                 <----->
       
 11811 			 T                          y  |
       
 11812 
       
 11813 		x<T
       
 11814 		---
       
 11815 		This will also return on the next system tick. So, if you
       
 11816 		ask for T-1 uS, you actually get y uS.
       
 11817 
       
 11818 						  User::After(T-1)     Completes
       
 11819 									 |     |
       
 11820 	---|-----------|-----------|-----+-----|-----------|--
       
 11821 	   <----------->                 <----->
       
 11822 			 T                          y  |
       
 11823 
       
 11824 		x=T
       
 11825 		---
       
 11826 		This will cause a wait of 1 tick to be set up. So, if you
       
 11827 		ask for T uS, you actually get y+T uS.
       
 11828 
       
 11829 							User::After(T)                 Completes
       
 11830 									 |                 |
       
 11831 	---|-----------|-----------|-----+-----|-----------|--
       
 11832 	   <----------->                 <----->
       
 11833 			 T                          y  |
       
 11834 
       
 11835 		x=2T-1
       
 11836 		------
       
 11837 		Just to expose the workings a little more. 2T-1 gets divided
       
 11838 		by T to see how many ticks to wait. Any remainder is discarded.
       
 11839 		Now, in integer maths, (2T-1)/T = 1. So, we set up a wait of
       
 11840 		1 tick. So, if you ask for 2T-1 uS, you actually get y+T uS.
       
 11841 
       
 11842 						 User::After(2T-1)                 Completes
       
 11843 									 |                 |
       
 11844 	---|-----------|-----------|-----+-----|-----------|--
       
 11845 	   <----------->                 <----->
       
 11846 			 T                          y  |
       
 11847 
       
 11848 		x=2T
       
 11849 		----
       
 11850 		2T/T = 2. So, we set up a wait of 2 ticks. So, if you ask
       
 11851 		for 2T uS, you actually get y+2T uS.
       
 11852 
       
 11853 						   User::After(2T)                     Completes
       
 11854 									 |                             |
       
 11855 	---|-----------|-----------|-----+-----|-----------|-----------|--
       
 11856 	   <----------->                 <----->
       
 11857 			 T                          y  |
       
 11858 
       
 11859 
       
 11860 		Notes
       
 11861 		-----
       
 11862 
       
 11863 		a. It is a slightly irksome feature of this system that if you
       
 11864 		   ask for x uS, you may end up waiting less time than x, or you
       
 11865 		   might end up waiting more time than x. It all depends on
       
 11866 		   the value of the 'wobble factor', y.
       
 11867 
       
 11868 		   As mentioned above, if you ask for T-1 uS, you actually
       
 11869 		   get y uS. Now y could be, in fact it will in all probability
       
 11870 		   be, significantly less than T-1. On the other hand, if you ask
       
 11871 		   for T uS, you get T+y uS, which means you will be waiting a
       
 11872 		   longer time than that requested.
       
 11873 
       
 11874 		   It is impossible, then, for the operating system using this
       
 11875 		   system to guarantee that it will wait at least as long as the
       
 11876 		   period of time requested. If this is the sort of guarantee you
       
 11877 		   need, then you will have to arrange it yourself by
       
 11878 		   adding (T-1) to your request. You can determine T using the
       
 11879 		   UserHal function mentioned above.
       
 11880 
       
 11881 		b. In some situations the value of y is known. Consider a
       
 11882 		   periodic timer. After the first callback, you know that
       
 11883 		   you are now synchronised to the system tick and that y
       
 11884 		   is just less than T. The 'wobble factor', in this situation,
       
 11885 		   can be taken allowed for by the programmer. So, if you start
       
 11886 		   a CPeriodic with a delay of 0 uS and an interval of 0 uS,
       
 11887 		   you will get one which immediately starts calling back on
       
 11888 		   every system tick.
       
 11889 
       
 11890 		c. Timing test programs commonly want to synchronise to the
       
 11891 		   system tick in order to remove the 'wobble factor' from
       
 11892 		   their calculations. This can now be achieved using User::After(0).
       
 11893 
       
 11894 
       
 11895 2) Jane
       
 11896 		1) Added new User class layout from Martin Tasker.
       
 11897 
       
 11898 		2) Re-fixed WINS RDebug.Print (HA-170) which had become un-edited after
       
 11899 		   I put it in!
       
 11900 
       
 11901 		3) Added CObjectIx::Count() to return the total number of
       
 11902 		   objects in a CObjectIx.
       
 11903 
       
 11904 		4) Added RThread::HandleCount(TInt& aProcessHandleCount, TInt& aThreadHandleCount) const;
       
 11905 		   This returns the total number of handles open in a thread and
       
 11906 		   its owning process.
       
 11907 
       
 11908 		5) Added RHandleBase::HandleInfo(THandleInfo* anInfo);
       
 11909 		   This function fills in a THandleInfo structure with
       
 11910 		   information about the current handle.
       
 11911 
       
 11912 		   class THandleInfo
       
 11913 				{
       
 11914 		   public:
       
 11915 				TInt iNumOpenInProcess;
       
 11916 				TInt iNumOpenInThread;
       
 11917 				TInt iNumProcesses;
       
 11918 				TInt iNumThreads;
       
 11919 				};
       
 11920 
       
 11921 		   iNumOpenInProcess = the number of times the object given by
       
 11922 			   the handle is open in this process.
       
 11923 		   iNumOpenInThread = the number of times the object given by
       
 11924 			   the handle is open in this thread.
       
 11925 		   iNumProcesses = the number of processes which have a handle on the object.
       
 11926 		   iNumThreads = the number of threads which have a handle on the object.
       
 11927 
       
 11928 		 6) Added an extra defaulted parameter to many RHandleBase derived classes' Create calls.
       
 11929 			For example, from RMutex...
       
 11930 			TInt CreateLocal(TOwnerType aType=EOwnerProcess);
       
 11931 			TInt CreateGlobal(const TDesC &aName,TOwnerType aType=EOwnerProcess);
       
 11932 
       
 11933 			The owner type specifies whether the handle created is
       
 11934 			thread or process relative. (The default is process-relative
       
 11935 			as before.)
       
 11936 			Process-relative handles may be passed between threads in
       
 11937 			the same process without duplication. The handles are held
       
 11938 			in the process, and are not closed when the thread dies, so
       
 11939 			the objects will hang around until the process dies.
       
 11940 			Thread-relative handles need to be duplicated between
       
 11941 			threads in the same process, but the handles will be closed
       
 11942 			when the thread dies.
       
 11943 
       
 11944 			IMPORTANT NOTE 1
       
 11945 			Due to design considerations, RLibraries and RTimers are
       
 11946 			now always thread relative handles. You will need to
       
 11947 			duplicate them if they are shared between threads. RLibraries
       
 11948 			should now unload when their access counts become 0.
       
 11949 
       
 11950 			Fixes bug HA-170
       
 11951 
       
 11952 		 7) Fixed X86 crash on test failure.
       
 11953 
       
 11954 		 8) Fixed HA-177 - panicking a dead thread kills the caller.
       
 11955 
       
 11956 		 9) Fixed HA-180 - panic enum was incorrect.
       
 11957 
       
 11958 		10) Dll loading changes.
       
 11959 
       
 11960 			RLibrary load api becomes...
       
 11961 			TInt Load(const TDesC &aFileName,const TDesC &aPath=_L(""));
       
 11962 
       
 11963 			If aFileName is a full filename with path, then aPath will be ignored,
       
 11964 			and the only load attempted will be that of aFileName. If the dll is not
       
 11965 			at the specified location, the load will fail.
       
 11966 			If aFileName is just a rootname, (e.g. _L("ECONS.DLL")), then the dll
       
 11967 			will be searched for in the following order - specifed path, followed by
       
 11968 			the system directory on each attached drive.
       
 11969 
       
 11970 			IMPORTANT - old calls with the extension specified as the second parameter
       
 11971 			e.g. lib.Load(_L("MYDLL"),_L(".DLL")) are now likely to fail as the second
       
 11972 			parameter is now interpreted as a path.
       
 11973 
       
 11974 		11) Dll entrypoints
       
 11975 			For the first time under EPOC, DLL entrypoints are now called.
       
 11976 
       
 11977 			When a process is loaded, all the DLLs to which it is statically linked
       
 11978 			get their entrypoints called with the value EDllThreadAttach. (This call
       
 11979 			is on behalf of and in the context of the main thread.)
       
 11980 			When a new thread is created in the process, the statically
       
 11981 			linked DLLs' entrypoints are again called with EDllThreadAttach in the
       
 11982 			context of the newly created thread.
       
 11983 			When each thread in the process dies, the entrypoints are called with
       
 11984 			EDllThreadDetach in the context of that thread.
       
 11985 
       
 11986 			Unlike Windows NT, I do not call entrypoints with EDllProcessAttach and
       
 11987 			EDllProcessDetach. This is because the function pair Dll::GlobalAlloc()
       
 11988 			and Dll::GlobalAllocated (currently unimplemented) allow the DLL to
       
 11989 			discover its first ever call, if necessary. This is though to be more
       
 11990 			useful in our system then knowing a first call per process. Similarly
       
 11991 			Dll::SetTls() and Dll::Tls() enable the DLL to discover its first load
       
 11992 			within a thread.
       
 11993 
       
 11994 			When a thread loads a DLL dynamically via RLibrary::Load(), the DLL's
       
 11995 			entrypoint is called, if and only if this is the first load of this DLL
       
 11996 			within the thread. (So if a process is statically linked to FRED.DLL and then
       
 11997 			a thread does an RLibrary::Load of FRED.DLL, then FRED's entrypoint is not called
       
 11998 			in response to this load.)
       
 11999 			The entrypoint is called with the value EDllThreadAttach in the context of the
       
 12000 			thread loading the DLL.
       
 12001 
       
 12002 			The above situation is further complicated by DLL's themselves being statically
       
 12003 			linked to other DLLs. When a DLL is loaded, I make a list of unique DLL entrypoints
       
 12004 			in the statically linked chain, and call each of them once only. So if DLL
       
 12005 			A is linked to DLLs B, C and D, and then B is linked to X, C and Y, and D is
       
 12006 			linked to B, C, and Z, then the entrypoints for A, B, C, D, X, Y and Z are called
       
 12007 			once each when A is loaded.
       
 12008 			If A were statically linked to just B and C, then when it was loaded just the
       
 12009 			entrypoints for A, B, C, X, Y would be called. If the same thread then went
       
 12010 			on to load D, then the entrypoints which had not already been loaded in that
       
 12011 			thread would be called - i.e. D and Z.
       
 12012 
       
 12013 			All this DLL entrypoint calling can get very time-consuming in the case of
       
 12014 			many of the DLLs in the ROM which have no need for entrypoints to be called.
       
 12015 			In this case, add "nocallentrypoint" after the DLL's specification line in the
       
 12016 			obeyfile, and no entrypoints will be called for that DLL or any DLLs below it
       
 12017 			in the static linkage chain.
       
 12018 			All drivers should have "nocallentrypoint" specifiers.
       
 12019 
       
 12020 			E.g. primary=\xxx\ekernd.exe sys\kernel.exe nocallentrypoint
       
 12021 
       
 12022 
       
 12023 			IMPORTANT NOTE 2
       
 12024 
       
 12025 			Although for many of the files "nocallentrypoint" is optional, it is compulsory for
       
 12026 			kernel.exe and efile.exe. Bad things happen if the kernel's entrypoint is called
       
 12027 			when something which is linked to it is loaded, and the file server doesn't take
       
 12028 			too kindly to it either!
       
 12029 			Also, note that the name of efsrv.dll has changed in the obeyfile. It's probably
       
 12030 			best to cut and paste from the released E32 obeyfiles.
       
 12031 
       
 12032 			There are new versions of ROMBUILD & PETRAN which support the above obeyfile
       
 12033 			changes and new structures necessary for the calling of DLL entrypoints.
       
 12034 
       
 12035 		12) Due to the new directory scheme, it has been possible to remove
       
 12036 			RLibrary::LoadExact. RLibrary::Load now does a load exact - i.e. it does no
       
 12037 			name mangling on the name passed in as a parameter.
       
 12038 
       
 12039 			RLoader::LoadExact has been renamed to RLoader::Load. This will affect you
       
 12040 			if you have one of those "mini-loaders" for WINS which allows you to live
       
 12041 			without the file server.
       
 12042 
       
 12043 
       
 12044 3) SteveG
       
 12045 		1) Altered all builds of E32 to use the new directory structure \Epoc32\Build and
       
 12046 		   \Epoc32\Release
       
 12047 
       
 12048 		2) Added SetModifierState function to KeyTranslator:
       
 12049 
       
 12050 		   TInt SetModifierState(TEventModifier aModifier,TModifierState aState)
       
 12051 
       
 12052 		   which alters the supplied modifier according to the supplied state.
       
 12053 		   TModifierState is defined in E32Keys.h and is one of ETurnOnModifier,
       
 12054 		   ETurnOffModifier or EToggleModifier.
       
 12055 
       
 12056 		3) Fixed bug in KYTRAN where left and right modifiers were not being set
       
 12057 
       
 12058 		4) Implimented DigitizerCalibration functions, and wrote simple text shell
       
 12059 		   calibration program. A calibrator will need to be written as an Eikon app.
       
 12060 
       
 12061 		   A calibration program should:
       
 12062 
       
 12063 		   Call UserHal::CalibrationPoints(TCalibration& aCalibration) which will return
       
 12064 		   three screen coordinates at which points should be plotted. The user should
       
 12065 		   touch these three points, and the values returned by the digitizer for the points
       
 12066 		   actually touched should then be returned to
       
 12067 		   UserHal::SetXYInputCalibration(TCalibration aCalibration)
       
 12068 
       
 12069 		   Note that a TCalibration actually has 4 points - the 4th is ignored by
       
 12070 		   SetXYInputCalibration
       
 12071 
       
 12072 		   Suitable default calibration values incorporated into each ARM variant, so
       
 12073 		   the calibration on your yellow jobbie should be more or less correct without
       
 12074 		   calibrating. If yours is wildly off, please let us know
       
 12075 
       
 12076 		5) Added profiling support to all platforms, and increased the number of nested
       
 12077 		   profiles to 64. You can specify a range of profiles to clear/read results of.
       
 12078 		   Results returned in microseconds, but only recorded at tick resolution. This
       
 12079 		   avoids changing the API when profiles are measured more accurately.
       
 12080 
       
 12081 		   Using profiles:
       
 12082 
       
 12083 		   Decide on the profile numbers you are going to use, between 0 and 63. You can
       
 12084 		   use any of them, unless someone else is using some in the same ROM build.
       
 12085 
       
 12086 		   Reset the profiles you are using, by:
       
 12087 
       
 12088 		   RDebug::ProfileReset(aStart,aCount);
       
 12089 
       
 12090 		   which resets aCount profiles starting from profile number aStart.
       
 12091 
       
 12092 		   Surround the code with __PROFILE_START(n) and __PROFILE_END(n) where n is
       
 12093 		   a number of your choice between 0 and 63 inclusive. You can nest the profiles.
       
 12094 
       
 12095 		   Return the results using:
       
 12096 
       
 12097 		   TProfile profile[n]; // n is the number of results you are reading
       
 12098 
       
 12099 		   RDebug::ProfileResults(&profile[0],aStart,aCount);
       
 12100 
       
 12101 		   which writes the results of aCount profiles starting with profile number
       
 12102 		   aStart into your profile array.
       
 12103 
       
 12104 		   TProfile is currently defined as:
       
 12105 
       
 12106 		   class TProfile
       
 12107 			   {
       
 12108 			   TInt iTime;
       
 12109 			   TInt iCount;
       
 12110 			   };
       
 12111 
       
 12112 		   You need to include E32SVR.H in your code to use profiles
       
 12113 
       
 12114 		6) Moved the keystroke data dll to the variant level, allowing
       
 12115 		   different keyboard layouts for each implementation. Changed
       
 12116 		   the P1 version to give correct keystrokes and modifiers on the
       
 12117 		   yellow jobbies.
       
 12118 
       
 12119 		   On the real Proteas:
       
 12120 			   Fn sets EModifierLeftFunc and EModifierFunc
       
 12121 			   Menu sets EModifierLeftAlt and EModifierAlt
       
 12122 			   Fn-Esc sends an EKeyOff keypress
       
 12123 			   Fn-M sends an EKeyDecContrast keypress
       
 12124 			   Fn-, sends an EKeyIncContrast keypress
       
 12125 
       
 12126 		   On B and C racks:
       
 12127 			   Alt sets EModifierLeftAlt and EModifierAlt
       
 12128 			   Alt-Esc sends EKeyOff
       
 12129 			   Alt-, sends EKeyDecContrast
       
 12130 			   Alt-. sends EKeyIncContrast
       
 12131 
       
 12132 		   On WINS:
       
 12133 			   Left Alt sets EModifierLeftAlt and EModifierAlt
       
 12134 			   Right Alt sets EModifierFunc and EModifierLeftCtrl
       
 12135 					and EModiiferCtrl (the setting of Ctrl is a Windows
       
 12136 					funny and can't be prevented AFAIK)
       
 12137 
       
 12138 
       
 12139 		7) Fixed bug with ARM coded Mem::Copy and Mem::Move where it
       
 12140 		   returned the wrong value if the source and targets were the same
       
 12141 
       
 12142 
       
 12143 4) AdamG
       
 12144 		1) Much of ECOMM re-written to speed up data paths and fix all known serial driver
       
 12145 		   bugs.
       
 12146 
       
 12147 		2) Implemented reference counting of interrupts in all serial PDDs for all hardware
       
 12148 		   and platform variants.
       
 12149 
       
 12150 		3) Added use of NT Critical sections to WINS Serial PDD to eliminate multiple
       
 12151 		   completion bugs.
       
 12152 
       
 12153 		4) Corrected signal polarity in all MARM serial PDDs.
       
 12154 
       
 12155 5) Matthew
       
 12156 		1) Changes to TLocale.
       
 12157 		   Most importantly there are now four date separators and four time separators, one
       
 12158 		   for the beginning, one for the end and two potentially different internal
       
 12159 		   separators. The convention is that the NULL character represents no separator.
       
 12160 		   This has had a knock on effect on the TTime::FormatL() function: now '%:0' means
       
 12161 		   first time separator, '%/3' means the forth date separator etc.
       
 12162 
       
 12163 		   Additionally there is now an AmPmSymbolPosition indicator, and different distance
       
 12164 		   units for different contexts: one general and two for short/long distances.
       
 12165 
       
 12166 		2) Added an RChangeNotifier class, for notifying users of global changes. At the
       
 12167 		   moment changes to TLocale and midnight crossover are the only things which are
       
 12168 		   notified.
       
 12169 
       
 12170 		   To use call Create() and then Logon() with a TRequestStatus. This first Logon()
       
 12171 		   will complete straight away with the value EChangesAll. Subsequent logons will
       
 12172 		   complete next time there is a change and the status will contain a bitfield
       
 12173 		   indicating what has changed.
       
 12174 
       
 12175 		3) Made certain TInt64 functions inline. Also changed the default constructor so
       
 12176 		   that it does not assign zero.
       
 12177 
       
 12178 		4) Changed the X86 build so that getting the time returns fractions of seconds. The
       
 12179 		   time is now given to the nearest tick (which occur at just over 18.2Hz on the X86).
       
 12180 
       
 12181 		5) Added unary minus operators to TPoint and TSize.
       
 12182 
       
 12183 		6) Changes to sound driver: Fixed a bug that caused a crash when you tried cancelling
       
 12184 		   playing alarm sounds. Stopped it from panicking in Wins if you turned beeps off
       
 12185 		   from the control panel.
       
 12186 
       
 12187 6) Jal
       
 12188 				1) Various internal changes to TLocalDrive and media drivers.
       
 12189 
       
 12190 				2) Added operator[] to CObjectIx
       
 12191 
       
 12192 7) Morgan
       
 12193 		1) More RThread test code under Suspend/Resume conditions
       
 12194 		   and fixes to WINS and EPOC threads.
       
 12195 		2) Moved User::IsRomAddress to the file server where it is now called
       
 12196 				 RFs::IsRomAddress
       
 12197 		3) Added User::TickPeriod
       
 12198 		4) Added physical screen size (in twips) to MachineInfo
       
 12199 
       
 12200 8) Steve & Jane
       
 12201 
       
 12202 	Implemented new Epoc32 directory structure (described in more detail on Notes.)
       
 12203 
       
 12204 	All makefiles should be changed so that the intermediate files are built to
       
 12205 	e.g. \Epoc32\Build\WINS\E32\Deb for exes and \Epoc32\Build\WINSD\E32\Deb for dlls.
       
 12206 	The executables and dlls themselves should be built to
       
 12207 	e.g. \Epoc32\Release\WINS\Deb. (NOTE - there is no "E32" in this directory path -
       
 12208 	all releasables for a given build go to the same directory.)
       
 12209 
       
 12210 	E32 mnt makework currently makes the whole Epoc32 structure - this can be used to
       
 12211 	get started.
       
 12212 
       
 12213 	mnt gettools gets tools to Epoc32\Tools. This should be added to your path from
       
 12214 	the control panel. All existing paths to \tools should be removed if possible
       
 12215 		- if not possible then the e32 tools themselves should be removed from any tools
       
 12216 	 directories in your path.
       
 12217 
       
 12218 	\E32SYS should also be removed from the path.
       
 12219 
       
 12220 	The scheme whereby executables can be installed under Epoc32\WINS\Z and appear as
       
 12221 	if they are under Z: is not in this release, but will be in the next one. For the
       
 12222 	time being, the old scheme with romfile.bin holds.
       
 12223 
       
 12224 	NOTE: GCC only runs from C:\Epoc32\GCC\BIN, so if you are working on a substed
       
 12225 	drive, you will still need an Epoc32 directory with GCC in on C:.
       
 12226 
       
 12227 
       
 12228 Version 0.01.064
       
 12229 ================
       
 12230 (Made by Graham, 26 July '96)
       
 12231 
       
 12232 1) Graham
       
 12233 		1) Integrated WINC into MNT.CMD. This version is the first
       
 12234 		   to include a release of WINC.
       
 12235 
       
 12236 		2) Implemented a special version of RDebug::SupervisorMode
       
 12237 		   which suits the purposes of REPRO.EXE
       
 12238 
       
 12239 		3) REPRO.EXE now works. It communicates with a program called
       
 12240 		   PREPRO.EXE which runs on the PC. You can get this program
       
 12241 		   from S: using GETREL PTOOL PEIGER 104 in your \TOOLS
       
 12242 		   directory. You may type PREPRO for command line options, but, in
       
 12243 		   general, you merely type PREPRO imagefilename.IMG. The PC will
       
 12244 		   then wait for the Protea to lead communications.
       
 12245 
       
 12246 		   Now run the REPRO program on your Protea. Make sure you do
       
 12247 		   not remove mains power during the reprogramming process.
       
 12248 
       
 12249 		   Progress will be reported on the screen of the PC.
       
 12250 
       
 12251 		   If an error is detected during the reprogramming process,
       
 12252 		   then the program on the Protea will just restart - erasing
       
 12253 		   all the flash chips again and then programming them.
       
 12254 
       
 12255 		   This means that if you interrupt the PC program, no
       
 12256 		   disaster will occur. If you decide you are programming the wrong
       
 12257 		   image in the middle of the process, then just escape from the PC
       
 12258 		   program, get the correct image on your PC and restart
       
 12259 		   PREPRO with this image. By the time you have done this,
       
 12260 		   the Protea will have timed out and will have decided to
       
 12261 		   restart.
       
 12262 
       
 12263 		4) Added Gillian's bug fix for TTime::MonthsFrom() and
       
 12264 		   TDateTime::SetHour()
       
 12265 
       
 12266 		5) Changed EWSRV.EXE so that it hunts for ESHELL.EXE on all
       
 12267 		   drives from A: to Z:
       
 12268 
       
 12269 		6) Upgraded BOOTROM.BIN to the new E32TOOLS(36)
       
 12270 
       
 12271 
       
 12272 2) SteveG
       
 12273 		1) Fixed bug in Des::AppendNumUC which converted the whole
       
 12274 		   descriptor to uppercase rather than just the appended number
       
 12275 
       
 12276 		2) Added simple profiling for ARM builds, which counts the
       
 12277 		   number of times a function or section of code is executed
       
 12278 		   and the time taken in ticks. A later version will be
       
 12279 		   more accurate (using a 512kHz timer).
       
 12280 
       
 12281 		   To use this, surround the section of code to be tested with:
       
 12282 
       
 12283 		   __PROFILE_START(n)
       
 12284 		   and
       
 12285 		   __PROFILE_END(n)
       
 12286 
       
 12287 		   where n is a number between 0 and 7 inclusive. You use upto
       
 12288 		   8 profiles, which can be nested if necessary. You will need
       
 12289 		   to use the RDebug class to access the results as follows:
       
 12290 
       
 12291 		   TInt E32Main()
       
 12292 			   {
       
 12293 			   RDebug debug;
       
 12294 
       
 12295 			   debug.ProfileReset(); // Clear readings & reset counts
       
 12296 
       
 12297 			   __PROFILE_START(0);
       
 12298 			   <test code>
       
 12299 			   __PROFILE_END(0);
       
 12300 
       
 12301 			   SProfileInfo profile;
       
 12302 
       
 12303 			   debug.ProfileResult(profile);
       
 12304 			   }
       
 12305 
       
 12306 		   SProfileInfo and RDebug are defined in E32SVR.H.
       
 12307 
       
 12308 		   SProfileInfo is defined as:
       
 12309 
       
 12310 		   struct SProfileInfo
       
 12311 			   {
       
 12312 			   TInt iCount[8];
       
 12313 			   TUint iTimes[8];
       
 12314 			   }
       
 12315 
       
 12316 		   RDebug::ProfileResults returns the counts and times
       
 12317 		   for all 8 profiles, even if you are only using 1 profile.
       
 12318 
       
 12319 		3) ARM coded the following E32 routines which were dog slow,
       
 12320 		   and changed the relevent descriptor functions to use these
       
 12321 		   new functions rather than their own copying code
       
 12322 
       
 12323 		   Mem::Copy
       
 12324 		   Mem::Move
       
 12325 		   Mem::Swap
       
 12326 		   Mem::Fill
       
 12327 		   Mem::Compare
       
 12328 
       
 12329 		   TDes8::AppendNum
       
 12330 		   TDes8::AppendNumUC
       
 12331 
       
 12332 		   and added ARM code for signed or unsigned integer divide
       
 12333 		   by 2,4,5,7,8,10 and 16, which will improve the modulo
       
 12334 		   function as well.
       
 12335 
       
 12336 		   Speed improvements, TDes::AppendNum()
       
 12337 
       
 12338 		   TDes8::AppendNum has been optimised for hex, decimal, octal
       
 12339 		   and binary conversions, and is improved for all other
       
 12340 		   conversions as well.
       
 12341 
       
 12342 		   TDes::AppendNum(num,EHex)     is now  614% faster
       
 12343 		   TDes::AppendNum(num,EDecimal) is now  611% faster
       
 12344 		   TDes::AppendNum(num,EOctal)   is now  751% faster
       
 12345 		   TDes::AppendNum(num,EBinary)  is now 1322% faster
       
 12346 
       
 12347 		   The uppercase conversions will be the same speed as the
       
 12348 		   lowercase ones, but the %age increase will be greater due
       
 12349 		   to the fact that the string is worked out in uppercase rather
       
 12350 		   than converting the descriptor to uppercase after the conversion,
       
 12351 		   as was done in the CPP version.
       
 12352 
       
 12353 		   Speed improvements, Mem functions
       
 12354 
       
 12355 		   Mem::Fill is now 236% faster for word aligned buffers, and
       
 12356 		   around 400% faster for non word aligned buffers, which were
       
 12357 		   slow before
       
 12358 
       
 12359 		   Mem::Swap is now 975% faster for buffers which have the same
       
 12360 		   word or non-word alignment and around 160% faster for buffers
       
 12361 		   which have different alignments to each other
       
 12362 
       
 12363 		   Mem::Move and Mem::Copy are 330% faster for word aligned
       
 12364 		   buffers. For buffers with the same byte alignment, the speed
       
 12365 		   increase is around 600%. If the two buffers have different
       
 12366 		   alignments to each other, the increase is around 157%.
       
 12367 		   Mem::Move will be slightly faster than Mem::Copy as it knows
       
 12368 		   the buffers are aligned by definition of the function.
       
 12369 
       
 12370 		   Mem::Compare: no figures yet, but descriptor compares are
       
 12371 		   around 220% faster, although this depends on what you're
       
 12372 		   comparing
       
 12373 
       
 12374 		   Speed improvements, Integer division
       
 12375 
       
 12376 		   No speed measurements on this, but for divide by 16,8,4,2
       
 12377 		   should be pretty big, and the divide by 10 seems to be around
       
 12378 		   200% faster. Much hair missing after realising that the GCC
       
 12379 		   routine __umodsi3 in UP_GCC.CPP (which returns the remainder
       
 12380 		   of a division), doesn't actually 'destroy r3' as it states in
       
 12381 		   the cpp file, it returns the quotient in r3, which is relied
       
 12382 		   upon in divide routines which call __umodsi3.
       
 12383 
       
 12384 		4) DeBugger. Drastic unimprovements to get a working version,
       
 12385 		   which is now what we have :-)) The debugger will now not
       
 12386 		   single step into EUSER or certain other DLLs, as this
       
 12387 		   causes problems on the ARM build. As the ARM processor
       
 12388 		   does not have any single step or trace mode, all single
       
 12389 		   stepping is done by looking at the next instruction to
       
 12390 		   be executed, working out where the PC will be if that
       
 12391 		   instruction is executed, and setting a breakpoint at that
       
 12392 		   address. Stepping into EUSER or certain other DLLs causes
       
 12393 		   certain death as any thread could hit that breakpoint
       
 12394 		   before the thread being stepped. Although code has been
       
 12395 		   written to silently step any thread over a breakpoint
       
 12396 		   it shouldn't stop at, serious problems occur if the
       
 12397 		   kernel hits the breakpoint while in supervisor mode or similar.
       
 12398 
       
 12399 		   A document on how to use GDB is on R:\E32\DOCS\GDB.DOC.
       
 12400 		   Contact me on x625 if you are daring enough to try and use
       
 12401 		   the most excellent GDB software.
       
 12402 
       
 12403 		   If you wish to use the debugger, you need to include
       
 12404 		   D_GDB.EXE in your ROM build. Please ensure this is AFTER
       
 12405 		   euser.dll in the ROM and BEFORE anything you debug.
       
 12406 		   The debugger will not single step into any part of the ROM
       
 12407 		   that is before D_GDB.EXE. This is a quick 'bodge' to get
       
 12408 		   around the problem mentioned above, and allows a quick
       
 12409 		   method of changing what you can and can't single step
       
 12410 		   into.
       
 12411 
       
 12412 3) Rog
       
 12413 		1) Added CAsyncOneShot and CAsyncCallBack. These two active object
       
 12414 		derived classes are like a single use CIdle. They can also be used
       
 12415 		to transfer a thread of control between two threads. Because of the
       
 12416 		way they work both classes are added to the current active scheduler
       
 12417 		when they are created.
       
 12418 
       
 12419 		2) Added delta timer class. CDeltatimer is a resource efficient timer
       
 12420 		based on a delta queue and a single RTimer. Requests are identified by
       
 12421 		TTimerHandles which are returned from CDeltaTimer::Queue and may be
       
 12422 		passed to CDeltaTimer::Remove.
       
 12423 
       
 12424 		3) Added the fast timer driver to the source release. Due to beta
       
 12425 		deadlines work on the fast timer has ceased.
       
 12426 
       
 12427 4) Matthew
       
 12428 		1) Various changes to the sound LDD and PDDs. The main change is that
       
 12429 		buffering in now done entirely within the LDD.
       
 12430 
       
 12431 		2) Renamed TTime::SetNow() to HomeTime(); TTime::SetUniversal() to
       
 12432 		UniversalTime() and User::SetSystemTime() to SetHomeTime(). The
       
 12433 		"system time" is now universal time ie GMT. Home time takes into
       
 12434 		account any daylight saving and time zone.
       
 12435 
       
 12436 		3) Changes to TLocale - added SpaceBeforeAmPm and changed the way
       
 12437 		daylight saving is handled.
       
 12438 
       
 12439 		4) Fixed bug in second queue which caused absolute timers to run twice
       
 12440 		as fast as they should have done.
       
 12441 
       
 12442 		5) Implemented RHeap::CompressAll().
       
 12443 
       
 12444 5) Jane
       
 12445 		1) Added changes from Steve Townsend to optimize region code.
       
 12446 
       
 12447 		2) Added timer fixes to thread clean-up code
       
 12448 
       
 12449 		3) Fixed the RDebug death under WINS, and implemented RDebug::Print using
       
 12450 		   OutputDebugString to the debug window.
       
 12451 
       
 12452 6) Pete		1) Pc card Controller now allows allocation of card memory chunks smaller
       
 12453 		than page size.
       
 12454 		2) Various omissions to Pc Card Controller now attended to.
       
 12455 		3) Improvements to media change handling.
       
 12456 		4) Internal ram drive supports size changing.
       
 12457 		5) TLocalDrive::Format() now calls back during formatting.
       
 12458 		6) TLocalDrive::Caps() returns more than just size.
       
 12459 
       
 12460 7) Morgan	1) Thread and Process protection.
       
 12461 				   The kernel, file server, null thread, supervisor are now marked as
       
 12462 				   system threads/processes.  They are also Protected.
       
 12463 				   Any attempt to Panic, Kill, Terminate, SetPriority on a protected thread
       
 12464 				   will shoot the caller.
       
 12465 				   A thread's status can be changed with:
       
 12466 				   RThread::SetProtected(TBool)
       
 12467 				   RThread::SetSystem(TBool)
       
 12468 				   RThread::SetNotifyIfDie(TBool)       (was SetServer)
       
 12469 				   RThread::SetMark(TBool)
       
 12470 				   Similar functions exist for processes.
       
 12471 				   The Exec functions (Set)Mark, and (Set)Server have been replaced with
       
 12472 				   (Set)Flags functions for threads and processes to implement this.
       
 12473 
       
 12474 				   T_PS.EXE displays thread and process status.
       
 12475 
       
 12476 				2) AppendFormat and AppendFormatList changes.
       
 12477 				   Both can now take a TDes[8|16]Overflow handler which is called when the
       
 12478 				   formatting operation would write to the descriptor beyond its max length.
       
 12479 				   When this happens and no overflow handler is supplied, the default action
       
 12480 				   is to panic.
       
 12481 
       
 12482 				3) TTime::Format has become TTime::FormatL
       
 12483 
       
 12484 				4) Added CServer *CSession::Server() to return the session's server.
       
 12485 				   Added protected member TDblQueIter<CSession *> CServer::iSessionQ, an
       
 12486 				   itterator over the server's sessions.
       
 12487 
       
 12488 				5) Name changes
       
 12489 				   TTimeIntervalShortMicroSeconds -> TTimeIntervalMicroSeconds32
       
 12490 				   AfterInMicroSeconds            -> After
       
 12491 				   TStartup                       -> TMachineStartupType
       
 12492 				   and some Americanisations
       
 12493 
       
 12494 				6) Defined __ARRAY_NO_PTRS__
       
 12495 				   and *_CAST operators
       
 12496 				   Changed __ASSERT_*(c,p) to use (... p ,0)
       
 12497 
       
 12498 				8) Removed huffman encoding/decoding from TBuf
       
 12499 
       
 12500 				9) Implemented User::IsRomAddress(TAny *)
       
 12501 
       
 12502 		10) Added a checksum member to TRomHeader
       
 12503 
       
 12504 
       
 12505 
       
 12506 Version 0.01.063
       
 12507 ================
       
 12508 (Made by Graham 3 July '96)
       
 12509 
       
 12510 1) SteveG
       
 12511 		1) Applied patches to the GCC tools and rebuilt them all, with lotsa
       
 12512 	   help from Nick Twyman. You now no longer need template instantiations,
       
 12513 	   and the code saving seems to be somewhere between a massive 8 and 13%,
       
 12514 	   although the exact figure will vary between projects. You will need
       
 12515 	   to remove all occurances of 'template class.....' from your .cpp files.
       
 12516 
       
 12517 		2) Altered the whole of E32 to compile with the new tools, removing every
       
 12518 	   'template class...' line from all the source files, altering all the
       
 12519 	   MAK files etc. The new compiler/linker are a lot more nit-picky, and
       
 12520 	   you will experience several warnings such as 'class xxx only defines
       
 12521 	   private constructors and has no friends' or 'taking address of temporary'.
       
 12522 	   Handcrafted ARM MAK files will need changing by hand, v033 of MAKTRAN will
       
 12523 	   take care of any changes for you. Any handmade ARM MAK files will need
       
 12524 	   changing as follows:
       
 12525 
       
 12526 	   change all occurances of -m6 to -mcpu=arm710 -mapcs-32 and remove all
       
 12527 	   instances of -fno-implicit-templates. Add in -fvtable-thunks after the
       
 12528 	   -fcheck-new flag. To remove the warnings 'class xxxx only defines
       
 12529 	   private constructors and has no friends' add in the flag
       
 12530 	   -Wno-ctor-dtor-privacy after the -Wall flag.
       
 12531 
       
 12532 	   If anyone has any problems with the new tools, please hesitate to
       
 12533 	   contact me on x625.
       
 12534 
       
 12535 	   3) Wrote various benchmark tests to identify areas of E32 that could
       
 12536 	   improve with being written in ARM code. Start made on testing speed
       
 12537 	   increases for various descriptor/memory/number functions in ARM code.
       
 12538 
       
 12539 	   4) Debugger (Arrrrrrrrrgh :-(
       
 12540 	   Source level debugging now possible to some extent running a debug
       
 12541 	   .exe file from the E32 text shell (if you can bear to use Gdb).
       
 12542 	   No success with an eikon app yet. Identified some problems caused
       
 12543 	   by single stepping through user functions which my breakpoint
       
 12544 	   handler uses (memcopy, array/descriptor functions etc). The first
       
 12545 	   thing my breakpoint handler does is to clear any breakpoints in
       
 12546 	   the ROM, but in doing so it cannot use any functions which might have
       
 12547 	   breakpoints set in them.
       
 12548 
       
 12549 2) Matthew
       
 12550 	1) Changed RThread::Read() and Write() so that they leave on errors.
       
 12551 		   This fixes HA-158 - CSession::WriteL(...) panics caller.
       
 12552 
       
 12553 	2) Added RThread::SetInitialParameter() and RThread::GetHeap(),
       
 12554 		   fixing HA-63, so you can now create an RThread, find its heap,
       
 12555 		   alloc a cell in that heap, pass the pointer to that cell as the
       
 12556 		   parameter to the thread and the thread can call User::Free on it.
       
 12557 
       
 12558 	3) Made KCurrentThreadHandle have the NoClose flag set, so that
       
 12559 		   Close()ing an RThread which hasn't been Create()ed is harmless.
       
 12560 
       
 12561 	4) RThread and RProcess::LogonCancel() now return KErrGeneral if
       
 12562 		   you are not logged on.
       
 12563 
       
 12564 3) Graham
       
 12565 		1) Built and released Protea Rev 1 (P1) variant of MARM.
       
 12566 
       
 12567 		2) Made WeekNoInYear and DayNoInYear const correct.
       
 12568 
       
 12569 		3) Removed 'API Freeze Technology'
       
 12570 
       
 12571 		4) Added the REPRO program which must be included (In PETRAN
       
 12572 		   format) in all P1 variant ROMs. NB this program does not
       
 12573 		   work yet.
       
 12574 
       
 12575 		5) Re-included Andrew Theolke's fix for Single Queues. This
       
 12576 		   means that everyone will have to remove their work-arounds
       
 12577 
       
 12578 		6) Fixed the HAL API problem with UserHal::BacklightBehaviour
       
 12579 
       
 12580 		7) Reintroduced stack frames into the debug MARM builds of EKERN
       
 12581 		   and EUSER.
       
 12582 
       
 12583 4) Jane.
       
 12584 	1) Fixed linear address allocation problem with hardware chunks.
       
 12585 
       
 12586 	2) Stopped a false read of CMOS data/time information under X86
       
 12587 		   killing the kernel.
       
 12588 
       
 12589 	3) Fixed bug HA-150 - Rng was returning T rather than TBool
       
 12590 
       
 12591 	4) Removed J Day hacks and old functionality for RAM loading
       
 12592 		   of exes and dlls, and added support for new E32Image format etc.
       
 12593 
       
 12594 	IMPORTANT NOTE - You must now update to the latest version of E32TOOLS. This
       
 12595 		version of E32/F32 is incompatible with versions of tools pre 029.
       
 12596 
       
 12597 5) Morgan
       
 12598 	1) Added WINS Led simulation.  To turn the Leds on and off use:
       
 12599 	   UserHal::ModifyLedMask(TUint aClearMask, TUint aSetMask);
       
 12600 	   with the masks, KLedMaskRed1 and KLedMaskGreen1
       
 12601 
       
 12602 	2) Removed the protea bitmap from the kernels WINS resource.
       
 12603 	   The bitmap is now loaded from \E32\KPWINS\PROTEA.BMP at runtime.
       
 12604 
       
 12605 	3) Implemented TSecondQ::SystemTimeChanged()
       
 12606 
       
 12607 		   User::SetSystemTime() now completes all pending timers on the
       
 12608 		   K::SecondQ with KErrAbort.
       
 12609 
       
 12610 		4) Added DTimer::Abort() to support this.
       
 12611 
       
 12612 
       
 12613 Version 0.01.062
       
 12614 ================
       
 12615 (Made by Graham, 31st May 1996)
       
 12616 
       
 12617 
       
 12618 1) Graham       Fixed MARM Debug mode
       
 12619 
       
 12620 2) Pete         Added Media change handling. This allows CF cards to
       
 12621 				be inserted or removed without the need to reset. All
       
 12622 				that is now required is that the DOOR switch is
       
 12623 				depressed during these operations.
       
 12624 
       
 12625 				NB Do not attempt to use the CF card (or even boot up
       
 12626 				a rack with a CF card inserted) if your rack does not
       
 12627 				have a special capacitor fitted to counteract a fault
       
 12628 				in the ETNA chip (ASIC12)
       
 12629 
       
 12630 Version 0.01.061
       
 12631 ================
       
 12632 (Made by Graham, 30th May 1996)
       
 12633 
       
 12634 1) Jane
       
 12635 		1. Implemented E32 Proposal: TDes8::Append(const TDesC16&)
       
 12636 
       
 12637 		2. Implemented E32 Proposal: calling RMessage::Complete twice panics server not kernel
       
 12638 
       
 12639 		3. Implemented E32 Proposal: priority enumeration for active objects
       
 12640 
       
 12641 		4. Fixed bug HA-93: referring to a dead thread panics caller
       
 12642 
       
 12643 2) Matthew
       
 12644 		Fixed bug HA-102: K::BeepComplete can be catastrophic
       
 12645 
       
 12646 3) Rog          Added IrDA support to serial LDD and COM1 PDDs
       
 12647 				Enabling Irda will automatically set framing and
       
 12648 				handshaking to SIR standards (i.e. 8N1 None)
       
 12649 
       
 12650 				Added CheckConfig()=0 to PDDs this allows PDDS to
       
 12651 				furtle with the default configuration before the
       
 12652 				driver is created (in specific it allows the Etna
       
 12653 				driver to disable the Fifo.)
       
 12654 
       
 12655 4) Pete         Added ATA media driver for Compact Flash cards
       
 12656 				(MEDATA.PDD). This allows read/write/format of CF cards
       
 12657 				via TLocalDrive. However, media change interrupts aren't
       
 12658 				handled yet. Therefore racks must be powered down or Reset
       
 12659 				before inserting or removing a card to remove power
       
 12660 				from the CF card socket.
       
 12661 
       
 12662 NB Use E32TOOLS(028) - this release contains a .EXE which exposes
       
 12663 a bug in earlier versions of ROMBUILD. You should also use these
       
 12664 tools because the new MAKTRAN causes -fcheck-new to be introduced
       
 12665 into the gcc compiler options.
       
 12666 
       
 12667 Version 0.01.060
       
 12668 ================
       
 12669 (Made by Graham, 23rd May 1996)
       
 12670 
       
 12671 1) Pete
       
 12672 		1.  General enhancement to TLocalDrive and its corresponding
       
 12673 			kernel side objects to support Media Drivers. TDriveBase/TPlatDrive
       
 12674 			now replaced with TLocDrv which is platform independant.
       
 12675 
       
 12676 		2.  TLocalDrive::Connect() can now take a reference to a
       
 12677 			media change flag (TBool).
       
 12678 
       
 12679 		3.  Internal Ram Drive now implemented using Media Driver.
       
 12680 
       
 12681 		4.  Further improvements to RPcCardController.
       
 12682 
       
 12683 2) Rog
       
 12684 		1.  All but a complete re-write of serial LDD. Throughput much
       
 12685 			increased.
       
 12686 
       
 12687 		2.  Support for COM1 on RackC is now available from the new
       
 12688 			DATXPC1.PDD.
       
 12689 
       
 12690 		3.  Hardware handshaking is currently broken.
       
 12691 
       
 12692 3) Graham
       
 12693 		1.  Etna support fixed.
       
 12694 
       
 12695 		2.  Removed redundant .FRZ files
       
 12696 
       
 12697 4) Jane
       
 12698 		1. Added support for RAM loading of dlls and exes. Currently entrypoints
       
 12699 		   are called in the same manner as for ROM exes and dlls, i.e. only once
       
 12700 		   for a process attach, and never for a thread attach/detach, or a process
       
 12701 		   detach.
       
 12702 
       
 12703 		   IMPORTANT NOTE: To support this, the format of the rom headers has
       
 12704 		   changed, and there are new rom building tools - see E32TOOLs release notes.
       
 12705 		   The old tools are incompatible with E32 060.
       
 12706 
       
 12707 		2. Added RDebug::Print(TRefByValue<const TDesC> aFmt,...) which outputs
       
 12708 		   text to COM1 from user side code as an aid in debugging.
       
 12709 
       
 12710 
       
 12711 Version 0.01.059
       
 12712 ================
       
 12713 (Made by Colly)
       
 12714 
       
 12715 1) Fixed RLibrary::LoadExact() which would not load more than 1
       
 12716    DLL at a time.
       
 12717 
       
 12718 Version 0.01.058
       
 12719 =============[==
       
 12720 (Made by Matthew)
       
 12721 
       
 12722 1) Colly
       
 12723 	1. Changed the _S8,_S16 and _S macros to return
       
 12724 
       
 12725 		const TText*
       
 12726 
       
 12727 	   rather than
       
 12728 
       
 12729 		TText*
       
 12730 
       
 12731 	   which was allowing writeable descriptors to be constructed illegally
       
 12732 	   over strings. i.e.
       
 12733 
       
 12734 		TPrtC(_S("Test string"));
       
 12735 
       
 12736 	   Bad news as strings are in the text segment and read only.
       
 12737 	   Compiler will now refuse to compile the above code.
       
 12738 
       
 12739 	2. Renamed class TGuid to TUid and changed the representation to just
       
 12740 	   a signed integer (to keep Bill happy). Added the class TUidC where
       
 12741 	   C stands for constructor which just has two constructor, a default
       
 12742 	   constructor which effectively sets the UID to KNullUid and one
       
 12743 	   taking an integer. Given a uid of 0x10000000 then TUidC(0x10000000)
       
 12744 	   will construct the right UID. KNullUid is unfortunately implemented
       
 12745 		   as a #define to avoid class consts.
       
 12746 
       
 12747 	   Everywhere that guid was used has now been changed to uid which
       
 12748 	   effected RLibrary and the registry functions.
       
 12749 
       
 12750 	   Renamed the uid test DLL from T_UID to T_DUID and the test program
       
 12751 	   from T_GUID to T_UID.
       
 12752 
       
 12753 	3. Changed CObjectCon::FindByName() and CObjectCon::FindByFullName()
       
 12754 	   to use MatchF() instead of Match(). CObject::FullName() used to
       
 12755 	   concatenate Owner().Name() with Name(). It now concatenates
       
 12756 	   Owner().FullName() with Name().
       
 12757 
       
 12758 	4. Changed TCreateProcessInfo and TCreateLibraryInfo to have a TUid
       
 12759 	   which in due course will be supplied by the loader from the
       
 12760 	   .exe and .dll headers. Added the TUid to DProcess and DLibrary.
       
 12761 	   Also added iGeneration to DProcess so that more than one process
       
 12762 	   can be run at the same time.
       
 12763 
       
 12764 	5. Changed the name of a library to include the TUid::Name().
       
 12765 		   If library t_test.dll is loaded and it has a TUid of 0x10000001
       
 12766 		   then its name will be:
       
 12767 
       
 12768 		t_test[10000001]
       
 12769 
       
 12770 	6. Changed the name of a Process() to include the TUid::Name()
       
 12771 		   followed by iGeneration as a 4 digit decimal value. If process
       
 12772 		   t_test.exe is loaded and it has a TUid of 0x10000001 and
       
 12773 	   it is the the third copy running its name will be:
       
 12774 
       
 12775 		t_test[10000001]0002
       
 12776 
       
 12777 	7. Added Mem::Crc()
       
 12778 
       
 12779 	   which performs the 16 bit CCITT checksum. It should be called
       
 12780 	   for a descriptor as follows:
       
 12781 
       
 12782 		TPtrC8 des=_L("Check string");
       
 12783 		TUint16 crc=0;
       
 12784 		Mem::Crc(crc,des.Ptr(),des.Length());
       
 12785 
       
 12786 	8. Added the TUidType class. This class packages three UIDs
       
 12787 	   together. It is intended to provide Type, SubType and
       
 12788 		   SubSubType together for the typimng mechanism in E32. It
       
 12789 		   has the following important functions:
       
 12790 
       
 12791 		   TUidType::IsValid()
       
 12792 				TRUE if at least one of the UIDs is not KNullUid
       
 12793 		   TUidType::IsPresent(TUid aUid)
       
 12794 				TRUE if any one of the UIDs == aUid
       
 12795 		   TUidType::MostDerived()
       
 12796 				{
       
 12797 				if (iUid[2]!=KNullUid)
       
 12798 					return(iUid[2]);
       
 12799 				if (iUid[1]!=KNullUid)
       
 12800 					return(iUid[1]);
       
 12801 				return(iUid[0]);
       
 12802 				}
       
 12803 
       
 12804 	9. Added the TCheckedUid class. This class packages a TUidType
       
 12805 	   together with a checksum. It is intended to be placed at the
       
 12806 	   beginning of all E32 binary files as follows:
       
 12807 
       
 12808 		TCheckedUid check(TUidType(0x10000001)); // Created the header
       
 12809 		RFile f;
       
 12810 		f.Open(theFs,_L("binary.file"),EFileWrite);
       
 12811 		f.Write(check.Des()); // Write the descriptor
       
 12812 		....
       
 12813 
       
 12814 	   The class can be reinstantiated from the binary file as follows
       
 12815 
       
 12816 		TPckgBuf<TCheckedUid> check;
       
 12817 		RFile f;
       
 12818 		f.Open(theFs,_L("binary.file"),EFileRead);
       
 12819 		f.Read(check); // Read the signature
       
 12820 		if (check().Type().IsValid()) // Is it a valid signature
       
 12821 
       
 12822 	10.Added a new type TPassword which is just a 16 character buffer.
       
 12823 
       
 12824 	11.Added the new abstract class CSecurityBase which provides
       
 12825 	   encryption/decryption functions given a TPassword. This is
       
 12826 	   polymorphic to allow other security systems to be
       
 12827 	   substituted at a later date. One implementation of a security
       
 12828 	   system is provided which implements a polyalphabetic
       
 12829 	   substitution which is similar to that on E32 but no great shakes.
       
 12830 
       
 12831 	   In order to use CSecurityBase merely instantiate one with
       
 12832 	   Security::NewL(). By default the security object will be
       
 12833 	   initialsed with a zero length password and disabled. To
       
 12834 	   change its value use SetL(_L(""),new password). Alternatively
       
 12835 	   it can be re-initialised with a descriptor that was previously
       
 12836 	   extracted from a CSecurityBase with CSecurityBase::SecurityData().
       
 12837 	   The data returned by CSecurityBase::SecurityData() is intended to
       
 12838 	   be saved to file and acts as a token for the associated password.
       
 12839 
       
 12840 	   Before encrypting or decrypting data use PrepareL() and there
       
 12841 	   after make continuous calls to EncryptL() or DecryptL().
       
 12842 
       
 12843 	   Hopefully the other functions are self explanatory.
       
 12844 
       
 12845 	   Added test code T_SEC.CPP to test the security system.
       
 12846 
       
 12847 	   NOTE: Passwords are currently case sensitive.
       
 12848 
       
 12849 	12.Added the machine password control functions
       
 12850 
       
 12851 		class Password
       
 12852 			{
       
 12853 		public:
       
 12854 			IMPORT_C static TInt IsEnabled();
       
 12855 			IMPORT_C static TInt SetEnable(const TPassword& aPassword,
       
 12856 										TBool aIsEnabled);
       
 12857 			IMPORT_C static TInt IsValid(const TPassword& aPassword);
       
 12858 			IMPORT_C static TInt Set(const TPassword& anOldPassword,
       
 12859 									const TPassword& aNewPassword);
       
 12860 			};
       
 12861 
       
 12862 	   Password::IsEnabled() returns the current state of the password
       
 12863 	   enabled	flag. Password::SetEnabled() allows the state to be
       
 12864 	   changed but only if the correct password is supplied.
       
 12865 
       
 12866 	   Password::IsValid() returns TRUE if the password is valid.
       
 12867 
       
 12868 	   Password::Set() allows the password to be changed
       
 12869 
       
 12870 	   By default the password is _L("")
       
 12871 
       
 12872 	13.Added the notifier functions:
       
 12873 
       
 12874 		TInt User::Notify(const TDesC& aLine1,const TDesC& aLine2,
       
 12875 						  const TDesC& aBut1);
       
 12876 		TInt User::Notify(const TDesC& aLine1,const TDesC& aLine2,
       
 12877 						  const TDesC& aBut1,const TDesC& aBut2);
       
 12878 		TInt User::Notify(const TDesC& aLine1,const TDesC& aLine2,
       
 12879 						  const TDesC& aBut1,const TDesC& aBut2,
       
 12880 						  const TDesC& aBut3);
       
 12881 
       
 12882 	   The function will attempt to connect to a server called
       
 12883 	   __NOTIFIER_NAME (#define in E32SVR.H) and then send a message
       
 12884 	   ENotifierNotify with P0() pointing to a TPckgBuf<TNotifyInfo>.
       
 12885 	   It is allowable for iButton[1] or iButton[2] to be NULL in which case
       
 12886 	   one, two or three button should occur in the dialog. If aBut1
       
 12887 	   is picked then 0 is returned, 1 for aBut2 and 2 for aBut3. Any
       
 12888 	   other error such as their being no Notifier or a result being
       
 12889 	   wrong will result in a return of KErrGeneral.
       
 12890 		14.Added Mem::Move() which has the same API as Mem::Copy(). Move()
       
 12891 		   assumes that src and trg are 2^2 aligned and that aLength is a
       
 12892 		   multiple of 4.
       
 12893 		15.Added a new time interval TTimeIntervalShortMicroSeconds
       
 12894 		   which is an interval in micro seconds but stored in a 32
       
 12895 		   integer. This is the new interval when specifying After()
       
 12896 		   delays. Note that I have left the low level kern services
       
 12897 		   in ticks for now.
       
 12898 		16.Renamed
       
 12899 			   RTimer::After() to RTimer::AfterInMicroSeconds()
       
 12900 			   CTimer::After() to CTimer::AfterInMicroSeconds()
       
 12901 			   User::After() to User::AfterInMicroSeconds()
       
 12902 			   CPeriodic::Start() to CPeriodic::StartInMicroSeconds()
       
 12903 		   to aid the conversion to the new interval. When converting
       
 12904 		   just multiply the value being passed originally by 100000
       
 12905 		   which is ofcourse the number of microseconds in a tenth of
       
 12906 		   a second.
       
 12907 		17).RSessionBase::CreateSession() and
       
 12908 			RSessionBase::SetRetry() both take a
       
 12909 			TTimeIntervalShortMicroSeconds as the the delay interval.
       
 12910 		18).Fixed mnt.cmd by adding %_F32VER% as the second parameter
       
 12911 			of all recursive getXXX calls to fix defect HA-121 reported
       
 12912 			by DavidW.
       
 12913 		19).Made the Timer services TicksToTenths() a bit easier to
       
 12914 			implement and OneShot() timing slightly more accurate.
       
 12915 
       
 12916 2) Geert
       
 12917 
       
 12918 		1. Removed CArrayFixBase::DestroyAll(). Use the new
       
 12919 		CArrayPtr<T> class template instead. (See below.)
       
 12920 
       
 12921 		2. Added support for objects that can only ever
       
 12922 		live inside an array. E.g. support for a variable
       
 12923 		array of TBufC<100000>, where the elements are just
       
 12924 		big enough to contain the actual data in the
       
 12925 		buffer.
       
 12926 
       
 12927 		CArrayFix<T>::ExpandL(TInt anIndex) opens up a slot
       
 12928 		at anIndex by shifting the elements after anIndex
       
 12929 		and returns a reference to the new element. The new
       
 12930 		element is constructed in place.
       
 12931 		ArrayFix<T>::ExtendL() is equivalent to ExpandL(Count()).
       
 12932 		CArrayVar<T>::ExpandL(TInt anIndex,TInt aLength)
       
 12933 		opens up a slot of size aLength at anIndex by and
       
 12934 		is otherwise the same as the fixed record case.
       
 12935 		CArrayVar<T>::ExtendL(TInt aLength) is equivalent
       
 12936 		to ExpandL(Count(),aLength).
       
 12937 
       
 12938 		3. Added repeated insertion and re-sizing functions
       
 12939 		to CArrayFix.
       
 12940 
       
 12941 		CArrayFix<T>::InsertL(TInt anIndex,const T& aRef,TInt aReplicas)
       
 12942 		inserts a copy of aRef, aReplicas times.
       
 12943 		CArrayFix<T>::ResizeL(TInt aCount)
       
 12944 		extends or shrinks the array as needed for it to
       
 12945 		contain aCount elements. Any new elements are
       
 12946 		bitwise copies of a default-constructed T.
       
 12947 		CArrayFix<T>::ResizeL(TInt aCount,const T& aRef)
       
 12948 		extends or shrinks the array like ResizeL(TInt).
       
 12949 		New elements, however, are bitwise copies of aRef.
       
 12950 
       
 12951 		NB. As a result of these changes, the element type
       
 12952 		has to have an accessible default constructor. If
       
 12953 		you have a CArrayXxx<TYyy>, and some custom
       
 12954 		TYyy::TYyy(TZzz aZzz) exists, a TYyy::TYyy() will
       
 12955 		have to be added. A knock-on effect is that C-style
       
 12956 		arrays can no longer be supported as element types.
       
 12957 
       
 12958 		Note that array elements are still bitwise copies,
       
 12959 		and will be Mem::Copy()-ed around during their
       
 12960 		lifetime. Having the constructor called merely
       
 12961 		guarantees that they'll be bitwise copies of a
       
 12962 		properly constructed object, rather than random
       
 12963 		garbage. In keeping with this, array functions may
       
 12964 		construct instances of the element types, but they
       
 12965 		will never destroy them. Element types need not
       
 12966 		have an accessible destructor.
       
 12967 
       
 12968 		4. Changed CArrayXxx::InsertIsqL() and added the
       
 12969 		new funcion InsertIsqAllowDuplicatesL()
       
 12970 
       
 12971 		CArrayFix<T>::InsertIsqL(const T& aRef,TKeyArrayFix &aKey)
       
 12972 		and
       
 12973 		CArrayFix<T>::InsertIsqAllowDuplicatesL(const T& aRef,TKeyArrayFix &aKey)
       
 12974 		return the new element's index.
       
 12975 		InsertIsqL() leaves with KErrAlreadyExists if a
       
 12976 		duplicate is discovered, and
       
 12977 		InsertIsqAllowDuplicatesL() inserts the element
       
 12978 		after any duplicate. The existing InsertIsqL(),
       
 12979 		returning KErrNone or KErrAlreadyExists, and taking
       
 12980 		a TAllowDuplicates argument is withdrawn.
       
 12981 		In the case of variable-element arrays, the
       
 12982 		signatures are
       
 12983 		CArrayVar<T>::InsertIsqL(const T& aRef,TInt aLength,TKeyArrayFix &aKey)
       
 12984 		and
       
 12985 		CArrayVar<T>::InsertIsqAllowDuplicatesL(const T& aRef,TInt aLength,TKeyArrayFix &aKey).
       
 12986 
       
 12987 		Note that the meaning of InsertIsqL()'s return
       
 12988 		value has changed and care should be taken when
       
 12989 		porting.
       
 12990 
       
 12991 		5. Almost all the array manipulation functions in
       
 12992 		CArrayXxxBase have become public. This is to allow
       
 12993 		code to operate on incoming (typed) arrays in a
       
 12994 		type-independent way. It can be argued this reduces
       
 12995 		type-safety and encapsulation, but the most
       
 12996 		important thing is to guard against accidental
       
 12997 		misuse. This is done by providing typed functions
       
 12998 		in the template classes overriding--and hiding--all
       
 12999 		the unsafe functions.
       
 13000 
       
 13001 		6. Added functions CArrayXxx<T>::At(TInt anIndex).
       
 13002 		They are synonymous with CArrayXxx<T>::operator[]()
       
 13003 		and serve to hide the At() functions in the base
       
 13004 		classes.
       
 13005 
       
 13006 		7. Added CArrayFix<TAny>, CArrayFixFlat<TAny> and
       
 13007 		CArrayFixSeg<TAny> as well as CArrayVar<TAny> and
       
 13008 		CArrayPak<TAny>. They are hand-crafted and somewhat
       
 13009 		restricted instances of the templates, for those
       
 13010 		who wish to use a generic array; e.g., as a member
       
 13011 		of the base class in a template pair. In the case
       
 13012 		of CArrayFixXxx<TAny>, the record length is
       
 13013 		specified as a constructor parameter.
       
 13014 
       
 13015 		8. Added functions CArrayXxx::AppendL(), Find(),
       
 13016 		FindIsq() and InsertL() taking a reference to T
       
 13017 		instead of a pointer. People wishing to switch to
       
 13018 		the reference-based API may define the macro
       
 13019 		__ARRAY_NO_PTRS__, which will hide the
       
 13020 		pointer-based versions.
       
 13021 
       
 13022 		9. Added class template CArrayPtr<T> extending
       
 13023 		CArrayFix<T*>'s interface with a ResetAndDestroy()
       
 13024 		function. The function is intended as a type safe
       
 13025 		replacement for CArrayFix<CBase*>::DestroyAll().
       
 13026 		It is equivalent to a loop delete-ing all (pointer)
       
 13027 		elements, followed by Reset().
       
 13028 
       
 13029 		10. CBufBase::ExpandL(TInt aPos,TInt aLength) makes
       
 13030 		room for aLength bytes at aPos. The new contents
       
 13031 		are undefined. InsertL(Pos,aPtr,aLength) is
       
 13032 		equivalent to ExpandL(aPos,aLength) followed by
       
 13033 		Write(aPos,aPtr,aLength).
       
 13034 
       
 13035 		11. CBufBase::ResizeL(TInt aSize) expands or
       
 13036 		deletes from the buffer at the end so that its
       
 13037 		Size() becomes equal to aSize. Not to be confused
       
 13038 		with CBufFlat::SetReserveL, which has no effect on
       
 13039 		the logical size of the buffer.
       
 13040 
       
 13041 		12. CBufFlat::Capacity() reports the size the
       
 13042 		buffer can grow to without reallocation. The buffer
       
 13043 		insertion functions are guaranteed not to leave
       
 13044 		until the buffers Size() reaches or exceeds its
       
 13045 		Capacity(). A flat buffer's capacity is changed
       
 13046 		using SetReserveL().
       
 13047 
       
 13048 		13. Removed the global new operator taking a base
       
 13049 		pointer and check size; ie., TAny* operator
       
 13050 		new(TUint aSize,TAny* aBase,TInt aCheckSize)
       
 13051 
       
 13052 		Making sure at runtime that the allocated size is
       
 13053 		he same as the supplied buffer size is not a very
       
 13054 		common requirement. As it turned out, size checking
       
 13055 		was really only required for RHeap and derived
       
 13056 		classes. Supplying it with a custom RHeap::operator
       
 13057 		new(), as is now the case, is actually a cheaper
       
 13058 		solution.
       
 13059 
       
 13060 		14. Added zero-filling versions of the full set of
       
 13061 		available global new operators to CBase and removed
       
 13062 		CBase's delete operator.
       
 13063 
       
 13064 		The delete operator was there only as a workaround
       
 13065 		for a problem with the Visual C++ linker. The
       
 13066 		problem appears to be fixed in Visual C++ 4.0, so
       
 13067 		there is now no point in having the operator.
       
 13068 
       
 13069 		15. Added pragma's disabling Visual C++ warnings to
       
 13070 		do with the generation of copy constructors and
       
 13071 		assignment operators to <e32def.h>.
       
 13072 
       
 13073 		16. Added private, undefined copy constructors and
       
 13074 		assignment operators to CBase. Copying and
       
 13075 		assignment of CBase-derived classes is now
       
 13076 		prohibited by default.
       
 13077 
       
 13078 3). Graham
       
 13079 	1. Various keyboard changes.
       
 13080 
       
 13081 		2. Added HAL set and sense functions. Most are not
       
 13082 		yet implemented but will be in 059.
       
 13083 
       
 13084 4). Steve
       
 13085 	1. Debugger:
       
 13086 	Further improvement and additions to the debugger classes and the Gdb stub.
       
 13087 	Still no bug fixes back form Cygnus to allow source level debugging using
       
 13088 	Gdb. Added support for multiple thread debugging, and allowing breakpoints
       
 13089 	to be set in ROM which effect the threads you specify rather than all
       
 13090 	threads. Finalised the API for the RDebug class which is used by any
       
 13091 	debugger or debug stump program. Full details of the E32 debugger class
       
 13092 	currently in R:\E32\DOCS\RDEBUG.DOC.
       
 13093 
       
 13094 	2. Key translator:
       
 13095 	Fixed the bug where the modifier status wasn't updated on a modifier key
       
 13096 	down - it was updated on the next key up or down.
       
 13097 
       
 13098 5). Jane
       
 13099 		1. Removed saving and restoring of fs & gs in interrupt code to speed up
       
 13100 		X86 version of EPOC.
       
 13101 
       
 13102 		2.Added support for debugger in finding code address of target processes.
       
 13103 		Added MMU functions to support debugger in shadowing ROM. (Both untested).
       
 13104 
       
 13105 		3.Added process cleanup code to fix process logon - but left it commented
       
 13106 		out due to time pressure in meeting API freeze. Will be tested and in
       
 13107 		place in 059.
       
 13108 
       
 13109 		4.Added start of code supporting process and dll loading from RAM, and
       
 13110 		added dummy APIs for future additions to this. Rationalised kernel
       
 13111 		LoadLibrary functions.
       
 13112 
       
 13113 		5.Fixed stack scribble in runThread, which was causing an incorrect
       
 13114 		return status to be given to logging threads.
       
 13115 
       
 13116 6). Roger
       
 13117 	Serial LDD reliability improved. Fixed double completion bugs.
       
 13118 
       
 13119 	Eiger Serial PDD. Turned interrupts off during initial fifo priming.
       
 13120 
       
 13121 	Etna Serial PDD. Written not able to test due to a (suspected) kernel bug.
       
 13122 
       
 13123 		Further changes to the serial drivers as of Sat 4th May given
       
 13124 		to Colly.
       
 13125 
       
 13126 7). Matthew
       
 13127 	Preliminary sound Ldd and Pdds for Wins and Eiger. Currently the Wins PDD
       
 13128 	pretends to play by making random beeps for the appropriate length of time
       
 13129 	and pretends to record aLaw data by filling a bufer with silence in the
       
 13130 	appropriate time. The Eiger PDD just plays silence.
       
 13131 
       
 13132 8). Pete
       
 13133 	Improvements to Pc Card Controller and its user interface.
       
 13134 
       
 13135 	Simulation of Media Change using F5 key added to WINS (commented out for
       
 13136 	now).
       
 13137 
       
 13138 Version 0.01.057
       
 13139 ================
       
 13140 (Made by Graham, Friday 19th April)
       
 13141 
       
 13142 1) Graham
       
 13143 		1. Implemented MNT ARMALL, ARM, ARMDEB, ARMREL, ARMUDEB, ARMUREL
       
 13144 		   BTSTARMALL, BTSTARM, BTSTARMDEB, BTSTARMREL, BTSTARMUDEB,
       
 13145 		   BTSTARMUREL.
       
 13146 
       
 13147 		2. Fixed bugs in BMARM\XDUMM.MAK, XKEYB.MAK, and XXYIN.MAK
       
 13148 
       
 13149 		3. Fixed F32\BMARM\ESHELL.MAK to vary name according to
       
 13150 		   build - ESHELL.EXE, ESHELLD.EXE, ESHELLU.EXE, ESHELLUD.EXE
       
 13151 
       
 13152 		4. Updated ARM Rom building system to build debug and unicode
       
 13153 		   roms as well.
       
 13154 
       
 13155 		5. Ensured O/S and test programs build in DEBUG and UNICODE
       
 13156 		   as well as RELEASE mode.
       
 13157 
       
 13158 		6. Removed redundant LCD contrast handling from
       
 13159 		   VARMPR\VA_KEYB.CPP
       
 13160 
       
 13161 		7. Added KE_ETNA.CPP with the help of Roger and Peter.
       
 13162 
       
 13163 		8. Rationalised variant system, allowing for three MARM
       
 13164 		   variants. Each variant for a given architecture has a
       
 13165 		   two character mnemomnic:
       
 13166 
       
 13167 				PB      Protea rack B
       
 13168 				PC      Protea rack C
       
 13169 				P1      Protea version 1
       
 13170 
       
 13171 		   Each variant has an E32\ sub-directory:
       
 13172 
       
 13173 				\E32\VARMPB
       
 13174 				\E32\VARMPC
       
 13175 				\E32\VARMP1
       
 13176 
       
 13177 		   Each must contain a VA_CUST.CPP which implements class
       
 13178 		   Custom and produces an ECUST.DLL which the kernel links to.
       
 13179 		   These ECUST.DLL's are called CARMPB.DLL, CARMPC.DLL, and
       
 13180 		   CARMP1.DLL until one of them is selected to become
       
 13181 		   ECUST.DLL in the ROM.
       
 13182 
       
 13183 		   They must also include keyboard or pointer device
       
 13184 		   implementations (VA_KEYB.CPP and VA_XYIN.CPP) which
       
 13185 		   create CAKYPB.DLL, CAKYPC.DLL, CAKYP1.DLL (Arm keyboard
       
 13186 		   DLL's) and CAXYPB.DLL, CAXYPC.DLL, CAXYP1.DLL (Arm XY
       
 13187 		   input device DLL's).
       
 13188 
       
 13189 		   Normally, they will also include a VA_HW.CPP which
       
 13190 		   implements variant-specific hardware functionality. These go
       
 13191 		   on to produce the variant dll's VARMPB.DLL, VARMPC.DLL,
       
 13192 		   and VARMP1.DLL. Physical Device drivers (which are intrinsically
       
 13193 		   Variant-level entities) and custom dll's might want to
       
 13194 		   link to these DLL's, but the kernel cannot.
       
 13195 
       
 13196 		   They will also contain PDD source.
       
 13197 
       
 13198 		   The upshot of this is that .OBY files have to change.
       
 13199 
       
 13200 		   A typical Protea Rack B .OBY file will begin:
       
 13201 
       
 13202 		   romname=arompb.img
       
 13203 		   version=0.01
       
 13204 		   bootbinary=c:\work\emarm\bootrom.bin
       
 13205 		   romsize=0x400000
       
 13206 		   romlinearbase=0x50000000
       
 13207 		   romalign=0x1000
       
 13208 		   kerneldataaddress=0x80100000
       
 13209 		   kernelstackaddress=0x80000000
       
 13210 		   kernelheapmin=0x10000
       
 13211 		   dataaddress=0x400000
       
 13212 
       
 13213 		   files=
       
 13214 		   primary=c:\work\emarm\ekern.exe sys\ekern.exe
       
 13215 		   file=c:\work\emarm\euser.dll sys\euser.dll
       
 13216 		   file=c:\work\emarm\elocl.dll sys\elocl.dll
       
 13217 		   secondary=c:\work\emarm\efile.exe sys\efile.exe
       
 13218 		   file=c:\work\emarm\efsrv.dll sys\efsrv.dll
       
 13219 		   file=c:\work\emarm\elocal.fsy sys\elocal.fsy
       
 13220 		   file=c:\work\emarm\ewsrv.exe sys\ewsrv.exe
       
 13221 		   file=c:\work\emarm\econs.dll sys\econs.dll
       
 13222 		   file=c:\work\emarm\edisp.dll sys\edisp.dll
       
 13223 		   file=c:\work\emarm\varmpb.dll sys\varmpb.dll
       
 13224 		   file=c:\work\emarm\carmpb.dll sys\ecust.dll
       
 13225 		   file=c:\work\emarm\cakypb.dll sys\ekeyb.dll
       
 13226 		   file=c:\work\emarm\caxypb.dll sys\exyin.dll
       
 13227 		   file=c:\work\emarm\ektran.dll sys\ektran.dll
       
 13228 		   file=c:\work\emarm\ekdata.dll sys\ekdata.dll
       
 13229 		   file=c:\work\emarm\eshell.exe sys\eshell.exe
       
 13230 
       
 13231 		   A typical Protea Rack C .OBY file will begin:
       
 13232 
       
 13233 		   romname=arompc.img
       
 13234 		   version=0.01
       
 13235 		   bootbinary=c:\work\emarm\bootrom.bin
       
 13236 		   romsize=0x400000
       
 13237 		   romlinearbase=0x50000000
       
 13238 		   romalign=0x1000
       
 13239 		   kerneldataaddress=0x80100000
       
 13240 		   kernelstackaddress=0x80000000
       
 13241 		   kernelheapmin=0x10000
       
 13242 		   dataaddress=0x400000
       
 13243 
       
 13244 		   files=
       
 13245 		   primary=c:\work\emarm\ekern.exe sys\ekern.exe
       
 13246 		   file=c:\work\emarm\euser.dll sys\euser.dll
       
 13247 		   file=c:\work\emarm\elocl.dll sys\elocl.dll
       
 13248 		   secondary=c:\work\emarm\efile.exe sys\efile.exe
       
 13249 		   file=c:\work\emarm\efsrv.dll sys\efsrv.dll
       
 13250 		   file=c:\work\emarm\elocal.fsy sys\elocal.fsy
       
 13251 		   file=c:\work\emarm\ewsrv.exe sys\ewsrv.exe
       
 13252 		   file=c:\work\emarm\econs.dll sys\econs.dll
       
 13253 		   file=c:\work\emarm\edisp.dll sys\edisp.dll
       
 13254 		   file=c:\work\emarm\varmpc.dll sys\varmpc.dll
       
 13255 		   file=c:\work\emarm\carmpc.dll sys\ecust.dll
       
 13256 		   file=c:\work\emarm\cakypc.dll sys\ekeyb.dll
       
 13257 		   file=c:\work\emarm\caxypc.dll sys\exyin.dll
       
 13258 		   file=c:\work\emarm\ektran.dll sys\ektran.dll
       
 13259 		   file=c:\work\emarm\ekdata.dll sys\ekdata.dll
       
 13260 		   file=c:\work\emarm\eshell.exe sys\eshell.exe
       
 13261 
       
 13262 		9. Enhanced the KBARM\ rom building system to allow for the
       
 13263 		   production of all three variant ROMs.
       
 13264 
       
 13265 		10. Fixed spurious Pen Up events on the digitiser.
       
 13266 
       
 13267 		11. Added GETSRC verb to MNT.CMD
       
 13268 
       
 13269 2) Morgan
       
 13270 		1. Completed DEVICE/DRIVER name changes to LDD/PDD.
       
 13271 
       
 13272 		2. Added operator++() to TTimerLockSpec
       
 13273 
       
 13274 		3. Added TTimerLockSpec User::LockPeriod(). This returns which
       
 13275 		   of the TTimerLockSpec periods the clock is currently in.
       
 13276 
       
 13277 3) Jane
       
 13278 		1. Fixed some problems with the new chunk sheme, notably to do with
       
 13279 		   closing EPOC chunks.
       
 13280 
       
 13281 		2. Added a new debug only build of the .def files for X86.
       
 13282 
       
 13283 		3. Added MMU support for both kernel growth (contigous in linear and
       
 13284 		   high physical memory) and RAM drive growth (contigous in linear
       
 13285 		   and low physical memory) - moving other people's pages and page
       
 13286 		   tables out of the way if necessary. Added TMMU test code to test
       
 13287 		   these situations.
       
 13288 
       
 13289 		4. Added a new function to the bit map allocator
       
 13290 		   AllocFromTopFrom(TInt aPos) which returns the
       
 13291 		   next free page after the one specified. Tidied
       
 13292 		   up AllocFromTop() a bit while I was at it.
       
 13293 
       
 13294 4) Colly
       
 13295 		1. Added User::PageSize() to return the current machine page size.
       
 13296 
       
 13297 		2. Renamed RHeap::Destroy() to RHeap::Close().
       
 13298 
       
 13299 		3. Implemented heap sharing for heaps in chunks by having it heaps
       
 13300 		own and use an RCriticalSection as well as supporting access counting.
       
 13301 	The function TInt RHeap::Open() should be used to open a heap for
       
 13302 	sharing which increases the access count. A subsequent RHeap::Close()
       
 13303 	will decrement the access count but the heap will only be discarded
       
 13304 	if the access count	goes to zero. The static function User::ChunkHeap
       
 13305 	includes the call to Open(). Fixed address heaps cannot be shared and
       
 13306 	calls to Open() will be panicked.
       
 13307 
       
 13308 	The heaps which are created when a thread is created and which can be
       
 13309 	retrieved with a call to User::Heap() should not be closed with a call
       
 13310 	to Close() since the chunk in which the heap is created contains the
       
 13311 	threads stack as well as the heap. If Close() is called the thread will
       
 13312 	be panicked. The constanst RHeap::EChunkStack for the heaps type indicate
       
 13313 	this kind of a heap, while RHeap::EChunkNormal indicate a heap created
       
 13314 	with User::ChunkHeap(). Type EChunkSupervisor will never be seen
       
 13315 	by an user mode code.
       
 13316 
       
 13317 	A thread is usually created with its own heap, but it can also be
       
 13318 	created to use either the current thread's heap or a heap already
       
 13319 	created. To use the current threads heap:
       
 13320 
       
 13321 	RThread t;
       
 13322 	TInt r=t.Create(_L("Shared1"),threadEntryPoint,KDefaultStackSize,
       
 13323 			 NULL,NULL);
       
 13324 
       
 13325 	The first of the TWO NULLs will cause the routine to share the
       
 13326 	current threads heap. i.e. that returned by User::Heap().
       
 13327 
       
 13328 	To use a heap already created:
       
 13329 
       
 13330 	RHeap* pH=User::ChunkHeap(_L("Share"),User::PageSize(),0x100000);
       
 13331 	test(pH!=NULL);
       
 13332 	RThread t;
       
 13333 	TInt r=t.Create(_L("Shared1"),threadEntryPoint,KDefaultStackSize,
       
 13334 			 pH,NULL);
       
 13335 
       
 13336 	NOTE: In either case above the Heap will be opened and closed
       
 13337 	internally so you need not provide any cleanup. If you no longer
       
 13338 	wish to retain your copy of the heap in the example above after the
       
 13339 	new thread has been created then you can call pH->Close().
       
 13340 
       
 13341 	Finally note that if thread1 creates thread2 to share its heap and
       
 13342 	then exits thread1's chunk will remain in existence until such time
       
 13343 	as thread2 exits. This is so since thread2's heap is now in thread1's
       
 13344 	chunk. Such are the joys of sharing heaps.
       
 13345 
       
 13346 		4. Full automated heap growth is now implemented as is RHeap::Compress().
       
 13347 	If the adjust to the heaps chunk fails the the kernel server will be
       
 13348 	called to attempt to compress all heaps known to the kernel. When
       
 13349 	completed a further attempt will be made to adjust the chunk so that
       
 13350 	the heap can grow. Remember that a heap will never be compressed
       
 13351 	below its minimum size and that heaps can onlybe compressed if they
       
 13352 	have free space at the top of the heap.
       
 13353 
       
 13354 		5. Added a default argument TOwnerType aType=EOwnerProcess to most
       
 13355 	of the operating system types CreateLocal(),CreateGlobal() and
       
 13356 	Open() functions. Because of the default paramter this change is
       
 13357 	seamless all current programs. The meaning of TOwnerType is to
       
 13358 	indicate whether the resulting RObject is owned by the Process or
       
 13359 	the Thread. Owned by the Process has been the only behaviour allowed
       
 13360 	until this change. EOwnerThread will make the thread the owner of the
       
 13361 	handle. The effect of being owner by the thread is that when the
       
 13362 	thread dies any handles owned by the thread and not closed, will be
       
 13363 	closed automatically. Example of process ownership:
       
 13364 
       
 13365 			RLibrary lib;
       
 13366 			test(lib.Load(_L("TESTDLL"));
       
 13367 		//
       
 13368 		// The library handle will be closed when the process exits
       
 13369 		//
       
 13370 			User::Exit(KErrNone);
       
 13371 
       
 13372 	Example of thread ownership
       
 13373 
       
 13374 			RLibrary lib;
       
 13375 			test(lib.Load(_L("TESTDLL"),EOwnerThread);
       
 13376 		//
       
 13377 		// The library handle will be closed when the thread exits
       
 13378 		//
       
 13379 			User::Exit(KErrNone);
       
 13380 
       
 13381 		NB. Although the addition of TOwnerType arguments to the
       
 13382 		appropriate function calls has been made, EOwnerThread-type
       
 13383 		services have not yet been implemented. This change merely
       
 13384 		prepares the way for such an implementation.
       
 13385 
       
 13386 		6. Implemented the full and correct naming strategy for
       
 13387 		objects in the base.
       
 13388 
       
 13389 		7. The test DLLs T_START1.DLL, T_START2.DLL and T_START3.DLL were
       
 13390 	all using a WIN32 function GetTickCount() to delay their startup
       
 13391 	which was preventing them from being used as a test under Epoc/32.
       
 13392 	Changed to use User::TickCount() and removed Kernel32.lib from
       
 13393 	the link dependencies.
       
 13394 
       
 13395 5) Gillian
       
 13396 
       
 13397 		1. Added TDateTime::SetYear() etc functions (Brendan's
       
 13398 		accepted proposal E32.51 TDateTime setting functions)
       
 13399 
       
 13400 		2. Added TTime::- and TTime-= functions for all TTimeInterval classes
       
 13401 		(Richard Knights accepted proposal TTime should define operators -
       
 13402 		and -=)
       
 13403 
       
 13404 		3. Extended TTime::DateTime() function to deal with BC dates
       
 13405 
       
 13406 		4. Added tests for all the above and tidied the test code up a
       
 13407 		little.
       
 13408 
       
 13409 6) Roger
       
 13410 		1. Implemented DFcs under WINS. This allows us to use DFCs
       
 13411 		from the serial LDD rather than the non WINs PDD. This gives
       
 13412 		much more reliability under WINs and improved throughput under
       
 13413 		MX86 and MARM.
       
 13414 
       
 13415 7) Steve
       
 13416 		Key Translator:
       
 13417 		1) Added new modifier EModifierPureKey, which is set when a
       
 13418 		   ctrl-key combination does not alter the keycode (basically
       
 13419 		   any key other than Space,A-Z which return 0 to 26 respectively)
       
 13420 
       
 13421 		2) Fixed bug so that ctrl-space returns a NULL key press
       
 13422 		   rather than being thrown away
       
 13423 
       
 13424 		3) TPattern enums moved into E32SVR.H for use by wserv
       
 13425 
       
 13426 		Debugger:
       
 13427 		4) Removed the Gdb stub from the E32 kernel
       
 13428 
       
 13429 		5) Added Debug and RDebug classes. Debug is on the Kernel side
       
 13430 		and provides debugging functions for RDebug on the user side.
       
 13431 		A user mode debugger or stub opens a channel to RDebug and
       
 13432 		can then debug one or more threads. The RDebug class provides
       
 13433 		functions for Single-stepping, setting breakpoints,
       
 13434 		reading/writing memory and reading/setting of register
       
 13435 		values. Watching of memory addresses will be provided
       
 13436 		in a later release
       
 13437 
       
 13438 		6) Added 'TInt iDataSize' into DPlatProcess for use by the Debug
       
 13439 		class for returning the Bss address of a Process
       
 13440 
       
 13441 		7) Simple program written to run on the rack which waits for
       
 13442 		any thread to panic and then displays what has panicked
       
 13443 		and why
       
 13444 
       
 13445 		8) Gdb stub written which communicates between RDebug and Gdb
       
 13446 		running on a remote host PC. Currently the Gdb stub only copes with
       
 13447 		debugging one thread at a time, and due to problems with Gdb itself,
       
 13448 		only limited debugging facilities are available.
       
 13449 
       
 13450 8) Pete
       
 13451 		1. Added PC Card Controller to WINS and MARM.
       
 13452 
       
 13453 9) NOTE to shared chunk users (FBSERV etc). Support for read-only
       
 13454 		shared chunks has been withdrawn. Although the API remains, all
       
 13455 		shared chunk users should ONLY open for read/write.
       
 13456 
       
 13457 
       
 13458 Version 0.01.056
       
 13459 ================
       
 13460 (Made by Morgan, Sometime soon)
       
 13461 
       
 13462 1) Matthew
       
 13463 	Bug fixes:
       
 13464 	HA-81: In Wins if a E32Dll returns an error this is now correctly
       
 13465 	detected.
       
 13466 	HA-58: (Just in time debugging added for Kernel Panics) fixed in
       
 13467 	KSRC\KS_UTL.CPP
       
 13468 	HA-62: (Flat buffers not compressed when cleared) fixed in
       
 13469 	UBAS\UB_BUF.CPP.
       
 13470 	HA-82 (ReadCancel() doesn't complete TRequestStatus) fixed in
       
 13471 	WSRC\WS_WIN.CPP, tested in T_WSIMP.CPP.
       
 13472 	HA-73, HA-74, HA-61, HA-52,58,61,62,69,73,74,81,82.
       
 13473 
       
 13474 2) Rog
       
 13475 	Added:
       
 13476 	IMPORT_C void CActive::SetPriority(TInt aPriority);
       
 13477 	inline TInt CActive::Priority();
       
 13478 	SetPriority() will panic if the AO is active when it is called.
       
 13479 
       
 13480 3) SteveT
       
 13481 	1: Added:
       
 13482 	TBool TRegion::Contains(const TPoint &aPoint);
       
 13483 	Simply returns True if the point is contained within the region,
       
 13484 	False if not.
       
 13485 
       
 13486 	2. Added a new template class RRegionBuf<N>
       
 13487 	This is a cross between the two existing variants of the TRegion
       
 13488 	class, it's black box spec is identical to the RRegion class, you
       
 13489 	can have unlimited size regions but have to check for errors, but
       
 13490 	a buffer big enough to hold <N> rectangles is included with the
       
 13491 	RRegionBuf structure, this is used until it is full up when a
       
 13492 	cell will be allocated and the whole rectangle list copied into
       
 13493 	the allocated cell, the region will not revert back to using the
       
 13494 	buffer even if it shrinks small enough fit.
       
 13495 
       
 13496 	These regions are chiefly designed to be used as temporary work
       
 13497 	space on the stack where they will save a lot of calls to alloc
       
 13498 	for trivial rectangle lists. Using these for long term region
       
 13499 	storage would be inefficient as when the buffer overflows it is
       
 13500 	left lying around empty wasting memory.
       
 13501 
       
 13502 	3. After calling Close() the region can safely be reused, before
       
 13503 	it was left in a dangerous state with a pointer to the old freed
       
 13504 	cell.
       
 13505 
       
 13506 4) Jane
       
 13507 	Changed EPOC to the new process relative chunk strategy. Under
       
 13508 	this scheme, the process now owns a chunk, which contains the
       
 13509 	.data and .bss (zero-filled data) sections. Each additional
       
 13510 	thread now only has one chunk minimally, which contains its stack
       
 13511 	and heap. This scheme saves on resources, and will allow the
       
 13512 	process to live on if the main thread dies, a change I intend to
       
 13513 	make later on.
       
 13514 
       
 13515 	Added support for shared chunks in EPOC. A global chunk - one
       
 13516 	created with RChunk::CreateGlobal() - can be shared by other
       
 13517 	processes/threads if they do an OpenGlobal() of the same chunk,
       
 13518 	by name.
       
 13519 
       
 13520 	WARNING! The latter change has necessitated api changes in
       
 13521 	RChunk, detailed below.
       
 13522 
       
 13523 	1. The Create functions have gained an extra parameter, as shown.
       
 13524 
       
 13525 	IMPORT_C TInt CreateLocal(TInt aSize,TInt aMaxSize);
       
 13526 	IMPORT_C TInt CreateGlobal(const TDesC &aName,TInt aSize,TInt
       
 13527 								aMaxSize);
       
 13528 
       
 13529 	The new parameter, aSize, is the number of bytes to initially
       
 13530 	commit to the chunk. IT IS NO LONGER NECESSARY TO ADJUST A NEW
       
 13531 	CHUNK - it will be adjusted to aSize on creation.
       
 13532 
       
 13533 	2. OpenGlobal has gained an extra parameter, as shown below.
       
 13534 
       
 13535 	IMPORT_C TInt OpenGlobal(const TDesC &aName,TBool isReadOnly);
       
 13536 
       
 13537 	The new parameter, isReadOnly, specifies whether the sharing
       
 13538 	process wants readonly access to the chunk. Thus it is now
       
 13539 	possible for the creator of a chunk to have read/write access to
       
 13540 	it, but for others who share that chunk to be denied that
       
 13541 	priviledge.
       
 13542 
       
 13543 	3. As mentioned, it is now unnecessary to adjust a newly created
       
 13544 	chunk. It will be adjusted to aSize bytes on creation.
       
 13545 
       
 13546 5) Colly
       
 13547 		1. Added Registry and Environment services
       
 13548 
       
 13549 6) Graham
       
 13550 		1. All release mode tests run on MARM
       
 13551 
       
 13552 		2. Enhanced the MARM build to include DEBUG and UNICODE modes.
       
 13553 
       
 13554 		3. Enhanced the Eiger Text Display Deiver to switch between
       
 13555 		   1bpp, 2bpp, and 4bpp modes.
       
 13556 
       
 13557 		4. Text Window server allows CTRL-ALT-1, CTRL-ALT-2,
       
 13558 		   CTRL-ALT4 to switch display modes. The rack now boots up
       
 13559 		   in 2bpp.mode.
       
 13560 
       
 13561 		5. Released BOOTROM.BIN. It boots the rack in 2bpp mode, so
       
 13562 		   the same .BIN file may be used for Text Window Server and
       
 13563 		   Graphics Window Server ROM's.
       
 13564 
       
 13565 		6. Added -fno-implicit-templates to the MARM builds and
       
 13566 		   removed -fvtable-thunks.
       
 13567 
       
 13568 7) Peter
       
 13569 		1. Added proto-ramdrive.
       
 13570 
       
 13571 
       
 13572 Version 0.01.055
       
 13573 ================
       
 13574 (Made by Morgan, 18 March '96)
       
 13575 
       
 13576 1). NickT,
       
 13577 	TLex??. I have added two new classes TLexMark8 and TLexMark16 and
       
 13578 	the obvious typedef TLexMark. These classes are used to record or
       
 13579 	mark a positon in a TLex, hence
       
 13580 		TLex8::Mark(TLexMark8& aMark)
       
 13581 	which can be followed by, e.g.
       
 13582 		TLex8::UnGetToMark(TLexMark8& aMark).
       
 13583 	By and large, wherever there was a TLex?? member function which
       
 13584 	used the internal mark, e.g. SkipSpaceAndMark, there is a new
       
 13585 	member which is passed a TLexMark?? or reference to one.
       
 13586 	I have retained the internal mark iMark, changing it to a
       
 13587 	TLexMark, and all the existing member function remain, usually as
       
 13588 	an inline function which passes the internal mark to the general
       
 13589 	member function.
       
 13590 	The TLex??::Val() members no longer use the internal mark to
       
 13591 	recover from errors but use an automatic TLexMark?? constructed
       
 13592 	within the function.
       
 13593 
       
 13594 	T???Que(Base). I have added a member function Reset() to the Sgl,
       
 13595 	DBl and Delta ques which just resets the que to be empty (the
       
 13596 	offset remains unchanged).
       
 13597 
       
 13598 	CArrayFix(Base)/CArrayVar(Base). I have added new member function
       
 13599 	which over load the existing InsertIsqL members. The change is an
       
 13600 	addition TInt& argument.
       
 13601 	On returning from InsertIsqL, this is set to contain the position
       
 13602 	within the array of either the new entry or, if the entry exists
       
 13603 	and ENoDuplicates is passed, the position of the pre-existing
       
 13604 	entry.
       
 13605 
       
 13606 2). Morgan,
       
 13607 	Plat::TickCount on WINS fixed so 1 tick = 1/10th of a second.
       
 13608 	CBufxxx::New is now CBufxxx::NewL.  The CArray classes have been
       
 13609 	altered to use these.
       
 13610 	CActiveScheduler made concrete and constructor made public.
       
 13611 
       
 13612 	Removed PopAndDestroyAll from TCleanupTrapHandler::Untrap which
       
 13613 	now calls CCleanup::PreviousLevel().  This ASSERTS that the
       
 13614 	cleanup stack's current level is empty.  All Pushes to the clean
       
 13615 	up stack must be balanced with a Pop before the Trap unwinds
       
 13616 	naturally.  +Test code.
       
 13617 
       
 13618 	Added PushL() and Pop() member functions to TAutoClose so they
       
 13619 	can be pushed onto the cleanup stack and are closed automatically
       
 13620 	on a leave.  +Test code.
       
 13621 
       
 13622 	Added TReal and TReal96 formating to TDes?::Format
       
 13623 	New specifiers are:
       
 13624 	%f(%F)	- format TReal(TReal96)  (was padding)
       
 13625 	%e(%E)	- format TReal(TReal96) using exponent format
       
 13626 	%g(%G)	- format TReal(TReal96) using general format
       
 13627 	%p(%P)	- padding (used to be %f)
       
 13628 	and
       
 13629 	.n	- specify n decimal places
       
 13630 
       
 13631 	New thread test code, to test Suspend/Resume while the thread is
       
 13632 	suspended on a semaphore.
       
 13633 
       
 13634 	Extended RTimer/CTimer with locked timers for synchronisation to
       
 13635 	fractions of a second.
       
 13636 
       
 13637 	Included USERTYPE.DAT in the release.
       
 13638 
       
 13639 3). Jane,
       
 13640 	Fixed Exc::Dispatch which was deferencing NULL in certain cases.
       
 13641 	Fixed DLogonProcess derivation, which was incorrect under the new
       
 13642 	single phase destruct.
       
 13643 	Added kernel protection for bad handles in both kernel server and
       
 13644 	executive. Now the user thread should get panicked for a bad
       
 13645 	handle, rather than the kernel dying when dereferencing 0. Now
       
 13646 	that this is in place, I would welcome reports of any remaining
       
 13647 	kernel death due to bad parameters, so that we may tighten up any
       
 13648 	remaining loopholes.
       
 13649 
       
 13650 	Fixed CObjectIx::At which was panicking rather than returning 0 in
       
 13651 	certain circumstances.
       
 13652 	Added CObjectIx::AtL which leaves on a bad handle.
       
 13653 
       
 13654 	Added low memory handling to the MMU, and enhanced test code to
       
 13655 	test that there are no alloc heavens in low memory situations.
       
 13656 	Note that the rem page allocator function FreeHomePage() now takes
       
 13657 	a physical address as a parameter rather than a linear one.
       
 13658 
       
 13659 	Added a new type of executive service, EXECUTIVE_SLOW_CONFORMANT
       
 13660 	(int 22h on x86), which allows certain carefully chosen kernel
       
 13661 	services to go re-entrant (i.e. be called from another slow kernel
       
 13662 	executive service). Match8 and Match16 have been changed to this
       
 13663 	new type, so that Match can be called from Exec::ThreadNext and
       
 13664 	friends, thus allowing find services to work on EPOC.
       
 13665 
       
 13666 4). Matthew,
       
 13667 	Tiny change to T_CHUNK (x86): now assumes the executable is T_CHUNK
       
 13668 	rather than TCHUNK, and the case used on the command-line is not
       
 13669 	important.
       
 13670 
       
 13671 5). SteveG
       
 13672 	Key translation:
       
 13673 	================
       
 13674 	Combined the keyboard translator files into two source files,
       
 13675 	KY_TRAN.CPP and KY_CAPT.CPP.
       
 13676 	These make up EKTRAN.DLL, which carries out translating the
       
 13677 	scancodes into keycodes and modifiers and handles capture keys.
       
 13678 	KD_MC400.CPP makes up the keyboard translator data dll
       
 13679 	(EKDATA.DLL). Removed all .data from this DLL by copious use of
       
 13680 	const.
       
 13681 
       
 13682 	Fixed the keytranslator so that modifier keys are returned as
       
 13683 	EKeyNull.
       
 13684 
       
 13685 	CCaptureKey and CKeyTranslator are now defined in e32svr.h for use
       
 13686 	by the Window Server. w32keyb.h and w32keyb.inl no longer exist.
       
 13687 	In order to use the keyboard translator, theWindow Server must at
       
 13688 	startup create a new CKeyTranslator, eg:
       
 13689 	CKeyTranslator* KeyTranslator=CKeyTranslator::New();
       
 13690 
       
 13691 	The translate key function is defined as:
       
 13692 	KeyTranslator->TranslateKey(TUint aScanCode, TBool aKeyUp, const
       
 13693 			CCaptureKeys& aCaptureKeys, TKeyData& aKeyData)
       
 13694 	and an extra function for obtaining the current modifier state
       
 13695 	has been added:
       
 13696 	TUint KeyTranslator->GetModifierState();
       
 13697 
       
 13698 	Key Modifiers
       
 13699 	=============
       
 13700 	EModifier enums are now defined in e32virt.h and are at the top
       
 13701 	level. Anyone making use of 'TEvent::EModifierXxxxx' should
       
 13702 	globally replace 'TEvent::EModifier' to 'EModifier'.
       
 13703 	Removed the TModifier class. A normal TUint should be used in
       
 13704 	place of TModifier, and anyone using the modifier functions
       
 13705 	IsOn(), IsOff(), TurnOn() etc should do this using | and & etc.
       
 13706 
       
 13707 	E32 TEvents
       
 13708 	===========
       
 13709 	Changed the E32 TEvent structure, and renamed it TRawEvent. A
       
 13710 	TRawEvent is passed to the Window Server, which will create a
       
 13711 	TWservEvent as before. TRawEvent is defined in e32svr.h and no
       
 13712 	longer includes the modifier state. The modifier state is added in
       
 13713 	in the Window Server for events that require the modifer state,
       
 13714 	rather than being worked out and passed around for every event
       
 13715 	type.
       
 13716 	Changed the event types. Mouse events have been removed and
       
 13717 	replaced with EPointerMove and EButtonNDown/Up events. The new
       
 13718 	event types, defined in e32svr.h are:
       
 13719 	enum TType
       
 13720 	{
       
 13721 	ENone,
       
 13722 	EPointerMove,
       
 13723 	EKeyDown,EKeyUp,
       
 13724 	ERedraw,
       
 13725 	ESwitchOn,
       
 13726 	EInactive,
       
 13727 	EButton1Down,EButton1Up,
       
 13728 	EButton2Down,EButton2Up,
       
 13729 	EButton3Down,EButton3Up
       
 13730 	};
       
 13731 
       
 13732 	Changed all occurences of TEvent and TEventBuf to TRawEvent and
       
 13733 	TRawEventBuf respectively in the E32 source and header files.
       
 13734 	Changed Event.Set() and RawEvent copy constructors etc so they no
       
 13735 	longer use the shiftState.
       
 13736 
       
 13737 6). Colly,
       
 13738 	Changes required to implement the proposal to give DLLs a globally
       
 13739 	unique identifier (GUID) which can be checked before trying to
       
 13740 	call any of the functions in the DLL. It adds two functions to
       
 13741 	RLibrary as well as adding the concrete data type TGuid. Included
       
 13742 	is a test program T_GUID along with a test DLL T_UID, all of which
       
 13743 	live in TBAS. I have also fixed bugs in the .MAK files for EKTRAN
       
 13744 	and EKDATA.
       
 13745 
       
 13746 	A new version of t_romg.cpp which was broken by changes to
       
 13747 	TDes?::Format() (i.e. changing %f to %p for padding).
       
 13748 
       
 13749 7). Jal,
       
 13750 	Added methods to CSession:
       
 13751 	IMPORT_C void ResourceCountMarkStart();
       
 13752 	Panics client if CountResources returns KErrGeneral
       
 13753 	IMPORT_C void ResourceCountMarkEnd();
       
 13754 	Panics client if CountResources != iResourceCountMark
       
 13755 	IMPORT_C virtual TInt CountResources();
       
 13756 	Default implementation returns KErrGeneral
       
 13757 
       
 13758 
       
 13759 Version 0.01.054
       
 13760 ================
       
 13761 (Made by Morgan, 23 Feb '96)
       
 13762 
       
 13763 1). Colly
       
 13764 	Removed two phase destruction. Note that all objects derived from
       
 13765 	CActive must call Cancel() in their destructors. Note that
       
 13766 	Adt::Destroy() has disappeared (replace with delete).
       
 13767 	The class TAggregate depended on Adt::Destroy(), so it has
       
 13768 	also disappeared (I don't think anyone was using it anyway).
       
 13769 
       
 13770 	Renamed E32ADT.H to E32BASE.H and the project UADT and TADT to
       
 13771 	UBAS and TBAS. Decided not to include E32BASE.H in E32STD.H as
       
 13772 	anyone can include E32BASE.H directly and achieve the same effect.
       
 13773 
       
 13774 	Removed all TBuf_10, TBuf_20 etc variants.
       
 13775 
       
 13776 2). Jane
       
 13777 	Added an extra flag to TModifier: EModifierDoubleClick=0x00800000
       
 13778 
       
 13779 	Fixed DLogons which were writing back the wrong status into the
       
 13780 	logged thread. The net effect being that now when you try to run a
       
 13781 	program which doesn't exist, you don't crash the OS.
       
 13782 
       
 13783 	Added the window server to the dll startup scheme so that the font
       
 13784 	server can be started before it. Look at wsrc\ws_utl.cpp to see
       
 13785 	E32's window server startup code.
       
 13786 
       
 13787 	Added thread relative handles for DServer, DSession and client
       
 13788 	DThread in server DThread. This was necessary for proper cleanup
       
 13789 	of sessions when server and client threads died. It has the
       
 13790 	side-effect of making the WINS implementation much more like the
       
 13791 	EPOC one - and will show up any bugs where sessions are used from
       
 13792 	another thread.
       
 13793 
       
 13794 	Added the Window Server to the dll startup scheme so that the font
       
 13795 	server can be started before it.
       
 13796 
       
 13797 	Fixed bug in CObjectIx::Destruct(), HA-19.
       
 13798 
       
 13799 3). Matthew
       
 13800 	Changed the base to use the new CServer/CSession with ServiceL in
       
 13801 	CSession insted of CServer. The new versions of CSession and
       
 13802 	CServer are now what used to be called CNewSession and CNewServer.
       
 13803 	The windows server and test code use this new scheme.
       
 13804 	If you have your own server/session then to convert you must
       
 13805 	replace your CServer::ServiceL(RMessage&,CSession&) with a
       
 13806 	CSession::ServiceL(RMessage&). In addition, if you have supplied
       
 13807 	a CSession::CreateL() it should now be a
       
 13808 	CSession::CreateL(CServer&).
       
 13809 
       
 13810 	Made TSglQueLink::Enque() private and TSglQueBase a friend of
       
 13811 	TSglQueLink. Removed calls to Enque in T_SQUE.
       
 13812 
       
 13813 	Fixed X86 chunk routines. Additionally, changed WINS so that if
       
 13814 	you try to create a chunk of negative/zero size it returns
       
 13815 	KErrArgument instead of KErrGeneral.
       
 13816 
       
 13817 4). SteveG
       
 13818 	This change affects the Window Server:
       
 13819 	Changed TKeyTranslator::TranslateKey(). It no longer accepts a
       
 13820 	TModifier as the second parameter. This function now takes care of
       
 13821 	working out and storing the current key modifier states.
       
 13822 	Now implemented as:
       
 13823 	TBoot TKeyTranslator::TranslateKey(TUint aScanCode, TBool aKeyUp,
       
 13824 		const CCaptureKeys& aCaptureKeys, SKeyData& aKeyData);
       
 13825 
       
 13826 	Altered \wsrc\ws_main.cpp and \wsrc\keytran.h accordingly, and
       
 13827 	altered keytran.cpp to work out the key modifier states from the
       
 13828 	supplied scancodes.
       
 13829 	The keycode translator is now part of E32 as two DLL's: EKDATA.DLL
       
 13830 	and EKTRAN.DLL.
       
 13831 
       
 13832 	Added the stub for the Gdb debugger. This adds two classes, Gdb
       
 13833 	and ImpGdb. Class Gdb handles the communication protocol to the
       
 13834 	remote PC running the debugger. The ImpGdb class handles all the
       
 13835 	implementation specific functions such as returning register
       
 13836 	values, setting breakpoints and the sending and receiving of data
       
 13837 	packets to the remote PC.
       
 13838 
       
 13839 	Altered \e32\kex86\ke_int.cpp to pass control to the Gdb stub when
       
 13840 	a breakpoint or single step trap occurs, and \e32\kearm\ke_int.cpp
       
 13841 	to pass control to the Gdb stub when an undefined instruction is
       
 13842 	executed.
       
 13843 
       
 13844 5). Morgan
       
 13845 	Fixed thread cleanup code to cancel the threads timer if it had
       
 13846 	not completed when the thread died.  Previously the destructor was
       
 13847 	attempting to close it after the thread's heap had been removed.
       
 13848 
       
 13849 	Made TInt64A::Cmp into a signed compare.
       
 13850 	Fixed the DivMod function and other small fixes to get TInt64 code
       
 13851 	running on the rack.
       
 13852 	TInt64 operator >> now does an ASR.  TInt64::Asr() has become
       
 13853 	TInt64::Lsr()
       
 13854 
       
 13855 	Alloc fail tool changes:
       
 13856 	__xHEAP_FAILNEXT(n) now fails once on the nth mem alloc.
       
 13857 	CTimer::Create has become CTimer::ConstructL.
       
 13858 	CActiveScheduler is now concrete.
       
 13859 
       
 13860 6). Graham
       
 13861 	Incorporated ARM E32 - find GCC porting guide in 'Protea Software Design'.
       
 13862 	Modified test programs so that they build under gcc.
       
 13863 	Added digitiser code (XYIN) and general ADC control code.
       
 13864 	Added compiler support functions for software floating point.
       
 13865 	Added 'float' conversion routines to UM_R96.CPP
       
 13866 	Removed data from ELOCL.DLL by appropriate use of const in LSRC\*.CPP
       
 13867 
       
 13868 	**** WARNING TO SERVER WRITERS ****
       
 13869 
       
 13870 	CSession::CreateL(CServer& aServer) has changed to
       
 13871 	CSession::CreateL(const CServer& aServer)
       
 13872 
       
 13873 	This is a virtual function. If you supply your own version of this
       
 13874 	function, then be sure to change its prototype. If you don't then you won't
       
 13875 	get a compiler warning, but your program won't work any more.
       
 13876 
       
 13877 
       
 13878 Version 0.01.053
       
 13879 ================
       
 13880 (Made by Morgan, 29 Jan '96)
       
 13881 
       
 13882 1).	Matthew
       
 13883 	Removed all trace of the old date\time classes.
       
 13884 
       
 13885 	\E32\TCDT\T_FIND, which tests the find handles.
       
 13886 	There's also a modified version of \E32\TCDT\T_KERN.CPP, which has had it's
       
 13887 	brief TFindXxxx tests expanded to include the ones it previously missed out.
       
 13888 
       
 13889 2).	SteveT
       
 13890 	I'm just putting keyboard repeats into the window server. I've put this change
       
 13891 	into \E32\KPWINS\KP_GUI.CPP to block windows auto repeats from getting
       
 13892 	through.
       
 13893 
       
 13894 	line 169:
       
 13895 	case WM_SYSKEYDOWN:
       
 13896 	case WM_KEYDOWN:
       
 13897 	if (!(HIWORD(lParam)&KF_REPEAT))
       
 13898 		{
       
 13899 		v.Set(TEvent::EKeyDown,PP::Sca....
       
 13900 		Kern::AddEvent(v);
       
 13901 		}
       
 13902 	break;
       
 13903 
       
 13904 	Another change to KP_GUI.CPP to get the keyboard repeats going properly. This
       
 13905 	adds a new TEvent type EInActive that informs me when the E32 window has lost
       
 13906 	focus, the change I've done is as below.
       
 13907 
       
 13908 	case WM_ACTIVATE:      // line 207
       
 13909 	if ((lParam&0xFFFF)==WA_INACTIVE)
       
 13910 		{
       
 13911 		v.Set(TEvent::EInActive);
       
 13912 		Kern::AddEvent(v);
       
 13913 		}
       
 13914 	break;
       
 13915 	case WM_CHAR:
       
 13916 
       
 13917 	I'm not sure if this the best solution, presumably for completeness there
       
 13918 	should be an EActive event as well, or add a true/false parameter to the event
       
 13919 	to say whether it's an active or inactive message.
       
 13920 	Of course on the real machine these events will never be used but I don't see
       
 13921 	that as a problem.
       
 13922 
       
 13923 3).	Morgan
       
 13924 	Serial drivers for X86 and Eiger platforms.
       
 13925 	TLinearSectionRam::CreateRegion now rounds the committed size argument to page
       
 13926 	size before calling Map.
       
 13927 
       
 13928 4).	Natascha
       
 13929 	Character set conversion.
       
 13930 	New test code (t_chset, t_chset2, t_chcon) for Unicode build
       
 13931 
       
 13932 5).	Jane
       
 13933 	Added User::SetDebugMask to allow the setting of the trace mask around
       
 13934 	important sections of code.
       
 13935 
       
 13936 	Fixed various DSession closing and CServer bugs, including HA-51. EPOCX86 can
       
 13937 	now run a test program more than once!!
       
 13938 
       
 13939 	Fixed a process creation bug.
       
 13940 
       
 13941 
       
 13942 Version 0.01.052
       
 13943 ================
       
 13944 (Made by Matthew, 16 Jan '96)
       
 13945 
       
 13946 1). Matthew
       
 13947 	Modified the kernel to use the new date/time classes internally. This includes
       
 13948 	the addition of new overloaded functions duplicating old ones. This should not
       
 13949 	effect the external interface except in a few cases, where some functions have
       
 13950 	been renamed XxxOld().
       
 13951 
       
 13952 	In release 053 the old functions will be removed and some data members will be
       
 13953 	changed to the new date/time classes.
       
 13954 
       
 13955 2). Natascha
       
 13956 	Character set conversion.
       
 13957 
       
 13958 	Replaced \e32\lsrc\LS_850.CPP with new file \e32\lsrc\LS_LAT1.CPP, which has
       
 13959 	the same format:
       
 13960 
       
 13961 			type table for characters
       
 13962 		and     conversions for upper case, lower case, folding and collating.
       
 13963 
       
 13964 	for the Windows ISO Latin 1 character set.
       
 13965 
       
 13966 	There are 3 test programs:
       
 13967 
       
 13968 	1) \e32\tlocale\t_chset.mak which writes to a file "chtest.txt" the descriptions
       
 13969 	for the characters 32 - 255 together with a description of the character it is
       
 13970 	mapped to for each of the upper case, lower case, folding and collating conversions.
       
 13971 	It does this by reading from the tables in LS_LAT1.CPP directly.  This is designed
       
 13972 	to test the mapping tables in LS_LAT1.CPP.
       
 13973 
       
 13974 	2) \e32\tlocale\t_chset2.mak which produces the same output to a file "chtest2.txt"
       
 13975 	and console, but uses the functions provided by the TChar class instead of reading
       
 13976 	the tables directly.  This is designed to test that the changes made in
       
 13977 	\e32\bwins\elocl.mak have taken effect.  Note there is no collate output since
       
 13978 	TChar has no collate function.
       
 13979 
       
 13980 	3) \e32\tlocale\t_chcon.mak which produces a console output displaying the
       
 13981 	attributes of a range of characters 0xC0-0xCF using functions in TChar.  This
       
 13982 	tests that the type table in LS_LAT1.CPP is correct.
       
 13983 
       
 13984 	All 3 test programs read from the text file e32\tlocale\winiso.txt.
       
 13985 
       
 13986 	Note that currently these new tests do not compile in unicode build.
       
 13987 
       
 13988 3). Matthew
       
 13989 	Replaced TBool TRegion::Check() with TBool TRegion::IsContainedBy(), which
       
 13990 	has the opposite sense, ie it returns ETrue when Check() returned EFalse and
       
 13991 	vice-versa.
       
 13992 
       
 13993 4). Roger
       
 13994 	Added write(0) functionality to the serial LDD.
       
 13995 
       
 13996 	A request to Write(...) with either a zero length descriptor or an explicit
       
 13997 	zero length will not complete until the control lines are asserted in such a
       
 13998 	way that a further write would actually send characters on to the line. The
       
 13999 	exact behaviour of write(0) depends upon the iHandshaking field in the current
       
 14000 	config.
       
 14001 
       
 14002 	eg.
       
 14003 	void WaitForCTS(RComm& aSerial)
       
 14004 	//
       
 14005 	// Synchronously wait for CTS to be asserted, assumes aSerial is Open.
       
 14006 	//
       
 14007 		{
       
 14008 		TCommConfig cBuf;
       
 14009 		TCommConfigV01& c=cBuf();
       
 14010 		aSerial.Config(cBuf);
       
 14011 		c.iHandshake=KConfigObeyCTS;
       
 14012 		TRequestStatus stat;
       
 14013 		aSerial.Write(stat,TPtr8(NULL,0),0);
       
 14014 		User::WaitForRequest(stat);
       
 14015 		}
       
 14016 
       
 14017 	The XOn/XOff bits of iHandshaking are ignored for Write(0).
       
 14018 
       
 14019 	There are no changes to the PDD.
       
 14020 
       
 14021 5). Jane
       
 14022 	Wrote display dll, video device (LDD) and VGA driver (PDD) for EPOCx86.
       
 14023 
       
 14024 	Fixed ImpHal::DisableInt() which was only pushing 16 bits of flags.
       
 14025 
       
 14026 	KMaxSectionBase in m32std.h was wrong - fixed.
       
 14027 
       
 14028 	Added TExec which tests number of exec calls in one second.
       
 14029 
       
 14030 6). Graham
       
 14031 	Fixed allocation of run addresses to chunks in DPlatProcess::
       
 14032 	AllocateDataSectionBase().
       
 14033 
       
 14034 7). Roger
       
 14035 	Implemented CNewServer and CNewSession to run alongside CServer and CSession as
       
 14036 	proposed in MartinT's E32 proposal "ServiceL() should belong to CSession, not
       
 14037 	CServer". See E32 proposals for the API.
       
 14038 
       
 14039 	This code is not part of a fully accepted proposal as yet - the code is included
       
 14040 	in the release to A) make further testing with the socket server less painful
       
 14041 	and B) allow others to migrate servers to the new scheme if they wish.
       
 14042 
       
 14043 	Assuming the proposal becomes accepted, CServer and CSession will be replaced
       
 14044 	with CNewServer and CNewSession.
       
 14045 
       
 14046 8). Matthew
       
 14047 	Maths bug fixes and test code.
       
 14048 
       
 14049 
       
 14050 Version 0.01.051
       
 14051 ================
       
 14052 (Made by Matthew, 21 Dec '95)
       
 14053 
       
 14054 1). Jane
       
 14055 	Implemented dll and device loading for EPOC platforms.
       
 14056 
       
 14057 	IMPORTANT NOTE
       
 14058 	We have decided that when the entrypoint of a dll (E32Dll) succeeds, it should
       
 14059 	return KErrNone rather than TRUE. Under WINS, the true entrypoint (_E32Dll)
       
 14060 	converts KErrNone to TRUE before returning, but under EPOC this is not
       
 14061 	necessary and we get tighter code by being able just to pass on the return
       
 14062 	value of E32Dll().
       
 14063 	So in release 051 all dll entrypoints must now return KErrNone if successful.
       
 14064 
       
 14065 	Added functions TBool User::JustInTime() and User::SetJustInTime(TBool) to
       
 14066 	allow getting/setting a kernel variable which controls whether the debugger
       
 14067 	macro executes its int 3 to do just in time debugging of panics with Visual
       
 14068 	C++. The default is ETrue, i.e. just in time debugging is enabled.
       
 14069 	All test code which traps deliberate panics should set this variable to
       
 14070 	false around the code in question, to prevent Visual C++ firing up. See
       
 14071 	TADT\T_CTIMER.CPP
       
 14072 
       
 14073 2). Morgan
       
 14074 	Changes to TReal96:  Changed KMatissaBits back to 53.
       
 14075 	Added Normalise and Prepare functions.
       
 14076 	GetTReal is now a const function.
       
 14077 
       
 14078 3). Gillian
       
 14079 	Changes to the date and time classes
       
 14080 
       
 14081 	The following is a summary of the new classes, but see the report in E32 proposals
       
 14082 	(Replacement for the existing date and time classes), and the ensuing discussion
       
 14083 	for a fuller description of the classes and the motivation for these changes.
       
 14084 
       
 14085 	To avoid a name clash, the existing TDateTime class has been renamed TOldDateTime.
       
 14086 	This along with TSystemTime, SDaySec, SDate and STime and the static date and time
       
 14087 	functions in Userwill be withdrawn in release 053.
       
 14088 
       
 14089 	The functionality previously in TDateTime is provided by TTime which holds the
       
 14090 	number of microseconds since midnight on 1st January 0AD in a TInt64. A TTime
       
 14091 	object may be constructed from a TInt64, a TDateTime (see below) or a string
       
 14092 	literal. Default construction will set the time 0.00am 1st January 2000AD. This
       
 14093 	class also supports comparisons between TTimes, the addition of TTimeIntervals
       
 14094 	(see below) to TTimes and the subtraction of TTimes (giving a TTimeInterval as the
       
 14095 	result). Such arithmetic operations are allowed to over- or underflow, but an error
       
 14096 	is returned if the results of a subtraction are too large to fit in the relevent
       
 14097 	(32-bit) TTimeInterval.
       
 14098 
       
 14099 	The class TTimeIntervalMicroSeconds represents a 64-bit signed difference and the
       
 14100 	classes TTimeIntervalSeconds, ...Minutes, ...Hours, ...Days, ...Months, ...Years
       
 14101 	all derived from TTimeIntervalBase represent the differences in the rest of the
       
 14102 	time bases in a 32-bit signed integer. These classes only support getting, setting
       
 14103 	and comparison functions.
       
 14104 
       
 14105 	The new class TDateTime has been defined for easy user access to TTime. It has
       
 14106 	year, month, day, hour, minute, second and microsecond data members, all held as
       
 14107 	TInts and therefore replaces the SDate and STime structs. This can hold times longer
       
 14108 	than TTime but no checks will be made on construction or assignment. The TDateTime
       
 14109 	class will only support getting and setting functions.
       
 14110 
       
 14111 	The static functions date and time functions previously in User are now in the class
       
 14112 	Time.
       
 14113 
       
 14114 	Omissions - BC dates, string parsing.
       
 14115 	Proviso   - Due to bug in TInt64 class Time::MaxTTime() and MinTTime() fail comparisons
       
 14116 
       
 14117 4). Colly
       
 14118 	Removed RThread::Read() and Write() variants taking 2 parameters.
       
 14119 
       
 14120 	Provided RMessage::ReadL and WriteL functions. These call the appropriate Client
       
 14121 	functions, so the code like
       
 14122 		myMessage.Client().Read(...)
       
 14123 	should now be changed to
       
 14124 		myMessage.ReadL(...)
       
 14125 
       
 14126 	Removed AllocHeaps.
       
 14127 
       
 14128 	Added preliminary code for support of shared heaps. In functions where a heap was
       
 14129 	previously created using given min and max heap sizes there is now an extra argument:
       
 14130 	RHeap * aHeap. If this is NULL then everything proceeds as before. Otherwise, the
       
 14131 	given heap is used. However, this is not properly implemented as yet and so for now
       
 14132 	you should always pass a null pointer.
       
 14133 
       
 14134 	Replaced the constructor RHeap(THeapType aType,TInt aMinLength,TInt aMaxLength,TInt
       
 14135 	aGrowBy) with RHeap(TInt aMaxLength).
       
 14136 
       
 14137 5). Matthew
       
 14138 	If TCallBack::iFunction==NULL then TCallBack::CallBack() returns 0. The default
       
 14139 	constructor now sets iFunction=NULL.
       
 14140 
       
 14141 	CBufBase::DoInsertL() has been made private and a new overloaded variant of InsertL
       
 14142 	has been added.
       
 14143 
       
 14144 	Added CActiveScheduler::Level(), which returns iLevel.
       
 14145 
       
 14146 6). New error codes:
       
 14147 	const TInt KErrTimedOut=(-33);
       
 14148 	const TInt KErrCouldNotConnect=(-34);
       
 14149 	const TInt KErrCouldNotDisconnect=(-35);
       
 14150 	const TInt KErrSubSystem=(-36);
       
 14151 	const TInt KErrBadLibraryEntryPoint=(-37);
       
 14152 	const TInt KErrBadDescriptor=(-38);
       
 14153 
       
 14154 
       
 14155 Version 0.01.050
       
 14156 ================
       
 14157 (Made by Matthew, 12 Dec '95)
       
 14158 
       
 14159 1). Roger/Mark
       
 14160 	Comms bug fixes.
       
 14161 
       
 14162 2). Jal
       
 14163 	Circular buffer bug fix.
       
 14164 
       
 14165 3). Roger
       
 14166 	RThread::Duplicate() fix.
       
 14167 
       
 14168 4). Jane
       
 14169 	Improved the build system. Added mnt cleanup, mnt cleanwins and mnt
       
 14170 	cleanx86 which delete all the intermediate files for all builds, just
       
 14171 	WINS and just X86 respectively. A cleanup should always be performed
       
 14172 	before the first build of a new release of E32.
       
 14173 
       
 14174 	Fixed clean-up of a thread's kernel server session when it dies.
       
 14175 
       
 14176 	DPlatThread::Create() was not opening the thread it created, and thus
       
 14177 	the access count was too low, causing death when the thread died. Fixed.
       
 14178 
       
 14179 	Fixed TTimerInt::TimerComplete() to switch interrupts off during the
       
 14180 	non-atomic decrement of the dfc pending flag.
       
 14181 
       
 14182 	Made CObject::AccessCount() public rather than protected - mainly for use
       
 14183 	in debugging.
       
 14184 
       
 14185 5). Geert
       
 14186 	Changed to a new scheme for boolean values. As the change has considerable
       
 14187 	impact there is a fair amount of material here, including some background
       
 14188 	information. Feel free to skip anything that looks familiar:
       
 14189 
       
 14190 	In a statement such as
       
 14191 		if (cond) s1;
       
 14192 		else s2;
       
 14193 	C++ will execute s1 if cond!=0, and s2 if cond==0.  In general, C++ treats
       
 14194 	boolean values as false if they are equal to zero, and true if they are
       
 14195 	anything else.  The if statement, ?:, &&, || and ! operators all work on
       
 14196 	this assumption.
       
 14197 
       
 14198 	However, the _result_ of a C++ calculation with boolean values is defined
       
 14199 	to be zero for false, and (int) 1 for true: the built-in &&, ||, !, ==,
       
 14200 	!=, <, >, <= and >= operators all return either 0 or 1.
       
 14201 
       
 14202 	Thus, although 1 is the most usual value representing 'true', it is not
       
 14203 	the only value that can mean 'true'.  It is therefore _bad practice_ to
       
 14204 	compare any boolean variable with 1 (or ETrue, or TRUE), to see whether
       
 14205 	it's true:
       
 14206 		if (x==ETrue) s1;
       
 14207 	will only execute s1 if x==1, whereas
       
 14208 		if (x) s1;
       
 14209 	will execute s1 if x!=0, which is the correct definition of 'true'ness.
       
 14210 
       
 14211 	The draft ANSI C++ standard includes a 'bool' type that has the right
       
 14212 	properties.  The TBool introduced here has two main design goals:
       
 14213 	(i) when ANSI compilers become widely available, it will be possible to
       
 14214 	replace the current type definition with
       
 14215 		typedef bool TBool;
       
 14216 	and everything will work perfectly
       
 14217 	(ii) it is designed to cause the compiler to generate an error message
       
 14218 	whenever a TBool is compared with ETrue.  This forces you to fix code that
       
 14219 	is potentially in error, before your code will successfully compile.
       
 14220 
       
 14221 	TBool is no longer an enumeration. It is now an integral type best thought
       
 14222 	of as the type of boolean operators such as <, ==, !=, etc. The only
       
 14223 	significant property of its values is whether they are zero (false) or
       
 14224 	non-zero (true). The EFalse and ETrue enumeration constants are available
       
 14225 	as boolean literals, but a TBool does _not_ have to be equal to ETrue to
       
 14226 	be considered true.
       
 14227 
       
 14228 	This has some impact on the kinds of expressions you can meaningfully
       
 14229 	write using TBools. Comparisons between boolean variables are meaningless,
       
 14230 	for instance. On the other hand, a statement such as
       
 14231 		if (x==EFalse) s1;
       
 14232 	is equivalent to
       
 14233 		if (!x) s1;
       
 14234 	which is not only more concise but also more expressive in many contexts.
       
 14235 
       
 14236 	The most common meaningless expressions involving TBools; i.e., the likes
       
 14237 	of
       
 14238 		if (x==ETrue) s1;
       
 14239 	are trapped at compile time, or link time at the latest. Use
       
 14240 		if (x) s1;
       
 14241 	instead.
       
 14242 
       
 14243 	Another commonly used construct is
       
 14244 		return(x ? ETrue : EFalse);
       
 14245 	where the conditional is now entirely redundant. As a side effect of the
       
 14246 	definition of EFalse and ETrue, this code no longer compiles. Examples of
       
 14247 	other code intended to achieve the same effect are:
       
 14248 		return((TBool)(x));
       
 14249 	or
       
 14250 		if (x) return(ETrue);
       
 14251 		else return(EFalse);
       
 14252 	or one of many variants. These are not picked up by the compiler.
       
 14253 
       
 14254 	Comparisons of one TBool to another are not trapped, nor are other
       
 14255 	meaningless constructs such as
       
 14256 		if (x<=ETrue) s1;
       
 14257 
       
 14258 	To help the human reader, all boolean values should be declared as TBool,
       
 14259 	including: member data; function parameters taking booleans; functions
       
 14260 	returning booleans and especially overloaded boolean operators such as
       
 14261 	operator==(), operator!=() etc. Where booleans are packed into TInt8s or
       
 14262 	the like to save space, consider using a flags word instead.
       
 14263 
       
 14264 	In rare cases TBools may have to be converted into integer values. This
       
 14265 	may be the case when packing booleans into bytes, or when streaming them
       
 14266 	out. One elegant and efficient way of doing that is to compare to EFalse;
       
 14267 	e.g.,
       
 14268 		TUint8 iPresent[aColorComponent]=(TUint8)(aComponentPresent!=EFalse);
       
 14269 	Just casting is not sufficient because vital non-zero bits in the incoming
       
 14270 	boolean may be lost.
       
 14271 
       
 14272 	Moreover, it is sometimes useful to assert things about the exact integer
       
 14273 	value of a boolean. One example of this is test code. The built-in boolean
       
 14274 	operators return either 0 or 1. It may be desirable to specify the same
       
 14275 	behaviour for overloaded operators or even ordinary member functions. Use
       
 14276 	the FALSE and TRUE macros in those cases; e.g.,
       
 14277 		test((des1<des2)==TRUE);
       
 14278 
       
 14279 	The macros may also be useful when an ordinary integer is regarded as a
       
 14280 	boolean. The E32Dll() entry point returns a TInt, for instance. FALSE and
       
 14281 	TRUE may be used in that context. Another use is at the interface with
       
 14282 	external code, such as the Win32 API. As a final example: a callback
       
 14283 	function to be used in the context of a CIdle object might use the macros,
       
 14284 	since its TInt return value is interpreted as a boolean.
       
 14285 
       
 14286 	Note that the conversion to this new scheme is only partially implemented
       
 14287 	in the base.
       
 14288 
       
 14289 6). Steve
       
 14290 	New functions TSize TPoint::AsSize and TPoint TSize::AsPoint return
       
 14291 	this as the respective type. Removed overloaded functions in TPoint,
       
 14292 	TSize and TRect.
       
 14293 
       
 14294 	TSize::SetWH renamed to SetSize.
       
 14295 
       
 14296 	TRect - Functions renamed from Offset to Move and Normalise to
       
 14297 	Normalize. New functions: Size, Width, Height, IsNormalized, Center,
       
 14298 	SetSize, SetWidth and SetHeight.
       
 14299 
       
 14300 
       
 14301 Version 0.01.049
       
 14302 ================
       
 14303 (Made by Matthew, 21 Nov 1995)
       
 14304 
       
 14305 1). Andrew
       
 14306 	The constness of the parameters to CCleanup::PushL and
       
 14307 	CleanupStack::PushL has gone.
       
 14308 
       
 14309 	CCleanup and CleanupStack now have an extra PushL overload: This
       
 14310 	takes a TCleanupItem, which is callback. This enables any component
       
 14311 	to be placed on the cleanup stack by providing a implicit cast to
       
 14312 	TCleanupItem: the component will require a static member which conforms
       
 14313 	to the TCleanupOperation prototype, with which it can constuct a
       
 14314 	TCleanupItem. The overhead of all this is negligible _only_ if the cast
       
 14315 	operator is inline!
       
 14316 
       
 14317 	See the RItem class in the T_CTRAP test code for an example of how to
       
 14318 	do this.
       
 14319 
       
 14320 	It is possible to push a no-data callback on the stack, though the function
       
 14321 	must take a dummy TAny * parameter. Such a function can be PushLed
       
 14322 	directly, as TCleanupItem provides a constructor from a TCleanupOperation.
       
 14323 
       
 14324 
       
 14325 2). Jane
       
 14326 	Added code for the WINS platform to allow DLLs to startup in a chosen
       
 14327 	order. When E32Dll() is first called (aReason==EDllProcessAttach), a new
       
 14328 	function UserSvr::InitRegisterCallback(TCallBack t, TInt p) should be
       
 14329 	called. This registers t as a callback function with priority p. All the
       
 14330 	start-up functionality of E32Dll() should now be moved to the callback.
       
 14331 
       
 14332 	After all the DLLs have been loaded, the kernel runs through a priority
       
 14333 	queue, doing callbacks in the requested order, and waiting on a semaphore
       
 14334 	between each call. Before it terminates, the callback function should call
       
 14335 	UserSvr::ServerStarted() to signal the semaphore, and allow the kernel to
       
 14336 	callback to the next DLL's registered function.
       
 14337 
       
 14338 	See the t_start files in TADT.
       
 14339 
       
 14340 	Added support for sharing loading of dlls.
       
 14341 
       
 14342 	Fixed the thread cleanup code to correctly free resources owned by the
       
 14343 	session, and exit cleanly if the thread creation failed due to lack of
       
 14344 	heap. Should fix HA-7.
       
 14345 
       
 14346 3). Matthew
       
 14347 	CObject::Close now panics if the access count becomes negative, new test
       
 14348 	code checks this.
       
 14349 
       
 14350 	In WINS, PP:MapLastError returns KErrDoesNotExist for the NT error code
       
 14351 	ERROR_MOD_NOT_FOUND. This fixes HA-22.
       
 14352 
       
 14353 	Added a function RLibrary::LoadExact which loads a DLL without mangling
       
 14354 	the name. To use this you will need F32 build 13.
       
 14355 
       
 14356 4). Roger
       
 14357 	Added __DEBUGGER() Macro.
       
 14358 
       
 14359 	Under WINS and MX86 this macro will place an inline int3 instruction into
       
 14360 	your code. For ARM builds the macro expands to a SWI instruction.
       
 14361 
       
 14362 	The macro compiles out under release builds.
       
 14363 
       
 14364 	Under WINS __DEBUGGER() will cause the application to drop into the
       
 14365 	debugger - it will also invoke just in time debugging if your system has
       
 14366 	it enabled.
       
 14367 
       
 14368 	There is no kernel debugger support for ARM or MX86 builds.
       
 14369 
       
 14370 	The Macro is currently defined in E32STD.h this is a temporary measure
       
 14371 	until there is a good area for platform specific pre-processor macros.
       
 14372 
       
 14373 	Fixed the two DPlatThreads with the same NT thread id in the kernel's
       
 14374 	list of threads bug, HA-16 and HA-6.
       
 14375 
       
 14376 5). Graham
       
 14377 	New ARM code, added function TEiger::BootWaitMilliseconds(), changed
       
 14378 	ArmVectorIrq() and CScreenDriverMarm::Blit().
       
 14379 
       
 14380 
       
 14381 Version 0.01.048
       
 14382 ================
       
 14383 (Made by Jane,13 Nov 1995)
       
 14384 
       
 14385 1). Colly
       
 14386 	If a function has a parameter by reference immediately before the
       
 14387 	ellipsis argument as in:
       
 14388 
       
 14389 	RTest::Printf(const TDesC &aFmt,...)
       
 14390 
       
 14391 	then there is a problem when using the variable argument macros as
       
 14392 	follows:
       
 14393 
       
 14394 	VA_LIST list;
       
 14395 	VA_START(list,aFmt);
       
 14396 
       
 14397 	since the macro use &aFmt to try and get the address of the argument
       
 14398 	on the stack. However this does not work with arguments passed by
       
 14399 	reference since &aFmt is the real address of the descriptor. I have
       
 14400 	been using a special function User::SetVaArgList() to overcome this
       
 14401 	difficulty. However this function does not work with register calling
       
 14402 	conventions as for the ARM compiler and so a better solution has been
       
 14403 	found. Many thanks to Geert for the solution as follows:
       
 14404 
       
 14405 	A new class has been defined TRefByValue as follows:
       
 14406 
       
 14407 	template <class T>
       
 14408 	class TRefByValue
       
 14409 		{
       
 14410 	public:
       
 14411 		inline TRefByValue(T &aRef);
       
 14412 		inline operator T &();
       
 14413 	private:
       
 14414 		TRefByValue &operator=(TRefByValue aRef);
       
 14415 	private:
       
 14416 		T &iRef;
       
 14417 		};
       
 14418 
       
 14419 	The assignment operator is just to stop the compiler whining since
       
 14420 	it cannot generate the assignment operator. The trick is to pass a
       
 14421 	reference by value and then have a cast to return the refernce again.
       
 14422 	So all that needs to change is the function declaration as follows:
       
 14423 
       
 14424 	RTest::Printf(TRefByValue<const TDesC> aFmt,...)
       
 14425 
       
 14426 	Note that the TRefByValue is now passed by value so that
       
 14427 
       
 14428 	VA_START(list,aFmt)
       
 14429 
       
 14430 	will now work. SetVaArgList has now thankfully been banished.
       
 14431 
       
 14432 	NOTE: No functions calling these functions with ... should need
       
 14433 	to be changed.
       
 14434 
       
 14435 	As a consequence of this change three pairs of overloaded functions
       
 14436 	are now ambiguous:
       
 14437 
       
 14438 	TDesC::Format(TRefByValue<const TDesC8> aFmt,...); and
       
 14439 	TDesC::Format(const TDesC8 &aFmt,VA_LIST aList);
       
 14440 	TDesC::AppendFormat(TRefByValue<const TDesC8> aFmt,...); and
       
 14441 	TDesC::AppendFormat(const TDesC8 &aFmt,VA_LIST aList);
       
 14442 	TLex::Convert(TRefByValue<const TDesC8> aFormat,...);
       
 14443 	TLex::Convert(const TDesC8 &aFormat,VA_LIST aList);
       
 14444 
       
 14445 	Resolved the ambiguity in each case by renaming the function which
       
 14446 	takes the VA_LIST argument to end in List, i.e.
       
 14447 
       
 14448 	TDesC::FormatList(const TDesC8 &aFmt,VA_LIST aList);
       
 14449 	TDesC::AppendFormatList(const TDesC8 &aFmt,VA_LIST aList);
       
 14450 	TLex::ConvertList(const TDesC8 &aFormat,VA_LIST aList);
       
 14451 
       
 14452 2). Colly
       
 14453 	A mis-understanding between myself and Nick Twyman caused me to
       
 14454 	change EXPORT_C to be defined empty. This is not correct and I have
       
 14455 	put it back to the correct #define EXPORT_C __declspec(dllexport)
       
 14456 
       
 14457 3). Colly
       
 14458 	Fixed a bug in the TReal96 class which then showed up a failure
       
 14459 	in the implementation of TReal96. TReal96 on being Set() was always
       
 14460 	shifting the mantissa left three and then subtracting 3 from the
       
 14461 	exponent. However all the function were not allowing for this. I
       
 14462 	have changed the Set() code not to to the shift any longer. So if
       
 14463 	real calculations are to be performed the shift will have to be
       
 14464 	done before the calculation. GetTReal() and the cast to TReal
       
 14465 	normalise as before. GetTReal() had a bug in that it was
       
 14466 	normalising *this along the way to converting to a TReal. It should
       
 14467 	in fact do nothing and be changed to a const function. Two new
       
 14468 	functions need to be added, Normalise() and Prepare(). Normalise()
       
 14469 	will do most of what GetTReal() is doing now but will do it directly
       
 14470 	on *this, while Prepare() will do the left shift by three.
       
 14471 
       
 14472 4). Colly
       
 14473 	Changed all executive services to have 4 or less arguments to suit
       
 14474 	the calling convention of the GCC compiler. i.e. all arguments are
       
 14475 	in registers.
       
 14476 
       
 14477 5). Colly
       
 14478 	Added the ARM implementation of Epoc/32 for the Eiger chip and finally
       
 14479 	got a workable release of the GNU tool chain from Cygnus. Work is now
       
 14480 	progressing on getting Epoc/32 running on Eiger.
       
 14481 
       
 14482 6). Graham
       
 14483 	Various Eiger fixes.
       
 14484 
       
 14485 7.) Jane
       
 14486 	Changed build system adding the verbs mnt cleanup (deletes everything from \e32sys
       
 14487 	and \work\e32\...) and mnt blddef (automated build of all the .def files into
       
 14488 	\E32\BWINS and \E32\BMX86 directories). Made several changes to the DEFMAKE tool
       
 14489 	to support this.
       
 14490 	These should only need to be used by the base team - others can continue to
       
 14491 	use mnt bldall etc. as usual.
       
 14492 
       
 14493 8). Matthew
       
 14494 	Test code for CPeriodic and TDayName etc added.
       
 14495 
       
 14496 	Fixed rounding bug in um_rtod.cpp (HA-15) & adapted Martin Hardman's test
       
 14497 	code.
       
 14498 
       
 14499 9). Jane
       
 14500 	Fixed HA-13, setting iBase=0 in DestroyAll(), and wrote test code. Note that
       
 14501 	DestroyAll() is due to be replaced by a function in a new class CArrayFixFlatCBase
       
 14502 	which will subclass CArrayFixFlat<CBase *> and thus can be type safe.
       
 14503 
       
 14504 10). Jane
       
 14505 	Changed EXE header format in kernel and E32ROM to contain stack & heap maximum
       
 14506 	and minimum sizes.
       
 14507 
       
 14508 11). Jane
       
 14509 	MMU - added allocation of linear regions (chunks) from high memory for DLLs, and
       
 14510 	wrote test code.
       
 14511 
       
 14512 12). Morgan
       
 14513 	Maths fixes.
       
 14514 
       
 14515 	T_MATH.CPP:
       
 14516 	2 sin tests (lines 1317-1321) were failing with the new TReal96 due to inaccurate
       
 14517 	values for sin(3) and sin(4).
       
 14518 
       
 14519 	lntest4 now uses a bit test ( using the 'approx' class) to compare the results taking
       
 14520 	into account any bit wobble.
       
 14521 
       
 14522 	UM_INT.CPP:
       
 14523 	Fixed Math::Int(TReal &aTrg,const TReal &aSrc) aSrc.Exp() = KMantissaBits-32.
       
 14524 	(Left shifting a TInt by 32 (eg  x<<32)  results in 0xffffffff when it was required to be 0).
       
 14525 
       
 14526 	UP_I64.CPP
       
 14527 	Added TInt64A::MulTop which returns the top 64 bits of a 64x64->128 multiply.
       
 14528 
       
 14529 	UM_R96.CPP - TReal96 functions
       
 14530 	Set() now writes the correct exponent for a 56 bit mantissa (and is consistent with the
       
 14531 	transendental fuctions when KMantissaBits=56)
       
 14532 
       
 14533 	Added TMathPanics
       
 14534 
       
 14535 	Added test code for TReal96, RChunks and more tests for Int64
       
 14536 
       
 14537 
       
 14538 13). Colly
       
 14539 	Various X86 keyboard fixes.
       
 14540 
       
 14541 14). Martin
       
 14542 	Changed Alloc heaven 'dialog' so that address of offending cell is visible.
       
 14543 
       
 14544 	Added a Replace function to descriptors (courtesy of Brendan), with test code.
       
 14545 
       
 14546 	Fixed TPtr::Set function to do the right thing with maxlen, modified test code.
       
 14547 
       
 14548 15). Graham
       
 14549 	Windows server changes.
       
 14550 
       
 14551 16). Jane
       
 14552 	Added KBX86 and KBARM boot source to PVCS.
       
 14553 
       
 14554 
       
 14555 Version 0.01.047
       
 14556 ================
       
 14557 (Made by Colly, 9 Oct 1995)
       
 14558 
       
 14559 1). Changed all TUint to TInt.
       
 14560 
       
 14561 2). The UserSvr::RequestEvent(TEvent &anEvent,TRequestStatus &aStatus)
       
 14562 	was unworkable for the Epoc/32 micro-kernel variants since the
       
 14563 	O/S needs to write the resulting event back in the context of the
       
 14564 	interrupt which may not be the same process as that requesting the
       
 14565 	event. Like servers, this needs to be written using RThread::Write()
       
 14566 	which needs to write to a descriptor in the requesting process. To
       
 14567 	this end I have defined:
       
 14568 
       
 14569 	class TEventBuf : public TPckgBuf<TEvent>
       
 14570 		{
       
 14571 	public:
       
 14572 		inline TEvent &Event() const {return(*((TEvent *)&iBuf[0]));}
       
 14573 		};
       
 14574 
       
 14575 	The function now becomes:
       
 14576 
       
 14577 	UserSvr::RequestEvent(TEventBuf &anEvent,TRequestStatus &aStatus);
       
 14578 
       
 14579 	i.e. it takes the packaged event. The actual event can be returned
       
 14580 	by using the () operator on the package or by calling Event().
       
 14581 
       
 14582 3). The text window server had a bug which was causing the unicode
       
 14583 	release build to fail reading the setup parameters in a random way.
       
 14584 
       
 14585 4). CObjectIx::Destruct() was deleting NULL object handles. Fixed.
       
 14586 
       
 14587 5). Made TRequestStatus a proper class so that it is now strongly typed.
       
 14588 	This helps the compiler pick the correct overloaded function as
       
 14589 	can happen in the file server for example. Note that there is no
       
 14590 	conversion from a TRequestStatus to a TInt. Use the Int() function.
       
 14591 
       
 14592 6). ROM sizes are now quoted for the Epoc/32 microkernel builds and
       
 14593 	not for WINS as previously.
       
 14594 
       
 14595 ROM SIZES
       
 14596 
       
 14597 			X86    ARM
       
 14598 			---   ----
       
 14599 EUSER.DLL   94K   154K
       
 14600 EKERN.DLL   70K   110K
       
 14601 ELOCL.DLL    3K     3K
       
 14602 EFSRV.DLL   27K    41K
       
 14603 ----------------------
       
 14604 TOTAL      194K   308K
       
 14605 ----------------------
       
 14606 
       
 14607 Version 0.01.046
       
 14608 ================
       
 14609 (Made by Colly, 2 Oct 1995)
       
 14610 
       
 14611 1). Added #defines _L8, _L16, _S8 and _S16 for string literals.
       
 14612 
       
 14613 2). Eliminated wait handlers for device drivers. The function
       
 14614 	User::AllowRequestsToComplete() is now redundant. Withdrawn.
       
 14615 
       
 14616 3). KMinTInt8 and KMinTInt16 were not defined correctly. Fixed.
       
 14617 
       
 14618 4). Completed the implementation of RHeap(). The various UserHeap
       
 14619 	creation functions now have new	arguments, aMinLength,
       
 14620 	aMaxLength and aGrowBy. The heap will initially be aMinLength
       
 14621 	in size, and can grow to be aMaxLength in size. If there is no
       
 14622 	space in the heap then an attempt will be made to grow the heap
       
 14623 	in aGrowBy increments. There is a new function Compress() which
       
 14624 	will free any excess space at the end of the heap. Compress() will
       
 14625 	never shrink the heap to less than aMinLength. The sizing code has
       
 14626 	been modified to take account of the RHeap structure at the bottom
       
 14627 	of the heap, so that the free size of a newly created heap will
       
 14628 	always be >= aMinLength. None of this affects fixed heaps.
       
 14629 
       
 14630 5). Changed RThread::Create() to allow the initial size of the heap
       
 14631 	to be specified as well as the maximum size of the heap. These
       
 14632 	are given as the aHeapMinSize and aHeapMaxSize parameters. All
       
 14633 	heaps created in chunks are targets for compression if the system
       
 14634 	runs out of memory.
       
 14635 
       
 14636 6). Implemented the process handling functions for the first time in
       
 14637 	the micro-kernel version, including an interface to allow a loader
       
 14638 	server to actually load .EXEs and .DLLs. In a normal system the
       
 14639 	loader server will be part of the file server. The 486 version
       
 14640 	of Epoc/32 now supports multiple processes, full pre-emptive
       
 14641 	scheduling, and execute in place .DLLs and .EXEs.
       
 14642 
       
 14643 7). Added User::Beep(TInt aFrequency,TInt aDuration). The frequency
       
 14644 	is in hertz so 440 is middle A. The duration is in tenths
       
 14645 	of a second. As in Epoc/16 a negative duration indicates that if
       
 14646 	the hardware to perform the beep is being used for another purpose
       
 14647 	no beep will be sounded. As before if the duration is positive the
       
 14648 	beep can hang up the program until the hardware is free to make
       
 14649 	the beep. And as before the first beep will return immediately if
       
 14650 	the hardware is not busy and the beep will continue in background.
       
 14651 	Note that in Epoc/16 the frequency was specified as an interval.
       
 14652 	This function is not playing a sound constinuously due to a bug in
       
 14653 	Win32. It is however functionally correct. I will fix it in the
       
 14654 	next release.
       
 14655 
       
 14656 8). The constructor for the TPckg template class was leaving the
       
 14657 	length of the descriptor as zero, when it should be the sizeof
       
 14658 	the object T. Fixed.
       
 14659 
       
 14660 9). Add support for drivers to the kernel. In Epoc/16 there were LDDs
       
 14661 	and PDDs. In Epoc/32 a Device is equivalent to an LDD and a Driver
       
 14662 	is equivalent to a PDD. The only user mode services for drivers
       
 14663 	are TFindDriver which allows all installed drivers to be listed
       
 14664 	and User::LoadDriver() and User::FreeDriver(). With the addition
       
 14665 	of drivers \E32\KSRC\KS_DEV.CPP got too big to handle so I have
       
 14666 	split out channels into KS_CHN.CPP and libraries (DLLs) into
       
 14667 	KS_LIB.CPP and put drivers in KS_DRV.CPP.
       
 14668 
       
 14669 10).Completed the implementation of the device driver functions in the
       
 14670 	kernel and implemented the RDevComm device as well as a WINS driver.
       
 14671 	Ax X86 driver for 16450s and 16550s is coming soon. Serial comms lives
       
 14672 	again! The comms device	and WINS driver are now part of the standard
       
 14673 	release of E32 for WINS. The interface to the device is in D32COMM.H
       
 14674 	and D32COMM.INL. It is necessary to load both the device driver
       
 14675 	and	the physical driver in order to use the comms device. An example
       
 14676 	of how to do this is in \e32\dpwins\t_comm.cpp.
       
 14677 
       
 14678 11).Added a public function CActive::Deque() which will allow the
       
 14679 	active object to be removed from the scheduler queue. Deque()
       
 14680 	will call Cancel() before dequeing the object. The object must
       
 14681 	already be on the scheduler queue to be dequed or else a panic
       
 14682 	will result.
       
 14683 
       
 14684 12).Added a circular buffer template class CCirBuf<T> to E32ADT.H and
       
 14685 	its test program T_CIRC.CPP. This is used by the serial device
       
 14686 	to implement receive and transmit buffers. It allows items to be
       
 14687 	added at the head of the queue while allowing items to be removed
       
 14688 	from the tail of the queue. The buffers size can be changed
       
 14689 	dynamically by calling SetLengthL(), although it will discard the
       
 14690 	current contents of the buffer. Also added a class CCirBufer
       
 14691 	derived from CCirBuf<TUint8> which add Get() and Put() which will
       
 14692 	add or remove a single item and are	optimised for speed.
       
 14693 
       
 14694 13).Added the text window server to the standard build of E32. This has
       
 14695 	now been implemented for WINS and EPOC/32-MX86 platforms. The source
       
 14696 	of this server is in \E32\WSRC. It uses a screen driver .DLL
       
 14697 	to perform character blitting to the screen. The test programs are
       
 14698 	in \E32\TWIN. The RConsole class has the following facilities:
       
 14699 
       
 14700 	RConsole is used to communicate with the text windows server.
       
 14701 
       
 14702 	Version()	Reports client side version information
       
 14703 
       
 14704 	Create()	If necessary, opens a connection to the window server, then creates a default window without displaying
       
 14705 				it. The default window characteristics may then be changed using Control() before proceeding to display
       
 14706 				the window using Set().
       
 14707 
       
 14708 	Set()		If necessary, opens a connection to the window server. If necessary, creates a window. Then displays
       
 14709 				the window with the given title and attaches the given buffer size characteristics to it.
       
 14710 
       
 14711 	Write()		Writes the given text at the current cursor position.
       
 14712 
       
 14713 	Clear()		Clears the whole window and places the cursor at the top left corner.
       
 14714 
       
 14715 	ClearToEndOfLIne() Clears from the current cursor position to the end of the line
       
 14716 
       
 14717 	Destroy()	Removes the window from the screen. Another may then be opened using Create()/Set().
       
 14718 
       
 14719 	SetCursorSize()	  Sets the percentage height of the cursor
       
 14720 	SetCursorPosAbs() Places cursor at given absolute position.
       
 14721 	SetCursorPosRel() Places cursor relative to current position.
       
 14722 	CursorPos()		  Returns current cursor position
       
 14723 
       
 14724 	Control()	Controls various window characteristics. The text passed to this function may contain near-English
       
 14725 				commands. However, only the '+', '-', and upper-case letters are actually interpreted:
       
 14726 
       
 14727 				'+'		Apply subsequent characteristics
       
 14728 				'-'		Remove subsequent characteristics
       
 14729 				'V'		Visibility
       
 14730 				'C'		Cursor on
       
 14731 				'S'		Scroll bars
       
 14732 				'L'		Scroll lock
       
 14733 				'W'		Wrap lock
       
 14734 				'M'		Maximum Window Size
       
 14735 				'N'		'/n' is CR and LF
       
 14736 
       
 14737 				Before interpreting the text, a silent '+' is assumed:
       
 14738 
       
 14739 						Control(_L("Visibility -Cursor Lock + Scroll"))
       
 14740 
       
 14741 				This would cause the window to become visible, with no text cursor, no scroll lock active,
       
 14742 				but with scroll bars present. Of course, the following command would achieve exactly the same
       
 14743 				result, but would not posses the same level of self-documentation or readability:
       
 14744 
       
 14745 						Control(_L("VS-CL"))
       
 14746 
       
 14747 				Further more, the next command would achieve the same thing with even more readability:
       
 14748 
       
 14749 						Control(_L("+Visibility -Cursor -Lock +Scroll"))
       
 14750 
       
 14751 	Read()		Read a character.
       
 14752 
       
 14753 	ReadCancel()	Cancel asynchronous read request
       
 14754 
       
 14755 14).Set the priority of the kernel server thread and null thread
       
 14756 	correctly on the EPOC/32 platforms.
       
 14757 
       
 14758 15).Now allocating data section base addresses correctly so that multiple
       
 14759 	threads will now work correctly on the EPOC/32 platforms.
       
 14760 
       
 14761 16).Changed THandleBase::Duplicate(RProcess &aProcess) to be
       
 14762 	THandleBase::Duplicate(RThread &aThread) since it is usual
       
 14763 	to have the remote thread handle and unusual to have the remote
       
 14764 	threads process handle. The O/S uses the thread's process as the
       
 14765 	handle's source process.
       
 14766 
       
 14767 17).RTimer.After() and User::After() were using a duration in ticks. This
       
 14768 	has now been changed to a duration in tenths of a second so that it
       
 14769 	is platform independent.
       
 14770 
       
 14771 18).RProcess RThread::Process() was always returning the current
       
 14772 	process rather than the thread's process. Also returning a new
       
 14773 	handle based object can fail with out of memory so I have changed
       
 14774 	this function to TInt RThread::Process(RProcess &aProcess) so that
       
 14775 	it can return the error.
       
 14776 
       
 14777 19).Under Windows/NT a mutex once owned by a thread can be waited on again
       
 14778 	without locking the thread, on the basis that this protects a thread
       
 14779 	from entering deadlock. However this is nonsense since a mutex can
       
 14780 	be used to prevent a thread from accessing the resource as
       
 14781 	happens in the case of the User::Beep() function. Basically the
       
 14782 	mutex is used to lock out threads until the current beep has
       
 14783 	completed. What takes the thread out of potential deadlock is the
       
 14784 	beep completing in due course. Changed the WINS implementation to
       
 14785 	behave correctly and lock the thread.
       
 14786 
       
 14787 20).TLex::Val(TReal &) did not fail with a number like _L("1.2e"). Fixed.
       
 14788 
       
 14789 21).The default constructor for the TLex class was still being set up for
       
 14790 	zero terminated descriptors which were discarded in January. Fixed.
       
 14791 
       
 14792 22).TLex::Peek() would happily try and access a character from a default
       
 14793 	constructed TLex which resulted in an access violation. Now fixed.
       
 14794 	Also dropped inline for Inc(),Peek() and Get().
       
 14795 
       
 14796 23).CBufBase::Read(TUint aPos,TDes8 &aDes) is documented as reading up to
       
 14797 	aDes.MaxLength() characters, but was in fact reading up to
       
 14798 	aDes.Length() characters. Fixed.
       
 14799 
       
 14800 24).RTimer was not setting the request status to KRequestPending after
       
 14801 	an asynchronous request. Fixed.
       
 14802 
       
 14803 25).I have changed EXPORT_C to just be nothing rather than
       
 14804 	__declspec(dllexport). For the time being it is still required to
       
 14805 	declare functions as EXPORT_C. If you had a function which did
       
 14806 	not have a corresponding IMPORT_C then make sure that there is
       
 14807 	an IMPORT_C defined somewhere or else the function will not be
       
 14808 	exported.
       
 14809 
       
 14810 26).Changed the heap checking macros to have understandable names and have
       
 14811 	simplified their implementation. I have also made them orthogonal. The
       
 14812 	new names and their old equivalents are as follows:
       
 14813 
       
 14814 	// For the user heap
       
 14815 
       
 14816 	__UHEAP_MARK							MARKSTART
       
 14817 	__UHEAP_CHECK(aCount)					CHECKNUM1(x)
       
 14818 	__UHEAP_CHECKALL(aCount)				CHECKTOTALNUM1(x)
       
 14819 	__UHEAP_MARKEND							MARKEND
       
 14820 	__UHEAP_MARKEND(aCount)					MARKEND1(x)
       
 14821 	__UHEAP_FAILNEXT(aCount)				SETFAIL(x,y)
       
 14822 	__UHEAP_SETFAIL(aType,aRate)			SETFAIL(x,y)
       
 14823 	__UHEAP_RESET							RESET
       
 14824 
       
 14825 	// For the kernel heap
       
 14826 
       
 14827 	__KHEAP_MARK
       
 14828 	__KHEAP_CHECK(aCount)
       
 14829 	__KHEAP_CHECKALL(aCount)
       
 14830 	__KHEAP_MARKEND
       
 14831 	__KHEAP_MARKEND(aCount)
       
 14832 	__KHEAP_FAILNEXT(aCount)				K_SETFAIL(x,y)
       
 14833 	__KHEAP_SETFAIL(aType,aRate)			K_SETFAIL(x,y)
       
 14834 	__KHEAP_RESET							K_RESET
       
 14835 
       
 14836 	// For any RHeap
       
 14837 
       
 14838 	__RHEAP_MARK(aHeap)						MARKSTART1(x)
       
 14839 	__RHEAP_CHECK(aHeap,aCount)				CHECKNUM2(x,y)
       
 14840 	__RHEAP_CHECKALL(aHeap,aCount)			CHECKTOTALNUM2(x,y)
       
 14841 	__RHEAP_MARKEND(aHeap)					MARKEND1(x)
       
 14842 	__RHEAP_MARKEND(aHeap,aCount)			MARKEND2(x,y)
       
 14843 	__RHEAP_FAILNEXT(aHeap,aCount)			UH_SETFAIL(x,y,z)
       
 14844 	__RHEAP_SETFAIL(aHeap,aType,aRate)		UH_SETFAIL(x,y,z)
       
 14845 	__RHEAP_RESET(aHeap)					UH_RESET
       
 14846 
       
 14847 	FAILNEXT,UH_FAILNEXT and K_FAILNEXT can be replaced
       
 14848 	with __?HEAP_FAILNEXT(1)
       
 14849 
       
 14850 	It is no longer possible to check a threads heap since this will
       
 14851 	not work under Epoc/32 if a thread is in another process.
       
 14852 
       
 14853 	In the first trial implementation of __?HEAP__FAILNEXT(aCount) I
       
 14854 	had not realised that aCount did not do anything. This is now
       
 14855 	fixed. Note that aCount==1 fails the next alloc call.
       
 14856 
       
 14857 27).The member variable of TScreenInfoV01 were not declared with a lower
       
 14858 	case i prefix. Fixed.
       
 14859 
       
 14860 28).Released the console classes. The header for the console class in
       
 14861 	E32CONS.H. It has an abstract base class CConsoleBase which just
       
 14862 	defines a basic set of console functions. It also has CConsoleTextWin
       
 14863 	which is the console implementation for the text window server.
       
 14864 
       
 14865 29).Changed the WINS platform to use the the CConsoleTextWin instead of
       
 14866 	a second Windows/NT console window. The test class now uses the
       
 14867 	CConsoleTextWin. The console is released as ECONS.DLL. The
       
 14868 	CConsoleTextWin class is defined in the E32TWIN.H header.
       
 14869 
       
 14870 30).Changed the test class to use the console. Also added a Getch()
       
 14871 	function to the test class. Because it now owns a console object
       
 14872 	I have had to rename the test class RTest. I have also added
       
 14873 	a Close() member function which will free an allocated console.
       
 14874 
       
 14875 31).Added CConsoleBase *Adt::NewConsoleL() which will create a basic
       
 14876 	console object. Note that you do not need to be linked to ECONS.LIB
       
 14877 	in order to	use this or any of the member functions of CConsoleBase.
       
 14878 
       
 14879 32).Took the opportunity with the release of the X86 platform to rename
       
 14880 	the WINS platform releaseables to be inline with those of the X86
       
 14881 	platform. The new names are as follows:
       
 14882 
       
 14883 	OLD NAME		NEW NAME
       
 14884 	============	=============
       
 14885 	ESTAT.OBJ		EEXE.OBJ
       
 14886 	ESTAT.LIB		EEXE.LIB
       
 14887 	EWINS.DLL		EUSER.DLL
       
 14888 	EWINS.LIB		EUSER.LIB
       
 14889 	KWINS.DLL		EKERN.DLL
       
 14890 	LWINS.DLL		ELOCL.DLL
       
 14891 
       
 14892 	For programs the programs which use E32 the only changes to .MAK files
       
 14893 	which are significant are as follows:
       
 14894 
       
 14895 	ESTAT?.OBJ	to	EEXE.OBJ	- The startup object for .EXEs
       
 14896 	ESTAT?.LIB	to	EEXE.LIB	- The startup library for .EXEs
       
 14897 								  if linking with msvcrt20.lib
       
 14898 	EWINS?.LIB	to	EUSER.LIB	- The user library
       
 14899 
       
 14900 33).Added an inline "construct in place" global new operator.
       
 14901 
       
 14902 34).Due to popular demand I have moved the following functions
       
 14903 	to a new class of their own CleanupStack.
       
 14904 
       
 14905 	Adt::PushL(const TAny *)
       
 14906 	Adt::PushL(const CBase *)
       
 14907 	Adt::Pop()
       
 14908 	Adt::Pop(TUint aCount)
       
 14909 	Adt::PopAndDestroy()
       
 14910 	Adt::PopAndDestroy(TUint aCount)
       
 14911 
       
 14912 	become
       
 14913 
       
 14914 	CleanupStack::PushL(const TAny *)
       
 14915 	CleanupStack::PushL(const CBase *)
       
 14916 	CleanupStack::Pop()
       
 14917 	CleanupStack::Pop(TUint aCount)
       
 14918 	CleanupStack::PopAndDestroy()
       
 14919 	CleanupStack::PopAndDestroy(TUint aCount)
       
 14920 
       
 14921 35).For a long time I have been tracking down a race condition under
       
 14922 	WINS which resulted in the kernel being hung. This turns out to be
       
 14923 	a bug in the Windows/NT implementation	of critical	sections.
       
 14924 	I have replaced the critical section with a mutex which	fixes the bug.
       
 14925 
       
 14926 36).I have fixed the T_SEMUTX.CPP program which has also long had a
       
 14927 	deliberate race condition as part of its test. However the problem
       
 14928 	was that sometimes it raced and sometimes it did not. By making each
       
 14929 	thread wait different times its possible to always make the race
       
 14930 	conditions occur so that the test will always pass consistently.
       
 14931 
       
 14932 37).The CIdle class was doing a User::WaitForAnyRequest() in the
       
 14933 	DoCancel() function. DoCancel() should just do nothing ofcourse
       
 14934 	since the CActive::Cancel() function will do the WaitForAnyRequest().
       
 14935 	Many thanks to Brendan for spotting the bug and for providing
       
 14936 	the test code t_idle.cpp.
       
 14937 
       
 14938 38).Adt::DestroyZ() was never any use, so I have removed it.
       
 14939 
       
 14940 39).CSession::CreateL() was defined as pure virtual so that server
       
 14941 	implmentors had to define a CreateL() function even, as is often
       
 14942 	the case, the function did nothing. I have now supplied a default
       
 14943 	implementation which does nothing.
       
 14944 
       
 14945 40).CActiveScheduler::Install() would not allow the current scheduler
       
 14946 	to be removed by passing NULL. This is now allowed. Note that if
       
 14947 	you want to change the scheduler you must first de-install by using
       
 14948 	NULL and then replace with the new scheduler.
       
 14949 
       
 14950 41).Got most of the base test code working in release mode. For some
       
 14951 	unknow reason, some of the test code template classes are not
       
 14952 	instaniating in release builds. All tests pass but the following
       
 14953 	have the body of their code eliminated.
       
 14954 
       
 14955 	T_BUF, T_CHAR, T_DES, T_HEAPDB,	T_HUF
       
 14956 	T_LEX, T_QUE, T_SQUE, T_KEY, T_FLOAT
       
 14957 
       
 14958 	In getting the test programs to work in the release build almost
       
 14959 	all problems wre due to a dependency on the lifetime of
       
 14960 	temporaries. In debug builds temporaries are never re-used so they
       
 14961 	exist for the duration of the function. However in release builds
       
 14962 	they are re-used at the first opportunity. Typical buggy code is
       
 14963 	as follows:
       
 14964 
       
 14965 	class TBug
       
 14966 		{
       
 14967 	public:
       
 14968 		TBuf();
       
 14969 		void Set1(const TDesC *aDes);
       
 14970 		void Set2(const TDesC *aDes);
       
 14971 	private:
       
 14972 		const TDesC *iPtr1;
       
 14973 		const TDesC *iPtr2;
       
 14974 		};
       
 14975 
       
 14976 	TBuf b;
       
 14977 	b.Set1(&_L("Temporary 1"));
       
 14978 	b.Set2(&_L("Temporary 2"));
       
 14979 
       
 14980 	This will work fine in debug builds but will result in iPtr1 and
       
 14981 	iPtr2 pointing to the same value. This is because _L is defined
       
 14982 	as a constructor for a TPtrC which creates a temporary. The same
       
 14983 	automatic space will be used for the temporary.
       
 14984 
       
 14985 42).HBufC::NewMax(),HBufC::NewMaxL() and HBufC::NewMaxLC() all ended
       
 14986 	up setting the length to the size of the allocated cell which can
       
 14987 	be bigger that the requested length. Changed to set the length
       
 14988 	to the requested length.
       
 14989 
       
 14990 43).Moved MemCopy(),MemCompare(),MemCompareF(),MemCompareC()
       
 14991 	MemFill(),MemFillZ() and MemSwap() to a class of their own
       
 14992 	called Mem and dropped the Mem prefix. So User::MemCopy() is
       
 14993 	now Mem::Copy() etc.
       
 14994 
       
 14995 44).Changed TDesC functions Match(),Locate(),LocateReverse() and Find()
       
 14996 	to return an unsigned result. They all return KNotFound which is
       
 14997 	defined as KMaxTUint if they fail.
       
 14998 
       
 14999 45).The message system was not tidying up correctly when a session
       
 15000 	was closed by the client or if the client died before closing. The
       
 15001 	new implementation of messaging has now fixed this problem.
       
 15002 
       
 15003 NOTE
       
 15004 ====
       
 15005 
       
 15006 20th September 1995.
       
 15007 
       
 15008 The X86 implementation of the Epoc/32 platform ran through the
       
 15009 creation and execution of the first user mode process and then
       
 15010 eventually ended up in the NULL process and consequently the idle
       
 15011 loop. The MMU and protection is fully enabled, so this constitutes
       
 15012 the birth of Epoc/32. We hope to have the remainder of the boot
       
 15013 sequence, i.e. file server, window server and shell completed
       
 15014 by the end of the next week.
       
 15015 
       
 15016 ROM SIZES
       
 15017 
       
 15018 			X86    ARM
       
 15019 			---   ----
       
 15020 EUSER.DLL   90K   148K
       
 15021 EKERN.DLL   33K    47K
       
 15022 ELOCL.DLL    3K     3K
       
 15023 EFSRV.DLL   28K    42K
       
 15024 ----------------------
       
 15025 TOTAL      154K   240K
       
 15026 ----------------------
       
 15027 
       
 15028 Version 0.01.045
       
 15029 ================
       
 15030 (Made by Colly, 30 Aug 1995)
       
 15031 
       
 15032 1). Changed the way messaging worked internally. RServer::Receive() used
       
 15033 	to get a pointer to the message received. I was hoping to pass this
       
 15034 	pointer directly from supervisor space for efficiency, but I have
       
 15035 	decided that its not worth the extra overhead of read only shared
       
 15036 	memory that wouldbe required. RServer now has a RMessage by value
       
 15037 	which receives the contents of the message when it arrives. If the
       
 15038 	server needs to hold onto the message then it must either copy
       
 15039 	the message in full (I have added a copy constructor and an assignment
       
 15040 	operator to allow this) or it must use the new function MessagePtr()
       
 15041 	which returns a const RMessagePtr. The only thing you can do with
       
 15042 	an RMessagePtr is to complete the message as you do with a normal
       
 15043 	RMessage by call RMessagePtr::Complete().
       
 15044 
       
 15045 	While I was about it I also changes the naming of the accessor
       
 15046 	functions I1(),P1() etc. The problem with the names was that on
       
 15047 	the client side arguments were being set into an array using normal
       
 15048 	indexing, i.e. base 0, while on the server side the names were based 1.
       
 15049 	In order to help the conversion	I have renamed I to Int and P to Ptr
       
 15050 	so that:
       
 15051 
       
 15052 	I1() is now Int0()
       
 15053 	I2() is now Int1()
       
 15054 	I3() is now Int2()
       
 15055 	I4() is niw Int3()
       
 15056 	P1() is now Ptr0()
       
 15057 	P2() is now Ptr1()
       
 15058 	P3() is now Ptr2()
       
 15059 	P4() is niw Ptr3()
       
 15060 
       
 15061 	Sorry for the inconvenience.
       
 15062 
       
 15063 2). Moved a number of constructors in abstract base	classes which were
       
 15064 	public to protected. This should have no affect other than to stop
       
 15065 	them being instantiated.
       
 15066 
       
 15067 3). Withdrawn the new(ECleanup) and new(ECleanupObj) options. new(ELeave)
       
 15068 	still exists. CBase * is not nescessarily the start of the heap cell
       
 15069 	when MI is involved. In general a cast of (TAny *) to a CBase * will
       
 15070 	not work unless the TAny * was originally downcast to a CBase *. If
       
 15071 	you know the type T of a TAny *ptr then its o.k. to code
       
 15072 
       
 15073 	(CBase *)(T *)ptr;
       
 15074 
       
 15075 	but not
       
 15076 
       
 15077 	(CBase *)ptr;
       
 15078 
       
 15079 4). More tiresome CBase * problems. TDblQue::DeletaAll and
       
 15080 	TSglQue::DeleteAll were removing each item from the que and then
       
 15081 	casting the ptr to a CBase * to call Adt::Destroy(). Withdrawn.
       
 15082 
       
 15083 5). CActiveScheduler::Start() was not nesting levels correctly. Fixed.
       
 15084 
       
 15085 6). Added TLex?::Offset() and TLex?::MarkedOffset().
       
 15086 
       
 15087 7). The various TLex::Val() routines should not change iNext if they
       
 15088 	fail to lex a valid number. Fixed.
       
 15089 
       
 15090 8). Added TLex?::Val(TReal32 &aReal,TChar aPoint) and
       
 15091 	TLex?::Val(TReal64 &aReal,TChar aPoint).
       
 15092 
       
 15093 9). Added some extra key difinitions to E32VIRT.H
       
 15094 
       
 15095 	EKeyBell=0x0007,
       
 15096 	EKeyLineFeed=0x000a,
       
 15097 	EKeyVerticalTab=0x000b,
       
 15098 	EKeyFormFeed=0x000c,
       
 15099 	EKeySpace=0x0020
       
 15100 
       
 15101 10).Implemented default constructors for TPtrC8 and TPtrC16 which
       
 15102 	set the pointer NULL and the length to zero.
       
 15103 
       
 15104 11).The X86 version of E32 now builds in unicode.
       
 15105 
       
 15106 12).Changed CObjectConIx::Remove(CObjectCon *aCon) so that it can be
       
 15107 	passed NULL. It does nothing if aCon is NULL.
       
 15108 
       
 15109 13).Added CObjectCon::operator[]() to allow access to all objects in a
       
 15110 	container by straight indexing.
       
 15111 
       
 15112 Version 0.01.044
       
 15113 ================
       
 15114 (Made by Colly, 23 Aug 1995)
       
 15115 
       
 15116 1). TDes8::SetMax() and TDes16::SetMax() did not work correctly if the
       
 15117 	TDes was from a TBufC.Des() or HBufC.Des(). This caused the
       
 15118 	HBufC::NewMax() and HBufC::NewMaxL() to fail to set length to
       
 15119 	MaxLength(). Fixed.
       
 15120 
       
 15121 2). Added a new type TTrapHandler. This is an abstract class which needs
       
 15122 	to be derived to provide a handler to work with the TRAP mechanism.
       
 15123 	The trap handler can be installed by calling User::SetTrapHandler()
       
 15124 	and can be cleared by passing a NULL pointer. By default there is no
       
 15125 	trap handler. Once a trap handler is installed then each time TRAP is
       
 15126 	invoked TTrapHandler::Trap() is called. If a leave is called then
       
 15127 	TTrapHandler::Leave() is called. If the function being trapped does
       
 15128 	not leave then TTrapHandler::UnTrap() is called. Each thread has its
       
 15129 	own trap handler. Its not a good idea to install a trap handler while
       
 15130 	under a TRAP (exercise for the reader to work out why), so a panic
       
 15131 	will be given if this is attempted. The current trap handler can be
       
 15132 	retrieved by calling User::TrapHandler().
       
 15133 
       
 15134 3). Added a new ADT class CCleanup. The purpose of this class is to
       
 15135 	provide an automated cleanup mechanism to go with the TTrapHandler
       
 15136 	facility. This class is basically a stack onto which either
       
 15137 	allocated cells can be pushed using PushL(TAny *aPtr) or objects
       
 15138 	derived from CBase with PushL(CBase *aPtr). The object can
       
 15139 	be popped from the stack with Pop() or popped and destroyed with
       
 15140 	PopAndDestroy(). It is possible to pop a number of items from the
       
 15141 	stack by using the overloaded Pop(TUint aCount) functions.
       
 15142 
       
 15143 	The object also allows for nesting so that all objects at the
       
 15144 	current nesting level can be popped or popped and destroyed with
       
 15145 	PopAll() or PopAndDestroyAll(). These functions automatically
       
 15146 	decrement the nesting level. The nesting level can be incremented
       
 15147 	with NextLevel(). When the object is created the level is zero.
       
 15148 	Objects cannot be pushed while the nesting level is zero so it is
       
 15149 	necessary to call NextLevel() before doing a PushL().
       
 15150 
       
 15151 	If the object is destroyed then all items on the stack will also
       
 15152 	be destroyed.
       
 15153 
       
 15154 	The cleanup object keeps a free slot at all times. Thus an object
       
 15155 	can always be guaranteed to be added to the cleanup stack. Having
       
 15156 	added the object, room is made for another free slot. This may
       
 15157 	leave but it will be alright as the object has already been pushed
       
 15158 	onto the stack and will be cleaned up. Cleaning up leaves room for
       
 15159 	another free slot.
       
 15160 
       
 15161 4). Added a new ADT class CTrapCleanup which puts 2) and 3) together to
       
 15162 	give a framework for cleanup. All thats necessary to implement this
       
 15163 	facility is to call CTrapCleanup::New(). There is no NewL() since
       
 15164 	the trap handler can only be installed while not under a TRAP.
       
 15165 	Destroying this object will remove the trap handler. Added the static
       
 15166 	functions Adt::PushL(const TAny *), Adt::PushL(const CBase *),
       
 15167 	Adt::Pop(), Adt::Pop(TUint aCount) and the PopAndDestroy()
       
 15168 	equivalents which all use the installed CTrapCleanup object. Note
       
 15169 	that the PopAll() variants are not available, since this is done
       
 15170 	by the trap handler.
       
 15171 
       
 15172 5). Added 2 more types to TLeave, i.e. ECleanup and ECleanupObj. ECleanup
       
 15173 	will allocate the storage and leave on error. If successful it will
       
 15174 	add the new cell to the cleanup list. ECleaupObj is the same except
       
 15175 	that it will add the cell as a CBase derived object. It is possible
       
 15176 	to use ::new with ECleanupObj, but you will just get
       
 15177 	panicked. It should only be used with CBase::new. Note that any
       
 15178 	call to new within a member function in a class derived from CBase
       
 15179 	will be calling CBase::new and so will need ECleanup. If creating an
       
 15180 	object then ECleanupObj is correct. Using User::AllocLC() is probably
       
 15181 	preferable and always call new(ECleanupObj) or new(ELeave).
       
 15182 
       
 15183 	Added RHeap::AllocLC(), User::AllocLC(), TDesC::AllocLC(),
       
 15184 	HBufC::NewLC() and HBufC::NewMaxLC() which all are the same as
       
 15185 	the equivalent L functions except that they add the object to
       
 15186 	the cleanup list if successful.
       
 15187 
       
 15188 	Remember that a Pop() of some kind will be required.
       
 15189 
       
 15190 6). Added the function to return machine information from the Hardware
       
 15191 	Abstraction Layer (HAL). This is retrieved by calling User::HalInfo().
       
 15192 	The class is declared in E32HAL.H. Setting functions will be added
       
 15193 	in a forthcoming release.
       
 15194 	Note that this function takes a TDes8. This is to allow for extensions
       
 15195 	to the class as developments proceed apace. The function will always
       
 15196 	fill the entire descriptor with zero and then copy the smaller of the
       
 15197 	current size of the info class or size of the descriptor. Thus if a
       
 15198 	new info class is used with an old O/S all new members are guaranteed
       
 15199 	to be zeroed. If an old info class is used with a new O/S only the
       
 15200 	appropriate slice of the new info struct is	returned. There is a
       
 15201 	typedef for a packaged THalInfoV1 called THalInfoV1Buf which can be
       
 15202 	passed to User::HalInfo(). Ofcourse later version will be derived
       
 15203 	from THalInfoV1 as THalInfoV2 and so on, leaving a clear picture of
       
 15204 	what has been added between versions. The object can be retrieved
       
 15205 	from the package as follows:
       
 15206 
       
 15207 	THalInfoV1Buf b;
       
 15208 	User::HalInfo(b);
       
 15209 	THalInfoV1 &info=b();
       
 15210 	test.Printf(_L("Machine name = %S\n"),&info.MachineName());
       
 15211 
       
 15212 	See the test program \E32\TCDT\T_HAL.CPP for details.
       
 15213 
       
 15214 7). The O/S was running DLL startup procedures before starting the file
       
 15215 	server and window server threads. It has to do this to allow the
       
 15216 	Window and File server DLLs to register their threads so that they
       
 15217 	can be started in an ordered manner. However many other servers
       
 15218 	like the alarm, comms and secokets servers would also like to start
       
 15219 	the server thread from their E32Dll() entry point. The solution is
       
 15220 	to hang all starting threads except the Window and File server
       
 15221 	threads until the Window and File server threads have started.
       
 15222 
       
 15223 8).	Changed the RLibrary::Load() function so that it will automatically
       
 15224 	add the approriate suffix for the current build. Thus if the file
       
 15225 	server wants to load a .DLL called "elocal.fsy" it just uses
       
 15226 	"elocal.fsy". The O/S will look for the .DLL names as follows:
       
 15227 
       
 15228 	   Build         Source     Suffix     Target
       
 15229 	============  ============  ======  ==============
       
 15230 	ansi release  "elocal.fsy"   none     "elocal.fsy"
       
 15231 	ansi debug    "elocal.fsy"      d    "elocald.fsy"
       
 15232 	uni release   "elocal.fsy"      u    "elocalu.fsy"
       
 15233 	uni debug     "elocal.fsy"     ud   "elocalud.fsy"
       
 15234 
       
 15235 	Because of 8 character name limits the maximum length name of a DLL
       
 15236 	can only be 6 characters. If an extension is not supplied it will
       
 15237 	be assumed to be .DLL.
       
 15238 
       
 15239 9). Added TPtrC8::Set(const TDesC8 &aDes) and TPtr8::Set(const TPtr8 &aPtr)
       
 15240 	and the TPtrC16 and TPtr16 equivalents.
       
 15241 
       
 15242 10).The resource file \E32\KPWINS\KWINS.RC was including afxres.h from
       
 15243 	\msvc20\mfc\include which is not actually required. Fixed.
       
 15244 
       
 15245 11).Fixed a bug in TLex::Val(TInt?) which has been lurking from day one
       
 15246 	and was scraping by through good fortune.
       
 15247 
       
 15248 12).Fixed a bug in creating global operating system objects such as
       
 15249 	RSempahores etc.
       
 15250 
       
 15251 13).Changed CArrayPakBase to be derived directly from CBase rather
       
 15252 	than CArrayVarBase. This was being done to share code but because
       
 15253 	of the public inheritance it caused some nasty problems since a
       
 15254 	CArrayPakBase is definitely not ISA CArrayVarBase. Users of this
       
 15255 	class note that the sort function is SortL() and not Sort() since
       
 15256 	it makes a copy of the array as a CArrayVar and then sorts it.
       
 15257 	Making the copy can clearly fail. Also note that since the sort is
       
 15258 	actually performed on a CArrayVar the key for SortL() needs to be
       
 15259 	a TKeyArrVar. Other functions take a TKeyArrPak as normal. No code
       
 15260 	should be affected by this change.
       
 15261 
       
 15262 14).Added const TArray<T> Array() to each of the array template classes,
       
 15263 	which allows a degree of polymorphism amongst the arrays.
       
 15264 	TArray<T> only allows const T &operator[]() and Count().
       
 15265 
       
 15266 	If you want a function to be able to read any of the arrays then
       
 15267 	declare it as follows:
       
 15268 
       
 15269 	void ReadAnyArray(const TArray<TBuf_40> anArray);
       
 15270 
       
 15271 	It could use the TArray as follows:
       
 15272 
       
 15273 	TUint count=anArray.Count();
       
 15274 	for (TUint i=0;i<count;i++)
       
 15275 		test.Printf(_L("%S\n"),&anArray[i]);
       
 15276 
       
 15277 	Then if you have:
       
 15278 
       
 15279 	CArrayFixFlat<TBuf_40> *fix;
       
 15280 	CArrayFixFlat<TBuf_40> *var;
       
 15281 	CArrayFixFlat<TBuf_40> *pak;
       
 15282 
       
 15283 	They can all be passed to ReadAnyArray() as follows:
       
 15284 
       
 15285 	ReadAnyArray(fix->Array());
       
 15286 	ReadAnyArray(var->Array());
       
 15287 	ReadAnyArray(pak->Array());
       
 15288 
       
 15289 15).SteveT was getting a weird problem with delete in one of
       
 15290 	his CBase derived classes with the virtual destructor calling the
       
 15291 	delete from the Windows library. The fix to his problem is to
       
 15292 	provide CBase::operator delete() even though its not necessary.
       
 15293 
       
 15294 Version 0.01.043
       
 15295 ================
       
 15296 (Made by Colly, 21 Aug 1995)
       
 15297 
       
 15298 1). Renamed CBufFlat::Capacity() to CBufFlat::SetReserveL().
       
 15299 2). Added the L suffix to all the methods in the ADT classes which
       
 15300 	can leave.
       
 15301 	CBufBase::InsertL(), CBufFlat::InsertL() and CBufSeg::InsertL().
       
 15302 	CArrayFix::AppendL(), CArrayVar::AppendL() and CArrayPak::AppendL().
       
 15303 	CArrayFix::InsertL(), CArrayVar::InsertL() and CArrayPak::InsertL().
       
 15304 	CArrayFix::InsertIsqL(), CArrayVar::InsertIsqL() and CArrayPak::InsertIsqL().
       
 15305 	Note that all occurences of ISQ (uppercase) have been changed to
       
 15306 	lower case. Thus FindISQ() has become FindIsq().
       
 15307 	Note also that the virtual function InsertL() has been renamed to
       
 15308 	DoInsertL(), so that the derived classes do not have to re-define
       
 15309 	the two new InsertL()'s in CBufBase.
       
 15310 3). The CArray classes had a kludged way of delaying allocation of the
       
 15311 	CBufBase. Fixed.
       
 15312 4). Incorporated SteveT's changes to TPoint, TSize and TRect. His release
       
 15313 	notes are as follows:
       
 15314 		There are 3 changes to the TRect spec as agreed with Martin Tasker:-
       
 15315 		Replaced
       
 15316 			TInt TRect::InterSect()
       
 15317 			with
       
 15318 			void TRect::InterSection() &
       
 15319 			TBool TRect::Intersects()
       
 15320 		Changed the names of:-
       
 15321 			TRect:Union() to TRect::BoundingRect()
       
 15322 			TRect::Inside() to TRect::Contains()
       
 15323 		I have also removed most of the inline functions from the TPoint,
       
 15324 		TSize & TRect functions. The only ones left as inline are the
       
 15325 		TPoint & TSize constructors and operator=, although I'm still not
       
 15326 		too sure whether they should stay inline or not.
       
 15327 5).	Changed CBufBase::Ptr() and CBufBase::BackPtr() to return TPtrs
       
 15328 	rather than pointer and length.
       
 15329 	Added CBufBase::Read(TUint aPos,TDes8 &aDes)
       
 15330 		which will read aDes.Length() bytes.
       
 15331 	Added CBufBase::Read(TUint aPos,TDes8 &aDes,TUint aLength)
       
 15332 		which will read aLength bytes.
       
 15333 	Added CBufBase::Write(TUint aPos,const TDesC8 &aDes)
       
 15334 		which will write aDes.Length() bytes.
       
 15335 	Added CBufBase::Write(TUint aPos,const TDesC8 &aDes,TUint aLength)
       
 15336 		which will write aLength bytes.
       
 15337 	Added CBufBase::InsertL(TUint aPos,const TDesC8 &aDes)
       
 15338 		which will insert aDes.Length() bytes.
       
 15339 	Added CBufBase::InsertL(TUint aPos,const TDesC8 &aDes,TUint aLength)
       
 15340 		which will insert aLength bytes.
       
 15341 6). Removed the protected destructor (not actually implemented) from CBase
       
 15342 	and changed CBase::Destroy() so that it does not delete this.
       
 15343 
       
 15344 	Renamed	CBase::Destroy() as CBase::Destruct() and all other
       
 15345 	virtual Destroy()s to Destruct().
       
 15346 
       
 15347 	Changed Adt::Destroy() to call delete after the Destruct().
       
 15348 
       
 15349 	This allows CBase derived objects to be aggregated by value, although
       
 15350 	it is not Psion policy to do this (preferring to aggegrate by reference).
       
 15351 
       
 15352 	Note that there is no longer any requirement to call CBase::Destroy()
       
 15353 	from classes derived from CBase.
       
 15354 
       
 15355 	Note that if aggregating by reference which should be the case for
       
 15356 	all Psion code then the object must be destroyed with Adt::Destroy()
       
 15357 	rather than the Destruct() function. Its probably a good idea to
       
 15358 	search all code for ->Destroy() and check each case. Also make sure
       
 15359 	that all classes derived from CBase	which have virtual void Destroy()
       
 15360 	are changed to virtual void Destruct().
       
 15361 7). CObjectIx, CObjectCon and CObjectConIx could all be created with
       
 15362 	optional leave on error. This is not in the spirit of
       
 15363 	the ADT classes and so I have removed the option. They will now
       
 15364 	always leave on errors. The methods have been renamed where
       
 15365 	applicable with the L suffix. These classes were also privately
       
 15366 	derived from CArrayFixFlat<T> which was breaking the ISA
       
 15367 	relationship with CBase, which prevents use of Adt::Destroy().
       
 15368 	They now have a CArrayFixFlat<T> and are derived directly from
       
 15369 	CBase. CObject and CObjectCon used to capitalise the name. They
       
 15370 	are now case sensitive on the names. Note this affects server
       
 15371 	names (watch out SteveT and Brendan).
       
 15372 8). TPckg<T>::operator->() and TPckg<T>::operator()() were returning
       
 15373 	const T * and const T & respectively. Fixed.
       
 15374 9). Added HBufC::NewMax() and HBufC::NewMaxL() which allocate an HBufC
       
 15375 	of the requested size and then set the length to the maximum length.
       
 15376 	Note in the proposals database a function it was agreed to add
       
 15377 	a function SetLengthToMax() to TDes. This has been done but I decided
       
 15378 	to call it SetMax(). Obviously these functions are available for 8
       
 15379 	and 16 HBufC's as well.
       
 15380 10).If multiple inheritance is to be allowed for then the only way to
       
 15381 	guarantee that an Adt::Destroy() through a CBase pointer will work
       
 15382 	correctly is to have a virtual destructor. This has been implemented
       
 15383 	in CBase. No derived classes need to be changed as the compiler will
       
 15384 	generate the appropriate destructors automatically. If this seems
       
 15385 	like a waste then I have to agree, however it will make us compatible
       
 15386 	with the C++ language and all proper C++ implementations. If you want
       
 15387 	to know more details then ask me, Gerry or DavidW.
       
 15388 11).The ENTER,CATCH,END_ENTER mechanism had a serious flaw when using
       
 15389 	a register calling convention. This has now been replaced with the
       
 15390 	pre-processor macros TRAP and TRAPD. These are defined as below:
       
 15391 
       
 15392 #define TRAP(_r,_s) {TTrap __t;if (__t.Trap(_r)==0){_s;TTrap::UnTrap();}}
       
 15393 #define TRAPD(_r,_s) TInt _r;{TTrap __t;if (__t.Trap(_r)==0){_s;TTrap::UnTrap();}}
       
 15394 
       
 15395 	Basically _r is an integer variable which will receive the result of
       
 15396 	any User::Leave() and _s is a statement to be executed. It can be any
       
 15397 	valid C++ statement, but will normally be a function call.
       
 15398 
       
 15399 	The difference between TRAP and TRAPD is that TRAPD will declare the
       
 15400 	integer variable for you. The integer variable will always be
       
 15401 	initialised to 0 before the statement _s is executed. It is possible
       
 15402 	to use a number of statements for _s by separating them with ; but
       
 15403 	this will possibly lead to failure.
       
 15404 
       
 15405 	Examples:
       
 15406 
       
 15407 	CSomething *pS=new(ELeave) CSomething;
       
 15408 	TRAPD(ret,pC->ConstructL())
       
 15409 	if (ret!=KErrNone)
       
 15410 		{
       
 15411 		Adt::Destroy(pS);
       
 15412 		User::Leave(ret);
       
 15413 		}
       
 15414 
       
 15415 	is the same as
       
 15416 
       
 15417 	CSomething *pS=new(ELeave) CSomething;
       
 15418 	TInt ret;
       
 15419 	TRAP(ret,pC->ConstructL())
       
 15420 	if (ret!=KErrNone)
       
 15421 		{
       
 15422 		Adt::Destroy(pS);
       
 15423 		User::Leave(ret);
       
 15424 		}
       
 15425 
       
 15426 	If you have a function, say TInt DoSomethingL() and you want to
       
 15427 	get the result of the function or the leave then do this:
       
 15428 
       
 15429 	TRAPD(ret,ret=DoSomethingL())
       
 15430 12).Changed RHeap::Free() to zero the cell it has just freed in the debug
       
 15431 	build.
       
 15432 13).Added User::RequestComplete() which will complete a request in for
       
 15433 	the current thread.
       
 15434 14).Added a new CDT TCallBack which packages a function taking a TAny *
       
 15435 	argument and returning an integer with a TAny * value. It has a two
       
 15436 	constructors, the one which does not have a TAny * value will set the
       
 15437 	value to NULL. It has one function CallBack which can be used to call
       
 15438 	the function passing it the TAny * value. e.g.
       
 15439 
       
 15440 	class TMyIdle
       
 15441 		{
       
 15442 	public:
       
 15443 		void Run();
       
 15444 		static TInt Idle(TAny *aPtr);
       
 15445 		};
       
 15446 
       
 15447 	TInt TMyIdle::Idle(TAny *anObj)
       
 15448 		{((TMyIdle *)anObj)->Run();}
       
 15449 
       
 15450 	TMyIdle idler;
       
 15451 	CIdle *pI=CIdle::New();
       
 15452 	pI->ConstructL(TCallBack(TMyIdle::Idle,&idler));
       
 15453 15).Added a new active object CIdle which will call back whenever
       
 15454 	the active scheduler has scheduled all higher priority objects.
       
 15455 	CIdle will re-schedule itself as long as the callback function
       
 15456 	returns TRUE. It can be re-started by calling Start() again.
       
 15457 	New() and NewL() add the idle object to the scheduler.
       
 15458 16).Changed CPeriodic to use a TCallBack. Note the CPeriodic::RunL()
       
 15459 	now always calls the callback.
       
 15460 17).Added TLex8::UnGetToMark() and TLex16::UnGetToMark() which just
       
 15461 	reset iNext to iMark.
       
 15462 18).Renamed all the functions which were in the debug build but not in
       
 15463 	the release build to have an __Dbg prefix. Also renamed the test
       
 15464 	functions __TestInvariant() and __Test to __DbgTestInvariant and
       
 15465 	__DbgTest. This is partly as a reminder to users of these functions
       
 15466 	that they should only be used inside #if defined(_DEBUG) and partly
       
 15467 	to ease producing the .DEF file to control the .DLL build process
       
 15468 	using linkage by ordinal. An automated tool will generate the .DEF
       
 15469 	file for a .DLL linked by name and will produce the .DEF for the
       
 15470 	debug build. It can then produce the .DEF for the release build
       
 15471 	by leaving out all the functions starting with __Dbg.
       
 15472 
       
 15473 Version 0.01.042
       
 15474 ================
       
 15475 (Made by Colly, 3 Aug 1995)
       
 15476 
       
 15477 1). All DLLs now link by ordinal.
       
 15478 2). The release versions had a startup bug with some configurations of DLL
       
 15479 	useage. DavidW this is what cause the BAFL test code to fail.
       
 15480 3). Includes the first release of the Epoc/32 microkernel platform and
       
 15481 	implementation for 486 processor on an IBM/PC.
       
 15482 
       
 15483 NOTES
       
 15484 =====
       
 15485 
       
 15486 Its a good idea to turn on DEBUG under link so that release EXEs and DLLs
       
 15487 have at least the public symbols for debugging. This can be done for
       
 15488 all build variants. I have done this for all .MAK files in E32 and F32.
       
 15489 
       
 15490 Version 0.01.041
       
 15491 ================
       
 15492 (Made by Colly, 25 July 1995)
       
 15493 
       
 15494 1). RThread::Read() failed when reading a descriptor of the type
       
 15495 	generated by TBufC::Des(). Added a test and fixed.
       
 15496 2). Made the NULL thread hang around forever instead of exiting to help
       
 15497 	with debugging.
       
 15498 3). Added a new directory BWINS to the group which now has all the .MAK
       
 15499 	files used to build the base. If the .MAK is in the same directory
       
 15500 	as the source files then the debug databases .PDB files don't store
       
 15501 	a full path which causes the debugger to prompt for the source
       
 15502 	directory. Putting them in BWINS causes all paths to be stored in the
       
 15503 	.PDB. Note that the BLD.CMD files remain where they were they just
       
 15504 	pick up the .MAK file from BWINS. If using VC++ then load the .MAK
       
 15505 	file directly from BWINS. Moved the startup files from USTAT to
       
 15506 	UPWINS and dropped the USTAT directory from the group.
       
 15507 	Split the startup module us_stat.cpp into two UP_EXE.CPP for
       
 15508 	starting .EXEs and UP_DLL.CPP for starting DLLs.
       
 15509 4). Split EWINS into two .DLLs. EWINS still	survives but now contains
       
 15510 	just the user mode functions. KWINS is new and contains the kernel.
       
 15511 	There is no need to change any .MAK files as it is only the
       
 15512 	EWINSxx.DLLs which link to KWINSxx.DLL.
       
 15513 5). Stopped releasing the include file E32CHAR.H.
       
 15514 6). Merged the E32EVNT.H and E32WSRV.H header files into one header file
       
 15515 	E32SVR.H which is just for communication with system servers such
       
 15516 	as the Window server and File server etc. Moved the functions which
       
 15517 	were in the UserWindowServer class to the UserSvr class and gave
       
 15518 	the functions better names. Note that I have given the functions in
       
 15519 	the UserSvr class more meaningful names. SteveT, these changes will
       
 15520 	affect you!
       
 15521 7). Fixed missing external references to _fltused, _adj_fdiv, _adjust_fdiv,
       
 15522 	_adjust_fdivr_m64 and _adjust_fdiv_m64.
       
 15523 8). Added the functions to support Global and thread local data in DLLs.
       
 15524 	The functions are as follows:
       
 15525 
       
 15526 	TAny *Dll::Tls() - Returns the Thread Local Storage variable for the
       
 15527 					   current DLL.
       
 15528 	void Dll::SetTls(TAny *aPtr) - Sets the Thread Local Storage variable
       
 15529 								   for the current DLL.
       
 15530 	Usually in the entry point E32Dll() when the process is attached or
       
 15531 	when a thread is attached to the DLL some memory will be allocated
       
 15532 	on the threads heap. This value will then be saved with Dll::SetTls().
       
 15533 	Thereafter it can be retrieved with Dll::Tls().
       
 15534 
       
 15535 	The following functions are not yet fully implemented:
       
 15536 
       
 15537 	TBool Dll::GlobalAllocated();
       
 15538 	TInt Dll::GlobalAlloc(TUint aSize);
       
 15539 	TInt Dll::GlobalRead(TUint aPos,TDes8 &aDes);
       
 15540 	TInt Dll::GlobalWrite(TUint aPos,TDesC8 &aDes);
       
 15541 
       
 15542 	Dll::GlobalAlloc() allocates the global data for the currently
       
 15543 	running	DLL. Specifying a size of 0 will free the data. The amount
       
 15544 	of data allocated can be changed by calling Dll::GlobalAlloc()
       
 15545 	repeatedly. It is normal to allocate the global data in the entry
       
 15546 	point E32Dll() when a process attaches and when
       
 15547 	Dll::GlobalAllocated() returns EFalse. There is no need to free
       
 15548 	the data since if the DLL is unloaded the data will be freed. However
       
 15549 	it is possible to use some of the allocated data to keep a reference
       
 15550 	count which can be incremented on process attach and decremented on
       
 15551 	process detach. When the count is zero it can be discarded.
       
 15552 
       
 15553 	Since the data is kept in the kernel the DLL cannot have direct
       
 15554 	access to the data, so it must be read and written using the
       
 15555 	Dll::GlobalRead() and Dll::GlobalWrite() functions. It
       
 15556 	is considered a panic to write past the current size of the data
       
 15557 	but not an error to read past the end of the data.
       
 15558 
       
 15559 	These functions are implemented in a class of their own since they
       
 15560 	need to be statically linked with each DLL or EXE (note than an
       
 15561 	EXE is also potentially a DLL) on the WINS platform.
       
 15562 
       
 15563 	Finally it is a good idea to minimize the size of the global data.
       
 15564 
       
 15565 	Look at the test DLL \e32\tcdt\t_dll.mak and the test program
       
 15566 	\e32\tcdt\t_tdll.mak to see how this works in practice.
       
 15567 
       
 15568 9). Now release EXDLL??.PDB	files. These come from EXDLL??.OBJ which is
       
 15569 	a start up module for EWINS??.DLL, KWINS??.DLL and LWINS??.DLL which
       
 15570 	have special initialisation	requirements. These are just released as
       
 15571 	an aide to debugging.
       
 15572 
       
 15573 NOTES
       
 15574 =====
       
 15575 
       
 15576 It is now vital that programs are build with proper make files. In
       
 15577 particular any program still linking to the C runtime library MSVCRT20.DLL
       
 15578 will fail to start correctly. Note that we are only talking about the
       
 15579 C runtime library and not the Win32 API libraries kernel32.lib,
       
 15580 gdi32.lib, user32.lib etc. The C runtime library is no longer necessary
       
 15581 as the base is now running entirely independently.
       
 15582 
       
 15583 All EXEs should be linked with ESTAT??.OBJ and should have _E32Startup
       
 15584 set as the entry point.
       
 15585 
       
 15586 All DLLs should be linked with EDLL??.OBJ and should have _E32Dll set
       
 15587 as the entry point. Remeber that a DLL must now supply a function
       
 15588 E32Dll(). To see and example look at the code in \E32\DPWINS\WS_UTL.CPP.
       
 15589 
       
 15590 Everything should be linked with the user library EWINS??.LIB. Apart from
       
 15591 other E32 software nothing else should be necessary.
       
 15592 
       
 15593 Make sure that "Ignore all default libraries" is set and that
       
 15594 "Disable exception handling is also checked" and that alignment is
       
 15595 set to 4 bytes.
       
 15596 
       
 15597 If you are not sure then start with one of the .MAK files released by
       
 15598 the base and modify it to suit your project.
       
 15599 
       
 15600 Version 0.01.040
       
 15601 ================
       
 15602 (Made by Colly, 20 July 1995)
       
 15603 
       
 15604 1). Converted the kernel to having a Kernel Supervisor Server and an
       
 15605 	executive.
       
 15606 2). Replaced the specific exit type of exception with a Panic() category
       
 15607 	of Exception.
       
 15608 3). Clean compiled all the platform independent source code with the GCC
       
 15609 	compiler with the exception of the sources in UMATH.
       
 15610 4). Added cleanup functionality to the kernel.
       
 15611 5). Incorporated SteveT's fixes to pointer messages with the new screen
       
 15612 	surround.
       
 15613 6). Added Martin Dolphin's CArrayPacked classes. Renamed the classes
       
 15614 	"Packed" to "Pak". His release notes follow:
       
 15615 
       
 15616 	 This version of CArrayPak inherits from CArrayVar and uses
       
 15617 	 some virtual functions to achieve code reuse. TKeyArrayPak
       
 15618 	 inherits from TKeyArrayVar.
       
 15619 
       
 15620 	 ucdt\uc_func.cpp
       
 15621 		This has a slightly modified binary search.
       
 15622 		This modification guarantees that:
       
 15623 		//if no match is found.
       
 15624 		//the index of the record logically following the value being searched
       
 15625 		//for will be returned in aPos.
       
 15626 
       
 15627 	uadt\ua_array.cpp
       
 15628 		Has the new CArrayPak code plus some other small
       
 15629 		modification listed below.
       
 15630 		CArrayFixBase::InsertIsq changed to reflect change in BinarySearch.
       
 15631 		CArrayVarBase::Find, FindIsq have had unused length parameter
       
 15632 		removed, some functions made virtual to achieve code reuse.
       
 15633 8). Fixed further bugs in TInt64 divide and remainder functions as
       
 15634 	reported by SteveT.
       
 15635 9). Incorporated SteveT's changes to the region classes.
       
 15636 10).Incorporated the faster versions of User::MemCopy(),User::MemFill()
       
 15637 	and User::MemFillZ()
       
 15638 11).Added two template inline functions to align pointers.
       
 15639 	inline T *Align2(T *aPtr)
       
 15640 	inline T *Align4(T *aPtr)
       
 15641 	Align2 will make ((T *)&1)==0
       
 15642 	Align4 will make ((T *)&3)==0
       
 15643 	and two template functions to align integers.
       
 15644 	inline TUint Align4(T aVal)
       
 15645 	inline TUint Align2(T aVal)
       
 15646 12).Removed the Notify() and SetNotify methods from RThread and RProcess.
       
 15647 	They will re-appear in the file server in due course.
       
 15648 13).Added the executive dispatcher to the kernel.
       
 15649 14).Rationalised the RThread and RChunk read/write routines.
       
 15650 15).Changed CActiveScheduler::Destroy() to just remove active objects
       
 15651 	from the schedule queue. It used to destroy them as well. Before
       
 15652 	removing each active object it will call CActive::Cancel();
       
 15653 16).Fixed a bug in TLex8::NextToken() and TLex16::NextToken() which
       
 15654 	was not checking properly for the end of the buffer. Found by Martin
       
 15655 	Dolphin by trying to lex an empty command line.
       
 15656 17).Changed the name of the key matching enumerates as follows:
       
 15657 	TKeyArrayCmp to TKeyCmpText
       
 15658 	TKeyArrayCmpNumeric to TKeyCmpNumeric
       
 15659 	Added another constructor for comparing descriptors and changed
       
 15660 	the order of the parameters as follows:
       
 15661 	inline TKey(TUint anOffset,TKeyCmpText aType);
       
 15662 		At anOffset should be one of the descriptor types, TPtr,TBufC etc
       
 15663 	inline TKey(TUint anOffset,TKeyCmpText aType,TUint aLength);
       
 15664 		At anOffset should be TText of length aLength.
       
 15665 	inline TKey(TUint anOffset,TKeyCmpNumeric aType);
       
 15666 		At anOffset should be an integer of some type.
       
 15667 	Added support for TInt64s.
       
 15668 	This change is propagated to the various TKeyArrayXXX:: classes.
       
 15669 18).Fixed a race condition in the kernel when resuming threads.
       
 15670 19).If a thread panics then it just quietly disappears. If this is
       
 15671 	one of the server threads then the program appears to hang for
       
 15672 	no reason. To this end I have added new services RThread::Server()
       
 15673 	and RThread::SetServer(TBool aState). Any thread marking itself as
       
 15674 	a server with RThread().SetServer(ETrue) will have its panics
       
 15675 	reported through the messagebox and will then abort the program.
       
 15676 	Note that this is done for the main thread as well.
       
 15677 
       
 15678 NOTES
       
 15679 	All test programs pass in all builds.
       
 15680 
       
 15681 Version 0.01.039
       
 15682 ================
       
 15683 (Made by Colly, 23 June 1995)
       
 15684 
       
 15685 1). Finally removed the dependency on the C runtime libarary.
       
 15686 
       
 15687 	There are new libraries in t:\msvc21\lib which should all
       
 15688 	be copied to c:\msvc20\lib. This is still necessary as the
       
 15689 	main operating system .DLL and SteveT's .DLL still link to
       
 15690 	the runtime library MSVCRT20.DLL. Also copy
       
 15691 	t:\msvc21\system32\*.* to c:\winnt35\system32\*.*
       
 15692 
       
 15693 	The build for a .EXE has now changed as follows:
       
 15694 
       
 15695 	a). Select project settings and highlight all 4 builds:
       
 15696 			Select the Link tab and the Output category.
       
 15697 			Set Entry-point symbol to _E32Startup
       
 15698 			(The case is important in _E32Startup)
       
 15699 			Select the general category.
       
 15700 			Delete all the libraries/object modules.
       
 15701 			Make sure "Ignore all Default libraries" is selected.
       
 15702 	b). Select each build in turn and set the libraries/object modules
       
 15703 		as follows:
       
 15704 
       
 15705 		Release     : \e32sys\estat.obj \e32sys\ewins.lib
       
 15706 		Debug       : \e32sys\estatd.obj \e32sys\ewinsd.lib
       
 15707 		Uni Release : \e32sys\estatu.obj \e32sys\ewinsu.lib
       
 15708 		Uni Debug   : \e32sys\estatud.obj \e32sys\ewinsud.lib
       
 15709 
       
 15710 	If in doubt look at one of the test programs.
       
 15711 
       
 15712 	The build for a .DLL which is linked to Win32 does not need to
       
 15713 	change at all.
       
 15714 
       
 15715 	The build for a .DLL which is linked only to E32 must be changed
       
 15716 	as follows:
       
 15717 
       
 15718 	a). Select project settings and highlight all 4 builds:
       
 15719 			Select the Link tab and the Output category.
       
 15720 			Set Entry-point symbol to _E32Dll
       
 15721 			(The case is important in _E32Dll)
       
 15722 			Select the general category.
       
 15723 			Delete all the libraries/object modules.
       
 15724 			Make sure "Ignore all Default libraries" is selected.
       
 15725 	b). Select each build in turn and set the libraries/object modules
       
 15726 		as follows:
       
 15727 
       
 15728 		Release     : \e32sys\edll.obj \e32sys\ewins.lib
       
 15729 		Debug       : \e32sys\edlld.obj \e32sys\ewinsd.lib
       
 15730 		Uni Release : \e32sys\edllu.obj \e32sys\ewinsu.lib
       
 15731 		Uni Debug   : \e32sys\edllud.obj \e32sys\ewinsud.lib
       
 15732 
       
 15733 	c). Provide a function prototyped as follows:
       
 15734 
       
 15735 		GLDEF_C TInt E32Dll(TDllReason aReason)
       
 15736 
       
 15737 		See \f32\sfsrv\fs_utl.cpp for an example of such a function.
       
 15738 
       
 15739 	The new system cannot be build with the project system at the
       
 15740 	moment and must be built with the VC++ IDE. The correct build
       
 15741 	order is as follows:
       
 15742 
       
 15743 	\e32\lsrc\lwins.mak
       
 15744 	\e32\kpwins\ewins.mak
       
 15745 	\e32\ustat\estat.mak
       
 15746 	\e32\ustat\edll.mak
       
 15747 
       
 15748 2). Added the fancy graphics screen bitmap of protea to surround the screen.
       
 15749 	It does not appear in its full glory on my work machine, but it does on
       
 15750 	my home machine. Perhaps SteveT can sort this out for me. I am also
       
 15751 	assuming that SteveT will handle the buttons on the imaghe and return
       
 15752 	them as key strokes.
       
 15753 3). CServer::RunL() was still using delete to remove a session when
       
 15754 	a client disconnected rather than Destroy().
       
 15755 4). Added a protected destructor to CBase which will stop any objects
       
 15756 	derived from CBase being placed on the stack.
       
 15757 5). Increased the Window servers stack to 1MByte.
       
 15758 6). TInt64 divide was not working for large intergers.
       
 15759 7). Absorbed SteveT's new region code.
       
 15760 8). Fixed a bug in TLex::Val() which was not dealing with the end of the
       
 15761 	descriptor properly. MartinH's fix.
       
 15762 9). Added the TReal to buffer and buffer to TReal functions. The maths
       
 15763 	library is now complete. Thanks to MartinH.
       
 15764 10).Fixed a bug in CArrayFixBase::DestroyAll().
       
 15765 11).Moved the TInt64 class from E32MATH.H to E32STD.H and its source
       
 15766 	code from umath to ucdt.
       
 15767 12).Took the additions to the bitmap allocator from JaneS
       
 15768 13).New version of enter and leave which should fix previous problems
       
 15769 
       
 15770 NOTES
       
 15771 =====
       
 15772 
       
 15773 1). T_LEX.CPP failed because the TReal functions now work. I have
       
 15774 	commented these out until MH can fix them.
       
 15775 2). T_THREAD.CPP and T_SEMUTX.CPP fail under the unicode debug version.
       
 15776 	T_THREAD because their is a race condition in the kernel somwhere
       
 15777 	and T_SEMUTX.CPP because there is a bug in the program logic. I will
       
 15778 	fix these in the next release.
       
 15779 
       
 15780 Version 0.01.038
       
 15781 ================
       
 15782 (Made by DavidW, 19 May 1995)
       
 15783 
       
 15784 One step backwards before taking two steps forward again!
       
 15785 Put back RRegion::~RRegion to allow the Window Server and GDI to
       
 15786 release new versions quickly, compatible with the latest E32, before
       
 15787 they take more time over the next week to convert to a new RRegion
       
 15788 scheme altogether.
       
 15789 
       
 15790 [Added later - fixed INCC.PRJ to release E32DES8.H & E32DES16.H]
       
 15791 
       
 15792 Also made a fix to MNT.CMD which meant that only the Release build
       
 15793 versions were being released.  The ESTAT*.PDB files weren't being
       
 15794 released either.
       
 15795 
       
 15796 Note: T_I64 still fails in UON.
       
 15797 T_SEMUTX fails intermittently (in either UON and UOFF).
       
 15798 
       
 15799 Version 0.01.037
       
 15800 ================
       
 15801 (Made by Colly, 19 May 1995)
       
 15802 
       
 15803 1). Fixed a bug in Math::Rand().
       
 15804 2). Moved the private classes TRectKey and TRectSwap in RRegion
       
 15805 	to be declared locally in u_regn.cpp.
       
 15806 	RRegion still has a virtual destructor which I have now removed. I
       
 15807 	notice that the test code t_regn.cpp does not test either the Close()
       
 15808 	or Destroy() functions.
       
 15809 3). Re-organized the entire group.
       
 15810 	SUSER has been split into
       
 15811 		UCDT	- User Concrete Data Types, platform independent
       
 15812 		UPWINS	- User Wins platform dependent
       
 15813 	SOLIB renamed to UADT - User Abstract Data Types
       
 15814 	SMATH renamed to UMATH
       
 15815 	TUSER renamed to TCDT
       
 15816 	TOLIB renamed to TADT
       
 15817 	SKERN renamed to KSRC
       
 15818 	SWINS renamed to KPWINS
       
 15819 	SWINSD renamed to DPWINS
       
 15820 	SLOCL renamed to LSRC
       
 15821 4). In line with the above I have renamed E32OLIB.H and E32OLIB.INL
       
 15822 	to E32ADT.H and E32ADT.INL.
       
 15823 5). Added class CBitMapAllocator to Adt. This class uses a bitmap to
       
 15824 	control allocation of resources. It is used by the PageAllocator
       
 15825 	in the micro kernel to allocate free physical pages. Another
       
 15826 	potential use is in implementing a block allocation scheme in
       
 15827 	a binary file such as a BTree index file.
       
 15828 6). I have changed the way the version numbers are formatted by TVersion.
       
 15829 7). Fixed a bug in RSubSession::Close() which did not check for a NULL
       
 15830 	handle before despatching the close message to the server. It is
       
 15831 	normal practice to allow a close on something which has never been
       
 15832 	opened/created.
       
 15833 8). Recorded the size of components in the release history.
       
 15834 9). The localising code is now released separately as LWINS.DLL. This
       
 15835 	is currently included in the base release zip file ewins. Note that
       
 15836 	only ewins.dll has a dependency on this file so that no build files
       
 15837 	need change.
       
 15838 10).Changed TDblQueIterBase::Wind() and TDblQueIterBase::Rewind()
       
 15839 	to TDblQueIterBase::SetToFirst() and TDblQueIterBase::SetToLast()
       
 15840 	Also added TDblQueIter<T>::Set(T &aLink) which will start the
       
 15841 	iterator on a particular link.
       
 15842 11).Changed TSglQueIterBase::Rewind() to TSglQueIterBase::SetToFirst()
       
 15843 	Also added TSglQueIter<T>::Set(T &aLink) which will start the
       
 15844 	iterator on a particular link.
       
 15845 12).Added a function Adt::DestroyZ(CBase * &anObject) which will
       
 15846 	destroy an object if anObject is not NULL and will then zero
       
 15847 	anObject.
       
 15848 13).Added DestroyAll() to CArrayFixFlat and CArrayFixSeg which
       
 15849 	assumes that the array is a set of CBase pointers, i.e.
       
 15850 	CArrayFixFlat<CBase *>. The only check that is made is the the
       
 15851 	record length==sizeof(CBase *). Note that DestroyAll() destroys
       
 15852 	all the non-NULL pointers and then calls the normal Destroy().
       
 15853 14).Added a new template class TAggregate to e32atd.h. The idea
       
 15854 	behind TAggregate is to automate the desctruction of aggregate
       
 15855 	objects in CBase derived classes. Say you have three active
       
 15856 	objects owned by your object CMyObject the current way of
       
 15857 	writing the class is as follows:
       
 15858 
       
 15859 	class CMyObject : public CBase
       
 15860 		{
       
 15861 	public:
       
 15862 		CMyObject();
       
 15863 		virtual void Destroy();
       
 15864 		inline CTimer &Timer(*iTimer);
       
 15865 		inline CServer &Server(*iServer);
       
 15866 		inline CComms &Comms(*iComms);
       
 15867 	private:
       
 15868 		CTimer *iTimer;
       
 15869 		CServer *iServer;
       
 15870 		CComms *iComms;
       
 15871 		};
       
 15872 
       
 15873 	And the Destroy() is as follows:
       
 15874 
       
 15875 	void CMyObject::Destroy()
       
 15876 		{
       
 15877 
       
 15878 		Adt::DestroyZ(iTimer);
       
 15879 		Adt::DestroyZ(iServer);
       
 15880 		Adt::DestroyZ(iComms);
       
 15881 		CBase::Destroy();
       
 15882 		};
       
 15883 
       
 15884 	With TAggregate you would do it as follows.
       
 15885 
       
 15886 	class CMyObject : public CBase
       
 15887 		{
       
 15888 	private:
       
 15889 		enum {ETimer,EServer,EComms,EMaxAggregate};
       
 15890 	public:
       
 15891 		CMyObject();
       
 15892 		virtual void Destroy();
       
 15893 		inline CTimer &Timer(*((CTimer *)iAgg.iPtrs[ETimer]));
       
 15894 		inline CServer &Server(*((CServer *)iAgg.iPtrs[EServer]));
       
 15895 		inline CComms &Comms(*((CComms *)iAgg.iPtrs[EComms]));
       
 15896 	private:
       
 15897 		TAggregate iAgg[EMaxAggregate];
       
 15898 		};
       
 15899 
       
 15900 	And the destructor is as follows:
       
 15901 
       
 15902 	void CMyObject::Destroy()
       
 15903 		{
       
 15904 
       
 15905 		iAgg.Destroy();
       
 15906 		CBase::Destroy();
       
 15907 		};
       
 15908 
       
 15909 	If one of the aggregates is removed or another is added all that
       
 15910 	has to be done is add a new enum and the accessor method.
       
 15911 	The Destroy() will automatically be correct. Note that there is
       
 15912 	no additional overhead for the iAgg.iPtrs[] in the accessors.
       
 15913 15).I have added a new template class TAutoClose to e32std.h which
       
 15914 	will add a destructor to any class which has a Close() method.
       
 15915 	This is	useful for functions in which you want to take advantage
       
 15916 	of the compiler automatically destructing the object when it goes
       
 15917 	out of scope. e.g.
       
 15918 
       
 15919 	TInt ReadFile(const TDesC &aFile)
       
 15920 	//
       
 15921 	// Read a file
       
 15922 	//
       
 15923 		{
       
 15924 
       
 15925 		TAutoClose<RFile> f;
       
 15926 		TInt r=f.iObj.Open(aFile,KFileStreamText|EFileExclusive);
       
 15927 		if (r!=KErrNone)
       
 15928 			return(r);
       
 15929 		TBuf_100 b;
       
 15930 		if ((r=f.iObj.Read(b))!=KErrNone)
       
 15931 			return(r);
       
 15932 		.....
       
 15933 		}
       
 15934 
       
 15935 	There is no need to call f.iObj.Close() as the compiler will do that
       
 15936 	automatically when f goes out of scope. Even if the early return
       
 15937 	after f.iObj.Read() is taken the compiler will still call
       
 15938 	f.iObj.Close(). There is no overhead to using the TAutoClose class.
       
 15939 16).Added SetMax() to TDes which set the length of the TDes to
       
 15940 	MaxLength(). i.e. equivalent to:
       
 15941 	TBuf_100 b;
       
 15942 	b.SetLength(b.MaxLength());
       
 15943 17).Added TPtrC::Set(const TText *aBuf,TUint aLength) and
       
 15944 	TPtr::Set(TText *aBuf,TUint aLength,TUint aMaxLength)
       
 15945 	since assignment of a TPtrC is not supported and assignment
       
 15946 	of a TPtr means a deep copy rather than a shallow copy.
       
 15947 18).Renamed the files E32DES8.INL and E32DES16.INL if E32DES8.H and
       
 15948 	E32DES16.H
       
 15949 
       
 15950 Comp     Date   Bld  .text   .bss .rdata  .data .idata  Total
       
 15951 ===== ========= === ====== ====== ====== ====== ====== ======
       
 15952 LWINS 17-Mar-95  37    822     32   1344   1092    268   2704
       
 15953 EWINS 17-Mar-95  37  82484    560   6012   1156   2916  92568
       
 15954 
       
 15955 .text  = The code size (a good indication)
       
 15956 .bss   = The uninitialized data size (a good indication)
       
 15957 .rdata = The const data size (a good indication)
       
 15958 .data  = The initialized data size (a good indication)
       
 15959 .idata = C++ initialisation + .DLL export table (unreliable indication)
       
 15960 
       
 15961 The .idata section is unreliable since it has all .dll refences by name.
       
 15962 As .dll references will be by ordinal rather than by name I expect these
       
 15963 sizes to fall quite a bit.
       
 15964 
       
 15965 Note that the current conversion factor from VC++ to GC++ is multiply
       
 15966 by 1.16
       
 15967 
       
 15968 NOTES
       
 15969 =====
       
 15970 
       
 15971 1). I think that all the heap debug macros in e32std.h should be prefixed
       
 15972 	with __ and should be moved to their own include file e32hdbg.h which
       
 15973 	is included by e32def.h. I also removed the unnecessary spaces in
       
 15974 	their declaration which have been added back in build 035.
       
 15975 2). The functions RHeapDebug() in the RHeap class look like constrcutors
       
 15976 	which they are not. The should be declared as returning void and
       
 15977 	should also be given a different name. There are a number of comments
       
 15978 	in the RHeap class declaration which I have removed.
       
 15979 3). T_thread.cpp fails. Also this program was including the header file
       
 15980 	k32kern.h so that is could call Plat::CurrentProcess() to get the
       
 15981 	current process. It is a bad idea for any test programs to call any
       
 15982 	function in the kernel. This won't be possible on any other platform.
       
 15983 	The correct way to get the current thread or the current process is
       
 15984 	just to use an RProcess() or RThread() constructor. i.e.
       
 15985 
       
 15986 	if (RProcess().Mark())
       
 15987 		etc.
       
 15988 
       
 15989 	if (RThread().Priority==EPriorityNormal)
       
 15990 		RThread().SetPriority(EPriorityAboveNormal);
       
 15991 
       
 15992 	This works because the constructor for an RProcess or RThread sets
       
 15993 	the RThread or RProcess handle to a special token which means the
       
 15994 	currrent process or the current thread. It does no have to be
       
 15995 	opened or created in the normal way.
       
 15996 
       
 15997 	Also the current process can be got from the current thread e.g.
       
 15998 
       
 15999 	RThread().Process()
       
 16000 
       
 16001 	P.S. This was covered in the release 26 release notes.
       
 16002 4). T_HEAPDB.CPP also includes k32kern.h (now k32std.h) so that it
       
 16003 	can call Kern::UserHeap(). This is unnecessary as there is
       
 16004 	already a call User::Heap() which returns the current heap. I have
       
 16005 	fixed the test program.
       
 16006 5). T_I64.CPP still fails on divide. I will fix this in the next release.
       
 16007 
       
 16008 Version 0.01.036
       
 16009 ================
       
 16010 (Made by MartinB, 11 May 1995)
       
 16011 
       
 16012 1) New SetThreadAllocFail method in User (MartinH).
       
 16013 2) New macros in e32def.h (MartinH).
       
 16014 3) New Math functions and test code (MartinH),
       
 16015 4) New ASSERT_DEBUGs in RHeap::Alloc.
       
 16016 5) Removed User::SetWSAllocFail, since cannot have window server
       
 16017 	dependencies in the base.
       
 16018 6) Improved region code (Lane).
       
 16019 7) Added several "long ptr" qualifiers in P_I64.CPP.  MSVC was
       
 16020 	treating constants as 16 bit values when moved into (say)
       
 16021 	[ebx]. (MartinB).
       
 16022 
       
 16023 All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB)
       
 16024 (except T_I64 which does not run in UNICODE).
       
 16025 
       
 16026 Version 0.01.035
       
 16027 ================
       
 16028 (Made by MartinB, 9 May 1995)
       
 16029 
       
 16030 1) Fix to Mul routine in P_I64.CPP.
       
 16031 2) New region code from Steve/Lane.
       
 16032 3) New T_THREAD test code from MartinH.
       
 16033 4) New T_I64 test code from MartinH.
       
 16034 
       
 16035 All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB).
       
 16036 
       
 16037 Version 0.01.034
       
 16038 ================
       
 16039 (Made by Colly, 9 May 1995)
       
 16040 
       
 16041 1). In both versions of RSessionBase::SendReceive() the parameter
       
 16042 	TAny *aPtr can be passed as NULL.
       
 16043 2). Converted the design E32 to make the categories Kernel, User and
       
 16044 	Olib as units. This allows other designs to import these units.
       
 16045 3). Added to RChannelBase overloads for DoRequest() and DoControl() which
       
 16046 	allow none, one or two arguments.
       
 16047 4). Added three functions to the TLex classes.
       
 16048 	void SkipAndMark(TInt aNumber) which moves the mark along by aNumber.
       
 16049 	TPtrC Remainder() which returns the remainder of the buffer after
       
 16050 	the mark.
       
 16051 	void Inc(TInt aNumber) which moves the pointer on by aNumber.
       
 16052 5).	Added IMPORT_C TAny *operator new(TUint aSize,TUint anExtraSize)
       
 16053 	to CBase.
       
 16054 6). I have removed the resource file stuff from Olib because I do not
       
 16055 	want the base to have a dependency on the file system. Note that in
       
 16056 	due course the file server like the window server will live in its own
       
 16057 	group and is only included with E32 for convenience while I develop
       
 16058 	it. The file server is already completely independent of the operating
       
 16059 	system.
       
 16060 	I suggest that we have two DLLs called something like HCILI and HCILU.
       
 16061 	HCILI would contain user interface independent code and HCILU would
       
 16062 	have user interface dependent code. Then a getbld can go something like
       
 16063 	this:
       
 16064 
       
 16065 	GET E32		// The base
       
 16066 	GET F32		// The file server
       
 16067 	GET W32		// The window server
       
 16068 	GET HCIL	// Both HCIL DLLs
       
 16069 
       
 16070 	I originally intended to supply the base as 3 DLLs, i.e.
       
 16071 	E32KERN.DLL,E32USER.DLL and E32OLIB.DLL I now intend to supply it as
       
 16072 	just two merging E32OLIB.DLL and E32USER.DLL into E32USER.DLL. For
       
 16073 	those who are fond of the name OLIB I am quite happy to relinquish
       
 16074 	the name and HCILI.DLL could be OLIB.DLL. But OLIB is a funny name
       
 16075 	as it stands for Object library which is strange since all libraries
       
 16076 	are now object libraries. Maybe its time for OLIB to just disappear.
       
 16077 7). In messages associated with a RSubSession the handle was being passed
       
 16078 	in P1(). This was not the best option so I have now changed it to P4().
       
 16079 	Note that for a SubSessionCreate message a descriptor is passed in P4()
       
 16080 	rather than P1() which a server should use to write back the handle
       
 16081 	of the sub session. See \e32\swinsd\ws_main.cpp for an example of the
       
 16082 	approriate code.
       
 16083 8). Added Math::Rand(TInt64 &aSeed). This returns a random number in the
       
 16084 	range 0 to KMaxTInt (i.e. positive) and updates the seed.
       
 16085 9). Renamed the operating systems Segment to Chunk to avoid confusion on
       
 16086 	80x86 platforms with segment registers. Thus RSegment has become
       
 16087 	RChunk and User::SegmentHeap has become User::ChunkHeap.
       
 16088 10). The function Test::Next() was assuming a zero terminated string. Fixed.
       
 16089 11). RProcess::CommandLine() was not getting the full command line. Fixed.
       
 16090 
       
 16091 NOTES
       
 16092 =====
       
 16093 
       
 16094 1). MartinB. Surely HufEncode should belong to class TDes and convert its
       
 16095 	argument a TDesC into the TDes rather than belong to TDesC. As well
       
 16096 	don't we need a second version of HufDecode called something like
       
 16097 	HufDecodeInPlace which will do a decode in place on a TDes since
       
 16098 	this is what the resource system does currently. Finally should we
       
 16099 	not make a 32 bit version of the resource compiler.
       
 16100 2). There is a #define test in E32TEST.H. All #defines should be in
       
 16101 	upper case.
       
 16102 3). Why does RRegion have a virtual destructor, a Close() and a
       
 16103 	Destroy(). I suspect that the destructor should go.
       
 16104 4). In TOLIB t_ctimer.cpp and t_cact.cpp both have a #include to
       
 16105 	\e32\olib\o_std.h. This is not correct!
       
 16106 5). In TUSER t_heapdb.cpp has a dependency on the window server header
       
 16107 	file and in fact uses the window server. This is definitely
       
 16108 	incorrect?
       
 16109 6). Can everyone try and make an effort before releasing E32 that
       
 16110 	all projects are left in the DEBUG build and that all test
       
 16111 	programs do not have windows open and breakpoints left enabled.
       
 16112 
       
 16113 Version 0.01.033
       
 16114 ================
       
 16115 (Made by MartinB, 4 May 1995)
       
 16116 
       
 16117 1) Changed jcxz to a jecxz in P_I64.CPP (!!!)
       
 16118 2) Fixed some alloc heaven in CArrayVarBase::Delete.
       
 16119 3) Improved T_RSC test code.
       
 16120 4) Added MaxSize() to TDes.
       
 16121 5) New RRegion code from Steve.
       
 16122 6) Loads of test code from MartinH.
       
 16123 7) Note u_heap.cpp temporarily includes <stdlib.h> (for
       
 16124 	random number generators) for heap alloc failure testing.
       
 16125 	This is a temporary  measure until the real file handling an
       
 16126 	random number generation becomes available.
       
 16127 8) T_HEAPDB requires window server to run (since it tests for window
       
 16128 	server heap failure).
       
 16129 
       
 16130 All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB).
       
 16131 
       
 16132 
       
 16133 Version 0.01.032
       
 16134 ================
       
 16135 (Made by MartinB, 26 April 1995)
       
 16136 
       
 16137 1) Added a new CResourceFile class (and its superclass CFile).  CFile
       
 16138 	uses standard C files as a temporary measure until Colly
       
 16139 	releases the real filing system.
       
 16140 2) Added a KErrFile const to go with the above.  Again a temporary
       
 16141 	measure.
       
 16142 3) CResourceFile reads resource files produced using our resource
       
 16143 	compiler.  (S_.RSC and S_.RZC were used in the test code, and
       
 16144 	form part of the release of the test code).  Note that
       
 16145 	CResourceFile also reads compressed resource files.  This
       
 16146 	meant that:
       
 16147 4) Added Huffman compression for TDes16.  Actually this does not
       
 16148 	quite work yet, one or two of the test cases are #ifdefed out
       
 16149 	in the UNICODE build.  However it is 90% there and I have a
       
 16150 	good idea of what the problem is (its to do with the unused
       
 16151 	byte at the end when the descriptor compresses to an odd number of
       
 16152 	bytes).
       
 16153 5) New test code from MartinH.
       
 16154 6) Minor fixes to threads from Colly/MartinH.
       
 16155 
       
 16156 NOTES
       
 16157 =====
       
 16158 
       
 16159 1) Should we have a TDes::MaxSize() function?
       
 16160 
       
 16161 2) All test code runs for ASCII DEBUG and UNICODE DEBUG builds, except
       
 16162 	T_RSC does not run in UNICODE.
       
 16163 
       
 16164 
       
 16165 Version 0.01.031
       
 16166 ================
       
 16167 (Made by Colly, 18 April 1995)
       
 16168 
       
 16169 1). Changed KEventPending to KRequestPending.
       
 16170 2). Made CActiveScheduler::Start() call the virtual function
       
 16171 	WaitForAnyRequest().
       
 16172 3). Fixed ..\rel\ewinsdb.prj to release the estat*.pdb files
       
 16173 	rather that wwins*.pdb files.
       
 16174 4). When a thread had an exception or was killed, terminated or
       
 16175 	panicked, execution unfortunately continued. Fixed.
       
 16176 5). Added a function User::Dying() which is called by all the kernel
       
 16177 	functions just before they kill,terminate,except or panic a thread
       
 16178 	or process. This is a very good place for a breakpoint when
       
 16179 	debugging. It will catch everything.
       
 16180 6). Added support to dynamically load a DLL and then lookup functions
       
 16181 	in the DLL. See class RLibrary.
       
 16182 7). Added support for device drivers. See User::LoadDevice() and
       
 16183 	User::FreeDevice() as well as the example device driver in
       
 16184 	\e32\swinsd\d_timer.mak and its test program \e32\swinsd\t_devc.mak.
       
 16185 8). Added a constructor to all TFindHandle derived classes to allow
       
 16186 	initialisation with the find string.
       
 16187 9). Converted the rose designs to rose 2.525
       
 16188 
       
 16189 NOTES
       
 16190 =====
       
 16191 
       
 16192 1). The fact that CActiveScheduler::Start() is static is no reason why
       
 16193 	the virtual function WaitForAnyRequest() cannot be called. Just use
       
 16194 	the static pointer to the scheduler:
       
 16195 	theActiveScheduler->WaitForAnyRequest()
       
 16196 
       
 16197 All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB).
       
 16198 
       
 16199 
       
 16200 Version 0.01.030
       
 16201 ================
       
 16202 (Made by Colly, 12 April 1995)
       
 16203 
       
 16204 1). Removed the virtual destructor in CBase. Added vitrual void Destroy().
       
 16205 	CBase::Destroy() now calls delete this. It is now generally necessary
       
 16206 	to call the base classes Destroy() in order to get proper destruction
       
 16207 	of the object. Note that the DeleteAll methods in TDblQue and TSglQue
       
 16208 	only work if the objects on the queue are derived from CBase. Added
       
 16209 	a static function Olib::Destroy(CBase *anObject) which will only
       
 16210 	destroy the object if anObject is not NULL.
       
 16211 2). Added a static function:
       
 16212 	CActiveScheduler * CActiveScheduler::Current();
       
 16213 	which return the currently installed active scheduler.
       
 16214 3). In RSubSession::CreateSubSession() was not passing as P1() in the
       
 16215 	message the address of the reply so that the subsession handle could
       
 16216 	be returned by the server.
       
 16217 4). Creating a semaphore with an initial count other than 0 did not set
       
 16218 	the internal count with the initial count although the Windows/NT
       
 16219 	semaphore was being set correctly. The same bug applied to Mutexes.
       
 16220 5). When a process was dying its access count was not being decremented
       
 16221 	so that if no handles were outstanding the object was not being
       
 16222 	destroyed.
       
 16223 6). CObjectIx::Add() and CObjectCon::Add() were closing the object being
       
 16224 	added if the add failed. This proves to be unhelpful so they have
       
 16225 	been changed to just fail and not do the close.
       
 16226 7). Added the following functions to RThread and RProcess to determine
       
 16227 	the reason a thread or process exited.
       
 16228 	IMPORT_C TExitType ExitType() const;
       
 16229 	IMPORT_C TInt ExitReason() const;
       
 16230 	IMPORT_C TName ExitCategory() const;
       
 16231 8). The design of the CPeriodic class made it unusable. This has now been
       
 16232 	changed so that the New functions add the active object to the
       
 16233 	scheduler. Start() is now defined as:
       
 16234 
       
 16235 	void Start(TInt aDelay,TInt anInterval,
       
 16236 			   TPeriodicCallBack aCallBack,TAny *aPtr);
       
 16237 
       
 16238 	which allows a CPeriodic to be restarted after it has been cancelled.
       
 16239 	StartL() has been dropped since Start() is void.
       
 16240 	There was also a bug in the RunL() method in that it issued the callback
       
 16241 	and then requested the next timer. It should request the next timer and
       
 16242 	then issue the callback.
       
 16243 
       
 16244 The following merged in by MartinB:
       
 16245 
       
 16246 9) Removed double definition of TText8 and TText16 form e32def.h
       
 16247 10) Moved enclosing #endif (matched to #if !defined(__E32DEF_H__)) to
       
 16248 	end of e32def.h.
       
 16249 11) Changed make files so that .PDB files are built into \e32sys.
       
 16250 12) Added virtual WaitForAnyRequest to CActiveScheduler.  This is not
       
 16251 	called from Start, however, since Start is a static function.
       
 16252 	After discussion with DW I retained User::WaitForAnyRequest
       
 16253 	in Start, until we have time to discuss which functions
       
 16254 	should be static.
       
 16255 13) Changed KErrPending to KEventPending.
       
 16256 
       
 16257 
       
 16258 Version 0.01.029
       
 16259 ================
       
 16260 (Made by Martin, 3 April 1995)
       
 16261 
       
 16262 1) New alloc testing code does not include filename and lineno
       
 16263 	(MartinH).
       
 16264 2) New SglQue test code (DougF).
       
 16265 3) New test code (JalP).
       
 16266 4) Move common functionality of TKeyArrayFix and TKeyArrayVar into
       
 16267 	TKey (JalP).
       
 16268 5) Fix to TEnter (DavidW).
       
 16269 
       
 16270 All test code runs for ASCII DEBUG and UNICODE DEBUG builds.
       
 16271 
       
 16272 
       
 16273 Version 0.01.028
       
 16274 ================
       
 16275 (Made by Colly, 22 Mar 1995)
       
 16276 
       
 16277 1). Definitely the last name changes for the descriptor and buffer classes.
       
 16278 		Old Name		New Name
       
 16279 		========		========
       
 16280 		TDesC			TDesC
       
 16281 		TDes			TDes
       
 16282 		TBufBase		TBufCBase
       
 16283 		TBuf			TBufC
       
 16284 		HBuf			HBufC
       
 16285 		TDesR			TPtrC
       
 16286 		TDesW			TPtr
       
 16287 		TBufW			TBuf
       
 16288 
       
 16289 	Note that the function:
       
 16290 		TDesW DesW()
       
 16291 	in TBufBase has now been renamed:
       
 16292 		TPtr Des()
       
 16293 	Its helpful to consult the Rose class diagram to see why these names
       
 16294 	are sensible.
       
 16295 2). Took Steve's new region code.
       
 16296 3). Added the missing #defines for __TEST_INVARIANT.
       
 16297 4). Changed the graphics window to position to 10,10.
       
 16298 5). Fixed the re-entrancy bug with UserWindowServer::Request().
       
 16299 6). Added the fix to stop the beep on ALT + char.
       
 16300 7). Added the code for User::Abort() and User::Exit().
       
 16301 8). User::Panic() was panicking the process and not the current thread
       
 16302 	making it impossible to run test threads to see if they panic.
       
 16303 
       
 16304 	All the test code passes under the DEBUG build.
       
 16305 
       
 16306 NOTES
       
 16307 
       
 16308 1).	The virtual destructor in CActive is calling the virtual DoCancel
       
 16309 	which since the destructor is running at the CActive level has
       
 16310 	no method to call as its pure virtual. The only reasonable solution
       
 16311 	is to introduce a virtual Destroy() function to CBase() which can
       
 16312 	do the necessary cleanup and then do the delete.
       
 16313 2). Many of the test programs do not have a standard comment header.
       
 16314 	One did not even have a header.	This is just careless.
       
 16315 	I have fixed them all.
       
 16316 3). Many people when declaring an enum leave a comma on the last
       
 16317 	declaration which is untidy.
       
 16318 4). A number of people are decalring automatic variables with capital
       
 16319 	letters. Please avoid this practice.
       
 16320 
       
 16321 
       
 16322 Version 0.01.027
       
 16323 ================
       
 16324 (Made by Martin, 16 Mar 1995)
       
 16325 
       
 16326 1) Changed TBuf to TBufW, TLcb to TBuf and TLcbH to HBuf.
       
 16327 2) Fixed .lnk files so test code works if built from command line
       
 16328 	(Duncan).
       
 16329 3) New T_REF test code (Jal).
       
 16330 4) Added previously missing RRef<T>::AllocL to e32std.inl (Jal).
       
 16331 5) Fixed bug in RRefBase::DoAlloc (Jal).
       
 16332 6) Added invariant to TDateTime (Gill).
       
 16333 7) Improved T_DATE test code (Gill).
       
 16334 8) Improved T_KEY test code (MartinH).
       
 16335 9) Fix to heap checking code (MartinH).
       
 16336 10) Changed T_QUE to use V classes (rather than S classes) (Doug).
       
 16337 11) Made iInterval protected (was private) in CPeriodic (at Steve's
       
 16338 	request).
       
 16339 12) This release contains a zip file release (in s:\e32\zip) so that
       
 16340 	users should not need to build E32.  Only the ASCII DEBUG
       
 16341 	version has been released.
       
 16342 
       
 16343 All test code (ASCII DEBUG) can now be built and run from the command line
       
 16344 (except T_HEAPDB).
       
 16345 
       
 16346 Actions:
       
 16347 
       
 16348 1) Now that C classes rely on zero filling for initialisation their
       
 16349 	definitions MUST be changed so that they cannot be declared on the
       
 16350 	stack.
       
 16351 2) MartinH to fix T_HEAPDB.
       
 16352 3) Steve to complete transformation of CRegion to RRegion.
       
 16353 4) MartinB to complete (or remove) Huffman encoding (did not have
       
 16354 	time to do it this release).
       
 16355 5) T_ARRAY and T_VARRAY need more test.Start() and test.Next()
       
 16356 	messages (Jal).
       
 16357 6) Many classes still have no __TestInvariant methods (All).
       
 16358 7) CBufSeg has a test class defined under #if defined(_DEBUG) (Jal).
       
 16359 
       
 16360 
       
 16361 Version 0.01.026
       
 16362 ================
       
 16363 (Made by Colly, 11 Mar 1995)
       
 16364 
       
 16365 1). Added an operator new() to class CBase which fills memory with zeroes
       
 16366 	so that most constructors need do nothing. Note that a constructor
       
 16367 	is still required in order to set the name of the class in debug
       
 16368 	builds.
       
 16369 2). Changed the RProcess::FileName() and RProcess::CommandLine() functions
       
 16370 	to return their result rather than take an them as reference args.
       
 16371 3). Added RHandleBase::Duplicate(RProcess aSrc) which allows a handle from
       
 16372 	another process to be duplicated in the current process. This is also
       
 16373 	the mechanism by which the pseudo handles for the current thread and
       
 16374 	the current process to be turned into real handles. i.e.
       
 16375 
       
 16376 	RThread self;
       
 16377 	self.Duplicate(RProcess());
       
 16378 
       
 16379 	Note that you will now need to call self.Close() at some stage since
       
 16380 	the resource must be freed.
       
 16381 
       
 16382 	In case you have missed the examples in ..\tuser\t_kern.cpp
       
 16383 	instantiating a RThread or RProcess by default give handles to the
       
 16384 	current thread and current process respectively. i.e.
       
 16385 
       
 16386 	RThread().Name() will return the current threads name.
       
 16387 
       
 16388 	These objects use a pseudo handle since it is not possible to close
       
 16389 	these handles since if you could close them they would have to
       
 16390 	delete the current thread or current process. Since these are pseudo
       
 16391 	handles passing them to another process will not work as in the other
       
 16392 	process they will also mean the current process and current thread.
       
 16393 	Duplicate overcomes this problem since it gives a real handle to
       
 16394 	either the current thread or the current process.
       
 16395 4). Added the RThread::Logon(),RThread::LogonCancel(),RProcess::Logon()
       
 16396 	and RProcess::LogonCancel() functions.
       
 16397 5). Cleanup on Thread termination by the kernel now implemented.
       
 16398 6). RThread::Kill(),RThread::Exit(),RProcess::Kill() and RProcess::Exit()
       
 16399 	implemented fully.
       
 16400 7). Changed Plat::Panic() and Plat::Fault() to always use the desktop
       
 16401 	window for the messagebox.
       
 16402 8). Changed to build options for all variants. Everyone should make a new
       
 16403 	.MAK file from T_KERN.MAK as a prototype. Presumably the tool sets
       
 16404 	will have to be updated to reflect these changes. Also fixed a number
       
 16405 	of link failures which had crept into the system.
       
 16406 9). Note that because of the use User::SetVaArgList() the optimisation
       
 16407 	in the release versions to drop stack frames cannot be used.
       
 16408 10). The definition of the private class TLink in CBufSeg is a waste
       
 16409 	of space in the headers. So I have declared a forward reference
       
 16410 	to the class TBufSegLink and then only need the actual declaration
       
 16411 	and implementation in O_BUF.CPP.
       
 16412 
       
 16413 The following merged in by MartinB:
       
 16414 
       
 16415 11) Uses new toolsets (use TOOLS WINS and TOOLS WINSD to get them).
       
 16416 12) New T_DES test code. (From Duncan).
       
 16417 13) Fixed integer compares in TKeyArrayFix and TKeyArrayVar. (From
       
 16418 	Jal).
       
 16419 14) Fixed bug in CArrayFixBase::InsertISQ. (From Jal).
       
 16420 15) Added classes: TSglQueLink, TSglQueBase, TSglQue, TSglQueIterBase
       
 16421 	and TSglQueIter. (From Colly). (No test code yet).
       
 16422 16) Added classes: RRefBase and RRef. (From Colly). (No test code
       
 16423 	yet).
       
 16424 17) Added Alloc functions that take a size parameter to RRef classes
       
 16425 	(at Jal's request).
       
 16426 18) Added __TEST_INVARIANT macro to e32std.h. (from MartinH).
       
 16427 19) Added MartinH's heap checking code.  Note took some functions
       
 16428 	even though they were not commented - they will be commented for next
       
 16429 	release.
       
 16430 20) Took keycode code from DavidB.  NOTE: P_STDKEY.CPP still contains
       
 16431 	some numbers that should be converted to symbolic constants.
       
 16432 21) Small changes to code in winsd from Steve.
       
 16433 22) Changed User::MemSwap in u_func.cpp so that it does not swap if
       
 16434 	memory locations are identical.  There is an argument to do
       
 16435 	this in the compare routines as well.
       
 16436 23) Moved region to e32std.h and called it RRegion.  Steve will implement it as
       
 16437 	a proper 'R' in a subsequent release.
       
 16438 
       
 16439 ASCII Debug version only was tested.
       
 16440 
       
 16441 All test code passes except T_QUE which fails on DeleteAll.  Note
       
 16442 that
       
 16443 
       
 16444 T_HEAPDB, T_ARRAY, T_CACT, T_VARRAY fail when built from the command
       
 16445 line.
       
 16446 
       
 16447 Version 0.01.025
       
 16448 ================
       
 16449 (Made by MartinB, 7 Mar 1995)
       
 16450 
       
 16451 1)  From Gillian: New TDateTime code.
       
 16452 	Changed DateAsString() to Format().
       
 16453 	Removed 3 unnecessary Add() functions.
       
 16454 	Ammended t_time.cpp test code.
       
 16455 	Renamed u_time.cpp to u_date.cpp (to lessen confusion with
       
 16456 	timer code).
       
 16457 2)  From Jal: Bug fix in CBufSeg::Delete() method. New test code.
       
 16458 3)  From Duncan: mnt.cmd altered to build math functions and test code.
       
 16459 4)  From Duncan: Updated all .lnk files for test code, so that they are built as
       
 16460 	windows rather than console applications.
       
 16461 5)  From Duncan: Introduced bld.prj in SMATH: this contains all the buildable math
       
 16462 	routines (there are some .cpp files in li.prj that have not yet
       
 16463 	been converted to E32).
       
 16464 6)  From Duncan: Introduced bld.prj in SWINSD: this contains all the buildable cpp
       
 16465 	files (there are some .cpp files in li.prj that have not yet
       
 16466 	been converted to E32).
       
 16467 7)  From Doug: Removed DEBUG friend declarations from Que classes.
       
 16468 8)  From Jal: New CRefCountBase and CRefCount classes added to Olib.
       
 16469 9)  From MartinH: New TKeyArrayCmpNumeric comparision types for
       
 16470 	TKeyArrays.  Ammended T_KEY test code.
       
 16471 10) From MartinH: Ammended T_ACT test code.
       
 16472 11) From DavidW: new T_VERSION test code.
       
 16473 12) Minor fixes to test code.
       
 16474 
       
 16475 All ASCII DEBUG test code runs.  There is one anomally: T_COBJ runs
       
 16476 fine if build inside VC++ but panics with a user panic of 37 if built
       
 16477 from the command line.  It was getting late so I decided not to track
       
 16478 this one down.
       
 16479 
       
 16480 Version 0.01.024
       
 16481 ================
       
 16482 (Made by Colly, 1 Mar 1995)
       
 16483 
       
 16484 1). Renamed TPackage to TPckgBuf which packages an object in a TBuf8 and
       
 16485 	added TPckgC which packages in a TDesR8 and TPckg which packages in
       
 16486 	a TDesW8.
       
 16487 2). Added new Panic function to RMessage which panics the client and
       
 16488 	frees the message as well as one to CSession which just panics the
       
 16489 	client. This is necessary as the Client() functions return a const
       
 16490 	RThread & on which Panic cannot be called.
       
 16491 3). Noticed that Convert(const TDesC &aDes,...) would not work properly
       
 16492 	as taking the address of aDes on the stack would fail. Changed to
       
 16493 	use the User::SetVaArgList() function. Also removed the version
       
 16494 	of Convert which took a string as an argument. Fixed the test
       
 16495 	code accordingly.
       
 16496 4). My code in the example window server client side code was being very
       
 16497 	naughty and assuming that all arguments were being passed on the
       
 16498 	stack (TRUE for VC++, but not TRUE for GCC ARM code generation). Fixed.
       
 16499 5). Removed the function numbers from the RWindowServerBase class as
       
 16500 	they can be entirely private.
       
 16501 6). The platform code to get system time was not subtracting 1 from the
       
 16502 	day so TDateTime was correctly panicking the kernel on 28 Feb since
       
 16503 	it was trying 29 Feb.
       
 16504 
       
 16505 Version 0.01.023
       
 16506 ================
       
 16507 (Made by Colly, 27 Feb 1995)
       
 16508 
       
 16509 1). Moved the region code to SUSER in the file U_REGN.CPP. Moved the
       
 16510 	test code from TOLIB to TUSER.
       
 16511 2). The OLIB CServer class was deleting the server object on disconnect
       
 16512 	rather than the CSession. Fixed some other bugs as well.
       
 16513 3). Renamed CActive::Run() to CActive::RunL() to indicate that it may
       
 16514 	leave.
       
 16515 4). Renamed CServer::Service() to CServer::ServiceL() to indicate that
       
 16516 	it may leave.
       
 16517 5). Renamed CServer::NewSession() to CServer::NewSessionL() to indicate
       
 16518 	that it may leave.
       
 16519 6). Added the TInt64 class and a number of the maths functions. See
       
 16520 	\e32\inc\e32math.h.
       
 16521 7). Completely changed the whole scheme for E32 programs from being
       
 16522 	console based to being GUI based. Test programs will write to
       
 16523 	a normal Windows/NT console and the GUI window will be ignored.
       
 16524 	All GUI programs now need to link with a window server library,
       
 16525 	i.e. one of wwins,wwinsd,wwinsu,wwinsud. See the make file in
       
 16526 	\e32\tuser\t_gui.mak.
       
 16527 	A basic window server which just provides console services can be
       
 16528 	found in swinsd in the project wwins.mak until Steve can get his
       
 16529 	window server running.
       
 16530 	All programs now use:
       
 16531 	GLDEF_C TInt E32Main()
       
 16532 	for the main program instead of main().
       
 16533 	The functions for the basic window server and console are in header
       
 16534 	\e32\inc\e32wsrv.h. Steve will provide these and extended functions
       
 16535 	by subclassing these in his Window server library.
       
 16536 8). Added a variant to RThread::Read() which allows an offset to be
       
 16537 	specified withing the descriptor to allow reading in smaller chunks
       
 16538 	in case the user sends over a huge chunk of data.
       
 16539 9). Added the TEvent class and various functions all of which are
       
 16540 	only for a Window server. I will discuss these with Steve directly.
       
 16541 	The data is in \e32\inc\e32evnt.h.
       
 16542 10). The CArray classes were leaving in their constructors. Fixed by
       
 16543 	 delaying allocation of the CBufBase till an insert. Increased
       
 16544 	 the error checking.
       
 16545 11). The kernel was not doing unicode properly since UNICODE was
       
 16546 	 not defined in \e32\swins\p_std.h before windows.h was included.
       
 16547 12). Added TDes8::Copy(const TDesC16 &aRef) and
       
 16548 	 TDes16::Copy(const TDesC8 &aBuf) conversions between 8 and 16.
       
 16549 
       
 16550 	Notes:
       
 16551 
       
 16552 	Many of the test programs were not keeping test.Start() and
       
 16553 	test.End() in balance.
       
 16554 	In U_TIME.CPP the unicode build was disabled because Gillian
       
 16555 	was using a TLex8 instead of a plain TLex8. I also not that
       
 16556 	the API for DateAsString takes the format string as a pointer
       
 16557 	and not as a reference. Also the name of the function should
       
 16558 	surely be Format().
       
 16559 
       
 16560 Version 0.01.022
       
 16561 ================
       
 16562 (Made by Martin, 17 Feb 1995)
       
 16563 
       
 16564 1) Fixed construction of TLex over strings.
       
 16565 2) New time class from Gillian.
       
 16566 3) Fixed t_buf,t_bflat and t_bseg test code from Jal.
       
 16567 4) Fixed t_lex test code from MartinH.
       
 16568 5) Changed CRegion to RRegion (after consultation with Steve).
       
 16569 6) NOTE: the TDateTime::DateAsString function fails to build under
       
 16570    unicode.
       
 16571 7) K_MES.CPP does not build under UNICODE, search for !!! string to
       
 16572    find where.
       
 16573 
       
 16574 Note that there are new wins and winsd toolsets and a new version of
       
 16575 EPR.  Get these by doing
       
 16576 		TOOLS WINS
       
 16577 		TOOLS WINSD
       
 16578 in the usual way.
       
 16579 
       
 16580 Version 0.01.021
       
 16581 ================
       
 16582 (Made by Colly, 16 Feb 1995)
       
 16583 
       
 16584 1). In TUSER t_buf,t_lex do not compile.
       
 16585 2). In TOLIB t_bflat,t_bseg do not compile.
       
 16586 3). In TOLIB t_cact,t_cobj compile but fail. Note t_cact was t_creq.
       
 16587 4). Made the kernel platform function Plat::SetVaArgList(VA_LIST &aList)
       
 16588 	public in class User. This function was written assuming the argument
       
 16589 	const TDesC &aFmt was the first argument. Using it in
       
 16590 	Test::Panic(TInt anError,const TDesC &aFmt
       
 16591 	would not work correctly. Changed this function to take a second
       
 16592 	argument which says how many bytes to skip before the
       
 16593 	const TDesC &aFmt argument. For Test::Panic this is 4 and 0
       
 16594 	for all other uses.
       
 16595 5). Renamed CRequester to CActive and CRequestManager to CActiveScheduler.
       
 16596 6). Renamed all T classes which require closing to free their resources
       
 16597 	to R classes. I have not renamed CRegion to RRegion in this release
       
 16598 	but would propose that we do this (Steve?).
       
 16599 7). Added User::At() and User::After() to put the current process to
       
 16600 	sleep for relative and absolute time repectively. These are sync
       
 16601 	functions.
       
 16602 8). Implemented the RMessage, RServer and RSessionBase classes and added
       
 16603 	the Olib classes CServer and CSession. See the T_SVR.CPP test code
       
 16604 	to see how these are used.
       
 16605 9). Renamed t_req.* in TOLIB to t_act.*
       
 16606 10). Added the template class TPackage<T> which will package any type
       
 16607 	 T in a TBuf<sizeof(T)>. Note the -> and () operator overloading.
       
 16608 
       
 16609 	 TPackage<TVersion> v;
       
 16610 	 v->iMajor
       
 16611 	 v().iMajor
       
 16612 
       
 16613 	 This is most useful for passing and receiving non TDesC arguments
       
 16614 	 to a server so that the server can subsequently read/write to it.
       
 16615 11). Added the minimum,maximum values for all integers in e32std.h look
       
 16616 	 for KMaxTInt8 etc.
       
 16617 
       
 16618 Queries
       
 16619 -------
       
 16620 
       
 16621 1). Are we going to implement a 16 bit version of Hufman coding. If not
       
 16622 	then we cannot have this functionality as there cannot be a difference
       
 16623 	between 8 and 16 bit character versions as far as functionality goes.
       
 16624 2). Someone put #ifdef UNICODE into one of the files in swins. This is
       
 16625 	wrong and should have been #if defined(_UNICODE). Although Microsoft
       
 16626 	are confused we should always use the _UNICODE form.
       
 16627 3). I think we should rename User::Check and User::Available to have
       
 16628 	Heap in their name somewhere.
       
 16629 
       
 16630 Version 0.01.020
       
 16631 ================
       
 16632 (Made by MartinB, 15 Feb 1995)
       
 16633 
       
 16634 1)  Removed (most) string functions from descriptors.
       
 16635 2)  Fixed bug in unicode Printf.
       
 16636 3)  Time class changed to DateTime.
       
 16637 4)  Made some queue parameters constant.
       
 16638 5)  Tidied up some of the Locale code.
       
 16639 6)  Tidied up mnt.bat and renamed it to mnt.cmd.
       
 16640 7)  Fixed Format for %S in descriptors.
       
 16641 8)  Added Huffman coding to TDesC8 (finally).
       
 16642 9)  Added some DateTime validation routines.
       
 16643 10) Removed SetActive and SetInActive functions from CRequestors.
       
 16644 11) Fixed most test code to run with the new descriptors, but there
       
 16645 was too much to do for some (ie t_buf, t_lex, t_bflat).
       
 16646 
       
 16647 Version 0.01.019
       
 16648 ================
       
 16649 (Made by Colly, 7 Feb 1995)
       
 16650 
       
 16651 1). Added the new TTimer concrete data type (CDT).
       
 16652 2). Added the OLIB classes CRequestManager and CRequester.
       
 16653 3). Added the OLIB requesters CTimer and CPeriodic.
       
 16654 4). UNICODE needs to be defined as well as _UNICODE.
       
 16655 5). Fixed a bug in TDblQueIter where neither the inc or dec operators
       
 16656 	returned NULL at the end of the queue. Changed the test code to deal
       
 16657 	with this. Note that if the iterator is positioned at the end of the
       
 16658 	queue it will also return NULL when being casted.
       
 16659 6). Fixed a bug in the TDes::Format(const TDesC &aDes) functons which
       
 16660 	when try to set up the VA_LIST were taking the address of aDes and
       
 16661 	getting it rather than the expected address of the argument on the
       
 16662 	stack. Fixed by using the new User::SetVaArgList() function. The
       
 16663 	test code is not testing this part of the code.
       
 16664 7). Added the new static time validation functions to User.
       
 16665 8). The User::WaitForRequest() type functions are now operational.
       
 16666 9). Added the device driver code. Still to write a test device driver
       
 16667 	but this will probably be a console device.
       
 16668 10). Changed all the kernel classes to be D something rather than C
       
 16669 	 something to avoid name clashes with OLIB.
       
 16670 11). Changed the CObject class to allocate the name of the resource so
       
 16671 	 that NULL can be used to indicate an unnamed object. This has
       
 16672 	 changed the API's for some of the CreateLocal functions to no
       
 16673 	 longer require a name, i.e. TSemaphore::CreateLocal().
       
 16674 12). Changed all the API's to the kernel to use const TDesC& rather
       
 16675 	 than const TName& etc.
       
 16676 13). All tests pass in non-unicode debug.
       
 16677 
       
 16678 Version 0.01.018
       
 16679 ================
       
 16680 (Made by MartinB,  3 Feb 1995)
       
 16681 
       
 16682 1) Improvements to MartinH's test code.
       
 16683 2) Uses new format link files (so needs new tools release).
       
 16684 3) Incorporates Duncan's test code.
       
 16685 4) Improvements to Strings in test code (ie _TL macro).
       
 16686 5) Removed most of the #if defined(_DEBUG) stuff from include files,
       
 16687    but not for the friend classes.  Working on a plan for this though.
       
 16688 6) Fixed T_VARRAY .MAK file (was building T_ARRAY).
       
 16689 7) This is a consolidation release.
       
 16690 
       
 16691 Version 0.01.017
       
 16692 ================
       
 16693 (Made by Colly, 26 Jan 1995)
       
 16694 
       
 16695 1) Integrated the changes in preparation for device drivers.
       
 16696 2) Note that the #if defined(_DEBUG) stuff for queues in the
       
 16697    headers is unacceptable.
       
 16698 3) Note that I am not confident of the enumerate for EAllowDuplicates
       
 16699    nor the provision of default parameters.
       
 16700 
       
 16701 Version 0.01.016
       
 16702 ================
       
 16703 (Made by MartinB, 24 Jan 1995)
       
 16704 All test code passes.  (But have not tried UNICODE build).
       
 16705 
       
 16706 Now builds with 32bit EBLD.  To get this type
       
 16707 
       
 16708 TOOLS ETSET
       
 16709 TOOLS WINS
       
 16710 TOOLS WINSD
       
 16711 
       
 16712 You can then do MNT BLD etc from the command line.
       
 16713 
       
 16714 1) Added _S macro and changed _L macro in preparation for removing
       
 16715    strings from descriptors.  Changed code to use _S and _L so that
       
 16716    strings could be easily removed in next release.
       
 16717 2) Took T_TKEY test code from MartinH.
       
 16718 3) Removed Free from CBuf class.
       
 16719 4) Minor bug fixes here and there.
       
 16720 5) Took Que code from Douglas
       
 16721 
       
 16722 Version 0.01.015
       
 16723 ================
       
 16724 (Made by Colly, 18 Jan 1995)
       
 16725 
       
 16726 1).	Made the final re-organisation to the descriptors and introduced
       
 16727 	the new derived class TDesR. Note that TDesC and TDes are real
       
 16728 	abstract base classes as they cannot be directly instantiated.
       
 16729 	(They have no contructors). Note that functions like Mid(),Left()
       
 16730 	etc. now return a TDesR.
       
 16731 
       
 16732 	Added the template TLcb class. This class is intended for use
       
 16733 	as a member of a struct or class since it needs the minimum
       
 16734 	storage space.
       
 16735 
       
 16736 	This is similar to the TBuf class except that it is a length
       
 16737 	followed by the buffer, i.e. no max length. Thus apart from
       
 16738 	assigning to it and behaving as a TDesC a TLcb cannot be
       
 16739 	manipulated as it was a TDes. However help is at hand since there
       
 16740 	is a function DesW() which return a writeable descriptor through
       
 16741 	which a TLcb can be manipulated in the same was as a TBuf. i.e.
       
 16742 
       
 16743 	TLcb<KMaxName> b;
       
 16744 	b=_L("   Some spaces");
       
 16745 	b.TrimLeft(); // This will fail.
       
 16746 	b.DesW().TrimLeft(); // This will work fine.
       
 16747 	b.DesW().UpperCase();
       
 16748 
       
 16749 	If a lot of write operations are to be performed on the TLcb then
       
 16750 	it is more efficient to take a copy of the TDesW. i.e.
       
 16751 
       
 16752 	TDesW w=a.DesW();
       
 16753 
       
 16754 	Note that there is no public constructor on TDesW for a TLcb
       
 16755 	directly as it would need you to pass the maximum length as well
       
 16756 	which is best left to the template to do on your behalf.
       
 16757 
       
 16758 	If a function needs a writeable descriptor then just pass b.DesW()
       
 16759 	and all will be well.
       
 16760 
       
 16761 	As a last final thing for descriptors I have added one final class
       
 16762 	TLcbH (H stands for heap). A TLcbH has the property that the TDesW
       
 16763 	returned by DesW() has its iMaxLength set to the size of the alloc
       
 16764 	cell - sizeof(TUint). A fine feature of	this is that the length of
       
 16765 	an alloc cell which is always present can now be used to good
       
 16766 	purpose. It is also possible to call the TLcbH member functions
       
 16767 	ReAlloc() or ReAllocL() on the cell and the get another TDesW
       
 16768 	which will have changed its iMaxLength to the new size of the cell.
       
 16769 
       
 16770 	TLcbH *TLcbH::ReAlloc(); // Returns NULL if fails
       
 16771 	TLcbH *TLcbH::ReAllocL(); // Leaves if fails
       
 16772 
       
 16773 	It is possible to directly construct a TLcbH with the static
       
 16774 	functions:
       
 16775 
       
 16776 	TLcbH *TLcbH::New(TUint aMaxLength) // Returns NULL if fails
       
 16777 	TLcbH *TLcbH::NewL(TUint aMaxLength) // Leaves if fails
       
 16778 
       
 16779 	The TDesC class also has two methods:
       
 16780 
       
 16781 	TLcbH *TDesC::Alloc(); // Returns NULL if fails
       
 16782 	TLcbH *TDesC::AllocL(); // Leaves if fails
       
 16783 
       
 16784 	which will clone the descriptor on the heap. The size of the TLcbH
       
 16785 	will be the length of the descriptor. Remember that these objects
       
 16786 	must be freed with either delete or User::Free().
       
 16787 
       
 16788 	Note that there is a class TLcbBase which is just used to provide a
       
 16789 	place to provide the code for the template class and although this
       
 16790 	could be placed in the TDesC class this could only be done by
       
 16791 	sacrificing the efficiency of the constructors for the TLcb class.
       
 16792 	TDesC has so many constructors that TLcbBase is useful in providing a
       
 16793 	selector for the base constructor. If this was removed an artificial
       
 16794 	enum would have to be added to the constructors in TDesC to ease
       
 16795 	selection. Since these are called inline by TLcb this would waste
       
 16796 	code.
       
 16797 
       
 16798 	It is useful to look at the Rose class diagram in \e32\desn\e32.dsn
       
 16799 	in the User\Descriptors category.
       
 16800 
       
 16801 2). Took the fixed u_time.cpp and new t_time.cpp.
       
 16802 
       
 16803 3). Changed the build plan so that all 4 build versions are supported
       
 16804 	in all E32 .MAK files and that all releaseable files are in \e32sys
       
 16805 	as follows:
       
 16806 
       
 16807 	Build Name			Object directory
       
 16808 	==========			================
       
 16809 	Win32 Release		\work\e32\wins\rel
       
 16810 	Win32 Debug			\work\e32\wins\deb
       
 16811 	Win32 Uni Release	\work\e32\wins\urel
       
 16812 	Win32 Uni Debug		\work\e32\wins\udeb
       
 16813 
       
 16814 	Build Name			.DLLs
       
 16815 	==========			================
       
 16816 	Win32 Release		\e32sys\ewins.dll
       
 16817 	Win32 Debug			\e32sys\ewinsd.dll
       
 16818 	Win32 Uni Release	\e32sys\ewinsu.dll
       
 16819 	Win32 Uni Debug		\e32sys\ewinsud.dll
       
 16820 
       
 16821 	Build Name			.LIBs
       
 16822 	==========			=====================================
       
 16823 	Win32 Release		\e32sys\ewins.lib	\e32sys\estat.lib
       
 16824 	Win32 Debug			\e32sys\ewinsd.lib	\e32sys\estatd.lib
       
 16825 	Win32 Uni Release	\e32sys\ewinsu.lib	\e32sys\estatu.lib
       
 16826 	Win32 Uni Debug		\e32sys\ewinsud.lib	\e32sys\estatud.lib
       
 16827 
       
 16828 	The directory \e32\lib has been deleted and replaced with
       
 16829 	\e32\rel where the release project files are kept.
       
 16830 
       
 16831 	As a result of this no generated files get placed in the \e32
       
 16832 	source tree, meaning a check -a li should always show no
       
 16833 	additional or missing files
       
 16834 
       
 16835 4). Fixed most of the death in the unicode build but some test
       
 16836 	programs are not building properly.
       
 16837 
       
 16838 5). Added the __DECLARE_TEST() macro for adding the test operations
       
 16839 	to classes for debug builds. This macro should always be declared
       
 16840 	as the last thing in the class as it switches back to public: as
       
 16841 	follows:
       
 16842 
       
 16843 	public:
       
 16844 		void __TestInvariant() const;
       
 16845 		void __Test() const;
       
 16846 
       
 16847 	If a DLL is being built the __DLL__ #define should be present and the
       
 16848 	macro will generate:
       
 16849 
       
 16850 		IMPORT_C void __TestInvariant() const;
       
 16851 
       
 16852 	The operation __TestInvariant() is expected to be supplied for all
       
 16853 	classes and should do all the checking that it can to determine that
       
 16854 	the object is in a healthy state. If it finds an error it should call
       
 16855 	User::Invariant() which will cause a panic. If a class is derived from
       
 16856 	a base class then the base class __TestInvariant() should be called
       
 16857 	first and then further checking should be done.
       
 16858 
       
 16859 	This macro should not be added to template functions as the base class
       
 16860 	from which the template function is derived should be able to do all
       
 16861 	the necessary checking.
       
 16862 
       
 16863 	The __Test() function is not implemented and is provided to allow
       
 16864 	test code a way of directly accessing all the members of a class.
       
 16865 	Test code needs only to provide the function and then call it as it
       
 16866 	is always assumed to be in the same .exe as the calling program.
       
 16867 
       
 16868 	Look at e32des8.inl and \e32\suser\u_des8.cpp for an example of how
       
 16869 	to implement __DECLARE_TEST().
       
 16870 
       
 16871 	N.B.
       
 16872 	It is expected that all classes will implement this scheme.
       
 16873 
       
 16874 6). Taken Gillian's fix to u_loc.cpp which was returning day names
       
 16875 	for months.
       
 16876 
       
 16877 Version 0.01.014
       
 16878 ================
       
 16879 (Made by Colly, 16 Jan 1995)
       
 16880 1). THeap::Available() was not subtracting the header from the cells size.
       
 16881 2). The insert bug in CBufSeg has been fixed.
       
 16882 3). Implemented the new TDes/TBuf plan. This now allows TBufs to be moved
       
 16883 	around in memory so that CArray<TBuf_40> is now O.K. Note that TDes8
       
 16884 	cannot be instantiated, instead instantiate a TDesW8. TBufs now only
       
 16885 	have an overhead of 8 bytes. See TDesC8::Ptr() to understand how
       
 16886 	this trickery is accomplished. In general note that the values of the
       
 16887 	members of TDesC8 and its derived classes are now meaningless so don't
       
 16888 	jump to conclusions. The iLength should be divided by 4 to get the
       
 16889 	real length. The bottom two bits provide flags for the Ptr() function.
       
 16890 	For TDes8,TBuf8 and TDesW8 iPtr is in fact the maximum length. The
       
 16891 	address of the buffer for TBuf8 is assumed to follow iPtr. For a
       
 16892 	TDesW8 the real pointer to the buffer follows iPtr.
       
 16893 4). Added the TVersion class and the User::Version() function.
       
 16894 5). In class TLex, renamed Token() to NextToken() and made
       
 16895 	MarkedToken() and NextToken() return a TDesC8.
       
 16896 6). Removed the new operator in class CBase. As the cell is no longer
       
 16897 	zero filled all relevant fields must be initialised.
       
 16898 7). Added a member variable TText *__iName to CBase when the _DEBUG
       
 16899 	flag is set. All constructors of classed derived from CBase should
       
 16900 	initialise by using the __DECLARE_NAME macro. For CBufSeg this would
       
 16901 	be :
       
 16902 	EXPORT_C CBufSeg::CBufSeg(TUint anExpandSize)
       
 16903 	//
       
 16904 	// Constructor
       
 16905 	//
       
 16906 		: CBufBase(anExpandSize),iSeg(NULL)
       
 16907 		{
       
 16908 
       
 16909 		__DECLARE_NAME(_L("CBufSeg"));
       
 16910 		}
       
 16911 8). Changed the ASSERT1,ASSERT2 and ASSERT3 macros to
       
 16912 	__ASSERT_ALWAYS - applied in all builds
       
 16913 	__ASSERT_DEBUG - applied only in debug builds
       
 16914 	__ASSERT_OPT - applied if __OPT__ is defined
       
 16915 	The previous versions assumed that Panic was called, i.e.
       
 16916 	#define ASSERT1(c,p) if (!(c)) Panic(p)
       
 16917 	This has been changed to allow other functions to be called.
       
 16918 	#define __ASSERT_ALWAYS(c,p) if (!(c)) p
       
 16919 	This should be used as follows:
       
 16920 	__ASSERT_ALWAYS(anIndex<iLength,Panic(EDes8IndexOutOfRange));
       
 16921 9). Further bugs showed up in T_BFLAT which was still assuming that
       
 16922 	a TBuf was zero terminated. Changed the code to zero terminate
       
 16923 	after construction.
       
 16924 
       
 16925 Version 0.01.013
       
 16926 ================
       
 16927 (Made by Colly, 12 Jan 1995)
       
 16928 1). Completed the implementation of the descriptor/buffer classes.
       
 16929 2). The TLocale class is now working.
       
 16930 3). Move SDate,STime and SDaySecs out of TTime. Made the members
       
 16931 	start with a lower case. Changed the order of members so that
       
 16932 	sorting	will occur correctly. Changed the filler on STime to be
       
 16933 	1/100ths of a second. Provided a service in the kernel to retrieve
       
 16934 	the current 1/100ths.
       
 16935 4). Changed TTime to call the kernel to get the current time and TLocale
       
 16936 	to get the start of week. The function to set system time is in
       
 16937 	User. i.e. User::SetSystemTime(TSystemTime aTime);
       
 16938 5). Moved the static functions from TTime to User.
       
 16939 6). Converted the u_time.cpp to E32 code standards.
       
 16940 7). Converted the u_graph.cpp to E32 code standards.
       
 16941 8). Converted the o_region.cpp to E32 code standards.
       
 16942 9). Fixed the bug if you ran a program from the command line without
       
 16943 	the .exe.
       
 16944 10). Changed TDblQue::Next() to be TDblQue::First() and
       
 16945 	TDblQue()::Prev() to be TDblQue()::Last(). Changed the
       
 16946 	implementation of AddFirst() and AddLast() to take a T * rather
       
 16947 	that a TDblQueLink *.
       
 16948 11). Changed the static New()'s in CBufFlat and CBufSeg to return a
       
 16949 	pointer to the class rather than to CBufBase.
       
 16950 12). Add a further global new operator which will leave if it cannot
       
 16951 	allocate the memory. This is called as follows:
       
 16952 	Normally:
       
 16953 	TRect *p=new TRect(0,0,10,10);
       
 16954 	With leave:
       
 16955 	TRect *p=new(ELeave) TRect(0,0,10,10);
       
 16956 13). Renamed TEnter::Throw() to TEnter::Leave();
       
 16957 14). Fixed User::Leave().
       
 16958 15). Add the full queue implemetations.
       
 16959 16). Threads other than the main thread did not have their heap set.
       
 16960 17). Lots more that I have forgotten.
       
 16961 
       
 16962 The TLex test code does not pass since it was relying on the zero
       
 16963 terminator and I don't have the time to fix it. There is bug shown
       
 16964 in CBufSeg with the test program T_ARRAY, although not surprisingly
       
 16965 by T_BSEG.
       
 16966 All the test code should now be reviewed and checked.
       
 16967 
       
 16968 Version 0.01.012
       
 16969 ================
       
 16970 (Made by MartinB, 6 Jan 1995)
       
 16971 1) Fixed death in release 11 below.
       
 16972 2) Descriptor classes essentially complete.  Moved iMaxLength from
       
 16973    TDesC to TDes.  However must still define unicode-independent
       
 16974    buffers.
       
 16975 3) Passes all test code now (except T_SEM).
       
 16976 
       
 16977 
       
 16978 Version 0.01.011
       
 16979 ================
       
 16980 (Made by MartinB, 6 Jan 1995)
       
 16981 1) Bug fixes to Heap from MartinH.
       
 16982 2) Bug fixes to arrays from Jal.
       
 16983 3) Changed some pointer parameters to references.
       
 16984 4) Changed to new Descriptor class hierarchy.  The change is not yet
       
 16985    complete.
       
 16986 5) Some things are now (partially) broken:
       
 16987 		T_BUF does not pass all test code (wierd stack death),
       
 16988 		T_ARRAY.CPP and T_BFLAT.CPP do not build,
       
 16989 		T_LEX does not pass all test code.
       
 16990 
       
 16991 Version 0.01.010
       
 16992 ================
       
 16993 (Made by MartinB, 4 Jan 1995)
       
 16994 1) Minor bug fix to o_array.cpp.
       
 16995 2) Fixes to slocl to support dynamic loading.
       
 16996 3) Fixes to TLex and TChar code.
       
 16997 4) Converted to using spaces for tabs.
       
 16998 5) Incorporated DWs time class.
       
 16999 6) Moved Steve's CRegion class to SOLIB.
       
 17000 
       
 17001 Version 0.01.009
       
 17002 ================
       
 17003 (Made by MartinB, 22 Dec 1994)
       
 17004 1) Minor bug fixes and improvements to descriptor code.
       
 17005 2) Now partially buildable under EPR (courtesy of DuncanS).  To get
       
 17006    extended toolset type:
       
 17007 
       
 17008 		TOOLS ETSET
       
 17009 		TOOLS WINS
       
 17010 
       
 17011 You will also need to set your DOS box to run off a PIF file
       
 17012 (ETSET.PIF in this directory will do), otherwise you will get out of
       
 17013 memory/environment space problems.
       
 17014 
       
 17015 Then
       
 17016 		ETON WINS
       
 17017 and (in the usual way)
       
 17018 		CONT E32 GROUP
       
 17019 		DON
       
 17020 		BUILD DEB
       
 17021 
       
 17022 Then you should be able to do MNT BLDALL.  Unfortunately we don't yet
       
 17023 have the technology to build DLLs yet, but we can do CCs and LFs.
       
 17024 This certainly makes it much less tedious to build the test code.
       
 17025 In CONT E32 TUSER type
       
 17026 		EBLD ETLI
       
 17027 In CONT E32 TOLIB type
       
 17028 		EBLD LI
       
 17029 
       
 17030 Version 0.01.008
       
 17031 ================
       
 17032 (Made by MartinB, 21 Dec 1994)
       
 17033 1) Took Jal's fixes for CBufSeg class.
       
 17034 2) Added
       
 17035 		void Append(const TUint8* aBuf,TUint aLength);
       
 17036    function to TDesBase class.
       
 17037 3) Removed the Assign() functions that were just duplicates of Copy()
       
 17038    from TDesBase.
       
 17039 4) Split data in slocl into country dependent, language dependent and
       
 17040    alphabet (character set) dependent parts.  Split not yet complete.
       
 17041 
       
 17042 Version 0.01.007
       
 17043 ================
       
 17044 (Made by MartinB, 20 Dec 1994)
       
 17045 1) Produces e32winsu.* and e32statu.* on UDEB and UREL builds.
       
 17046 2) Moved to warning level 4.
       
 17047 3) operator= changed to return reference in TPoint, TSize and TRect classes
       
 17048 4) Converted CBuf* classes to constant reference convention.
       
 17049 5) Changed TLex to use descriptors.
       
 17050 
       
 17051 Version 0.01.006
       
 17052 ================
       
 17053 (Made by MartinB, 20 Dec 1994)
       
 17054 1) #defined _UNICODE on UDEB and UREL in e32ver.h in preparation
       
 17055    for epr building.
       
 17056 2) Converted TLex* class to constant reference convention.
       
 17057 3) Renamed TSuffix to TDateSuffix.
       
 17058 
       
 17059 Version 0.01.005
       
 17060 ================
       
 17061 (Made by MartinB, 19 Dec 1994)
       
 17062 1) First version with buffers replaced by descriptors.  Note that
       
 17063 		..\inc\e32db16.h
       
 17064    is a copy of
       
 17065 		..\inc\e32db8.h
       
 17066    with 8 replaced by 16 throughout, and
       
 17067 		..\suser\u_dsbf16.cpp
       
 17068    is a copy of
       
 17069 		..\suser\u_dsbf8.cpp
       
 17070    with 8 replaced by 16 throughout.
       
 17071 
       
 17072    This is necessary since it seems impossible to use templates in
       
 17073    this case (this is because there seems to be no way to manually
       
 17074    instantiate the template so that it can be placed in the DLL).
       
 17075 2) Passes all test code except T_BFLAT (which I didn't get to work on
       
 17076    version 004) and T_SEM (which I'm not sure about).
       
 17077 3) TThread class broken?  It may well work but I have not yet looked
       
 17078    into the implications for this class.
       
 17079 4) Made this version for a "safe" one to come back to.
       
 17080 5) U_LEX*.CPP and U_SEG.CPP can now be much improved by using
       
 17081    Descriptors instead of temporary buffers.
       
 17082 
       
 17083 Version 0.01.004
       
 17084 ================
       
 17085 (Made by MartinB, 19 Dec 1994)
       
 17086 1) Minor fixes to SLOCL tables.
       
 17087 2) Defined ASSERTn and ASSERT_VALIDn macros.
       
 17088 3) Last version before new TDes and TBuf classes.
       
 17089 
       
 17090 Version 0.01.003
       
 17091 ================
       
 17092 (Made by MartinB, 14 Dec 1994)
       
 17093 1) Incorporates TPoint, TSize, TRect & TRegion classes.
       
 17094 2) Incorporates test code for above.
       
 17095 3) Moved TCheckedHeapWalk declaration into THeap (ie nested class
       
 17096    declaration), partially because of name class with TSize (above).
       
 17097 
       
 17098 Version 0.01.002
       
 17099 ================
       
 17100 (Made by MartinB, 13 Dec 1994)
       
 17101 1) Incorporates buf fixes to TChar, TLex & TBuf classes.
       
 17102 2) Incorporates test code for above.
       
 17103 3) First working UNICODE version.
       
 17104 
       
 17105 Version 0.01.001
       
 17106 ================
       
 17107 (Made by Colly, 10 Dec 1994)
       
 17108 1) First release.