Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
204 chris 1
/*
2
** ARToolKit object parsing function
3
**   - reads in object data from object file in Data/object_data
4
**
5
*/
6
 
7
#ifdef _WIN32
8
#include <windows.h>
9
#endif
10
#ifndef __APPLE__
11
#include <malloc.h>
12
#endif
13
#include <stdio.h>
14
#include <stdlib.h>
15
#include <AR/ar.h>
16
#include "object.h"
17
 
18
static char *get_buff( char *buf, int n, FILE *fp );
19
 
20
ObjectData_T *read_objectdata( char *name, int *objectnum )
21
{
22
    FILE          *fp;
23
    ObjectData_T  *object;
24
    char           buf[256], buf1[256];
25
    int            i;
26
 
27
    if( (fp=fopen(name, "r")) == NULL ) return(0);
28
 
29
    get_buff(buf, 256, fp);
30
    if( sscanf(buf, "%d", objectnum) != 1 ) {fclose(fp); return(0);}
31
 
32
    object = (ObjectData_T *)malloc( sizeof(ObjectData_T) * *objectnum );
33
    if( object == NULL ) return(0);
34
 
35
    for( i = 0; i < *objectnum; i++ ) {
36
        get_buff(buf, 256, fp);
37
        if( sscanf(buf, "%s", object[i].name) != 1 ) {
38
          fclose(fp); free(object); return(0);}
39
 
40
        get_buff(buf, 256, fp);
41
        if( sscanf(buf, "%s", buf1) != 1 ) {
42
          fclose(fp); free(object); return(0);}
43
 
44
        if( (object[i].id = arLoadPatt(buf1)) < 0 )
45
            {fclose(fp); free(object); return(0);}
46
 
47
        object[i].visible = 0;
48
 
49
        get_buff(buf, 256, fp);
50
        if( sscanf(buf, "%lf", &object[i].marker_width) != 1 ) {
51
            fclose(fp); free(object); return(0);
52
        }
53
 
54
        printf("No.%d: %20s\n", i+1, &(object[i].name[0]) );
55
    }
56
 
57
    fclose(fp);
58
 
59
    return( object );
60
}
61
 
62
static char *get_buff( char *buf, int n, FILE *fp )
63
{
64
    char *ret;
65
 
66
    for(;;) {
67
        ret = fgets( buf, n, fp );
68
        if( ret == NULL ) return(NULL);
69
        if( buf[0] != '\n' && buf[0] != '#' ) return(ret);
70
    }
71
}