home *** CD-ROM | disk | FTP | other *** search
- *******************
-
- FUNCTION O_memtext
-
- PARAMETERS _mem, _txt
-
- * The numeric and date writing portion of this function was
- * written by the Wizzard: Essor Maso...
-
- IF PCOUNT() != 2 && Not enough parameters
- RETURN(.F.)
- ELSEIF TYPE("_mem") + TYPE("_txt") != "CC" && Wrong data type
- RETURN(.F.)
- ELSEIF !FILE(_mem) && FIle NOT file
- RETURN(.F.)
- ELSEIF FILE(_txt) && File is there
- RETURN(.F.)
- ENDIF
-
- _fh1 = FOPEN(_mem) && File handle for the mem file
- _fp1 = FSEEK(_fh1, 0, 2) && Get's ID for the file.
- FSEEK(_fh1, 0) && repositions the pointer
- IF _fp1 < 2
- FCLOSE(_fh1)
- RETURN(.F.)
- ENDIF
- _fh2 = FCREATE(_txt) && File handle for the txt file
- DO WHILE FSEEK(_fh1, 0, 1) + 1 < _fp1
- _realvar = SPACE(18)
- FREAD(_fh1, @_realvar, 18)
- _name = LEFT(_realvar, AT(CHR(0), _realvar) - 1 )
- _data = SUBSTR(_realvar, 12, 1)
- _dtyp = BIN2W(RIGHT(_realvar, 2))
- IF _data $ "├╠"
- _drng = 14 + _dtyp
- ELSE
- _drng = 22
- ENDIF
- _dval = SPACE(_drng)
- FREAD(_fh1, @_dval, _drng) && String of value
- _nval = SUBSTR(_dval, 15)
- FWRITE(_fh2, _name, LEN(_name))
- FWRITE(_fh2, SPACE(12 - LEN(_name)), 12 - LEN(_name))
- FWRITE(_fh2, " = ", 5)
- IF _data = CHR(195) && character
- _nval = '"' + STRTRAN(STRTRAN(_nval, "'", "`"), '"', "'") + '"'
- FWRITE(_fh2, _nval, LEN(_nval))
-
- ELSEIF _data = CHR(204) && logical
- FWRITE(_fh2, IF((ASC(_nval) = 1), ".T.", ".F."))
-
- ELSEIF _data = CHR(206) && numeric
- _dval = SUBSTR(_dval, 15)
- _pad1 = Modulus(ASC(SUBSTR(_dval, 8, 1)), 128) * 16
- _pad2 = INT(ASC(SUBSTR(_dval, 7, 1)) / 16)
- _powr = _pad1 + _pad2 - 1023
- _mins = INT(ASC(SUBSTR(_dval, 8, 1)) / 16) >= 8
- _man0 = Modulus(ASC(SUBSTR(_dval, 7, 1)), 16) / 16
- _man1 = BIN2W(SUBSTR(_dval, 5, 2)) / (65536*16)
- _man2 = BIN2W(SUBSTR(_dval, 3, 2)) / (65536 * 65536 * 16)
- _man3 = BIN2W(SUBSTR(_dval, 1, 2)) / (65536 * 65536 * 65536 * 16)
- _mant = _man0 + _man1 + _man2 + _man3
- _numb = IF(_mins, -(1 + _mant) * (2 ^ _powr), (1 + _mant) * (2 ^ _powr))
- _sdec = ASC(RIGHT(_realvar, 1))
-
- FWRITE(_fh2, TRANSFORM(_numb, "@B"))
-
- ELSEIF _data = CHR(196) && date
- _dval = SUBSTR(_dval, 15)
- _pad1 = Modulus(ASC(SUBSTR(_dval, 8, 1)), 128) * 16
- _pad2 = INT(ASC(SUBSTR(_dval, 7, 1)) / 16)
- _powr = _pad1 + _pad2 - 1023
- _mins = INT(ASC(SUBSTR(_dval, 8, 1)) / 16) >= 8
- _man0 = Modulus(ASC(SUBSTR(_dval, 7, 1)), 16) / 16
- _man1 = BIN2W(SUBSTR(_dval, 5, 2)) / (65536*16)
- _man2 = BIN2W(SUBSTR(_dval, 3, 2)) / (65536 * 65536 * 16)
- _man3 = BIN2W(SUBSTR(_dval, 1, 2)) / (65536 * 65536 * 65536 * 16)
- _mant = _man0 + _man1 + _man2 + _man3
- _numb = IF(_mins, -(1 + _mant) * (2 ^ _powr), (1 + _mant) * (2 ^ _powr))
- _sdec = ASC(RIGHT(_realvar, 1))
- FWRITE(_fh2, "CTOD(" + DTOC(CTOD("01/01/0100") + _numb - 1757585) + ")")
-
- ELSE
- FWRITE(_fh2, "error", 5)
- ENDIF
- FWRITE(_fh2, CHR(13)+CHR(10), 2)
- ENDDO
- FCLOSE(_fh1)
- FCLOSE(_fh2)
- RETURN(.T.)
-
- * End of File