home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / database / migratfp.zip / ZIPFILE.EXE / BINFUNC / BINFUNC.PRG
Text File  |  1993-05-20  |  2KB  |  96 lines

  1. FUNC BIN2L
  2. * Same as BIN2I() but takes a 32 bit signed integer.
  3.   para str
  4.   priv b0,b1,b2,b3,retval
  5.   b0=asc(str)
  6.   b1=asc(subs(str,2))
  7.   b2=asc(subs(str,3))
  8.   b3=asc(subs(str,4))
  9.   if b3<128
  10.     retval = ( ( (b3*256 + b2)*256 + b1) * 256 + b0)
  11.   else
  12.     b3=255-b3
  13. *Note this is 2's complement, thus 255!
  14.     b2=255-b2
  15.     b1=255-b1
  16.     b0=256-b0
  17.     retval= -( ( (b3*256 + b2)*256 + b1) * 256 + b0)
  18.   endif
  19. retu retval
  20.  
  21. FUNC BIN2I
  22. *Converts character string formatted as 16 bit signed integer to a numeric
  23. *value.
  24.   ara str
  25.   priv b0,b1,retval
  26.   b0=asc(str)
  27.   b1=asc(subs(str,2))
  28.   if b1<128
  29.     retval=b1 * 256 + b0
  30.   else
  31. *   Note this is 2's complement, thus 255!
  32.     b1=255-b1
  33.     b0=256-b0
  34.     retval= -( (b1 * 256) + b0)
  35.   endif
  36. retu retval
  37.  
  38. FUNC BIN2W
  39. *BIN2W() Same as BIN2I() but takes a 16 bit unsigned integer.
  40.   para str
  41.   priv b0,b1,retval
  42.   b0=asc(str)
  43.   b1=asc(subs(str,2))
  44.   retval=b1 * 256 + b0
  45. retu retval
  46.  
  47. FUNC L2BIN
  48.   para num
  49.   priv x,b,i,b0,b1,b2,b3,t,neg
  50.   if num<0
  51.     x=int(-num)
  52.     neg=.t.
  53.   else
  54.     x=int(num)
  55.     neg=.f.
  56.   endif
  57.   *Can't use arrays cuz clipper and FP use diff syntax
  58.   for i=3 to 0 step -1
  59.     t=chr(48+i)
  60.     b=in(x/(256^i))
  61.     b&t=iif(neg,iif(i=0,256,255) -b, b)
  62.     x=x-b*(256^i)
  63.   endfor
  64.   if neg
  65.     if b0=256
  66.       b0=0
  67.       b1=b1+1
  68.     endif
  69.     if b1=256
  70.       b1=0
  71.       b2=b2+1
  72.     endif
  73.     if b2=256
  74.       b2=0
  75.       b3=b3+1
  76.     endif
  77.   endif
  78. retu chr(b0)+chr(b1)+chr(b2)+chr(b3)
  79.  
  80. FUNC I2BIN
  81.   para num
  82.   priv b0,b1,mretval
  83.   if num>=0
  84.     x=int(num)
  85.     b1=int(x/256)
  86.     b0=mod(x,256)
  87.   else
  88.     x=int(-num)
  89.     b1=255-int(x/256)
  90.     b0=256-mod(x,256)
  91.     if b0=256
  92.       b0=0
  93.       b1=b1+1
  94.     endif
  95.   endif
  96.   retu chr(b0)+chr(b1)