home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 3
/
FREEWARE.BIN
/
towns_os
/
whisper
/
source
/
func.c
< prev
next >
Wrap
Text File
|
1980-01-02
|
21KB
|
1,045 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <mos.h>
#include "event.h"
#include "graphic.h"
#include "defs.h"
#include "coldef.h"
#define FUNC_MAX (32*1024)
void CHK_snd(void);
void CHK_eup(void);
int PLAY_snd();
int PLAY_eup();
int END_eup();
int DSP_push_tiff();
int DSP_pop_tiff();
void DSP_super(char *str);
void DSP_pause(int x,int y,int cl,int bk,char *str);
int PLT_set();
char *WIN_file_chk();
void WIN_putc(int no,int ch);
void WIN_flush();
int WIN_type(int no,int ch);
int WIN_write_file(int no,int ch,char *file,int sw);
int WIN_secret_chk(int no,int ch);
int WIN_write_chk(int no,int ch);
int WIN_read_file(int no,int ch,char *file,int sw);
void WIN_upload(int no);
char *WIN_get_line(int no,int ch);
void CHILD_set(int no,int ch);
int MAC_init(char *ag[]);
void MEMO_insrt(int no,int ch);
char *MEMO_get_buf(void);
void MEMO_set_word(char *str);
void MEMO_chk(void);
int RSB_chk();
int RSB_getc();
void RSB_putc(int ch);
void RSB_init(int port);
void RSB_reopen(int md,int bps);
void RSB_get_para(int *pt,int *md,int *bp);
void RSB_end();
int keyword(char *file,int sw);
char *copy_file_name(char *file);
int copy(char *file,char *new);
int merge(char *org,char *file);
int type(char *file);
int COMP_lzss(char *file);
int XMODEM_upload(char *file);
int XMODEM_download(char *file);
int FILE_upload(char *file);
int CD_play();
int CD_play_no();
int CD_next();
int CD_back();
int CD_stop();
int CD_vol_up();
int CD_vol_down();
int CD_vol_set();
int CD_menu();
void DSP_anime();
int CMDS_init();
int patmatch(char *file,char *wild);
int TALK_str();
int TALK_new();
int SND_make();
int MSG_echo(char *argv[]);
int MSG_input(char *argv[]);
int MSG_yes(char *argv[]);
int MSG_yesno(char *argv[]);
int MSG_color(char *argv[]);
int MSG_bakcol(char *argv[]);
int MSG_lincol(char *argv[]);
int MSG_open_wind(void);
int TAB_set(void);
int MSG_ext_cfg(char *argv[]);
int MSG_menu_tate(char *argv[]);
int MSG_menu_state(char *argv[]);
int MSG_menu_syoko(char *argv[]);
int MSG_echo(char *argv[]);
void tsleep(int sec);
void macvalset(char *mac,int val);
int macval(char *mac);
void macset(char *mac,char *str);
char *macget(char *mac);
int MSG_close_wind(void);
void WIN_resize(void);
void DSP_one_pal(int no,int r,int g,int b);
int WIN_down_start();
void RSB_mode_set();
void RSB_break_out(void);
char *get_word(char *buf,char *str);
char *get_string(char *tmp,char *str);
char *cutpara(char *arg,char *str);
char *cutcmds(char *str);
int cmp_func(char *str);
char *prcget(char *prc);
int secret_chk(char *file);
int chdrv(int no);
int mkdir(char *name);
int rmdir(char *name);
int chdir(char *name);
int getdir(char *name);
int mem_file(char *file);
void unmem_file(char *file);
void TANGO_set(void);
int KEY_func_exec(char *func);
int MSG_system(char *argv[]);
int MSG_command(void);
extern int TERM;
extern int msg_tab;
extern int errno;
extern int top_event;
extern char *func_ptr;
extern char func_buf[];
int MSG_sleep(char *argv[])
{
int n;
if ( (n = atoi(*argv)) == 0 )
n = 3;
tsleep(n);
return n;
}
int MSG_wait(char *argv[])
{
int ch,n,sw,x,y;
clock_t t;
DSP_mos(2);
MOS_disp(TRUE);
if ( (n = atoi(*argv)) == 0 )
n = 3;
t = clock() + CLK_TCK * n;
do {
while ( RSB_chk() > 0 ) {
ch = RSB_getc();
WIN_putc(TERM,ch);
}
WIN_flush(TERM);
MOS_rdpos(&sw,&x,&y);
CHK_snd();
CHK_eup();
} while ( sw == 0 && t > clock() );
MOS_disp(FALSE);
DSP_mos(0);
return (sw != 0 ? ERR:FALSE);
}
int KEY_lock(char *argv[])
{
int cd=ERR;
while ( *argv != NULL ) {
if ( (cd = keyword(*(argv++),FALSE)) != 0 )
break;
}
return cd;
}
int KEY_unlock(char *argv[])
{
int cd=ERR;
while ( *argv != NULL ) {
if ( (cd = keyword(*(argv++),TRUE)) != 0 )
break;
}
return cd;
}
int FIL_unlink(char *argv[])
{
int cd;
while ( *argv != NULL ) {
if ( (cd = remove(*(argv++))) != 0 )
break;
}
return cd;
}
int FIL_complzss(char *argv[])
{
int cd;
while ( *argv != NULL ) {
if ( (cd = COMP_lzss(*(argv++))) != 0 )
break;
}
return cd;
}
int FIL_rename(char *argv[])
{
return rename(argv[0],argv[1]);
}
int FIL_copy(char *argv[])
{
return copy(argv[0],argv[1]);
}
int FIL_copy_name(char *argv[])
{
macset(argv[0],copy_file_name(argv[1]));
return FALSE;
}
int FIL_merge(char *argv[])
{
return merge(argv[0],argv[1]);
}
int FIL_type(char *argv[])
{
return type(*argv);
}
int FIL_load(char *argv[])
{
return WIN_read_file(atoi(argv[0]),atoi(argv[1]),
argv[2],atoi(argv[3]));
}
int MSG_snd(char *argv[])
{
while ( *argv != NULL )
PLAY_snd(*(argv++));
return FALSE;
}
int MSG_eup(char *argv[])
{
while ( *argv != NULL )
PLAY_eup(*(argv++));
return FALSE;
}
int MSG_tiff(char *argv[])
{
while ( *argv != NULL )
DSP_push_tiff(*(argv++));
return FALSE;
}
int MSG_get_time(char *argv[])
{
clock_t t;
t = clock() / CLK_TCK;
macvalset(argv[0],t);
return t;
}
int MSG_add(char *argv[])
{
int n;
n = macval(argv[0]);
n += atoi(argv[1]);
macvalset(argv[0],n);
return n;
}
int MSG_sub(char *argv[])
{
int n;
n = macval(argv[0]);
n -= atoi(argv[1]);
macvalset(argv[0],n);
return n;
}
int TERM_getc(char *argv[])
{
int len,ch;
char tmp[2];
len = RSB_chk();
if ( len > 0 ) {
ch = RSB_getc();
tmp[0] = ch;
tmp[1] = '\0';
} else
tmp[0] = '\0';
macset(argv[0],tmp);
return tmp[0];
}
int TERM_gets(char *argv[])
{
int n,ch,len;
char tmp[82];
for ( n = 0 ; n < 80 ; ) {
len = RSB_chk();
while ( len-- > 0 && n < 80 ) {
ch = RSB_getc();
if ( ch == 0x0A ) {
break;
} else if ( ch != '\0' && ch != 0x0D )
tmp[n++] = ch;
}
}
tmp[n] = '\0';
macset(argv[0],tmp);
return n;
}
int TERM_putc(char *argv[])
{
RSB_putc(*argv[0]);
return *argv[0];
}
int TERM_puts(char *argv[])
{
char *p;
p = argv[0];
while ( *p != '\0' ) {
if ( *p != '\n' )
RSB_putc(*p);
p++;
}
return FALSE;
}
int MSG_wind_putc(char *argv[])
{
int n;
n = atoi(argv[0]);
WIN_putc(n,*argv[1]);
return n;
}
int MSG_wind_puts(char *argv[])
{
int n;
char *p;
n = atoi(argv[0]);
p = argv[1];
while ( *p != '\0' )
WIN_putc(n,*(p++));
return n;
}
int MSG_wind_flush(void)
{
MSG_close_wind();
WIN_resize();
MOS_disp(FALSE);
return FALSE;
}
int MSG_switch(char *argv[])
{
int i,fg,ch,sw,x,y;
clock_t t,l;
short al[20];
DSP_mos(2);
MOS_disp(TRUE);
t = clock() + atoi(argv[0]) * CLK_TCK;
for ( i = 1 ; argv[i] != NULL ; i++ )
al[i] = 0;
fg = ERR;
do {
while ( RSB_chk() > 0 ) {
ch = RSB_getc();
WIN_putc(TERM,ch);
for ( i = 1 ; argv[i] != NULL ; i++ ) {
if ( ch == argv[i][al[i]] ) {
al[i]++;
if ( argv[i][al[i]] == '\0' ) {
fg = (i-1);
goto ENDOF;
}
} else
al[i] = 0;
}
}
WIN_flush(TERM);
l = clock();
MOS_rdpos(&sw,&x,&y);
} while ( l < t && sw == 0 );
ENDOF:
MOS_disp(FALSE);
DSP_mos(0);
return fg;
}
int MSG_mos(char *argv[])
{
int sw,x,y;
MOS_rdpos(&sw,&x,&y);
if ( argv[0] != NULL ) {
macvalset(argv[0],sw);
if ( argv[1] != NULL ) {
macvalset(argv[1],x);
if ( argv[2] != NULL )
macvalset(argv[2],y);
}
}
return sw;
}
int TERM_open(char *argv[])
{
int md;
if ( argv[0] != NULL )
RSB_init(atoi(argv[0]));
else
RSB_init(0);
md = macval("_BIT") |
(macval("_PARISW") << 1) |
(macval("_PARITY") << 2) |
(macval("_STOPBIT") << 3) |
(macval("_XONXOFF") << 4);
RSB_reopen(md,macval("_BPS"));
return FALSE;
}
int TERM_para(void)
{
int pt,md,bp;
RSB_get_para(&pt,&md,&bp);
macvalset("_PORT",pt);
macvalset("_BIT",md & 1);
macvalset("_PARISW",(md >> 1) & 1);
macvalset("_PARITY",(md >> 2) & 1);
macvalset("_STOPBIT",(md >> 3) & 1);
macvalset("_XONXOFF",(md >> 4) & 1);
macvalset("_BPS",bp);
return pt;
}
int TERM_close()
{
RSB_end();
return FALSE;
}
int MSG_wind_type(char *argv[])
{
return WIN_type(atoi(argv[0]),atoi(argv[1]));
}
int MSG_wind_save(char *argv[])
{
return WIN_write_file(atoi(argv[0]),atoi(argv[1]),
argv[2],atoi(argv[3]));
}
int MSG_wind_file(char *argv[])
{
char *p;
p = WIN_file_chk(atoi(argv[0]),atoi(argv[1]));
macset(argv[2],p == NULL ? "":p);
return ( p == NULL ? ERR:FALSE);
}
int MSG_wind_secret(char *argv[])
{
int n;
n = WIN_secret_chk(atoi(argv[0]),atoi(argv[1]));
macvalset(argv[2],n);
return n;
}
int MSG_wind_wrt_chk(char *argv[])
{
int n;
n = WIN_write_chk(atoi(argv[0]),atoi(argv[1]));
macvalset(argv[2],n);
return n;
}
int date2day(int year,int month,int date)
{
int days;
if (month < 3) {
--year;
month += 13;
} else
++month;
days = (year * 0x16d4l) >> 4; /* 16d.4 -> 365.25 */
days += (month * 0x1e99al) >> 12; /* 1e.99a -> 30.6001 */
days += date;
return(days);
}
int MSG_date_day(char *argv[])
{
int y,m,d;
sscanf(argv[0],"%d/%d/%d",&y,&m,&d);
return date2day(y,m,d);
}
int MSG_super(char *argv[])
{
int i,n;
char *p;
char tmp[82];
if ( (p = *(argv++)) != NULL ) {
i = 0;
while ( *p != '\0' ) {
if ( *p == '\t' ) {
n = msg_tab - (i % msg_tab);
while ( n-- > 0 )
tmp[i++] = ' ';
p++;
} else
tmp[i++] = *(p++);
}
tmp[i] = '\0';
p = tmp;
}
DSP_super(p);
return FALSE;
}
int FIL_access(char *argv[])
{
FILE *fp;
if ( (fp = fopen(*argv,"r")) != NULL )
fclose(fp);
return (fp == NULL ? FALSE:TRUE);
}
int FIL_secret_chk(char *argv[])
{
return secret_chk(argv[0]);
}
int MSG_xmodem_up(char *argv[])
{
return XMODEM_upload(*argv);
}
int MSG_xmodem_down(char *argv[])
{
return XMODEM_download(*argv);
}
int MSG_file_up(char *argv[])
{
int fg = FALSE;
while ( fg == FALSE && *argv != NULL )
fg = FILE_upload(*(argv++));
return fg;
}
int MSG_memo(char *argv[])
{
MEMO_insrt(atoi(argv[0]),atoi(argv[1]));
return FALSE;
}
int MSG_memo_get(char *argv[])
{
macset(argv[0],MEMO_get_buf());
return FALSE;
}
int MSG_memo_set(char *argv[])
{
MEMO_set_word(argv[0]);
MEMO_chk();
return FALSE;
}
int MSG_wrtstr(char *argv[])
{
DSP_pause(atoi(argv[0]),atoi(argv[1]),
atoi(argv[2]),atoi(argv[3]),
argv[4]);
return FALSE;
}
int MSG_anime(char *argv[])
{
DSP_anime(argv[0]);
return FALSE;
}
int MSG_wild(char *argv[])
{
return patmatch(argv[0],argv[1]);
}
int MSG_talk_str(char *argv[])
{
while ( *argv != NULL )
TALK_str(*(argv++));
return FALSE;
}
int MSG_talk_new(char *argv[])
{
TALK_new(argv[0],argv[1]);
return FALSE;
}
int MSG_make_snd(char *argv[])
{
return SND_make(argv[0]);
}
int MSG_instr(char *argv[])
{
int n;
char *p,*s,*t;
t = argv[0]; n = 0;
while ( t[n] != '\0' ) {
p = &(t[n]);
s = argv[1];
while ( *s != '\0' && *(p++) == *(s++) );
if ( *s == '\0' )
return n;
n++;
}
return (-1);
}
int MSG_palcheng(char *argv[])
{
DSP_one_pal(atoi(argv[0]),
atoi(argv[1]),atoi(argv[2]),atoi(argv[3]));
return FALSE;
}
int MSG_down_load(char *argv[])
{
return WIN_down_start(argv[0]);
}
int MSG_rsb_set()
{
RSB_mode_set();
return FALSE;
}
int MSG_cut_word(char *argv[])
{
int i,n;
char *p;
char tmp[80];
i = atoi(argv[2]);
n = strlen(argv[1]);
if ( n < i )
i = n;
p = argv[1] + i;
n = atoi(argv[3]);
for ( i = 0 ; *p != '\0' && i < n ; i++ )
tmp[i] = *(p++);
tmp[i] = '\0';
macset(argv[0],tmp);
return n;
}
int MSG_error(char *argv[])
{
if ( argv[0] != NULL )
macvalset(argv[0],errno);
return errno;
}
int MSG_CD_vol_set(char *argv[])
{
CD_vol_set(atoi(*argv));
return FALSE;
}
int MSG_CD_play_no(char *argv[])
{
CD_play_no(atoi(*argv));
return FALSE;
}
int MSG_chdir(char *argv[])
{
char *p;
if ( (p = strrchr(*argv,'\\')) != NULL && *(p+1) == '\0' )
*p = '\0';
p = *argv;
if ( p[1] == ':' )
chdrv(toupper(p[0])-'A');
return chdir(p);
}
int MSG_getdir(char *argv[])
{
char tmp[128];
if ( getdir(tmp) != FALSE )
return ERR;
if ( *argv != NULL )
macset(*argv,tmp);
return FALSE;
}
int MSG_mkdir(char *argv[])
{
return mkdir(*argv);
}
int MSG_rmdir(char *argv[])
{
return rmdir(*argv);
}
int MSG_mem_file(char *argv[])
{
return mem_file(*argv);
}
int MSG_unmem_file(char *argv[])
{
unmem_file(*argv);
return FALSE;
}
int MSG_break_out(void)
{
RSB_break_out();
return FALSE;
}
int MSG_TANGO_set(void)
{
TANGO_set();
return FALSE;
}
int MSG_key_func(char *argv[])
{
return KEY_func_exec(*argv);
}
int MSG_exit(void)
{
top_event = 6; /* Looking "WHISPER.C" !! */
return FALSE;
}
int MSG_wind_gets(char *argv[])
{
char *p;
char tmp[84];
strcpy(tmp,WIN_get_line(atoi(argv[1]),atoi(argv[2])));
if ( (p = strchr(tmp,'\n')) != NULL )
*p = '\0';
macset(argv[0],tmp);
return FALSE;
}
int MSG_wind_upload(char *argv[])
{
WIN_upload(atoi(argv[0]));
return FALSE;
}
int MSG_wind_child(char *argv[])
{
CHILD_set(atoi(argv[0]),atoi(argv[1]));
return FALSE;
}
int MSG_run(char *str)
{
static brk_flg=FALSE;
int cd=0;
int i,n;
char *stack_bak;
char *p,*s;
char tmp[BUFSIZ];
char dmy[BUFSIZ];
char *argv[40];
static struct {
char *name;
int (*func)();
} func_tbl[]={
{ "access", FIL_access },
{ "add", MSG_add },
{ "anime", MSG_anime },
{ "bakcol", MSG_bakcol },
{ "break_out", MSG_break_out },
{ "cd_back", CD_back },
{ "cd_menu", CD_menu },
{ "cd_next", CD_next },
{ "cd_play", CD_play },
{ "cd_play_no", MSG_CD_play_no },
{ "cd_stop", CD_stop },
{ "cd_vol_down",CD_vol_down },
{ "cd_vol_set", MSG_CD_vol_set },
{ "cd_vol_up", CD_vol_up },
{ "cfg_load", MSG_ext_cfg },
{ "chdir", MSG_chdir },
{ "cmdsset", CMDS_init },
{ "color", MSG_color },
{ "command", MSG_command },
{ "complzss", FIL_complzss },
{ "copy", FIL_copy },
{ "copy_name", FIL_copy_name },
{ "cut_word", MSG_cut_word },
{ "date2day", MSG_date_day },
{ "delete", FIL_unlink },
{ "echo", MSG_echo },
{ "error", MSG_error },
{ "eup", MSG_eup },
{ "eupstop", END_eup },
{ "exit", MSG_exit },
{ "file_down", MSG_down_load },
{ "file_up", MSG_file_up },
{ "fsecret", FIL_secret_chk },
{ "gcls", DSP_pop_tiff },
{ "getdir", MSG_getdir },
{ "input", MSG_input },
{ "instr", MSG_instr },
{ "key_func", MSG_key_func },
{ "lincol", MSG_lincol },
{ "load", FIL_load },
{ "lock", KEY_lock },
{ "macset", MAC_init },
{ "make_snd", MSG_make_snd },
{ "memo", MSG_memo },
{ "memo_get", MSG_memo_get },
{ "memo_set", MSG_memo_set },
{ "mem_file", MSG_mem_file },
{ "merge", FIL_merge },
{ "mkdir", MSG_mkdir },
{ "mosget", MSG_mos },
{ "palcheng", MSG_palcheng },
{ "palette", PLT_set },
{ "pastr", MSG_wrtstr },
{ "rename", FIL_rename },
{ "rmdir", MSG_rmdir },
{ "rs_setup", MSG_rsb_set },
{ "save", MSG_wind_save },
{ "sleep", MSG_sleep },
{ "snd", MSG_snd },
{ "stmenu", MSG_menu_state },
{ "sub", MSG_sub },
{ "super", MSG_super },
{ "switch", MSG_switch },
{ "symenu", MSG_menu_syoko },
{ "system", MSG_system },
{ "tabset", TAB_set },
{ "talk_new", MSG_talk_new },
{ "talk_str", MSG_talk_str },
{ "tango", MSG_TANGO_set },
{ "tclose", TERM_close },
{ "tgetc", TERM_getc },
{ "tgets", TERM_gets },
{ "tiff", MSG_tiff },
{ "time", MSG_get_time },
{ "tmenu", MSG_menu_tate },
{ "topen", TERM_open },
{ "tpara", TERM_para },
{ "tputc", TERM_putc },
{ "tputs", TERM_puts },
{ "type", FIL_type },
{ "unlock", KEY_unlock },
{ "unmem_file", MSG_unmem_file },
{ "wait", MSG_wait },
{ "wchild", MSG_wind_child },
{ "wclose", MSG_close_wind },
{ "wfile", MSG_wind_file },
{ "wflush", MSG_wind_flush },
{ "wgets", MSG_wind_gets },
{ "wild", MSG_wild },
{ "wnewchk", MSG_wind_wrt_chk },
{ "wopen", MSG_open_wind },
{ "wputc", MSG_wind_putc },
{ "wputs", MSG_wind_puts },
{ "wsecret", MSG_wind_secret },
{ "wtype", MSG_wind_type },
{ "wupload", MSG_wind_upload },
{ "xmodem_down",MSG_xmodem_down },
{ "xmodem_up", MSG_xmodem_up },
{ "yes", MSG_yes },
{ "yesno", MSG_yesno },
{ NULL, MSG_echo }
};
brk_flg = FALSE;
while ( brk_flg == FALSE && *str != '\0' ) {
str = get_word(tmp,str);
if ( tmp[0] == '\0' ) {
str++;
continue;
}
if ( *str == '=' ) {
str = get_string(dmy,++str);
macset(tmp,dmy);
} else if ( *str == '+' ) {
p = macget(tmp);
strncpy(dmy,p,BUFSIZ-10); dmy[BUFSIZ-10] = '\0';
str = get_string(func_ptr,++str);
strncat(dmy,func_ptr,(BUFSIZ-2)-strlen(dmy));
dmy[BUFSIZ-2] = '\0';
macset(tmp,dmy);
} else if ( *str == '-' ) {
str = get_string(dmy,++str);
for ( p = dmy ; isspace(*p) ; p++ );
s = p;
while ( *p != '\0' && !isspace(*p) ) p++;
*p = '\0';
macset(tmp,s);
} else if ( strcmp(tmp,"if") == 0 ) {
str = cutpara(dmy,str);
if ( (p = cutcmds(str)) != NULL ) {
if ( (n = cmp_func(dmy)) != 0 ) {
*p = '\0';
cd = MSG_run(++str);
*p = '}';
}
str = p + 1;
for ( ; ; ) {
s = get_word(tmp,str);
if ( strcmp(tmp,"else") == 0 ) {
if ( (p = cutcmds(s)) != NULL ) {
if ( !n ) {
*p = '\0';
cd = MSG_run(++s);
*p = '}';
}
str = p + 1;
} else
str = s;
} else if ( strcmp(tmp,"elseif") == 0 ) {
s = cutpara(dmy,s);
if ( (p = cutcmds(s)) != NULL ) {
if ( !n && (n = cmp_func(dmy)) != 0 ) {
*p = '\0';
cd = MSG_run(++s);
*p = '}';
}
str = p + 1;
} else
str = s;
} else
break;
}
}
} else if ( strcmp(tmp,"while") == 0 ) {
str = cutpara(dmy,str);
if ( (p = cutcmds(str)) != NULL ) {
brk_flg = FALSE;
while ( brk_flg == FALSE && cmp_func(dmy) ) {
*p = '\0';
cd = MSG_run(str+1);
*p = '}';
}
str = p + 1;
if ( brk_flg != ERR )
brk_flg = FALSE;
}
} else if ( strcmp(tmp,"do") == 0 ) {
str = cutpara(dmy,str);
if ( (p = cutcmds(str)) != NULL ) {
brk_flg = FALSE;
do {
*p = '\0';
cd = MSG_run(str+1);
*p = '}';
} while ( brk_flg == FALSE && cmp_func(dmy) );
str = p + 1;
if ( brk_flg != ERR )
brk_flg = FALSE;
}
} else if ( strcmp(tmp,"return") == 0 ) {
str = cutpara(dmy,str);
get_string(tmp,dmy);
cd = atoi(tmp);
brk_flg = ERR;
break;
} else if ( strcmp(tmp,"break") == 0 ) {
brk_flg = TRUE;
break;
} else if ( strcmp(tmp,"shift") == 0 ) {
str = cutpara(dmy,str);
p = macget(dmy);
while ( isspace(*p) ) p++;
while ( *p != '\0' && !isspace(*p) ) p++;
while ( isspace(*p) ) p++;
strcpy(func_ptr,p);
macset(dmy,func_ptr);
} else if ( strcmp(tmp,"inc") == 0 ) {
str = cutpara(dmy,str);
n = atoi(macget(dmy))+1;
sprintf(tmp,"%d",n);
macset(dmy,tmp);
} else if ( strcmp(tmp,"dec") == 0 ) {
str = cutpara(dmy,str);
n = atoi(macget(dmy))-1;
sprintf(tmp,"%d",n);
macset(dmy,tmp);
} else {
if ( strcmp(tmp,func_tbl[40].name) >= 0 )
i = (strcmp(tmp,func_tbl[60].name) >= 0 ? 60:40);
else
i = (strcmp(tmp,func_tbl[20].name) >= 0 ? 20:0);
for ( ; func_tbl[i].name != NULL ; i++ ) {
if ( strcmp(tmp,func_tbl[i].name) == 0 ) {
str = cutpara(dmy,str);
p = dmy;
n = 0;
stack_bak = func_ptr;
while ( *p != '\0' ) {
p = get_string(func_ptr,p);
argv[n++] = func_ptr;
while ( func_ptr < &(func_buf[FUNC_MAX-2]) ) {
if ( *(func_ptr++) == '\0' )
break;
}
if ( *p == ',' ) p++;
}
argv[n] = NULL;
cd = (*(func_tbl[i].func))(argv);
func_ptr = stack_bak;
sprintf(tmp,"%d",cd);
macset("VAL",tmp);
break;
}
}
if ( func_tbl[i].name == NULL ) {
p = prcget(tmp);
str = cutpara(dmy,str);
get_string(tmp,dmy);
macset("PARA",tmp);
cd = MSG_run(p);
sprintf(tmp,"%d",cd);
macset("VAL",tmp);
brk_flg = FALSE;
}
}
}
return cd;
}