home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / kow142s.lzh / corlib / SheetLoad.c < prev    next >
C/C++ Source or Header  |  1993-01-16  |  4KB  |  116 lines

  1. /*/ /////////////////////////////////////////////////////////////////// /*/
  2. /*/                                    /*/
  3. /*/    éoéàéäâtâHü[â}âbâgâtâ@âCâïé╠ô╟é▌/Åæé½âëâCâuâëâè            /*/
  4. /*/        1991 3/25 Å¼è}î┤öÄöV    SPS-NET: SPS0783 COR.        /*/
  5. /*/                                    /*/
  6. /*/ /////////////////////////////////////////////////////////////////// /*/
  7.  
  8. #include    <stdio.h>
  9. #include    <wlib.h>
  10.  
  11. #define        BUFMAX        200
  12.  
  13. /**************************************************************************/
  14. /**    âtâ@âCâïé⌐éτòKùvé╚éréêéàéàéöâTâCâYé≡ô╛éΘ
  15. /**    int SheetGetSize( FILE *fp; Sheet *sp );
  16. /**        fp    âtâ@âCâïâ|âCâôâ^
  17. /**        sp    Ælé≡ò╘é╖âoâbâtâ@ sp->h, sp->v, sp->hword é╔Ælé≡ò╘é╖
  18. /**    û▀éΦÆlé═ sp->h * sp->hword
  19. /**************************************************************************/
  20. int
  21. SheetGetSize( fp, sp )
  22. FILE    *fp;
  23. Sheet    *sp;
  24. {
  25.     unsigned char    *ptr,
  26.             sbuf[ BUFMAX ];
  27.  
  28.     while( fgets( sbuf, BUFMAX, fp ) ){
  29.         if( strncmp( sbuf, "Sheet", 5 ) == 0 ||
  30.                         strncmp( sbuf, "CLASS\tSheet", 11 ) == 0 ||
  31.                         strncmp( sbuf, "static\tSheet", 12 ) == 0 )
  32.             break;
  33.     }
  34.     for( ptr=sbuf ; *ptr != '{' && *ptr != '\0' ; ptr++ );        /*}*/
  35.     sscanf( ptr+1, "%d, %d, %d", &sp->h, &sp->v, &sp->hword );
  36.     return    sp->hword*sp->v;
  37. }
  38.  
  39.  
  40. /**************************************************************************/
  41. /**    âoâbâtâ@é╔éréêéàéàéöâfü[â^é≡ô╛éΘ
  42. /**    void    SheetLoad( FILE *fp, Sheet *sp );
  43. /**        fp    âtâ@âCâïâ|âCâôâ^
  44. /**        sp    Ælé≡ò╘é╖âoâbâtâ@ sp->buf1, sp->buf2 é╔âoâbâtâ@é≡ò╘é╖
  45. /**************************************************************************/
  46. void
  47. SheetLoad( fp, sp )
  48. FILE    *fp;
  49. Sheet    *sp;
  50. {
  51.     unsigned char    *ptr,
  52.             sbuf[ BUFMAX ];
  53.     unsigned int    j= 1;
  54.     unsigned short    *data= (unsigned short*)sp->buf1;
  55.  
  56.     fseek( fp, 0, 0 );
  57.     do{
  58.         unsigned int    i;
  59.         unsigned int    size= sp->v*sp->hword;
  60.         while( fgets( sbuf, BUFMAX, fp ) )
  61.             if( strncmp( sbuf, "static\tshort", 12 ) == 0 )
  62.                 break;
  63.         for( i= 0 ; i< size ; i++ ){
  64.             unsigned int    a;
  65.             fscanf( fp, "0x%X, ", &a );
  66.             *data++= a;
  67.         }
  68.         data= (unsigned short*)sp->buf2;
  69.     }while( j-- );
  70. }
  71.  
  72. /*/ ///////////////////////////////////////////////////////////////////
  73. [LOAD]
  74.     Sheet    sp;
  75.     int    size;
  76.     size= SizeGet( fp, &sp );
  77.     sp.buf2= ( sp.buf1= MALLOC( size*2 ) )+size;
  78.     SheetLoad( fp, &sp );
  79.  
  80. [SAVE]
  81.     SheetSave( fp, &sp, mode );
  82. /////////////////////////////////////////////////////////////////// /*/
  83.  
  84.  
  85. /**************************************************************************/
  86. /**    âoâbâtâ@é╠éréêéàéàéöâfü[â^é≡Åæé½Åoé╖
  87. /**    void    SheetSave( FILE *fp, Sheet *sp, int mode, char *name );
  88. /**        fp    âtâ@âCâïâ|âCâôâ^
  89. /**        sp    âtâ@âCâïé╔Åæé½Åoé╖âfü[â^
  90. /**        mode    mode=0:Source  mode=1:Include
  91. /**        name    Åæé½ì₧é▐âfü[â^é╠û╝æO
  92. /**************************************************************************/
  93. void
  94. SheetSave( fp, sp, mode, name )
  95. FILE        *fp;
  96. Sheet        *sp;
  97. unsigned int    mode;
  98. unsigned char    *name;
  99. {
  100.     unsigned int    i;
  101.     unsigned short    *data= (unsigned short*)sp->buf1;
  102.     unsigned int    size= sp->v*sp->hword;
  103.  
  104.     fputs( mode ? "#ifndef CLASS\n#define CLASS static\n#endif\n" : "#include \"wlib.h\"\n\n", fp );
  105.  
  106.     fprintf( fp, "static\tshort\t%s1[] = {\n\t", name );
  107.     for( i= 0 ; i< size-1 ; i++ )
  108.         fprintf( fp, "0x%04X, ", *data++ );
  109.     fprintf( fp, "0x%04X\n};\nstatic\tshort\t%s2[] = {\n\t", *data, name );
  110.     data= (unsigned short*)sp->buf2;
  111.     for( i= 0 ; i< size-1 ; i++ )
  112.         fprintf( fp, "0x%04X, ", *data++ );
  113.     fprintf( fp, "0x%04X\n};\n", *data );
  114.     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 );
  115. }
  116.