| 
 PureBytes Links 
Trading Reference Links 
 | 
Jefferson
May this help ?
Regards
Peter
-----Original Message-----
From: equismetastock@xxxxxxxxxxxxxxx [mailto:equismetastock@xxxxxxxxxxxxxxx]
On Behalf Of Jefferson Costa
Sent: Sunday, 9 July 2006 6:41 AM
To: equismetastock@xxxxxxxxxxxxxxx
Subject: [EquisMetaStock Group] First question - Development library
Hi,
I want to develop a system to read a binary metastock file format and show
me the data in them in C or C++. I saw metalib and mdk, but they need
MFC(Microsoft Foudation Classes), the programs stay too big and too slow
with MFC library. Other hand, i'm trying to find a recent documentation
about binary metastock file format, but i did not find a good one. Normaly
they are old or not complete.
That is my situation. Someone can help me ?
Regards,
Jefferson.
------------------------ Yahoo! Groups Sponsor --------------------~--> See
what's inside the new Yahoo! Groups email.
http://us.click.yahoo.com/2pRQfA/bOaOAA/yQLSAA/BefplB/TM
--------------------------------------------------------------------~-> 
 
Yahoo! Groups Links
 
  ----------
Metastock data format
/* The orignal 255 record format */
typedef	unsigned char	u_char;
typedef	unsigned short	u_short;
/*
 * MASTER file description
 *  floats are in Microsoft Basic format
 *  strings are padded with spaces, not null terminated
 */
struct rec_1 {
    u_short num_files;	    /* number of files master contains */
    u_short file_num;	    /* next file number to use (highest F# used) */
    char zeroes[49];
};
struct rec_2to255 {	    /* description of data files */
    u_char file_num;	    /* file #, i.e., F# */
    char file_type[2];	    /* CT file type = 0'e' (5 or 7 flds) */
    u_char rec_len;	    /* record length in bytes (4 x num_fields)
*/
    u_char num_fields;	    /* number of 4-byte fields in each record
*/
    char reserved1[2];	    /*  in the data file */
    char issue_name[16];    /* stock name */
    char reserved2;
    char CT_v2_8_flag;	    /* if CT ver. 2.8, 'Y'; o.w., anything else */
    float first_date;	    /* yymmdd */
    float last_date;
    char time_frame;	    /* data format: 'I'(IDA)/'W'/'Q'/'D'/'M'/'Y' */
    u_short ida_time;	    /* <b>intraday</b> (IDA) time base */
    char symbol[14];	    /* stock symbol */
    char reserved3;	    /* <b>MetaStock</b> reserved2: must be a space */
    char flag;		    /* ' ' or '*' for autorun */
    char reserved4;
};
/*
 * EMASTER data structure
 *  floats are in IEEE format
 *  strings are padded with nulls
 */
struct emashdr {
    u_short num_files;	    /* number of files in emaster */
    u_short file_num;	    /* last (highest) file number */
    char stuff[188];
};
struct emasdat {
    char asc30[2];	    /* "30" */
    u_char file_num;	    /* file number F# */
    char fill1[3];
    u_char num_fields;	    /* number of 4-byte data fields */
    char fill2[2];
    char flag;		    /* ' ' or '*' for autorun */
    char fill3;
    char symbol[14];	    /* stock symbol */
    char fill4[7];
    char issue_name[16];    /* stock name */
    char fill5[12];
    char time_frame;	    /* data format: 'D'/'W'/'M'/ etc. */
    char fill6[3];
    float first_date;	    /* yymmdd */
    char fill7[4];
    float last_date;
    char fill8[116];
};
/* seven-field data file description */
struct dathdr7 {
    u_short max_recs;	    /* 0 ==> unlimited size */
    u_short last_rec;	    /* dathdr7 = 1; ctdata7 starts with 2 */
    char zeroes[24];
};
struct ctdata7 {
    float date;
    float open;
    float high;
    float low;
    float close;
    float volume;
    float op_int;
};
/* five-field data file description */
struct dathdr5 {
    u_short max_recs;
    u_short last_rec;
    char zeroes[16];
};
struct ctdata5 {
    float date;
    float high;
    float low;
    float close;
    float volume;
};
/* IEEE floating point format to Microsoft Basic floating point format */
int fieee2msbin(float *src, float *dst) {
    union {
	float a;
	u_long b;
    } c;
    u_short man;
    u_short exp;
    c.a = *src;
    if (c.b) {		/* not zero */
	man = c.b >> 16;
	exp = ((man << 1) & 0xff00) + 0x0200;
	if (exp & 0x8000 != (man << 1) & 0x8000)
	    return 1;	/* exponent overflow */
	man = man & 0x7f | (man >> 8) & 0x80;	/* move sign */
	man |= exp;
	c.b = c.b & 0xffff | (long)man << 16;
    }
    *dst = c.a;
    return 0;
}
/* Microsoft Basic floating point format to IEEE floating point format */
int fmsbin2ieee(float *src, float *dst) {
    union {
	float a;
	u_long b;
    } c;
    u_short man;
    u_short exp;
    c.a = *src;
    if (c.b) {		/* not zero */
	man = c.b >> 16;
	exp = (man & 0xff00) - 0x0200;
	if (exp & 0x8000 != man & 0x8000)
	    return 1;	/* exponent overflow */
	man = man & 0x7f | (man << 8) & 0x8000;	/* move sign */
	man |= exp >> 1;
	c.b = c.b & 0xffff | (long)man << 16;
    }
    *dst = c.a;
    return 0;
}
[Non-text portions of this message have been removed]
------------------------ Yahoo! Groups Sponsor --------------------~--> 
Yahoo! Groups gets a make over. See the new email design.
http://us.click.yahoo.com/XISQkA/lOaOAA/yQLSAA/BefplB/TM
--------------------------------------------------------------------~-> 
 
Yahoo! Groups Links
<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/equismetastock/
<*> To unsubscribe from this group, send an email to:
    equismetastock-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 
 |