From e426b168d0964c067bfc5fde0892ac5221925345 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 10 Feb 2016 23:46:55 +0100 Subject: [PATCH] - Agregado de los fuentes de FileName_Caps.exe --- FileName_Caps/CONFIG/config.fpw | 2 + FileName_Caps/Filename_caps.pj2 | 87 +++++++++++ FileName_Caps/Filename_caps.pjt | Bin 0 -> 8399 bytes FileName_Caps/Filename_caps.pjx | Bin 0 -> 1583 bytes FileName_Caps/Normalize_FileNames.vbs | 96 ++++++++++++ FileName_Caps/filename_caps.cfg | 25 +++ FileName_Caps/filename_caps.prg | 210 ++++++++++++++++++++++++++ 7 files changed, 420 insertions(+) create mode 100644 FileName_Caps/CONFIG/config.fpw create mode 100644 FileName_Caps/Filename_caps.pj2 create mode 100644 FileName_Caps/Filename_caps.pjt create mode 100644 FileName_Caps/Filename_caps.pjx create mode 100644 FileName_Caps/Normalize_FileNames.vbs create mode 100644 FileName_Caps/filename_caps.cfg create mode 100644 FileName_Caps/filename_caps.prg diff --git a/FileName_Caps/CONFIG/config.fpw b/FileName_Caps/CONFIG/config.fpw new file mode 100644 index 0000000..ef3f93b --- /dev/null +++ b/FileName_Caps/CONFIG/config.fpw @@ -0,0 +1,2 @@ +SCREEN=OFF +RESOURCE=OFF \ No newline at end of file diff --git a/FileName_Caps/Filename_caps.pj2 b/FileName_Caps/Filename_caps.pj2 new file mode 100644 index 0000000..24e849d --- /dev/null +++ b/FileName_Caps/Filename_caps.pj2 @@ -0,0 +1,87 @@ +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡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) ) ) ) + +* +_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" +* + + +* +*<.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" /> + * + + .ITEM('__newproject.f2b').Remove() + + * + * + + * + * + + * + .ITEM(lcCurdir + 'config\config.fpw').Type = 'T' + * +ENDWITH + +WITH loProject + * + .SetMain(lcCurdir + 'filename_caps.prg') + .Debug = .T. + .Encrypted = .F. + *<.CmntStyle = 1 /> + *<.NoLogo = .F. /> + *<.SaveCode = .T. /> + .ProjectHookLibrary = '' + .ProjectHookClass = '' + * +ENDWITH + + +_VFP.Projects('Filename_caps.pjx').Close() +*ERASE '__newproject.f2b' +CD (lcCurdir) +RETURN \ No newline at end of file diff --git a/FileName_Caps/Filename_caps.pjt b/FileName_Caps/Filename_caps.pjt new file mode 100644 index 0000000000000000000000000000000000000000..70611661327bbbc91aca8b7c5e36461fc7710ebd GIT binary patch literal 8399 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 Es el nombre del archivo +* Ext ==> Es la extensió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 +* filemask=*.DOT:L.U ==> Convierte los archivos DOT a +* filemask=*.PRG:C.L ==> Convierte un archivo específico a +* filemask=EJeMPLo.ini:M.U ==> Convierte un archivo específico a +* filemask=EjEmPlO.ini:P.U ==> Convierte un archivo específico a +* +* IMPORTANTE: +* ----------- +* LAS CONVERSIONES SE REALIZAN EN EL ORDEN QUE SE PONGAN, COMENZANDO POR ARRIBA. +*-------------------------------------------------------------------------------------- +filemask=README.ini:M.M +filemask=*.*:N.L diff --git a/FileName_Caps/filename_caps.prg b/FileName_Caps/filename_caps.prg new file mode 100644 index 0000000..7c07146 --- /dev/null +++ b/FileName_Caps/filename_caps.prg @@ -0,0 +1,210 @@ +*-------------------------------------------------------------------------------------------------------------- +*-- FileName_Caps.PRG +*-- CAPITALIZA EL NOMBRE Y EXTENSIÓN DEL ARCHIVO INDICADO SEGÚN LA CONFIGURACIÓ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Á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ó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ón' + EXIT && No se indicó 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á el archivo de configuración [' + tcFileMask + ']' + IF NOT FILE(tcFileMask) + ERROR 'El archivo de configuració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ón + *-- Estructura: + * filemask=Filename.Ext:FilenameCap.ExtCap => Cap: (U)pper,(L)ower,(P)roper,(M)atch,(N)one + * filemask=*.PDF:U.L ==> + * filemask=*.DOT:L.U ==> + * filemask=*.PRG:C.N ==> + * filemask=EjEmPlO.iNi:C.N ==> + 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ó 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Ó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ÓN DE LA EXTENSIÓ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á a [' + lcFileName + ']' + ELSE + tcLog = tcLog + CR_LF + ' => No se renombrará 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á 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Ó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