home *** CD-ROM | disk | FTP | other *** search
/ Evita! / Evita2-de-2.iso / TANGO! / STP / TANGOINS.MST < prev   
Text File  |  1997-03-21  |  19KB  |  559 lines

  1. ' ================================================================================
  2. ' Sierra 3
  3. ' ARCHIVO:    TANGOINS.MST
  4. ' PROYECTO:   INSTALAR (Un siglo de Tango! - Demo)   VERSION: 0.0
  5. ' CULPABLE:   Sergio D. Llorens                      FECHA: 26/10/95
  6. '                                                    ULTIMA MODIFICACION: 26/10/95
  7. ' DESCRIPCION: Script (mstest) para instalacion de Un siglo de Tango! - Demo
  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 PROGRAM_GROUP               = 700
  25. CONST PROGRAM_GROUP_BOXLIST       = 701
  26. CONST ASK_HOTSPOT                 = 800
  27. CONST FILLING_CARD                = 1000
  28. CONST INSTALL_FONTS               = 1100
  29. CONST INSTALL_DIR                 = 1200
  30. CONST INSTALL_DIR_HELP            = 1201
  31. CONST SYSERROR_DISKFULL           = 1203
  32. CONST TOOBIG                      = 3000
  33. CONST SYSERROR_BADPATH            = 4000
  34. CONST SETUPQUIT_CONFIRM           = 10000
  35. CONST SETUPQUIT_FAILURE           = 10001
  36. CONST SETUPQUIT_OVERVIEW          = 10002
  37. CONST SETUPQUIT_QUIT              = 10003
  38. CONST RESTART_WINDOWS             = 10020
  39.  
  40. ' Bitmaps IDs - Definidos en dialogs.rc
  41. CONST WELCOME_BMP      = 1
  42.  
  43. ' De WINDOWS.H
  44. CONST WS_VISIBLE       = &H10000000
  45. CONST WS_BORDER        = &H00800000
  46. CONST WS_CLIPCHILDREN  = &H02000000
  47. CONST GWL_STYLE        = -16
  48. CONST SW_SHOWMAXIMIZED = 3
  49.  
  50. ' Definiciones globales
  51. GLOBAL S3SYSDIR$    'directorio final de librerias de Sierra 3 Multimedia
  52. GLOBAL CUIDLL$      'CUI dll
  53. GLOBAL PROGGRP$     'default program group
  54. GLOBAL CREATEICON%  'creacion de iconos en program group
  55. GLOBAL VIEWERDIR$   'directorio de Viewer
  56. GLOBAL SRCDIR$      'directorio raiz de instalar
  57. GLOBAL WININI$      'path completo de WIN.INI
  58. GLOBAL SYSINI$      'path completo de SYSTEM.INI
  59. GLOBAL ShouldRestart% 'indica si se debe re-arrancar Windows luego de instalar
  60. GLOBAL ReducedInst% ' indica instalacion reducida
  61. GLOBAL VGADRV%      'indica si VGAPAL driver esta instalado
  62. GLOBAL Misc%
  63.  
  64. ' Prototipos de SUBs
  65. DECLARE SUB Install
  66. DECLARE SUB Init3dCtrls
  67.  
  68. ' Prototipos de funciones
  69. DECLARE FUNCTION GetModuleHandle LIB "kernel" (a$) AS INTEGER
  70. DECLARE FUNCTION WinExec LIB "kernel" (a$, b%) AS INTEGER
  71. DECLARE FUNCTION GetActiveWindow LIB "user" AS INTEGER
  72. DECLARE FUNCTION ShowWindow LIB "user" (a%, b%) AS INTEGER
  73. DECLARE FUNCTION MessageBox  lib "user" (hwnd%, lpstr$, lpstr$, uint%) as integer
  74. DECLARE FUNCTION SetWindowLong LIB "user" (hWnd%, offset%, style&) AS LONG
  75.  
  76. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  77. DECLARE FUNCTION GetFilename (szPath$) AS STRING
  78. DECLARE FUNCTION UpdateSize (szSection$, szKey$, szDestDir$) AS LONG
  79. DECLARE FUNCTION WillCopy (szSection$, szKey$, szDestDir$) AS INTEGER
  80. DECLARE FUNCTION CmpVersion (VerOld$, VerNew$) AS INTEGER
  81. DECLARE FUNCTION IsDateLater (DateOld$, DateNew$) AS INTEGER
  82.  
  83. GOTO INIT
  84.  
  85. '$INCLUDE 'stcheck.inc'
  86.  
  87. '----------------------------------------------------------------------------
  88. ' Inicializacion
  89. '----------------------------------------------------------------------------
  90. INIT:
  91.  
  92.      hWnd%=HwndFrame()
  93.      ij&=SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN)
  94.      j%=ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  95.  
  96.      SRCDIR$ = GetSymbolValue("STF_SRCDIR") + "Tango!\"
  97.      WININI$ = MakePath(GetWindowsDir(), "WIN.INI")
  98.      SYSINI$ = MakePath(GetWindowsDir(), "SYSTEM.INI")
  99.  
  100. '    Init3dCtrls
  101.  
  102.      CUIDLL$ = "mscuistf.dll"    'CUI dll
  103.      ShouldRestart% = 0          'se vuelve TRUE si se instalan DRVs
  104.  
  105.      SetBitmap CUIDLL$, WELCOME_BMP
  106.      SetTitle "Un siglo de Tango! Demo - Instalar"
  107.  
  108.      ' Busca path a TANGOINST.INF
  109.      szInf$ = GetSymbolValue("STF_SRCINFPATH")
  110.      IF szInf$ = "" THEN
  111.           szInf$ = GetSymbolValue("STF_CWDDIR") + "TANGOINS.INF"
  112.      END IF
  113.  
  114.      ReadInfFile szInf$
  115.  
  116.      ERR = 0
  117.  
  118. '--------------------------------------------------------------------------
  119. ' Verifica el sistema
  120. '--------------------------------------------------------------------------
  121.      GoSub SYSCHECK
  122.  
  123. '--------------------------------------------------------------------------
  124. ' Inicializacion de pantalla de bienvenida
  125. '--------------------------------------------------------------------------
  126. WELCOME:
  127.      ' Muestra dialogo WELCOME con WELCOME_HELP como ayuda actual
  128.      sz$ = UIStartDlg(CUIDLL$, WELCOME_SCREEN, "FWelcomeDlgProc", WELCOME_HELP, "FHelpDlgProc")
  129.      IF sz$ = "REACTIVATE" THEN
  130.           GOTO WELCOME
  131.      ELSEIF sz$ = "CONTINUE" THEN
  132.           UIPop 1
  133.      ELSE
  134.           GOSUB DIAG_QUIT    ' se oprimio "Salir"
  135.           GOTO WELCOME       ' no se quiere salir, continua instalacion
  136.      END IF
  137.  
  138. '--------------------------------------------------------------------------
  139. ' Chequea performance
  140. '--------------------------------------------------------------------------
  141. '     GoSub SYSCHECK         ' controlar FCancel!
  142.  
  143.      UIPop 1
  144.  
  145.  
  146. '--------------------------------------------------------------------------
  147. ' Verifica si PROGMAN es el shell actual
  148. '--------------------------------------------------------------------------
  149. ' Chequea si el usuario esta usando Program Manager como Shell
  150.  
  151.      PROGGRP$ = ""
  152.      sz$ = GetIniKeyString(SYSINI$, "boot", "shell")
  153.      IF sz$ <> "progman.exe" THEN
  154.           CREATEICON% = 1
  155.      END IF
  156.  
  157. ASKPROGMAN:
  158.  
  159. sz$ = ""
  160.      IF sz$ = "" THEN
  161.         sz$ = "Sierra 3 Multimedia"
  162.      END IF
  163.      PROGGRP$ = """" + sz$ + """"
  164.      SetSymbolValue "TARGETGROUP", PROGGRP$
  165.      CREATEICON% = 1
  166.  
  167. BEGIN_INSTALL:
  168.  
  169.      Install
  170.  
  171. '--------------------------------------------------------------------------
  172. ' Verifica si Windows tiene que ser reiniciado
  173. '--------------------------------------------------------------------------
  174. RESTART_WINDOWS_AGAIN:
  175.      IF ShouldRestart% THEN
  176.           sz$ = UIStartDlg(CUIDLL$, RESTART_WINDOWS, "FRestartDlgProc", 0, "")
  177.           IF sz$ = "REACTIVATE" THEN
  178.                 GOTO RESTART_WINDOWS_AGAIN
  179.           ELSEIF sz$ = "EXIT" THEN
  180.                 GOSUB DIAG_QUIT
  181.                 GOTO RESTART_WINDOWS_AGAIN
  182.           ELSEIF sz$ = "OK" THEN
  183.                 ForceRestartOn
  184.                 result% = ExitExecRestart ()
  185.                 ' Si ExitExitRestart retorna, no todas las aplicaciones quisieron
  186.                 ' cerrarse
  187.                 GOTO RESTART_WINDOWS_AGAIN
  188.           END IF
  189.      END IF
  190.      UIPop 1
  191.  
  192. '--------------------------------------------------------------------------
  193. ' Permite configurar, ejecutar, o salir a Windows
  194. '--------------------------------------------------------------------------
  195. OVERVIEW:
  196.     GOTO QUIT
  197.     sz$ = UIStartDlg(CUIDLL$, SETUPQUIT_OVERVIEW, "FOverviewDlgProc", 0, "")
  198.      IF sz$ = "REACTIVATE" THEN
  199.           GOTO OVERVIEW
  200.      ELSEIF sz$ = "README" THEN
  201.           RUN MakePath(GetWindowsDir(), "NOTEPAD.EXE") + " " + MakePath(SRCDIR$, "notas.txt") ', NOWAIT
  202.           GOTO OVERVIEW
  203.      ELSEIF sz$ = "CONFIG_TANGO" THEN
  204.           RUN MakePath(SRCDIR$, "DRV\TDEMO\tconfig.exe") ', NOWAIT
  205.           GOTO OVERVIEW
  206.      ELSEIF sz$ = "RUN_TANGO" THEN
  207.           ' Limpieza final
  208.           UIPopAll
  209. '          IF RestartListEmpty () THEN
  210. '                result% = ExitExecRestart ()
  211. '          ENDIF
  212.           demo% = ShowWindow (GetActiveWindow(), 0) ' oculta setup
  213.           ' Cambiamos de directorio
  214. '          OldDrive$ = CurDir$
  215. '          ChDrive Mid$(DEST$, 1, 2)
  216. '          ChDir DEST$
  217.           RUN MakePath(SRCDIR$, "DRV\TDEMO\tdemo.exe"), NOWAIT
  218. '          ChDrive Mid$(OldDrive$, 1, 2)
  219. '          ChDir OldDrive$
  220. '          GOTO QUIT2
  221.      END IF
  222.  
  223. '--------------------------------------------------------------------------
  224. ' Handlers de Quit y errores
  225. '--------------------------------------------------------------------------
  226. QUIT:
  227.      ON ERROR GOTO ERRQUIT
  228.  
  229.      IF ERR = 0 THEN
  230.           GOTO QUIT2
  231.      END IF
  232. QUIT_FAILURE:
  233.      dlg% = SETUPQUIT_FAILURE
  234.      UIPopAll    ' cierra todos los otros dialogos
  235.      sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", 0, "")
  236.      IF sz$ = "REACTIVATE" THEN
  237.           GOTO QUIT_FAILURE
  238.      END IF
  239. QUIT2:
  240.      UIPop 1
  241.  
  242.      END
  243.  
  244. ERRQUIT:
  245.      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! - Demo", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  246.      END
  247.  
  248. '--------------------------------------------------------------------------
  249. ' Mensajes de error varios
  250. '--------------------------------------------------------------------------
  251. DIAG_QUIT:
  252.      sz$ = UIStartDlg(CUIDLL$, SETUPQUIT_CONFIRM, "FInfoDlgProc", 0, "")
  253.  
  254.      IF sz$ = "CONTINUE" THEN
  255.           UIPopAll
  256.           'ERROR STFQUIT
  257.           END
  258.      ELSEIF sz$ = "REACTIVATE" THEN
  259.           GOTO DIAG_QUIT
  260.      ELSE
  261.           UIPop 1
  262.      END IF
  263.      RETURN
  264.  
  265. BADPATH:
  266.      sz$ = UIStartDlg(CUIDLL$, SYSERROR_BADPATH, "FInfoDlgProc", 0, "")
  267.      IF sz$ = "REACTIVATE" THEN
  268.           GOTO BADPATH
  269.      END IF
  270.      UIPop 1
  271.      RETURN
  272.  
  273. DRIVEISFULL:
  274.      sz$ = UIStartDlg(CUIDLL$, SYSERROR_DISKFULL, "FInfoDlgProc", 0, "")
  275.      IF sz$ = "REACTIVATE" THEN
  276.           GOTO DRIVEISFULL
  277.      ELSEIF sz$ = "EXIT" THEN
  278.           dlg% = SETUPQUIT_FAILURE
  279.           GOTO QUIT_FAILURE
  280.      END IF
  281.      UIPop 1
  282.      RETURN
  283.  
  284. '--------------------------------------------------------------------------
  285. ' Verifica si el archivo ya existe en el HD
  286. ' ARGS: Seccion en INF file, clave del archivo, y directorio destino
  287. ' RET:  Tama#o del archivo si necesita ser copiado, o 0
  288. '--------------------------------------------------------------------------
  289. FUNCTION UpdateSize (szSection$, szKey$, szDestDir$) STATIC AS LONG
  290.      IF WillCopy (szSection$, szKey$, szDestDir$) THEN
  291.           UpdateSize = GetSectionKeySize (szSection$, szKey$)
  292.      ELSE
  293.     UpdateSize = 0
  294.      END IF
  295. END FUNCTION
  296.  
  297. '--------------------------------------------------------------------------
  298. ' Verifica si CTL3D.DLL ya existe en el directorio destino, si no, la copia
  299. '--------------------------------------------------------------------------
  300. SUB Init3dCtrls STATIC
  301.      szDest$ = MakePath(GetWindowsSysDir(), "CTL3D.DLL")
  302.      szSrc$  = MakePath(SRCDIR$, "DRV\SYS\CTL3D.DLL")
  303.      IF NOT DoesFileExist (szDest$, femRead) THEN
  304.           CopyFile szSrc$, szDest$, cmoOverWrite, 0
  305.      END IF
  306. END SUB
  307.  
  308. '--------------------------------------------------------------------------
  309. ' Construye la lista de copia, y realiza todas las operaciones de
  310. ' instalacion.
  311. '--------------------------------------------------------------------------
  312. SUB Install STATIC
  313.      WinDir$ = GetWindowsDir()
  314.      WinSysDir$ = GetWindowsSysDir()
  315.      SetRestartDir "C:\~TNGINST.T"
  316.  
  317. '     sz$ = UIStartDlg (CUIDLL$, FILLING_CARD, "FFillCardDlgProc", 0, "")
  318.  
  319.      COPY_SIZE& = 0    ' Si cambia luego de copiar, hay que reiniciar Windows
  320.  
  321.      ' Copia DLLs y VBXs
  322.      AddSectionFilesToCopyList "Extras", SRCDIR$, WinSysDir$
  323.      'COPY_SIZE& = COPY_SIZE& + UpdateSize ("Extras", "CTL3D", WinSysDir$)
  324.  
  325.      ' Copia drivers
  326.      AddSectionFilesToCopyList "Drivers", SRCDIR$, WinSysDir$
  327.      OLD_SIZE& = COPY_SIZE&
  328.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "AAPLAY", WinSysDir$)
  329.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "AAVGA", WinSysDir$)
  330.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "AVIFILE", WinSysDir$)
  331.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "COMPOBJ", WinSysDir$)
  332.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MCIAAP", WinSysDir$)
  333.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MCIAVI", WinSysDir$)
  334.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSVIDC", WinSysDir$)
  335.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "ICCVID", WinSysDir$)
  336.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSVIDEO", WinSysDir$)
  337.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSACM", WinSysDir$)
  338.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSACMDLL", WinSysDir$)
  339.      COPY_SIZE& = COPY_SIZE& + UpdateSize ("Drivers", "MSADPCM", WinSysDir$)
  340.  
  341.      ' Si se instalan drivers, hay que re-inicializar Windows
  342.      IF OLD_SIZE& <> COPY_SIZE& THEN
  343.         ShouldRestart% = 0 '1
  344.      END IF
  345.  
  346.  
  347. DISK_SPACE_CHECK:
  348.      ' Si no hay espacio suficiente en HD
  349.      IF GetCopyListCost ("", "", "") <> 0 THEN
  350.  
  351. WINDRIVEISFULL:
  352.           sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfoDlgProc", 0, "")
  353.           IF sz$ = "REACTIVATE" THEN
  354.                 GOTO WINDRIVEISFULL
  355.           END IF
  356.           UIPopAll
  357.           END
  358.      ENDIF
  359.  
  360.  
  361.      ' Verifica si VGAPAL.DRV deberia ser reemplazada por VGA.DRV:
  362.      IF VGADRV% = 1 THEN
  363.           CreateIniKeyValue SYSINI$, "Boot", "Display.Drv", "VGA.DRV", cmoOverwrite
  364.           CreateIniKeyValue SYSINI$, "Boot.Description", "Display.Drv", "VGA", cmoOverwrite
  365.           ShouldRestart% = 1
  366.      END IF
  367.  
  368.      SetCopyGaugePosition 25, 120
  369.  
  370.      CopyFilesInCopyList
  371.      UIPop 1
  372.  
  373.      IF RestartListEmpty() = 0 THEN
  374.         ShouldRestart% = 1
  375.      END IF
  376.  
  377.      ' Setea drivers en SYSTEM.INI
  378.      CreateIniKeyValue SYSINI$, "mci", "Animation",   "mciaap.drv", cmoOverwrite
  379.      CreateIniKeyValue SYSINI$, "mci", "AVIVideo",   "mciavi.drv", cmoOverwrite
  380.      CreateIniKeyValue SYSINI$, "drivers", "Wavemapper", "msacm.drv", cmoOverwrite
  381.      CreateIniKeyValue SYSINI$, "drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite
  382.      CreateIniKeyValue SYSINI$, "drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
  383.      CreateIniKeyValue SYSINI$, "drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite
  384.      CreateIniKeyValue SYSINI$, "msacm", "Install", "msadpcm.acm", cmoOverwrite
  385.  
  386.      ' Setea entradas en WIN.INI
  387.      CreateIniKeyValue WININI$, "mci extensions", "flc", "Animation", cmoOverwrite
  388.      CreateIniKeyValue WININI$, "mci extensions", "avi", "AVIVideo", cmoOverwrite
  389.  
  390.      ' Setea entradas en USDTDEMO.INI
  391.      TangoIni$ = MakePath(WinDir$, "usdtdemo.ini")
  392. '         CreateIniKeyValue TangoIni$, "Config", "Path", MakePath(SRCDIR$, "DRV\TDEMO\"), cmoOverwrite
  393.           CreateIniKeyValue TangoIni$, "Config", "Path", SRCDIR$, cmoOverwrite
  394.  
  395.      CreateIniKeyValue TangoIni$, "Config", "Modo_de_ejecucion", "0", cmoOverwrite
  396.      CreateIniKeyValue TangoIni$, "Config", "Segundos_antes_de_reiniciar", "30", cmoOverwrite
  397.      UIPop 1
  398.  
  399.      ' Crea Program Group
  400.      IF CREATEICON% = 1 THEN
  401.           IF PROGGRP$ = "" THEN
  402.                 PROGGRP$ = "Sierra 3 Multimedia"
  403.           END IF
  404.           CreateProgmanGroup PROGGRP$, "", cmoNone
  405.           ShowProgManGroup   PROGGRP$, 2,  cmoNone
  406.           ShowProgManGroup   PROGGRP$, 1,  cmoNone
  407.           CreateProgmanItem  PROGGRP$, "Un siglo de Tango! - Demo - Configuraci≤n", MakePath(SRCDIR$, "DRV\TDEMO\TCONFIG.EXE"), ",,,,"+DEST$, cmoOverwrite
  408.           CreateProgmanItem  PROGGRP$, "Un siglo de Tango! - Demo", MakePath(SRCDIR$, "DRV\TDEMO\TDEMO.EXE"), ",,,,"+DEST$, cmoOverwrite
  409.           ShowProgmanGroup PROGGRP$, 1, cmoNone
  410.      END IF
  411.  
  412. END SUB
  413.  
  414.  
  415. '--------------------------------------------------------------------
  416. ' Agrega el nombre de un archivo a un path, insertando un backslash
  417. ' si es necesario
  418. ' ARGS: szDir$  - path (con "\" final opcional)
  419. '       szFile$ - nombre de archivo a agregar
  420. ' RET:  path+filename
  421. '--------------------------------------------------------------------
  422. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  423.      IF szDir$ = "" THEN
  424.           MakePath = szFile$
  425.      ELSEIF szFile$ = "" THEN
  426.           MakePath = szDir$
  427.      ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  428.           MakePath = szDir$ + szFile$
  429.      ELSE
  430.           MakePath = szDir$ + "\" + szFile$
  431.      END IF
  432. END FUNCTION
  433. '--------------------------------------------------------------------
  434. ' Extrae el nombre de un archivo de un path
  435. ' ARGS: szPath$ - path completo
  436. ' RET:  nombre del archivo
  437. '--------------------------------------------------------------------
  438. FUNCTION GetFilename (szPath$) STATIC AS STRING
  439.      FOR i% = LEN(szPath$) TO 1 STEP -1
  440.      IF MID$(szPath$, i%, 1) = "\" THEN
  441.           GetFilename = MID$(szPath$, i% + 1, LEN(szPath$) - i%)
  442.           Exit FOR
  443.      END IF
  444.      NEXT
  445.      IF i% = 0 THEN     ' No hay "\" en el path, debe ser solo un nombre
  446.           GetFilename = szPath$
  447.      END IF
  448. END FUNCTION
  449.  
  450. '--------------------------------------------------------------------
  451. FUNCTION WillCopy (szSection$, szKey$, szDestDir$) STATIC AS INTEGER
  452.  
  453.   WillCopy = 0
  454.  
  455.   Filename$ = GetSectionKeyFilename (szSection$, szKey$)
  456.   szOldFile$ = MakePath (szDestDir$, GetFilename (Filename$))
  457.   szNewFile$ = MakePath (SRCDIR$, Filename$)
  458.   If DoesFileExist(szOldFile, femExists) <> 0 Then
  459.  
  460.      i% = CmpVersion(GetVersionOfFile(szOldFile$), GetVersionOfFile(szNewFile$))
  461.  
  462.      If i% = -1 Then
  463.         ' La version nuestra es mas vieja, no la copia
  464.         exit function
  465.      Endif
  466.  
  467.      If i% = 0 Then
  468.           ' Las versiones son iguales, mira la fecha
  469.           If IsDateLater(GetDateOfFile(szOldFile$), GetDateOfFile(szNewFile$)) = 0 Then
  470.                 ' Nuestro archivo es igual o mas viejo, no lo copia
  471.                 exit function
  472.           Endif
  473.      Endif
  474.  
  475.   Endif
  476.  
  477.   WillCopy = 1
  478. END FUNCTION
  479.  
  480. '--------------------------------------------------------------------
  481. ' Compara la fecha de dos archivos
  482. ' ARGS: DateOld$ en formato YYYY-MM-DD-HH-MM-SS
  483. '       DateNew$ en formato YYYY-MM-DD-HH-MM-SS
  484. ' RET:  1 si DateNew es mas nuevo, 0 en caso contrario
  485. '*************************************************************************
  486. FUNCTION IsDateLater (DateOld$, DateNew$) STATIC AS INTEGER
  487.  
  488.   ' Compara el a#o
  489.   OldYear% = GetYearFromDate (DateOld$)
  490.   NewYear% = GetYearFromDate (DateNew$)
  491.  
  492.   If NewYear% < OldYear% Then
  493.         IsDateLater = 0
  494.   ElseIf NewYear% = OldYear% Then
  495.  
  496.   ' Si el a#o es el mismo compara mes
  497.   OldMonth% = GetMonthFromDate (DateOld$)
  498.   NewMonth% = GetMonthFromDate (DateNew$)
  499.  
  500.   If NewMonth% < OldMonth% Then
  501.         IsDateLater = 0
  502.  
  503.   ElseIf NewMonth% = OldMonth% Then
  504.  
  505.         ' Si el mes es el mismo, compara dia
  506.         OldDay% = GetDayFromDate (DateOld$)
  507.         NewDay% = GetDayFromDate (DateNew$)
  508.  
  509.         If NewDay% <= OldDay% Then
  510.              IsDateLater = 0
  511.         Else
  512.              IsDateLater = 1
  513.         End If
  514.  
  515.      Else
  516.           IsDateLater = 1
  517.      End If
  518.  
  519.   Else
  520.         IsDateLater = 1
  521.   ENDIF
  522.  
  523. END FUNCTION
  524.  
  525. ' -------------------------------------------------------------------
  526. ' Compara versiones de dos archivos
  527. ' ARGS: VerOld$ - version string del arch. viejo (en formato N.N.N.N)
  528. '       VerNew$ - version string del arch. nuevo (en formato N.N.N.N)
  529. ' RET:  1 si VerNew es posterior, -1 si es anterior, 0 si es la misma
  530. '--------------------------------------------------------------------
  531. FUNCTION CmpVersion (VerOld$, VerNew$) STATIC AS INTEGER
  532.  
  533.   CmpVersion = 0
  534.  
  535.   FOR I=1 TO 4
  536.  
  537.      VOld = GetVersionNthField (VerOld$, I)
  538.      VNew = GetVersionNthField (VerNew$, I)
  539.  
  540.      If VNew > VOld Then
  541.         CmpVersion = 1
  542.         Goto LBL_CmpVersionEnd
  543.      Endif
  544.  
  545.      If VNew < VOld Then
  546.         CmpVersion = -1
  547.         Goto LBL_CmpVersionEnd
  548.      End If
  549.  
  550.   NEXT I
  551.  
  552. LBL_CmpVersionEnd:
  553.  
  554. END FUNCTION
  555.  
  556.  
  557.  
  558.  
  559.