home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / kow142s.lzh / wsrv / readrc.c < prev    next >
C/C++ Source or Header  |  1995-12-02  |  4KB  |  191 lines

  1. /*
  2.     1993/8/2 H.Ogasawara (COR.) fio âïü[â`âôé╠ôⁿéΩæ╓éª
  3.     1994/11/28 èeÄφâoâOé≡ĵéΘé╜é▀æSû╩Åæé½Æ╝é╡ H.Ogasawara(COR.)
  4.     1995/11/12 microstr lib é╔ê┌ìsé╡üAæσò¥Åæé½è╖éª
  5. */
  6. #include    <stdio.h>
  7. #include    <microstr.h>
  8. #include    <sys_doslib.h>
  9.  
  10. #include    "clip.h"
  11. #include    "window.h"
  12. #include    "manager.h"
  13. #include    "common.h"
  14. #include    "exec.h"
  15. #include    "readrc.h"
  16. #include    "error.h"
  17.  
  18. extern    int        KeepLevel;
  19. /*extern    int        CommonSize;*/
  20. extern    int        Palet1, Palet3;
  21. extern    int        WindowLines;
  22. extern    int        WindowColumns;
  23.  
  24. static unsigned char    *getnum( unsigned char*, int * );
  25. static unsigned char    *getword( unsigned char*, unsigned char* );
  26. static void        FlushSetCommon();
  27.  
  28. /*  WSRV.RC é╠ô╟é▌ì₧é▌  */
  29. void
  30. ReadRC()
  31. {
  32.     unsigned char    *buf;
  33.     int                fn;
  34.  
  35.     if( !(fn= OpenRC( 'c' )) < 0 )
  36.         return;
  37.     {
  38.         int    len= SEEK( fn, 0, 2 );
  39.         buf= (void*)MALLOC( len+2 );
  40.         SEEK( fn, 0, 0 );
  41.         READ( fn, buf, len );
  42.         CLOSE( fn );
  43.         buf[len]= '\0';
  44.     }
  45.  
  46.     {
  47.         unsigned char    *str, *ptr, name[50];
  48.         for( *name= '\0', str= ptr= buf ; *ptr ;){
  49.             if( *ptr == '#' ){
  50.                 for(; *ptr && *ptr != '\n' ; ptr++ );
  51.             }else if( *ptr == '!' ){
  52.                 unsigned char    *p;
  53.                 FlushSetCommon( p= name, buf, str );
  54.                 for( ptr++ ; *ptr >= ' ' ; *p++= *ptr++ );
  55.                 *p= '\0';
  56.                 str= buf;
  57.             }else{
  58.                 for(; *ptr && *ptr != '\r' && *ptr != '\n' ; *str++= *ptr++ );
  59.                 *str++= '\n';
  60.             }
  61.             for(; *ptr == '\n' || *ptr == '\r' ; ptr++ );
  62.         }
  63.         FlushSetCommon( name, buf, str );
  64.     }
  65.     MFREE( buf );
  66. }
  67. static void
  68. FlushSetCommon( name, buf, str )
  69. unsigned char    *name, *buf, *str;
  70. {
  71.     int    len= str-buf;
  72.     *str= '\0';
  73.     if( *name && len ){
  74.         if( str= WindowGetCommon( name, len+1 ) )
  75.             s_strcpy( str, buf );
  76.     }
  77. }
  78.  
  79. /*    ÆΦÉöÅëè·É▌ÆΦ  */
  80. void
  81. ReadInit()
  82. {
  83.     if( CommonOpen( "Wsrv" ) ){
  84.         unsigned char    word[50], buf[256], *p;
  85.         for(; CommonGetLine( buf ) ;){
  86.             int        r, g, b ;
  87.             p= getword( buf, word );
  88.             if( !n_fstrcmp( "Keep", word ) ){    /* KeepLevel */
  89.                 getnum( p, &KeepLevel );
  90.             }else if( !n_fstrcmp( "Paper", word ) ){  /* PaperColor */
  91.                 p= getnum( p, &r );
  92.                 p= getnum( p, &g );
  93.                 p= getnum( p, &b );
  94.                 Palet1= (g<<11) + (r<<6) + (b<<1);
  95.             }else if( !n_fstrcmp( "High", word ) ){    /* HighLightColor */
  96.                 p= getnum( p, &r );
  97.                 p= getnum( p, &g );
  98.                 p= getnum( p, &b );
  99.                 Palet3= (g<<11) + (r<<6) + (b<<1);
  100.             }else if( !n_fstrcmp( "WindowL", word ) ){ /* WindowLines */
  101.                 getnum( p, &WindowLines );
  102.             }else if( !n_fstrcmp( "WindowC", word ) ){ /* WindowColumns */
  103.                 getnum( p, &WindowColumns );
  104.             }
  105.         }
  106.     }
  107. }
  108.  
  109. /*  Ä└ìs  */
  110. void
  111. ReadExec()
  112. {
  113.     unsigned char    word[50], buf[256], *p;
  114.     void    CommandExec( unsigned char* );
  115.  
  116.     if( CommonOpen( "Wsrv" ) ){
  117.         for(; CommonGetLine( buf ) ;){
  118.             p= getword( buf, word );
  119.             if( !n_fstrcmp( "ExecCommand", word ) )
  120.                 CommandExec( p );
  121.         }
  122.     }
  123. }
  124.  
  125. char    initNameX[80];
  126. /*  wsrv.rc é╠âIü[âvâô  */
  127. int
  128. OpenRC( ch )        /* 1992,93,95 COR. */
  129. char    ch;
  130. {
  131.     static char    initName0[]= "wsrv.rc",
  132.                 initName1[]= ".wsrvrc";
  133.     unsigned char    home[90];
  134.     int            ret;
  135.     extern void    *_PSP;
  136.     if( *initNameX ){
  137.         unsigned char    *p= s_strpath( initNameX )-2;
  138.         *p++= ch;
  139.         *p= '\0';
  140.         if( (ret= OPEN( initNameX, 0 )) >= 0 )
  141.             return    ret;
  142.     }
  143.     initName0[6]= initName1[6]= ch;
  144.     if( (ret= OPEN( initName0, 0 )) >= 0 )
  145.         return    ret;
  146.     if( GETENV( "home", 0, home ) >= 0 ){
  147.         s_strcpy( s_strpath( home ), initName0 );
  148.         if( (ret= OPEN( home, 0 )) >= 0 )
  149.             return    ret;
  150.     }
  151.     if( GETENV( "HOME", 0, home ) >= 0 ){
  152.         unsigned char    *p;
  153.         s_strcpy( p= s_strpath( home ), initName0 );
  154.         if( (ret= OPEN( home, 0 )) >= 0 )
  155.             return    ret;
  156.         s_strcpy( p, initName1 );
  157.         if( (ret= OPEN( home, 0 )) >= 0 )
  158.             return    ret;
  159.     }
  160.     s_strcpy( s_strcpy( home, _PSP+0x80-16 ), initName0 );
  161.     return    OPEN( home, 0 );
  162. }
  163.  
  164.  
  165. /*  éPâÅü[âhÉ╪éΦÅoé╡  */
  166. static unsigned char *
  167. getword( ptr, str )
  168. unsigned char    *ptr, *str;
  169. {
  170.     unsigned char    c= ' ', d= '\t';
  171.     ptr= SkipSpace( ptr );
  172.     if( *ptr == '\"' )
  173.         d= c= *ptr++;
  174.     for(; *ptr && *ptr != '\n' && *ptr != c && *ptr != d ; *str++=*ptr++ );
  175.     *str= '\0';
  176.     return    SkipSpace( ptr );
  177. }
  178.  
  179. /*  ÉöÄÜé╠É╪éΦÅoé╡  */
  180. static unsigned char *
  181. getnum( ptr, p )
  182. unsigned char    *ptr;
  183. int        *p;
  184. {
  185.     unsigned char    word[50];
  186.     ptr= getword( ptr, word );
  187.     *p= _atoiX( word );
  188.     return    ptr;
  189. }
  190.  
  191.