Clipper On Line • Ver Tópico - DBEDIT - Codigo fonte para analise e alterações

DBEDIT - Codigo fonte para analise e alterações

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

DBEDIT - Codigo fonte para analise e alterações

Mensagempor rochinha » 07 Mar 2006 01:04

Amiguinhos

Eis aqui o codigo fonte do DBEdit que consegui apos descompilar um programa meu.

O codigo pode servir para estudos e se preferirem, melhora-lo.

Codigo completo:
/*
*
* DBEdit Source
*
*/
#include "common.ch"
#include "inkey.ch"

//-----------------------------------------------------------------
//  file-wide static variables
// static Static1, Static2

function DBEDIT( Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, ;
   Arg9, Arg10, Arg11, Arg12 )

   local Local1, Local2, Local3, Local4, Local5, Local6, Local7, ;
      Local8, Local9, Local10
   public Static1, Static2
   if ( EOF() )
      goto bottom
   endif
   Local1 := dbedsetup(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, ;
      Arg8, Arg9, Arg10, Arg11, Arg12)
   Local1:skipblock({ |_1| skipped(_1) })
   Local1:autolite(.F.)
   Local2 := setcursor(0)
   Local7 := {Static1, Static2}
   Static1 := .F.
   Static2 := .T.
   Local5 := .T.
   Local3 := .T.
   do while ( Local3 )
      do while ( !Local1:stabilize() )
         if ( ( Local4 := nextkey() ) == 0 )
         elseif ( Local4 != 1001 )
            exit
         endif
      enddo
      if ( ( Local4 := InKey() ) == 0 )
         if ( Local5 )
            Local3 := calluser(Local1, Arg6, 0)
            do while ( !Local1:stabilize() )
            enddo
         endif
         if ( Local3 .AND. Static2 )
            Local1:hilite()
            do while ( ( Local4 := InKey(0) ) == 1001 )
            enddo
            Local1:dehilite()
            if ( ( Local6 := SetKey(Local4) ) != Nil )
               eval(Local6, procname(1), procline(1), "")
               loop
            endif
         else
            Static2 := .T.
         endif
      endif
      Local5 := .T.
      do case
      case Local4 == 1002 .OR. Local4 == 1006
         do case
         case ( Local9 := mrow() ) < Local1:ntop()
         case ( Local10 := mcol() ) < Local1:nleft()
         case Local9 > Local1:nbottom()
         case Local10 <= Local1:nright()
            Local8 := Local1:mrowpos() - Local1:rowpos()
            do while ( Local8 < 0 )
               Local8++
               Local1:up()
            enddo
            do while ( Local8 > 0 )
               Local8--
               Local1:down()
            enddo
            Local8 := Local1:mcolpos() - Local1:colpos()
            do while ( Local8 < 0 )
               Local8++
               Local1:left()
            enddo
            do while ( Local8 > 0 )
               Local8--
               Local1:right()
            enddo
         endcase
      case Local4 == 0
      case Local4 == 24
         if ( Static1 )
            Local1:hitbottom(.T.)
         else
            Local1:down()
         endif
      case Local4 == 5
         if ( Static1 )
            Local1:hittop(.T.)
         else
            Local1:up()
         endif
      case Local4 == 3
         if ( Static1 )
            Local1:hitbottom(.T.)
         else
            Local1:pagedown()
         endif
      case Local4 == 18
         if ( Static1 )
            Local1:hittop(.T.)
         else
            Local1:pageup()
         endif
      case Local4 == 31
         if ( Static1 )
            Local1:hittop(.T.)
         else
            Local1:gotop()
         endif
      case Local4 == 30
         if ( Static1 )
            Local1:hitbottom(.T.)
         else
            Local1:gobottom()
         endif
      case Local4 == 4
         Local1:right()
      case Local4 == 19
         Local1:left()
      case Local4 == 1
         Local1:home()
      case Local4 == 6
         Local1:end()
      case Local4 == 26
         Local1:panleft()
      case Local4 == 2
         Local1:panright()
      case Local4 == 29
         Local1:panhome()
      case Local4 == 23
         Local1:panend()
      otherwise
         Local3 := calluser(Local1, Arg6, Local4)
         Local5 := .F.
      endcase
   enddo
   setcursor(Local2)
   Static1 := Local7[ 1 ]
   Static2 := Local7[ 2 ]
   return .T.

static function DBEDSETUP(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, ;
   Arg8, Arg9, Arg10, Arg11, Arg12)

   local Local1, Local2, Local3, Local4, Local5, Local6, Local7, ;
      Local8
   if (ValType(Arg1) != "N" .OR. Arg1 < 0)
      Arg1:= 0
   endif
   if (ValType(Arg2) != "N" .OR. Arg2 < 0)
      Arg2:= 0
   endif
   if (ValType(Arg3) != "N" .OR. Arg3 > MaxRow() .OR. Arg3 < Arg1)
      Arg3:= MaxRow()
   endif
   if (ValType(Arg4) != "N" .OR. Arg4 > MaxCol() .OR. Arg4 < Arg2)
      Arg4:= MaxCol()
   endif
   if ((Arg4 - Arg2) * (Arg3 - Arg1) > MaxRow() * MaxCol())
      Arg1:= Arg2:= 0
      Arg3:= MaxRow()
      Arg4:= MaxCol()
   endif
   Local1:= tbrowsedb(Arg1, Arg2, Arg3, Arg4)
   if (ISARRAY(Arg5))
      Local3:= Len(Arg5)
      Local2:= 1
      do while (Local2 <= Local3)
         if (ValType(Arg5[Local2]) != "C" .OR. Empty(Arg5[Local2]))
            exit
         endif
         Local2++
      enddo
      Local3:= Local2 - 1
   else
      Local3:= FCount()
   endif
   if (Local3 == 0)
      return .F.
   endif
   Local1:headsep("ÍÑÍ")
   Local1:colsep(" ³ ")
   Local1:ColorSpec := "N/W,N/BG,B/W,B/BG,B/W,B/BG,R/W,B/R"
   Local4:= array(Local3, 6)
   if (ISARRAY(Arg5))
      for Local2:= 1 to Local3
         if ("->" $ Arg5[Local2])
            Local6:= At("->", Arg5[Local2])
            Local4[Local2][3]:= SubStr(Arg5[Local2], 1, Local6 - 1)
            Local4[Local2][4]:= SubStr(Arg5[Local2], Local6 + 2)
            Local4[Local2][1]:= Local4[Local2][3] + "->;" + ;
               Local4[Local2][4]
         else
            Local4[Local2][3]:= Nil
            Local4[Local2][4]:= Nil
            Local4[Local2][1]:= Arg5[Local2]
         endif
         Local4[Local2][2]:= Arg5[Local2]
      next
   elseif (FCount() > 0)
      for Local2:= 1 to Local3
         Local4[Local2][3]:= Nil
         Local4[Local2][4]:= Nil
         Local4[Local2][1]:= FieldName(Local2)
         Local4[Local2][2]:= FieldName(Local2)
      next
   else
      return .F.
   endif
   for Local2:= 1 to Local3
      Local5:= ""
      if (ISARRAY(Arg7))
         if (Len(Arg7) >= Local2 .AND. ISCHARACTER(Arg7[Local2]) ;
               .AND. !Empty(Arg7[Local2]))
            Local5:= Arg7[Local2]
         endif
      elseif (ISCHARACTER(Arg7) .AND. !Empty(Arg7))
         Local5:= Arg7
      endif
      Local7:= Nil
      if (ISMEMO(&(Local4[Local2][2])))
         Local7:= "{|| '  <Memo>  '}"
      elseif (Empty(Local5))
         if ("->" $ Local4[Local2][2])
            if (Upper(Local4[Local2][3]) == "M")
               Local7:= memvarbloc(Local4[Local2][2])
            elseif (Upper(Local4[Local2][3]) == "FIELD")
               Local7:= fieldwbloc(Local4[Local2][4], Select())
            else
               Local7:= fieldwbloc(Local4[Local2][4], ;
                  Select(Local4[Local2][3]))
            endif
         elseif (!Empty(fieldpos(Local4[Local2][2])))
            Local7:= fieldwbloc(Local4[Local2][2], Select())
         endif
      endif
      if (ISNIL(Local7))
         if (Empty(Local5))
            Local7:= "{||" + Local4[Local2][2] + "}"
         else
            Local7:= "{|| Transform(" + Local4[Local2][2] + ",'" + ;
               Local5 + "')}"
         endif
      endif
      if (ISCHARACTER(Local7))
         Local4[Local2][2]:= &Local7
      elseif (ISBLOCK(Local7))
         Local4[Local2][2]:= Local7
      endif
      if (ISARRAY(Arg8))
         if (Len(Arg8) >= Local2 .AND. ISCHARACTER(Arg8[Local2]))
            Local4[Local2][1]:= Arg8[Local2]
         endif
      elseif (ISCHARACTER(Arg8))
         Local4[Local2][1]:= Arg8
      endif
      Local4[Local2][3]:= Nil
      if (ISARRAY(Arg9))
         if (Len(Arg9) >= Local2 .AND. ISCHARACTER(Arg9[Local2]))
            Local4[Local2][3]:= Arg9[Local2]
         endif
      elseif (ISCHARACTER(Arg9))
         Local4[Local2][3]:= Arg9
      endif
      Local4[Local2][4]:= Nil
      if (ISARRAY(Arg10))
         if (Len(Arg10) >= Local2 .AND. ISCHARACTER(Arg10[Local2]))
            Local4[Local2][4]:= Arg10[Local2]
         endif
      elseif (ISCHARACTER(Arg10))
         Local4[Local2][4]:= Arg10
      endif
      Local4[Local2][5]:= Nil
      if (ISARRAY(Arg11))
         if (Len(Arg11) >= Local2 .AND. ISCHARACTER(Arg11[Local2]))
            Local4[Local2][5]:= Arg11[Local2]
         endif
      elseif (ISCHARACTER(Arg11))
         Local4[Local2][5]:= Arg11
      endif
      Local4[Local2][6]:= Nil
      if (ISARRAY(Arg12))
         if (Len(Arg12) >= Local2 .AND. ISCHARACTER(Arg12[Local2]))
            Local4[Local2][6]:= Arg12[Local2]
         endif
      elseif (ISCHARACTER(Arg12))
         Local4[Local2][6]:= Arg12
      endif
   next
   for Local2:= 1 to Local3
      Local8:= tbcolumnne(Local4[Local2][1], Local4[Local2][2])
      if (Local4[Local2][3] != Nil)
         Local8:headsep(Local4[Local2][3])
      endif
      if (Local4[Local2][4] != Nil)
         Local8:colsep(Local4[Local2][4])
      endif
      if (Local4[Local2][5] != Nil)
         Local8:footsep(Local4[Local2][5])
      endif
      if (Local4[Local2][6] != Nil)
         Local8:footing(Local4[Local2][6])
      endif
      Local8:ColorBlock := { || iif( Deleted(), { 3, 2 }, { 1, 2 } ) } // -> Definicao das cores do BROWSE e registros DELETADOS
      Local1:addcolumn(Local8)
   next
   return Local1

static function CALLUSER( Arg1, Arg2, Arg3 )

   local Local1, Local2, Local3, Local4
   do case
   case Arg3 != 0
      Local1 := 4
   case !Static1 .AND. emptyfile()
      Local1 := 3
   case Arg1:hitbottom()
      Local1 := 2
   case Arg1:hittop()
      Local1 := 1
   otherwise
      Local1 := 0
   endcase
   do while ( !Arg1:stabilize() )
   enddo
   Local3 := RecNo()
   if ( ValType(Arg2) != "C" .OR. Empty(Arg2) )
      if ( Arg3 == 13 .OR. Arg3 == 27 )
         Local2 := 0
      else
         Local2 := 1
      endif
   else
      Local2 := &Arg2(Local1, Arg1:colpos())
   endif
   Local4 := Local2 != 0
   if ( !Static1 .AND. EOF() .AND. !emptyfile() )
      skip -1
   endif
   if ( Local2 == 3 )
      Static1 := !( Static1 .AND. EOF() )
      if ( Static1 )
         goto bottom
         Arg1:down()
      else
         Arg1:refreshcur()
      endif
      Static2 := .F.
   elseif ( Local2 == 2 .OR. Local3 != RecNo() )
      if ( Local4 )
         Static1 := .F.
         if ( Set(_SET_DELETED) .AND. Deleted() .OR. ;
               !Empty(dbfilter()) .AND. !&( dbfilter() ) )
            skip
         endif
         if ( EOF() )
            goto bottom
         endif
         Local3 := RecNo()
         Arg1:refreshall()
         do while ( !Arg1:stabilize() )
         enddo
         do while ( Local3 != RecNo() )
            Arg1:up()
            do while ( !Arg1:stabilize() )
            enddo
         enddo
         Static2 := .F.
      endif
   else
      Arg1:refreshcur()
   endif
   return Local4

static function EMPTYFILE
   if ( LastRec() == 0 )
      return .T.
   endif
   if ( ( EOF() .OR. RecNo() == LastRec() + 1 ) .AND. BOF() )
      return .T.
   endif
   return .F.

static function SKIPPED( Arg1 )
   local Local1 := 0
   if ( LastRec() != 0 )
      if ( Arg1 == 0 )
         if ( EOF() .AND. !Static1 )
            skip -1
            Local1 := -1
         else
            skip 0
         endif
      elseif ( Arg1 > 0 .AND. RecNo() != LastRec() + 1 )
         do while ( Local1 < Arg1 )
            skip
            if ( EOF() )
               if ( Static1 )
                  Local1++
               else
                  skip -1
               endif
               exit
            endif
            Local1++
         enddo
      elseif ( Arg1 < 0 )
         do while ( Local1 > Arg1 )
            skip -1
            if ( BOF() )
               exit
            endif
            Local1--
         enddo
      endif
   endif
   return Local1


@braços :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes

Mensagempor carlos_dornelas » 07 Mar 2006 21:01

Rochinha, tenho um dbf criptografado por uma rotina própria e vendo este seu tópico me surgiu a idéia da possibilidade de alterar o dbedit para mostrar os dados descriptografados, talvez através de um code blok, mas não sei por onde começar. Você já fez algo parecido ou poderia me dar uma luz?

Desde já obrigado,

Antonio Carlos - Curitiba
carlos_dornelas
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 392
Data de registro: 25 Ago 2004 21:54
Curtiu: 0 vez
Mens.Curtidas: 10 vezes

Mensagempor rochinha » 08 Mar 2006 05:43

Amiguinho

Se os campos criptografados foram resolvidos usando alguma func'~ao de criptografia de alguma .LIB para Clipper conhecida voce terá exito.

Criptografia é uma coisa pessoal, exemplo:

Voce vai criptografar uma frase ou campo e usa uma técnica conhecida, até ai tudo bem se voce souber qual a ferramenta foi usado é possivel reverter.

Voce vai criptografar uma frase ou campo e usando uma técnica criada por voce, se voce se esquecer de como reverter, aí ja era.

Eua não aconselho, mas em todo caso faça testes usando as funções da SIX2 e outras .LIB que tenhas estas funções.

PS: Poste suas duvidas nos Forum Clipper/Fivewin, aqui serão somente para visualização.

@braços :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 18 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro