Changes between Version 24 and Version 25 of HashSourceCodes


Ignore:
Timestamp:
Feb 17, 2010, 6:34:41 AM (15 years ago)
Author:
os
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HashSourceCodes

    v24 v25  
    825825}}}
    826826
     827== FoxPro ==
     828{{{
     829PARAMETERS cfile
     830PRIVATE ALL
     831
     832*******
     833* enviroment setup
     834*******
     835cret=''
     836glTalk=(SET("TALK")="ON")
     837
     838IF vartype(cfile)<>'C'
     839        cfile='breakdance.avi'
     840ENDIF
     841
     842
     843
     844IF glTalk
     845        ? cfile
     846        ? cfile=''
     847        ? LEN(cfile)
     848endif
     849
     850
     851nfile=FOPEN(cfile)
     852nsize=FSEEK(nfile,0,2)
     853
     854IF gltalk
     855        ? cfile
     856        ? 'size?>'
     857        ?? nsize
     858endif
     859FSEEK(nfile,0,0)
     860
     861******
     862* length reencode to 64 uint
     863*****
     864chash=hashsize(nsize)
     865cempty=chr(0)
     866cret=''
     867IF LEN(chash)<8
     868        FOR i=1 TO 8-LEN(chash)
     869                cret=cret+cempty
     870        ENDFOR
     871ENDIF
     872cret=cret+chash
     873nSum=0
     874
     875*******
     876* first 64kb
     877******
     878
     879
     880        FOR i=1 TO 8192
     881                cpom=FREAD(nfile,8)
     882                cpom=reverse(cpom)
     883                nSum=nSum+LEN(cpom)
     884                IF gltalk
     885                                do buildhex WITH cret
     886                                ?? '+'
     887                                DO buildhex WITH cpom
     888                                ? '='
     889                ENDIF
     890                cret=adint64(cret,cpom)
     891        ENDFOR
     892
     893*******
     894* last 64kb
     895*******
     896
     897        FSEEK(nfile,-65536,2)
     898        FOR i=1 TO 8192
     899                cpom=FREAD(nfile,8)
     900                cpom=reverse(cpom)
     901                cret=adint64(cret,cpom)
     902                nSum=nSum+LEN(cpom)
     903        ENDFOR
     904FCLOSE(nfile)
     905
     906****
     907* build hexa
     908****
     909IF gltalk
     910
     911        DO buildhex WITH cret
     912        ?
     913        ? 'Spocital som'
     914        ?? nSum
     915ENDIF
     916RETURN buildhex(cret)
     917
     918FUNCTION reverse
     919PARAMETERS cstring
     920PRIVATE ALL
     921cret=''
     922FOR i=1 TO LEN(cstring)
     923        cret=cret+SUBSTR(cstring,LEN(cstring)-i+1,1)
     924ENDFOR
     925RETURN cret
     926
     927FUNCTION buildhex
     928PARAMETERS cstring,lkam
     929PRIVATE ALL
     930gcTalk=SET("TALK")
     931cret=''
     932FOR i=1 TO LEN(cstring)
     933        cpom=dec2basx(ASC(SUBSTR(cstring,i,1)),16)
     934        IF LEN(cpom)<2
     935                cout='0'+cpom
     936                cpom=cout
     937        ENDIF
     938       
     939        cret=cret+cpom
     940        IF gcTALK="ON"
     941                ?? cpom
     942                ?? ':'
     943        ENDIF
     944ENDFOR
     945RETURN cret
     946
     947FUNCTION adint64
     948PARAMETERS cstring1,cstring2
     949PRIVATE ALL
     950DIMENSION car (8,1) as Character
     951
     952***
     953* 8 bytes both
     954***
     955nincrement=0
     956cret=''
     957FOR i=8 TO 1 STEP -1
     958        nfir=ASC(SUBSTR(cstring1,i,1))
     959        nsec=ASC(SUBSTR(cstring2,i,1))
     960        nout=nincrement+nfir+nsec
     961        IF nout>255
     962                nincrement=INT(nout/256)
     963                nout=nout-(nincrement*256)
     964        ELSE
     965                nincrement=0
     966        ENDIF
     967        car(i)=CHR(nout)
     968ENDFOR
     969FOR i=1 TO 8
     970        cret=cret+car(i)
     971ENDFOR
     972RETURN cret
     973
     974
     975FUNCTION hashsize
     976
     977PARAMETERS ncislo
     978PRIVATE ALL
     979cret=''
     980creverse=''
     981DO WHILE .t.
     982        npom=INT(ncislo/256)
     983        npom2=ncislo-npom*256
     984        creverse=creverse+CHR(npom2)
     985        ncislo=npom
     986        IF ncislo=0
     987                EXIT
     988        ENDIF
     989ENDDO
     990FOR i=1 TO LEN(creverse)
     991        cret=cret+SUBSTR(creverse,LEN(creverse)-i+1,1)
     992ENDFOR
     993RETURN cret
     994
     995
     996*..............................................................................
     997*   Function: DEC2BASX
     998*    Purpose:  Convert whole number 0-?, to base 2-16
     999*
     1000* Parameters: nTempNum - number to convert (0-9007199254740992)
     1001*             base    - base to convert to i.e., 2 4 8 16...
     1002*    returns: string
     1003*      Usage:  cresult=Dec2BasX(nParm1, nParm2)
     1004*              STORE Dec2BasX(255, 16) TO cMyString  &&... cMyString contains 'ff'
     1005*..............................................................................
     1006FUNCTION dec2basx
     1007PARAMETERS nTempNum, nNewBase
     1008
     1009STORE 0 TO nWorkVal,;
     1010   remainder,;
     1011   dividend,;
     1012   nextnum,;
     1013   digit
     1014
     1015nWorkVal = nTempNum 
     1016ret_str = ''
     1017
     1018DO WHILE .T.
     1019   digit = MOD(nWorkVal, nNewBase)
     1020   dividend = nWorkVal / nNewBase
     1021   nWorkVal = INT(dividend)
     1022
     1023   DO CASE
     1024      CASE digit = 10
     1025         ret_str = 'a' + ret_str
     1026      CASE digit = 11
     1027         ret_str = 'b' + ret_str
     1028      CASE digit = 12
     1029         ret_str = 'c' + ret_str
     1030      CASE digit = 13
     1031         ret_str = 'd' + ret_str
     1032      CASE digit = 14
     1033         ret_str = 'e' + ret_str
     1034      CASE digit = 15
     1035         ret_str = 'f' + ret_str
     1036      OTHERWISE
     1037         ret_str = LTRIM(STR(digit)) + ret_str
     1038   ENDCASE
     1039
     1040   IF nWorkVal = 0
     1041      EXIT
     1042   ENDIF ( nWorkVal = 0 )
     1043ENDDO ( .T. )
     1044RETURN ret_str
     1045}}}
     1046