home *** CD-ROM | disk | FTP | other *** search
- /*/ /////////////////////////////////////////////////////////////////// /*/
- /*/ /*/
- /*/ Pedフォーマットファイルの読み/書きライブラリ /*/
- /*/ 1991 3/25 小笠原博之 SPS-NET: SPS0783 COR. /*/
- /*/ /*/
- /*/ /////////////////////////////////////////////////////////////////// /*/
-
- #include <stdio.h>
- #include <wlib.h>
-
- #define BUFMAX 200
-
- /**************************************************************************/
- /** ファイルから必要なSheetサイズを得る
- /** int SheetGetSize( FILE *fp; Sheet *sp );
- /** fp ファイルポインタ
- /** sp 値を返すバッファ sp->h, sp->v, sp->hword に値を返す
- /** 戻り値は sp->h * sp->hword
- /**************************************************************************/
- int
- SheetGetSize( fp, sp )
- FILE *fp;
- Sheet *sp;
- {
- unsigned char *ptr,
- sbuf[ BUFMAX ];
-
- while( fgets( sbuf, BUFMAX, fp ) ){
- if( strncmp( sbuf, "Sheet", 5 ) == 0 ||
- strncmp( sbuf, "CLASS\tSheet", 11 ) == 0 ||
- strncmp( sbuf, "static\tSheet", 12 ) == 0 )
- break;
- }
- for( ptr=sbuf ; *ptr != '{' && *ptr != '\0' ; ptr++ ); /*}*/
- sscanf( ptr+1, "%d, %d, %d", &sp->h, &sp->v, &sp->hword );
- return sp->hword*sp->v;
- }
-
-
- /**************************************************************************/
- /** バッファにSheetデータを得る
- /** void SheetLoad( FILE *fp, Sheet *sp );
- /** fp ファイルポインタ
- /** sp 値を返すバッファ sp->buf1, sp->buf2 にバッファを返す
- /**************************************************************************/
- void
- SheetLoad( fp, sp )
- FILE *fp;
- Sheet *sp;
- {
- unsigned char *ptr,
- sbuf[ BUFMAX ];
- unsigned int j= 1;
- unsigned short *data= (unsigned short*)sp->buf1;
-
- fseek( fp, 0, 0 );
- do{
- unsigned int i;
- unsigned int size= sp->v*sp->hword;
- while( fgets( sbuf, BUFMAX, fp ) )
- if( strncmp( sbuf, "static\tshort", 12 ) == 0 )
- break;
- for( i= 0 ; i< size ; i++ ){
- unsigned int a;
- fscanf( fp, "0x%X, ", &a );
- *data++= a;
- }
- data= (unsigned short*)sp->buf2;
- }while( j-- );
- }
-
- /*/ ///////////////////////////////////////////////////////////////////
- [LOAD]
- Sheet sp;
- int size;
- size= SizeGet( fp, &sp );
- sp.buf2= ( sp.buf1= MALLOC( size*2 ) )+size;
- SheetLoad( fp, &sp );
-
- [SAVE]
- SheetSave( fp, &sp, mode );
- /////////////////////////////////////////////////////////////////// /*/
-
-
- /**************************************************************************/
- /** バッファのSheetデータを書き出す
- /** void SheetSave( FILE *fp, Sheet *sp, int mode, char *name );
- /** fp ファイルポインタ
- /** sp ファイルに書き出すデータ
- /** mode mode=0:Source mode=1:Include
- /** name 書き込むデータの名前
- /**************************************************************************/
- void
- SheetSave( fp, sp, mode, name )
- FILE *fp;
- Sheet *sp;
- unsigned int mode;
- unsigned char *name;
- {
- unsigned int i;
- unsigned short *data= (unsigned short*)sp->buf1;
- unsigned int size= sp->v*sp->hword;
-
- fputs( mode ? "#ifndef CLASS\n#define CLASS static\n#endif\n" : "#include \"wlib.h\"\n\n", fp );
-
- fprintf( fp, "static\tshort\t%s1[] = {\n\t", name );
- for( i= 0 ; i< size-1 ; i++ )
- fprintf( fp, "0x%04X, ", *data++ );
- fprintf( fp, "0x%04X\n};\nstatic\tshort\t%s2[] = {\n\t", *data, name );
- data= (unsigned short*)sp->buf2;
- for( i= 0 ; i< size-1 ; i++ )
- fprintf( fp, "0x%04X, ", *data++ );
- fprintf( fp, "0x%04X\n};\n", *data );
- fprintf( fp, mode ? "CLASS\tSheet\t%sPattern = { %d, %d, %d, %s1, %s2 };\n" : "Sheet\t%sPattern = { %d, %d, %d, %s1, %s2 };\n", name, sp->h, sp->v, sp->hword, name, name );
- }
-