- Bug Fix: Cuando se indica como nombre de archivo "*" y como tipo "*", se regeneran automáticamente todos los archivos binarios desde los archivos de texto (Alejandro Sosa)
- Feature: Agregado de los fuentes de FileName_Caps.exe
- Allow importing DBF Data (Walter Nicholls)
- BugFix: Added variable declaration (DH)
- BugFix: Fixed incorrectly named variable (DH)
- BugFix: Added missing assignment (DH)
- Enhancement: Put double quotes around path in case in contains single quote (DH)
- BugFix: Added "+16" to Debug flags to maintain internal defaults to not generate timestamps on xx2 files
This commit is contained in:
fdbozzo
2016-06-08 23:48:40 +02:00
22 changed files with 1277 additions and 212 deletions

View File

@@ -16,6 +16,8 @@ Const ForReading = 1
Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg, nProcessedFilesCount
Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count
Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile
'' 2016.04.05 DH: added next line
dim fileToProcess
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject")
Set oVFP9 = CreateObject("VisualFoxPro.Application.9")
@@ -29,7 +31,7 @@ nExitCode = 0
' 4=Don't show FoxBin2prg error modal messages
' 8=Show end of process message
' 16=Empty timestamps
nDebug = 1+0+4+8
nDebug = 1+0+4+8+16
'---------------------------------------------------------------------------------------------------
If WScript.Arguments.Count = 0 Then
@@ -68,8 +70,11 @@ Else
cFlagGenerateLog = "'0'"
cFlagDontShowErrMsg = "'0'"
cFlagShowCall = "'0'"
'' 2016.04.05 DH: fixed incorrectly named variable
cFlagJustShowCall = "'0'"
cFlagRecompile = "'1'"
'' 2016.04.05 DH: added missing assignment
cFlagNoTimestamps = "'0'"
If GetBit(nDebug, 1) Then
cFlagGenerateLog = "'1'"
@@ -87,13 +92,17 @@ Else
oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" )
For i = 1 To nFile_Count
oVFP9.DoCmd( "oFoxBin2Prg.updateProgressbar(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" )
cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'"
'' 2016.04.05 DH: put double quotes around path in case in contains single quote
fileToProcess = Chr(34) + aFiles(i) + Chr(34)
oVFP9.DoCmd( "oFoxBin2Prg.updateProgressbar(oFoxBin2Prg.c_loc_processing_file + " & fileToProcess & ", " & i & ", " & nFile_Count & ", 0)" )
cFlagRecompile = Chr(34) + FileSystemObject.GetParentFolderName( aFiles(i) ) + Chr(34)
'' 2016.04.05 DH: end of change
If nDebug = 0 Or nDebug = 2 Then
cCMD = "oFoxBin2prg.execute( '" & aFiles(i) & "' )"
'' 2016.04.05 DH: use new variable
cCMD = "oFoxBin2prg.execute(" & fileToProcess & ")"
Else
cCMD = "oFoxBin2prg.execute( '" & aFiles(i) & "','BIN2PRG','0','0'," _
'' 2016.04.05 DH: use new variable
cCMD = "oFoxBin2prg.execute(" & fileToProcess & ",'BIN2PRG','0','0'," _
& cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _
& cFlagRecompile & "," & cFlagNoTimestamps & " )"
End If

View File

@@ -16,6 +16,8 @@ Const ForReading = 1
Dim WSHShell, FileSystemObject, cEndOfProcessMsg, cWithErrorsMsg, cConvCancelByUserMsg, nProcessedFilesCount
Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count
Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile
'' 2016.04.05 DH: added next line
dim fileToProcess
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject")
Set oVFP9 = CreateObject("VisualFoxPro.Application.9")
@@ -29,7 +31,7 @@ nExitCode = 0
' 4=Don't show FoxBin2prg error modal messages
' 8=Show end of process message
' 16=Empty timestamps
nDebug = 1+0+4+8
nDebug = 1+0+4+8+16
'---------------------------------------------------------------------------------------------------
If WScript.Arguments.Count = 0 Then
@@ -75,7 +77,10 @@ Else
cFlagGenerateLog = "'0'"
cFlagDontShowErrMsg = "'0'"
cFlagShowCall = "'0'"
'' 2016.04.05 DH: fixed incorrectly named variable
cFlagJustShowCall = "'0'"
'' 2016.04.05 DH: added missing assignment
cFlagNoTimestamps = "'0'"
If GetBit(nDebug, 1) Then
cFlagGenerateLog = "'1'"
@@ -93,13 +98,18 @@ Else
oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" )
For i = 1 To nFile_Count
oVFP9.DoCmd( "oFoxBin2Prg.updateProgressbar(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" )
cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'"
'' 2016.04.05 DH: put double quotes around path in case in contains single quote
fileToProcess = Chr(34) + aFiles(i) + Chr(34)
oVFP9.DoCmd( "oFoxBin2Prg.updateProgressbar(oFoxBin2Prg.c_loc_processing_file + " & fileToProcess & ", " & i & ", " & nFile_Count & ", 0)" )
cFlagRecompile = Chr(34) + FileSystemObject.GetParentFolderName( aFiles(i) ) + Chr(34)
'' 2016.04.05 DH: end of change
If nDebug = 0 Or nDebug = 2 Then
cCMD = "oFoxBin2prg.execute( '" & aFiles(i) & "' )"
'' 2016.04.05 DH: use new variable
cCMD = "oFoxBin2prg.execute(" & fileToProcess & ")"
Else
cCMD = "oFoxBin2prg.execute( '" & aFiles(i) & "','PRG2BIN','0','0'," _
'' 2016.04.05 DH: use new variable
cCMD = "oFoxBin2prg.execute(" & fileToProcess & ",'PRG2BIN','0','0'," _
& cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _
& cFlagRecompile & "," & cFlagNoTimestamps & " )"
End If

View File

@@ -0,0 +1,2 @@
SCREEN=OFF
RESOURCE=OFF

View File

@@ -0,0 +1,87 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="filename_caps.pjx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
LPARAMETERS tcDir
lcCurdir = SYS(5)+CURDIR()
CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) )
*<DevInfo>
_Author = ""
_Company = ""
_Address = ""
_City = ""
_State = ""
_PostalCode = ""
_Country = ""
*--
_Comments = "Capitalization for files"
_CompanyName = "Fernando D. Bozzo"
_FileDescription = "Capitalization for files"
_LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
_LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
_ProductName = "FILENAME_CAPS"
_MajorVer = "2"
_MinorVer = "3"
_Revision = "0"
_LanguageID = ""
_AutoIncrement = "0"
*</DevInfo>
*<BuildProj>
*<.HomeDir = 'c:\desa\filename_caps' />
FOR EACH loProject IN _VFP.Projects FOXOBJECT
loProject.Close()
ENDFOR
STRTOFILE( '', '__newproject.f2b' )
BUILD PROJECT Filename_caps.pjx FROM '__newproject.f2b'
FOR EACH loProject IN _VFP.Projects FOXOBJECT
loProject.Close()
ENDFOR
MODIFY PROJECT 'Filename_caps.pjx' NOWAIT NOSHOW NOPROJECTHOOK
loProject = _VFP.Projects('Filename_caps.pjx')
WITH loProject.FILES
.ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
.ADD('filename_caps.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" />
*</BuildProj>
.ITEM('__newproject.f2b').Remove()
*<FileComments>
*</FileComments>
*<ExcludedFiles>
*</ExcludedFiles>
*<TextFiles>
.ITEM(lcCurdir + 'config\config.fpw').Type = 'T'
*</TextFiles>
ENDWITH
WITH loProject
*<ProjectProperties>
.SetMain(lcCurdir + 'filename_caps.prg')
.Debug = .T.
.Encrypted = .F.
*<.CmntStyle = 1 />
*<.NoLogo = .F. />
*<.SaveCode = .T. />
.ProjectHookLibrary = ''
.ProjectHookClass = ''
*</ProjectProperties>
ENDWITH
_VFP.Projects('Filename_caps.pjx').Close()
*ERASE '__newproject.f2b'
CD (lcCurdir)
RETURN

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,96 @@
'---------------------------------------------------------------------------------------------------
' Normalize_FileNames.vbs - 06/01/2014 - Fernando D. Bozzo (fdbozzo@gmail.com)
'---------------------------------------------------------------------------------------------------
' ENGLISH:
' Create a shortcut on user's "SendTo" folder and configure CAPS on filename_caps.cfg
'
' ESPA<50>OL:
' Cree un acceso directo en la carpeta "SendTo" del usuario y configure las Capitalizaciones en filename_caps.cfg
'---------------------------------------------------------------------------------------------------
Const ForReading = 1
Dim WSHShell, FileSystemObject
Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), filename_caps_log
Dim i, x, str_cfg, aConf
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject")
Set oVFP9 = CreateObject("VisualFoxPro.Application.9")
filename_caps_log = Replace(WScript.ScriptFullName, WScript.ScriptName, "filename_caps.log")
nExitCode = 0
'---------------------------------------------------------------------------------------------------
nDebug = 5 'Cumulative Flags: 0=OFF, 1=Create filename_caps LOG, 2=Only show script calls, 4=Don't show filename_caps error modal messages
'---------------------------------------------------------------------------------------------------
If WScript.Arguments.Count = 0 Then
nExitCode = 1
cErrMsg = "nDebug = " & nDebug
If GetBit(nDebug, 1) Then
cErrMsg = cErrMsg & Chr(13) & "Bit 0 ON: (1) Create filename_caps LOG"
End If
If GetBit(nDebug, 2) Then
cErrMsg = cErrMsg & Chr(13) & "Bit 1 ON: (2) Only show script calls"
End If
If GetBit(nDebug, 3) Then
cErrMsg = cErrMsg & Chr(13) & "Bit 2 ON: (4) Don't show filename_caps error modal messages"
End If
MsgBox cErrMsg, 64, "No parameters - Debug Status"
Else
cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "filename_caps.exe")
If GetBit(nDebug, 1) And Not GetBit(nDebug, 2) And Not FileSystemObject.FileExists( filename_caps_log ) Then
FileSystemObject.CreateTextFile( filename_caps_log )
End If
For i = 0 To WScript.Arguments.Count-1
scanDirs( WScript.Arguments(i) )
Next
End If
WScript.Quit(nExitCode)
Private Sub scanDirs( tcArgument )
Dim omFolder, oFolder
If FileSystemObject.FolderExists( tcArgument ) Then
'-- Es un directorio
Set omFolder = FileSystemObject.GetFolder( tcArgument )
For Each oFile IN omFolder.Files
evaluateFile( oFile.Path )
Next
For Each oFolder IN omFolder.SubFolders
scanDirs( oFolder.Path )
Next
Else
'-- Es un archivo
evaluateFile( tcArgument )
End If
End Sub
Private Sub evaluateFile( tcFile )
cFlagGenerateLog = "'0'"
cFlagDontShowErrMsg = "'0'"
cFlagShowCall = "'0'"
If GetBit(nDebug,1) Then
cFlagGenerateLog = "'1'"
End If
If GetBit(nDebug,2) Then
cFlagJustShowCall = "1"
End If
If GetBit(nDebug,3) Then
cFlagDontShowErrMsg = "'1'"
End If
cCMD = "DO '" & cEXETool & "' WITH '" & tcFile & "','','F','',.F.," & cFlagDontShowErrMsg
If cFlagJustShowCall = "1" Then
MsgBox cCMD, 0, "PARAMETROS ENVIADOS"
Else
oVFP9.DoCmd( cCMD )
'nExitCode = oVFP9.Eval("_SCREEN.ExitCode")
End If
End Sub
Function GetBit(lngValue, BitNum)
Dim BitMask
If BitNum < 32 Then BitMask = 2 ^ (BitNum - 1) Else BitMask = "&H80000000"
GetBit = CBool(lngValue AND BitMask)
End Function

View File

@@ -0,0 +1,25 @@
*--------------------------------------------------------------------------------------
* FILENAME_CAPS.CFG
*
* FORMATO DE M<>SCARAS:
* --------------------
* filemask=FileName.Ext:FileNameCAPS.ExtCAPS
* Donde: FileName ==> Es el nombre del archivo
* Ext ==> Es la extensi<73>n
* FileNameCAPS ==> (U)ppercase, (L)owercase, (P)roper, (M)atch, (N)o change
* ExtCAPS ==> (U)ppercase, (L)owercase, (P)roper, (M)atch, (N)o change
*
* EJEMPLOS DE M<>SCARAS:
* ---------------------
* filemask=*.PDF:U.L ==> Convierte los archivos PDF a <NOMBREARCHIVO.pdf>
* filemask=*.DOT:L.U ==> Convierte los archivos DOT a <nombrearchivo.DOT>
* filemask=*.PRG:C.L ==> Convierte un archivo espec<65>fico a <Nombrearchivo.ini>
* filemask=EJeMPLo.ini:M.U ==> Convierte un archivo espec<65>fico a <EJeMPLo.INI>
* filemask=EjEmPlO.ini:P.U ==> Convierte un archivo espec<65>fico a <Ejemplo.INI>
*
* IMPORTANTE:
* -----------
* LAS CONVERSIONES SE REALIZAN EN EL ORDEN QUE SE PONGAN, COMENZANDO POR ARRIBA.
*--------------------------------------------------------------------------------------
filemask=README.ini:M.M
filemask=*.*:N.L

View File

@@ -0,0 +1,210 @@
*--------------------------------------------------------------------------------------------------------------
*-- FileName_Caps.PRG
*-- CAPITALIZA EL NOMBRE Y EXTENSI<53>N DEL ARCHIVO INDICADO SEG<45>N LA CONFIGURACI<43>N INDICADA
*-- Fernando D. Bozzo - 24/12/2013
*--------------------------------------------------------------------------------------------------------------
* EJEMPLOS CON M<>SCARAS IN-LINE (SIN ARCHIVO CONFIG):
* filename_caps( 'un_EjeMplo.PrG', '*.pRg:M.M' ) ==> 'un_EjeMplo.PrG'
* filename_caps( 'un_EjeMplo.PrG', '*.pRg:U.L' ) ==> 'UN_EJEMPLO.prg'
* filename_caps( 'un_EjeMplo.PrG', '*.pRg:P.U' ) ==> 'Un_ejemplo.PRG'
* filename_caps( 'UN_EJEMPLO.PRG', 'un_EjeMplo.pRg:M.M' ) ==> 'un_EjeMplo.pRg'
*
* EJEMPLO CON M<>SCARAS EN ARCHIVO CONFIG 'filename_caps.cfg':
* filemask=*.TXT:P.L
* filemask=*.PDF:U.L
* filemask=*.APP:P.U
* filemask=un_EjeMplo.pRg:M.M
*
* filename_caps( 'UN_EJEMPLO.TXT', 'filename_caps.cfg', 'F' ) ==> 'Un_ejemplo.prg'
* filename_caps( 'un_ejemplo.PDF', 'filename_caps.cfg', 'F' ) ==> 'UN_EJEMPLO.prg'
* filename_caps( 'un_ejemplo.prg', 'filename_caps.cfg', 'F' ) ==> 'Un_ejemplo.PRG'
* filename_caps( 'UN_EJEMPLO.PRG', 'filename_caps.cfg', 'F' ) ==> 'un_EjeMplo.PrG'
*--------------------------------------------------------------------------------------------------------------
* PAR<41>METROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT)
* tcFileName (!v IN ) Archivo a capitalizar
* tcFileMask (?v IN ) Mascara de archivo o archivo de configuraci<63>n de m<>scaras (U,L,P,N,M)
* => Significado: (U)pper,(L)ower,(P)roper,(M)atch,(N)one
* tcFileMaskType (?v IN ) 'M' o nada=FileMask es una m<>scara, 'F'=FileMask es un archivo config.
* tcLog (?@ OUT) Log generado por este programa
* tlRelanzarError (?v IN ) Indica si el error se debe relanzar (THROW) o no
* tcDontShowErrors (?v IN ) '1'=Don't show errors, Otherwise=Show errors
*--------------------------------------------------------------------------------------------------------------
LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors
#DEFINE CR_LF CHR(13)+CHR(10)
LOCAL lcFileName ;
, loFNC AS cl_FileName_Caps OF FileName_Caps.prg ;
, loEx AS EXCEPTION
loFNC = CREATEOBJECT("cl_FileName_Caps")
lcFileName = loFNC.Capitalize( tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors )
RETURN lcFileName
DEFINE CLASS cl_FileName_Caps AS Custom
PROCEDURE Capitalize
LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors
TRY
LOCAL loEx AS EXCEPTION, laMasks(1,4), lcDefinition, lcFileDef, lcMaskDef, laLines(1), lcMenErr ;
, I, X, lcName, lcExt, lcPath, lcFileName, laFile(1,5), lcLogFile, lcSys16, lnPosProg ;
, loFSO AS Scripting.FileSystemObject
loEx = NULL
loFSO = CREATEOBJECT('Scripting.FileSystemObject')
tcFileMaskType = EVL(tcFileMaskType,'M')
lcFileName = tcFileName
lcLogFile = FORCEEXT(SYS(16),'LOG')
tcLog = ''
tcDontShowErrors = EVL( tcDontShowErrors, '0' )
IF EMPTY(tcFileMask)
IF tcFileMaskType <> 'F'
tcLog = tcLog + CR_LF + '- No hay m<>scara definida ni archivo de configuraci<63>n'
EXIT && No se indic<69> nada que hacer
ELSE
lcSys16 = SYS(16)
IF LEFT(lcSys16,10) == 'PROCEDURE '
lnPosProg = AT(" ", lcSys16, 2) + 1
ELSE
lnPosProg = 1
ENDIF
tcFileMask = FORCEEXT( SUBSTR( lcSys16, lnPosProg ), 'CFG' )
tcLog = tcLog + CR_LF + '- Se usar<61> el archivo de configuraci<63>n [' + tcFileMask + ']'
IF NOT FILE(tcFileMask)
ERROR 'El archivo de configuraci<63>n de FileName_CAPS [' + tcFileMask + '] no existe!'
ENDIF
ENDIF
ENDIF
IF tcFileMaskType == 'M' && M<>scara in-line
*-- Estructura: Filename.Ext:FNameMask.ExtMask;...
tcLog = tcLog + CR_LF + '- M<>scaras definidas: [' + tcFileMask + ']'
FOR I = 1 TO OCCURS( ';', tcFileMask + ';' )
lcDefinition = GETWORDNUM( tcFileMask + ';', I, ';' )
lcFileDef = GETWORDNUM( lcDefinition, 1, ':' )
lcMaskDef = GETWORDNUM( lcDefinition, 2, ':' )
laMasks(I,1) = JUSTSTEM( lcFileDef )
laMasks(I,2) = JUSTEXT( lcFileDef )
laMasks(I,3) = JUSTSTEM( lcMaskDef )
laMasks(I,4) = JUSTEXT( lcMaskDef )
ENDFOR
ELSE && Archivo de configuraci<63>n
*-- Estructura:
* filemask=Filename.Ext:FilenameCap.ExtCap => Cap: (U)pper,(L)ower,(P)roper,(M)atch,(N)one
* filemask=*.PDF:U.L ==> <NOMBREARCHIVO.pdf>
* filemask=*.DOT:L.U ==> <nombrearchivo.DOT>
* filemask=*.PRG:C.N ==> <Nombrearchivo.ini>
* filemask=EjEmPlO.iNi:C.N ==> <Ejemplo.iNi>
X = 0
FOR I = 1 TO ALINES( laLines, FILETOSTR( tcFileMask ), 1+4 )
IF LOWER( LEFT( laLines(I), 8 ) ) == 'filemask'
tcLog = tcLog + CR_LF + '- Se encontr<74> la m<>scara: [' + laLines(I) + ']'
X = X + 1
lcDefinition = GETWORDNUM( laLines(I), 2, '=' )
lcFileDef = GETWORDNUM( lcDefinition, 1, ':' )
lcMaskDef = GETWORDNUM( lcDefinition, 2, ':' )
DIMENSION laMasks(X,4)
laMasks(X,1) = JUSTSTEM( lcFileDef ) && Name
laMasks(X,2) = JUSTEXT( lcFileDef ) && Ext
laMasks(X,3) = JUSTSTEM( lcMaskDef ) && Name Mask
laMasks(X,4) = JUSTEXT( lcMaskDef ) && Ext Mask
ENDIF
ENDFOR
ENDIF
*-- FileName: "c:\desa\sourcesafe\myfile.ext"
lcPath = JUSTPATH( lcFileName )
lcName = JUSTSTEM( lcFileName )
lcExt = JUSTEXT( lcFileName )
FOR I = 1 TO ALEN( laMasks, 1 )
IF LIKE( UPPER( FORCEEXT( laMasks(I,1), laMasks(I,2) ) ), UPPER( FORCEEXT( lcName, lcExt ) ) )
*-- EVALUACI<43>N DEL NOMBRE
DO CASE
CASE UPPER(laMasks(I,3)) == 'U'
lcFileName = UPPER(lcName)
CASE UPPER(laMasks(I,3)) == 'L'
lcFileName = LOWER(lcName)
CASE UPPER(laMasks(I,3)) == 'P'
lcFileName = PROPER(lcName)
CASE UPPER(laMasks(I,3)) == 'N'
lcFileName = lcName
OTHERWISE && (M)atch: Tal cual aparece definido
IF '?' $ laMasks(I,1) OR '*' $ laMasks(I,1)
ERROR 'Para (M)atch no puede usar m<>scara "' + laMasks(I,1) + '"'
ENDIF
lcFileName = laMasks(I,1)
ENDCASE
*-- EVALUACI<43>N DE LA EXTENSI<53>N
DO CASE
CASE UPPER(laMasks(I,4)) == 'U'
lcFileName = FORCEEXT( lcFileName + '.' + lcExt, UPPER(lcExt) )
CASE UPPER(laMasks(I,4)) == 'L'
lcFileName = FORCEEXT( lcFileName + '.' + lcExt, LOWER(lcExt) )
CASE UPPER(laMasks(I,4)) == 'P'
lcFileName = FORCEEXT( lcFileName + '.' + lcExt, PROPER(lcExt) )
CASE UPPER(laMasks(I,4)) == 'N'
lcFileName = FORCEEXT( lcFileName + '.' + lcExt, lcExt )
OTHERWISE && (M)atch: Tal cual aparece definido
IF '?' $ laMasks(I,1) OR '*' $ laMasks(I,1)
ERROR 'Para (M)atch no puede usar m<>scara "' + laMasks(I,1) + '"'
ENDIF
lcFileName = FORCEEXT( lcFileName + '.' + lcExt, laMasks(I,2) )
ENDCASE
lcFileName = FORCEPATH( lcFileName, lcPath )
tcLog = tcLog + CR_LF + '- El archivo se debe renombrar a [' + lcFileName + ']'
EXIT
ENDIF
ENDFOR
IF ADIR( laFile, lcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(lcFileName)
loFSO.MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
tcLog = tcLog + CR_LF + ' => Se renombrar<61> a [' + lcFileName + ']'
ELSE
tcLog = tcLog + CR_LF + ' => No se renombrar<61> a [' + lcFileName + '] porque ya estaba correcto.'
ENDIF
CATCH TO loEx
IF tlRelanzarError THEN
THROW
ELSE
IF '800a0046:' $ loEx.Details
tcLog = tcLog + CR_LF + ' => No se renombrar<61> a [' + lcFileName + '] porque el archivo estaba en uso o no se puede acceder a el.'
ENDIF
lcMenErr = 'ERROR ' + TRANSFORM(loEx.ERRORNO) + ', ' + loEx.MESSAGE + CHR(13) ;
+ loEx.PROCEDURE + ', line ' + TRANSFORM(loEx.LINENO) + CHR(13) ;
+ loEx.LINECONTENTS
IF TRANSFORM(tcDontShowErrors) # '1' THEN
MESSAGEBOX( lcMenErr, 0+16+4096, 'ATENCI<43>N!! Ha ocurrido un error al capitalizar', 600000 )
ENDIF
ENDIF
FINALLY
loFSO = NULL
tcFileName = lcFileName
*-- Si existe FileName_Caps.LOG, lo actualiza
IF FILE(lcLogFile)
IF NOT EMPTY(lcMenErr)
tcLog = tcLog + CR_LF + CR_LF + lcMenErr
ENDIF
STRTOFILE( tcLog, lcLogFile, 1 )
ENDIF
ENDTRY
RETURN lcFileName
ENDPROC
ENDDEFINE && CLASS cl_FileName_Caps AS Custom

View File

@@ -2,8 +2,8 @@ Lparameters toUpdateInfo
Local lcNote
With toUpdateInfo
.VersionNumber = 'v1.19.46'
.VersionDate = Date(2016,02,06)
.VersionNumber = 'v1.19.47'
.VersionDate = Date(2016,06,08)
.SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip'
.Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG'
@@ -17,6 +17,15 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg
Change History -------------------------------------------------------------
2016/06/08 v1.19.47
- Bug Fix: When a filename "*" is specified with a type "*", an automatic regeneration of all binary files is made from text files (Alejandro Sosa)
- BugFix: Added variable declaration (Doug Hennig)
- BugFix: Fixed incorrectly named variable (Doug Hennig)
- BugFix: Added missing assignment (Doug Hennig)
- Enhancement: Put double quotes around path in case in contains single quote (Doug Hennig)
- BugFix: Added "+16" to Debug flags to maintain internal defaults to not generate timestamps on xx2 files
- Feature: Added support for appending data from DB2 to DBF with the new value DBF_Conversion_Support=8. All datatypes except General. (Walter Nicholls)
2016/02/06 v1.19.46
- Bug Fix: set_UserValue() method causes error when trying to get information about another error and the VFP binary table can not be opened (ie, because corrupted memo)
- Feature: Added internal support for querying directory cfg information, with a new optional parameter, for API methods that require it (ie: get_Ext2FromExt, hasSupport*)

Binary file not shown.

View File

@@ -8,7 +8,7 @@
<TABLE>
<MemoFile></MemoFile>
<CodePage>1252</CodePage>
<LastUpdate>2013/12/12</LastUpdate>
<LastUpdate></LastUpdate>
<Database></Database>
<FileType>0x00000032</FileType>
<FileType_Descrip>Visual FoxPro, Varchar, Varbinary, or Blob-enabled</FileType_Descrip>
@@ -371,7 +371,7 @@
<Upd_Trig_Exp></Upd_Trig_Exp>
<Del_Trig_Exp></Del_Trig_Exp>
<TableComment></TableComment>
<Autoinc_Nextval>30</Autoinc_Nextval>
<Autoinc_Nextval>50</Autoinc_Nextval>
<Autoinc_Step>5</Autoinc_Step>
</FIELD>
</FIELDS>
@@ -381,12 +381,12 @@
<INDEXES>
<INDEX>
<TagName>LOGICO</TagName>
<TagType>BINARY</TagType>
<Key>LOGICO</Key>
<Filter></Filter>
<TagName>CARACTER</TagName>
<TagType>CANDIDATE</TagType>
<Key>CARACTER</Key>
<Filter>.NOT.EMPTY(caracter)</Filter>
<Order>ASCENDING</Order>
<Collate>MACHINE</Collate>
<Collate>GENERAL</Collate>
</INDEX>
<INDEX>
<TagName>ENTERO</TagName>
@@ -397,13 +397,93 @@
<Collate>MACHINE</Collate>
</INDEX>
<INDEX>
<TagName>CARACTER</TagName>
<TagType>CANDIDATE</TagType>
<Key>CARACTER</Key>
<Filter>.NOT.EMPTY(caracter)</Filter>
<TagName>LOGICO</TagName>
<TagType>BINARY</TagType>
<Key>LOGICO</Key>
<Filter></Filter>
<Order>ASCENDING</Order>
<Collate>GENERAL</Collate>
<Collate>MACHINE</Collate>
</INDEX>
</INDEXES>
<RECORDS>
<RECORD num="4">
<CARACTER></CARACTER>
<FECHA>/ / </FECHA>
<FECHORA>/ / : : </FECHORA>
<LOGICO>.F.</LOGICO>
<DOBLE>0.00000</DOBLE>
<FLOTANTE>0.000000</FLOTANTE>
<NUMERICO>0.000</NUMERICO>
<BLOB></BLOB>
<MONEDA>0.0000</MONEDA>
<ENTERO>0</ENTERO>
<NOTAS></NOTAS>
<VAR_BINARY></VAR_BINARY>
<VAR_CHAR></VAR_CHAR>
<NOTASBIN></NOTASBIN>
<CARC_BIN>ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg</CARC_BIN>
<VARCHARBIN></VARCHARBIN>
<ID_AUTOINC>45</ID_AUTOINC>
</RECORD>
<RECORD num="2">
<CARACTER>axaxaxaxaXAXA</CARACTER>
<FECHA>1969/11/26</FECHA>
<FECHORA>1969/11/26 22:10:06</FECHORA>
<LOGICO>.T.</LOGICO>
<DOBLE>123.45676</DOBLE>
<FLOTANTE>123.456786</FLOTANTE>
<NUMERICO>123.456</NUMERICO>
<BLOB>NgAuAEUAcwB0AGEAIABlAHMAIAB1AG4AYQAgAGYAcgBhAHMAZQAgAGMAbwBkAGkAZgBpAGMAYQBkAGEAIABlAG4AIABoAGUAeABhACAAeQAgAGMAbwBuACAAYwBhAHIAYQBjAHQAZQByAGUAcwAgAGUAcwBwAGUAYwBpAGEAbABlAHMALgAgAOEA6QDtAPMA+gDBAMkAzQDTANoAxADLAM8A1gDcAOQA6wDvAPYA/ADgAOgA7ADyAPkA8QDRAMcA5wBeAA==</BLOB>
<MONEDA>12345.6786</MONEDA>
<ENTERO>1234567896</ENTERO>
<NOTAS>6.notas TXT.&#13;&#10;áéíóúÄËÏÖÜÑñäëïöü.&#13;&#10;^FinÇç</NOTAS>
<VAR_BINARY>Ni5GcmFzZSBVVEYtOC4gw6HDqcOtw7PDusOEw4vDj8OWw5w=</VAR_BINARY>
<VAR_CHAR>var char 6.áéíóúÜÑ</VAR_CHAR>
<NOTASBIN>yQBzAHQAYQAgAGUAcwAgAGwAYQAgAHMAZQDxAGEAbAAhAA==</NOTASBIN>
<CARC_BIN>Q2hhckJpbi02LsOhw6nDrcOzw7rDnMORICAgICAg</CARC_BIN>
<VARCHARBIN>VkNoYXJCaW4tNi7DocOpw63Ds8O6w5zDkQ==</VARCHARBIN>
<ID_AUTOINC>35</ID_AUTOINC>
</RECORD>
<RECORD num="1">
<CARACTER>lalal.áéíóúÜÑ</CARACTER>
<FECHA>1969/11/27</FECHA>
<FECHORA>1969/11/27 22:10:07</FECHORA>
<LOGICO>.T.</LOGICO>
<DOBLE>123.45677</DOBLE>
<FLOTANTE>123.456787</FLOTANTE>
<NUMERICO>123.457</NUMERICO>
<BLOB>NwAuAEUAcwB0AGEAIABlAHMAIAB1AG4AYQAgAGYAcgBhAHMAZQAgAGMAbwBkAGkAZgBpAGMAYQBkAGEAIABlAG4AIABoAGUAeABhACAAeQAgAGMAbwBuACAAYwBhAHIAYQBjAHQAZQByAGUAcwAgAGUAcwBwAGUAYwBpAGEAbABlAHMALgAgAOEA6QDtAPMA+gDBAMkAzQDTANoAxADLAM8A1gDcAOQA6wDvAPYA/ADgAOgA7ADyAPkA8QDRAMcA5wBeAA==</BLOB>
<MONEDA>12345.6787</MONEDA>
<ENTERO>1234567897</ENTERO>
<NOTAS>7.notas TXT.&#13;&#10;áéíóúÄËÏÖÜÑñäëïöü.&#13;&#10;^FinÇç</NOTAS>
<VAR_BINARY>Ny5GcmFzZSBVVEYtOC4gw6HDqcOtw7PDusOEw4vDj8OWw5w=</VAR_BINARY>
<VAR_CHAR>var char 7.áéíóúÜÑ</VAR_CHAR>
<NOTASBIN>yQB4AGkAdABvAHMAIADaAG4AaQBjAG8AcwAhACAAOgApAA==</NOTASBIN>
<CARC_BIN>Q2hhckJpbi03LsOhw6nDrcOzw7rDnMORICAgICAg</CARC_BIN>
<VARCHARBIN>VkNoYXJCaW4tNy7DocOpw63Ds8O6w5zDkQ==</VARCHARBIN>
<ID_AUTOINC>30</ID_AUTOINC>
</RECORD>
<RECORD num="3">
<CARACTER>pepepepepEPE</CARACTER>
<FECHA>1969/11/25</FECHA>
<FECHORA>1969/11/25 22:10:05</FECHORA>
<LOGICO>.T.</LOGICO>
<DOBLE>123.45675</DOBLE>
<FLOTANTE>123.456785</FLOTANTE>
<NUMERICO>123.455</NUMERICO>
<BLOB>NQAuAEUAcwB0AGEAIABlAHMAIAB1AG4AYQAgAGYAcgBhAHMAZQAgAGMAbwBkAGkAZgBpAGMAYQBkAGEAIABlAG4AIABoAGUAeABhACAAeQAgAGMAbwBuACAAYwBhAHIAYQBjAHQAZQByAGUAcwAgAGUAcwBwAGUAYwBpAGEAbABlAHMALgAgAOEA6QDtAPMA+gDBAMkAzQDTANoAxADLAM8A1gDcAOQA6wDvAPYA/ADgAOgA7ADyAPkA8QDRAMcA5wBeAA==</BLOB>
<MONEDA>12345.6785</MONEDA>
<ENTERO>1234567895</ENTERO>
<NOTAS>5.notas TXT.&#13;&#10;áéíóúÄËÏÖÜÑñäëïöü.&#13;&#10;^FinÇç</NOTAS>
<VAR_BINARY>NS5GcmFzZSBVVEYtOC4gw6HDqcOtw7PDusOEw4vDj8OWw5w=</VAR_BINARY>
<VAR_CHAR>var char 5.áéíóúÜÑ</VAR_CHAR>
<NOTASBIN>yQBzAHQAYQAgAGUAcwAgAGwAYQAgAHMAZQDxAGEAbAAhAA==</NOTASBIN>
<CARC_BIN>Q2hhckJpbi01LsOhw6nDrcOzw7rDnMORICAgICAg</CARC_BIN>
<VARCHARBIN>VkNoYXJCaW4tNS7DocOpw63Ds8O6w5zDkQ==</VARCHARBIN>
<ID_AUTOINC>40</ID_AUTOINC>
</RECORD>
</RECORDS>
</TABLE>

Binary file not shown.

View File

@@ -0,0 +1,3 @@
DBF_Conversion_Support: 8
DBF_Conversion_Order: caracter
DBF_Conversion_Condition: .T.

Binary file not shown.

View File

@@ -286,9 +286,16 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase
this.assertequals( lnFields_OUT, lnFields_IN, '[Cantidad de campos IN y OUT]' )
FOR I = 1 TO lnFields_IN
FOR X = 1 TO 18
THIS.assertequals( laCampos_IN(I,X), laCampos_OUT(I,X), '[Comparando estructura del campo ' + laCampos_IN(I,1) + ']' )
ENDFOR
IF laCampos_IN(I,18) > 0 && Autoinc_Step
*-- Para los campos AutoInc solo se comparan los primeros 4 datos de estructura
FOR X = 1 TO 4
THIS.assertequals( laCampos_IN(I,X), laCampos_OUT(I,X), '[Comparando estructura del campo ' + laCampos_IN(I,1) + ']' )
ENDFOR
ELSE
FOR X = 1 TO 18
THIS.assertequals( laCampos_IN(I,X), laCampos_OUT(I,X), '[Comparando estructura del campo ' + laCampos_IN(I,1) + ']' )
ENDFOR
ENDIF
ENDFOR
CATCH TO loEx

View File

@@ -1,5 +1,5 @@
****************************************************************************************************
* FOXBIN2PRG v1.19.43
* FOXBIN2PRG v1.19.47
* CONFIGURATION FILE / ARCHIVO DE CONFIGURACI<43>N
****************************************************************************************************
@@ -34,7 +34,7 @@
* LBX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
* MNX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
* DBC_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
* DBF_Conversion_Support: 1 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (No Bidirectional!)
* DBF_Conversion_Support: 1 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge/Only Structure!), 4=Generate TXT with DATA (Diff), 8=Export and Import DATA (Merge/Structure & Data)
* >>DBF_Conversion_Support NOTE: >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care.
* >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado.
* DBF_Conversion_Included: * && If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar m<>ltiples m<>scaras de archivo: www,fb2p_free.dbf

Binary file not shown.

View File

@@ -26,7 +26,7 @@ _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa):
_ProductName = "FOXBIN2PRG"
_MajorVer = "1"
_MinorVer = "19"
_Revision = "46"
_Revision = "47"
_LanguageID = "1034"
_AutoIncrement = "0"
*</DevInfo>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff