home *** CD-ROM | disk | FTP | other *** search
/ Un Siglo de Tango! / tango.iso / stp / tangoins.mst < prev   
Encoding:
Text File  |  1995-09-30  |  24.8 KB  |  703 lines

  1. ' ===================================================================
  2. ' Sierra 3
  3. ' ARCHIVO:    TANGOINS.MST
  4. ' PROYECTO:   INSTALAR (Un siglo de Tango!)   VERSION: 0.0
  5. ' CULPABLE:   Sergio D. Llorens               FECHA: 26/7/95
  6. '                                             ULTIMA MODIFICACION: 2/8/95
  7. ' DESCRIPCION: Script (mstest) para instalacion de Un siglo de Tango!
  8. ' ===================================================================
  9. '$INCLUDE 'setupapi.inc'
  10. '$INCLUDE 'msdetect.inc'
  11.  
  12. ' Dialog ID's - Definidos en dialogs.h
  13. CONST WELCOME_SCREEN              = 100
  14. CONST WELCOME_HELP                = 101
  15. CONST GENERIC_HELP                = 102
  16. CONST FIX_VGA_DRIVER              = 150
  17. CONST FIX_VGA_HELP                = 151
  18. CONST SYSERROR_DOS_WIN            = 200
  19. CONST SYSERROR_VGA                = 301
  20. CONST SYSERROR_VIEWER             = 400
  21. CONST SYSWAIT_MPC                 = 500
  22. CONST SYSCHECK_MPC                = 501
  23. CONST SYSDISPLAY_MPC              = 502
  24. CONST DELETE_OLD_CINEMANIA92      = 600
  25. CONST PROGRAM_GROUP               = 700
  26. CONST PROGRAM_GROUP_BOXLIST       = 701
  27. CONST ASK_HOTSPOT                 = 800
  28. CONST FILLING_CARD                = 1000
  29. CONST INSTALL_FONTS               = 1100
  30. CONST INSTALL_DIR                 = 1200
  31. CONST INSTALL_DIR_HELP            = 1201
  32. CONST SYSERROR_DISKFULL           = 1203
  33. CONST TOOBIG                      = 3000
  34. CONST SYSERROR_BADPATH            = 4000
  35. CONST SETUPQUIT_CONFIRM           = 10000
  36. CONST SETUPQUIT_FAILURE           = 10001
  37. CONST SETUPQUIT_OVERVIEW          = 10002
  38. CONST SETUPQUIT_QUIT              = 10003
  39. CONST RESTART_WINDOWS             = 10020
  40.  
  41. ' Bitmaps IDs - Definidos en dialogs.rc
  42. CONST WELCOME_BMP      = 1
  43.  
  44. ' De WINDOWS.H
  45. CONST WS_VISIBLE       = &H10000000
  46. CONST WS_BORDER        = &H00800000
  47. CONST WS_CLIPCHILDREN  = &H02000000
  48. CONST GWL_STYLE        = -16
  49. CONST SW_SHOWMAXIMIZED = 3
  50.  
  51. ' Definiciones globales
  52. GLOBAL DEST$        'directorio final de Un siglo de Tango!
  53. GLOBAL S3SYSDIR$    'directorio final de librerias de Sierra 3 Multimedia
  54. GLOBAL CUIDLL$      'CUI dll
  55. GLOBAL PROGGRP$     'default program group
  56. GLOBAL CREATEICON%  'creacion de iconos en program group
  57. GLOBAL VIEWERDIR$   'directorio de Viewer
  58. GLOBAL SRCDIR$      'directorio raiz de instalar
  59. GLOBAL WININI$      'path completo de WIN.INI
  60. GLOBAL SYSINI$      'path completo de SYSTEM.INI
  61. GLOBAL ShouldRestart% 'indica si se debe re-arrancar Windows luego de instalar
  62. GLOBAL ReducedInst% ' indica instalacion reducida
  63. GLOBAL VGADRV%      'indica si VGAPAL driver esta instalado
  64. GLOBAL Misc%
  65.  
  66. ' Prototipos de SUBs
  67. DECLARE SUB Install
  68. DECLARE SUB Init3dCtrls
  69.  
  70. ' Prototipos de funciones
  71. DECLARE FUNCTION GetModuleHandle LIB "kernel" (a$) AS INTEGER
  72. DECLARE FUNCTION WinExec LIB "kernel" (a$, b%) AS INTEGER
  73. DECLARE FUNCTION GetActiveWindow LIB "user" AS INTEGER
  74. DECLARE FUNCTION ShowWindow LIB "user" (a%, b%) AS INTEGER
  75. DECLARE FUNCTION MessageBox  lib "user" (hwnd%, lpstr$, lpstr$, uint%) as integer
  76. DECLARE FUNCTION SetWindowLong LIB "user" (hWnd%, offset%, style&) AS LONG
  77.  
  78. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  79. DECLARE FUNCTION GetFilename (szPath$) AS STRING
  80. DECLARE FUNCTION UpdateSize (szSection$, szKey$, szDestDir$) AS LONG
  81. DECLARE FUNCTION WillCopy (szSection$, szKey$, szDestDir$) AS INTEGER
  82. DECLARE FUNCTION CmpVersion (VerOld$, VerNew$) AS INTEGER
  83. DECLARE FUNCTION IsDateLater (DateOld$, DateNew$) AS INTEGER
  84.  
  85. GOTO INIT
  86.  
  87. '$INCLUDE 'stcheck.inc'
  88.  
  89. '----------------------------------------------------------------------------
  90. ' Inicializacion
  91. '----------------------------------------------------------------------------
  92. INIT:
  93.  
  94.      hWnd%=HwndFrame()
  95.      ij&=SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN)
  96.      j%=ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  97.  
  98.      SRCDIR$ = GetSymbolValue("STF_SRCDIR")
  99.      WININI$ = MakePath(GetWindowsDir(), "WIN.INI")
  100.      SYSINI$ = MakePath(GetWindowsDir(), "SYSTEM.INI")
  101.  
  102. '    Init3dCtrls
  103.  
  104.      CUIDLL$ = "mscuistf.dll"    'CUI dll
  105.      ShouldRestart% = 0          'se vuelve TRUE si se instalan DRVs
  106.  
  107.      SetBitmap CUIDLL$, WELCOME_BMP
  108.      SetTitle "Instalaci≤n de Un siglo de Tango!"
  109.  
  110.      ' Busca path a TANGOINST.INF
  111.      szInf$ = GetSymbolValue("STF_SRCINFPATH")
  112.      IF szInf$ = "" THEN
  113.           szInf$ = GetSymbolValue("STF_CWDDIR") + "TANGOINS.INF"
  114.      END IF
  115.  
  116.      ReadInfFile szInf$
  117.  
  118.      ERR = 0
  119.  
  120. '--------------------------------------------------------------------------
  121. ' Verifica el sistema
  122. '--------------------------------------------------------------------------
  123.      GoSub SYSCHECK
  124.  
  125. '--------------------------------------------------------------------------
  126. ' Inicializacion de pantalla de bienvenida
  127. '--------------------------------------------------------------------------
  128. WELCOME:
  129.      ' Muestra dialogo WELCOME con WELCOME_HELP como ayuda actual
  130.      sz$ = UIStartDlg(CUIDLL$, WELCOME_SCREEN, "FWelcomeDlgProc", WELCOME_HELP, "FHelpDlgProc")
  131.      IF sz$ = "REACTIVATE" THEN
  132.           GOTO WELCOME
  133.      ELSEIF sz$ = "CONTINUE" THEN
  134.           UIPop 1
  135.      ELSE
  136.           GOSUB DIAG_QUIT    ' se oprimio "Salir"
  137.           GOTO WELCOME       ' no se quiere salir, continua instalacion
  138.      END IF
  139.  
  140. '--------------------------------------------------------------------------
  141. ' Chequea performance
  142. '--------------------------------------------------------------------------
  143. '     GoSub SYSCHECK         ' controlar FCancel!
  144.  
  145. '--------------------------------------------------------------------------
  146. ' Se asegura que Viewer no este en ejecucion
  147. '--------------------------------------------------------------------------
  148. ISVIEWERRUNNING:
  149.      MVrunning% = GetModuleHandle("MVIEWER2")
  150.  
  151.      IF (MVrunning% <> 0) THEN
  152.           VIEWERISRUNNING:
  153.           ShouldRestart% = 1
  154.      END IF
  155.  
  156. '--------------------------------------------------------------------------
  157. ' VGAPAL.DRV esta instalado?
  158. '--------------------------------------------------------------------------
  159.      VGADRV% = 0
  160.           IF UCase$(GetIniKeyString (SYSINI$, "Boot", "Display.Drv")) = "VGAPAL.DRV" THEN
  161.           VGADRV% = 1    ' cambiar a VGA
  162.      END IF
  163.  
  164. '--------------------------------------------------------------------------
  165. ' Pregunta al usuario el directorio donde instalar Un siglo de Tango!
  166. '--------------------------------------------------------------------------
  167. ASKDIRECTORY:
  168.      DEST$ = "C:\S3TANGO"          'default directorio destino
  169.      SetSymbolValue "EditTextIn", DEST$
  170.      SetSymbolValue "EditFocus", "ALL"
  171.      ' Instalacion normal por default
  172.      ReducedInst% = 0
  173.      SetSymbolValue "InstType", "NORMAL"
  174.  
  175. GETDIRECTORY:
  176.      ' Obtiene directorio donde instalar
  177.      sz$ = UIStartDlg(CUIDLL$, INSTALL_DIR, "FInstallDirDlgProc", INSTALL_DIR_HELP, "FHelpDlgProc")
  178.      IF sz$ = "REACTIVATE" THEN
  179.           GOTO GETDIRECTORY
  180.      ELSEIF sz$ = "EXIT" THEN
  181.           GOSUB DIAG_QUIT
  182.           GOTO GETDIRECTORY
  183.      END IF
  184.  
  185.      DEST$ = GetSymbolValue("EditTextOut")
  186.  
  187.      szInstType$ = GetSymbolValue("InstType")
  188.      IF (szInstType$ = "NORMAL") THEN
  189.           ReducedInst% = 0
  190.      ELSE
  191.           ReducedInst% = 1
  192.      ENDIF
  193.  
  194.      IF IsDirWritable(DEST$) = 0 THEN
  195.           GOSUB BADPATH
  196.           GOTO GETDIRECTORY
  197.      END IF
  198.  
  199.      UIPop 1
  200.  
  201. '--------------------------------------------------------------------------
  202. ' Pregunta por el Program Group donde colocar a Un siglo de Tango!
  203. '--------------------------------------------------------------------------
  204. ' Chequea si el usuario esta usando Program Manager como Shell
  205.  
  206.      PROGGRP$ = ""
  207.      sz$ = GetIniKeyString(SYSINI$, "boot", "shell")
  208.      IF sz$ <> "progman.exe" THEN
  209.           CREATEICON% = 1
  210.      END IF
  211.  
  212. ASKPROGMAN:
  213. '     ' Obtiene el nombre del Program Group donde instalar Un siglo de Tango!
  214. '     sz$ = UIStartDlg(CUIDLL$, PROGRAM_GROUP, "FPrgGroupDlgProc", GENERIC_HELP, "FHelpDlgProc")
  215. '     IF sz$ = "REACTIVATE" THEN
  216. '          GOTO ASKPROGMAN
  217. '     ELSEIF sz$ = "EXIT" THEN
  218. '          GOSUB DIAG_QUIT
  219. '          GOTO  ASKPROGMAN
  220. '     ELSEIF sz$ = "BACK" THEN
  221. '          UIPop 1
  222. '          GOTO GETDIRECTORY
  223. '     END IF                   ' puede llegar a ser un nombre valido
  224. '
  225. '     UIPop 1
  226. '
  227. '     STRIP_PAREN:
  228. '     N = INSTR(1, sz$, """")  ' Busca "
  229. '     IF N > 0 THEN
  230. '        sz$ = MID$(sz$,1,N-1) + MID$(sz$,N+1,100)
  231. '        GOTO STRIP_PAREN
  232. '     END IF
  233.  
  234. sz$ = ""
  235.      IF sz$ = "" THEN
  236.         sz$ = "Sierra 3 Multimedia"
  237.      END IF
  238.      PROGGRP$ = """" + sz$ + """"
  239.      SetSymbolValue "TARGETGROUP", PROGGRP$
  240.      CREATEICON% = 1
  241.  
  242. BEGIN_INSTALL:
  243.  
  244.      Install
  245.  
  246. '--------------------------------------------------------------------------
  247. ' Verifica si Windows tiene que ser reiniciado
  248. '--------------------------------------------------------------------------
  249. RESTART_WINDOWS_AGAIN:
  250.      IF ShouldRestart% THEN
  251.           sz$ = UIStartDlg(CUIDLL$, RESTART_WINDOWS, "FRestartDlgProc", 0, "")
  252.           IF sz$ = "REACTIVATE" THEN
  253.                 GOTO RESTART_WINDOWS_AGAIN
  254.           ELSEIF sz$ = "EXIT" THEN
  255.                 GOSUB DIAG_QUIT
  256.                 GOTO RESTART_WINDOWS_AGAIN
  257.           ELSEIF sz$ = "OK" THEN
  258.                 ForceRestartOn
  259.                 result% = ExitExecRestart ()
  260.                 ' Si ExitExitRestart retorna, no todas las aplicaciones quisieron
  261.                 ' cerrarse
  262.                 GOTO RESTART_WINDOWS_AGAIN
  263.           END IF
  264.      END IF
  265.      UIPop 1
  266.  
  267. '--------------------------------------------------------------------------
  268. ' Permite ver notas, ejecutar Un siglo de Tango!, ver Overview, o salir a Windows
  269. '--------------------------------------------------------------------------
  270. OVERVIEW:
  271.      sz$ = UIStartDlg(CUIDLL$, SETUPQUIT_OVERVIEW, "FOverviewDlgProc", 0, "")
  272.      IF sz$ = "REACTIVATE" THEN
  273.           GOTO OVERVIEW
  274.      ELSEIF sz$ = "README" THEN
  275.           RUN MakePath(GetWindowsDir(), "NOTEPAD.EXE") + " " + MakePath(SRCDIR$, "notas.txt") ', NOWAIT
  276.           GOTO OVERVIEW
  277.      ELSEIF sz$ = "RUN_TANGO" THEN
  278.                   ' Limpieza final
  279.                   UIPopAll
  280.                   IF RestartListEmpty () THEN
  281.                       result% = ExitExecRestart ()
  282.                   ENDIF
  283.           demo% = ShowWindow (GetActiveWindow(), 0) ' oculta setup
  284.           ' Cambiamos de directorio
  285.           OldDrive$ = CurDir$
  286.           ChDrive Mid$(DEST$, 1, 2)
  287.           ChDir DEST$
  288.           RUN MakePath(DEST$, "s3tango.exe /INSTALLCALL"), NOWAIT
  289.           ChDrive Mid$(OldDrive$, 1, 2)
  290.           ChDir OldDrive$
  291.                   GOTO QUIT2
  292.      END IF
  293.  
  294. '--------------------------------------------------------------------------
  295. ' Handlers de Quit y errores
  296. '--------------------------------------------------------------------------
  297. QUIT:
  298.      ON ERROR GOTO ERRQUIT
  299.  
  300.      IF ERR = 0 THEN
  301.          GOTO QUIT2
  302.      END IF
  303. QUIT_FAILURE:
  304.      dlg% = SETUPQUIT_FAILURE
  305.      UIPopAll    ' cierra todos los otros dialogos
  306.      sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", 0, "")
  307.      IF sz$ = "REACTIVATE" THEN
  308.           GOTO QUIT_FAILURE
  309.      END IF
  310. QUIT2:
  311.      UIPop 1
  312.  
  313.      END
  314.  
  315. ERRQUIT:
  316.      i% = DoMsgBox("El programa de instalaci≤n estß da±ado, comunφquese con Sierra 3 para obtener asistencia.", "Mensaje de Instalaci≤n de Un siglo de Tango!", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  317.      END
  318.  
  319. '--------------------------------------------------------------------------
  320. ' Mensajes de error varios
  321. '--------------------------------------------------------------------------
  322. DIAG_QUIT:
  323.      sz$ = UIStartDlg(CUIDLL$, SETUPQUIT_CONFIRM, "FInfoDlgProc", 0, "")
  324.  
  325.      IF sz$ = "CONTINUE" THEN
  326.           UIPopAll
  327.           'ERROR STFQUIT
  328.           END
  329.      ELSEIF sz$ = "REACTIVATE" THEN
  330.           GOTO DIAG_QUIT
  331.      ELSE
  332.           UIPop 1
  333.      END IF
  334.      RETURN
  335.  
  336. BADPATH:
  337.      sz$ = UIStartDlg(CUIDLL$, SYSERROR_BADPATH, "FInfoDlgProc", 0, "")
  338.      IF sz$ = "REACTIVATE" THEN
  339.           GOTO BADPATH
  340.      END IF
  341.      UIPop 1
  342.      RETURN
  343.  
  344. DRIVEISFULL:
  345.      sz$ = UIStartDlg(CUIDLL$, SYSERROR_DISKFULL, "FInfoDlgProc", 0, "")
  346.      IF sz$ = "REACTIVATE" THEN
  347.           GOTO DRIVEISFULL
  348.      ELSEIF sz$ = "EXIT" THEN
  349.           dlg% = SETUPQUIT_FAILURE
  350.           GOTO QUIT_FAILURE
  351.      END IF
  352.      UIPop 1
  353.      RETURN
  354.  
  355. '--------------------------------------------------------------------------
  356. ' Verifica si el archivo ya existe en el HD
  357. ' ARGS: Seccion en INF file, clave del archivo, y directorio destino
  358. ' RET:  Tama#o del archivo si necesita ser copiado, o 0
  359. '--------------------------------------------------------------------------
  360. FUNCTION UpdateSize (szSection$, szKey$, szDestDir$) STATIC AS LONG
  361.      IF WillCopy (szSection$, szKey$, szDestDir$) THEN
  362.           UpdateSize = GetSectionKeySize (szSection$, szKey$)
  363.      ELSE
  364.     UpdateSize = 0
  365.      END IF
  366. END FUNCTION
  367.  
  368. '--------------------------------------------------------------------------
  369. ' Verifica si CTL3D.DLL ya existe en el directorio destino, si no, la copia
  370. '--------------------------------------------------------------------------
  371. SUB Init3dCtrls STATIC
  372.      szDest$ = MakePath(GetWindowsSysDir(), "CTL3D.DLL")
  373.      szSrc$  = MakePath(SRCDIR$, "DRV\MV\CTL3D.DLL")
  374.      IF NOT DoesFileExist (szDest$, femRead) THEN
  375.           CopyFile szSrc$, szDest$, cmoOverWrite, 0
  376.      END IF
  377. END SUB
  378.  
  379. '--------------------------------------------------------------------------
  380. ' Construye la lista de copia, y realiza todas las operaciones de
  381. ' instalacion.
  382. '--------------------------------------------------------------------------
  383. SUB Install STATIC
  384.      WinDir$ = GetWindowsDir()
  385.      S3SYSDIR$ = WinDir$ + "S3SYS"
  386.      WinSysDir$ = GetWindowsSysDir()
  387.      SetRestartDir DEST$
  388.  
  389.      sz$ = UIStartDlg (CUIDLL$, FILLING_CARD, "FFillCardDlgProc", 0, "")
  390.  
  391.      COPY_SIZE& = 0    ' Si cambia luego de copiar, hay que reiniciar Windows
  392.  
  393.      ' Copia archivos de Viewer
  394.      AddSectionFilesToCopyList "Viewer", SRCDIR$, WinSysDir$
  395.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "CTL3D", WinSysDir$)
  396.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVAPI2", WinSysDir$)
  397.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVBMP2", WinSysDir$)
  398.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVBRKR2", WinSysDir$)
  399.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVFS2", WinSysDir$)
  400.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVFTSUI2", WinSysDir$)
  401.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVMCI2", WinSysDir$)
  402.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVSRCH2", WinSysDir$)
  403.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVTITLE2", WinSysDir$)
  404.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Viewer", "MVIEWER2", WinSysDir$)
  405.  
  406.      ' Copia S3SYS
  407.      AddSectionFilesToCopyList "S3Sys", SRCDIR$, S3SYSDIR$
  408.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("S3Sys", "S3VCTRL", S3SYSDIR$)
  409.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("S3Sys", "S3VEW", S3SYSDIR$)
  410.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("S3Sys", "S3VKRNL", S3SYSDIR$)
  411.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("S3Sys", "S3VSRCH", S3SYSDIR$)
  412.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("S3Sys", "S3ANI", S3SYSDIR$)
  413.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("S3Sys", "S3WAVE", S3SYSDIR$)
  414.  
  415.      ' Tango reducido
  416.      AddSectionFilesToCopyList "Tango Reducido", SRCDIR$, DEST$
  417.      'COPY_SIZE& = COPY_SIZE& + GetSectionKeySize("Tango Reducido", "TANGOLIB")
  418.      'COPY_SIZE& = COPY_SIZE& + GetSectionKeySize("Tango Reducido", "TANGO")
  419.             'COPY_SIZE& = COPY_SIZE& + GetSectionKeySize("Tango Reducido", "TANGODAT")
  420.  
  421.      ' Tango normal
  422.      IF ReducedInst% = 0 THEN
  423.           AddSectionFilesToCopyList "Tango Normal", SRCDIR$, DEST$
  424.                   'COPY_SIZE& = COPY_SIZE& + GetSectionKeySize("Tango Normal", "3LOMAS")  
  425.           'COPY_SIZE& = COPY_SIZE& + GetSectionKeySize("Tango Normal", "TUI")
  426.           
  427.      ENDIF
  428.  
  429.      ' Copia drivers
  430.      AddSectionFilesToCopyList "Drivers", SRCDIR$, WinSysDir$
  431.      OLD_SIZE& = COPY_SIZE&
  432.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "AAPLAY", WinSysDir$)
  433.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "AAVGA", WinSysDir$)
  434.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "AVIFILE", WinSysDir$)
  435.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "COMPOBJ", WinSysDir$)
  436.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MCIAAP", WinSysDir$)
  437.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MCIAVI", WinSysDir$)
  438.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSVIDC", WinSysDir$)
  439.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "ICCVID", WinSysDir$)
  440.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSVIDEO", WinSysDir$)
  441.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSACM", WinSysDir$)
  442.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSACMDLL", WinSysDir$)
  443.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSADPCM", WinSysDir$)
  444.  
  445.      ' Si se instalan drivers, hay que re-inicializar Windows
  446.      IF OLD_SIZE& <> COPY_SIZE& THEN
  447.         ShouldRestart% = 1
  448.      END IF
  449.  
  450. DISK_SPACE_CHECK:
  451.      ' Si no hay espacio suficiente en HD
  452.      IF GetCopyListCost ("", "", "") <> 0 THEN
  453.  
  454. WINDRIVEISFULL:
  455.           sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfoDlgProc", 0, "")
  456.           IF sz$ = "REACTIVATE" THEN
  457.                 GOTO WINDRIVEISFULL
  458.           END IF
  459.           UIPopAll
  460.           END
  461.      ENDIF
  462.  
  463.  
  464.      ' Verifica si VGAPAL.DRV deberia ser reemplazada por VGA.DRV:
  465.      IF VGADRV% = 1 THEN
  466.           CreateIniKeyValue SYSINI$, "Boot", "Display.Drv", "VGA.DRV", cmoOverwrite
  467.           CreateIniKeyValue SYSINI$, "Boot.Description", "Display.Drv", "VGA", cmoOverwrite
  468.           ShouldRestart% = 1
  469.      END IF
  470.  
  471.      SetCopyGaugePosition 25, 120
  472.  
  473.      CopyFilesInCopyList
  474.      UIPop 1
  475.  
  476.      IF RestartListEmpty() = 0 THEN
  477.         ShouldRestart% = 1
  478.      END IF
  479.  
  480.      ' Setea drivers en SYSTEM.INI
  481.      CreateIniKeyValue SYSINI$, "mci", "Animation",   "mciaap.drv", cmoOverwrite
  482.      CreateIniKeyValue SYSINI$, "mci", "AVIVideo",   "mciavi.drv", cmoOverwrite
  483.      CreateIniKeyValue SYSINI$, "drivers", "Wavemapper", "msacm.drv", cmoOverwrite
  484.      CreateIniKeyValue SYSINI$, "drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite
  485.      CreateIniKeyValue SYSINI$, "drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
  486.      CreateIniKeyValue SYSINI$, "drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite
  487.      CreateIniKeyValue SYSINI$, "msacm", "Install", "msadpcm.acm", cmoOverwrite
  488.  
  489.      ' Setea entradas en WIN.INI
  490.      CreateIniKeyValue WININI$, "mci extensions", "flc", "Animation", cmoOverwrite
  491.      CreateIniKeyValue WININI$, "mci extensions", "avi", "AVIVideo", cmoOverwrite
  492.  
  493.      ' Setea entradas en S3TANGO.INI
  494.      TangoIni$ = MakePath(WinDir$, "s3tango.ini")
  495.      CreateIniKeyValue TangoIni$, "Archivos", "tm", SRCDIR$ + "DRV\TANGO\TM.MVB", cmoOverwrite
  496.      CreateIniKeyValue TangoIni$, "Archivos", "th", SRCDIR$ + "DRV\TANGO\TH.MVB", cmoOverwrite
  497.      IF ReducedInst% THEN
  498.           CreateIniKeyValue TangoIni$, "Archivos", "tui", SRCDIR$ + "DRV\TANGO\TUI.MVB", cmoOverwrite
  499.      ELSE
  500.           CreateIniKeyValue TangoIni$, "Archivos", "tui", DEST$ + "\" + "TUI.MVB", cmoOverwrite
  501.      ENDIF
  502.      CreateIniKeyValue TangoIni$, "Archivos", "midip", SRCDIR$ + "DAT", cmoOverwrite
  503.      CreateIniKeyValue TangoIni$, "Archivos", "avi", SRCDIR$ + "DAT", cmoOverwrite
  504.      CreateIniKeyValue TangoIni$, "Archivos", "aud", SRCDIR$ + "DAT", cmoOverwrite
  505.      CreateIniKeyValue TangoIni$, "Config", "CmdSnd", "1", cmoOverwrite
  506.      CreateIniKeyValue TangoIni$, "Config", "FXSnd", "1", cmoOverwrite
  507.  
  508.      ' Setea entradas en VIEWER.INI
  509.      ViewerIni$ = MakePath(WinDir$, "viewer.ini")
  510.  
  511.      temp$ = SRCDIR$ + "DRV\TANGO\" + ", por favor coloque el CD de Un siglo de Tango! en el drive " + Mid$(SRCDIR$, 1, 2)
  512.      CreateIniKeyValue ViewerIni$, "Files", "tm.mvb", temp$, cmoOverwrite
  513.      CreateIniKeyValue ViewerIni$, "Files", "th.mvb", temp$, cmoOverwrite
  514.  
  515.      temp$ = DEST$ + "\" + ", no encuentro un archivo - por favor reinstale Un siglo de Tango!"
  516.      CreateIniKeyValue ViewerIni$, "Files", "tangolib.dll", temp$, cmoOverwrite
  517.  
  518.      temp$ = S3SYSDIR$ + "\" + ", falta un archivo - por favor reinstale S3 Multimedia"
  519.      CreateIniKeyValue ViewerIni$, "Files", "s3vkrnl.dll", temp$, cmoOverwrite
  520.      CreateIniKeyValue ViewerIni$, "Files", "s3vctrl.dll", temp$, cmoOverwrite
  521.      CreateIniKeyValue ViewerIni$, "Files", "s3vew.dll", temp$, cmoOverwrite
  522.      CreateIniKeyValue ViewerIni$, "Files", "s3vsrch.dll", temp$, cmoOverwrite
  523.      CreateIniKeyValue ViewerIni$, "Un siglo de Tango!", "path", DEST$ + "\", cmoOverwrite
  524.  
  525.      temp$ = GetWindowsSysDir() + ", falta un archivo - por favor reinstale Viewer!"
  526.      CreateIniKeyValue ViewerIni$, "Files", "ctl3d.dll", temp$, cmoOverwrite
  527.      CreateIniKeyValue ViewerIni$, "Files", "mvapi2.dll", temp$, cmoOverwrite
  528.      CreateIniKeyValue ViewerIni$, "Files", "mvbmp2.dll", temp$, cmoOverwrite
  529.      CreateIniKeyValue ViewerIni$, "Files", "mvbrkr2.dll", temp$, cmoOverwrite
  530.      CreateIniKeyValue ViewerIni$, "Files", "mvfs2.dll", temp$, cmoOverwrite
  531.      CreateIniKeyValue ViewerIni$, "Files", "mvftsui2.dll", temp$, cmoOverwrite
  532.      CreateIniKeyValue ViewerIni$, "Files", "mvmci2.dll", temp$, cmoOverwrite
  533.      CreateIniKeyValue ViewerIni$, "Files", "mvsrch2.dll", temp$, cmoOverwrite
  534.      CreateIniKeyValue ViewerIni$, "Files", "mvtitle2.dll", temp$, cmoOverwrite
  535.      CreateIniKeyValue ViewerIni$, "Files", "mmp.dll", temp$, cmoOverwrite
  536.  
  537.  
  538.      ' Coloca entradas de S3SYS y Tango en WIN.INI
  539.      CreateIniKeyValue WININI$, "Sierra 3 Multimedia", "S3SysPath", S3SYSDIR$, cmoOverwrite
  540.      CreateIniKeyValue WININI$, "Un siglo de Tango!", "TangoPath", DEST$, cmoOverwrite
  541.      UIPop 1
  542.  
  543.      ' Crea Program Group
  544.      IF CREATEICON% = 1 THEN
  545.           IF PROGGRP$ = "" THEN
  546.                 PROGGRP$ = "Sierra 3 Multimedia"
  547.           END IF
  548.           CreateProgmanGroup PROGGRP$, "", cmoNone
  549.           ShowProgManGroup   PROGGRP$, 2,  cmoNone
  550.           ShowProgManGroup   PROGGRP$, 1,  cmoNone
  551.           CreateProgmanItem  PROGGRP$, "Notas sobre Un siglo de Tango!", MakePath(SRCDIR$, "NOTAS.TXT"), "", cmoOverwrite
  552.           CreateProgmanItem  PROGGRP$, "Un siglo de Tango!", "S3TANGO.EXE", ",,,,"+DEST$, cmoOverwrite
  553.           ShowProgmanGroup PROGGRP$, 1, cmoNone
  554.      END IF
  555.  
  556. END SUB
  557.  
  558.  
  559. '--------------------------------------------------------------------
  560. ' Agrega el nombre de un archivo a un path, insertando un backslash
  561. ' si es necesario
  562. ' ARGS: szDir$  - path (con "\" final opcional)
  563. '       szFile$ - nombre de archivo a agregar
  564. ' RET:  path+filename
  565. '--------------------------------------------------------------------
  566. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  567.      IF szDir$ = "" THEN
  568.           MakePath = szFile$
  569.      ELSEIF szFile$ = "" THEN
  570.           MakePath = szDir$
  571.      ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  572.           MakePath = szDir$ + szFile$
  573.      ELSE
  574.           MakePath = szDir$ + "\" + szFile$
  575.      END IF
  576. END FUNCTION
  577. '--------------------------------------------------------------------
  578. ' Extrae el nombre de un archivo de un path
  579. ' ARGS: szPath$ - path completo
  580. ' RET:  nombre del archivo
  581. '--------------------------------------------------------------------
  582. FUNCTION GetFilename (szPath$) STATIC AS STRING
  583.      FOR i% = LEN(szPath$) TO 1 STEP -1
  584.      IF MID$(szPath$, i%, 1) = "\" THEN
  585.           GetFilename = MID$(szPath$, i% + 1, LEN(szPath$) - i%)
  586.           Exit FOR
  587.      END IF
  588.      NEXT
  589.      IF i% = 0 THEN     ' No hay "\" en el path, debe ser solo un nombre
  590.           GetFilename = szPath$
  591.      END IF
  592. END FUNCTION
  593.  
  594. '--------------------------------------------------------------------
  595. FUNCTION WillCopy (szSection$, szKey$, szDestDir$) STATIC AS INTEGER
  596.  
  597.   WillCopy = 0
  598.  
  599.   Filename$ = GetSectionKeyFilename (szSection$, szKey$)
  600.   szOldFile$ = MakePath (szDestDir$, GetFilename (Filename$))
  601.   szNewFile$ = MakePath (SRCDIR$, Filename$)
  602.   If DoesFileExist(szOldFile, femExists) <> 0 Then
  603.  
  604.      i% = CmpVersion(GetVersionOfFile(szOldFile$), GetVersionOfFile(szNewFile$))
  605.  
  606.      If i% = -1 Then
  607.         ' La version nuestra es mas vieja, no la copia
  608.         exit function
  609.      Endif
  610.  
  611.      If i% = 0 Then
  612.           ' Las versiones son iguales, mira la fecha
  613.           If IsDateLater(GetDateOfFile(szOldFile$), GetDateOfFile(szNewFile$)) = 0 Then
  614.                 ' Nuestro archivo es igual o mas viejo, no lo copia
  615.                 exit function
  616.           Endif
  617.      Endif
  618.  
  619.   Endif
  620.  
  621.   WillCopy = 1
  622. END FUNCTION
  623.  
  624. '--------------------------------------------------------------------
  625. ' Compara la fecha de dos archivos
  626. ' ARGS: DateOld$ en formato YYYY-MM-DD-HH-MM-SS
  627. '       DateNew$ en formato YYYY-MM-DD-HH-MM-SS
  628. ' RET:  1 si DateNew es mas nuevo, 0 en caso contrario
  629. '*************************************************************************
  630. FUNCTION IsDateLater (DateOld$, DateNew$) STATIC AS INTEGER
  631.  
  632.   ' Compara el a#o
  633.   OldYear% = GetYearFromDate (DateOld$)
  634.   NewYear% = GetYearFromDate (DateNew$)
  635.  
  636.   If NewYear% < OldYear% Then
  637.         IsDateLater = 0
  638.   ElseIf NewYear% = OldYear% Then
  639.  
  640.   ' Si el a#o es el mismo compara mes
  641.   OldMonth% = GetMonthFromDate (DateOld$)
  642.   NewMonth% = GetMonthFromDate (DateNew$)
  643.  
  644.   If NewMonth% < OldMonth% Then
  645.         IsDateLater = 0
  646.  
  647.   ElseIf NewMonth% = OldMonth% Then
  648.  
  649.         ' Si el mes es el mismo, compara dia
  650.         OldDay% = GetDayFromDate (DateOld$)
  651.         NewDay% = GetDayFromDate (DateNew$)
  652.  
  653.         If NewDay% <= OldDay% Then
  654.              IsDateLater = 0
  655.         Else
  656.              IsDateLater = 1
  657.         End If
  658.  
  659.      Else
  660.           IsDateLater = 1
  661.      End If
  662.  
  663.   Else
  664.         IsDateLater = 1
  665.   ENDIF
  666.  
  667. END FUNCTION
  668.  
  669. ' -------------------------------------------------------------------
  670. ' Compara versiones de dos archivos
  671. ' ARGS: VerOld$ - version string del arch. viejo (en formato N.N.N.N)
  672. '       VerNew$ - version string del arch. nuevo (en formato N.N.N.N)
  673. ' RET:  1 si VerNew es posterior, -1 si es anterior, 0 si es la misma
  674. '--------------------------------------------------------------------
  675. FUNCTION CmpVersion (VerOld$, VerNew$) STATIC AS INTEGER
  676.  
  677.   CmpVersion = 0
  678.  
  679.   FOR I=1 TO 4
  680.  
  681.      VOld = GetVersionNthField (VerOld$, I)
  682.      VNew = GetVersionNthField (VerNew$, I)
  683.  
  684.      If VNew > VOld Then
  685.         CmpVersion = 1
  686.         Goto LBL_CmpVersionEnd
  687.      Endif
  688.  
  689.      If VNew < VOld Then
  690.         CmpVersion = -1
  691.         Goto LBL_CmpVersionEnd
  692.      End If
  693.  
  694.   NEXT I
  695.  
  696. LBL_CmpVersionEnd:
  697.  
  698. END FUNCTION
  699.  
  700.  
  701.  
  702.  
  703.