};
static int fd = -1;
-static scm_bits_t resptype;
+static scm_t_bits resptype;
-static SCM scm_dc_connect(SCM host, SCM port)
+static SCM scm_dc_connect(SCM host)
{
- int cport;
+ char *chost;
- SCM_ASSERT(SCM_STRINGP(host), host, SCM_ARG1, "dc-connect");
- if(port == SCM_UNDEFINED)
+ if(fd >= 0)
+ dc_disconnect();
+ if((host == SCM_UNDEFINED) || (host == SCM_BOOL_F))
{
- cport = -1;
+ chost = NULL;
} else {
- SCM_ASSERT(SCM_INUMP(port), port, SCM_ARG2, "dc-connect");
- cport = SCM_INUM(port);
+ SCM_ASSERT(SCM_STRINGP(host), host, SCM_ARG1, "dc-connect");
+ chost = SCM_STRING_CHARS(host);
}
- if(fd >= 0)
- dc_disconnect();
- if((fd = dc_connect(SCM_STRING_CHARS(host), cport)) < 0)
+ if((fd = dc_connect(chost)) < 0)
scm_syserror("dc-connect");
return(SCM_MAKINUM(fd));
}
addtobuf(toks, NULL);
if(callback == SCM_UNDEFINED)
{
- tag = dc_queuecmd(NULL, NULL, cmd, L"%%a", toks, NULL);
+ tag = dc_queuecmd(NULL, NULL, cmd, L"%a", toks, NULL);
} else {
scmcb = scm_must_malloc(sizeof(*scmcb), "scmcb");
scm_gc_protect_object(scmcb->subr = callback);
- tag = dc_queuecmd(qcmd_scmcb, scmcb, cmd, L"%%a", toks, NULL);
+ tag = dc_queuecmd(qcmd_scmcb, scmcb, cmd, L"%a", toks, NULL);
}
dc_freewcsarr(toks);
if(cmd != NULL)
return(scm_reverse(ret));
}
+static SCM scm_dc_checkproto(SCM resp, SCM version)
+{
+ int ver;
+
+ SCM_ASSERT(SCM_SMOB_PREDICATE(resptype, resp), resp, SCM_ARG1, "dc-checkproto");
+ if(version == SCM_UNDEFINED)
+ {
+ ver = DC_LATEST;
+ } else {
+ SCM_ASSERT(SCM_INUMP(version), version, SCM_ARG2, "dc-checkproto");
+ ver = SCM_INUM(version);
+ }
+ if(dc_checkprotocol(((struct respsmob *)SCM_SMOB_DATA(resp))->resp, ver))
+ return(SCM_BOOL_F);
+ else
+ return(SCM_BOOL_T);
+}
+
static size_t resp_free(SCM respsmob)
{
struct respsmob *data;
void init_guiledc(void)
{
- scm_c_define_gsubr("dc-connect", 1, 1, 0, scm_dc_connect);
+ scm_c_define_gsubr("dc-connect", 0, 1, 0, scm_dc_connect);
scm_c_define_gsubr("dc-disconnect", 0, 0, 0, scm_dc_disconnect);
scm_c_define_gsubr("dc-connected", 0, 0, 0, scm_dc_connected);
scm_c_define_gsubr("dc-select", 0, 1, 0, scm_dc_select);
scm_c_define_gsubr("dc-qcmd", 1, 1, 0, scm_dc_qcmd);
scm_c_define_gsubr("dc-loginasync", 2, 1, 0, scm_dc_loginasync);
scm_c_define_gsubr("dc-lexsexpr", 1, 0, 0, scm_dc_lexsexpr);
+ scm_c_define_gsubr("dc-checkproto", 1, 1, 0, scm_dc_checkproto);
+ scm_c_define("dc-latest", SCM_MAKINUM(DC_LATEST));
resptype = scm_make_smob_type("dc-resp", sizeof(struct respsmob));
scm_set_smob_free(resptype, resp_free);
scm_set_smob_print(resptype, resp_print);