BEMAFI.PRG
Enviado: 16 Ago 2006 20:13
Meu programa é em Clipper 5.01.
Compilei o meu programa junto com o BEMAFI.PRG para poder definir onde eu quero que seja criado o arquivo BEMAFI.CMD (no caso c:\DOS),
Na rotina BEMAFI.PRG tem o comando FILESIZE que não tem no Clipper 5.01, então eu peguei uma rotina colocada neste forum mas ao executar o programa onde é utlizado o arquivo BEMAFI.PRG, aparece a seguinte mensagem : "Programa muito grande para ser alocado na memória"
Alguém sabe como resolver isto???
Abaixo a rotina do BEMAFI.PRG com a modificação:
// BEMATECH
#include "Fileio.ch"
#include "fiscal.ch"
///////
FUNCTION fopen_bema
///////
Parameters ponteiro, modo
if !file(ponteiro+"b")
nHandle = fOpen("BEMAFI.INI", FO_READWRITE)
aux = -1 //aux de retorno
if FERROR() = 0 //Confirma se abriu
nTam = FSeek(nHandle, 0, FS_END) //tamanho do arquivo para verificar se existe
if nTam > 0
FileTop(nHandle)
FSeek ( nHandle, 19, FS_SET )
FWrite( nHandle, if(UPPER(ponteiro) = "COM1", "0", if( UPPER(ponteiro) = "COM2", "1", if( UPPER(ponteiro) = "COM3", "2", "3"))), 1)
if FERROR() = 0
aux = 6
else
aux = -1
endif
endif
fvar(ponteiro+"b", " ", "E")
endif
Fclose(nHandle)
else
aux = 6
endIf
return aux
///////
FUNCTION FWrite_bema
///////
PARAMETERS ponteiro, comando, qtde
Delete File( "c:\dos\BEMAFI.CMD" )
Delete File( "STATUS.TXT" )
Delete File( "RETORNO.TXT" )
if len(comando) = qtde
nHandle = FCreate( "c:\dos\BEMAFI.CMD" )
FWrite( nHandle, @Comando, Len( Comando ) )
if FERROR() = 0
FClose( nHandle )
!BEMAFI.EXE
situacao = len(comando) //retorno padrao do fwrite
else
situacao = 0
endif
endif
Return Situacao
///////
FUNCTION Fread_bema
///////
PARAMETERS ponteiro, retorno, qtde
LOCAL nStatus
LOCAL nRetorno := " "
sRetorno = " "
if File("STATUS.TXT")
nStatus = Fopen("STATUS.TXT")
nTamStatus = FSeek( nStatus, 0, FS_END )
Fclose(nStatus)
nStatus = Fopen("STATUS.TXT")
sStatus = " "
posStatus = 0
aux_Status = " "
vezes = val(Fvar("VEZES","1","L"))
if nTamStatus > 0
for posStatus = 1 to nTamStatus
FRead( nStatus, @aux_status, 1)
sStatus = sStatus + aux_status
next
fclose(nStatus)
if vezes = 1 //escreve o retorno de acordo com n-vezes
sRetorno = chr(val(Left(sStatus,4)))
else
if vezes = 2
sRetorno = chr(val(substr(sStatus, 5,3)))
else
if vezes = 3
sRetorno = chr(val(Right(sStatus, 3)))
Delete File ("VEZES")
Delete File ("STATUS.TXT")
endIf
endIf
endIf
if !(vezes >= 3)
vezes++
Fvar("VEZES", str(vezes), "E")
Fclose(nStatus)
endif
endif
else
if FILE("RETORNO.TXT")
nHandle = fOpen("RETORNO.TXT")
nTamRetorno = FSeek( nHandle, 0, FS_END )
fclose( nHandle )
indice = fvar( "INDICE", "1", "L" )
nHandle = FOpen("RETORNO.TXT")
PosRetorno = 0
for PosRetorno = 1 to val(indice)
FRead(nHandle, @nRetorno, 1)
next
fclose(nHandle)
indice = STR(val(indice)+1)
fvar("INDICE", LTRIM(indice), "E")
if val(LTRIM(indice)) > nTamRetorno
delete file ("RETORNO.TXT")
delete file ("INDICE")
endIf
else
sRetorno = " "
endIf
if (nRetorno != " ")
sretorno := nRetorno
endIf
endif
retorno = sretorno
return if (sretorno = " ",0, 1)
////////////////////
FUNCTION fvar
////////////////////
PARAMETERS variavel, valor, ler
aux = " "
aux1 = " "
ContVar = 0
if FILE ( variavel ) .AND. UPPER(Ler) = "L"
nHandle = FOpen(variavel)
nTam := FSEEK(nHandle, 0, FS_END)
* nTam = FileSize(nHandle) // era este o comando usado originalmente
FClose(nHandle)
nHandle = FOpen(variavel)
for ContVar = 1 to nTam
FRead(nHandle, @aux1, 1)
aux := aux + aux1
next
else
nHandle = FCreate( Variavel )
Fwrite(nHandle, ltrim(valor), len(valor))
aux = ltrim(valor)
endif
Fclose(nHandle)
RETURN AUX
Compilei o meu programa junto com o BEMAFI.PRG para poder definir onde eu quero que seja criado o arquivo BEMAFI.CMD (no caso c:\DOS),
Na rotina BEMAFI.PRG tem o comando FILESIZE que não tem no Clipper 5.01, então eu peguei uma rotina colocada neste forum mas ao executar o programa onde é utlizado o arquivo BEMAFI.PRG, aparece a seguinte mensagem : "Programa muito grande para ser alocado na memória"
Alguém sabe como resolver isto???
Abaixo a rotina do BEMAFI.PRG com a modificação:
// BEMATECH
#include "Fileio.ch"
#include "fiscal.ch"
///////
FUNCTION fopen_bema
///////
Parameters ponteiro, modo
if !file(ponteiro+"b")
nHandle = fOpen("BEMAFI.INI", FO_READWRITE)
aux = -1 //aux de retorno
if FERROR() = 0 //Confirma se abriu
nTam = FSeek(nHandle, 0, FS_END) //tamanho do arquivo para verificar se existe
if nTam > 0
FileTop(nHandle)
FSeek ( nHandle, 19, FS_SET )
FWrite( nHandle, if(UPPER(ponteiro) = "COM1", "0", if( UPPER(ponteiro) = "COM2", "1", if( UPPER(ponteiro) = "COM3", "2", "3"))), 1)
if FERROR() = 0
aux = 6
else
aux = -1
endif
endif
fvar(ponteiro+"b", " ", "E")
endif
Fclose(nHandle)
else
aux = 6
endIf
return aux
///////
FUNCTION FWrite_bema
///////
PARAMETERS ponteiro, comando, qtde
Delete File( "c:\dos\BEMAFI.CMD" )
Delete File( "STATUS.TXT" )
Delete File( "RETORNO.TXT" )
if len(comando) = qtde
nHandle = FCreate( "c:\dos\BEMAFI.CMD" )
FWrite( nHandle, @Comando, Len( Comando ) )
if FERROR() = 0
FClose( nHandle )
!BEMAFI.EXE
situacao = len(comando) //retorno padrao do fwrite
else
situacao = 0
endif
endif
Return Situacao
///////
FUNCTION Fread_bema
///////
PARAMETERS ponteiro, retorno, qtde
LOCAL nStatus
LOCAL nRetorno := " "
sRetorno = " "
if File("STATUS.TXT")
nStatus = Fopen("STATUS.TXT")
nTamStatus = FSeek( nStatus, 0, FS_END )
Fclose(nStatus)
nStatus = Fopen("STATUS.TXT")
sStatus = " "
posStatus = 0
aux_Status = " "
vezes = val(Fvar("VEZES","1","L"))
if nTamStatus > 0
for posStatus = 1 to nTamStatus
FRead( nStatus, @aux_status, 1)
sStatus = sStatus + aux_status
next
fclose(nStatus)
if vezes = 1 //escreve o retorno de acordo com n-vezes
sRetorno = chr(val(Left(sStatus,4)))
else
if vezes = 2
sRetorno = chr(val(substr(sStatus, 5,3)))
else
if vezes = 3
sRetorno = chr(val(Right(sStatus, 3)))
Delete File ("VEZES")
Delete File ("STATUS.TXT")
endIf
endIf
endIf
if !(vezes >= 3)
vezes++
Fvar("VEZES", str(vezes), "E")
Fclose(nStatus)
endif
endif
else
if FILE("RETORNO.TXT")
nHandle = fOpen("RETORNO.TXT")
nTamRetorno = FSeek( nHandle, 0, FS_END )
fclose( nHandle )
indice = fvar( "INDICE", "1", "L" )
nHandle = FOpen("RETORNO.TXT")
PosRetorno = 0
for PosRetorno = 1 to val(indice)
FRead(nHandle, @nRetorno, 1)
next
fclose(nHandle)
indice = STR(val(indice)+1)
fvar("INDICE", LTRIM(indice), "E")
if val(LTRIM(indice)) > nTamRetorno
delete file ("RETORNO.TXT")
delete file ("INDICE")
endIf
else
sRetorno = " "
endIf
if (nRetorno != " ")
sretorno := nRetorno
endIf
endif
retorno = sretorno
return if (sretorno = " ",0, 1)
////////////////////
FUNCTION fvar
////////////////////
PARAMETERS variavel, valor, ler
aux = " "
aux1 = " "
ContVar = 0
if FILE ( variavel ) .AND. UPPER(Ler) = "L"
nHandle = FOpen(variavel)
nTam := FSEEK(nHandle, 0, FS_END)
* nTam = FileSize(nHandle) // era este o comando usado originalmente
FClose(nHandle)
nHandle = FOpen(variavel)
for ContVar = 1 to nTam
FRead(nHandle, @aux1, 1)
aux := aux + aux1
next
else
nHandle = FCreate( Variavel )
Fwrite(nHandle, ltrim(valor), len(valor))
aux = ltrim(valor)
endif
Fclose(nHandle)
RETURN AUX