Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Macro Substitution Fails
Message
De
19/03/2003 09:59:42
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00767234
Message ID:
00767546
Vues:
8
Here is the testit2.prg that works (as my app now does):
*testit2.prg
SET TALK OFF
SET UDFPARMS TO VALUE
clear
ag_state="NC"
_xldata=.T.
USE c:\profiler\data\al3dict ORDER TAG group
IF !USED('al3dict')
	RETURN
ENDIF

#IF "VISUAL" $ UPPER(VERSION())
	SELE al3dict
	SET NOCPTRANS TO standard
	SET NOCPTRANS TO group
	SET NOCPTRANS TO prof_nc
	SET NOCPTRANS TO prof_sc
#ENDIF

SELE al3dict
GOTO 297
* Recno 297 Field values in al3dict that should be returned
* They are pseudo encrypted in the al3dict table
* field al3dict.prof_sc='mdr_birth'
* field al3dict.prof_nc='mdr_dob'

SET PROCEDURE TO c:\profiler\progs\source\wordhide.prg

PRIVATE tfield
tfield=''
DO CASE
CASE ag_state = "SC"				
	tfield = 'prof_sc'
CASE ag_state = "NC"				
	tfield = 'prof_nc'
OTHERWISE					
	tfield = 'prof_nc'
ENDCASE

? 'Test One.  tfield=prof_nc'
m.value1 = WORDHIDE(&tfield)
? 'm.value1='+m.value1


? 'Test two.  tfield=prof_sc'
tfield='prof_sc'
m.value1 = WORDHIDE(&tfield)
? 'm.value1='+m.value1

USE IN al3dict
SET PROCEDURE TO
Wordhide.prg:
*******************************************
* Program:     WordHide.prg
* Description: Psuedo 16bit data encryption algorithm.
*              Encrypts string data.
* Usage:       <str1>=wordhide(<str2>)
* Convert back:<str3>=wordhide(<str1>)
*
*******************************************
*
PARAMETER xstr

*--03/18/2003 TCH
IF UPPER(TYPE('_xldata'))=="U"
   PRIVATE _xldata
   _xldata=.F.
ENDIF

PRIVATE i,j,ret,xval,temp
newstr = xstr
IF _xldata
   newstr = ""
   * Get pairs of characters from the string
   FOR k = 1 TO LEN(xstr) STEP 2
      v3=ASC(SUBSTR(xstr,k+1,1)) + ;
         ASC(SUBSTR(xstr,k,1)) * 256

      * Don't encrypt 2 spaces together.
      IF v3=8224
         v4=v3
      ELSE
         v4=messybits(v3)
      ENDIF
      v1 = 0
      v2 = 0
      IF v4 >= 256
         v1 = INT(v4 / 256)
         v4 = v4 - (v1 * 256)
      ENDIF
      v2 = INT(v4)
      newstr=newstr+CHR(v1)+CHR(v2)
   ENDFOR
ENDIF
RETURN newstr

*****************************
PROCEDURE messybits
*****************************

   * This routine takes a 16bit number (0 - 65535), 
   * converts it to BINARY and
   * then rearranges the BITS for data encryption.

   PARAMETER dword
   PRIVATE _i,_j,retval,_xval,temp

   retval = ""
   FOR _j = 15 TO 0 STEP -1
      IF dword >= 2^_j
         retval=retval+"1"
         dword = dword - 2^_j
      ELSE
         retval=retval+"0"
      ENDIF
   ENDFOR

   * Move through 16 bits, get every 4th bit and make new binary number
   temp = ""
   FOR _i = 1 TO 4
      FOR _j = 0 TO 3
         temp = temp + SUBSTR(retval,_i+(_j*4),1)
      ENDFOR
   ENDFOR

   retval=temp

   * Convert the BINARY number back to decimal and, just
   * for fun, flip the BINARY number backwards as we do it.

   _xval=0
   FOR _j = 1 TO LEN(retval)
      IF SUBSTR(retval,_j,1) = "1"
         _xval = _xval + 2^(_j-1)
      ENDIF
   ENDFOR
   RETURN _xval
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform