00001 #include "SO3Loader3d.h"
00002 #include "..\SCOLPack\SO3SCOL.h"
00003
00004 string errorMsg;
00005
00006 mmachine machineForLoad;
00007 int ptrHashTable, ptrHashMat, ptrHashTex;
00008
00009 int SO3Dlitligne(FILE*f, char*buf, int n)
00010 {
00011 int c, i;
00012
00013 while((c=fgetc(f))<32)
00014 {
00015 if(c==EOF) return 0;
00016 }
00017
00018 i=0;
00019 buf[i++]=c;
00020 while( ( ((c=fgetc(f))>=32)||(c==9) )&&(c!=EOF)&&(i<n)) buf[i++]=c;
00021
00022 if(i==n) return 0;
00023 buf[i]=0;
00024
00025 return i;
00026 }
00027
00028 int SO3Dlitlignebuf(load3d l, char*buf, int n)
00029 {
00030 int c,i;
00031
00032 while((c=(*(l->buf++)))<32)
00033 {
00034 if(c==0)
00035 {
00036 l->buf--;
00037 return 0;
00038 }
00039 }
00040
00041 i=0;
00042 buf[i++]=c;
00043 while( ( ((c=(*(l->buf++)))>=32)||(c==9) )&&(c)&&(i<n)) buf[i++]=c;
00044
00045 if(c==0) l->buf--;
00046 if(i==n) return 0;
00047 buf[i]=0;
00048
00049 return i;
00050 }
00051
00052 int SO3Ddecoupe(char* comm, char**mots)
00053 {
00054 int i,j;
00055
00056 i=j=0;
00057 while(*comm)
00058 {
00059 if(((*comm)==32)||((*comm)==9)) *comm=0;
00060 if((j==0)&&(*comm))
00061 {
00062 if((*comm)!='#') mots[i++]=comm;
00063 else return i;
00064 }
00065 j=*(comm++);
00066 }
00067 return i;
00068 }
00069
00070 int SO3Dnextline(load3d l)
00071 {
00072 do
00073 {
00074 l->argn=0;
00075 if(l->f)
00076 {
00077 if(SO3Dlitligne(l->f,l->bufload3d,1023)==0) return -1;
00078 }
00079 else if(SO3Dlitlignebuf(l,l->bufload3d,1023)==0) return -1;
00080 l->argn=SO3Ddecoupe(l->bufload3d,l->argv);
00081 }
00082 while(l->argn==0);
00083
00084 return 0;
00085 }
00086
00087 int SO3Dline(load3d l)
00088 {
00089
00090 l->argn=0;
00091 if(l->f)
00092 {
00093 if(SO3Dlitligne(l->f,l->bufload3d,1023)==0) return -1;
00094 }
00095 else if(SO3Dlitlignebuf(l,l->bufload3d,1023)==0) return -1;
00096 l->argn=SO3Ddecoupe(l->bufload3d,l->argv);
00097
00098 return 0;
00099 }