HbMake não cria o cabeçalho.
Enviado: 22 Fev 2012 09:27
Olá, estou fazendo testes com programas menores para tentar depois com o programa principal, mas utilizando o hbmake faço a compilação do programa mas não da certo ele fica numa tela azul com uma caixinha em cima escrito return nil.
Está é prg principal:
e está a outra utilizada:
Está é prg principal:
Código: Selecionar todos
Function Main()
* ************************************************ *
* SISTEMA ............... BALANCO *
* DATA ULT. ALTERACAO ... 25/03/2007 *
* ************************************************ *
* .....definicao de ambiente
SET COLOR TO W/B
SET SCORE OFF
SET DATE BRIT
SET DELE ON
SET WRAP ON
SET CENTU ON
SET PROC TO CREPROC
* ....
DECLARE MENU_00[12]
DO WHILE .T.
CLEAR
NMREDUZ="FASHION"
CLEAR
CAB_SCR(35,"EMISSAO DO BALANCO","V 12/10")
MENU_00[01] =" Abandonar Sistema "
MENU_00[02] =" Incluir Produtos "
MENU_00[03] =" Alterar Produtos "
MENU_00[04] =" Imprimir balanco "
MENU_00[05] =" Configuracoes "
OPCAO=Cec_Promp1(MENU_00,4,10,5)
DO CASE
CASE OPCAO=0 .OR. OPCAO=1
EXIT
CASE OPCAO=2
* DO INCLUBAL
CASE OPCAO=3
* DO ALTERBAL
CASE OPCAO=4
* DO IMPRIBAL
CASE OPCAO=5
SELE A
USE BALANCON
INDEX ON ITEMN TO BALAN01
USE
SELE B
USE BALCONFI
CNPJ=B->CF_CNPJ
IEST=B->CF_IE
EMPRE=B->CF_EMPRE
DTREFER=B->CF_DTREFER
@ 16,01 clear to 22,78
@ 16,01 to 21,78
@ 17,02 say "CNPJ......:" GET CNPJ PICT "@R 99.999.999/9999-99" VALID !EMPTY(CNPJ)
@ 18,02 say "Empresa...:" GET EMPRE PICT "@!" VALID !EMPTY(EMPRE)
@ 19,02 say "Referencia:" GET DTREFER VALID !EMPTY(DTREFER)
@ 20,02 say "Inscr.Est.:" GET IEST PICT "@R 999/9999999" VALID !EMPTY(IEST)
READ
IF LASTKEY()=27
LOOP
ENDIF
SELE B
REPLA CF_CNPJ WITH CNPJ,CF_EMPRE WITH EMPRE,CF_DTREFER WITH DTREFER,;
CF_IE WITH IEST
USE
ENDCASE
ENDDO
CLOSE ALL
RETU NIL
Código: Selecionar todos
* ************************************************ *
* SISTEMA ............... C.E.C *
* PROGRAMA .............. CREPROC *
* FUNCAO ................ Progr. de Pocedimentos *
* DATA ULT. ALTERACAO ... 26/10/2004 *
* ************************************************ *
Function CEC_PRN
Parameters LOC_IMPR
Private F_LIG,LOC_IMPR
* ------------------------------------------------
SET DEVI TO PRINT
RETU(.T.)
* ------------------------------------------------
Function CAB_SCR
Parameters COLSCR,FUNSCR,PRGSCR
Private COLSCR,FUNSCR,PRGSCR
* COLSCR = Coluna a descricao da funcao
* FUNSCR = Funcao do programa
* PRGSCR = Programa
* ------------------------------------------------
@ 00,00 TO 02,79 DOUBLE
@ 01,03 SAY NMREDUZ
@ 01,COLSCR SAY FUNSCR
@ 01,71 SAY PRGSCR
@ 23,01 TO 23,79
RETU NIL
* ------------------------------------------------
Function CAB_PRN
Parameters NPAG,NOME_PRG,COLUN,TITULO,NR_TRACO,REDUZ
Private NPAG,NOME_PRG,COLUN,TITULO,NR_TRACO,REDUZ
* NPAG = Nro. da pagina corrente
* PROG = Nome do programa
* COLUN = Coluna para inicio do titulo
* TITULO = Descricao da funcao do programa
* NR_TRACO= Nro. de tracos no cabecalho
* REDUZ = Fator de reducao
* ------------------------------------------------
* normal="(sp10H"
IF CTL_PRN="HP"
reduz="(sp16.60H"
IF NR_TRACO>90
@ 01,001 SAY reduz+" "+"PANO LEVE"
ELSE
@ 01,001 SAY "PANO LEVE"
ENDIF
ELSE
@ 01,001 SAY "PANO LEVE"
ENDIF
@ 01,(NR_TRACO-7) SAY "PAG: "+STRZERO(NPAG,3)
@ 02,001 SAY NOME_PRG
@ 02,COLUN SAY TITULO
@ 02,(NR_TRACO-15) SAY "DATA: "+DTOC(DATE())
@ 03,001 SAY REPLI("-",NR_TRACO)
RETU(.T.)
* ------------------------------------------------------------------
Function CEC_BUSCA
Parameters VARI,BD,CTL,MSG
Private VARI,BD,CTL,MSG
* VARI = nome da variavel enviada para consistencia
* BD = nome do banco de dados a ser pesquisado
* CTL = tipo de operacao: "I"-Inlcusao / "M"-Exclusao,Consulta
* MSG = mensagem a ser enviada ao operador
* ------------------------------------------------------------------
SELE &BD
SEEK &VARI
DO CASE
CASE FOUND() .AND. CTL="I"
@ 23,03 SAY MSG+REPLI(CHR(196),76-LEN(MSG))
INKEY(3)
Msg_Err(23,05)
RETU(.F.)
CASE FOUND() .AND. CTL="M"
RETU(.T.)
CASE !FOUND() .AND. CTL="I"
RETU(.T.)
CASE !FOUND() .AND. CTL="M"
@ 23,03 SAY MSG+REPLI(CHR(196),76-LEN(MSG))
INKEY(3)
Msg_Err(23,05)
RETU(.F.)
CASE FOUND() .AND. CTL="R"
RETU(.T.)
ENDCASE
* ---------------------------------------------------------
Function CEC_ZEROS
Parameters CL_NUM,CL_TAM
Private CL_NUM,CL_TAM
* retorna string com zeros a esquerda
* ---------------------------------------------------------
RETU(STRZERO(VAL(CL_NUM),CL_TAM))
* ---------------------------------------------------------
Function CEC_FUNCDB
Parameters MODO,PONTEIRO
Private POS_CURSOR,REGISTRO
* DBEDIT() alterado
* ---------------------------------------------------------
POS_CURSOR=VETOR1[PONTEIRO]
* ....
DO CASE
CASE MODO<4
RETU(1)
CASE LASTKEY()=27
* .... Escape
RETU(0)
CASE LASTKEY()=13
* ....
IF REC_LOCK()
IF !DELETED()
COLUNA = COL()
LINHA = ROW()
SET CURSOR ON
@ ROW(),COL() GET &POS_CURSOR
READ
SET CURSOR OFF
RETU(1)
ELSE
RETU(1)
ENDIF
ENDIF
CASE LASTKEY()=-3
* .... F4 pressionada
DELE
RETU(2)
ENDCASE
*---------------------------------------------------------
Function CEC_MHORZ
Parameter VETOR
Private I,OPTF
* Menu horizontal
*---------------------------------------------------------
SET CURSOR OFF
FOR I=1 TO LEN(VETOR)
@ 23,IIF(I=1,3,COL()+8) PROMPT VETOR[I]
NEXT I
MENU TO OPTF
SET CURSOR ON
RETU(OPTF)
* --------------------------------------------------------
Function CEC_PROMP
Parameters VETOR,LIN,COL
Private LIN,COL,I,OPT
* --------------------------------------------------------
* SET COLOR TO W/R
@ LIN-1,COL-1 TO LIN+LEN(VETOR),COL+LEN(VETOR[1]) DOUBLE
FOR I=1 TO LEN(VETOR)
@ IIF(I=1,LIN,ROW()+1),COL PROMPT VETOR[I]
NEXT I
* SET COLOR TO W/B
MENU TO OPT
RETU(OPT)
* --------------------------------------------------------
Function CEC_PROMP1
Parameters VETOR,LIN,COL,NROPT
Private LIN,COL,I,OPT,NROPT
* Vetor: Vetor contendo as opcoes de menu
* Lin : Linha inicial para 1a. opcao
* Col : Coluna inicial para 1a. opcao
* Nropt: Numero de opcoes no menu
* --------------------------------------------------------
@ LIN-1,COL-1 CLEAR TO LIN+NROPT,COL+LEN(VETOR[1])
@ LIN-1,COL-1 TO LIN+NROPT,COL+LEN(VETOR[1]) DOUBLE
FOR I=1 TO NROPT
@ IIF(I=1,LIN,ROW()+1),COL PROMPT VETOR[I]
NEXT I
MENU TO OPT
RETU(OPT)
* --------------------------------------------------------
Function NET_USE
Parameters area,file, ex_use, espera ,apelido
Private forever
* --------------------------------------------------------
forever = (espera = 0)
DO WHILE (forever .OR. espera > 0)
IF ex_use && exclusivo
SELE &area
USE &file EXCLUSIVE
ELSE
SELE &area
IF !EMPTY(apelido)
USE &file ALIAS &apelido && compartilhado
ELSE
USE &file && compartilhado
ENDIF
ENDIF
IF !NETERR() && USE bem sucedido
RETURN (.T.)
ENDIF
INKEY(1) && espera 1 segundo
espera = espera - 1
ENDDO
RETURN (.F.) && USE falhou
* --------------------------------------------------------
Function FIL_LOCK
Parameters espera
Private forever
* --------------------------------------------------------
IF FLOCK()
RETURN (.T.) && Bloqueado
ENDIF
forever = (espera = 0)
DO WHILE (forever .OR. espera > 0)
INKEY(.5) && espera 1/2 segundo
espera = espera - .5
IF FLOCK()
RETURN (.T.) && Bloqueado
ENDIF
ENDDO
RETURN (.F.) && nao conseguiu bloquear
* --------------------------------------------------------
Function REC_LOCK
Parameters espera
Private forever
* --------------------------------------------------------
IF RLOCK()
RETURN (.T.) && Bloqueado
ENDIF
forever = (espera = 0)
DO WHILE (forever .OR. espera > 0)
IF RLOCK()
RETURN (.T.) && Bloqueado
ENDIF
INKEY(.5) && espera 1/2 segundo
espera = espera - .5
Msg_Err(23,02)
ENDDO
RETURN (.F.) && nao conseguiu bloquear
* --------------------------------------------------------
Function ADD_REC
Parameters espera
Private forever,ordem
* --------------------------------------------------------
forever = (espera = 0)
ordem=INDEXORD()
SET ORDER TO 0
DO WHILE (forever .OR. espera > 0)
APPEND BLANK
IF !NETERR()
EXIT
ENDIF
espera = espera - 1
Msg_Err(23,06)
ENDDO
SET ORDER TO ordem
IF NETERR()
RETURN .F. && nao conseguiu bloquear
ENDIF
RETUR .T.
* --------------------------------------------------------
Function MSG_ERR
Parameters LIN,POS
Private POS,VET_MSG,LIN
* --------------------------------------------------------
DECLARE VET_MSG[50]
AFILL(VET_MSG," ")
VET_MSG[01]=" USUARIO NAO CADASTRADO !!! "
VET_MSG[02]="Aguarde. Outra estacao esta alterando registro "
VET_MSG[03]="Campo nao permite alteracao "
VET_MSG[04]="Registro excluido do arquivo "
VET_MSG[05]="Tecle [ESC] para sair "
VET_MSG[06]="Aguarde. Outra estacao esta incluindo registro "
VET_MSG[07]="Soma das prestacoes nao confere c/ valor da compra"
VET_MSG[08]="Erro de gravacao. COMUNIQUE CPD "
VET_MSG[09]="Compra ja esta paga "
VET_MSG[10]="Nao ha saldo para a duplicata "
VET_MSG[11]="[ESC] - P/ sair [ENTER] - P/ confirmar "
VET_MSG[12]="Nao ha pagamento a ser estornado "
VET_MSG[13]="Cliente com compras em aberto. Exclusao rejeitada "
VET_MSG[14]="Vendedor c/ compras em aberto. Exclusao rejeitada "
VET_MSG[15]="Soma dos itens nao fecha com total da compra "
VET_MSG[16]="Estorno rejeitado. Conta em movimento "
VET_MSG[17]="[ESC] - P/ sair [ENTER] - P/ consultar clientes "
VET_MSG[18]="Cliente nao possui compras em andamento "
VET_MSG[19]="Compra nao possui prestacoes pagas "
VET_MSG[20]="Valor da compra maior que o limite de credito "
VET_MSG[21]="[ESC] - P/ sair [ENTER] - Proximo cliente "
VET_MSG[22]="[ESC]-Sair [F5]-Ver prestacoes [ENTER]-Pagar prest"
VET_MSG[23]="Cliente nao encontrado "
VET_MSG[24]="[ESC] - Sair [ENTER] Consulta Ficha/Cliente "
VET_MSG[25]="Ligue a impressora !!! "
VET_MSG[26]="**** COPIA C/ PROBLEMAS. PROCURE RESPONSAVEL! ****"
VET_MSG[27]="************* COPIA NAO AUTORIZADA ***************"
VET_MSG[28]="Vendedor nao encontrado "
VET_MSG[29]="Aguarde ..... "
VET_MSG[30]="[ESC] - P/ sair [ENTER] - Proxima Pagina "
VET_MSG[31]="Data da prestacao ja informada. Rejeitada. "
VET_MSG[32]="Funcao [F5] nao disponivel para esta tela. "
VET_MSG[33]="Seu grupo nao tem autorizacao para esta funcao!!! "
VET_MSG[34]="Aguarde. Selecionando clientes p/ SPC. "
VET_MSG[35]="Aguarde. Registrando SPC na ficha do cliente. "
VET_MSG[36]="[ESC] - P/ sair [ENTER] - Historico SPC "
VET_MSG[37]="Aguarde. Procurando prestacoes em aberto. "
VET_MSG[38]="Aguarde. Procurando prestacoes quitadas. "
VET_MSG[39]="[ESC] - P/ Sair [ENTER] - P/ Consultar Convenios "
VET_MSG[40]="Data da Prestacao com erro. Rejeitada. "
VET_MSG[41]="Valor da Prestacao zerado. Rejeitada. "
VET_MSG[42]="Compra nao Cadastrada. "
VET_MSG[43]="[ESC] - P/ Sair [ENTER] - P/ Consultar Vendedor "
VET_MSG[44]="[ENTER] Cheques [F2] Pgtos. Parciais "
VET_MSG[45]="[ESC] - P/ sair [ENTER] - P/ Consultar Grupos "
VET_MSG[46]="[ESC] - P/ sair [ENTER] - P/ Consultar Seccoes "
VET_MSG[47]="[ESC] - P/ sair [ENTER] - P/ Consultar Produtos "
VET_MSG[48]="Cliente nao esta cadastrado em convenio. Rejeitado"
VET_MSG[49]="[ESC] - P/ sair [ENTER] - P/ Consultar Cartoes "
VET_MSG[50]="[ESC] - P/ sair [ENTER] - P/ Consultar Detalhes "
@ LIN,03 SAY ALLTRIM(VET_MSG[POS])+REPLI(CHR(196),76-LEN(ALLTRIM(VET_MSG[POS])))
RETU(.T.)
* -------------------------------------------------------------------
Function CEC_NMES
Parameters NRMES
Private NRMES,VET_NMES
* --------------------------------------------------------
DECLARE VET_NMES[12]
VET_NMES[01]="Janeiro"
VET_NMES[02]="Fevereiro"
VET_NMES[03]="Marco"
VET_NMES[04]="Abril"
VET_NMES[05]="Maio"
VET_NMES[06]="Junho"
VET_NMES[07]="Julho"
VET_NMES[08]="Agosto"
VET_NMES[09]="Setembro"
VET_NMES[10]="Outubro"
VET_NMES[11]="Novembro"
VET_NMES[12]="Dezembro"
RETU(VET_NMES[NRMES])
* ---------------------------------------------------------
PROC EX_QUERY
* ---------------------------------------------------------
SAVE SCREEN TO TELA_L24
Msg_Err(23,32)
INKEY(2)
@ 23,01 CLEAR TO 23,78
REST SCREEN FROM TELA_L24
RETU
* -----------------------------------------------------------------
Function SCR_TERMO
Parameters SCR_TITULO,SCR_QTIND,SCR_ATUIND
Private SCR_TITULO,SCR_QTIND,SCR_ATUIND,TAM_TITU,NRO_PARTE,DIFER
* -----------------------------------------------------------------
* .... Monta moldura
TAM_TITU=LEN(SCR_TITULO)
IF SCR_ATUIND=0
@ 19,00 clear to 23,79
@ 21,04 TO 23,55
set color to gr+/b
@ 20,05 SAY "0%"
@ 20,51 SAY "100%"
set color to w/b
set color to g/n
@ 20,08 SAY SPACE(INT((42-TAM_TITU)/2))+SCR_TITULO+SPACE(42-INT((42-TAM_TITU)/2)-TAM_TITU)
set color to w/b
RETU(.T.)
ELSE
@ 21,04 TO 23,55
set color to gr+/b
@ 20,05 SAY "0%"
@ 20,51 SAY "100%"
set color to w/b
ENDIF
* .... Centraliza titulo
set color to g/n
@ 20,08 SAY SPACE(INT((42-TAM_TITU)/2))+SCR_TITULO+SPACE(42-INT((42-TAM_TITU)/2)-TAM_TITU)
set color to w/b
* .... Calcula avanco do marcador
NRO_PARTE=INT(50/SCR_QTIND)
DIFER=IIF(SCR_ATUIND=SCR_QTIND,50-(INT(50/SCR_QTIND)*SCR_QTIND),0)
* ....
IF SCR_ATUIND#SCR_QTIND
* set color to r/b
set color to w/n
@ 22,05 SAY REPLI(CHR(178),(NRO_PARTE*SCR_ATUIND))
set color to w/b
ELSE
* set color to r/b
set color to w/n
@ 22,05 SAY REPLI(CHR(178),(NRO_PARTE*SCR_ATUIND+DIFER))
set color to w/b
INKEY(1)
@ 22,05 SAY REPLI(" ",50)
@ 20,08 SAY SPACE(42)
ENDIF
RETU(.T.)
* --------------------------------------------------------
FUNCTION PESQUISA
PARAMETERS ARQBUSCA,CHAVE,CAMP1,CAMP2,CHAVE_C,ORDEM
PRIVATE CHAVE_C,ORDEM,F_ZZEROS,IND_PESQ
* --------------------------------------------------------
IF EMPTY(CHAVE)
RETU(.T.)
ENDIF
DECLARE NCAMP[2]
NCAMP[1]=CAMP1
NCAMP[2]=CAMP2
J_ANTERIOR=SAVESCREEN(00,00,24,79)
ARQ_ATUAL=ARQBUSCA
SELE &ARQBUSCA
IF !EMPTY(ORDEM)
SET ORDER TO ORDEM
ENDIF
* .... Verifica chave zerada
CARAC1=1
F_ZZEROS=.F.
FOR IND_PESQ=CARAC1 TO LEN(CHAVE)
IF SUBS(CHAVE,IND_PESQ,1)#"0" && Pelo menos um digito difer. de zero
F_ZZEROS=.T.
ENDIF
NEXT IND_PESQ
IF F_ZZEROS
SELE &ARQBUSCA
SET ORDER TO 1
SEEK CHAVE
ELSE
SELE &ARQBUSCA
SEEK CHAVE
ENDIF
IF FOUND()
SELE &ARQ_ATUAL
RETU(.T.)
ELSE
SAVE SCREE TO PESQTELA
@ 02,09 CLEAR TO 22,77
@ 02,09 TO 22,77 DOUB
SET ORDER TO ORDEM
GO TOP
rec=recno()
DBEDIT(03,10,21,76,NCAMP,"TESTAPESQ",.T.,VETOR3,"Ä"," ³","","")
Unlock
RETU(.T.)
ENDIF
RETU(.T.)
* --------------------------------------------------------
FUNCTION TESTAPESQ
PARAMETERS MODE,COUNTER
* --------------------------------------------------------
IF rec#RECNO()
Unlock
rec=RECNO()
ENDIF
SET CURSOR ON
DO CASE
CASE MODE=0
IF DELETED()
@ 23,70 SAY "Excluido"
ENDIF
RETU(1)
CASE MODE=1
J_PESQ=SAVESCREEN(00,00,24,79)
@ 23,55 SAY "[Inicio do Arquivo]"
INKEY(.5)
RESTSCREEN(00,00,24,79,J_PESQ)
RETU(1)
CASE MODE=2
J_PESQ=SAVESCREEN(00,00,24,79)
@ 23,55 SAY "[Fim do Arquivo]"
INKEY(.5)
RESTSCREEN(00,00,24,79,J_PESQ)
RETU(1)
CASE MODE=3
J_PESQ=SAVESCREEN(00,00,24,79)
@ 23,10 SAY "[Arquivo sem Conteudo]"
INKEY(1)
RESTSCREEN(00,00,24,79,J_PESQ)
RETU(0)
CASE LASTKEY()=27
SELE &ARQ_ATUAL
RESTSCREEN(00,00,24,79,J_ANTERIOR)
RETU(0)
CASE LASTKEY()=13
VARIAVEL=READVAR()
&VARIAVEL=&CAMP2
VAR_TRANS=&CAMP2
SELE &ARQ_ATUAL
SET ORDER TO 1
RESTSCREEN(00,00,24,79,J_ANTERIOR)
CHAV_AUX=""
RETU(0)
OTHER
SELE &ARQ_ATUAL
CHAV_AUX=CHAV_AUX+CHR(LASTKEY())
SEEK CHAV_AUX
IF LEN(CHAV_AUX)>50
CHAV_AUX=""
GO TOP
rec=recno()
ENDIF
RETU(1)
ENDCASE
RETU(0)
*=================[ Funcoes UTILITARIAS ]=====================
* A seguintes funcoes: WINDOW, MUDATRIB, FORE e BACK
* sao responsaveis pela formacao de uma janela na tela.
*
*===========================================[Bruno]============
*******************
FUNCTION WINDOW(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
*******************
Private nqtde, x, t, ccorant, csbinf, csblat
ccorant:= SetColor()
Arg6:= IIf(ValType(Arg6) != "C", "w/b", Arg6)
Arg7:= IIf(ValType(Arg7) != "L", .T., Arg7)
nqtde:= Int((Arg4 - Arg2) / 2)
Set Color To (Arg6)
if upper(arg5)="S"
Arg5:= "ÚÄ¿³ÙÄÀ³ "
elseif upper(arg5)="D"
Arg5:= "ÉÍ»º¼ÍȺ "
else
Arg5:= "ÚÄ¿³ÙÄÀ³ "
endif
For x:= nqtde To 1 Step -3
@ Arg1, Arg2 + x, Arg3, Arg4 - x Box Arg5
InKey(0.01)
Next
@ Arg1, Arg2, Arg3, Arg4 Box Arg5
If (Arg7)
csblat:= SaveScreen(Arg1 + 1, Arg4 + 1, Arg3, Arg4 + 1)
csbinf:= SaveScreen(Arg3 + 1, Arg2 + 1, Arg3 + 1, Arg4 + 1)
csblat:= mudatrib(csblat, "w/n")
csbinf:= mudatrib(csbinf, "w/n")
RestScreen(Arg1 + 1, Arg4 + 1, Arg3, Arg4 + 1, csblat)
RestScreen(Arg3 + 1, Arg2 + 1, Arg3 + 1, Arg4 + 1, csbinf)
EndIf
Set Color To (ccorant)
Return(.T.)
*********************
Function MUDATRIB
*********************
Parameters ctel, ccor
Private acor:= {"N", "B", "G", "BG", "R", "RB", "GR", "W"}
Private caux, ctrb, ccar, cascii, natr, x, crettel
crettel:= ""
natr:= 0
ccor:= Upper(ccor)
ctrb:= back(ccor)
natr:= (ascan(acor, ctrb) - 1) * 16
If ("x" $ ccor)
natr:= natr + natr / 16
Else
ctrb:= ""
caux:= fore(ccor)
For x:= 1 To Len(caux)
ccar:= SubStr(caux, x, 1)
ctrb:= ctrb + IIf(isalpha(ccar), ccar, "")
Next
natr:= natr + ascan(acor, ctrb) - 1
natr:= natr + IIf("*" $ ccor, 128, 0)
natr:= natr + IIf("+" $ ccor, 6, 0)
EndIf
cascii:= Chr(natr)
For x:= 1 To Len(ctel) Step 2
crettel:= crettel + SubStr(ctel, x, 1) + cascii
Next
Return crettel
***********************
Function FORE(Arg1)
***********************
Local Local1, Local2
Local2:= SubStr(Arg1, At("/", Arg1) + 1)
Local1:= SubStr(Arg1, 1, At("/", Arg1) - 1)
Local1:= IIf("+" $ Local2, Local1 + "+", Local1)
Local1:= IIf("x" $ Local2, Local1 + "x", Local1)
Local1:= IIf("*" $ Local2, Local1 + "*", Local1)
Return Local1
Keyboard Chr(27) + Chr(4) + Chr(13)
Return
************************
Function BACK(Arg1)
************************
Local Local1, Local2, Local3, Local4
Local1:= ""
Local2:= SubStr(Arg1, At("/", Arg1) + 1)
For Local4:= 1 To Len(Local2)
Local3:= SubStr(Local2, Local4, 1)
Local1:= Local1 + IIf(isalpha(Local3), Local3, "")
Next
Return Local1
* ========================= FIM DE PROCEDIMENTOS ==============================