:: charset=OEM 850 @echo off chcp 850 rem OEM 850 is the default code page of cmd.exe. rem It is called here out of an abundance of caution. :: :: encoding OEM 850 :: name charupdate :: description command script in batch to run with cmd.exe interpreter on Windows. :: Using the Keyboard Table Generation Tool (KbdUTool) version 3.40. :: KbdUTool is a part of Microsoft Keyboard Layout Creator (MSKLC) 1.4. :: This process is complementary to generation of installers in MSKLC. :: version 1.9.0 :: date 2016-10-23 :: contact ms@charupdate.info :: ressources http://charupdate.info :: :: Copyright 2016 Marcel Schneider *27.01.1968 :: :: Licensed under the Life Protection Engagement License (the "License"); :: you may not use this file except in compliance with the License. :: You may read and copy the License at :: :: http://charupdate.info/#license :: :: Unless required by applicable law or agreed to in writing, software :: distributed under the License is distributed on an "AS IS" BASIS, :: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. :: :: Execution parameters: setlocal EnableExtensions EnableDelayedExpansion :: Window title of cmd.exe: title charupdate (english) 1.9 if defined bg ( color %bg%%fg% ) else color 13 rem This color starts the transition from the default black background to white. rem The display colors are customisable in the settings of this script. :: Initialise : set MSKLCprofile="%ProgramFiles%\Microsoft Keyboard Layout Creator 1.4" set soundfile="C:\Windows\Media\Windows Print complete.wav" set seen=no :: Creates the storage folders: rem To enhance the clarity of the script, long commands are used: rem chdir instead of cd rem mkdir instead of md rem rename instead of ren if not exist %ProgramData%\charupdate ( mkdir %ProgramData%\charupdate echo I've created the folder for the global settings. ) if not exist %LOCALAPPDATA%\charupdate ( mkdir %LOCALAPPDATA%\charupdate echo I've created the folder for the user settings. ) :: Reads the user profile: if exist %LOCALAPPDATA%\charupdate\userdata.txt call :readuserprofile if defined enc ( if "%enc%" neq "u" if "%enc%" neq "a" ( if defined bg ( color %bg%%fg% ) else color cf echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo I'm unable to read correctly your user profile. echo.&echo. echo Probably your profile is damaged. echo.&echo. echo I'll have to reset it. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. pause color fc goto userprofilereset ) ) else ( if defined bg ( color %bg%%fg% ) else color cf echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo I'm unable to extract some variable out of your user profile. echo.&echo. echo Probably you have erased your profile so that I reset it. echo.&echo. echo I'll do this immediately. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. call :milliwait color fc pause goto userprofilereset ) echo I've read my file containing your user profile. echo It may be accessed from the Settings. if defined bg ( color %bg%%fg% ) else color 30 goto globaldataread :: Creeates the user profile: if not exist %LOCALAPPDATA%\charupdate\userdata.txt ( set enc=u&set /a helplevel=0 & set bg=&set fg=& set /a times=3 &set adhoc=oui& set aready=oui&set arqtnok=non& set day=non& set eve=non& set sound=oui set datestamp=%DATE% call :saveuserprofile echo I've created your user profile. ) :: Resets a damaged user profile: :userprofilereset if defined bg ( color %bg%%fg% ) else color 2f set enc=u&set /a helplevel=7 & set bg=&set fg=& set /a times=3 &set adhoc=oui& set aready=oui&set arqtnok=oui& set day=non& set eve=non& set sound=oui set datestamp=%DATE% call :saveuserprofile echo echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo I've reset your user profile. echo.&echo. echo As of support level, I consider that you are an experienced user. echo.&echo. echo For any modification of your profile please consult the Settings. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. call :milliwait if defined bg ( color %bg%%fg% ) else color f2 pause ) :globaldataread if exist %ProgramData%\charupdate\globaldata.txt ( rename %ProgramData%\charupdate\globaldata.txt globaldata.cmd call %ProgramData%\charupdate\globaldata.cmd rename %ProgramData%\charupdate\globaldata.cmd globaldata.txt echo I've read my global settings file for your computer. ) if defined bg ( color %bg%%fg% ) else color 80 :: Creates the global settings script: if not exist %ProgramData%\charupdate\globaldata.txt ( echo @echo off> %ProgramData%\charupdate\globaldata.txt :: Saves the architecture type in the MSKLC format in a short variable: set machine=amd64 if "%PROCESSOR_ARCHITECTURE%" equ "x86" set machine=i386 if "%PROCESSOR_ARCHITECTURE%" equ "IA64" set machine=ia64 echo set machine=!machine!>> %ProgramData%\charupdate\globaldata.txt echo I've created the global settings script. ) :: Reads the project properties file: if exist charupdate-projectprops.txt ( echo. call :readprojectprops ) if defined bg ( color %bg%%fg% ) else color 73 :: Adapts the grammatical forms and numbers: if "%machine%" equ "i386" ( set nmb=one& set pls=& set vbe=is& set vba=has& set ari=a& set ps=it& set po=it& set pp=its& set bit=32 ) else ( set nmb=two& set pls=s& set vbe=are& set vba=have& set ari=some& set ps=they& set po=them& set pp=their& set bit=64 ) :: Adapts the welcome to the environment and the level of progress: :helpfork call :allfilecheck if defined bg ( color %bg%%fg% ) else color b1 if "%allfiles%" equ "yes" if "%adhoc%" equ "yes" ( if %helplevel% equ 0 goto welcompile if %helplevel% neq 0 goto freshen ) if %helplevel% equ 0 goto welcome if %helplevel% equ 1 if exist %MSKLCprofile%\MSKLC.exe ( goto callhelpMSKLCstart ) else ( goto MSKLCprofilehelp ) if %helplevel% equ 2 goto callhelpMSKLCenh0 if %helplevel% equ 3 goto callhelpMSKLCenh1 if %helplevel% equ 4 goto callhelpMSKLCenh2 if %helplevel% equ 5 goto callhelpMSKLCdvp if %helplevel% equ 6 goto callhelpstart if %helplevel% equ 7 goto callhelpedit if %helplevel% equ 8 goto callhelpcompile if %helplevel% equ 9 goto callhelpdebug if %helplevel% equ 10 goto menu :callhelpMSKLCstart call :helpMSKLCstart :callhelpMSKLCenh0 call :helpMSKLCenh0 :callhelpMSKLCenh1 call :helpMSKLCenh1 :callhelpMSKLCenh2 call :helpMSKLCenh2 :callhelpMSKLCdvp call :helpMSKLCdvp :callhelpstart call :helpstart :callhelpedit call :helpsources :callhelpcompile call :helpcompile :callhelpdebug call :helpdebug goto menu :: Updates the relationship to time: :dateup :: Flags the day's date as visited: if defined datestamp ( if "%datestamp%" neq "%DATE%" ( set datestamp=%DATE% set day=no set eve=no call :saveuserprofile ) ) :: Defines the greeting: if %TIME:~0,2% lss 18 ( if "%day%" equ "no" ( set hello=Hello set day=yes call :saveuserprofile ) else ( set hello=Hello again ) ) else ( if "%eve%" equ "no" ( set hello=Hello set eve=yes call :saveuserprofile ) else ( set hello=Hello again ) ) :: D‚finit le moment de la journ‚e : if %TIME:~,2% lss 12 set moment=morning&& goto :eof if %TIME:~,2% lss 18 set moment=afternoon&& goto :eof set moment=evening&& goto :eof :: ######____MAIN MENU____######################################################## :menu call :dateup if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo M A I N M E N U if "%seen%" equ "no" ( echo %hello%, echo. set seen=yes ) else ( echo.&echo. ) echo ^> How can I help you this %moment%? echo. echo I = INSTALLATION of a keyboard layout compiled from its sources echo. echo S = SOURCES in C language and DEF / RC files from a KLC source echo. echo T = TEST of a keyboard layout after you have modified its sources echo. echo V = VERSION (distributable) with all drivers and original installers echo. echo R = RESTORE the original custom driver%pls% after a test series echo. echo H = get HELP or informations ; to display the HELP menu, echo "?" works equally, as well as on other occasions. echo. echo P = PREFERENCES : access to your profile, encoding of the KLC sources, colors... echo. echo Press Enter after your choice, or without choice to quit me. echo ^> The letter may as well be lower case. ^< echo. if defined bg ( color %bg%%fg% ) else color f1 set out=no set option= :menuwhat set /p option= . Your choice: rem The CHOICE command is not used because it is missing on Windows XP, rem it doesn't support the question mark, and it triggers a disturbing beep rem whenever the user hits a wrong letter. if defined option ( if /i "%option:~,1%" equ "h" goto help if /i "%option:~,1%" equ "i" goto freshen if /i "%option:~,1%" equ "p" goto preferences if /i "%option:~,1%" equ "r" goto restore if /i "%option:~,1%" equ "s" goto sources if /i "%option:~,1%" equ "t" goto test if /i "%option:~,1%" equ "v" goto version if "%option:~,1%" equ "?" goto help ) if "%out%" equ "yes" goto eof if defined bg ( color %bg%%fg% ) else color 70 echo. echo I'm sorry, I can do only these 7 things. Would you like to try again? echo To quit me really, please hit the Enter key again. echo. set out=yes goto menuwhat :: ######____GENERAL PRESENTATIONS____######################################### :welcome call :dateup set seen=yes echo.&echo.&echo.&echo. echo %hello%, call me charupdate! I'm here to assist you in certain tasks echo related to the creation of keyboard layouts for your computer, echo compatible with Windows 10, 8, 7, Vista, Server 2003, XP, 2000, and NT 4.0. echo. if exist %MSKLCprofile%\MSKLC.exe ( echo. echo Thanks to Microsoft Keyboard Layout Creator that you've got -- welcome on echo board by the way! This is a must-have while too little known software --, if defined bg ( color %bg%%fg% ) else color b1 ) else ( echo Once you'll have got the free keyboard layout creation software from echo Microsoft, and installed it at its default (or custom) location, ) if defined bg ( color %bg%%fg% ) else color b1 echo I'll be able to generate the sources in C language of the keyboard layout echo of your choice, so that you'll be able in turn to edit them to get an even echo more performative keyboard. I'll then help you to get the drivers compiled. echo. if exist %MSKLCprofile%\MSKLC.exe ( echo Indeed, without the MSKLC, I can't do anything at all. With the MSKLC echo you're well armed to make performative keyboard layouts, if only you're echo ready to edit the sources "by hand". In practice, working with sources echo is a rather common job whatever might be your relationship to computer echo science, whether you're a programmer or an officer (consider e.g. LaTeX). echo. echo I'll now pass over the points concerning the MSKLC, which you may wish echo to access through the Help menu. Input a "?" to view them right now. echo Otherwise I'd primarily like to explain you how I'll try to help you echo with keyboarding on Windows. echo Press Enter to continue. if defined bg ( color %bg%%fg% ) else color f1 set /p welcomeok= . if %helplevel% neq 10 ( set /a helplevel=4 call :saveuserprofile ) if defined welcomeok ( if "%welcomeok%" equ "?" goto help ) goto helpfork ) else ( echo ^> To use me, you must have the following software: echo. echo Microsoft Keyboard Layout Creator MSKLC, version 1.4 echo. echo +1 Free. +2 Made for NSA and the public. +3 From Microsoft. echo.&echo. echo ^> If you have got MSKLC but not in its default folder, echo please tell me its drive and path; echo else, press Enter to continue. Enter a "?" for Help. echo. set pathrequest= if defined bg ( color %bg%%fg% ) else color f1 set /p pathrequest= . [Full path] Enter: goto MSKLCprofilecheck ) :: ######____MSKLC PROFILE (DRIVE AND PATH)____####### 0 ################## :MSKLC if defined bg ( color %bg%%fg% ) else color f1 echo.&echo.&echo. echo ^> To use me, you must have the following software: echo. echo Microsoft Keyboard Layout Creator MSKLC, version 1.4 echo. echo +1 Free. +2 Made for NSA and the public. +3 From Microsoft. echo.&echo. echo ^> If you have got MSKLC but not in its default folder, echo please tell me its drive and path; echo else, press Enter to continue. Enter a "?" for Help. echo. set pathrequest= set /p pathrequest= . [Full path] Enter: :MSKLCprofilecheck if not defined pathrequest ( call :MSKLCdwnl goto :eof ) else ( if "%pathrequest:~,1%" equ "?" ( goto help ) else ( if exist "%pathrequest%\MSKLC.exe" ( call :MSKLCprofilememo ) else ( goto MSKLCprofilehelp ) ) ) if %helplevel% neq 10 ( set /a helplevel=1 call :saveuserprofile ) goto helpfork :MSKLCprofilehelp if defined bg ( color %bg%%fg% ) else color f2 echo. echo I'm sorry, I can't find MSKLC. echo. echo To show me the full path of MSKLC on your machine, echo here is how you may proceed: echo. echo 1 Browse MSKLC in Windows Explorer. echo. echo 2 Once you are in its root directory, left click into the right part echo of the path bar. echo. echo 3 Press Control + C to copy the path to the Clipboard. echo. echo 4 Right-click into my window and select Paste. echo. echo 5 Press Enter. echo. echo Are you ready? I'm waiting for you. echo. echo ^> If you haven't already got MSKLC, press Enter to skip this step. echo.&echo. set pathrequest= set /p pathrequest= . Please paste here the full path of MSKLC on your machine: goto MSKLCprofilecheck :MSKLCprofilememo set MSKLCprofile=%pathrequest% echo set MSKLCprofile=%MSKLCprofile%>> %ProgramData%\charupdate\globaldata.txt echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Thank you. I've saved it. echo. echo The MSKLC path is now stored in %ProgramData%\charupdate\globaldata.txt echo.&echo.&echo.&echo.&echo.&echo.&echo. echo. pause goto :eof :: Check whether KbdUTool is present: :MSKLCcheck set MSKLCava=yes if exist %MSKLCprofile%\MSKLC.exe goto :eof set MSKLCava=no if defined bg ( color %bg%%fg% ) else color cf echo.&echo.&echo.&echo.&echo.&echo.&echo. echo I'm unable to find MSKLC, that includes KbdUTool which I need. echo. echo If you haven't got it, or if you do have it but not in its default folder, echo. echo please be so kind and do the required steps. echo.&echo.&echo.&echo. echo ^> Press any key and I'll take you there. echo. pause >nul goto :eof :: ######____SPECIAL PRESENTATIONS____######################################### :welcompile call :dateup set seen=yes echo.&echo. echo %hello%, call me charupdate! I happen to be here to help you get the layout echo driver%pls% compiled from the sources hereby. %ps% will be compatible echo with Windows 10, 8.1, 8, 7, Vista, Server 2003, XP, 2000, and NT 4.0. if exist %MSKLCprofile%\MSKLC.exe ( echo. echo Thanks to Microsoft Keyboard Layout Creator that you've got -- welcome on echo board by the way! This is a must-have while too little known software --, ) else ( echo Once you'll have got the free keyboard layout creation software echo from Microsoft in its default or custom folder, ) if defined bg ( color %bg%%fg% ) else color b1 echo I'll be able to compile the driver%pls% that fit the %bit% bit architecture echo of your computer, from the sources that are with me. echo And since I have all by hand to install %po%, echo I'll prepare for you a little handsome pack that will enable echo you to install soon on your machine the keyboard layout echo named %name% belonging to the project %projectname%. echo _______________________________________________________________________ echo / \ echo I You are welcome to verify myself as well as the sources whenever I echo I you feel the need to do so. As of the installers, if your prefer I echo I some fresh ones ready out of MSKLC, please ask MSKLC to make them I echo I for your from the KLC source that is here with me. I echo \_______________________________________________________________________/ echo. echo If you're ready, press Enter, or if you have questions, you're welcome echo to type a question mark first: ? Enter if defined bg ( color %bg%%fg% ) else color f1 set /p agree= . if %helplevel% neq 10 ( set /a helplevel=1 call :saveuserprofile ) if "%agree:~,1%" equ "?" goto help if exist %MSKLCprofile%\MSKLC.exe goto freshen goto MSKLC :allfilecheck set allfiles=no if exist charupdate-projectprops.txt ( if exist %name%\%name%_%machine%.msi ( if exist %name%.klc ( set allfiles=klc if exist %name%.C ( if exist %name%.H ( set allfiles=near if exist %name%.RC ( if exist %name%.DEF ( set allfiles=yes )))))) if exist C:\Windows\System32\%name%.dll set allfiles=nomatter ) goto :eof :: ######____HELP MENU____##################################################### :help if defined bg ( color %bg%%fg% ) else color fa echo. echo H E L P M E N U echo ^> How may I help you? echo. echo F = FREE download of MSKLC from the official Microsoft download center 1 echo. echo Q = QUICK Start Guide to MSKLC: SIL: Creating a keyboard using MSKLC 2 echo. if defined bg ( color %bg%%fg% ) else color fe echo E = ENHANCED use of MSKLC (3 pages, with 2 examples) 3 through 5 echo. echo B = Make the most out of MSKLC : Visit Michael S. Kaplan's BLOG! 6 echo. echo P = 1st steps to create a most PERFORMATIVE driver based keyboard layout 7 echo. echo S = SOURCES in C: explanations by Mr G. Gal‚ron from the MNA website 8 echo. echo C = How to COMPILE test drivers and distributable drivers using KbdUTool 9 if defined bg ( color %bg%%fg% ) else color fa echo. echo D = DEBUGGING a keyboard layout: AltGr, dead keys, and more 10 echo. echo R = REPEAT the sequence (will reset help level in your user profile) 2-10 if defined bg ( color %bg%%fg% ) else color f2 echo. echo M = MAIN MENU echo. set option= set /p option= . Your choice: rem The CHOICE command is not used because it is missing on Windows XP, rem it doesn't support the question mark, and it triggers a disturbing beep rem whenever the user hits a wrong letter. if not defined option goto help else ( if /i "%option:~,1%" equ "b" call :helpMSKLCdvp if /i "%option:~,1%" equ "c" call :helpcompile if /i "%option:~,1%" equ "d" call :helpdebug if /i "%option:~,1%" equ "e" call :helpMSKLCenh0 & call :helpMSKLCenh1 & call :helpMSKLCenh2 if /i "%option:~,1%" equ "f" call :MSKLCdwnl if /i "%option:~,1%" equ "m" goto menu if /i "%option:~,1%" equ "p" call :helpstart if /i "%option:~,1%" equ "q" call :helpMSKLCstart if /i "%option:~,1%" equ "r" set /a helplevel=1 & call :saveuserprofile & goto helpfork if /i "%option:~,1%" equ "s" call :helpsources goto help ) :: ######____HELP MSKLC: DOWNLOAD____####### 1 #################################### :MSKLCdwnl if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo To create keyboard layouts with me, you must have on your machine echo the Microsoft Keyboard Layout Creator (MSKLC). This software is available echo free of charge right from Microsoft's Download Center. echo. echo For history, it is good to know that while the tools included in the echo MSKLC folder preexisted, the origin of MSKLC itself is related to the echo terrorist attacks of september 11. For transcriptions, the NSA needed echo new keyboard layouts supporting more languages. These layouts had to be echo created internally in order not to disclose the language names, except echo those of a handful layouts made by Microsoft to meet the urgency. echo Made available to all Windows users free of charge, echo MSKLC has been downloaded over 2 million times . echo ______________________________________________________________________ echo / \ echo I MSKLC, the drivers and installers it generates are fully compatible I echo I with all Windows versions of our millennium, including the most I echo I recent ones (Windows 10, Windows 8 et 8.1, Windows 7). They all I echo I work perfectly with MSKLC because the relevant parts of the operating I echo I system had been frozen by 2000 to ensure backwards compatibility. I echo. I Please don't mind when you read contrary statements wherever. I echo \______________________________________________________________________/ echo. echo ^> Press any key to visit the download page of MSKLC. if defined bg ( color %bg%%fg% ) else color f2 pause >nul rem start https://www.microsoft.com/en-us/download/details.aspx?id=22339 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Microsoft Keyboard Layout Creator 1.4 echo.&echo. echo on the Microsoft Download Center echo.&echo. echo https://www.microsoft.com/en-us/download/details.aspx?id=22339 echo.&echo.&echo.&echo.&echo.&echo. if %helplevel% neq 10 ( set /a helplevel=1 call :saveuserprofile ) set /a count=0 :loop0 call :milliwait & color df call :milliwait & color 5f call :milliwait & color df call :milliwait & color 72 set /a count+=1 if %count% lss 7 goto loop0 goto :eof :: ######____HELP MSKLC : GETTING STARTED____######### 2 ######################## :helpMSKLCstart if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo MSKLC contains a Help section written by its author Michael S. Kaplan. echo It is strongly recommended to first check it out prior to read further echo documentation. If then you wish to compare an alternate point of view, echo you might take a glance at /Creating a keyboard using MSKLC/ from SIL. echo I'll take you to this PDF file right now if you like. echo. echo Additionally I'd suggest to take notice of the following two features: echo. echo 1 The visual appearance of MSKLC becomes much more pleasant if echo you resize the window to bottom so that the keys become squares. echo This parameter will be saved. echo. echo The rectangular key shape, that looks somewhat flattened, had been echo choosen with respect to the character sequences that MSKLC can manage echo to map to a single keystroke (up to 4 in MSKLC). echo. echo 2 Furthermore, you may color the keys of MSKLC as you prefer, thanks to echo the color palette feature below left. Even though presented in the Help echo section, it remains often unused, probably because black-and-white makes echo for a consensual look. Though you're welcome to give it some nice colors. echo. echo ^> Press Enter now so that I'll ask your browser to display echo the PDF from SIL. (Type first N to skip.) if defined bg ( color %bg%%fg% ) else color f2 set pdfview= set /p pdfview= . if %helplevel% neq 10 ( set /a helplevel=2 call :saveuserprofile ) if defined pdfview ( if "%pdfview:~,1%" equ "?" goto :eof if /i "%pdfview:~,1%" equ "m" goto :eof if /i "%pdfview:~,1%" equ "n" goto :eof ) rem start http://www-01.sil.org/computing/toolbox/Creating%20a%20Keyboard%20Using%20MSKLC.pdf?_ga=GA1.2.1447229374.1476047403 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the PDF: echo.&echo.&echo. echo SIL: Creating a keyboard using MSKLC echo.&echo.&echo.&echo. echo http://www-01.sil.org/computing/toolbox/Creating a Keyboard Using MSKLC.pdf echo ?_ga=GA1.2.1447229374.1476047403 echo.&echo.&echo.&echo.&echo. set count=0 :loop1 call :milliwait & color 4f call :milliwait & color 0f call :milliwait & color 4f call :milliwait & color 70 set /a count+=1 if %count% lss 7 goto loop1 goto :eof :: ######____HELP MSKLC : ENHANCED USE 0____######## 3 ######################### :helpMSKLCenh0 if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo Good to know when working with MSKLC: One purpose of MSKLC is to provide a echo Graphic User Interface to the "Keyboard Table Generation Tool (Unicode)", echo whose short name is "KbdUTool" (v3.40). This is the software that manages echo generating the drivers, while the installers are generated by MSKLC. echo Although included in the folder, it has its own Command Line Interface. echo. echo Microsoft has made av. 150 keyboard layouts, improved some for Windows 8, echo added some for Windows 10. But matching the thousands of languages and echo user preferences is economically unfeasible, and impossible to endorse. echo This is why Microsoft make available their tools, welcoming every effort echo from users tending at creating the keyboard layouts we need and like. echo. echo The MSKLC End User License Agreement does not contain the clause present in echo the Windows EULA, that prohibits to "use components of the software to run echo applications not running on the software". So we are free to use the entire echo folder that constitutes the software, including KbdUTool, that has much less echo "technical limitations" than the MSKLC main program. This is why there is echo little temptation to "work around any" of them. Microsoft is already in debt echo by unsupporting multiple code units by dead keys. Since many programs are echo available only for Windows, users deserve the right to make full use of the echo Windows resources to customize their keyboards as they need and like them. echo Now I'll open the folder and the license agreement so that you take notice, echo prior to bringing two examples of what's on. Please press any key... if defined bg ( color %bg%%fg% ) else color f2 pause >nul call %MSKLCprofile% call %MSKLCprofile%\license.rtf if %helplevel% neq 10 ( set /a helplevel=3 call :saveuserprofile ) goto :eof :: ######____HELP MSKLC : ENHANCED USE 1____######## 4 #######3333333############# :helpMSKLCenh1 if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo ^> Example 1: Get more than spaces on the space bar ( 4/10 ) echo. echo On the space bar, key positions are scarce, the more as the normal space echo is doubled in the Shift shift state (for practical reasons), and there are echo also two no-break spaces to find room for. Hence the MSKLC limitation echo prohibiting any other than white space characters here. echo But there is no consensus on this. echo Two ideas for alternate allocations on Ctrl + Alt + Space: echo. echo + The underscore: Often replacing a space, it has been choosen for this echo position on the French ergonomic BPO layout: http://bepo.fr echo. echo + The Compose key of the layout, that is a dead key, a serial dead key echo exactly, combines this way easily with other characters on the same level. echo. echo All this and more, you'll be able to do by editing the KLC source in a echo text editor, and in some spreadsheet software, preferrably Excel. echo You may also choose to code it in C and for that, to merge the allocation echo tables and import them into Excel. Once you are done with editing them, echo simply select the whole table and paste it back into the C source. echo. echo With MSKLC, things are done via C sources anyway. I'll take you to echo the folder where they show up. Press any key to continue... if defined bg ( color %bg%%fg% ) else color f2 pause >nul call %TEMP% call %MSKLCprofile%\nameslist.txt if %helplevel% neq 10 ( set /a helplevel=4 call :saveuserprofile ) goto :eof :: ######____HELP MSKLC : ENHANCED USE 2____######## 5 ########################### :helpMSKLCenh2 if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo ^> Example 2 : Localized character names in MSKLC ( 5/10 ) echo. echo To be able to display the character names for your information, MSKLC echo ships with the source of the Unicode Code Charts, version 5.0 (the actual echo version at the time it was built). This is the Unicode Names List. echo Given its goal, this file is designed to be read by the human reader and echo by processes that output its content for the same purpose. The character echo names must always be represented either in all caps or in small caps. echo. echo An updating feature enables MSKLC to download the last version of echo nameslist.txt (Help ^> Update Unicode character data). Note however that echo a few character names are defective. These characters have been given echo a Formal Alias. These alias names do not show up in MSKLC. Thus you may echo wish to use a corrected or otherwise customized Names List, or a localized echo one. On the Unicode website you can find an American English translation, echo but it is not maintained. As Unicode's ISO/IEC mirror ISO/IEC 10646 has echo been translated to French, you may find a Unicode 7.0 French NamesList on echo a Canadian website where I will take you, so that you may click on: echo Liste des noms Unicode 7.0 et ISO/CEI 10646:2014 annot‚s echo. echo Place a copy into your MSKLC user directory (or directories), and toggle echo between nameslists by renaming or moving them to/from subdirectories. echo I'll open your directory right now, and four web pages. Press any key... if defined bg ( color %bg%%fg% ) else color f2 pause >nul start "The place where MSKLC stores for you a copy of the Names List" %LOCALAPPDATA%\MSKLC rem start http://www.unicode.org/notes/tn24/ echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Sample American English Translation of Unicode Names List echo.&echo. echo http://www.unicode.org/notes/tn24/ echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop2a call :milliwait & color cf call :milliwait & color 0f call :milliwait & color cf call :milliwait & color f0 set /a count+=1 if %count% lss 3 goto loop2a rem start http://hapax.qc.ca/ echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Hapax - Unicode et ISO 10646 en fran‡ais echo.&echo. echo http://hapax.qc.ca/ echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop2b call :milliwait & color cf call :milliwait & color 0f call :milliwait & color cf call :milliwait & color f0 set /a count+=1 if %count% lss 3 goto loop2b rem start http://www.unicode.org/Public/latest/UCD/nameslist.txt echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo NamesList.txt echo.&echo. echo Unicode Character Database echo.&echo. echo http://www.unicode.org/Public/latest/UCD/nameslist.txt echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop3 call :milliwait & color cf call :milliwait & color 4f call :milliwait & color cf call :milliwait & color f0 set /a count+=1 if %count% lss 2 goto loop3 rem start http://www.unicode.org/charts/ echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Code Charts echo.&echo. echo Unicode echo.&echo. echo http://www.unicode.org/charts/ echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop4 call :milliwait & color cf call :milliwait & color 4f call :milliwait & color cf call :milliwait & color f0 set /a count+=1 if %count% lss 2 goto loop4 if %helplevel% neq 10 ( set /a helplevel=5 call :saveuserprofile ) goto :eof :: ######____HELP MSKLC : DO MORE____######## 6 ################################# :helpMSKLCdvp if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo When using the GUI of MSKLC, keep in mind that a number of limitations of echo this program are not related to Windows, so users are not expected to only echo create keyboard layouts that keep inside these limitations. The most that echo one can tell is that its author, Michael S. Kaplan, expresses by some of echo them his care for getting his users making good layouts. Some other ones echo aim at keeping the software simple, some are due to faith, or to an error: echo. echo - Serial dead keys are unavailable, but Michael Kaplan showed on his blog echo how to implement this by editing the KLC source. I'll take you there. echo. echo - One extra toggle and five extra modifiers are unavailable except by echo editing the sources, and Michael Kaplan mentioned this on his blog. if defined bg ( color %bg%%fg% ) else color f1 echo. echo - One key press can trigger the insertion of up to 16 code units, that is, echo 16 latin letters or 8 SMP characters, except on Shift+AltGr (4 units). echo MSKLC applies the low limit throughout. Furthermore, it cannot manage echo these sequences on AltGr, a bug that Michael Kaplan bitterly complained echo of and was eager to fix at the next update. This update didn't happen. echo. echo ^> Michael S. Kaplan passed away in 2015. His blog has been archived. echo I strongly recommend you to search and browse it for more information. echo. echo Press Enter to read how to implement serial dead keys. (Type N to skip.) if defined bg ( color %bg%%fg% ) else color f0 set /p blogvisit= . if %helplevel% neq 10 ( set /a helplevel=6 call :saveuserprofile ) if defined blogvisit ( if "%blogvisit:~,1%" equ "?" goto :eof if /i "%blogvisit:~,1%" equ "m" goto :eof if /i "%blogvisit:~,1%" equ "n" goto :eof ) rem start http://archives.miloush.net/michkap/archive/2011/04/16/10154700.html echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Chain Chain Chain, Chain of Dead Keys echo.&echo. echo Sorting it all Out, v2! echo.&echo. echo http://archives.miloush.net/michkap/archive/2011/04/16/10154700.html echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop5 call :milliwait & color 8f call :milliwait & color 0a call :milliwait & color 8f call :milliwait & color 71 set /a count+=1 if %count% lss 7 goto loop5 goto :eof :: ######____HELP CREATION : FIRST STEPS____############ 7 ######################## :helpstart if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo Now let's look at the first steps of creating a keyboard layout: ( 7/10 ) echo. echo Create a temporary custom keyboard layout, following the guide that echo is included in MSKLC (Help ^> Contents). echo ^> A dot cannot be a part of a layout name, because though it passes echo the validation, it will lead to a bug at compilation. echo I'll recall your this if I find a dot in a layout name. echo. echo Get MSKLC build the DLL and the setup package, and launch the installation. echo This will take a dozen seconds through several minutes, because prior to echo any installation, Windows creates a system restore point. echo. echo Copy me to the 'Current working directory' of MSKLC, that you define in the echo bottom part of the window. This directory will contain the KLC source of your echo new layout as well as the folder of the drivers and the installers, which echo I will use to package the future drivers that I'll ask KbdUTool to generate. echo When you'll run me there, I'll always need this KLC source, even if it will echo be outdated when you edit the C sources that you can ask me to obtain. echo I'll set these sources read-only so that KbdUTool cannot open them to write. echo. echo Voici la principale source commune : kbd.h. (Appuyez sur une touche...) echo ^> Elle est dans le dossier du MSKLC, sous-dossier \inc\, mais je vous en echo mettrai une copie ici auprŠs de moi pour que vous l'ayez sous la main. if defined bg ( color %bg%%fg% ) else color f2 pause >nul echo. copy %MSKLCprofile%\inc\kbd.h kbd-H(copie_pour_lecture_humaine).txt call kbd-H(copie_pour_lecture_humaine).txt if %helplevel% neq 10 ( set /a helplevel=7 call :saveuserprofile ) goto :eof :: ######____HELP CRATION : DITER LES SOURCES____######## 8 #################### :helpsources if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo Certaines fonctionnalit‚s trŠs utiles sont disponibles ( 8/10 ) echo uniquement lorsque les sources des pilotes de disposition sont ‚dit‚es echo de maniŠre traditionnelle, … l'aide d'‚diteurs de texte -- et de tableurs. echo. echo La page ^<^< Cr‚ation d'un clavier Windows ^>^> du site de l'association echo MON NOM ACCENTU qui milite depuis longtemps pour l'orthographe complŠte, echo explique en d‚tail la structure des sources de clavier Windows, exemple … echo l'appui car le CLAVIER GALRON, qui est un modŠle de disposition complŠte, echo vous est partag‚ aussi sous forme de dossier de sources personnalisables. echo. echo ^> Appuyez sur une touche et je vous y emmŠne de suite. echo. echo Bien s–r que certaines parties de ces sources ne sont pas trŠs faciles … echo comprendre puisqu'elles sont ‚crites dans un langage de programmation qui echo s'appelle C. Mais il n'est pas n‚cessaire de comprendre absolument tout, echo et en partant d'une bonne base, les modifications peuvent ˆtre simples. echo. echo ^> Petite astuce pour modifier les tableaux dans la source .C : echo. echo Copiez-collez-les dans une feuille de calcul format‚e 'Texte', o— beaucoup echo de choses deviennent plus simples. Une fois finis, les tableaux seront echo copi‚s et coll‚s en remplacement des tableaux d'origine dans la source. echo Appuyez sur une touche... if defined bg ( color %bg%%fg% ) else color f2 pause >nul if %helplevel% neq 10 ( set /a helplevel=8 call :saveuserprofile ) rem start http://accentuez.mon.nom.free.fr/Clavier-CreationClavier.php echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Cr‚ation d'un clavier Windows echo.&echo. echo on the website of the association Mon Nom Accentu‚ echo.&echo. echo http://accentuez.mon.nom.free.fr/Clavier-CreationClavier.php echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop6 call :milliwait & color e0 call :milliwait & color 2f call :milliwait & color e0 call :milliwait & color f0 set /a count+=1 if %count% lss 7 goto loop6 goto :eof :: ######____HELP CRATION : COMPILATION____######### 9 ########################### :helpcompile if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo Je vous conseille de tester r‚guliŠrement vos modifications, ( 9/10 ) if "%machine%" equ "i386" ( echo et pour ce faire, de me demander de compiler un pilote de test, que ) else ( echo et pour ce faire, de me demander de compiler les deux pilotes de test, que ) echo je vous mettrai directement dans le%pls% r‚pertoire%pls% systŠme, aprŠs avoir echo r‚cup‚r‚ le%pls% pilote%pls% d'origine. Je peux faire compiler en tout quatre echo pilotes diff‚rents, mais je sais le%pls%quel%pls% il vous faut, parce que echo le type d'architecture %bit% bit de votre machine m'est connu par Windows. echo. echo Il vous suffit de fermer et de rouvrir votre session, et le%pls% pilote%pls% echo passer%vba% du disque dur dans la m‚moire vive et ser%vba% testable%pls%. echo. echo ^> Veillez dans un premier temps … ce que le clavier associ‚ … la echo langue d'entr‚e par d‚faut ne soit pas concern‚ par ces tests. echo. echo Quand votre nouvelle disposition sera bonne, comptez sur moi pour d‚clencher echo la compilation des pilotes d‚finitifs pour toutes les architectures. echo Je vous les emballerai avec des copies des installateurs d'origine. echo. echo En compl‚ment je pr‚pare des packs de recompilation, grƒce auxquels toute echo personne ayant le MSKLC sera en ‚tat de personnaliser (et de refaire) les echo pilotes. Cela assure la transparence -- et aide … promouvoir la libert‚. echo. echo ^> Si KbdUTool plante, ne vous inqui‚tez pas, c'est suivant l'encodage echo de la source KLC. Modifiez-le dans les Pr‚f‚rences ou sur le fichier. if defined bg ( color %bg%%fg% ) else color f2 pause >nul if %helplevel% neq 10 ( set /a helplevel=9 call :saveuserprofile ) goto :eof :: ######____HELP CRATION : DBOGUER UNE DISPOSITION____######### 10 ############ :helpdebug if defined bg ( color %bg%%fg% ) else color f9 echo.&echo.&echo. echo Les claviers peuvent pr‚senter des bugs assez surprenants : ( 10/10 ) echo. echo :( Si la disposition ne fonctionne pas dans certains programmes, v‚rifiez si echo elle contient une s‚quence de plus de 4 unit‚s au niveau Maj + AltGr. Cela echo arrive quand on met les points de suspension entre crochets en AltGr, et les echo "[...]" au niveau au-dessus. Quand elle est la disposition par d‚faut, les echo programmes concern‚s ne peuvent mˆme plus s'ouvrir (sous Windows 7 Starter). echo. echo :( Si une ou plusieurs touches mortes ne fonctionnent pas dans tel navigateur echo (ni d'autres dans tel autre), vous ˆtes face … un bug assez courant dans echo les dispositions lourdes sous Windows. Je suppose que les navigateurs, dont echo l'interface de saisie n'est pas la priorit‚, y ont du mal … lire les DLL echo (BibliothŠques de liens dynamiques) que sont les pilotes de disposition. echo Sans doute l'XML, utilis‚ sous Mac OS X, est plus stable et mieux adapt‚. echo. echo :( Si certains raccourcis clavier de vos programmes ne fonctionnent plus, ou si echo au contraire vous obtenez des fonctionnalit‚s au lieu de pouvoir ins‚rer des echo caractŠres en AltGr, vous ˆtes victime du choix (mal avis‚) de Microsoft qui echo a impl‚ment‚ AltGr en y associant la combinaison Contr“le + Alt. En effet, echo … cette ‚poque, les raccourcis clavier des programmes ‚taient peu nombreux. echo Or il existe d'autres modificatrices, parmi lesquelles Kana, introduite sur echo les claviers japonais et utilis‚e dans le monde entier, notamment au Canada. echo Sur le site du b‚po vous trouvez aussi le tutoriel. Tapez une touche... if defined bg ( color %bg%%fg% ) else color f2 pause >nul if %helplevel% neq 10 ( set /a helplevel=10 call :saveuserprofile ) rem start http://bepo.fr/wiki/Utilisateur:LeBret/Remplacer_AltGr_par_Kana echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Please wait, your browser will display the page echo.&echo. echo Utilisateur:LeBret/Remplacer AltGr par Kana - echo.&echo. echo Disposition de clavier francophone et ergonomique b‚po echo.&echo. echo http://bepo.fr/wiki/Utilisateur:LeBret/Remplacer_AltGr_par_Kana echo.&echo.&echo.&echo.&echo.&echo. set count=0 :loop7 call :milliwait & color 2f call :milliwait & color 5f call :milliwait & color cf call :milliwait & color 9f call :milliwait & color e0 set /a count+=1 if %count% lss 7 goto loop7 goto :eof :: ######____R O U T I N E S____################################################ :: ######____DITER LES RESSOURCES____########################################## :: Lire et r‚crire le fichier des ressources .RC, automatiser le versionnage : :resources :: Lecture du fichier ressources .RC : :readrc echo Merci de bien vouloir patienter, je suis en train de lire le fichier RC... :: Lecture de la partie num‚rique : :readnumbrc set /a index=0 for /f "skip=1 usebackq tokens=1,2 delims= " %%E in ("%name%.RC") do ( set "nbrc[!index!][0]=%%~E" set "nbrc[!index!][1]=%%~F" set /a index += 1 if %index% gtr 10 goto parsenumrc ) :parsenumrc set /a inx=0 :parsenumloop if "!nbrc[%inx%][0]!" equ "FILEVERSION" set filvnbrrc=!nbrc[%inx%][1]! if "!nbrc[%inx%][0]!" equ "PRODUCTVERSION" set provnbrrc=!nbrc[%inx%][1]! if %inx% gtr %index% goto readchainrc set /a inx+=1 goto parsenumloop :: Lecture des chaŒnes : :readchainrc set /a index=0 for /f skip^=14^ usebackq^ tokens^=1^,2^,4^ delims^=^" %%G in ("%name%.RC") do ( set "rc[!index!][0]=%%~G" set "rc[!index!][1]=%%~H" set "rc[!index!][2]=%%~I" set /a index += 1 ) set /a inx=0 :parsechainrc if "!rc[%inx%][0]!" equ " 1000 " set descriprc=!rc[%inx%][1]! if "!rc[%inx%][0]!" equ " 1100 " set langfulrc=!rc[%inx%][1]! if "!rc[%inx%][0]!" equ " 1200 " set langabbrc=!rc[%inx%][1]! if "!rc[%inx%][1]!" equ "FileVersion" set filvstrrc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "ProductName" set pronamerc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "ProductVersion" set provstrrc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "CompanyName" set autcomprc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "Release Information" set relsinfrc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "LegalCopyright" set copyrigrc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "LegalTrademarks" set tramarkrc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "InternalName" set intnamerc=!rc[%inx%][2]:~,-2! if "!rc[%inx%][1]!" equ "OriginalFilename" set ofinamerc=!rc[%inx%][2]:~,-2! if %inx% lss %index% ( set /a inx+=1 goto parsechainrc ) set rc pause :: Remplit les variables non d‚finies : if not defined descriprc set descriprc=nul if not defined pronamerc set pronamerc=nul if not defined autcomprc set autcomprc=nul if not defined relsinfrc set relsinfrc=nul if not defined copyrigrc set copyrigrc=nul if not defined tramarkrc set tramarkrc=nul :: Conversions : :: Conversion de Windows 1252 ("ANSI") vers OEM 850 : echo Merci de patienter, je suis en train de convertir des lettres diacrit‚es... set item[1]=%descriprc% set item[2]=%pronamerc% set item[3]=%autcomprc% set item[4]=%relsinfrc% set item[5]=%copyrigrc% set item[6]=%tramarkrc% set /a ind=0 :converto850loop set /a ind+=1 echo Je suis en train de convertir la variable %ind%... set it=!item[%ind%]! call :convert1252to850 set item850[%ind%]=%it% if %ind% lss 6 goto converto850loop set descripcv=%item850[1]% set pronamecv=%item850[2]% set autcompcv=%item850[3]% set relsinfcv=%item850[4]% set copyrigcv=%item850[5]% set tramarkcv=%item850[6]% echo La description est : %descripcv% echo La langue est : %langfulrc% echo L'abr‚viation de la langue est : %langabbrc% echo Le nom du produit ou du projet est : %pronamecv% echo Nom de l'auteur ou de l'entreprise : %autcompcv% echo Informations de sortie : %relsinfcv% echo Droits d'auteur, licences [champ facultatif] : %copyrigcv% echo Marques d‚pos‚es [champ facultatif] : %tramarkcv% echo Le nom interne est : %intnamerc% echo Le nom d'origine du fichier est : %ofinamerc% :: Analyse des num‚ros de version : for /f "usebackq tokens=1-4 delims=, " %%v in ('%filvnbrrc%') do ( set "fvnb[1]=%%~v" set "fvnb[2]=%%~w" set "fvnb[3]=%%~x" set "fvnb[4]=%%~y" ) for /f "usebackq tokens=1-4 delims=, " %%v in ('%provnbrrc%') do ( set "pvnb[1]=%%~v" set "pvnb[2]=%%~w" set "pvnb[3]=%%~x" set "pvnb[4]=%%~y" ) for /f "usebackq tokens=1-4 delims=, " %%v in ('%filvstrrc%') do ( set "fvst[1]=%%~v" set "fvst[2]=%%~w" set "fvst[3]=%%~x" set "fvst[4]=%%~y" ) for /f "usebackq tokens=1-4 delims=, " %%v in ('%provstrrc%') do ( set "pvst[1]=%%~v" set "pvst[2]=%%~w" set "pvst[3]=%%~x" set "pvst[4]=%%~y" ) :: V‚rification des num‚ros de version : set verok=yes& set vnbequvst=yes if %fvnb[1]% neq %fvst[1]% set vnbequvst=no if %fvnb[2]% neq %fvst[2]% set vnbequvst=no if %fvnb[3]% neq %fvst[3]% set vnbequvst=no if %fvnb[4]% neq %fvst[4]% set vnbequvst=no if %pvnb[1]% neq %pvst[1]% set vnbequvst=no if %pvnb[2]% neq %pvst[2]% set vnbequvst=no if %pvnb[3]% neq %pvst[3]% set vnbequvst=no if %pvnb[4]% neq %pvst[4]% set vnbequvst=no if "%vnbequvst%" equ "no" set verok=no set fvequpv=yes if %fvnb[1]% neq %pvnb[1]% set fvequpv=no if %fvnb[2]% neq %pvnb[2]% set fvequpv=no if %fvnb[3]% neq %pvnb[3]% set fvequpv=no if %fvnb[4]% neq %pvnb[4]% set fvequpv=no if "%fvequpv%" equ "no" set verok=no if "%verok%" equ "no" goto versionwarning :showver set fv set pv :versionwarning echo Selon les informations contenues dans le fichier de ressources, echo La version du pilote de disposition est : %filvnbrrc% (%filvstrrc%) echo La version du projet ou du produit est : %provnbrrc% (%provstrrc%) echo :versioning :: Ajoute le num‚ro de version actuel dans les fichiers d'installation : :msiupdate set arch=i386 call :update set arch=amd64 call :update set arch=ia64 call :update echo J'ai mis … jour le num‚ro de version dans les fichiers d'installation. goto whatsoever :update :: Lecture d'un fichier d'installation : set /a msinx=0 for /f "usebackq tokens=* eof= delims=" %%M in ("%name%_%arch%.msi") do ( set /a msinx += 1 set "msiln[!msinx!]=%%~M" ) :: R‚‚criture d'un fichier d'installation : echo !msiln[1]!> "%name%_%arch%.msi" for /l %%I in (2,1,%msinx%) do ( echo !msiln[%%I]:1.0.3.40=%fvnb[1]%.%fvnb[2]%.%fvnb[3]%.%fvnb[4]%!>> "%name%_%arch%.msi" ) goto :eof :whatsoever pause :: Conversion d'OEM 850 vers ANSI : :cv850ansi echo Merci de patienter, je suis en train de convertir des lettres diacrit‚es... set item[1]=%descripcv% set item[2]=%pronamecv% set item[3]=%autcompcv% set item[4]=%relsinfcv% set item[5]=%copyrigcv% set item[6]=%tramarkcv% set /a ind=0 :cvansiloop set /a ind+=1 echo Je suis en train de convertir la variable %ind%... set it=!item[%ind%]! call :convert850to1252 set itemansi[%ind%]=%it% if %ind% lss 6 goto cvansiloop set descriprc=%itemansi[1]% set pronamerc=%itemansi[2]% set autcomprc=%itemansi[3]% set relsinfrc=%itemansi[4]% set copyrigrc=%itemansi[5]% set tramarkrc=%itemansi[6]% set descriprc set langfulrc set langabbrc set filvstrrc set pronamerc set provstrrc set autcomprc set relsinfrc set copyrigrc set tramarkrc echo %descriprc%> Note91.txt echo %langfulrc%>> Note91.txt echo %langabbrc%>> Note91.txt echo %filvstrrc%>> Note91.txt echo %pronamerc%>> Note91.txt echo %provstrrc%>> Note91.txt echo %autcomprc%>> Note91.txt echo %relsinfrc%>> Note91.txt echo %copyrigrc%>> Note91.txt echo %tramarkrc%>> Note91.txt echo %intnamerc%>> Note91.txt echo %ofinamerc%>> Note91.txt :saverc echo #include "winver.h">%name%.RC echo 1 VERSIONINFO>>%name%.RC echo FILEVERSION %filver[1]%,%filver[2]%,%filver[3]%,%filver[4]%>>%name%.RC echo PRODUCTVERSION %prover[1]%,%prover[2]%,%prover[3]%,%prover[4]%>>%name%.RC echo FILEFLAGSMASK 0x3fL>>%name%.RC echo FILEFLAGS 0x0L>>%name%.RC echo FILEOS 0x40004L>>%name%.RC echo FILETYPE VFT_DLL>>%name%.RC echo FILESUBTYPE VFT2_DRV_KEYBOARD>>%name%.RC echo BEGIN>>%name%.RC echo BLOCK "StringFileInfo">>%name%.RC echo BEGIN>>%name%.RC echo BLOCK "000004B0">>%name%.RC echo BEGIN>>%name%.RC echo VALUE "FileDescription", "%descrip% Keyboard Layout\0">>%name%.RC echo VALUE "FileVersion", "%filver[1]%.%filver[2]%.%filver[3]%.%filver[4]%\0">>%name%.RC echo VALUE "ProductName", "%proname%\0">>%name%.RC echo VALUE "ProductVersion", "%prover[1]%.%prover[2]%.%prover[3]%.%prover[4]%\0">>%name%.RC echo VALUE "CompanyName", "%autcomp%\0">>%name%.RC echo VALUE "Release Information", "%relsinf%\0">>%name%.RC echo VALUE "LegalCopyright", "%copyrig%\0">>%name%.RC echo VALUE "LegalTrademarks", "%tramark%\0">>%name%.RC echo VALUE "InternalName", "%name%\0">>%name%.RC echo VALUE "OriginalFilename", "%name%\0">>%name%.RC echo END>>%name%.RC echo END>>%name%.RC echo BLOCK "VarFileInfo">>%name%.RC echo BEGIN>>%name%.RC echo VALUE "Translation", 0x0000, 0x04B0>>%name%.RC echo END>>%name%.RC echo END>>%name%.RC echo.>>%name%.RC echo STRINGTABLE DISCARDABLE>>%name%.RC echo LANGUAGE 9, 1>>%name%.RC echo BEGIN>>%name%.RC echo 1200 "%langabbsv%">>%name%.RC echo END>>%name%.RC echo.>>%name%.RC echo.>>%name%.RC echo STRINGTABLE DISCARDABLE>>%name%.RC echo LANGUAGE 9, 1>>%name%.RC echo BEGIN>>%name%.RC echo 1000 "%descripsv%">>%name%.RC echo END>>%name%.RC echo.>>%name%.RC echo.>>%name%.RC echo STRINGTABLE DISCARDABLE>>%name%.RC echo LANGUAGE 9, 1>>%name%.RC echo BEGIN>>%name%.RC echo 1100 "%langfulsv%">>%name%.RC echo END>>%name%.RC pause goto eof :convert850to1252 set it=%it:·=À% set it=%it:Ó=Ë% set it=%it:à=Ó% set it=%it:…=à% set it=%it:Ô=È% set it=%it:â=Ô% set it=%it:ƒ=â% set it=%it:ç=Ý% set it=%it:‡=ç% set it=%it:Ç=+% set it=%it:€=Ç% set it=%it:ë=Ù% set it=%it:‰=ë% set it=%it:—=ù% set it=%it:=É% set it=%it:é=+% set it=%it:‚=é% set it=%it:¶=Â% set it=%it:Ò=Ê% set it=%it:ã=Ò% set it=%it:Æ=ã% set it=%it:×=Î% set it=%it:Œ=î% set it=%it:“=ô% set it=%it:ê=Û% set it=%it:ˆ=ê% set it=%it:–=û% set it=%it:›=ø% set it=%it:Ø=Ï% set it=%it:=Ø% set it=%it:‹=ï% set it=%it:š=Ü% set it=%it:s=š% set it=%it:=ü% set it=%it:Y=Ÿ% set it=%it:˜=ÿ% set it=%it:Þ=Ý% set it=%it:è=Þ% set it=%it:Š=è% set it=%it:S=Š% set it=%it:í=Ý% set it=%it:¡=í% set it=%it:ì=ý% set it=%it:=ì% set it=%it:•=^=% set it=%it:Ž=-% set it=%it:Z=Ž% set it=%it:ä=õ% set it=%it:„=ä% set it=%it:Ö=-% set it=%it:™=Ö% set it=%it:”=ö% set it=%it:z=ž% set it=%it:µ=-% set it=%it:á=î% set it=%it: =á% set it=%it:¢=ó% set it=%it:£=ú% set it=%it:¥=Ñ% set it=%it:¤=ñ% set it=%it:å=i% goto :eof :convert1252to850 set it=%it:À=·% set it=%it:à=…% set it=%it:Ó=à% set it=%it:Ë=Ó% set it=%it:â=ƒ% set it=%it:Ô=â% set it=%it:È=Ô% set it=%it:Š=S% set it=%it:è=Š% set it=%it:Þ=è% set it=%it:Ý=Þ% set it=%it:ç=‡% set it=%it:Ý=ç% set it=%it:Ç=€% set it=%it:+=Ç% set it=%it:ë=‰% set it=%it:Ù=ë% set it=%it:ù=—% set it=%it:É=% set it=%it:é=‚% set it=%it:+=é% set it=%it:Â=¶% set it=%it:ã=Æ% set it=%it:Ò=ã% set it=%it:Ê=Ò% set it=%it:Î=×% set it=%it:î=Œ% set it=%it:ô=“% set it=%it:ê=ˆ% set it=%it:Û=ê% set it=%it:û=–% set it=%it:ø=›% set it=%it:Ø=% set it=%it:Ï=Ø% set it=%it:ï=‹% set it=%it:š=s% set it=%it:Ü=š% set it=%it:ü=% set it=%it:Ÿ=Y% set it=%it:ÿ=˜% set it=%it:í=¡% set it=%it:Ý=í% set it=%it:ì=% set it=%it:ý=ì% set it=%it:^==•% set it=%it:Ž=Z% set it=%it:-=Ž% set it=%it:ä=„% set it=%it:õ=ä% set it=%it:Ö=™% set it=%it:-=Ö% set it=%it:ö=”% set it=%it:ž=z% set it=%it:-=µ% set it=%it:á= % set it=%it:î=á% set it=%it:ó=¢% set it=%it:ú=£% set it=%it:Ñ=¥% set it=%it:ñ=¤% set it=%it:i=å% goto :eof :: ######____DFINIR LE PROJET____############################################## :project set cbg=a&set cfg=0 if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% echo.&echo.&echo. echo D F I N I R U N P R O J E T echo.&echo. echo Travailler avec un projet permet d'avoir la meilleure visibilit‚ sur les echo diff‚rents paramŠtres et valeurs qui le concernent, et dont je me sers en echo partie … diff‚rentes ‚tapes de la production de dispositions de clavier. echo. echo Pour produire diff‚rentes variantes en parallŠle, la seule maniŠre de g‚rer echo le tout est de d‚finir un projet listant le nom de fichier et la description echo visible de chaque disposition, les valeurs des champs communs des propri‚t‚s echo ainsi que certains paramŠtres comme le nom du fichier en-tˆte commun. echo. echo Le nom du projet est ‚gal au nom du produit, impossible … param‚trer dans echo le MSKLC, tout comme le num‚ro de version, que je me propose … vous aider echo … inscrire dans le pilote et dans l'installateur afin que ce qui s'affiche echo dans les diff‚rents endroits corresponde … ce que vous souhaitez y voir echo figurer. :: Lecture du fichier des propri‚t‚s du projet : :names if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% if not exist charupdate-projectprops.txt goto newproject echo.&echo.&echo. echo Vous avez un fichier de propri‚t‚s du projet "charupdate-projectprops.txt". echo.&echo.&echo.&echo. echo ^> Souhaitez-vous utiliser les propri‚t‚s du projet existant ou echo. echo cr‚er un nouveau projet ? echo. echo Dans ce dernier cas je garderai les donn‚es existantes en renommant echo le fichier des donn‚es avec l'attribut "ANCIEN" et un num‚ro courant. echo.&echo.&echo. echo + Pour travailler sur le projet existant appuyez simplement sur Entr‚e. echo. echo + Pour cr‚er un nouveau projet faites N (majuscule ou minuscule) Entr‚e. echo. echo Pour retourner au menu principal saisissez M. echo Pour afficher le menu de l'aide saisissez A ou ?. echo. set option= set /p option= . Votre choix : if defined option ( if /i "%option:~,1%" equ "a" goto help if /i "%option:~,1%" equ "m" goto menu if /i "%option:~,1%" equ "n" goto newproject if "%option:~,1%" equ "?" goto help ) echo Je lis les propri‚t‚s du projet... call :readprojectprops if defined projectname ( echo. echo Comme le projet %projectname% est un projet nomm‚, echo je cr‚‚ -- pour les versions finies -- des surdossiers portant son nom, echo ind‚pendamment du nombre [%number%] de dispositions. echo Les noms peuvent ˆtre modifi‚s en ‚ditant le fichier des propri‚t‚s du projet. echo. ) else ( if %number% equ 1 ( echo. echo Ce projet comprend une seule disposition, et comme il ne porte pas de nom echo particulier, ses r‚sultats ne seront jamais plac‚s dans des surdossiers. echo. echo Les noms peuvent ˆtre modifi‚s en ‚ditant le fichier des propri‚t‚s du projet. ) else ( if not exist Multiprojet ( set projectname=Multiprojet ) else ( :nbloop set /a mpnb+=1 if not exist Multiprojet[%mpnb%] set projectname=Multiprojet[%mpnb%] else goto nbloop ) echo. echo Comme ce projet comprend %number% dispositions et qu'il ne porte pas echo de nom particulier, je l'appellerai %projectname% car c'est un projet echo multiple, dont les r‚sultats seront group‚s dans des surdossiers nomm‚s. echo Les noms peuvent ˆtre modifi‚s en ‚ditant le fichier des propri‚t‚s du projet. ) ) goto :eof :: Cr‚er un nouveau projet : :newproject :: Conserver les donn‚es d'un ‚ventuel projet pr‚c‚dent : if exist charupdate-projectprops.txt ( set /a num=1 :renpdata if exist "charupdate-projectprops - ANCIEN (!num!).txt" set /a num+=1 && goto renpdata rename charupdate-projectprops.txt "charupdate-projectprops - ANCIEN (!num!).txt" ) else goto searchname echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Votre projet pr‚c‚dent est maintenant dans le fichier dont le nom est : echo. echo charupdate-projectprops - ANCIEN (!num!).txt echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. :: Analyse d'un ‚ventuel fichier de d‚finition de module : :searchname echo. echo Je cherche un fichier de d‚finition de module pour lire un nom... echo. call :defcheck if "%defname%" equ "yes" ( echo Je trouve un fichier DEF quelque part autour d'ici dans ce dossier, echo et … l'int‚rieur je lis le nom de fichier de la disposition : !name!. echo. if "!defnameklc!" equ "yes" ( echo C'est probablement exact car auprŠs de moi je trouve aussi le fichier echo !name!.klc tel que j'en ai besoin pour faire tourner l'utilitaire KbdUTool echo inclus dans le MSKLC. ) else ( echo Mais dommage qu'il n'y ait pas de source KLC … ce nom auprŠs de moi, echo car j'en ai absolument besoin pour faire tourner l'utilitaire KbdUTool echo inclus dans le MSKLC. ) ) else ( :: D‚tection d'une ‚ventuelle source KLC : echo Je cherche une source KLC dans ce dossier... echo. call :klccheck if "!klcthere!" equ "yes" ( echo Je trouve un fichier KLC quelque part autour d'ici dans ce dossier, echo mais … l'int‚rieur je n'arrive pas … lire le nom de la disposition, echo car mon interpr‚teur ne lit pas encore les fichiers dont le format echo d'encodage est selon Unicode ; tout ce que je peux r‚cup‚rer de la echo premiŠre ligne, qui pourtant contient le nom de fichier, est "!klc1stline!". ) else ( echo Pour l'instant je ne trouve aucun fichier autour de moi qui contienne echo les renseignements dont j'aurai besoin. Je vais donc vous prier de me echo communiquer un certain nombre d'‚l‚ments pour que je puisse cr‚‚r le echo fichier des propri‚t‚s du projet, qui sera nomm‚ "charupdate-projectprops.txt". ) ) :: Renseigne les noms : if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% :nameqtn echo.&echo. echo ^> Quel est le nom de fichier de la disposition de clavier s.v.p. ? echo.&echo. echo Ignorez l'extension de fichier et entrez uniquement le nom. echo Aide : ? Entr‚e set name= set /p name= . Nom de fichier de la disposition de clavier : if not defined name ( color cf echo.&echo.&echo. echo Le nom de fichier est indispensable pour la suite ; donnez-m'en un s.v.p. echo.&echo.&echo. call :milliwait color %cbg%%cfg% goto nameqtn ) if "%name%" equ "?" set helpreq=yes& goto :eof call :namecheck if "%renam%" equ "yes" goto nameqtn if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% echo.&echo.&echo. echo ^> Le projet va-t-il porter un nom ? echo. echo Nommer votre projet est utile surtout dans le cas d'un multiprojet. echo.&echo. echo Il n'est pas n‚cessaire d'ˆtre s–r des diff‚rents noms maintenant, echo car le fichier des propri‚t‚s du projet est modifiable jusqu'au lancement echo des cycles de compilation. echo.&echo.&echo. echo ^> Si vous souhaitez laisser votre projet sans nom, echo appuyez seulement sur Entr‚e. echo. echo Dans le cas d'un multiprojet j'utiliserai alors le nom g‚n‚rique : echo Multiprojet (avec un num‚ro si n‚cessaire). echo. echo Dans le cas d'une disposition seule j'‚viterai de la ranger dans echo un surdossier si le projet n'est pas nomm‚. echo. echo Aide : ? Entr‚e echo. set projectname= set /p projectname= . Nom du projet [libre] : if "%projectname%" equ "?" set helpreq=yes& goto :eof echo.&echo.&echo.&echo. echo ^> Utilisez-vous une source "en-tˆte" [header] commune ? echo.&echo. echo Ce header commun, s'il existe, est utile pour rationaliser la gestion echo des headers des diff‚rentes dispositions d'un multiprojet, et/ou pour echo r‚utiliser les mˆmes donn‚es … plusieurs reprises au fil du temps. echo.&echo.&echo. echo ^> Un en-tˆte commun doit ˆtre inclus en ajoutant dans la source C ou echo dans la source H d‚di‚e, c'est-…-dire portant le nom de fichier de echo la disposition, la ligne de code suivante : echo. echo #include "[nom de l'en-tˆte commun].h" echo.&echo.&echo. echo Si vous n'utilisez pas d'en-tˆte commun, laissez ce champ en blanc echo en appuyant seulement sur Entr‚e. echo Aide : ? Entr‚e echo. set cmheader= set /p cmheader= . Nom de fichier sans extension : if "%cmheader%" equ "?" set helpreq=yes& goto :eof echo. echo Merci, je vais cr‚er maintenant le fichier "charupdate-projectprops.txt". echo. :: Ajoute un fichier de donn‚es projet contenant les noms : call :saveprojectprops goto :eof :: Batterie de v‚rifications : :namecheck if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% call :lengthcheck if "%renam%" equ "yes" goto :eof call :periodcheck if "%renam%" equ "yes" goto :eof call :initialcheck if "%renam%" equ "yes" goto :eof call :abilitycheck echo. echo J'ai fini de v‚rifier le nom de fichier %name%. echo. goto :eof :: V‚rifie si le nom ne d‚passe pas les 8 caractŠres : :lengthcheck set renam=yes if "%name:~8,1%" equ "" set renam=no if "%renam%" equ "yes" ( if defined bg ( color %bg%%fg% ) else color cf echo.&echo.&echo.&echo. echo ^> La chaŒne de caractŠres %name% echo ne peut pas ˆtre utilis‚e comme nom de fichier, echo car sa longueur d‚passe 8 caractŠres. echo.&echo. echo Vous pouvez toutefois utiliser %name% echo en tant que d‚signation. echo Ajoutez-la alors par la suite dans le fichier charupdate-projectprops.txt echo que je vais g‚n‚rer tout … l'heure, et n'omettez pas de mettre … jour echo le fichier .RC que KbdUTool va g‚n‚rer comme un ‚l‚ment des sources. echo.&echo. echo La d‚signation figure au nombre des renseignements que le MSKLC vous echo propose de recueillir pour chaque disposition cr‚‚e avec son concours. echo. echo Ce que vous voyez dans la barre des langues ne sont pas les noms des echo dispositions. Ce sont les d‚signations. Ce que l'on appelle le nom de echo la disposition est son nom de fichier, qui pour des raisons techniques echo li‚es au systŠme de fichier ne doit pas d‚passer les huit caractŠres. echo.&echo. call :milliwait & call :milliwait if defined bg ( color %bg%%fg% ) else color fc pause echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo ^> Je reprends ma question du nom de fichier de la disposition : echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% goto :eof ) else ( echo. echo J'ai v‚rifi‚ que %name% ne d‚passe pas les 8 caractŠres. ) goto :eof :: V‚rifie si le nom ne contient pas de point : :periodcheck set renam=no set /a pos=0 :periodloop if "!name:~%pos%,1!" equ "." set renam=yes set /a pos+=1 if !pos! lss 8 goto periodloop if "!renam!" equ "yes" ( color cf echo.&echo.&echo.&echo. echo ^> La chaŒne de caractŠres %name% echo ne peut ˆtre utilis‚e comme nom de fichier de disposition de clavier, echo car elle contient le caractŠre point. echo.&echo. echo Les noms de fichier des dispositions de clavier doivent ˆtre exempts echo de points. Un point dans le nom d'une disposition de clavier conduit echo … un blocage au moment de la compilation. echo.&echo.&echo.&echo.&echo. echo D'autres caractŠres inutilisables dans ce contexte sont '/', '\', et '?', echo ainsi que tous les caractŠres non ASCII. echo. echo Mais … ce propos vous ˆtes pr‚venu directement par le MSKLC. echo.&echo.&echo.&echo. call :milliwait & call :milliwait color fc pause echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo ^> Je reprends ma question du nom de fichier de la disposition : echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. color %cbg%%cfg% goto :eof ) else ( echo. echo J'ai v‚rifi‚ que %name% ne contienne pas de point. ) goto :eof :: V‚rifie si le nom commence par kb ou kbd : :initialcheck if /i "%name:~,2%" neq "kb" ( color cf echo.&echo.&echo.&echo. echo ^> Il est recommand‚ de commencer le nom de fichier des echo pilotes de disposition par les lettres "kb", pour "keyboard", echo ou si possible mˆme "kbd" pour "keyboard driver". echo.&echo. echo Cette convention permet d'‚viter d'‚ventuelles confusions, echo mais au del… elle n'a rien d'obligatoire. echo.&echo.&echo.&echo.&echo.&echo. echo Si vous souhaitez garder le nom %name% malgr‚ qu'il ne commence pas echo par "kb" voire "kbd", dites Oui en tapant O ou o puis Entr‚e ci-dessous. echo. echo Sinon appuyez sur Entr‚e sans plus. echo.&echo.&echo.&echo. call :milliwait color fc set chname= set /p chname= . O pour Oui, ou juste Entr‚e pour changer le nom : if defined chname ( if /i "!chname:~,1!" equ "o" ( set renam=no goto :eof ) else goto renyes ) else ( :renyes set renam=yes color %cbg%%cfg% echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo ^> Je reprends ma question du nom de fichier de la disposition : echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. goto :eof ) ) else ( set renam=no echo. echo J'ai v‚rifi‚ que %name% commence par "kb" mˆme si ce n'est pas obligatoire. ) goto :eof :: V‚rifie si le pilote cibl‚ est install‚ et testable : :abilitycheck if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% set installed=no if not exist C:\Windows\System32\%name%.dll goto notinstalled set installed=yes :: V‚rifie si le pilote cibl‚ est celui d'une disposition d'origine : set moving=unable rename C:\Windows\System32\%name%.dll %name%-move.dll if exist C:\Windows\System32\%name%-move.dll set moving=able if "%moving%" equ "able" goto able else goto unable :able rename C:\Windows\System32\%name%-move.dll %name%.dll set nameok=yes echo J'ai v‚rifi‚ que %name% soit testable, en le renommant puis le d‚renommant. goto :eof :unable if defined bg ( color %bg%%fg% ) else color cf echo. echo Le%pls% pilote%pls% de cette disposition %vbe% inamovible%pls%. echo. echo Normalement il s'agit d'une disposition d'origine, fournie avec Windows. echo. echo ^> Vous pouvez modifier cette disposition sous un nom diff‚rent : echo. echo 1 Chargez-la dans le MSKLC (File > Load existing keyboard). echo. echo 2 Changez-la de nom. Dans la plupart des cas de doublons vous ˆtes echo pr‚venu imm‚diatement, dans les autres, quand l'installation ‚choue. echo. echo 3 Faites enregistrer sa source par le MSKLC (File > Save source as). echo. echo 4 Modifiez la disposition pour qu'elle se rapproche le plus possible echo de votre objectif. echo. echo 5 Des modifications plus avanc‚es sont possibles dans la source KLC echo … l'aide d'un ‚diteur de texte, et d'autres, trŠs utiles, seulement echo en ‚ditant les sources en C. Je ferai g‚n‚rer ces sources pour vous. echo. if defined bg ( color %bg%%fg% ) else color fc call :milliwait & call :milliwait if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% set nameok=no pause if "%machine%" neq "i386" ( if not exist C:\Windows\SysWOW64\%name%.dll set installed=half ) goto :eof :notinstalled if defined bg ( color %bg%%fg% ) else color cf echo.&echo.&echo.&echo.&echo.&echo. echo En ce moment je ne peux trouver aucune disposition de clavier … ce nom echo qui soit install‚e sur votre ordinateur. echo.&echo. echo Je prends cela comme un inconv‚nient parce que je ne pourrai pas pr‚parer echo de quoi la tester, … moins de commencer par une version finie. echo. echo Comme pour tout logiciel -- un pilote de clavier est une sorte de petit echo logiciel --, d‚velopper une disposition de clavier oblige … faire des echo tests exhaustifs, surtout quand la programmation se fait directement echo dans les sources, ce qui est la seule m‚thode possible pour nombre echo de fonctionnalit‚s. echo.&echo. echo ^> Si vous avez le pack d'installation, je vous suggŠre echo de proc‚der … l'installation dŠs maintenant. echo. echo ^> Dans le cas contraire, faites une disposition du mˆme nom echo … l'aide du MSKLC, et installez-l… sur votre ordinateur. echo.&echo. set renam=no if defined bg ( color %bg%%fg% ) else color fc echo Pour continuer, appuyez sur une touche. pause >nul if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% goto :eof :halfinstalled if defined bg ( color %bg%%fg% ) else color cf echo.&echo. echo Cette disposition de clavier est install‚e mais il lui manque echo le pilote pour les applications 32 bit. echo.&echo. echo ^> Si vous avez le pack d'installation, echo lancez-le s.v.p pour r‚parer la disposition. echo. echo Si vous n'avez pas ce qu'il faut, d‚sinstallez-la et faites une if defined bg ( color %bg%%fg% ) else color fc echo disposition du mˆme nom … l'aide du MSKLC, puis installez celle-ci. echo.&echo.&echo. set renam=no pause if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% goto :eof :: Cr‚e le fichier de propri‚t‚s du projet : :saveprojectprops call :savemainprojectprops call :addnames goto :eof :savemainprojectprops :: En-tˆte du fichier : echo Encodage OEM 850> charupdate-projectprops.txt echo Propri‚t‚s du projet %projectname%>> charupdate-projectprops.txt echo ------------------------------------------------------------------------------------------->> charupdate-projectprops.txt echo Fichier datant du %DATE%, %TIME:~,8%>> charupdate-projectprops.txt echo Pour un projet multiple, listez les noms en-dessous du 3e trait, un par ligne.>> charupdate-projectprops.txt echo Le nom est le nom de fichier ; dans la Barre des langues l'utilisateur lit la description.>> charupdate-projectprops.txt echo Ajoutez un point-virgule et la description, par exemple : kbdnom;Clavier pour Claude>> charupdate-projectprops.txt echo N'utilisez pas de point-virgule par ailleurs, car il est pris pour un s‚parateur.>> charupdate-projectprops.txt echo Pour une reconnaissance correcte des diacrit‚s fran‡ais ce fichier doit ˆtre en OEM 850.>> charupdate-projectprops.txt echo Si l'‚dition des ressources est active, la description est celle figurant au fichier .RC.>> charupdate-projectprops.txt echo N'effacez ni ligne ni caractŠres avant les signes '=' car la lecture d‚pend de la position.>> charupdate-projectprops.txt echo ------------------------------------------------------------------------------------------->> charupdate-projectprops.txt echo Nom du projet ou du produit=%projectname%>> charupdate-projectprops.txt echo Nom de l'‚ventuelle source header commune=%cmheader%>> charupdate-projectprops.txt echo ----------------------------------------------------------------------------------------->> charupdate-projectprops.txt :: Nom (et description) de la (premiŠre) disposition : if defined description ( set separ=;) else ( set separ=) echo %name%%separ%%description%>> charupdate-projectprops.txt goto :eof :addnames :: Ajoute un … un les noms de disposition suppl‚mentaires (pour multiprojets) : if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% echo. echo Je viens de cr‚er le fichier de propri‚t‚s du projet. Vous le trouverez echo … c“t‚ de moi, il porte le nom "charupdate-projectprops". echo. echo C'est un fichier texte (".txt") que vous pouvez facilement ouvrir echo et ‚diter si vous le souhaitez. echo. echo ^> Je le fais ouvrir de suite si vous tapez o et Entr‚e ci-dessous. echo.&echo.&echo.&echo.&echo. echo Je gŠre aussi les projets multiples, que j'appelle "multiprojets". echo.&echo. echo ^> Si votre projet a pour objectif de produire une disposition unique, echo nomm‚e %name%, confirmez-le moi s.v.p. en appuyant sur Entr‚e. echo. echo ^> Si vous cr‚ez un multiprojet, je vous invite … entrer maintenant echo les autres noms de fichier un … un en validant chacun par Entr‚e. echo.&echo.&echo. :nextname set nextname= set /p nextname= . Nom suivant, ou seulement Entr‚e pour terminer : if not defined nextname goto nonext if "%nextname%" equ "o" call charupdate-projectprops.txt && goto :eof set name=%nextname% call :namecheck if "%renam%" equ "no" ( echo %name%>> charupdate-projectprops.txt ) if "%renam%" equ "yes" ( color d0 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Je ne peux pas ajouter ce nom, je suis navr‚. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. pause color %cbg%%cfg% ) goto nextname :nonext if defined bg ( color %bg%%fg% ) else color a0 echo.&echo.&echo.&echo. echo Votre projet est cr‚‚. Je m'en occuperai selon vos instructions. echo.&echo.&echo. echo ^> Vous pouvez maintenant ajouter une description … chaque nom. echo Cette information figurera dans le nom de dossier de la disposition, echo mais uniquement dans les packs d'installation et de recompilation. echo Cela est particuliŠrement utile dans les multiprojets, parce que les echo utilisateurs s'y retrouvent ainsi mieux face aux listes de dossiers. echo. echo Ajoutez cette description directement dans le fichier des donn‚es du echo projet, s‚par‚e du nom de la disposition par un point-virgule sans espaces : echo. echo Exemple : kbd45678;Description de la disposition echo.&echo.&echo.&echo. echo ^> Appuyez sur Entr‚e pour que je fasse ouvrir le fichier projet. echo [Tapez d'abord N pour passer cette ‚tape.] echo. call :milliwait if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% set desc= set /p desc= . Confirmer par Entr‚e [N pour Non] : if not defined desc call charupdate-projectprops.txt && pause && goto eof if "%desc:~,1%" equ "n" goto :eof call charupdate-projectprops.txt pause & goto :eof :: Lecture du fichier des propri‚t‚s du projet : :readprojectprops set /a index=-3 for /f "skip=12 usebackq tokens=1* delims=; eol=" %%I in ("charupdate-projectprops.txt") do ( set "entry[!index!][0]=%%~I" set "entry[!index!][1]=%%~J" set /a index += 1 ) echo J'ai pris lecture du fichier des propri‚t‚s du projet. :: Extrait les variables contenant les propri‚t‚s du projet : set projectname=%entry[-3][0]:~50% set cmheader=%entry[-2][0]:~50% set name=%entry[0][0]% set description=%entry[0][1]% set number=%index% if %number% gtr 1 ( set npls=s) else ( set npls=) echo Le projet %projectname% contient %number% disposition%npls%. echo Voici la liste complŠte des dispositions contenues dans echo le projet %projectname% : echo ------------------------------------------------------------------------ echo Num‚ro d'ordre : Nom : Description : echo ------------------------------------------------------------------------ set /a inx=0 :wrtarray set /a rank=%inx%+1 set rankcellraw= %rank%& set rankcell=!rankcellraw:~-3! set namecellraw=!entry[%inx%][0]! & set namecell=!namecellraw:~,8! echo %rankcell% %namecell% !entry[%inx%][1]! set /a inx += 1 if %inx% lss %number% goto wrtarray echo ------------------------------------------------------------------------ if defined cmheader ( echo Le projet %projectname% utilise echo une source en-tˆte commune : %cmheader%.H ) goto :eof :: Contr“le de pr‚sence des sources KLC : :klcavacheck set klcavaok=yes set /a cycle=0 call :readprojectprops :klcavachecknext set name=!entry[%cycle%][0]! if not exist %name%.klc ( set klcavaok=no color cf echo. echo Pour %name% je n'ai pas la source KLC echo dont j'aurai besoin pour echo la donner … KbdUTool. echo. ) set /a cycle+=1 if %cycle% lss %number% goto klcavachecknext echo J'ai termin‚ le contr“le de pr‚sence des sources KLC goto :eof :: Contr“le de pr‚sence des pilotes install‚s concern‚s sous architecture 32 bit : :driver32check set driverok=yes set /a cycle=0 :driver32checknext set name=!entry[%cycle%][0]! if not exist %windir%\System32\%name%.dll ( set driverok=no color cf echo. echo Pour %name% je ne trouve pas le pilote install‚. echo. echo Pour ˆtre testable, la disposition doit ˆtre proprement install‚e. echo. ) set /a cycle+=1 if %cycle% lss %number% goto driver32checknext echo J'ai termin‚ le contr“le de pr‚sence des pilotes install‚s concern‚s. goto :eof :: Contr“le de pr‚sence des pilotes install‚s concern‚s sous architecture 64 bit : :driver64check set driverok=yes set /a cycle=0 :driver64checknext set name=!entry[%cycle%][0]! if not exist %windir%\System32\%name%.dll ( if not exist %windir%\SysWOW64\%name%.dll ( set driverok=no color cf echo. echo Pour %name% je ne trouve pas les pilotes install‚s. echo. echo Pour ˆtre testable, la disposition doit ˆtre proprement install‚e. echo. )) set /a cycle+=1 if %cycle% lss %number% goto driver64checknext echo J'ai termin‚ le contr“le de pr‚sence des pilotes install‚s concern‚s. goto :eof :: Contr“le de pr‚sence du header commun si d‚fini : :cmhavacheck if defined cmheader ( if not exist %cmheader%.H ( if defined bg ( color %bg%%fg% ) else color cf echo. echo Je ne trouve pas le fichier source en-tˆte [header] %cmheader% echo commun … toutes les dispositions qui est pr‚vu dans le projet. echo. echo S'il porte un autre nom, merci de bien vouloir le corriger directement echo dans le fichier des propri‚t‚s du projet, que je vais ouvrir dŠs que echo vous aurez appuy‚ sur une touche. echo.&echo.&echo. echo Au cas o— vous d‚cideriez de ne pas utiliser d'en-tˆte commun, echo je vous invite … simplement effacer son nom dans les donn‚es mais echo … laisser la ligne o— il figure. echo. echo J'attends jusqu'… ce que vous ayez enregistr‚ vos modifications. echo. echo Le moment venu, appuyez-moi de nouveau sur une touche, echo et je reprendrai lecture du fichier des propri‚t‚s du projet. echo.&echo. echo ^> Quand vous aurez appuy‚ sur une touche, j'ouvrirai le fichier. pause >nul call charupdate-projectprops.txt echo.&echo.&echo. echo ^> Quand vous aurez appuy‚ de nouveau, j'en reprendrai lecture. pause >nul color f1 & call :readprojectprops & goto cmhavacheck ) else ( set cmhavaok=yes ) ) :: et nom par nom pour son inclusion : set /a cycle=0 :nameavacheck set cmhavaok=yes set name=!entry[%cycle%][0]! if defined cmheader ( if not exist %name%.C if not exist %name%.H ( set cmhavaok=no color cf echo. echo Afin que le header commun soit pris en compte, il doit ˆtre inclus dans echo [au moins] une des autres sources, .C ou .H peu importe. echo. echo Mais je ne trouve aucune de ces sources, ce qui signifie que les sources echo utilis‚es seront celle que KbdUTool va fraŒchement g‚n‚rer pour l'occasion. echo. echo Ces sources ne contiendront aucune inclusion de %cmheader%.H. echo. echo ^> Je vous invite … prendre une de ces sources, d'y ajouter l'inclusion echo #include "%cmheader%.H" echo et de la mettre … c“t‚ de %cmheader%.H pour que tout soit pris en compte. echo. pause color f1 & goto nameavacheck ) else ( set cmhavaok=yes ) ) set /a cycle+=1 if %cycle% lss %number% goto nameavacheck echo J'ai termin‚ un contr“le de pr‚sence par rapport … la source en-tˆte commune. goto :eof :: Contr“le de pr‚sence des installateurs : :installers set /a cycle=0 :msiavacheck if exist %name% ( if exist %name%\%name%_i386.msi ( if exist %name%\%name%_amd64.msi ( if exist %name%\%name%_ia64.msi ( if exist %name%\setup.exe ( set installeravaok=yes ))))) else ( set installeravaok=no echo.&echo.&echo.&echo. echo Je constate malheureusement que pour la disposition %name%, echo il manque tout ou partie des installateurs, qui doivent se trouver echo dans un dossier au nom de la disposition, tel que le MSKLC en produit. echo. echo ^> Avant d'aller de l'avant, je vous invite … placer le dossier des echo installateurs ici auprŠs de moi, afin que je l'aie … port‚e. echo. echo Si le dossier d'installateurs est manquant, le MSKLC vous le fera sur echo simple demande en faisant compiler les pilotes … partir d'une source KLC. echo.&echo.&echo. pause ) set /a cycle+=1 if %cycle% lss %number% goto msiavacheck echo J'ai termin‚ le contr“le de pr‚sence des installateurs. goto :eof :: Lecture du d‚but d'un fichier de d‚finition de module : :defcheck for /r %%v in (*.DEF) do set /p DEF1stline=<%%v set name=%DEF1stline:~8% if defined %name% ( set defname=yes) else ( set defname=no) if exist %name%.klc ( set defnameklc=yes) else ( set defnameklc=no) goto :eof :: Lecture du d‚but d'un fichier de configuration de disposition de clavier : :klccheck for /r %%v in (*.klc) do set /p klc1stline=<%%v if defined klc1stline ( set klcthere=yes) else ( set klcthere=no) goto :eof :: Maintien des sources modifi‚es : :: Passe les sources en lecture seule pour qu'elles soient conserv‚es : :locksources set /a nbroa=0 if exist %name%.C attrib +R %name%.C && set /a nbroa+=1 if exist %name%.H attrib +R %name%.H && set /a nbroa+=1 if exist %name%.RC attrib +R %name%.RC && set /a nbroa+=1 if exist %name%.DEF attrib +R %name%.DEF && set /a nbroa+=1 if %nbroa% neq 0 ( if %nbroa% equ 1 ( echo J'ai prot‚g‚ la source pr‚sente contre la r‚‚criture afin que cette source echo soit conserv‚e lorsque KbdUTool tentera de la remplacer par celle qu'il echo va g‚n‚rer au cours de la proc‚dure. ) else ( echo J'ai prot‚g‚ %nbroa% des sources pr‚sentes contre la r‚‚criture afin echo que ces %nbroa% sources soient conserv‚es lorsque KbdUTool tentera echo de les remplacer par celles qu'il va g‚n‚rer au cours de la proc‚dure. ) ) if exist %cmheader%.H ( echo La source en-tˆte [header] commune -- %cmheader%.H -- n'a pas besoin d'ˆtre echo prot‚g‚e contre la r‚‚criture car KbdUTool ne g‚nŠre pas de source … ce nom. ) if %nbroa% gtr 0 ( echo. echo L'attribut "lecture seule" est le moyen habituel de faire tourner sur echo des sources C modifi‚es un KbdUTool qui ne vous oblige ainsi jamais … echo fournir … la fois le corps de source, l'en-tˆte, le fichier ressources et echo le fichier de d‚finition. Par exemple vous pouvez d‚cider de lui donner les echo sources C et H. Quand KbdUTool d‚clare ne pas pouvoir ouvrir un fichier pour echo le r‚crire [en anglais il affiche NOM.EXTENSION : can't open for write.], echo cela veut dire qu'il a gard‚ cette source telle que vous l'avez ‚dit‚e. echo. ) goto :eof :: EnlŠve l'attribut 'lecture seule' pour rendre les sources de nouveau modifiables : :unlocksources if exist %name%.C attrib -R %name%.C if exist %name%.H attrib -R %name%.H if exist %name%.RC attrib -R %name%.RC if exist %name%.DEF attrib -R %name%.DEF if %nbroa% neq 0 ( if %nbroa% equ 1 ( echo J'ai enlev‚ l'attribut 'lecture seule' de la source o— je l'avais mis, echo afin que cette source soit de nouveau modifiable. ) else ( echo J'ai enlev‚ l'attribut 'lecture seule' des %nbroa% sources o— je l'avais mis, echo afin que toutes les sources soient de nouveau modifiables. ) ) goto :eof :: ######____INSTALLATION AVEC PILOTES AD HOC____############################### :freshen if defined bg ( color %bg%%fg% ) else color b1 call :allfilecheck echo.&echo.&echo. echo C O M P I L I N S T A L L A T I O N echo.&echo. if "%allfiles%" equ "yes" ( echo Je vais vous aider … installer la disposition de clavier %name% if defined projectname ( echo qui fait partie du projet %projectname%, ) echo … partir de ses sources qui se trouvent auprŠs de moi. echo. echo Dans le dossier o— je suis il y a tout ce qu'il faut, les sources et aussi echo l'installateur fourni par le Microsoft Keyboard Layout Creator [gratuit] echo … la fois pour la disposition %name% et pour l'architecture %bit% bit echo qui est celle de votre ordinateur. echo. echo Si installer la disposition %name% est ce que vous souhaitez faire, echo confirmez-le moi s.v.p. en appuyant sur O avant d'appuyer sur Entr‚e. echo. echo Dans le cas contraire, je ferai afficher le menu principal, par lequel echo vous pourrez aussi me quitter, quand vous aurez appuy‚ sur Entr‚e. echo. echo Dans ce cas aussi je vais inscrire votre choix dans votre profil afin echo d'aller droit au menu la prochaine fois. echo.&echo. set installconfirm= set /p installconfirm= . Oui / Non ? if defined installconfirm ( if /i "%installconfirm:~,1%" equ "o" goto installahead ) set adhoc=non call :saveuserprofile goto menu ) if "%allfiles%" equ "nomatter" ( if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo. echo La disposition %name% dont les sources se trouvent autour de moi echo. echo est d‚j… install‚e sur votre ordinateur. echo.&echo. echo ^> Si vous avez modifi‚ ces sources et que vous souhaitez tester echo vos modifications, je vous conseille d'utiliser la rubrique TEST. echo.&echo.&echo.&echo.&echo. echo Pour aller … la rubrique TEST saisissez T. echo Pour retourner au menu principal saisissez M. echo Pour afficher le menu de l'aide saisissez A ou ?. echo. set option= set /p option= . Votre choix : if defined option ( if /i "%option:~,1%" equ "a" goto help if /i "%option:~,1%" equ "m" goto menu if /i "%option:~,1%" equ "t" goto test if "%option:~,1%" equ "?" goto help goto menu ) if "%allfiles%" equ "no" ( ) goto menu :installahead set compilindir="installation de %name% sur cet ordinateur %bit% bit" mkdir %compilindir% echo J'ai cr‚‚ le dossier %compilindir%. echo. :: Passe les sources en lecture seule pour qu'elles soient conserv‚es : call :locksources :: Fait compiler le pilote pour ordinateurs 32 bit : if "%machine%" equ "i386" ( :: 'i386' echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. echo. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -x %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote pour votre ordinateur, echo. mkdir %compilindir%\i386 move %name%.dll %compilindir%\i386\%name%.dll echo et je l'ai emball‚ dans le dossier. echo.&echo. goto addmsi ) :: Fait compiler le pilote principal pour ordinateurs 64 bit : :: Pour AMD et Intel toutes architectures 64 bit sauf Itanium : if "%machine%" equ "amd64" ( :: 'amd64' echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -m %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote principal pour votre ordinateur, echo. mkdir %compilindir%\amd64 move %name%.dll %compilindir%\amd64\%name%.dll echo et je l'ai emball‚ dans le dossier. echo.&echo. goto wow64 ) :: Pour Intel Itanium Architecture : if "%machine%" equ "ia64" ( :: 'ia64' echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -i %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote principal pour votre ordinateur, echo. mkdir %compilindir%\ia64 move %name%.dll %compilindir%\ia64\%name%.dll echo et je l'ai emball‚ dans le dossier. echo.&echo. ) :: Ajoute le pilote auxiliaire pour applications 32 bit : :wow64 echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -o %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote auxiliaire pour votre ordinateur, echo. mkdir %compilindir%\wow64 move %name%.dll %compilindir%\wow64\%name%.dll echo et je l'ai emball‚ dans le dossier. echo.&echo. :: Copie l'installateur appropri‚ vers le dossier d'installation : :addmsi copy %name%\%name%_%machine%.msi %compilindir%\%name%_%machine%.msi echo J'ai ajout‚ l'installateur que j'ai copi‚ dans le dossier %name%. :: EnlŠve l'attribut 'lecture seule' pour rendre les sources de nouveau modifiables : call :unlocksources :: Lance l'installation sur demande : echo. echo J'ai pr‚par‚ ce qu'il faut. Tout est prˆt … installer. echo. echo ^> Souhaitez-vous que je lance l'installation ? echo. echo Pour dire oui appuyez sur Entr‚e. echo Sinon tapez d'abord une lettre puis refermez-moi par Entr‚e. echo. set okinstall= set /p okinstall= . if defined okinstall goto eof :: Installation : call %compilindir%\%name%_%machine%.msi :: Message de confirmation : echo. echo J'ai lanc‚ l'installation de la disposition %name%. echo. echo Vous pouvez faire autre chose le temps que Windows cr‚e un point de echo restauration systŠme comme pr‚vu avant l'installation de tout nouveau echo logiciel, ne serait-ce qu'un pilote de disposition de clavier. echo. echo Quand ce sera termin‚, vous verrez sur la barre des tƒches qu'un message echo s'est ouvert. Faites-le afficher et fermez-le aprŠs en avoir pris lecture. echo.&echo.&echo.&echo.&echo.&echo. echo Bonne utilisation, et … bient“t. (Refermez-moi par une touche.) echo.&echo.&echo. pause >nul goto eof :: ######____SOURCES____######################################################## :sources set cbg=a&set cfg=0 if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% echo.&echo.&echo.&echo. echo O B T E N I R L E S S O U R C E S echo. echo Pour chaque source KLC que vous me donnez vous obtiendrez 4 fichiers, echo dont 2 sources en langage C, un fichier ressources et un fichier de echo d‚finition de module n‚cessaire pour la phase de compilation. echo. echo Ces fichiers seront g‚n‚r‚s par un utilitaire inclus dans le MSKLC : echo le Keyboard Table Generation Tool (Unicode), version 3.40, bref KbdUTool. echo L'ancien KbdTool a ‚t‚ mis … niveau par Microsoft pour le support d'Unicode. echo. echo Quand le KbdUTool g‚nŠre un pilote, il commence toujours par g‚n‚rer ces echo mˆmes fichiers, sauf qu'une fois que le pilote est fait il les efface. Mais echo il contient une commande lui permettant de les g‚n‚rer pour l'utilisateur. echo. echo Si vous avez d‚j… des sources et que vous en laissez auprŠs de moi qui echo portent le nom d'une disposition dont je vais m'occuper, je les protŠge echo contre la r‚‚criture et les fais prendre pleinement en compte. Ainsi je echo peux vous aider … compl‚ter vos sources, par exemple avec un fichier DEF. echo. echo Ma routine de g‚n‚ration des sources ne pr‚voit pas de surdossier projet. echo Ainsi les sources restent mieux accessibles pour vous -- et aussi pour moi. echo. echo Pour continuer appuyez sur Entr‚e. Faites pr‚c‚der de ? ou A pour l'aide. set sourcesres= set /p sourcesres= . [Continuer] / A[ide] / M[enu principal] : if not defined sourcesres goto sourcesresume else ( if "!sourcesres:~,1!" equ "a" goto help if "!sourcesres:~,1!" equ "m" goto menu if "!sourcesres:~,1!" equ "?" goto help ) :sourcesresume :: Contr“le de pr‚sence du MSKLC : call :MSKLCcheck if "%MSKLCava%" equ "no" goto MSKLC :: Gestion des noms : echo.&echo. call :names if "%helpreq%" equ "yes" set helpreq=no& goto help :: Contr“le de pr‚sence des sources KLC : call :klcavacheck if "%klcavaok%" equ "no" ( color cf echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Il me manque une ou plusieurs sources KLC, echo. echo que je dois pr‚senter au KbdUTool pour qu'il puisse fonctionner. echo.&echo. echo ^> Si vous ne les avez sous la main, le MSKLC va vous en faire. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. pause goto sources ) echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo ^> Je suis maintenant prˆt … d‚clencher la g‚n‚ration des sources. echo J'attends votre feu vert. Pour me lancer appuyez sur une touche. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. pause >nul :: Initialise la boucle pour multiprojets (marche aussi pour un monoprojet) : set /a cycle= 0 & set /a totnbroa= 0 :: Met … jour le nom et lance la routine : :sourcesnext set name=!entry[%cycle%][0]! echo. echo C'est la disposition !name! dont je vais m'occuper maintenant. :: Met en lecture seule les ‚ventuelles sources pr‚sentes pour les conserver : call :locksources :: Produit les sources d'origine en langage C et les met … disposition : call :generatesources goto sourcesfinish :generatesources rem Cette routine est utilis‚e par ailleurs. echo. echo Je vais maintenant demander … KbdUTool de g‚n‚rer les sources de %name%. %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -s %name%.klc echo KbdUTool a termin‚ de g‚n‚rer les sources de %name%. mkdir %name%_sources_origine echo J'ai cr‚‚ le dossier "%name%_sources_origine" copy %name%.klc %name%_sources_origine\%name%.klc copy %name%.C %name%_sources_origine\%name%.C copy %name%.H %name%_sources_origine\%name%.H copy %name%.RC %name%_sources_origine\%name%.RC copy %name%.DEF %name%_sources_origine\%name%.DEF echo et j'ai copi‚ toutes les sources vers ce dossier. goto :eof :: EnlŠve l'attribut lecture seule des ‚ventuelles sources pr‚sentes et les compte : :sourcesfinish set /a totnbroa=%totnbroa%+%nbroa% call :unlocksources :: Regarde si tout est fait : set /a cycle+=1 if %cycle% equ %number% ( echo J'ai fait passer toutes les dispositions du projet. goto sourcesend ) else ( set /a rest=%number%-%cycle% echo Le projet contient encore d'autres dispositions, il en reste !rest! … faire. echo Je passe … la suivante. goto sourcesnext ) :: Message final sources : :sourcesend if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo. echo Les sources sont maintenant au complet echo. echo et attendent que vous les modifiez. echo.&echo. if %totnbroa% equ 0 ( echo Comme vous ne m'aviez apport‚ aucune source au d‚part, echo. echo je n'en ai eu aucune … conserver. echo. echo Les sources sont toutes fraŒches. ) else ( echo Au d‚part vous m'aviez montr‚ %totnbroa% fichiers non-KLC. echo. echo Je les ai tous pr‚cieusement conserv‚s. echo. echo Vous les retrouverez au nombre des sources pr‚sentes. ) echo.&echo. echo Je vous souhaite bon courage pour la personnalisation. echo.&echo.&echo.&echo. echo ^> Appuyez sur une touche pour me refermer. echo.&echo. pause >nul goto eof :: ######____TESTER____######################################################## :test set cbg=b&set cfg=1 if defined bg ( color %bg%%fg% ) else color %cbg%%cfg% echo.&echo.&echo. echo T E S T E R U N E D I S P O S I T I O N echo.&echo. echo Avant de faire compiler et de mettre en place le%pls% pilote%pls% … tester, je echo r‚cupŠre le%pls% pilote%pls% d'origine afin de pouvoir le restaurer sur demande. echo. :: Contr“le de pr‚sence du MSKLC : call :MSKLCcheck if "%MSKLCava%" equ "no" goto MSKLC :: Gestion des noms : call :names if "%helpreq%" equ "yes" set helpreq=no& goto help :: Contr“le de pr‚sence des pilotes install‚s concern‚s : call :driver%bit%check if "%driverok%" equ "no" ( color cf echo.&echo.&echo.&echo.&echo. echo Il manque un ou plusieurs pilotes parmi les pilotes install‚s. echo. echo Cela signifie que les dispositions concern‚es par les tests echo ne sont pas encore toutes install‚es. echo.&echo. echo Si vous n'avez sous la main ce qu'il faut, le MSKLC va faire ‡a pour vous. echo.&echo.&echo.&echo. echo ^> Quand les pilotes seront install‚s, appuyez sur Entr‚e pour reprendre. echo. echo Pour l'aide faites pr‚c‚der de ? ou A, ou de M pour le menu principal. echo.&echo.&echo. set testres= set /p testres= . [Continuer] / A[ide] / M[enu principal] : if not defined testres goto test else ( if "!testres:~,1!" equ "a" goto help if "!testres:~,1!" equ "m" goto menu if "!testres:~,1!" equ "?" goto help ) ) :: Contr“le de pr‚sence des sources KLC : call :klcavacheck if "%klcavaok%" equ "no" ( color cf echo.&echo.&echo.&echo.&echo.&echo. echo Il me manque une ou plusieurs sources KLC, echo. echo que je dois pr‚senter au KbdUTool pour qu'il puisse fonctionner. echo.&echo. echo ^> Si vous ne les avez sous la main, le MSKLC va vous en faire. echo.&echo.&echo.&echo. echo ^> Quand les sources KLC seront l…, appuyez sur Entr‚e pour reprendre. echo. echo Pour l'aide faites pr‚c‚der de ? ou A, ou de M pour le menu principal. echo.&echo.&echo. set testres= set /p testres= . [Continuer] / A[ide] / M[enu principal] : if not defined testres goto test else ( if "!testres:~,1!" equ "a" goto help if "!testres:~,1!" equ "m" goto menu if "!testres:~,1!" equ "?" goto help ) ) :: Contr“le de pr‚sence du header commun si d‚fini et de ce qui va avec : call :cmhavacheck if "%cmhavaok%" neq "yes" ( color cf echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Il y a un problŠme avec la source en-tˆte commune. echo.&echo.&echo. echo V‚rifiez s.v.p. si tout se tient, ou mettez … jour les propri‚t‚s du projet. echo.&echo.&echo.&echo.&echo.&echo.&echo. pause & goto test ) :: D‚finit l'identifiant chronologique autotriable : if "%TIME:~,1%" equ " " ( set timestamp=%DATE:~6,4%-%DATE:~3,2%-%DATE:~,2%__0%TIME:~1,1%.%TIME:~3,2%.%TIME:~6,2% ) else ( set timestamp=%DATE:~6,4%-%DATE:~3,2%-%DATE:~,2%__%TIME:~,2%.%TIME:~3,2%.%TIME:~6,2% ) :: Permet de personnaliser le dossier archivable du test : echo.&echo.&echo.&echo.&echo. echo ^> Souhaitez-vous ajouter une information dans le nom du dossier echo archivable de ce test ? echo.&echo. echo Ce dossier portera, en plus du nom de la disposition, un identifiant echo autotriable, dont l'ordre alphab‚tique co‹ncide avec l'ordre chronologique. echo. echo Cet identifiant se compose de la date du jour au format invers‚ avec tirets, echo et de l'heure … la seconde prŠs pour ‚viter toute ambigu‹t‚. echo. echo Les s‚parateurs de l'heure seront des points, parce que echo les noms de fichier doivent ˆtre exempts de deux-points. echo. echo Pour ce test, cet identifiant est %timestamp% echo. echo L'information que vous ajouterez ‚ventuellement sera accol‚e aprŠs echo %timestamp%_ (aprŠs un tiret bas). echo. echo Mais vous pouvez sauter cette ‚tape en appuyant seulement sur Entr‚e. echo Le nom de dossier complet sera alors %name%_test_%timestamp%. echo.&echo. set testinfo= set /p testinfo= Compl‚ment d'information facultatif : if defined testinfo ( if "%testinfo%" equ "?" goto help set id=%timestamp%_%testinfo% ) else ( set id=%timestamp% ) :: Initialise la boucle pour multiprojets (marche aussi pour un monoprojet) : if defined projectname ( set testdirproject="%projectname%_test_%id%" mkdir !testdirproject! echo J'ai cr‚‚ le dossier !testdirproject!. ) set /a cycle=0 & set /a totnbroa=0 :: Met … jour le nom et commence la routine : :testnext set name=!entry[%cycle%][0]! echo C'est la disposition !name! dont je vais m'occuper maintenant. :: Partie archivage des anciens pilotes (uniquement d'origine, … ce nom) : if defined RestorePath_%name% ( goto testahead ) else ( echo Je vais archiver le%spl% pilote%spl% car c'est le premier test de %name%. ) :: Cr‚e le log de restauration : if not exist %ProgramData%\charupdate\Log_restore.txt ( echo Dispositions de clavier archiv‚es pour restauration :> %ProgramData%\charupdate\Log_restore.txt echo >> %ProgramData%\charupdate\Log_restore.txt echo J'ai cr‚‚ le fichier log de restauration. echo Il se trouve … l'adresse %ProgramData%\charupdate\Log_restore.txt ) :: Cr‚e et r‚f‚rence le r‚pertoire : mkdir %ProgramData%\charupdate\%name%_ANCIEN echo set RestorePath_%name%=%ProgramData%\charupdate\%name%_ANCIEN>> %ProgramData%\charupdate\globaldata.txt echo set RestorePathDefaultName=%name%>> %ProgramData%\charupdate\globaldata.txt echo J'ai cr‚‚ un dossier pour %ard%ancien%pls% pilote%pls%, echo et j'ai ajout‚ %pps%%pls% nom%pls% dans ma base de donn‚es. :: Archive l'ancien pilote principal : mkdir %ProgramData%\charupdate\%name%_ANCIEN\%machine% move C:\Windows\System32\%name%.dll %ProgramData%\charupdate\%name%_ANCIEN\%machine%\%name%.dll :: Remet une copie temporaire du pilote 32 bit dans le dossier systŠme : copy %ProgramData%\charupdate\%name%_ANCIEN\%machine%\%name%.dll C:\Windows\System32\%name%.dll :: Archive l'ancien pilote auxiliaire : if "%machine%" equ "i386" ( echo J'ai archiv‚ et emball‚ l'ancien pilote, echo et j'en ai remis une copie dans le dossier systŠme au cas o—. ) else ( mkdir %ProgramData%\charupdate\%name%_ANCIEN\wow64 move C:\Windows\SysWOW64\%name%.dll %ProgramData%\charupdate\%name%_ANCIEN\wow64\%name%.dll :: Remet une copie temporaire du pilote auxiliaire dans le dossier systŠme : copy %ProgramData%\charupdate\%name%_ANCIEN\wow64\%name%.dll C:\Windows\SysWOW64\%name%.dll echo J'ai archiv‚ et emball‚ l'ancien pilote principal, echo J'en ai fait de mˆme pour l'ancien pilote auxiliaire, echo et j'ai remis une copie de chacun dans les dossiers systŠme au cas o—. ) :: L'inscrit au log de restauration : echo %name% archiv‚e le %DATE% … %TIME%> %ProgramData%\charupdate\Log_restore.txt echo Je l'ai aussi inscrit au log de restauration. :: Ajoute un fichier texte : echo Le contenu de ce dossier permet de restaurer la disposition %name%> %ProgramData%\charupdate\%name%_ANCIEN\Note.txt echo … l'‚tat o— elle se trouvait avant le test %name%_%timestamp%.>> %ProgramData%\charupdate\%name%_ANCIEN\Note.txt echo.&echo.&echo.&echo.&echo. echo J'ai fini d'archiver les anciens pilotes. Je pourrai les restaurer … echo votre demande. Dans ce cas choisissez dans le menu l'option Restauration. echo.&echo.&echo.&echo.&echo. :: Partie test : :testahead :: Met en lecture seule les ‚ventuelles sources pr‚sentes pour les conserver : call :locksources :: Constitue le dossier archivable des sources et du/des pilote(s) test‚(s) : set testdirname="%name%_test_%id%" mkdir %testdirname% echo J'ai cr‚‚ le dossier %testdirname%. if exist %cmheader%.H copy %cmheader%.H %testdirname%\%cmheader%.H if exist %name%.C copy %name%.C %testdirname%\%name%.C if exist %name%.H copy %name%.H %testdirname%\%name%.H if exist %name%.RC copy %name%.RC %testdirname%\%name%.RC if exist %name%.DEF copy %name%.DEF %testdirname%\%name%.DEF echo J'y ai plac‚ une copie de chaque source pr‚sente sauf la source KLC. :: Bifurque vers les modules appropri‚s : if /i "%machine%" equ "i386" goto i386 if /i "%machine%" equ "amd64" goto amd64 if /i "%machine%" equ "ia64" goto ia64 :: Compile le pilote pour les machines 32 bit : :i386 echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -x %name%.klc echo.&echo. if not exist %name%.dll goto failure mkdir %testdirname%\i386 copy %name%.dll %testdirname%\i386\%name%.dll copy %name%.dll %testdirname%\i386\%name%.bak move %name%.dll C:\Windows\System32\%name%.dll echo J'ai fait compiler le pilote 32 bit et l'ai plac‚ dans le dossier systŠme echo C:\Windows\System32 en remplacement de celui qui s'y trouvait. Et j'ai mis echo deux copies dans le dossier%testdirname%, dont echo une en .bak pour qu'elle survive aux restaurations du systŠme echo (pour l'‚ventualit‚ qu'il y en aura une). goto finishtest :: Compile le pilote 64 bit pour les machines 64 bit sauf Intel Itanium : :amd64 echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -m %name%.klc echo.&echo. if not exist %name%.dll goto failure mkdir %testdirname%\amd64 copy %name%.dll %testdirname%\amd64\%name%.dll copy %name%.dll %testdirname%\amd64\%name%.bak move %name%.dll C:\Windows\System32\%name%.dll echo J'ai fait compiler le pilote 64 bit et l'ai plac‚ dans le dossier systŠme echo C:\Windows\System32 (exact) en remplacement de celui qui s'y trouvait. goto wow64 :: Compile le pilote 64 bit pour les machines Intel Itanium : :ia64test echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -i %name%.klc echo.&echo. if not exist %name%.dll goto failure mkdir %testdirname%\ia64 copy %name%.dll %testdirname%\ia64\%name%.dll copy %name%.dll %testdirname%\ia64\%name%.bak move %name%.dll C:\Windows\System32\%name%.dll echo J'ai fait compiler le pilote 64 bit et l'ai plac‚ dans le dossier systŠme echo C:\Windows\System32 (exact) en remplacement de celui qui s'y trouvait. goto wow64 :: Compile le pilote pour les applications 32 bit dans les machines 64 bit : :wow64 echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -o %name%.klc echo.&echo. if not exist %name%.dll goto failure mkdir %testdirname%\wow64 copy %name%.dll %testdirname%\wow64\%name%.dll copy %name%.dll %testdirname%\wow64\%name%.bak move %name%.dll C:\Windows\SysWOW64\%name%.dll echo J'ai fait compiler le pilote auxiliaire pour applications 32 bit et l'ai echo mis dans le dossier systŠme C:\Windows\SysWOW64 … la place de l'ancien. echo J'ai toujours aussi plac‚ deux copies de chaque pilote dans le dossier echo %testdirname%, dont une en .bak pour qu'elle survive echo aux restaurations du systŠme (pour l'‚ventualit‚ qu'il y en aura une). :: Range le dossier dans le surdossier : :finishtest if exist %projectname%_test_%id% ( move %testdirname% %projectname%_test_%id% echo J'ai rang‚ le dossier %testdirname% dans le surdossier echo %projectname%_test_%id% du projet. ) :: EnlŠve l'attribut 'lecture seule' pour rendre les sources de nouveau modifiables : set /a totnbroa=%totnbroa%+%nbroa% call :unlocksources :: Regarde si tout est fait : set /a cycle+=1 if %cycle%==%number% ( echo J'ai fait passer toutes les dispositions du projet. goto testend ) else ( set /a rest=%number%-%cycle% echo Le projet contient encore d'autres dispositions, il en reste !rest! … faire. echo Je passe … la suivante. goto testnext ) :: Message final test : :testend set /a completed=%number%*4-%totnbroa% if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo. echo J'ai fait prendre en compte tous les %totnbroa% fichiers if defined cmheader ( echo que vous m'aviez donn‚s en plus de la source commune %cmheader%. ) else ( echo que vous m'aviez donn‚s. ) echo. if %completed% neq 0 ( echo J'en ai ajout‚ %completed% pour compl‚ter vos archives. ) else ( echo. ) echo.&echo. echo Ce que j'ai fait faire attend maintenant le prochain d‚marrage de votre echo ordinateur pour ˆtre admis dans la m‚moire vive. C'est … ce moment-l… echo que vous pourrez commencer … faire tous les tests que vous pr‚voyez. echo. echo ^> ATTENTION : Avant de quitter la pr‚sente session, echo assurez-vous par pr‚caution que la disposition echo qui actuellement est d‚finie comme clavier echo associ‚ … la langue d'entr‚e par d‚faut, echo ne soit concern‚e par aucun changement de pilote echo pour cause de tests. echo.&echo.&echo. if "%sound%" equ "oui" if not defined soundpref call %soundfile% else call %soundpref% if defined bg ( color %bg%%fg% ) else color cf call :milliwait if defined bg ( color %bg%%fg% ) else color fc call :milliwait & call :milliwait if defined bg ( color %bg%%fg% ) else color a1 echo Pour me refermer, appuyez sur une touche... echo.&echo. pause >nul goto eof :: Message d'‚chec : :failure if defined bg ( color %bg%%fg% ) else color cf :: EnlŠve l'attribut 'lecture seule' pour rendre les sources de nouveau modifiables : call :unlocksources echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Une erreur s'est produite lors de la compilation. echo. echo KbdUTool n'a pu produire le pilote demand‚, echo. echo pour des raisons indiqu‚es ci-dessus. echo.&echo.&echo. echo [Ne pas r‚ussir du premier coup est normal.] echo Passer la moiti‚ du temps … d‚boguer, aussi. echo.&echo. echo Appuyez sur Entr‚e pour me changer de couleur puis me relancer. echo.&echo.&echo. set testres= set /p testres= . [R‚essayer] / A[ide] / M[enu principal] / T[est] : if defined testres ( if /i "!testres:~,1!" equ "a" goto help if /i "!testres:~,1!" equ "m" goto menu if /i "!testres:~,1!" equ "t" goto test if "!testres:~,1!" equ "?" goto help ) if defined bg ( color %bg%%fg% ) else color f1 set testres= set /p testres= . [R‚essayer] / A[ide] / M[enu principal] / T[est] : if defined testres ( if /i "!testres:~,1!" equ "a" goto help if /i "!testres:~,1!" equ "m" goto menu if /i "!testres:~,1!" equ "t" goto test if "!testres:~,1!" equ "?" goto help ) if defined bg ( color %bg%%fg% ) else color f0 set testres= set /p testres= . [R‚essayer] / A[ide] / M[enu principal] / T[est] : if defined testres ( if /i "!testres:~,1!" equ "a" goto help if /i "!testres:~,1!" equ "m" goto menu if /i "!testres:~,1!" equ "t" goto test if "!testres:~,1!" equ "?" goto help ) goto test :: ######____RESTAURER LES PILOTES D'ORIGINE____################################# :restore if defined bg ( color %bg%%fg% ) else color f5 echo.&echo.&echo. echo R E S T A U R A T I O N D E D I S P O S I T I O N echo. echo Cette fonctionnalit‚ restaure une disposition … l'‚tat o— elle se echo trouvait avant que des modifications soient test‚es sur elle avec echo mon concours. Les ‚tats ant‚rieurs, dont je n'‚tais pas au courant, echo sont par contre au del… de mes possibilit‚s. En l'absence d'autres echo moyens, seule une restauration du systŠme peut -- ‚ventuellement -- echo vous les restituer. echo. echo La restauration de pilote que je peux faire vous ‚vite au contraire echo d'avoir recours … la restauration du systŠme par Windows si c'est echo uniquement pour une disposition de clavier. echo. if not exist RestorePathDefaultName ( echo.&echo. echo Actuellement je ne peux encore restaurer aucune disposition, car echo jusqu'… pr‚sent je n'ai pas eu l'occasion d'en archiver … cet effet. echo.&echo.&echo. echo ^> Pour retourner au menu, appuyez sur une touche... echo. pause >nul goto menu ) echo ^> Souhaitez-vous restaurer la disposition %RestorePathDefaultName% ? echo. echo Pour restaurer une autre disposition, merci de bien vouloir entrer echo son nom et ensuite appuyer sur Entr‚e. echo. echo S'il se trouve que c'est bien %RestorePathDefaultName% que vous souhaitez restaurer, echo il vous suffit d'appuyer simplement sur Entr‚e : echo. set restorewhich= :restorewhichprompt set /p restorewhich= . %RestorePathDefaultName%, ou autre disposition : if defined %restorewhich% ( if "%restorewhich%" equ "?" goto help if exist RestorePath%restorewhich% ( set name=%restorewhich% ) else ( echo. echo Je suis d‚sol‚, je suis dans l'incapacit‚ de restaurer la disposition echo %restorewhich%, car elle ne se trouve pas dans ma base de donn‚es de echo restauration. Y aurait-il une m‚prise, et voudriez-vous ressaisir echo un autre nom ? Si oui, je vous invite … le faire ci-dessous. echo Autrement, au cas o— vous vouliez restaurer la disposition %RestorePathDefaultName%, echo merci d'appuyer simplement sur Entr‚e : echo. goto restorewhichprompt ) ) else ( set name=%RestorePathDefaultName% ) echo. echo TrŠs bien, je vais maintenant restaurer la disposition %name%. echo Voici la note qui s'y trouve jointe dans ma base de donn‚es de restauration ; echo appuyez sur une touche pour que je la fasse afficher. echo J'attendrai que vous en ayez pris connaissance. pause >nul call %ProgramData%\charupdate\%name%_ANCIEN\Note.txt echo.&echo.&echo.&echo.&echo.&echo.&echo. echo ^> Pour annuler, tapez A suivi d'Entr‚e. Pour valider, juste Entr‚e. echo.&echo.&echo.&echo.&echo.&echo.&echo. set restorecancel= set /p restorecancel= . if defined restorecancel ( if "%restorecancel:~,1%" equ "a" goto :eof ) echo. echo Je procŠde maintenant … la restauration de la disposition %name%. echo. :: Cr‚e une copie de sauvegarde du pilote principal … restaurer : mkdir %ProgramData%\charupdate\%name%_ANCIEN\Copie mkdir %ProgramData%\charupdate\%name%_ANCIEN\Copie\%machine% copy %ProgramData%\charupdate\%name%_ANCIEN\%machine%\%name%.dll %ProgramData%\charupdate\%name%_ANCIEN\Copie\%machine%\%name%.dll echo J'ai cr‚‚ une copie de sauvegarde du pilote principal … restaurer. :: Restaure le pilote principal : move %ProgramData%\charupdate\%name%_ANCIEN\%machine%\%name%.dll C:\Windows\System32\%name%.dll echo J'ai restaur‚ le pilote principal. :: Pour machines 64 bit : if "%machine%" neq "i386" ( :: Cr‚e une copie de sauvegarde du pilote auxiliaire restaur‚ : mkdir %ProgramData%\charupdate\%name%_ANCIEN\Copie\wow64 copy %ProgramData%\charupdate\%name%_ANCIEN\wow64\%name%.dll %ProgramData%\charupdate\%name%_ANCIEN\Copie\wow64\%name%.dll echo J'ai cr‚‚ une copie de sauvegarde du pilote auxiliaire … restaurer. :: Restaure le pilote auxiliaire : move %ProgramData%\charupdate\%name%_ANCIEN\wow64\%name%.dll C:\Windows\SysWOW64\%name%.dll echo J'ai restaur‚ le pilote auxiliaire. ) :: Inscrit la restauration au log de restauration : echo %name% restaur‚e le %DATE% … %TIME%> %ProgramData%\charupdate\Log_restore.txt echo J'ai inscrit la restauration au log de restauration. echo.&echo.&echo.&echo.&echo.&echo.&echo. if defined bg ( color %bg%%fg% ) else color a5 echo J'ai fini de restaurer la disposition %name%. echo. echo ^> Vous pouvez maintenant fermer et rouvrir votre session echo pour activer le%pls% pilote%pls% restaur‚%pls%. echo.&echo.&echo.&echo.&echo. echo Pour me refermer, appuyez sur une touche. echo. if defined bg ( color %bg%%fg% ) else color f2 pause >nul goto eof :: ######____VERSION____######################################################## :version if defined bg ( color %bg%%fg% ) else color e1 echo.&echo.&echo. echo S O R T I R U N E V E R S I O N F I N I E echo.&echo. echo Ici je ferai compiler tous les pilotes d'une version distribuable, echo et je les emballerai avec les fichiers d'installation issus du MSKLC. echo. echo Je pr‚parerai pour chaque disposition de clavier : echo. echo + un dossier pour l'installer [pack d'installation] echo + un dossier pour recompiler les pilotes [pack de compilinstallation] echo. if "%aready%" equ "oui" ( echo + un dossier archivable avec les sources et les pilotes ) else ( echo. ) echo.&echo. if "%arqtnok%" equ "non" ( echo ^> Souhaitez-vous avoir aussi un dossier con‡u pour ˆtre sauvegard‚ ? echo Il contiendra : + un dossier de sources ; echo + un dossier d'installation ; echo + des copies des pilotes avec l'extension .bak. echo + une copie du script charupdate avec l'extension .bak. echo. echo Pour ajouter ce dossier, entrez A ou O suivi d'Entr‚e ; sinon juste Entr‚e. echo. set aready=non set arqtn= set /p arqtn= . Oui je souhaite obtenir aussi le dossier archivable : if not defined arqtn set arqtnok=non else ( if "!arqtn:~,1!" equ "a" set aready=oui&& set arqtnok=oui if "!arqtn:~,1!" equ "o" set aready=oui&& set arqtnok=oui ) call :saveuserprofile echo.&echo. echo J'ai bien not‚ que votre r‚ponse est : !aready! au dossier archivable. echo Vous pouvez la modifier dans les Pr‚f‚rences, rubrique Dossier archivable. echo.&echo. ) else ( echo.&echo. ) :: Contr“le de pr‚sence du MSKLC : call :MSKLCcheck if "%MSKLCava%" equ "no" goto MSKLC :: Gestion des noms : call :names if "%helpreq%" equ "yes" set helpreq=no& goto help :: Contr“le de pr‚sence des sources KLC : call :klcavacheck if "%klcavaok%" equ "yes" goto vncheck else ( color cf echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Il me manque une ou plusieurs sources KLC, echo. echo que je dois pr‚senter au KbdUTool pour qu'il puisse fonctionner. echo.&echo. echo ^> Si vous ne les avez sous la main, le MSKLC va vous en faire. echo.&echo.&echo.&echo. echo ^> Quand les sources KLC seront l…, appuyez sur Entr‚e pour reprendre. echo. echo Pour l'aide faites pr‚c‚der de ? ou A, ou de M pour le menu principal. echo.&echo.&echo. set versionres= set /p versionres= . [Continuer] / A[ide] / M[enu principal] : if not defined versionres goto version else ( if "!versionres:~,1!" equ "a" goto help if "!versionres:~,1!" equ "m" goto menu if "!versionres:~,1!" equ "?" goto help ) ) :vncheck :: Contr“le de pr‚sence du header commun si d‚fini et de ce qui va avec : call :cmhavacheck :: Contr“le de pr‚sence des installateurs : call :installers if "%cmhavaok%" equ "yes" ( if "%installeravaok%" equ "yes" ( echo J'ai fini de v‚rifier que des fichiers essentiels soient bien pr‚sents. )) else ( color cf echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Je suis navr‚ de ne pouvoir faire cette version. echo. echo Un ou plusieurs ‚l‚ments importants sont manquants. echo.&echo. echo Je vous remercie de bien vouloir faire le n‚cessaire. echo.&echo.&echo.&echo. echo ^> Quand tout sera prˆt, appuyez sur Entr‚e pour reprendre. echo. echo Pour l'aide faites pr‚c‚der de ? ou A, ou de M pour le menu principal. echo.&echo.&echo. set versionres= set /p versionres= . [Continuer] / A[ide] / M[enu principal] : if not defined versionres goto version else ( if "!versionres:~,1!" equ "a" goto help if "!versionres:~,1!" equ "m" goto menu if "!versionres:~,1!" equ "?" goto help goto version ) ) :: D‚finit l'identifiant chronologique autotriable : if "%TIME:~,1%" equ " " ( set timestamp=%DATE:~6,4%-%DATE:~3,2%-%DATE:~,2%__0%TIME:~1,1%.%TIME:~3,2%.%TIME:~6,2% ) else ( set timestamp=%DATE:~6,4%-%DATE:~3,2%-%DATE:~,2%__%TIME:~,2%.%TIME:~3,2%.%TIME:~6,2% ) :: Renseigne le num‚ro de version : :versioning echo.&echo.&echo.&echo.&echo. echo ^> De quelle version s'agit-il s.v.p. ? echo. echo Cette information servira uniquement … marquer les dossiers … cr‚er. echo Pour les pilotes, veuillez s.v.p. modifier le%npls% fichier%npls% .RC, echo aux lignes 3 et 4 ainsi qu'aux lignes 17 et 23 : echo. echo + Le MSKLC remet … 1.0 le num‚ro de version … chaque enregistrement. echo. echo + Le KbdUTool utilise son propre num‚ro de version pour renseigner les echo deux derniers des quatre champs usuels : "3.40", d'o— "1,0,3,40". echo. echo + Dans le cas d'une disposition de clavier, cette version de FICHIER echo est celle des pilotes, tandis que le PRODUIT inclut la documentation. echo En pratique les deux num‚ros de version restent normalement synchros. echo. echo + Les valeurs num‚riques aux lignes 3-4 et les chaŒnes lignes 17 et 23 echo devraient correspondre, sauf que les premiŠres requiŠrent des virgules, echo tandis que les chaŒnes peuvent ˆtre ‚crites librement, aussi avec des echo points et sans espaces, car ceci sera repris … la lettre. echo. echo + On peut ajouter la chaŒne "Comments" et modifier l'ordre. echo [A]ide / M[enu] set /p version= . Cette version : if /i "%version%" equ "m" goto menu if "%version%" equ "?" goto help echo. :: Initialise la boucle pour multiprojets (marche aussi pour un monoprojet) : set /a cycle=0 & set /a totnbroa=0 if not defined projectname goto versionnext set idirproject="%projectname%_v%version%_(installation)" mkdir %idirproject% set comidirproject="%projectname%_v%version%_(compilinstallation)" mkdir %comidirproject% if "%aready%" equ "oui" ( set bakdirproject="(a) %projectname% v%version%" mkdir !bakdirproject! ) echo J'ai cr‚‚ les surdossiers de %projectname%. :: Met … jour le nom et commence la routine : :versionnext set name=!entry[%cycle%][0]! set description=!entry[%cycle%][1]! if defined description ( set sep= ) else ( set sep=) echo C'est la disposition %name% dont je vais m'occuper maintenant. :: Met en lecture seule les ‚ventuelles sources pr‚sentes pour les conserver : call :locksources :: Commence le dossier de compilinstallation contenant les sources : set comidirname="%name%%sep%%description% v%version% compilinstallation" mkdir %comidirname% echo J'ai cr‚‚ le dossier %comidirname%, copy %name%.klc %comidirname%\%name%.klc echo et … l'int‚rieur j'ai plac‚ une copie de la source KLC %name%.klc. set allsrc=yes if exist %cmheader%.H ( copy %cmheader%.H %comidirname%\%cmheader%.H ) if exist %name%.C ( copy %name%.C %comidirname%\%name%.C ) else set allsrc=no if exist %name%.H ( copy %name%.H %comidirname%\%name%.H ) else set allsrc=no if exist %name%.RC ( copy %name%.RC %comidirname%\%name%.RC ) else set allsrc=no if exist %name%.DEF ( copy %name%.DEF %comidirname%\%name%.DEF ) else set allsrc=no if "%allsrc%" equ "yes" ( echo J'y ai ajout‚ une copie de toutes les sources. goto versioncompile ) :: ComplŠte les sources manquantes : if exist %name%_sources_origine\%name%.C if exist %name%_sources_origine\%name%.H if exist %name%_sources_origine\%name%.RC if exist %name%_sources_origine\%name%.DEF goto completesources call :generatesources echo J'ai fait g‚n‚rer des sources pour compl‚ter ce qui manque. :completesources if not exist %name%.C copy %name%_sources_origine\%name%.C %comidirname%\%name%.C if not exist %name%.H copy %name%_sources_origine\%name%.H %comidirname%\%name%.H if not exist %name%.RC copy %name%_sources_origine\%name%.RC %comidirname%\%name%.RC if not exist %name%.DEF copy %name%_sources_origine\%name%.DEF %comidirname%\%name%.DEF echo Les sources dans le dossier sont au complet. :: Pack d'installation : :versioncompile :: Fait compiler et emballe les pilotes (avec une copie de sauvegarde) : set idirname="%name%%sep%%description% v%version% installation" mkdir %idirname% echo J'ai cr‚‚ le dosssier %idirname%. :: 'i386' echo. echo Je vais maintenant demander … KbdUTool de compiler le pilote 32 bit. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -x %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote 32 bit. copy %name%.dll %name%.bak echo J'ai fait un double de sauvegarde du pilote. mkdir %idirname%\i386 move %name%.dll %idirname%\i386\%name%.dll move %name%.bak %idirname%\i386\%name%.bak echo J'ai rang‚ le tout dans le dossier. :: 'amd64' echo. echo Je vais maintenant demander … KbdUTool de compiler le pilote 64 bit. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -m %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote 64 bit. copy %name%.dll %name%.bak echo J'ai fait un double de sauvegarde du pilote. mkdir %idirname%\amd64 move %name%.dll %idirname%\amd64\%name%.dll move %name%.bak %idirname%\amd64\%name%.bak echo J'ai rang‚ le tout dans le dossier. :: 'ia64' echo. echo Je vais maintenant demander … KbdUTool de compiler un pilote sp‚cial. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -i %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote 64 bit pour Itanium. copy %name%.dll %name%.bak echo J'ai fait un double de sauvegarde du pilote. mkdir %idirname%\ia64 move %name%.dll %idirname%\ia64\%name%.dll move %name%.bak %idirname%\ia64\%name%.bak echo J'ai rang‚ le tout dans le dossier. :: 'wow64' echo. echo Je vais maintenant demander … KbdUTool de compiler le pilote d'appoint. if %nbroa% neq 0 ( echo Quand KbdUTool ne pourra pas ouvrir une source pour la r‚crire, echo c'est parce que j'ai bloqu‚ cette source. Donc c'est bon signe. ) %MSKLCprofile%\bin\i386\kbdutool.exe -%enc% -v -w -o %name%.klc echo.&echo. if not exist %name%.dll goto failure echo J'ai fait compiler le pilote auxiliaire Windows On Windows (WoW) echo pour les programmes en 32 bit qui tournent sous 64 bit. copy %name%.dll %name%.bak echo J'ai fait un double de sauvegarde du pilote. mkdir %idirname%\wow64 move %name%.dll %idirname%\wow64\%name%.dll move %name%.bak %idirname%\wow64\%name%.bak echo J'ai rang‚ le tout dans le dossier. :: Copie les installateurs vers le dossier d'installation : copy %name%\%name%_i386.msi %idirname%\%name%_i386.msi copy %name%\%name%_amd64.msi %idirname%\%name%_amd64.msi copy %name%\%name%_ia64.msi %idirname%\%name%_ia64.msi copy %name%\setup.exe %idirname%\setup.exe echo J'ai copi‚ les installateurs vers le dossier d'installation. :: Ajoute une note : chdir %idirname% rem En ANSI ceci s'affiche en fran‡ais. echo Disposition de clavier %name%%sep%%description:‚=é% v%version%> Note.txt echo.>> Note.txt echo Datant du %timestamp%>> Note.txt echo.>> Note.txt echo Cette disposition de clavier est compatible Windows 10, 8.1, 8, 7, Vista,>> Note.txt echo Server 2003, XP, 2000, et NT 4.0.>> Note.txt echo.>> Note.txt if "%name:~5,2%" equ "bt" ( echo L'architecte principal de la disposition de base est Nicolas Chartier.>> Note.txt echo Visiter http://bépo.fr ou http://bepo.fr pour plus de renseignements.>> Note.txt echo Cette disposition de clavier est sous les licences GNU FDL et CC BY SA.>> Note.txt echo La partie logicielle est sous licence GNU GPL.>> Note.txt echo.>> Note.txt ) else ( echo Elle est sous licence Apache 2.0.>> Note.txt echo Visiter http://dispoclavier.com pour plus de renseignements.>> Note.txt echo.>> Note.txt ) echo Pour ajouter une disposition de clavier sur votre ordinateur,>> Note.txt echo vous devez disposer des droits d'administrateur.>> Note.txt echo.>> Note.txt echo Les fichiers d'installation setup.exe et trois packs pour installateur>> Note.txt echo Windows sont issus du MSKLC et peuvent être remplacés par des fichiers>> Note.txt echo au même nom générés sur votre ordinateur par cet utilitaire Microsoft gratuit.>> Note.txt echo.>> Note.txt echo Pour une utilisation des packs d'installation téléchargés, l'accord explicite>> Note.txt echo de l'utilisateur est demandé par Windows. Sous Windows 10 il est nécessaire de>> Note.txt echo désactiver le blocage au préalable en ouvrant les propriétés du fichier et en>> Note.txt echo cochant la case en bas à droite. Les versions antérieures montrent un bouton.>> Note.txt echo.>> Note.txt echo On peut lancer le setup.exe ou les fichiers MSI alternativement. D'entre ces>> Note.txt echo derniers on aura le bon au premier essai en choisissant 'i386' pour une>> Note.txt echo machine 32 bit, ou 'amd64' pour une machine 64 bit, sauf Intel Itanium qui>> Note.txt echo est servi par le pack 'ia64'. 'amd64' est aussi pour processeurs Intel.>> Note.txt echo.>> Note.txt echo Les pilotes sont dans les dossiers aux mêmes désignations. Le pilote 'wow64'>> Note.txt echo est nécessaire en plus sur les machines 64 bit pour les applications 32 bit.>> Note.txt echo.>> Note.txt echo La copie avec l'extension '.bak' (pour 'backup') qui se trouve à côté de>> Note.txt echo chaque pilote de disposition, dont l'extension qui correspond est .dll pour>> Note.txt echo Dynamic Link Library, sert à protéger ces pilotes contre la suppression>> Note.txt echo par une procédure de restauration du système postérieure à leur compilation,>> Note.txt echo pour le cas où ils ne seraient pas sauvegardés sur un volume externe.>> Note.txt chdir .. echo J'ai ajout‚ une note. :: Pack de compilinstallation (achŠvement) : :: Copie les installateurs vers le dossier de compilinstallation : mkdir %comidirname%\%name% copy %name%\%name%_i386.msi %comidirname%\%name%\%name%_i386.msi copy %name%\%name%_amd64.msi %comidirname%\%name%\%name%_amd64.msi copy %name%\%name%_ia64.msi %comidirname%\%name%\%name%_ia64.msi copy %name%\setup.exe %comidirname%\%name%\setup.exe echo J'ai copi‚ les installateurs vers le dossier de compilinstallation, :: Copie ce script vers le dossier de compilinstallation : copy charupdate.cmd %comidirname%\charupdate.cmd copy charupdate.cmd %comidirname%\charupdate.bak echo ainsi qu'une copie de moi-mˆme et une copie de sauvegarde, :: Ajoute un fichier des propri‚t‚s du projet : chdir %comidirname% call :savemainprojectprops echo et j'y ai g‚n‚r‚ un fichier des propri‚t‚s du projet. :: Ajoute une note : rem En ANSI ceci s'affiche en fran‡ais. echo Disposition de clavier %name%%sep%%description:‚=é% v%version%> Note.txt echo.>> Note.txt echo Datant du %timestamp%>> Note.txt echo.>> Note.txt echo Cette disposition de clavier est compatible Windows 10, 8.1, 8, 7, Vista,>> Note.txt echo Server 2003, XP, 2000, et NT 4.0.>> Note.txt echo.>> Note.txt if "%name:~5,2%" equ "bt" ( echo L'architecte principal de la disposition de base est Nicolas Chartier.>> Note.txt echo Visiter http://bépo.fr ou http://bepo.fr pour plus de renseignements.>> Note.txt echo Cette disposition de clavier est sous les licences GNU FDL et CC BY SA.>> Note.txt echo La partie logicielle est sous licence GNU GPL.>> Note.txt echo.>> Note.txt ) else ( echo Elle est sous licence Apache 2.0.>> Note.txt echo Visiter http://dispoclavier.com pour plus de renseignements.>> Note.txt echo.>> Note.txt ) echo La source KLC n'est pas censée contenir cette disposition de clavier.>> Note.txt echo Sa fonction est de permettre à l'utilisateur de recompiler les pilotes>> Note.txt echo à l'aide du MSKLC et du KbdUTool qu'il contient, avec éventuellement>> Note.txt echo l'assistance d'un script de commandes Windows comme charupdate.>> Note.txt echo.>> Note.txt echo charupdate est un script interactif et convivial utilisable en présence du>> Note.txt echo Microsoft Keyboard Layout Creator (MSKLC).>> Note.txt echo.>> Note.txt echo Ce script fait grâce des tâches techniques qui autrement incombent à>> Note.txt echo l'utilisateur du fait que l'interface du Keyboard Table Generation Tool inclus>> Note.txt echo dans le MSKLC n'est pas graphique mais en ligne de commandes.>> Note.txt echo.>> Note.txt echo Pour donner charupdate à l'interpréteur de commandes Windows (cmd.exe),>> Note.txt echo cliquez ou double-cliquez le fichier 'charupdate.cmd' ci-joint.>> Note.txt echo Son double 'charupdate.bak' est une copie de sauvegarde.>> Note.txt echo.>> Note.txt echo Pour prendre lecture du contenu de charupdate, faites un clic droit sur>> Note.txt echo le fichier 'charupdate.cmd' et choisissez Modifier, ce qui par défaut l'ouvre>> Note.txt echo dans le Bloc-Notes mais dans le mauvais encodage. Pour le lire en français,>> Note.txt echo ouvrez-le dans un autre éditeur de texte avec l'encodage OEM 850.>> Note.txt echo Beaucoup d'éditeurs de texte facilitent la lecture grâce à une>> Note.txt echo coloration syntaxique.>> Note.txt chdir .. echo J'ai ajout‚ une note. :: Cr‚e un dossier archivable de cette version : if "%aready%" equ "non" goto versioncomplete set bakdirname="archive %name%%sep%%description% v%version% %timestamp%" mkdir %bakdirname% xcopy %comidirname% %bakdirname%\%comidirname%\ /s /q xcopy %idirname%\i386 %bakdirname%\%comidirname%\%name%\i386\ /s /q xcopy %idirname%\amd64 %bakdirname%\%comidirname%\%name%\amd64\ /s /q xcopy %idirname%\ia64 %bakdirname%\%comidirname%\%name%\ia64\ /s /q xcopy %idirname%\wow64 %bakdirname%\%comidirname%\%name%\wow64\ /s /q :: Ajoute un fichier texte chdir %bakdirname% rem En ANSI ceci s'affiche en fran‡ais. echo Disposition de clavier %name%%sep%%description% v%version%> Note.txt echo.>> Note.txt echo Datant du %timestamp%>> Note.txt echo.>> Note.txt echo Cette disposition de clavier est compatible Windows 10, 8.1, 8, 7, Vista,>> Note.txt echo Server 2003, XP, 2000, et NT 4.0.>> Note.txt echo.>> Note.txt echo La source KLC n'est pas censée contenir cette disposition de clavier.>> Note.txt echo Sa fonction est de permettre à l'utilisateur de recompiler les pilotes>> Note.txt echo à l'aide du MSKLC et du KbdUTool qu'il contient, avec éventuellement>> Note.txt echo l'assistance d'un script de commandes Windows comme charupdate.>> Note.txt echo.>> Note.txt echo La copie avec l'extension '.bak' (pour 'backup') qui se trouve à côté de>> Note.txt echo chaque pilote de disposition, dont l'extension qui correspond est .dll pour>> Note.txt echo Dynamic Link Library, sert à protéger ces pilotes contre la suppression>> Note.txt echo par une procédure de restauration du système postérieure à leur compilation,>> Note.txt echo pour le cas où ils ne seraient pas sauvegardés sur un volume externe.>> Note.txt chdir .. echo J'ai fait un dossier archivable avec une note. echo Cette ‚tape peut ˆtre d‚sactiv‚e dans les pr‚f‚reunces. :: Range le dossier archivable dans le surdossier correspondant du projet : if exist %bakdirproject% ( move %bakdirname% %bakdirproject% echo J'ai rang‚ le dossier archivable dans son surdossier. ) :versioncomplete :: Range le dossier de compilinstallation dans le surdossier correspondant du projet : if exist %comidirproject% ( move %comidirname% %comidirproject% echo J'ai rang‚ le dosssier de compilinstallation de %name% dans son surdossier. echo du projet %projectname%. ) :: Range le dossier d'installation dans le surdossier correspondant du projet : if exist %idirproject% ( move %idirname% %idirproject% echo J'ai rang‚ le dossier d'installation de %name% dans son surdossier. ) :: EnlŠve l'attribut 'lecture seule' pour rendre les sources de nouveau modifiables : set /a totnbroa=%totnbroa%+%nbroa% call :unlocksources :: Regarde si tout est fait : set /a cycle+=1 if %cycle%==%number% ( echo J'ai fait passer toutes les dispositions du projet. goto versionend ) else ( set /a rest=%number%-%cycle% echo Le projet contient encore d'autres dispositions, il en reste !rest! … faire. echo Je passe … la suivante. goto versionnext ) :: Message final version : :versionend if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo La version %version% est prˆte. echo.&echo. echo charupdate vous souhaite une bonne utilisation. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo ^> Appuyez sur une touche pour me refermer. echo.&echo.&echo. if "%sound%" equ "oui" if not defined soundpref call %soundfile% else call %soundpref% pause >nul goto eof :: ######____PRFRENCES____######################################################## :preferences if defined bg ( color %bg%%fg% ) else color fa echo. echo P R F R E N C E S echo. echo ^> Comment souhaitez-vous que je fonctionne ? echo. echo Je suis programm‚ dans l'espoir de r‚pondre aux attentes des utilisateurs. echo Pour m'en rapprocher davantage, des paramŠtres comme les couleurs et echo l'encodage des sources KLC sont personnalisables. Je serai ravi de vous echo aider … faire vos choix, mais il vous est aussi possible de modifier votre echo profil directement. Avec l'option P je vous l'ouvre dans votre ‚diteur de echo texte par d‚faut. Par l'option M retournez … tout moment au menu principal. if defined bg ( color %bg%%fg% ) else color fe echo. echo P = Profil utilisateur de %USERNAME% echo. echo R = R‚pertoire de stockage des donn‚es pour la restauration de pilotes echo. echo E = Encodage des sources KLC (par d‚faut comme enregistr‚es par le MSKLC) echo. if defined bg ( color %bg%%fg% ) else color fa echo D = Dossier archivable (suppl‚ment lors de la finition d'une version) echo. echo C = Couleurs d'affichage : bloquez-moi sur vos couleurs pr‚f‚r‚es. echo. echo S = Son F = Fr‚quence de clignotement M = Menu principal echo. if defined bg ( color %bg%%fg% ) else color f2 set option= :prefwhat set /p option= . Votre choix : if not defined option goto preferences else ( if /i "%option:~,1%" equ "c" call :colours if /i "%option:~,1%" equ "d" call :archifolder if /i "%option:~,1%" equ "e" call :encoding if /i "%option:~,1%" equ "f" call :customwait if /i "%option:~,1%" equ "m" goto menu if /i "%option:~,1%" equ "p" goto userprofile if /i "%option:~,1%" equ "r" call :globaldata if /i "%option:~,1%" equ "s" call :soundsettings goto preferences ) :: Profil utilisateur : :userprofile call %LOCALAPPDATA%\charupdate\userdata.txt if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai ouvert le fichier de votre profil. echo.&echo. echo Quand vous aurez fait et enregistr‚ vos modifications, echo.&echo. echo appuyez-moi sur une touche pour que je puisse les prendre en compte. echo.&echo. echo Ensuite j'afficherai le menu principal. echo.&echo.&echo.&echo.&echo.&echo. pause >nul call :readuserprofile goto menu :: R‚pertoire des donn‚es globales : :globaldata call %ProgramData%\charupdate if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai ouvert pour vous le dossier o— je range mes archives. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: Encodage des sources KLC : :encoding echo.&echo. echo E N C O D A G E D E S S O U R C E S K L C echo. echo Le MSKLC encode ses sources dans un format Unicode afin que vous puissiez echo y voir tous les caractŠres produits par touches mortes. Vous les trouvez echo dans les commentaires de fin de ligne des r‚pertoires de touches mortes. echo. echo En cons‚quence, KbdUTool accepte ces sources au format Unicode utilis‚, echo qui est celui de Windows : UTF-16 petit-boutien (Little Endian), aussi echo appel‚ UCS-2 Little Endian (LE). UCS signifie 'Universal Character Set'. echo Puisque chaque unit‚ de code comporte deux octets, il y a un ordre, qui echo sous Windows consiste … commencer par le petit bout, l'octet comprenant echo les unit‚s et les "seizaines". echo. echo Je pars du principe que vous me donnez de telles sources KLC, et je echo demande … KbdUTool de consid‚rer qu'elles sont dans ce format Unicode, echo donc je le lui sp‚cifie. Si la source ne correspond pas, KbdUTool se echo referme et doit ˆtre relanc‚ avec le bon paramŠtre -- ou sur une source echo au bon format. echo Si vous souhaitez travailler en ANSI, dites-le moi s.v.p. ci-dessous. echo. echo ^> Pour passer … ANSI, entrez A ; pour revenir … Unicode, entrez U. echo Pour retourner au menu des pr‚f‚rences, faites juste [M puis] Entr‚e. echo. set encin= set /p encin= . Encodage des sources KLC : if not defined encin goto :eof else ( if "%encin:~,1%" equ "a" set enc=a&& set format=ANSI&& goto saveenc if "%encin:~,1%" equ "u" set enc=u&& set format=Unicode&& goto saveenc if "%encin:~,1%" equ "m" goto :eof ) :saveenc call :saveuserprofile if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ votre choix pour l'encodage des sources KLC. echo.&echo. echo Les sources KLC que vous utiliserez seront au format %format%. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: Activer ou d‚sactiver la confection des dossiers archivables : :archifolder echo.&echo. echo D O S S I E R A R C H I V A B L E echo. echo Comme r‚sultats de la compilation d'une version, je fais r‚guliŠrement : echo. echo + un dossier pour l'installer echo + un dossier pour recompiler les pilotes echo + un dossier avec toutes les sources echo.&echo. echo Mais je peux faire aussi un dossier sp‚cialement con‡u pour vos archives. echo. echo Il contiendra : + un dossier de sources ; echo + un dossier d'installation ; echo + des copies des pilotes avec l'extension .bak. echo.&echo. echo Souhaitez-vous … l'avenir que je pr‚pare un dossier archivable pour chaque echo disposition en plus des autres dossiers lorsque je fais compiler une echo version finie ? echo. echo Pour retourner au menu faites juste Entr‚e, ou M puis Entr‚e. echo. set arqtn= set /p arqtn= . Oui / Non : if not defined arqtn goto :eof else ( if "%arqtn:~,1%" equ "o" set aready=oui& set do=ferai un& goto arsave if "%arqtn:~,1%" equ "n" set aready=non& set do=ne ferai pas de& goto arsave if "%arqtn:~,1%" equ "m" goto :eof ) :arsave set arqtnok=oui call :saveuserprofile if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ votre choix pour la confection des dossiers archivables. echo.&echo. echo Lors de la compilation d'une version finie, %aready%, echo.&echo. echo je %do% dossier archivable pour chaque disposition compil‚e. echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: Couleurs d'affichage uniformes : :colours echo.&echo.&echo. echo C O U L E U R S D ' A F F I C H A G E echo. echo J'utilise des couleurs diff‚renci‚es afin de rendre l'affichage plus echo significatif et plus vivant. Toutefois vous pourriez pr‚coniser un echo affichage uniforme dans vos couleurs de fond et de texte pr‚f‚r‚es. echo. echo Si vous ‚prouvez le besoin de vous familiariser avec les 16 couleurs echo de CMD.exe, je vous propose de les essayer … volont‚ ici. Chacune est echo appel‚e par un chiffre hexad‚cimal dans l'ordre o— elles s'‚grŠnent au echo nuancier de l'onglet Couleurs des Propri‚t‚s (clic droit en haut). echo Une mˆme gamme se d‚cline en sombre et en clair (0-8 ; 9-f). echo. echo ^> Voyez d‚filer les couleurs par paires en tapant V et Entr‚e. echo. echo ^> Pour la liste des noms de couleurs tapez L (ou autre) puis Entr‚e. echo. echo Faites S pour enregistrer, R pour restaurer les couleurs contextuelles, echo ou M pour retourner au menu sans enregistrer, toujours suivis d'Entr‚e. echo. echo Si la couleur pour le fond est la mˆme que pour le texte ou inversement, echo CMD.exe attend votre prochain choix jusqu'… ce que les deux couleurs echo soient diff‚rentes. echo. set bgin= :colourloop set /p bgin= . Fond : if defined bgin ( if /i "%bgin:~,1%" equ "m" goto :eof if /i "%bgin:~,1%" equ "v" goto coloreview if /i "%bgin:~,1%" equ "r" goto colorestore if /i "%bgin:~,1%" equ "s" goto coloursave set bg=%bgin:~,1% color !bg!%fg% ) set /p fgin= . Texte : if defined fgin ( if /i "%fgin:~,1%" equ "m" goto :eof if /i "%fgin:~,1%" equ "p" goto coloreview if /i "%fgin:~,1%" equ "r" goto colorestore if /i "%fgin:~,1%" equ "s" goto coloursave set fg=%fgin:~,1% color %bg%!fg! ) goto colourloop :: Fait d‚filer les couleurs par paires : :coloreview call :milliwait & color 1f & call :milliwait & color 9f call :milliwait & color 2f & call :milliwait & color af call :milliwait & color 3f & call :milliwait & color bf call :milliwait & color 4f & call :milliwait & color cf call :milliwait & color 5f & call :milliwait & color df call :milliwait & color 6f & call :milliwait & color ef call :milliwait & color 0f & call :milliwait & color 8f call :milliwait & color 7f & call :milliwait & color f2 goto colourloop :: Restaure les couleurs par d‚faut : :colorestore set bg= set fg= if defined bg ( color %bg%%fg% ) else color a1 call :saveuserprofile echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ votre choix pour les couleurs d'affichage. echo.&echo. echo J'ai restaur‚ les couleurs par d‚faut echo.&echo. echo d‚finies selon les cironstances. echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: Enregistre les couleurs choisies : :coloursave call :saveuserprofile echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai sauvegard‚ les couleurs actuelles dans votre profil echo.&echo. echo pour qu'elles soient toujours utilis‚es, echo.&echo. echo ind‚pendamment des circonstances. echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: teindre ou personnaliser le son de termination : :soundsettings echo.&echo.&echo. echo S O N D E T E R M I N A T I O N echo. echo Quand les r‚sultats d'une tƒche potentiellement longue sont tous r‚unis -- echo ce qui dans le cas de vos multiprojets peut prendre un bon moment -- echo je vous en avertis aussi par un signal sonore, pour le cas o— echo vous aurez pu faire autre chose entre-temps. echo. echo Si vous pr‚f‚rez ne pas entendre de signal sonore, entrez N ci-dessous. echo Pour r‚activer le signal sonore ‚teint, entrez O. echo. echo Le signal par d‚faut est l'avertissement d'achŠvement d'impression echo par d‚faut de Windows : C:\Windows\Media\Windows Print complete.wav echo. echo Actuellement le signal est : if defined soundpref ( echo %soundpref%) else ( echo %soundfile%) echo. echo Si vous pr‚f‚rez que ce soit un autre son, je peux vous proposer que echo vous colliez son chemin complet ci-dessous avant d'appuyer sur Entr‚e. echo ^> Pour coller dans ma fenˆtre cliquez droit dessus et choisissez Coller. echo. echo Pour revenir au signal par d‚faut, entrez D. echo Pour retourner au menu des pr‚f‚rences faites simplement Entr‚e. echo. set soundprefin= set /p soundprefin= . O[ui]/N[on]/D[‚faut]/M[enu]/[Chemin] : if not defined soundpref goto :eof else ( if "%soundprefin%" equ "o" set sound=oui& set do=ferai entendre un& goto soundconfirm if "%soundprefin%" equ "n" set sound=non& set do=ne ferai pas entendre de& goto soundconfirm if "%soundprefin%" equ "d" goto soundfilereset if "%soundprefin%" equ "m" goto :eof if "%soundprefin:~8,1%" equ "" goto soundsettings goto soundfileset ) :soundconfirm call :saveuserprofile if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ votre choix concernant le signal sonore. echo.&echo. echo Lors de l'achŠvement d'une tƒche potentiellement longue echo. echo je %do% signal sonore. echo.&echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :soundfileset set soundpref="%soundprefin%" call :saveuserprofile if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ votre choix concernant le signal sonore. echo.&echo. echo Votre signal personnel figure dans votre profil utilisateur. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :soundfilereset set soundpref= call :saveuserprofile if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ votre choix concernant le signal sonore, echo.&echo. echo et j'ai remis mon son par d‚faut. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: Personnaliser l'intervalle de l'‚mulation du minuteur : :customwait echo.&echo.&echo. echo F R Q U E N C E D E C L I G N O T E M E N T echo. echo Parfois je fais changer les couleurs pour renforcer une alerte, ou encore echo pour vous faire patienter le temps que votre navigateur prenne le relais. echo. echo Comme le minuteur de CMD.exe est r‚gl‚ en minutes entiŠres, j'utilise une echo ‚mulation de minuteur sous forme de mini-boucle, que je mets environ 50 ms echo … retrouver et 120 ms … parcourir sur une machine 32 bit cadenc‚e 1,66 GHz. echo Mais les scripts en batch -- mon langage -- peuvent devenir lents au cours echo d'une session et redevenir plus rapides aprŠs le prochain red‚marrage. echo (On pourrait aussi d‚tourner la commande PING, dont les d‚lais sont echo toutefois arrondis par tranches de 500 ms d'aprŠs ce qui a ‚t‚ constat‚.) echo. echo Par d‚faut je parcours la boucle 3 fois, et le tout fait 450 ms environ sur echo la machine de test. Mais la dur‚e r‚elle varie selon les performances de echo l'ordinateur, tandis que la dur‚e id‚ale est fonction de vos pr‚f‚rences. echo. echo ^> R‚glez la vitesse en me donnant un nombre. La valeur actuelle est %times%. echo ^> Pour restaurer la valeur par d‚faut, entrez R ou D. echo. echo Je vous ferai voir le r‚sultat dŠs que vous aurez appuy‚ sur Entr‚e. echo ^> Entrez S pour le sauvegarder. echo Pour retourner au menu faites Entr‚e. set /a qua=1 :timesinloop set timesin= set /p timesin= . Nombre de tours : if not defined timesin goto :eof else ( if /i "%timesin:~,1%" equ "d" set /a times=3&& goto timestest if /i "%timesin:~,1%" equ "m" goto :eof if /i "%timesin:~,1%" equ "r" set /a times=3&& goto timestest if /i "%timesin:~,1%" equ "s" goto timesave if %timesin% gtr 0 set /a times=%timesin% ) :timestest if %qua% equ 1 call :milliwait & color 1f & call :milliwait & color 9f & call :milliwait & color 2f & call :milliwait & color af & call :milliwait & color f2 & set /a qua=2 & goto timesinloop if %qua% equ 2 call :milliwait & color 3f & call :milliwait & color bf & call :milliwait & color 4f & call :milliwait & color cf & call :milliwait & color f2 & set /a qua=3 & goto timesinloop if %qua% equ 3 call :milliwait & color 5f & call :milliwait & color df & call :milliwait & color 6f & call :milliwait & color ef & call :milliwait & color f2 & set /a qua=4 & goto timesinloop if %qua% equ 4 call :milliwait & color 0f & call :milliwait & color 8f & call :milliwait & color 7f & call :milliwait & color f2 & set /a qua=1 & goto timesinloop :: Enregistre la nouvelle valeur : :timesave call :saveuserprofile if defined bg ( color %bg%%fg% ) else color a1 echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo J'ai enregistr‚ le nouvel intervalle dans votre profil utilisateur. echo.&echo. echo La valeur est %times%. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. echo Pour retourner au menu des pr‚f‚rences, appuyez s.v.p. sur une touche. echo.&echo. pause >nul goto :eof :: Boucle d'attente ‚mulant un minuteur pour des d‚lais en-dessous de 1 seconde : :milliwait set /a milli=0 :milliloop set /a milli+=1 if %milli% lss %times% ( goto milliloop ) else ( goto :eof ) :: Enregistrement du profil utilisateur : :saveuserprofile echo charupdate 1.9> %LOCALAPPDATA%\charupdate\userdata.txt echo Profil de %USERNAME%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Il vous est possible d'apporter des modifications directement dans ce fichier.>> %LOCALAPPDATA%\charupdate\userdata.txt echo Pour tout remettre aux valeurs d'origine : effacez-moi, puis relancez charupdate.>> %LOCALAPPDATA%\charupdate\userdata.txt echo ------------------------------------------------------------------------------>> %LOCALAPPDATA%\charupdate\userdata.txt echo Niveau de progression prise en main [maximum = 10] :%helplevel%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Encodage des sources KLC [u = Unicode, a = ANSI] . :%enc%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Couleurs [1-8 = sombres, 9-f = claires] . . Fond :%bg%>> %LOCALAPPDATA%\charupdate\userdata.txt echo [aucune valeur = selon les circonstances] Texte :%fg%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Minuteur [nombre d'intervalles] . . . . . . . . . :%times%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Viser la rubrique de compilinstallation [oui/non] :%adhoc%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Produire un dossier archivable [oui/non] . . . . . :%aready%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Si la question du dossier archivable est faite . . :%arqtnok%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Date de l'utilisation d'avant . . . . . . . . . . :%datestamp%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Si aujourd'hui je vous ai dit bonjour . . . . . . :%day%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Si aujourd'hui je vous ai dit bonsoir . . . . . . :%eve%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Si je peux faire entendre le son de termination . :%sound%>> %LOCALAPPDATA%\charupdate\userdata.txt echo Votre son de termination [aucun = le son standard] :%soundpref%>> %LOCALAPPDATA%\charupdate\userdata.txt goto :eof :: Lecture du profil utilisateur : :readuserprofile set /a N=0 for /f "skip=5 tokens=* delims=" %%a in (%LOCALAPPDATA%\charupdate\userdata.txt) do ( set v!N!=%%a set /a N+=1 ) set helplevel=!v0:~52! set enc=!v1:~52! set bg=!v2:~52! set fg=!v3:~52! set times=!v4:~52! set adhoc=!v5:~52! set aready=!v6:~52! set arqtnok=!v7:~52! set datestamp=!v8:~52! set day=!v9:~52! set eve=!v10:~52! set sound=!v11:~52! set soundpref=!v12:~52! goto :eof :: FIN DE SCRIPT