-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfoxpro_plasticscm_bin2prg.prg
312 lines (240 loc) · 10.4 KB
/
foxpro_plasticscm_bin2prg.prg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
*------------------------------------------------------------------------------
*-- FOXPRO_PLASTICSCM_BIN2PRG.PRG - Visual FoxPro 9.0 DIFF/MERGE para PlasticSCM
*-- Fernando D. Bozzo - 23/01/2014
*------------------------------------------------------------------------------
* PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT)
* tcSourcePath (!v IN ) Path del archivo origen
*--------------------------------------------------------------------------------------------------------------
LPARAMETERS tcSourcePath
#DEFINE C_CR CHR(13)
#DEFINE C_LF CHR(10)
#DEFINE CR_LF C_CR + C_LF
TRY
LOCAL loEx AS EXCEPTION, loTool AS CL_SCM_2_LIB OF 'FOXPRO_PLASTICSCM_BIN2PRG.PRG'
LOCAL lsBuffer, lnAddress, lnBufsize, lnPcount ;
, lcOperation, lcSourcePath, lcDestinationPath, lcSourceSymbolic, lcDestinationSymbolic ;
, lcBasePath, lcBaseSymbolic, lcOutputPath
lnPcount = PCOUNT()
loEx = NULL
IF NOT 'FOXPRO_PLASTICSCM_DM.' $ SET("Procedure")
IF _VFP.StartMode = 0 THEN
SET PROCEDURE TO (FORCEPATH( 'FOXPRO_PLASTICSCM_DM.PRG', JUSTPATH(SYS(16)) ) )
ELSE
SET PROCEDURE TO (FORCEPATH( 'FOXPRO_PLASTICSCM_DM.EXE', JUSTPATH(SYS(16)) ) )
ENDIF
ENDIF
*tcTool = UPPER( EVL( tcTool, 'DIFF' ) )
loTool = CREATEOBJECT('CL_SCM_2_LIB')
_SCREEN.ADDPROPERTY( 'ExitCode', 0 )
loTool.P_MakeText( @loEx, tcSourcePath )
CATCH TO loEx
lcMenError = 'CurDir: ' + SYS(5)+CURDIR() + CR_LF ;
+ 'Error ' + TRANSFORM(loEx.ERRORNO) + ', ' + loEx.MESSAGE + CR_LF ;
+ loEx.PROCEDURE + ', line ' + TRANSFORM(loEx.LINENO) + CR_LF ;
+ loEx.LINECONTENTS + CR_LF ;
+ loEx.USERVALUE
loTool.writeLog( lcMenError )
FINALLY
loTool = NULL
ENDTRY
IF NOT ISNULL(loEx)
loEx = NULL
_SCREEN.ADDPROPERTY( 'ExitCode', 1 )
ENDIF
RELEASE loEx, loTool
IF _VFP.STARTMODE <= 1
RETURN
ENDIF
IF _SCREEN.ExitCode = 1
DECLARE ExitProcess IN Win32API INTEGER ExitCode
ExitProcess(1)
ENDIF
QUIT
*******************************************************************************
*DEFINE CLASS CL_SCM_2_LIB AS CL_SCM_LIB OF 'FOXPRO_PLASTICSCM_DM.PRG' && For Debugging
DEFINE CLASS CL_SCM_2_LIB AS CL_SCM_LIB OF 'FOXPRO_PLASTICSCM_DM.EXE'
_MEMBERDATA = [<VFPData>] ;
+ [<memberdata name="p_maketext" display="P_MakeText"/>] ;
+ [<memberdata name="procesararchivospendientes" display="ProcesarArchivosPendientes"/>] ;
+ [</VFPData>]
#IF .F.
LOCAL THIS AS CL_SCM_2_LIB OF 'FOXPRO_PLASTICSCM_BIN2PRG.PRG'
#ENDIF
cOperation = 'REGEN'
PROCEDURE P_MakeText
*--------------------------------------------------------------------------------------------------------------
* REGENERA EL TEXTO DEL BINARIO SELECCIONADO
*--------------------------------------------------------------------------------------------------------------
* PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT)
* toEx (?@ OUT) Objeto con información del error
* tcSourcePath (v! IN ) Path del archivo origen
* tcWorkspaceDir (v? IN ) Path del workspace
*--------------------------------------------------------------------------------------------------------------
LPARAMETERS toEx AS EXCEPTION, tcSourcePath, tcWorkspaceDir
TRY
LOCAL lcMenError, lcTempFile, lcExt, lcCmd, llPreInit, lcDebug, lcDontShowProgress, lcDontShowErrors ;
, llProcessed ;
, loFB2P AS c_FoxBin2Prg OF 'FOXBIN2PRG.PRG'
WITH THIS AS CL_SCM_2_LIB OF 'FOXPRO_PLASTICSCM_BIN2PRG.PRG'
llPreInit = .l_Initialized
.Initialize()
loFB2P = .o_FoxBin2Prg
lcExt = UPPER( JUSTEXT( tcSourcePath ) )
toEx = NULL
*-- FILTRO LAS EXTENSIONES PERMITIDAS (EXCLUYO LOS DBFs Y DBCs)
loFB2P.evaluateConfiguration( '','','','','','','','', tcSourcePath )
DO CASE
CASE NOT loFB2P.hasSupport_Bin2Prg( lcExt )
.writeLog( '- Salteado por no tener soporte para conversión (' + tcSourcePath + ')' )
CASE loFB2P.wasProcessed( tcSourcePath )
.writeLog( '- Salteado por haber sido procesado anteriormente (' + tcSourcePath + ')' )
OTHERWISE
IF NOT llPreInit
.writeLog( TTOC(DATETIME()) + ' ---' + PADR( PROGRAM(),77, '-' ) )
ENDIF
*.writeLog( 'Evaluando archivo [' + tcSourcePath + '] desde directorio [' + SYS(5)+CURDIR() + ']...' )
*-- REGENERO EL BINARIO Y RECOMPILO
.writeLog( '- Regenerando texto para archivo [' + tcSourcePath + ']...' )
lcDebug = ''
lcDontShowProgress = '1'
lcDontShowErrors = '1'
*loFB2P.execute( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ;
, toModulo, toEx, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps)
loFB2P.execute( tcSourcePath, 'BIN2PRG', '', '', lcDontShowErrors, lcDebug, lcDontShowProgress ;
, '', '', .T., '', tcWorkspaceDir, '' )
llProcessed = .T.
ENDCASE
ENDWITH && THIS AS CL_SCM_LIB OF 'FOXPRO_PLASTICSCM_DM.PRG'
CATCH TO toEx WHEN toEx.MESSAGE = '0'
toEx = NULL
CATCH TO toEx WHEN toEx.ErrorNo = 1799 && Conversion Cancelled
CATCH TO toEx WHEN INLIST(toEx.ErrorNo, 1098, 2071) && Errores controlados
CATCH TO toEx WHEN loFB2P.l_Error && Demás errores reportados por FoxBin2Prg
CATCH TO toEx
THROW
FINALLY
STORE NULL TO loFB2P
*IF NOT llPreInit
* RELEASE PROCEDURE ( FORCEPATH( "FOXBIN2PRG.EXE", THIS.cEXEPath ) )
*ENDIF
*CD (THIS.cEXEPath)
ENDTRY
RETURN llProcessed
ENDPROC
PROCEDURE ProcesarArchivosPendientes
LPARAMETERS tcFileName
TRY
LOCAL lcMenError, lnFileCount, lcWorkspaceDir, laFiles(1), I, lnProcesados, llUserCanceled ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
, loException AS EXCEPTION ;
, loFB2P AS c_FoxBin2Prg OF 'FOXBIN2PRG.PRG'
WITH THIS AS CL_SCM_LIB OF 'FOXPRO_PLASTICSCM_BIN2PRG.PRG'
STORE 0 TO lnProcesados, I
.Initialize()
loLang = _SCREEN.o_FoxBin2Prg_Lang
lcWorkspaceDir = .ObtenerWorkspaceDir( tcFileName )
loFB2P = .o_FoxBin2Prg
.ObtenerCambiosPendientes( lcWorkspaceDir, @laFiles, @lnFileCount )
.writeLog()
.writeLog( TTOC(DATETIME()) + ' ---' + PADR( PROGRAM(),77, '-' ) )
.writeLog( 'Encontrados ' + TRANSFORM(lnFileCount) + ' archivos para filtrar y procesar' )
.writeLog( 'Se recompilará desde ' + lcWorkspaceDir )
loFB2P.loadProgressbarForm()
loFB2P.o_Frm_Avance.CAPTION = STRTRAN(loFB2P.o_Frm_Avance.CAPTION,'FoxBin2Prg','Bin>Prg') + ' - WKS [' + lcWorkspaceDir + ']'
loFB2P.o_Frm_Avance.ALWAYSONTOP = .T.
*loFB2P.o_Frm_Avance.ALWAYSONTOP = .F.
FOR I = 1 TO lnFileCount
loFB2P.o_Frm_Avance.updateProgressbar( 'Procesando ' + laFiles(I) + '...', I, lnFileCount, 0 )
IF .P_MakeText( @loException, laFiles(I), lcWorkspaceDir )
lnProcesados = lnProcesados + 1
ENDIF
IF VARTYPE(loException) = "O" AND loException.ErrorNo = 1799 THEN && Conversion Cancelled
llUserCanceled = .T.
EXIT
ENDIF
.FlushLog()
ENDFOR
*loFB2P.o_Frm_Avance.HIDE()
IF lnProcesados = 0
IF loFB2P.c_Language = "ES"
THIS.c_TextError = 'Hay 0 Cambios Pendientes para Procesar!'
ELSE
THIS.c_TextError = 'There are 0 pending changes to Process!'
ENDIF
ELSE
IF loFB2P.c_Language = "ES"
THIS.c_TextError = 'Se han procesado ' + TRANSFORM(lnProcesados) + ' Cambios Pendientes.'
ELSE
THIS.c_TextError = '' + TRANSFORM(lnProcesados) + ' Pending Changes have been Processed.'
ENDIF
ENDIF
ENDWITH && THIS
CATCH TO loException
THIS.l_Error = .T.
lcMenError = 'Error ' + TRANSFORM(loException.ERRORNO) + ', ' + loException.MESSAGE + CR_LF ;
+ ', Proced.' + loException.PROCEDURE + ', line ' + TRANSFORM(loException.LINENO) + CR_LF ;
+ ', content: ' + loException.LINECONTENTS + CR_LF ;
+ ' - para el archivo "' + IIF(I=0,tcFileName,laFiles(I)) + '"' + CR_LF ;
+ loException.USERVALUE
THIS.c_TextError = lcMenError
THIS.writeLog( lcMenError )
FINALLY
IF VARTYPE(loFB2P) = "O" AND NOT ISNULL(loFB2P) THEN
loFB2P.unloadProgressbarForm(.T.)
loFB2P = NULL
ENDIF
ENDTRY
RETURN
ENDPROC
PROCEDURE ProcesarArchivos
LPARAMETERS tcFileName
TRY
LOCAL lcMenError, lnFileCount, lcWorkspaceDir, laFiles(1), I, lnProcesados, llUserCanceled ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
, loException AS EXCEPTION ;
, loFB2P AS c_FoxBin2Prg OF 'FOXBIN2PRG.PRG'
WITH THIS AS CL_SCM_LIB OF 'FOXPRO_PLASTICSCM_DM.PRG'
STORE 0 TO lnProcesados, I
.Initialize()
loLang = _SCREEN.o_FoxBin2Prg_Lang
lcWorkspaceDir = .ObtenerWorkspaceDir( tcFileName )
loFB2P = .o_FoxBin2Prg
.ObtenerArchivosDelDirectorio( lcWorkspaceDir, @laFiles, @lnFileCount )
.writeLog()
.writeLog( TTOC(DATETIME()) + ' ---' + PADR( PROGRAM(),77, '-' ) )
.writeLog( 'Encontrados ' + TRANSFORM(lnFileCount) + ' archivos para filtrar y procesar' )
.writeLog( 'Se recompilará desde ' + lcWorkspaceDir )
loFB2P.loadProgressbarForm()
loFB2P.o_Frm_Avance.CAPTION = STRTRAN(loFB2P.o_Frm_Avance.CAPTION,'FoxBin2Prg','Bin>Prg') + ' - WKS [' + lcWorkspaceDir + ']'
loFB2P.o_Frm_Avance.ALWAYSONTOP = .T.
*loFB2P.o_Frm_Avance.ALWAYSONTOP = .F.
FOR I = 1 TO lnFileCount
loFB2P.o_Frm_Avance.updateProgressbar( 'Procesando ' + laFiles(I) + '...', I, lnFileCount, 0 )
IF .P_MakeText( @loException, laFiles(I), lcWorkspaceDir )
lnProcesados = lnProcesados + 1
ENDIF
IF VARTYPE(loException) = "O" AND loException.ErrorNo = 1799 THEN && Conversion Cancelled
llUserCanceled = .T.
EXIT
ENDIF
.FlushLog()
ENDFOR
ENDWITH && THIS
CATCH TO loException
THIS.l_Error = .T.
lcMenError = 'Error ' + TRANSFORM(loException.ERRORNO) + ', ' + loException.MESSAGE + CR_LF ;
+ ', Proced.' + loException.PROCEDURE + ', line ' + TRANSFORM(loException.LINENO) + CR_LF ;
+ ', content: ' + loException.LINECONTENTS + CR_LF ;
+ ' - para el archivo "' + IIF(I=0,tcFileName,laFiles(I)) + '"' + CR_LF ;
+ loException.USERVALUE
THIS.c_TextError = lcMenError
THIS.writeLog( lcMenError )
FINALLY
IF VARTYPE(loFB2P) = "O" AND NOT ISNULL(loFB2P) THEN
loFB2P.unloadProgressbarForm(.T.)
loFB2P = NULL
ENDIF
ENDTRY
RETURN
ENDPROC
ENDDEFINE