コード例 #1
0
ファイル: modperl.cpp プロジェクト: IshaqAzmi/GKZNC
	virtual EModRet OnModuleLoading(const CString& sModName, const CString& sArgs,
			CModInfo::EModuleType eType, bool& bSuccess, CString& sRetMsg) {
		EModRet result = HALT;
		PSTART;
		PUSH_STR(sModName);
		PUSH_STR(sArgs);
		mXPUSHi(eType);
		PUSH_PTR(CUser*, GetUser());
		PUSH_PTR(CIRCNetwork*, GetNetwork());
		PCALL("ZNC::Core::LoadModule");

		if (SvTRUE(ERRSV)) {
			sRetMsg = PString(ERRSV);
			bSuccess = false;
			result = HALT;
			DEBUG("Perl ZNC::Core::LoadModule died: " << sRetMsg);
		} else if (ret < 1 || 2 < ret) {
			sRetMsg = "Error: Perl ZNC::Core::LoadModule returned " + CString(ret) + " values.";
			bSuccess = false;
			result = HALT;
		} else {
			ELoadPerlMod eLPM = static_cast<ELoadPerlMod>(SvUV(ST(0)));
			if (Perl_NotFound == eLPM) {
				result = CONTINUE; // Not a Perl module
			} else {
				sRetMsg = PString(ST(1));
				result = HALT;
				bSuccess = eLPM == Perl_Loaded;
			}
		}

		PEND;
		return result;
	}
コード例 #2
0
ファイル: modperl.cpp プロジェクト: stevestreza/ZNC-Node
void CPerlSocket::ReadData(const char *data, size_t len) {
	CPerlModule* pMod = AsPerlModule(GetModule());
	if (pMod) {
		SOCKSTART;
		PUSH_STR("OnReadData");
		XPUSHs(sv_2mortal(newSVpvn(data, len)));
		mXPUSHi(len);
		SOCKCBCHECK();
	}
}
コード例 #3
0
ファイル: modperl.cpp プロジェクト: stevestreza/ZNC-Node
Csock* CPerlSocket::GetSockObj(const CString& sHost, unsigned short uPort) {
	CPerlModule* pMod = AsPerlModule(GetModule());
	Csock* result = NULL;
	if (pMod) {
		SOCKSTART;
		PUSH_STR("_Accepted");
		PUSH_STR(sHost);
		mXPUSHi(uPort);
		SOCKCBCHECK(
				result = SvToPtr<CPerlSocket>("CPerlSocket*")(ST(0));
		);
	}
コード例 #4
0
void tmh_cb_doc_footer(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "doc_footer", 0);

    if (!rcb) { return; }

    CB_HEADER("doc_footer");

    mXPUSHi(inline_render);

    CB_FOOTER;

}
コード例 #5
0
void tmh_cb_listitem(hoedown_buffer *ob, const hoedown_buffer *text, hoedown_list_flags flags, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "listitem", 0);

    if (!rcb) { return; }

    CB_HEADER("listitem");

        PUSHBUF(text);

        mXPUSHi(flags);

    CB_FOOTER;

}
コード例 #6
0
void tmh_cb_header(hoedown_buffer *ob, const hoedown_buffer *text, int level, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "header", 0);

    if (!rcb) { return; }

    CB_HEADER("header");

        PUSHBUF(text);

        mXPUSHi(level);

    CB_FOOTER;

}
コード例 #7
0
void tmh_cb_table_cell(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_table_flags flags, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "table_cell", 0);

    if (!rcb) { return; }

    CB_HEADER("table_cell");

        PUSHBUF(content);

        mXPUSHi(flags);

    CB_FOOTER;

}
コード例 #8
0
int tmh_cb_math(hoedown_buffer *ob, const hoedown_buffer *text, int displaymode, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "math", 0);

    if (!rcb) { return 0; }

    CB_HEADER("math");

        PUSHBUF(text);

        mXPUSHi(displaymode);

    CB_FOOTER;

    return is_null ? 0 : 1;

}
コード例 #9
0
int tmh_cb_autolink(hoedown_buffer *ob, const hoedown_buffer *link, hoedown_autolink_type type, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "autolink", 0);

    if (!rcb) { return 0; }

    CB_HEADER("autolink");

        PUSHBUF(link);

        mXPUSHi(type);

    CB_FOOTER;

    return is_null ? 0 : 1;

}