カスタマイズ‎ > ‎SDS‎ > ‎ADSの移植‎ > ‎

ads_main.cpp

#include <stdafx.h>
#include "adslib.h"

#define ARRAYELEMENTS(array) (sizeof(array)/sizeof((array)[0]))

extern int Test1();
extern int Test2();

static struct func_entry func_table[] = {
    { "test1", Test1 },
    { "test2", Test2 },
};

static int
funcload()
{
    int i;
    for (i=0; i<ARRAYELEMENTS(func_table); i++)
        if (!ads_defun(func_table[i].func_name, i))
            return RTERROR;
    return RTNORM;
}

static int
invokefun()
{
    int val;
    val = ads_getfuncode();
    if ((val<0) || (val>=ARRAYELEMENTS(func_table)))
        return 0;

    return (*func_table[val].func)();
}

void main( int argc, char** argv )
{
    short scode = RSRSLT;
    ads_init(argc, argv);

    for ( ;; )
    {
        int stat;
        char errmsg[128];

        if ((stat = ads_link(scode)) < 0)
        {
            sprintf(errmsg, "TEMPLATE: bad status from ads_link() = %d\n", stat);
            ads_printf(errmsg);
            ads_exit(-1);
            break;
        }

        scode = RSRSLT;
        switch (stat)
        {
            case RQXLOAD:
                scode = funcload() == RTNORM ? RSRSLT : RSERR;
                break;
            case RQSUBR:
                scode = invokefun() == RTNORM ? RSRSLT : RSERR;
                break;
            case RQXUNLD:
            case RQSAVE:
            case RQEND:
            case RQQUIT:
            default:
                break;
        }
    }
}