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 >
Wrap
C/C++ Source or Header
|
1995-12-02
|
4KB
|
191 lines
/*
1993/8/2 H.Ogasawara (COR.) fio âïü[â`âôé╠ôⁿéΩæ╓éª
1994/11/28 èeÄφâoâOé≡ĵéΘé╜é▀æSû╩Åæé½Æ╝é╡ H.Ogasawara(COR.)
1995/11/12 microstr lib é╔ê┌ìsé╡üAæσò¥Åæé½è╖éª
*/
#include <stdio.h>
#include <microstr.h>
#include <sys_doslib.h>
#include "clip.h"
#include "window.h"
#include "manager.h"
#include "common.h"
#include "exec.h"
#include "readrc.h"
#include "error.h"
extern int KeepLevel;
/*extern int CommonSize;*/
extern int Palet1, Palet3;
extern int WindowLines;
extern int WindowColumns;
static unsigned char *getnum( unsigned char*, int * );
static unsigned char *getword( unsigned char*, unsigned char* );
static void FlushSetCommon();
/* WSRV.RC é╠ô╟é▌ì₧é▌ */
void
ReadRC()
{
unsigned char *buf;
int fn;
if( !(fn= OpenRC( 'c' )) < 0 )
return;
{
int len= SEEK( fn, 0, 2 );
buf= (void*)MALLOC( len+2 );
SEEK( fn, 0, 0 );
READ( fn, buf, len );
CLOSE( fn );
buf[len]= '\0';
}
{
unsigned char *str, *ptr, name[50];
for( *name= '\0', str= ptr= buf ; *ptr ;){
if( *ptr == '#' ){
for(; *ptr && *ptr != '\n' ; ptr++ );
}else if( *ptr == '!' ){
unsigned char *p;
FlushSetCommon( p= name, buf, str );
for( ptr++ ; *ptr >= ' ' ; *p++= *ptr++ );
*p= '\0';
str= buf;
}else{
for(; *ptr && *ptr != '\r' && *ptr != '\n' ; *str++= *ptr++ );
*str++= '\n';
}
for(; *ptr == '\n' || *ptr == '\r' ; ptr++ );
}
FlushSetCommon( name, buf, str );
}
MFREE( buf );
}
static void
FlushSetCommon( name, buf, str )
unsigned char *name, *buf, *str;
{
int len= str-buf;
*str= '\0';
if( *name && len ){
if( str= WindowGetCommon( name, len+1 ) )
s_strcpy( str, buf );
}
}
/* ÆΦÉöÅëè·É▌ÆΦ */
void
ReadInit()
{
if( CommonOpen( "Wsrv" ) ){
unsigned char word[50], buf[256], *p;
for(; CommonGetLine( buf ) ;){
int r, g, b ;
p= getword( buf, word );
if( !n_fstrcmp( "Keep", word ) ){ /* KeepLevel */
getnum( p, &KeepLevel );
}else if( !n_fstrcmp( "Paper", word ) ){ /* PaperColor */
p= getnum( p, &r );
p= getnum( p, &g );
p= getnum( p, &b );
Palet1= (g<<11) + (r<<6) + (b<<1);
}else if( !n_fstrcmp( "High", word ) ){ /* HighLightColor */
p= getnum( p, &r );
p= getnum( p, &g );
p= getnum( p, &b );
Palet3= (g<<11) + (r<<6) + (b<<1);
}else if( !n_fstrcmp( "WindowL", word ) ){ /* WindowLines */
getnum( p, &WindowLines );
}else if( !n_fstrcmp( "WindowC", word ) ){ /* WindowColumns */
getnum( p, &WindowColumns );
}
}
}
}
/* Ä└ìs */
void
ReadExec()
{
unsigned char word[50], buf[256], *p;
void CommandExec( unsigned char* );
if( CommonOpen( "Wsrv" ) ){
for(; CommonGetLine( buf ) ;){
p= getword( buf, word );
if( !n_fstrcmp( "ExecCommand", word ) )
CommandExec( p );
}
}
}
char initNameX[80];
/* wsrv.rc é╠âIü[âvâô */
int
OpenRC( ch ) /* 1992,93,95 COR. */
char ch;
{
static char initName0[]= "wsrv.rc",
initName1[]= ".wsrvrc";
unsigned char home[90];
int ret;
extern void *_PSP;
if( *initNameX ){
unsigned char *p= s_strpath( initNameX )-2;
*p++= ch;
*p= '\0';
if( (ret= OPEN( initNameX, 0 )) >= 0 )
return ret;
}
initName0[6]= initName1[6]= ch;
if( (ret= OPEN( initName0, 0 )) >= 0 )
return ret;
if( GETENV( "home", 0, home ) >= 0 ){
s_strcpy( s_strpath( home ), initName0 );
if( (ret= OPEN( home, 0 )) >= 0 )
return ret;
}
if( GETENV( "HOME", 0, home ) >= 0 ){
unsigned char *p;
s_strcpy( p= s_strpath( home ), initName0 );
if( (ret= OPEN( home, 0 )) >= 0 )
return ret;
s_strcpy( p, initName1 );
if( (ret= OPEN( home, 0 )) >= 0 )
return ret;
}
s_strcpy( s_strcpy( home, _PSP+0x80-16 ), initName0 );
return OPEN( home, 0 );
}
/* éPâÅü[âhÉ╪éΦÅoé╡ */
static unsigned char *
getword( ptr, str )
unsigned char *ptr, *str;
{
unsigned char c= ' ', d= '\t';
ptr= SkipSpace( ptr );
if( *ptr == '\"' )
d= c= *ptr++;
for(; *ptr && *ptr != '\n' && *ptr != c && *ptr != d ; *str++=*ptr++ );
*str= '\0';
return SkipSpace( ptr );
}
/* ÉöÄÜé╠É╪éΦÅoé╡ */
static unsigned char *
getnum( ptr, p )
unsigned char *ptr;
int *p;
{
unsigned char word[50];
ptr= getword( ptr, word );
*p= _atoiX( word );
return ptr;
}