home *** CD-ROM | disk | FTP | other *** search
/ IBM Thinkpad Drivers FTP / IRTPGWNT.ZIP / SETUP_IR.INF < prev   
INI File  |  1996-11-27  |  33KB  |  936 lines

  1.  
  2. [Source Media Descriptions]
  3.    1 = "IR Setup 1", TAGFILE = disk1
  4.  
  5. [FixedVars]
  6. ;
  7. ; Other misc compatibility stuff.
  8. ;
  9.    LanguageList = {"ENG"}
  10.    DebugOutputControl = 1
  11.    STF_CONTROLSET = CurrentControlSet
  12.    STF_DISPLAYDEBUGOUTPUT = 1
  13.    STF_LANGUAGE = ENG
  14.    STF_VITAL = ""
  15.  
  16.  
  17. [VariableVars]
  18.    STF_PLATFORM       = "" ? $(!LEGACYDLL) GetPlatform
  19.    STF_WINDOWSSYSPATH = "" ? $(!LEGACYDLL) GetWindowsNtSysDir
  20.    STF_WINDOWSPATH    = "" ? $(!LEGACYDLL) GetWindowsNtDir
  21.    STF_WINDIRPATH     = "" ? $(!LEGACYDLL) GetNtDir
  22.    STF_INSTALLED      = "NO"
  23.  
  24. [LoadSetupLibraries]
  25. ;   LoadLibrary x $(!STF_SYSTEM_DIR)\setupdll.dll !LEGACYDLL
  26.    ; LoadLibrary x %SystemRoot%\System32\setupdll.dll !LEGACYDLL
  27.    LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll       !LEGACYDLL
  28.  
  29.    LoadLibrary y iruidlg.dll !IRUIDLGHANDLE
  30. ;
  31. ; Some old infs expect !LIBHANDLE to be valid.
  32. ;
  33.    set !LIBHANDLE = $(!LEGACYDLL)
  34.    exit
  35.  
  36. [FreeSetupLibraries]
  37.    FreeLibrary !LEGACYDLL
  38.    FreeLibrary !IRUIDLGHANDLE
  39.    exit
  40.  
  41. [Install-Shutdown]
  42.    LibraryProcedure STATUS,$(!LIBHANDLE),ShutdownSystem $(Reboot)
  43.    exit
  44.  
  45. [DriversExistDlgENG]
  46.     Caption      = "Windows NT Infrared Driver Setup"
  47.     DlgText      = "You can install or de-install the Windows NT infra red drivers."+
  48.                    "Choose an action to continue:"
  49.     Current      = "&Install"
  50.     New          = "&DeInstall"
  51.     Cancel       = "Cancel"
  52.     Help         = "&Help"
  53.     DlgType      = "Info"
  54.     DlgTemplate  = "DRIVEREXISTS"
  55.     HelpContext  = 1043 ; 5010 ; $(!IDH_DB_MAINTAIN_INS)  ; $(!IDH_DB_DRIVEREXIST_INS)
  56.  
  57. [UserCancelENG]
  58.     DlgType      = "MessageBox"
  59.     STF_MB_TITLE = "Windows NT Infrared Drivers Setup"
  60.     STF_MB_TEXT  = "The drivers are not correctly installed.  Are you sure you want to cancel?"
  61.     STF_MB_TYPE  = 3
  62.     STF_MB_ICON  = 2
  63.     STF_MB_DEF   = 1
  64.  
  65. [SetupCompleteDlgENG]
  66.    Caption     = "Windows NT Infrared Drivers Setup"
  67.    DlgText     = "The drivers have been installed." ; $(!LF)$(!LF)+
  68.                  ; "Remove the installation disk before you reboot."
  69.    Reboot      = "&Restart Computer"
  70.    Windows     = "E&xit to Windows NT"
  71.    DlgType     = "Info"
  72.    DlgTemplate = "REBREST"
  73.  
  74. [Shell Commands]
  75. ;
  76. ; Load libraries and set up static inf variables.
  77. ;
  78.    StartWait
  79.    set-title "Infrared Data Association Driver Setup"
  80.  
  81.    install LoadSetupLibraries
  82.  
  83.  
  84.    read-syms FixedVars
  85.    detect VariableVars
  86.  
  87.    ; set-subst CR = "\r"
  88.    set-subst LF = "\n"
  89.  
  90.  
  91.    LibraryProcedure CurDir,$(!IRUIDLGHANDLE),IrUiQueryCurrentDirectory
  92.    ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "CurrentDirectory="$(CurDir)
  93.  
  94.  
  95.    shell "subroutn.inf" ReadSetupHelpIds  ; To read the driver exist help ID (1042)
  96.    SetHelpFile "setup_ir.hlp" 1042 1043
  97.  
  98. UserAction =+
  99.    read-syms DriversExistDlg$(!STF_LANGUAGE)
  100.    ui start "DriversExist"
  101.    ifstr(i) $(DLGEVENT) == "DLGBUTTON0" ; Choose to install
  102.        ui pop 1
  103.        Shell "" InstallOption $(STF_LANGUAGE) "OEMIR" $(CurDir) "YES" "YES" "YES"
  104.    else-ifstr(i) $(DLGEVENT) == "DLGBUTTON1" ; choose to de-install
  105.        ui pop 1
  106.        Shell "" DeInstallOption $(STF_LANGUAGE) "OEMIR" $(CurDir) "YES" "YES" "YES"
  107.    else-ifstr(i) $(DLGEVENT) == "BACK"
  108.        ui pop 1
  109.        read-syms UserCancel$(!STF_LANGUAGE)
  110.        ui start "SureToCancel?"
  111.        ui pop 1
  112.        ifstr(i) $(DLGEVENT) == "NO"
  113.            goto UserAction
  114.        endif
  115.    endif
  116.  
  117.    EndWait
  118.  
  119.    ifstr(i) $($R0) == STATUS_SUCCESSFUL
  120.       read-syms SetupCompleteDlg$(STF_LANGUAGE)
  121.  
  122.       ui start "SetupComplete"
  123.  
  124.       ifstr(i) $(DLGEVENT) == "CONTINUE"
  125.          ui pop 1
  126.          goto rebootend
  127.       else
  128.          ui pop 1
  129.          goto end
  130.       endif
  131.    else
  132.       ; may need to let user knows that the setup has failed !!
  133.       ; ????????????????
  134.  
  135.       goto end
  136.    endif
  137.  
  138. rebootend =+
  139.    set Reboot = YES
  140.    install   Install-Shutdown
  141.  
  142. end =+
  143.    install   FreeSetupLibrary
  144.    exit
  145.  
  146. ;---------------------------------------------------------------------------
  147. ; 0.  Introduction
  148. ;
  149. ; There are three drivers to installed in addition to three VDD Dlls
  150. ; Three virtual device drivers DLLs are:
  151. ;    - IBMIR.dll     (16-bit, loaded by TranXit, a 16 bit IR application)
  152. ;    - IRDA_DLL.DLL  (16-bit, loaded by IBMIR.DLL)
  153. ;    - IRVDD.DLL     (32-bit, loaded by IRDA_DLL.DLL)
  154. ;
  155. ; These three drivers are:
  156. ;    - Ir Communication (one and only and is shared with RAS)
  157. ;    - Ir Protocol (one and only)
  158. ;    - Ir Physical (this can vary depend on the DMA chip used for the IrCom port)
  159. ;
  160. ;---------------------------------------------------------------------------
  161.  
  162. [Identification]
  163.     OptionType = DRIVER
  164.  
  165. [LanguagesSupported]
  166.     ENG
  167.  
  168. [Options]
  169.     "OEMIR"     = oemir
  170.  
  171. [OptionsTextENG]
  172.     "OEMIR" = "IBM Infrared Data Association Drivers"
  173.  
  174. [Drivers]
  175.     oemir = !SERVICE_KERNEL_DRIVER, "IRDA", !SERVICE_ERROR_NORMAL, 17, %SystemRoot%\System32\IoLogMsg.dll , 7
  176.  
  177. ;---------------------------------------------------------------------------
  178. ; 1. Identify
  179. ;
  180. ; DESCRIPTION:   To verify that this INF deals with the same type of options
  181. ;                as we are choosing currently.
  182. ;
  183. ; INPUT:         None
  184. ;
  185. ; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL
  186. ;                $($R1): Option Type (COMPUTER ...)
  187. ;                $($R2): Diskette description
  188. ;---------------------------------------------------------------------------
  189.  
  190. [Identify]
  191.     read-syms Identification
  192.  
  193.     set Status     = STATUS_SUCCESSFUL
  194.     set Identifier = $(OptionType)
  195.     set Media      = #("Source Media Descriptions", 1, 1)
  196.  
  197.     Return $(Status) $(Identifier) $(Media)
  198.  
  199. ;------------------------------------------------------------------------
  200. ; 2. ReturnOptions:
  201. ;
  202. ; DESCRIPTION:   To return the option list supported by this INF and the
  203. ;                localised text list representing the options.
  204. ;
  205. ;
  206. ; INPUT:         $($0):  Language used. ( ENG | FRN | ... )
  207. ;
  208. ; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL |
  209. ;                                STATUS_NOLANGUAGE
  210. ;                                STATUS_FAILED
  211. ;
  212. ;                $($R1): Option List
  213. ;                $($R2): Option Text List
  214. ;------------------------------------------------------------------------
  215. [ReturnOptions]
  216.     set Status         = STATUS_FAILED
  217.     set OptionList     = {}
  218.     set OptionTextList = {}
  219.  
  220.     set LanguageList = ^(LanguagesSupported, 1)
  221.  
  222.     Ifcontains(i) $($0) in $(LanguageList)
  223.         goto returnoptions
  224.     else
  225.         set Status = STATUS_NOLANGUAGE
  226.         goto finish_ReturnOptions
  227.     endif
  228.  
  229. returnoptions = +
  230.     set OptionList     = ^(Options, 0)
  231.     set OptionTextList = ^(OptionsText, 1)
  232.     set Status         = STATUS_SUCCESSFUL
  233.  
  234.  
  235. finish_ReturnOptions = +
  236.     Return $(Status) $(OptionList) $(OptionTextList)
  237.  
  238. ;------------------------------------------------------------------------
  239. ; 3. InstallOption:
  240. ;
  241. ; FUNCTION:  To copy files representing Options
  242. ;            To configure the installed option
  243. ;            To update the registry for the installed option
  244. ;
  245. ; INPUT:     $($0):  Language to use
  246. ;            $($1):  OptionID to install
  247. ;            $($2):  SourceDirectory
  248. ;            $($3):  AddCopy  (YES | NO)
  249. ;            $($4):  DoCopy   (YES | NO)
  250. ;            $($5):  DoConfig (YES | NO)
  251. ;
  252. ; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
  253. ;                            STATUS_NOLANGUAGE |
  254. ;                            STATUS_USERCANCEL |
  255. ;                            STATUS_FAILED
  256. ;
  257. ; Ask user for parameters
  258. ;   return:  PortSelection
  259. ;
  260. ; Check if driver exist (re-installation)
  261. ;   if not exist, goto copy file
  262. ;   if exist, ask user to use the current or the new ones
  263. ;
  264. ; Copy files
  265. ;   (new installation or use the new drivers)
  266. ;
  267. ; Configure the registry
  268. ;   (if new or registry has been changed)
  269. ;
  270. ;------------------------------------------------------------------------
  271.  
  272. [InstallOption]
  273.     ;
  274.     ; Set default values
  275.     ;
  276.     set Status = STATUS_FAILED
  277.     set DrivesToFree = {}
  278.  
  279.     ;
  280.     ; extract parameters
  281.     ;
  282.     set Option   = $($1)
  283.     set SrcDir   = $($2)
  284.     set AddCopy  = $($3)
  285.     set DoCopy   = $($4)
  286.     set DoConfig = $($5)
  287.  
  288.     ;
  289.     ; Check if the language requested is supported
  290.     ;
  291.     set LanguageList = ^(LanguagesSupported, 1)
  292.  
  293.     Ifcontains(i) $($0) in $(LanguageList)
  294.     else
  295.         set Status = STATUS_NOLANGUAGE
  296.         goto finish_InstallOption
  297.     endif
  298.  
  299.     read-syms Strings$($0)
  300.  
  301.     ;
  302.     ; check to see if Option is supported.
  303.     ;
  304.     set OptionList = ^(Options, 0)
  305.  
  306.     ifcontains $(Option) in $(OptionList)
  307.     else
  308.         Debug-Output "Setup_IR.INF: IrDA option is not supported."
  309.         goto finish_InstallOption
  310.     endif
  311.  
  312.     Debug-Output "Setup_IR.INF: After Check Options."
  313.  
  314.     set OptionList = ""
  315.  
  316.     ;
  317.     ; Option has been defined already
  318.     ;
  319.     set Driver           =   #(Options, $(Option),   1)
  320.     set Type             = $(#(Drivers, $(Driver),   1))
  321.     set Group            =   #(Drivers, $(Driver),   2)
  322.     set ErrorControl     = $(#(Drivers, $(Driver),   3))
  323.     set Tag              =   #(Drivers, $(Driver),   4)
  324.     set EventMessageFile =   #(Drivers, $(Driver),   5)
  325.     set TypesSupported   =   #(Drivers, $(Driver),   6)
  326.  
  327.     set Start            =   $(!SERVICE_AUTO_START)
  328.  
  329.     ;
  330.     ; Code to add files to copy list
  331.     ;
  332.  
  333.     read-syms Files-DriverName
  334.  
  335.     ;set PhysicalDriver  = #(Files-IrDADrivers, irda_phy, 2)
  336.     ;set ProtocolDriver  = #(Files-IrDADrivers, ibmirpro, 2)
  337.     ;set CommDriver      = #(Files-IrDADrivers, ircomm, 2)
  338.  
  339. AddFileOption =+
  340.  
  341. ;
  342. ; Query if Irda_phy's IoBase Exist ?; No? new installation; YES? Query its IoBase Setting
  343. ;
  344.  
  345.     set ComPort  = IRPORT   ; or COMPORT
  346.     set BaseAddr = 2F8      ; or 3F8
  347.     set CfgChanged = YES
  348.  
  349.     OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Irda_phy" $(!REG_KEY_READ) Irda_PhyKey
  350.     ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) ; i.e. 0
  351.         Debug-Output "Setup_ir.inf: Failed to open Irda_Phy key"
  352.         ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to open the Irda_Phy key. New install ?"        ; New installation
  353.         ; New installation!
  354.     else
  355.         ; current version exist !!??
  356.         set CfgChanged = NO  ; if exists, set to yes only if user change existing setting.
  357.  
  358.         GetRegValue $(Irda_PhyKey) "IoBase" IoBaseList
  359.         set IoBase = *($(IoBaseList), 4)
  360.  
  361.         ifint $(IoBase) == 760 ; 760 = 0x2F8
  362.            set BaseAddr = 2F8
  363.         else
  364.            set BaseAddr = 3F8
  365.         endif
  366.  
  367.         GetRegValue $(Irda_PhyKey) "EnabledIrPort" IrEnabledList
  368.         set IrEnabled = *($(IrEnabledList), 4)
  369.  
  370.         ifint $(IrEnabled) == 0
  371.            set ComPort = COMPORT
  372.         else
  373.            set ComPort = IRPORT
  374.         endif
  375.  
  376.     endif
  377.     CloseRegKey $(Irda_PhyKey)
  378.  
  379. ;
  380. ; Ask user's for driver installation parameters
  381. ;    Returns:
  382. ;        COM1 = 3f8, IRQ4
  383. ;        COM2 = 2f8, IRQ3
  384. ;
  385.  
  386.     set CfgChanged = YES
  387.  
  388.     ; Default them to this and the physical driver will verify them (assumption)
  389.     set PortSel = IRPORT
  390.     set AddrSel = 3F8
  391.  
  392. ;
  393. ; Check to see if the drivers are already existed.
  394. ;    if already exist,
  395. ;       ask user to use either the new ones or the current ones (and do the configuration only)
  396. ;
  397. CheckDriversExist =+
  398.     set DoActualCopy = NO
  399.  
  400.     LibraryProcedure PhysicalDriverExist,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(PhysicalDriver)
  401.     ifstr(i) $(Driver1Exist) == "YES"
  402.        goto UseNewOrCurrent
  403.     endif
  404.  
  405.     LibraryProcedure ProtocolDriverExist,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(ProtocolDriver)
  406.     ifstr(i) $(ProtocolDriverExist) == "YES"
  407.        goto UseNewOrCurrent
  408.     endif
  409.  
  410.     LibraryProcedure CommDriverExist,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(CommDriver)
  411.     ifstr(i) $(CommDriverExist) == "YES"
  412.        goto UseNewOrCurrent
  413.     endif
  414.  
  415.     set DoActualCopy = YES
  416.  
  417.     goto AddFilesToList
  418.  
  419. ;
  420. ; Use the new or the current drivers ?
  421. ;
  422.  
  423. UseNewOrCurrent = +
  424.     shell "subroutn.inf" DriversExist $($0) $(String1)
  425.  
  426.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  427.         Debug-Output "Setup_IR.INF: shelling DriversExist failed"
  428.         goto finish_InstallOption
  429.     endif
  430.  
  431.     set UseCurDrivers = "NO"
  432.  
  433.     ;
  434.     ; Always update the registry weather it is a new drivers and using current drivers (setting may have changed!).
  435.     ;
  436.     ui pop 1
  437.     ifstr(i) $($R0) == STATUS_CURRENT
  438.         ; set UseCurDrivers = YES
  439.         goto DoConfigRegistry
  440.     else-ifstr(i) $($R0) == STATUS_NEW
  441.         set CfgChanged = YES
  442.         goto AddFilesToList
  443.     else-ifstr(i) $($R0) == STATUS_USERCANCEL
  444.         read-syms UserCancel$(!STF_LANGUAGE)
  445.         ui start "SureToCancel?"
  446.         ifstr(i) $(DLGEVENT) == "NO"
  447.             ui pop 1
  448.             goto UseNewOrCurrent
  449.         endif
  450.         Debug-Output "Setup_IR.INF: User cancelled IrDA installation"
  451.         goto finish_InstallOption
  452.     else
  453.         Debug-Output "Setup_IR.INF: Error reported in DriversExist routine in SUBROUTN.INF"
  454.         goto finish_InstallOption
  455.     endif
  456.  
  457. ;
  458. ; Add files to the copy list and then copy them
  459. ;
  460.  
  461. AddFilesToList = +
  462.     LibraryProcedure IRCOMMSrcExist,$(!LIBHANDLE),CheckFileExistance $(SrcDir)"\"$(CommDriver)
  463.  
  464.     ifstr(i) $(IRCOMMSrcExist) == "NO"
  465.         shell "subroutn.inf" DoAskSourceEx $(SrcDir) $(String2)
  466.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  467.             Debug-Output "IRCONFIG.INF: shelling DoAskSourceEx failed"
  468.             goto finish_InstallOption
  469.         endif
  470.  
  471.         ifstr(i) $($R0) == STATUS_SUCCESSFUL
  472.             ; New src directory
  473.             set SrcDir = $($R1)
  474.  
  475.             ifstr(i) $($R2) != ""
  476.                  set DrivesToFree = >($(DrivesToFree), $($R2))
  477.             endif
  478.         else
  479.             Debug-Output "IRCONFIG.INF: User cancelled asking source."
  480.             goto finish_InstallOption
  481.         endif
  482.  
  483.         goto AddFilesToList
  484.     else
  485.         ; add drivers and DLLs to the list
  486.         install Install-AddCopyOption
  487.  
  488.         ; Copy them
  489.         read-syms ProgressCopy$($0)
  490.         install Install-DoCopyOption
  491.  
  492.         ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE"
  493.             Debug-Output "Setup_IR:INF: Copying files failed"
  494.             goto finish_InstallOption
  495.  
  496.         else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT"
  497.             set Status = STATUS_USERCANCEL
  498.             goto finish_InstallOption
  499.         endif
  500.     endif
  501.     Debug-Output "Setup_IR.INF: After DoCopy."
  502.  
  503.  
  504. ;
  505. ; Configure the registry
  506. ;
  507.  
  508. DoConfigRegistry = +
  509.     ifstr(i) $(CfgChanged) == "YES"
  510.         ;
  511.         ; first run a privilege check on modifying the setup node
  512.         ;
  513.  
  514.         shell "registry.inf" CheckSetupModify
  515.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  516.             goto finish_InstallOption
  517.         endif
  518.  
  519.         ifstr(i) $($R0) != STATUS_SUCCESSFUL
  520.             shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Do not have administrator privilage to change the registry."
  521.             goto finish_InstallOption
  522.         endif
  523.  
  524.         set ServiceNode1  = irda_phy
  525.         set ServiceNode2  = ibmirpro
  526.         set ServiceNode3  = ircomm
  527.         set ServiceBinary1 = System32\drivers\$(PhysicalDriver)   ; #(Files-IrDADrivers, irda_phy, 2)
  528.         set ServiceBinary2 = System32\drivers\$(ProtocolDriver)   ; #(Files-IrDADrivers, ibmirpro, 2)
  529.         set ServiceBinary3 = System32\drivers\$(CommDriver)       ; #(Files-IrDADrivers, ircomm, 2)
  530.  
  531.         set ServicesValues2   = { +
  532.                 {Type,           0, $(!REG_VT_DWORD),     $(Type)                  }, +
  533.                 {Start,          0, $(!REG_VT_DWORD),     $(Start)                 }, +
  534.                 {Group,          0, $(!REG_VT_SZ),        $(Group)                 }, +
  535.                 {ErrorControl,   0, $(!REG_VT_DWORD),     $(ErrorControl)          }, +
  536.                 {Tag,            0, $(!REG_VT_DWORD),     $(Tag)                   }, +
  537.                 {DependOnService,0, $(!REG_VT_SZ),        irda_phy                 }, +
  538.                 {LsapClients,    0, $(!REG_VT_DWORD),     8                        }, +
  539.                 {LapWindowSize,  0, $(!REG_VT_DWORD),     7                        }, +
  540.                 {BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary2)        }  +
  541.                 }
  542.  
  543.         ; 3F8 is always COM1, but I will select IRQ4 ??
  544.         ifstr(i) $(AddrSel) == "3F8"
  545.             set IoBaseList  = {IoBase,  0, $(!REG_VT_DWORD), 1016}
  546.             set IrdaIrqList = {IrdaIrq, 0, $(!REG_VT_DWORD),    4}
  547.             set ComPortList = {ComPort, 0, $(!REG_VT_DWORD),    1}
  548.         else
  549.             set IoBaseList  = {IoBase,  0, $(!REG_VT_DWORD),  760}
  550.             set IrdaIrqList = {IrdaIrq, 0, $(!REG_VT_DWORD),    3}
  551.             set ComPortList = {ComPort, 0, $(!REG_VT_DWORD),    2}
  552.         endif
  553.  
  554.         ifstr(i) $(PortSel) == "COMPORT"
  555.            set EnabledIRList = {"EnabledIrPort", 0, $(!REG_VT_DWORD), 0}  ; 0 = Disabled
  556.         else
  557.            set EnabledIRList = {"EnabledIrPort", 0, $(!REG_VT_DWORD), 1}  ; 1 = Enabled
  558.         endif
  559.  
  560.         set ServicesValues1   = { +
  561.                 {Type,           0, $(!REG_VT_DWORD),     $(Type)                  }, +
  562.                 {Start,          0, $(!REG_VT_DWORD),     $(Start)                 }, +
  563.                 {Group,          0, $(!REG_VT_SZ),        $(Group)                 }, +
  564.                 {ErrorControl,   0, $(!REG_VT_DWORD),     $(ErrorControl)          }, +
  565.                 {Tag,            0, $(!REG_VT_DWORD),     $(Tag)                   }, +
  566.                 {HighSpeedBase,  0, $(!REG_VT_DWORD),     0                        }, +
  567.                 {BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary1)        }, +
  568.                 $(IoBaseList),   +
  569.                 $(IrdaIrqList),  +
  570.                 $(EnabledIRList) +
  571.                 }
  572.  
  573.         set ServicesValues3   = { +
  574.                 {Type,           0, $(!REG_VT_DWORD),     $(Type)                  }, +
  575.                 {Start,          0, $(!REG_VT_DWORD),     $(Start)                 }, +
  576.                 {Group,          0, $(!REG_VT_SZ),        $(Group)                 }, +
  577.                 {ErrorControl,   0, $(!REG_VT_DWORD),     $(ErrorControl)          }, +
  578.                 {Tag,            0, $(!REG_VT_DWORD),     $(Tag)                   }, +
  579.                 {DependOnService,0, $(!REG_VT_SZ),        ibmirpro                 }, +
  580.                 {BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary3)        }, +
  581.                 $(ComPortList) +
  582.                 }
  583.  
  584.  
  585.         ;
  586.         ; Event log
  587.         ;
  588.         set ParametersValues = ""
  589.         set DeviceValues     = {}
  590.         set EventLogValues   = { +
  591.                 {EventMessageFile, 0, $(!REG_VT_EXPAND_SZ), $(EventMessageFile) }, +
  592.                 {TypesSupported,   0, $(!REG_VT_DWORD),     $(TypesSupported)   }  +
  593.                 }
  594.  
  595.         shell "registry.inf"  MakeServicesEntry $(ServiceNode1)     +
  596.                                                 $(ServicesValues1)  +
  597.                                                 $(ParametersValues) +
  598.                                                 $(DeviceValues)     +
  599.                                                 $(EventLogValues)   +
  600.                                                 Parameters
  601.  
  602.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  603.             Debug-Output "Setup_IR.INF: Couldn't execute MakeServicesEntry in registry.inf"
  604.             goto finish_InstallOption
  605.         endif
  606.  
  607.         ifstr(i) $($R0) != STATUS_SUCCESSFUL
  608.             Debug-Output "Setup_IR.INF: MakeServicesEntry failed for IrDA"
  609.             goto finish_InstallOption
  610.         endif
  611.  
  612.  
  613.         shell "registry.inf"  MakeServicesEntry $(ServiceNode2)     +
  614.                                                 $(ServicesValues2)  +
  615.                                                 $(ParametersValues) +
  616.                                                 $(DeviceValues)     +
  617.                                                 $(EventLogValues)   +
  618.                                                 Parameters
  619.  
  620.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  621.             Debug-Output "Setup_IR.INF: Couldn't execute MakeServicesEntry in registry.inf"
  622.             goto finish_InstallOption
  623.         endif
  624.  
  625.         ifstr(i) $($R0) != STATUS_SUCCESSFUL
  626.             Debug-Output "Setup_IR.INF: MakeServicesEntry failed for IrDA"
  627.             goto finish_InstallOption
  628.         endif
  629.  
  630.  
  631.         shell "registry.inf"  MakeServicesEntry $(ServiceNode3)     +
  632.                                                 $(ServicesValues3)  +
  633.                                                 $(ParametersValues) +
  634.                                                 $(DeviceValues)     +
  635.                                                 $(EventLogValues)   +
  636.                                                 Parameters
  637.  
  638.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  639.             Debug-Output "Setup_IR.INF: Couldn't execute MakeServicesEntry in registry.inf"
  640.             goto finish_InstallOption
  641.         endif
  642.  
  643.         ifstr(i) $($R0) != STATUS_SUCCESSFUL
  644.             Debug-Output "Setup_IR.INF: MakeServicesEntry failed for IrDA"
  645.             goto finish_InstallOption
  646.         endif
  647.  
  648.  
  649.         ;
  650.         ; Open serial key to disable the user selected serial port
  651.         ;
  652.         OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters" $(!REG_KEY_ALL_ACCESS) SerialParamKey
  653.         ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) ; 0 ; "REG_ERROR_SUCCESS"
  654.                Debug-Output "Setup_ir.inf: Failed to open Serial key"
  655.                shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to open Serial Param key"
  656.                goto finish_InstallOption
  657.         endif
  658.  
  659.  
  660.         set CreateInfraRedPort = YES
  661.         EnumRegKey $(SerialParamKey) SerialParamSubKeyList
  662.  
  663.         ForListDo $(SerialParamSubKeyList)
  664.             set SerialPortName = *($($),1)
  665.  
  666.             OpenRegKey $(SerialParamKey) "" $(SerialPortName) $(!REG_KEY_ALL_ACCESS) SerialKey
  667.             ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  668.                 Debug-Output "Setup_ir.inf: Failed to open Serial key"
  669.                 shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to open Serial key "$(SerialPortName)
  670.             else
  671.                 GetRegValue $(SerialKey) "DosDevices" DosDevicesPort
  672.                 ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) ; i.e. 0
  673.                     shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "DosDevices does not exist in "$(SerialPortName)
  674.                 else
  675.                    set DosDevice = *($(DosDevicesPort),4)
  676.                    ; We found the port that we want to disable.
  677.                    ifstr(i) $(DosDevice) == "COM1"
  678.                       ; we want the infrared port key to be created so it can never
  679.                       ; be accidentally delted by the user from the control panel applet:PORT.
  680.                       ; set CreateInfraRedPort = NO
  681.                       set DisabledPortList = {"DisablePort",0,$(!REG_VT_DWORD), 1}
  682.                       SetRegValue $(SerialKey) $(DisabledPortList)
  683.  
  684.                       ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Added DisablePort=1 to ..\Parmeters\"$(SerialPortName)
  685.                    endif
  686.                 endif
  687.             endif
  688.             CloseRegKey $(SerialKey)
  689.         EndForListDo
  690.  
  691.  
  692.         ifstr(i) CreateInfraRedPort == NO
  693.             CloseRegKey $(SerialParamKey)
  694.             set Status = STATUS_SUCCESSFUL
  695.             goto Finish_InstallOption
  696.         endif
  697.  
  698.  
  699.         CreateRegKey $(SerialParamKey) {"InfraRedPort",0,GenericClass} "" $(!REG_KEY_SET_VALUE) 0 InfraPortKey
  700.         ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  701.                ifstr(i) $(InfraPortKey) == ""
  702.                   OpenRegKey $(SerialParamKey) "" "InfraRedPort" $(!REG_KEY_SET_VALUE) InfraPortKey
  703.                   ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  704.                        CloseRegKey $(SerialParamKey)
  705.                        Debug-Output "Setup_ir.inf: Failed to open InfraRedPort key"
  706.                        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to open InfraRedPort key"
  707.                        goto finish_InstallOption
  708.                   endif
  709.                   ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "InfraRedPort already exist.  Ready to over-write!"
  710.                else
  711.                   CloseRegKey $(SerialParamKey)
  712.                   Debug-Output "Setup_ir.inf: Failed to create InfraRedPort key"
  713.                   shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to create InfraRedPort key"
  714.                   goto finish_InstallOption
  715.                endif
  716.         endif
  717.  
  718.  
  719.         SetRegValue $(InfraPortKey) {"DisablePort",0,$(!REG_VT_DWORD), 1}
  720.         ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  721.                CloseRegKey $(InfraPortKey)
  722.                Debug-Output "Setup_ir.inf: Failed to create DisablePort value"
  723.                shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to create DisablePort value"
  724.                goto finish_InstallOption
  725.         endif
  726.  
  727.         ; Disable this com port from being initialized by the serial driver and let IR driver initialze it
  728.         SetRegValue $(InfraPortKey) {"DosDevices",0,$(!REG_VT_SZ), "COM1"}
  729.         SetRegValue $(InfraPortKey) {"PortAddress",0,$(!REG_VT_DWORD), 1016}  ; 0x3f8 = 1016
  730.         SetRegValue $(InfraPortKey) {"Interrupt",0,$(!REG_VT_DWORD), 4}
  731.  
  732.         CloseRegKey $(SerialParamKey)
  733.  
  734.     endif
  735.  
  736.     set Status = STATUS_SUCCESSFUL
  737.  
  738. finish_InstallOption = +
  739.  
  740.     ForListDo $(DrivesToFree)
  741.         LibraryProcedure STATUS,$(!LIBHANDLE), DeleteNetConnection $($) "TRUE"
  742.     EndForListDo
  743.  
  744.     Return $(Status)
  745.  
  746.  
  747. [Install-AddCopyOption]
  748.  
  749.     AddSectionFilesToCopyList Files-IrDADrivers $(SrcDir) $(!STF_WINDOWSPATH)\system32\drivers
  750.     AddSectionFilesToCopyList Files-VddDlls     $(SrcDir) $(!STF_WINDOWSPATH)\system32
  751.     AddSectionFilesToCopyList Files-16BitDlls   $(SrcDir) $(!STF_WINDOWSPATH)\system
  752.     exit
  753.  
  754.  
  755. [Install-DoCopyOption]
  756.  
  757.     CopyFilesInCopyList
  758.  
  759.     exit
  760.  
  761. [Install-DeleteFilesOption]
  762.  
  763.     AddFileToDeleteList  $(!STF_WINDOWSPATH)\system32\drivers\$(PhysicalDriver)
  764.     AddFileToDeleteList  $(!STF_WINDOWSPATH)\system32\drivers\$(ProtocolDriver)
  765.     AddFileToDeleteList  $(!STF_WINDOWSPATH)\system32\drivers\$(CommDriver)
  766.  
  767.     AddFileToDeleteList  $(!STF_WINDOWSPATH)\system32\Irvdd.dll
  768.  
  769.     AddFileToDeleteList  $(!STF_WINDOWSPATH)\system\ibmir.dll
  770.     AddFileToDeleteList  $(!STF_WINDOWSPATH)\system\irda_dll.dll
  771.  
  772.     exit
  773.  
  774.  
  775.  
  776. ;---------------------------------------------------------
  777. ;
  778. ;
  779. ;
  780. ;
  781. ;
  782. ;
  783. ;
  784. ;---------------------------------------------------------
  785.  
  786. [DeInstallOption]
  787.  
  788.     set Status   = STATUS_FAILED
  789.     set Option   = OEMIR ; IrDA_Drivers
  790.  
  791.     set LanguageList = ^(LanguagesSupported, 1)
  792.     Ifcontains(i) $($0) in $(LanguageList)
  793.     else
  794.         set Status = STATUS_NOLANGUAGE
  795.         goto finish_DeInstallOption
  796.     endif
  797.     read-syms Strings$($0)
  798.  
  799.     set OptionList = ^(Options, 0)
  800.     ifcontains $(Option) in $(OptionList)
  801.     else
  802.         goto finish_DeInstallOption
  803.     endif
  804.     set OptionList = ""
  805.  
  806.  
  807.     read-syms Files-DriverName
  808.  
  809.     shell "registry.inf" RemoveServicesEntry irda_phy
  810.     shell "registry.inf" RemoveServicesEntry ibmirpro
  811.     shell "registry.inf" RemoveServicesEntry ircomm
  812.  
  813. remove_DisablePort =+
  814.     ;
  815.     ; Make the port available for the Serial driver; set DisablePort to 0
  816.     ;
  817.     OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters" $(!REG_KEY_ALL_ACCESS) SerialParamKey
  818.     ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) ; 0 ; "REG_ERROR_SUCCESS"
  819.        Debug-Output "Setup_ir.inf: Failed to open Serial key"
  820.        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to open Serial Param key"
  821.        goto finish_DeInstallOption
  822.     endif
  823.  
  824.     set DeleteInfraRedPort = YES
  825.     EnumRegKey $(SerialParamKey) SerialParamSubKeyList
  826.  
  827.     ForListDo $(SerialParamSubKeyList)
  828.         set SerialPortName = *($($),1)
  829.  
  830.         ifstr(i) $(SerialPortName) == "InfraRedPort"  ; this is unique and this subkey should be deleted!!
  831.             ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Deleting InfraRedPort subkey:"$(SerialPortName)
  832.  
  833.             DeleteRegTree $(SerialParamKey) "InfraRedPort"
  834.             ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) ; 0 ; "REG_ERROR_SUCCESS"
  835.                  Debug-Output "Setup_ir.inf: Failed to open Serial key"
  836.                  shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to delete InfraRedPort subkey."
  837.             endif
  838.         else
  839.             OpenRegKey $(SerialParamKey) "" $(SerialPortName) $(!REG_KEY_ALL_ACCESS) SerialKey
  840.             ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  841.                  Debug-Output "Setup_ir.inf: Failed to open Serial key"
  842.                  shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Failed to open Serial key "$(SerialPortName)
  843.             else
  844.                  GetRegValue $(SerialKey) "DosDevices" DosDevicesPort
  845.                  ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) ; i.e. 0
  846.                      shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "DosDevices does not exist in "$(SerialPortName)
  847.                  else
  848.                     set DosDevice = *($(DosDevicesPort),4)
  849.                     ifstr(i) $(DosDevice) == "COM1"
  850.                        set CreateInfraRedPort = NO
  851.                        set DisabledPortList = {"DisablePort",0,$(!REG_VT_DWORD), 0}  ; Set DisablePort to 0
  852.                        SetRegValue $(SerialKey) $(DisabledPortList)
  853.  
  854.                        ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Added DisablePort=0 to ..\Parmeters\"$(SerialPortName)
  855.                     endif
  856.                  endif
  857.             endif
  858.             CloseRegKey $(SerialKey)
  859.         endif
  860.     EndForListDo
  861.  
  862.     CloseRegKey $(SerialParamKey)
  863.  
  864.  
  865. delete_Drivers =+
  866.  
  867.  
  868.     install Install-DeleteFilesOption
  869.  
  870.     set Status = STATUS_SUCCESSFUL
  871.  
  872. finish_DeInstallOption =+
  873.     Return $(Status)
  874.  
  875. [Install-DoRemoval]
  876.     set Status = STATUS_FAILED
  877.  
  878.     ; Why does not work ??
  879.     ;shell "registry.inf" RemoveServicesEntry $(DriverFilename)
  880.     shell "registry.inf" ModifyServiceEntry $(DriverFilename) $(!SERVICE_DISABLED)
  881.  
  882.  
  883.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  884.         Debug-Output "Setup_IR.INF: Failed to shell RemoveServicesEntry"
  885.         return $(Status)
  886.     endif
  887.  
  888.     ifstr(i) $($R0) != STATUS_SUCCESSFUL
  889.         Debug-Output "Setup_IR.INF: Failed to disable services entry"
  890.         return $(Status)
  891.     endif
  892.  
  893.     set Status = STATUS_SUCCESSFUL
  894.     exit
  895.  
  896. ;------------------------------------------------------------------------
  897. ;  Constant data area:
  898. ;
  899. ;
  900. ;
  901. ;------------------------------------------------------------------------
  902.  
  903. [ProgressCopyENG]
  904.     ; For CopyFilesInCopyList command
  905.     ProCaption   = "Windows NT Setup"
  906.     ProCancel    = "Cancel"
  907.     ProCancelMsg = "Windows NT Infrared Drivers are not correcly installed.  Are you sure you want "+
  908.                    "to cancel copying files?"
  909.     ProCancelCap = "Setup Message"
  910.     ProText1     = "Copying:"
  911.     ProText2     = "To:"
  912.  
  913. [StringsENG]
  914.     String1 = "Infrared Devices"
  915.     String2 = "Please enter the full path of the directory containing the infrared drivers. Then choose Continue."
  916.  
  917. [Files-IrDADrivers]
  918.    irda_phy = 1,irda_phy.sys , SIZE=999
  919.    ibmirpro = 1,ibmirpro.sys , SIZE=999
  920.    ircomm   = 1,ircomm.sys , SIZE=999
  921.  
  922. [Files-VddDlls]
  923.    VDD      = 1,irvdd.dll , SIZE=999
  924.  
  925. [Files-16bitDlls]
  926.    IBMIR    = 1,ibmir.dll , SIZE=999
  927.    irda_dll = 1,irda_dll.dll , SIZE=999
  928.  
  929.  
  930. [Files-DriverName]
  931.     PhysicalDriver  = #(Files-IrDADrivers, irda_phy, 2)
  932.     ProtocolDriver  = #(Files-IrDADrivers, ibmirpro, 2)
  933.     CommDriver      = #(Files-IrDADrivers, ircomm, 2)
  934.  
  935.  
  936.