Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

228 lines
6.3 KiB

@if "%_ECHO%"=="" @echo off
setlocal
set PROG=IDHEADER
goto Start
rem ********************************
:Usage
echo Usage: %PROG% source-file helpid-out-file helpstr-out-file helpstr-resource [-NoIncludePath]
echo Converts an .ID file to three output files: 1) a help
echo context number .H file, 2) a help string .H file, and
echo 3) a resource .RC file
echo.
echo -NoIncludePath prevents the path of helpid-out-file from being added to
echo the #include statement at the beginning of helpstr-resource
goto end
rem ********************************
:Start
set FILE_ID=%1
set FILE_DEST1=%2
set FILE_DEST2=%3
set FILE_DEST3=%4
if "%FILE_ID%"=="" goto Usage
if "%FILE_DEST1%"=="" goto Usage
if "%FILE_DEST2%"=="" goto Usage
if "%FILE_DEST3%"=="" goto Usage
if "%5" == "-NoIncludePath" (
set IncludedFile=%~n2%~x2
) else if "%5"=="" (
set IncludedFile=%2
) else (
goto Usage
)
if not exist %FILE_ID% goto NoSource
rem Check for required tools
set SED=%THUNDER55%\%TOOLS%\bin\SED.EXE
set GREP=%THUNDER55%\%TOOLS%\bin\GREP.EXE
if not exist %SED% goto NoTool
if not exist %GREP% goto NoTool
rem Delete the destination file
if exist %FILE_DEST1% del %FILE_DEST1%
if exist %FILE_DEST1% goto ReadOnly1
if exist %FILE_DEST2% del %FILE_DEST2%
if exist %FILE_DEST2% goto ReadOnly2
if exist %FILE_DEST3% del %FILE_DEST3%
if exist %FILE_DEST3% goto ReadOnly3
set FILE_TMP1=%PROG%.T1
set FILE_TMP2=%PROG%.T2
if exist %FILE_TMP1% del %FILE_TMP1%
if exist %FILE_TMP2% del %FILE_TMP2%
rem -------------------------------
rem Add a warning to the first
rem temporary file that the file
rem is auto generated.
echo //******************************* >> %FILE_TMP1%
echo //******************************* >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //* THIS FILE IS AUTOMATICALLY GENERATED! >> %FILE_TMP1%
echo //* DO NOT EDIT! DO NOT EDIT! DO NOT EDIT! >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //* This file was generated by processing >> %FILE_TMP1%
echo //* the following file: >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //* %FILE_ID% >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //* Please look there for possible instructions. >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //* DO NOT EDIT! DO NOT EDIT! DO NOT EDIT! >> %FILE_TMP1%
echo //* THIS FILE IS AUTOMATICALLY GENERATED! >> %FILE_TMP1%
echo //* >> %FILE_TMP1%
echo //******************************* >> %FILE_TMP1%
echo //******************************* >> %FILE_TMP1%
rem Now copy that warning to the second
rem temporary file
copy %FILE_TMP1% %FILE_TMP2%
rem -------------------------------
rem Set up the pattern. We are
rem expecting a file in the format:
rem
rem devstring devcontext# helpstring
rem
rem For example,
rem
rem comctls 2000001 "Microsoft Windows Common Controls"
rem
rem Blank lines are acceptable, as
rem are lines beginning with the C++
rem single-line comment characters (//)
set ALPHANUM=[A-Za-z_0-9]
set ALPHA=[A-Za-z_]
set IDENTIFIER=%ALPHA%%ALPHANUM%*
set INTEGER=[0-9][0-9]*
set WS=[ ][ ]*
set WSOKAY=[ ]*
set ANY=.*
set HID_LINE=%WSOKAY%\(%IDENTIFIER%\)%WS%\(%INTEGER%\)%WS%\"\(%ANY%\)\"%WSOKAY%
rem -------------------------------
rem Okay, have SED change the above format
rem into the following formats (one format
rem for each output file
rem
rem #define HID_devstring devcontext#
rem #define BS_devstring "helpstring"
rem
rem Example:
rem
rem #define HID_comctls]] 2000001
rem #define BS_comctls "Microsoft Windows Common Controls"
rem
rem This format is needed by VBIDE.SRC and WIZARD.SRC as well
rem as all OLE controls.
rem
rem Note that comment lines at the beginning of a line
rem are carried through to the destination. This is
rem quite intentional.
rem Remove comments that don't begin a line
%SED% "s#^\(..*\)//.*$#\1#g" < %FILE_ID% >> %FILE_TMP1%
rem
rem Add the STRINGTABLE section to the .RC file
rem
echo #include "%IncludedFile%" >> %FILE_DEST3%
echo STRINGTABLE DISCARDABLE >> %FILE_DEST3%
echo BEGIN >> %FILE_DEST3%
rem Okay, go ahead and make the transformations
%SED% "s/^%HID_LINE%$/#define HID_\1 \2/g" < %FILE_TMP1% >> %FILE_DEST1%
%SED% "s/^%HID_LINE%$/#define BS_\1 \"\3\"/g" < %FILE_TMP1% >> %FILE_DEST2%
%SED% "s/^%HID_LINE%$/ HID_\1 \& 65535 \"\3\"/g" < %FILE_TMP1% >> %FILE_DEST3%
echo END >> %FILE_DEST3%
rem -------------------------------
rem Time for some error checking
if not exist %FILE_DEST1% goto NoDestCreated1
if not exist %FILE_DEST2% goto NoDestCreated2
if not exist %FILE_DEST3% goto NoDestCreated3
rem Are there any lines that were not in the correct
rem format and are not comments?
rem Remove all comments so we can check
rem the format of the lines.
rem Note that we need only check one
rem of the output files in order to
rem test the format of the input file.
if exist %FILE_TMP1% del %FILE_TMP1%
if exist %FILE_TMP2% del %FILE_TMP2%
%SED% "s#%WSOKAY%//.*$##g" < %FILE_DEST1% > %FILE_TMP1%
set FILE_BAD=%FILE_DEST1%.ERR
if exist %FILE_BAD% del %FILE_BAD%
rem Now remove blank lines
%GREP% -v "^$" %FILE_TMP1% > %FILE_TMP2%
rem Now find any lines in an incorrect format
%GREP% -v "#define " %FILE_TMP2% > %FILE_BAD%
rem Did grep write any lines to %FILE_BAD%?
if not errorlevel 1 goto BadFormat
rem Remove empty error file
if exist %FILE_BAD% del %FILE_BAD%
rem ------------------------------
rem Remove temporary files
if exist %FILE_TMP1% del %FILE_TMP1%
if exist %FILE_TMP2% del %FILE_TMP2%
goto end
:NoSource
echo %PROG%: The source file %FILE_ID% could not be found.
goto end
:ReadOnly1
echo %PROG%: Error: Could not delete destination file %FILE_DEST1%
goto end
:ReadOnly2
echo %PROG%: Error: Could not delete destination file %FILE_DEST2%
goto end
:Readonly3
echo %PROG%: Error: Could not delete destination file %FILE_DEST3%
goto end
:NoDestCreated1
echo %PROG%: Error: Something went wrong, %FILE_DEST1% was not created.
echo You might try setting _ECHO=1 and then running again to see what
echo failed.
goto end
:NoDestCreated1
echo %PROG%: Error: Something went wrong, %FILE_DEST2% was not created.
echo You might try setting _ECHO=1 and then running again to see what
echo failed.
echo Note that SED.EXE and GREP.EXE are required by this batch file.
goto end
:BadFormat
echo %PROG%: Error: Some lines in %FILE_ID% are in an incorrect format.
echo These are listed in %FILE_BAD%.
goto end
:NoTool
echo %PROG%: Error: One of the following tools could not be located:
echo %SED%
echo %GREP%
goto end
:end
endlocal