Commit graph

53 commits

Author SHA1 Message Date
Colin Finck c2c66aff7d Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys. 2017-10-03 07:45:34 +00:00
Stefan Ginsberg 4a3db0a6c3 - Add in MSVC support for HAL .init sections by using alloc_text. MSVC support for putting the HAL pci class and vendor tables into .init is still lacking. Put into a _MINIHAL_ guard or freeldr gets REALLY sad.
- Rename INIT_FUNCTION to INIT_SECTION and put it at the top of functions for consistency with __declspec declarations (it is actually possible to do this via __declspec in newer MSVC versions).

svn path=/trunk/; revision=69037
2015-09-05 18:33:38 +00:00
Timo Kreuzer 158c621c68 [HAL]
- Use a global variable HalpBuildType instead of a define when checking the BUILD (we don't recompile this code for SMP hal)
- Move registering IRQ2 out of the generic init code into HalInitializePICs
- Modify legacy HalpGetRootInterruptVector to use HalpIrqToVector and HalpVectorToIrql so it works with APIC, too

svn path=/trunk/; revision=53675
2011-09-10 18:58:01 +00:00
Timo Kreuzer f85bf4380d [HAL]
- give apic hal its own halinit_apic
- give minihal an own halinit_mini.c containing function stubs
- move HalInitializeProcessor to halinit.c and add hal specific function HalpInitProcessor
- get rid of all the #ifndef _MINIHAL_ in halinit.c and move the file to lib_hal_generic
- improve the hal version/build check
- Update spec file for amd64

svn path=/trunk/; revision=53625
2011-09-07 18:25:43 +00:00
Timo Kreuzer d9dd611750 [HAL]
- Flatten the directory structure
- use static libraries in cmake builds as well to save build time

svn path=/trunk/; revision=53529
2011-09-02 14:45:19 +00:00
Sir Richard 9cdff0edae [HAL]: Add INIT_FUNCTION where needed. Will save 860KB later.
svn path=/trunk/; revision=49463
2010-11-04 01:28:09 +00:00
Aleksey Bragin 2d246e918e [HAL]
- Add missing call to HalInitPnpDriver during I/O manager initialization. The HAL PnP driver was never getting initialized.
- Add HAL callback for HalInitPnpDriver. It's going to be needed in future for eVb's PCI driver to fully work (interrupt translation, among other things).

svn path=/trunk/; revision=48740
2010-09-10 21:46:13 +00:00
Sir Richard ad1721c016 [HAL]: Bus support in the HAL actually creates a further wedge between the different x86 HALs: There are actually two dinstinct implementations. On the ACPI HAL, the system is assumed not to have things like special ISA, MCA, EISA buses, and a PCI driver is used in combination with the ACPI Interface for PCI Bus support. On non-ACPI systems, the legacy "Bus Handler" library is used, and the HAL provides a core set of CMOS, EISA, ISA, MCA and PCI bus handlers, each with their own routines and specific code. Additionally, PCI IRQ Routing and other PCI bus internals are handled directly by the HAL -- on the ACPI HAL, the PCI Bus support is implemented through a "Fake"/static bus handler, just to keep the functions shared. On ReactOS, both the ACPI and non-ACPI HAL were currently using a mix of both HAL bus handling types, mostly implemented the "ACPI way" (with a fake PCI bus handler and such).
As a result, none of the Hal*Bus HALDISPATCH routines were implemented, which bus drivers expect to find when they're not on ACPI systems (ReactOS today). eVb's new PCI driver was crashing, for example.
       Furthermore, legacy systems suffer, because the ACPI HAL Bus routines (that we currently have) expect perfect ACPI-style-compliant systems, not the legacy crap from the early 90ies. This works fine in VMs and new hardware, but old hardware is left behind.
       This patch basically corrects the first part of the problem, by making the bus handling support separate between ACPI and non-ACPI HALs. For now, the code remains 100% the same in functionality between both.
       However, I have started adding the first few elements:
[HAL]: Implement HalRegisterBusHandler HALDISPATCH routine.
[HAL]: On legacy HALs, register the CMOS, ISA, SYSTEM handlers.
[HAL]: Add cmosbus.c. Stub all bus-specific bus handler routines in the xxxbus.c files.
No real functionality change occurs with this patch, yet.

svn path=/trunk/; revision=47649
2010-06-07 01:09:41 +00:00
Timo Kreuzer 32f5fc6eab [HAL]
- Move memory functions from halinit.c to new memory.c
- HalpAllocPhysicalMemory: MemoryFirmwareTemporary -> LoaderFirmwareTemporary (same value, different enum)

svn path=/trunk/; revision=47563
2010-06-04 10:17:55 +00:00
Timo Kreuzer 8b6a58978f [HAL]
Fix a possible overflow of the hal heap in HalpMapPhysicalMemory64 and simplify the code.

svn path=/trunk/; revision=46849
2010-04-12 19:39:50 +00:00
Sir Richard d623299da0 [HALACPI]: Implement beginning of HAL ACPI support (HalpSetupAcpiPhase0). Tested on VMWare, where it found the FACP, SRAT, RSDT and MCFG and the ACPI Timer at 1008H. BOOT and DBGP are not found (optional features).
[HALACPI]: Support depends on boot loader creating the ACPI BIOS Multi Node structure in MultiFunctionAdapter in the hardware tree. It seems that FreeLdr does this (wow!) correctly!
[HALACPI]: Implement HAL ACPI Table Cache.
[HALACPI]: HAL ACPI Table Overrides from the boot loader are not supported (doubt FreeLdr does this).
[HALACPI]: The next steps are to write the HAL ACPI PnP Driver and HAL ACPI Power Driver.

svn path=/trunk/; revision=46613
2010-03-31 04:43:39 +00:00
Sir Richard 53b637ba7e [HAL]: Add Phase 0 HAL Heap Allocation/Mapping/Unmapping APIs, remove current broken APIs that depend on Mm having been initialized. These APIs use the HAL Heap that's typically at 0xFFC00000. FreeLDR seems to map this region correctly.
[HAL]: Although currently implemented for ACPI support (to come), these APIs can now also be used to enable DMA in Phase 0 like NT, instead of only in Phase 1 like ReactOS.

svn path=/trunk/; revision=46612
2010-03-31 04:38:20 +00:00
Hervé Poussineau 02f31de4d1 [hal] Add a mini-HAL static library
Mostly the same thing as the real one, except interrupts and DMA

svn path=/trunk/; revision=45809
2010-03-03 21:56:52 +00:00
Sir Richard 202f931c4e [HAL]: Initialize the i8259A PIC controllers in C, and add register structures and enumerations to document the bits. These were taken from ISA System Architecture 3rd Edition and EISA System Architecture 2nd Edition by Mindshare.
[HAL]: Add code to detect EISA systems with ELCR (Edge/Level Control Register). Since the current HAL does not support these, warn users about any level/shared interrupts, since they are likely to cause trouble.

svn path=/trunk/; revision=45180
2010-01-21 12:51:13 +00:00
Stefan Ginsberg a9f0dd5a8d - Implement the generic bus handler support and initialization.
- Add missing hack flags for ACPI hacks.
- Add the hack flags to the registry.

svn path=/trunk/; revision=44061
2009-11-09 22:59:49 +00:00
Stefan Ginsberg c74f994e2f - Refactor stubbed HAL resource report slightly.
- Move the resource routines to their own file instead of sysinfo.c.
- Add missing members to PCIPBUSDATA.
- Kill old, unused generic.rbuild.

svn path=/trunk/; revision=43991
2009-11-06 23:55:08 +00:00
Stefan Ginsberg be8d9f285f - INITIAL_STALL_COUNT makes more sense in decimal (100) than hex (0x64) so define it that way.
- Protect CMOS access with the CMOS spinlock.
- Add CMOS initialization to set up the default value of the CMOS century byte offset (not used yet).
- Stub out profile interrupt support in HAL. Register and stub out the profile interrupt handler, but don't handle it yet as vital parts of the rest of the implementation is missing.
- Fix several bugs in the kernel profile implementation:
  - Don't hardcode to PROFILE_LEVEL when raising IRQL : HAL can override this, so use KiProfileIrql. Also, starting/stopping profile interrupts must be done at the profile IRQL, so don't lower it back before calling HAL, which is now enabled.
  - Fix KeSet/QueryIntervalProfile to properly set/query profile intervals through HAL -- pass the correct structures and handle the ProfileAlignmentFixup case properly, and call HAL when setting the timer interval as the interval may be overridden by it.
  - KeStartProfile returns BOOLEAN to tell if the profile was started or not, just like KeStopProfile.
- Make the interrupt implementation more portable for non-PIC architectures.
- Fix HalSystemVectorDispatchEntry; it returns a type (UCHAR), not TRUE/FALSE (BOOLEAN).
- Begin implementing the framework for querying HAL resource usage (keeping track of internal address space and vector registrations/usage).

svn path=/trunk/; revision=43832
2009-10-29 19:58:41 +00:00
Stefan Ginsberg 838ed7f31a - Replace broken implementation of HalpCalibrateStallExecution with a new implementation by a mysterious HAL ninja and myself. The old implementation calculated the stall count factor incorrectly and produced bogus results that were off by several thousand, and varied by as much for each boot, and can best be described as "rand() made complicated". The new implementation installs its own RTC interrupt handler to accurately calculate the stall scale factor, all done in assembler instead of broken C. Fixes the hang at boot when initializing Uniata as stalls no longer takes 10 times or more as long to execute then they should.
svn path=/trunk/; revision=43789
2009-10-27 01:03:41 +00:00
Stefan Ginsberg 31c45b85d7 - Stub out DbgKdWriteVirtualMemoryApi, DbgKdReadPhysicalMemoryApi, DbgKdWritePhysicalMemoryApi, DbgKdWriteBreakPointExApi, DbgKdRestoreBreakPointExApi, DbgKdSearchMemoryApi and DbgKdFillMemoryApi cases more properly.
- Fail on physical memory write like we do for read too.
- Don't handle OldVlm1/2 as they appear to be deprecated and unhandled in Windows.
- Implement HalHaltSystem to halt execution in a portable way. Default to xHalHaltSystem, a simple infinite loop, if we get called before HAL has initialized. Use this in KiBugCheckDebugBreak and the system shutdown handler instead of x86/AMD64/ARM intrinsics.
- Don't try to halt the CPU if KeBugCheck has been called 3 times or more -- if this happens, something has gone very wrong, and we shouldn't try to do anything special. Just loop infinitely.
- Fix KiBugCheckDebugBreak -- it shouldn't halt execution when called for the first chance as bugcheck callbacks have not been invoked at this point (nor has the BSOD been displayed). Use SEH to protect against a crash instead of checking KdDebuggerNotPresent as the debugger, if it is present, *could* disconnect while the trap is being handled. Also, don't halt execution if the debugger handled the breakpoint, just break again.
- Don't call MmMapIoSpace from HalpReboot! The reboot might take place at elevated IRQL (as high as HIGH_LEVEL if called from KeBugCheck), and thus can't use any Mm support routines. Use a PTE from the reserved HAL region and map it ourselves instead as done in the BIOS call code.
- Acquire the display ownership in HalReturnToFirmware in case the caller hasn't done so (as done in the KD reboot routine, for example).
- Just include ntndk.h in hal.h instead of including 6 NDK headers (which turns into more than half of the NDK anyway since those headers include other NDK headers).
- Crashing and rebooting from KD now works properly.

svn path=/trunk/; revision=43380
2009-10-11 20:16:45 +00:00
Aleksey Bragin 3f7bed2eae [ntoskrnl]
- Reimplement HalpCalibrateStallExecution which was removed in r24964. Real Windows uses a different algorithm, however existing one seems to work acceptably. This patch is critical for devices support on real hardware. The only downside is that uniata initialization takes a substantial amount of time now, this is going to be investigated. Patch by Daniel Zimmermann.
See issue #4600 for more details.

svn path=/trunk/; revision=43364
2009-10-10 18:22:56 +00:00
Aleksey Bragin ffa5f05eca - Implement BIOS access routines in HAL.
- Implement HalResetDisplay using those routines.
- Uncomment a display reset in bootvid (as real Windows bootvid does).
- Remove 1 sec delay from the shutdown thread.
- As a result, no more red screen flashing at the end of the 1st stage, shutdown quotes are displayed again, and BSODs are shown correctly.

svn path=/trunk/; revision=31251
2007-12-15 17:15:48 +00:00
Hervé Poussineau c77f80bc75 Remove HALP_HOOKS structure
Revert r31198 and part of r31194, and replace them by compile-time define in pci.c
Don't use one rbuild file per hal, but merge them into one
Share halinit.c between UP and MP versions

svn path=/trunk/; revision=31207
2007-12-14 08:53:56 +00:00
Hervé Poussineau a979fff8fb Call HAL-specific initialization handlers
svn path=/trunk/; revision=31196
2007-12-13 15:44:17 +00:00
Johannes Anderwald c6b29c7d8f - Fix warning(s)
- Void functions dont return values
- Include intrin.h for _enable / _disable intrinsics

svn path=/trunk/; revision=25683
2007-02-02 08:41:30 +00:00
Christoph von Wittich 745785f093 fix some more warnings (gcc 4.2)
svn path=/trunk/; revision=25567
2007-01-21 20:10:17 +00:00
Alex Ionescu f675588849 - Properly fix boot/build.
svn path=/trunk/; revision=24968
2006-11-29 17:35:15 +00:00
Johannes Anderwald 76a4c9efc1 - fix build (commenting out calls)
svn path=/trunk/; revision=24965
2006-11-29 10:19:00 +00:00
Alex Ionescu d466efb4fb - Fixup all the file headers with proper paths and authors.
- Move sysbus.c contents (a 4 line function) into bus.c.
- Unify initialization code.
- Delete and disable stall execution calibration (currently using the default). Will implement later in a more precise manner (this routine was bizarly setting the MHz of the CPU in the PRCB in some cases...).

svn path=/trunk/; revision=24964
2006-11-29 08:28:20 +00:00
Alex Ionescu 7cd2e3f498 - There's no such thing as Phase 2 HAL init.
- Only map the 0x0 physical address in HalpReboot when enabling warm-reboot, there's no need to map it during init and keep it allocated during the whole time.

svn path=/trunk/; revision=24962
2006-11-29 07:32:27 +00:00
Alex Ionescu 088b3cd98e - Fix prototype/definition of HalCalibratePerformanceCounter and properly implement it.
- Implement KeStallExecutionProcessor in its own assembly file isntead of using inlined GCC assembly, and align the loop to 16 bytes for more streamlined execution speed.
- Mask out clock interrupt during Phase 0 and Initialize clock interrupt on HAL Phase 1. This enables the HAL clock interrupt which was already written.
- Make the clock interrupt use HalpCurrentTimeIncrement instead of hardcoding a value.
- Re-implement HalpInitializeClock to allow for dynamic increments from 1ms to 15ms with appropriate rollovers and to call KeSetTimeIncrement to update timer values with the kernel.
- Implement HalSetTimeIncrement to allow changing the clock ms increment (but this isn't yet respected).
- Remove system/runtime update routines from the deprecated IRQ implementation and use the newer assembly ones already written, since we're now using the HAL clock interrupt. Remove other unused code.
- Fix more bugs in new hal IRQ implementation (that still isn't used yet due to regressions) and implement HalClearSoftwareInterrupt.

svn path=/trunk/; revision=24908
2006-11-28 08:11:14 +00:00
Alex Ionescu 139ff99f50 - Cleanup HAL initialization code:
- Initailize the clock increment separately from the calibration of stall execution.
  - Raise IRQL to the current IRQL (basically a no-op) to force a standard PIC state. Will be needed for the new IRQ implementation when it'll work.
  - Scan commandline for PCILOCK and BREAK parameters during hal initalization. The former is not supported, only saved, while the latter causes a breakpoint just like the windows implemetnation.
  - Get the bus type (ISA, EISA, MCA) on startup to support bootup from NTLDR.
  - Validate HAL to match the kernel (checked kernel and UP kernel). Also make the kernel set the proper PRCB flags for this.
  - Initialize the CMOS lock.
  - Setup HAL Dispatch table and enable call to HalQuerySystemInformation in the kernel since it now works.
- Rewrite bus functions to get rid of the idea of "Bus handlers". This is a deprecated NT4 concept that ReactOS copied and only slows down performance.
  - Support custom private dispatch table PCI functions.
  - Provide default PCI functions.
  - Rewrite PCI functions using clean structures and code instead of magic macros and undocumented magic values. Use simple macros to generate PCI bus operations for write/read uchar, ushort and ulong.
  - Simplify function definitions for CMOS access.
  - Unify some dupli/tripi-cated code.
- Fix definition of HaliSetSystemInformation.
- Fix definitions of Bus Handler functions (add NTAPI).
- Add official BUS_HANDLER definition to NDK.
- Fix definition of HAL_PRIVATE_DISPATCH.
- Remove some derecated code (isa.c and mca.c).

svn path=/trunk/; revision=24872
2006-11-27 19:26:31 +00:00
Aleksey Bragin 44eba681e0 Fix build by:
- Matching HAL MP HalStartNextProcessor() and commenting out a call to HaliStartApplicationProcessor() (because it needs ProcessorContext). Proper fix should be done.
 - Removing HalReportResourceUsage from MP version, and marking what it did differently as FIXME in the generic version.

svn path=/trunk/; revision=24763
2006-11-15 10:42:46 +00:00
Alex Ionescu b649dd5293 - Export ExiTryToAcquireFastMutex from ntoskrnl, I had forgotten to export this ages ago when adding the other Exi*FastMutex* stuff.
- Remove fmutex.c and fastmutex functions from HAL. The whole point of having the Exi ones in the kernel was that HAL calls them through forward exports now (so any old driver can still link with HAL). Now we don't duplicate the implementation anymore.
- Remove DriverEntry, it's useless. Also move HalReportResourceUsage to halinit because it's a call-once-on-boot function much akin a HalInitPhase2 function, so delete resource.c
- Keep track of interrupt affinity and active processor mask each time a new CPU initializes.

svn path=/trunk/; revision=24762
2006-11-15 00:08:51 +00:00
Alex Ionescu 7b4b9aec8f - Delete HAL cruft files.
- Implement (or cleanup + mark as implemented, these are 4 line functions) HalDisplayString, HalAcquireDisplayOwnership, HalSetDisplayParameters, HalQueryDisplayParameters, HalInitailizeProcessor, HalAllProcessorsStarted, HalStartNextProcessor, HalProcessorIdle, HalRequestIpi.
- Fix some prototype definitions and cleanup some formatting.

svn path=/trunk/; revision=24759
2006-11-14 20:59:48 +00:00
Alex Ionescu 6951a4887c - Bootvid rewrite by Filip Navara (with some fixes by myself)
- HAL DMA enhancements by Filip Navara.
- CSRSS Console enhancements by Filip Navara.
- Win32k Primitive Queue/Input/Painting/Focus enhancements by Filip Navara.
- Other misc win32k/CSR bug fixes by Filip Navara.
- The new bootvid code has some bugs, but try out a GUI Boot!

svn path=/trunk/; revision=24464
2006-10-09 04:00:34 +00:00
Alex Ionescu 8b1ba6c11a - Use LOADER_PARAMETER_BLOCK everywhere in ReactOS except freeldr.c
- Implemented KiRosFrldrLpbtoNtLpb to do a lightweight conversion and setup. Next patches will try to get rid of PLOADER_MODULE and use LDR_DATA_TABLE_ENTRY as well as increase bootstrap compatibility.

svn path=/trunk/; revision=24305
2006-09-30 03:33:50 +00:00
Alex Ionescu 397f1f88d2 - Viva la deprecation! Trunk should now boot and the installer should work.
- Basically revert the new HAL/KERNEL IRQ code by putting the old one in, but without the actual pain of svn reverting and losing all the previous code.
- The old code goes in ntoskrnl\deprecated, and we only add a comment to the .rbuild file, re-export an old function, and initialize the old code in kernel.c. All the other kernel changes stay in-place to be tested.
- Same for hal, basically replace irq.S with irql.c in the .rbuild file, and disable the call to Halpinit1. All the other changes remain.

svn path=/trunk/; revision=23707
2006-08-25 14:50:01 +00:00
Alex Ionescu 7d305ec8e6 - Fix compiling/linking problems.
- Remove KrnlFun entry - IRQs are now done through a typical NT/ROS trap frame and are synchronized and compatible with trap.S.
- Enable 2nd entry interrupt calls in HalBeginSystemInterrupt, since IRQs now use the right trap frame.

svn path=/trunk/; revision=23697
2006-08-25 00:46:41 +00:00
Alex Ionescu fe2d752e93 - Fix some bugs in clock.S
- Enable clock.S versions of KeUpdateSystem/RunTime and export them properly.
- Enable systimer.S to call into kernel's KeUpdateSystemTime.
- Enable Hal's Clock Interrupt during Phase 1.
- Remove most of the code that was still left in irq.c
- Only one large problem remains now, which is the spurious firing of the clock interrupt before we're ready to handle it... I will try to fix this today.

svn path=/trunk/; revision=23692
2006-08-24 19:17:14 +00:00
Alex Ionescu 8b82c0d641 - Write a basic Clock Interrupt handler in the HAL (doesn't deal with changing increments yet, just like current ROS). It will call KeUpdateSystemTime once ready.
- Implement KeDisconnectInterrupt with the new implementation.
- Put Clock Interrupt initialization in the right place (might still be too late: must investigate more).
- Added a debug print when unexpected interrupts are called, just noticed this happens on my checked machine, and it's a useful tracing tool.

svn path=/trunk/; revision=23678
2006-08-24 05:36:50 +00:00
Alex Ionescu da725d9d30 - Fix some bugs in INT_PROLOG so that it can be used in cases like Unexepcted interrupts, where we don't want to push a fake error code, and want to use our own parameter.
svn path=/trunk/; revision=23672
2006-08-23 18:02:52 +00:00
Alex Ionescu c0ad9f32d3 - [AUDIT] After spending some time looking at the current HAL, I believe it to be clean and written by authors which had knowledge of system internals and have always used clean-rooming. As well, the difference in implementation, complete and utter incompatibility with NT as well as the presence of some Linux-based code confirms this.
- Fix function definitions of HalQueryRealTimeClock, HalGetEnvironmentVariable. They were defined in the NDK in one way, but implemented another way, and since the HAL didn't include its own NDK file, the compiler didn't realize this. Calls of these functions might've experienced serious problems.
- Also fix HalHandleNmi and HalInitSystem definitions.
- Add stub code to actually setup the Clock Interrupt.

svn path=/trunk/; revision=23670
2006-08-23 17:28:39 +00:00
Alex Ionescu 8481c1fa10 - NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL SVN Logs for more detailed information. Thanks to Andrew (Wax), Thomas and Aleksey for testing.
svn path=/trunk/; revision=21880
2006-05-10 17:47:44 +00:00
Alex Ionescu 9c52bdbe04 - Remove some public APIs from internal headers.
- Remove some internal APIs/types from public headers.
- Make PSECTION_OBJECT a PVOID unless really needed (which should only be inside \mm)
- Make hal buildable on msvc.
- Fix some other misc. various msvc/ddk incompatibilities.

svn path=/trunk/; revision=20696
2006-01-08 06:23:17 +00:00
Gé van Geldorp e4c4a50a9e Use the BSOD color that Cutler intended
svn path=/trunk/; revision=20458
2005-12-30 15:28:43 +00:00
Alex Ionescu 901929a787 - Added support for NTLDR style freeloader GUI. To enable, edit freeldr.ini and add:
ShowTime=No
MinimalUI=Yes
MenuBox=No
CenterMenu=No
TimeText=Seconds until highlighted choice will be started automatically:  
Also make sure the following are set:
MenuTextColor=Gray
MenuColor=Black
TextColor=Gray
SelectedTextColor=Black
SelectedColor=Gray.
- Also made the boot-up screen black, not blue, since that's the actual color it's been after NT4. If booting without NOGUIBOOT, this results in a much nicer transition to the boot screen (especially if using the NTLDR theme)
- Some other minor changes done to simplify transitions while booting. Hoping for filip to finish his Bootvid patch to remove the last annoying gui->text->gui switch near the end :).

svn path=/trunk/; revision=20366
2005-12-27 03:12:00 +00:00
Hartmut Birr b0c939bf13 Used the kernel base address from the loader structure instead MmSystemRangeStart.
MmSystemRangeStart isn't the base address with the 3GB switch.

svn path=/trunk/; revision=16597
2005-07-16 13:01:18 +00:00
Alex Ionescu 16c356bfa1 Ditto for HAL
svn path=/trunk/; revision=16127
2005-06-19 22:53:49 +00:00
Alex Ionescu f8d053290e Build Generic HAL with w32api
svn path=/trunk/; revision=16039
2005-06-18 14:29:31 +00:00
Martin Fuchs e228aadfe5 migrate substitution keywords to SVN
svn path=/trunk/; revision=12852
2005-01-06 13:58:04 +00:00