summary refs log tree commit diff stats
path: root/lib/genode_cpp/signals.h
blob: fa3975d386c593b2d5daec200a42b3d8adbfd602 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
 *
 *           Nim's Runtime Library
 *       (c) Copyright 2022 Emery Hemingway
 *
 *   See the file "copying.txt", included in this
 *   distribution, for details about the copyright.
 *
 */

#ifndef _NIM_SIGNALS_H_
#define _NIM_SIGNALS_H_

#include <libc/component.h>
#include <base/signal.h>
#include <util/reconstructible.h>

// Symbol for calling back into Nim
extern "C" void nimHandleSignal(void *arg);

namespace Nim { struct SignalHandler; }

struct Nim::SignalHandler
{
	// Pointer to the Nim handler object.
	void *arg;

	void handle_signal() {
		Libc::with_libc([this] () { nimHandleSignal(arg); }); }

	Genode::Signal_handler<SignalHandler> handler;

	SignalHandler(Genode::Entrypoint *ep, void *arg)
	: arg(arg), handler(*ep, *this, &SignalHandler::handle_signal) { }

	Genode::Signal_context_capability cap() { return handler; }
};

#endif
ass="cm"> */ #ifndef STRUCTDUMP_H #define STRUCTDUMP_H /* usage: DUMPSTRUCT_LINK(link_ptr, "message"); */ #define DUMPSTRUCT_LINK(L,X) \ if ((L)) { \ CTRACE((tfp, "\n" \ "KED: link_ptr=%p sizeof=%d ["X"]\n" \ "link struct {\n" \ " *lname=%p\n" \ " lname=|%s|\n" \ " *target=%p\n" \ " target=|%s|\n" \ " *hightext=%p\n" \ " hightext=|%s|\n" \ " *hightext2=%p\n" \ " hightext2=|%s|\n" \ " hightext2_offset=%d\n" \ " inUnderline=%1x\n" \ " lx=%d\n" \ " ly=%d\n" \ " type=%d\n" \ " anchor_number=%d\n" \ " anchor_line_num=%d\n" \ " *form=%p\n" \ "}\n", \ (L), sizeof(*((L))), \ (L)->lname, (L)->lname, (L)->target, (L)->target, \ (L)->l_hightext, (L)->l_hightext, \ (L)->l_hightext2, (L)->l_hightext2, \ (L)->l_hightext2_offset, \ (L)->inUnderline, (L)->lx, (L)->ly, \ (L)->type, (L)->anchor_number, (L)->anchor_line_num, (L)->form)); \ }else{ \ CTRACE((tfp, "\n" \ "KED: link_ptr=0x00000000 (NULL) ["X"]\n")); \ } \ CTRACE_FLUSH(tfp); /* usage: DUMPSTRUCT_ANCHOR(anchor_ptr, "message"); */ #define DUMPSTRUCT_ANCHOR(A,X) \ if ((A)) { \ CTRACE((tfp, "\n" \ "KED: anchor_ptr=%p sizeof=%d ["X"]\n" \ "TextAnchor struct {\n" \ " *next=%p\n" \ " number=%d\n" \ " line_pos=%d\n" \ " extent=%d\n" \ " line_num=%d\n" \ " *hightext=%p\n" \ " hightext=|%s|\n" \ " *hightext2=%p\n" \ " hightext2=|%s|\n" \ " hightext2offset=%d\n" \ " link_type=%d\n" \ " *input_field=%p\n" \ " input_field=|%s|\n" \ " show_anchor=%1x\n" \ " inUnderline=%1x\n" \ " expansion_anch=%1x\n" \ " *anchor=%p\n" \ "}\n", \ (A), sizeof(*((A))), \ (A)->next, (A)->number, (A)->line_pos, \ (A)->extent, (A)->line_num, \ (A)->hightext, (A)->hightext, (A)->hightext2, (A)->hightext2, \ (A)->hightext2offset, (A)->link_type, \ (A)->input_field, (A)->input_field->name, (A)->show_anchor, \ (A)->inUnderline, (A)->expansion_anch, (A)->anchor)); \ }else{ \ CTRACE((tfp, "\n" \ "KED: anchor_ptr=0x00000000 (NULL) ["X"]\n")); \ } \ CTRACE_FLUSH(tfp); /* usage: DUMPSTRUCT_FORM(forminfo_ptr, "message"); */ #define DUMPSTRUCT_FORMINFO(F,X) \ if ((F)) { \ CTRACE((tfp, "\n" \ "KED: forminfo_ptr=%p sizeof=%d ["X"]\n" \ "FormInfo struct {\n" \ " *name=%p\n" \ " name=|%s|\n" \ " number=%d\n" \ " type=%d\n" \ " *value=%p\n" \ " value=|%s|\n" \ " *orig_value=%p\n" \ " orig_value=|%s|\n" \ " size=%d\n" \ " maxlength=%d\n" \ " group=%d\n" \ " num_value=%d\n" \ " hrange=%d\n" \ " lrange=%d\n" \ " *select_list=%p\n" \ " submit_action=|%s|\n" \ " submit_method=%d\n" \ " submit_enctype=|%s|\n" \ " submit_title=|%s|\n" \ " no_cache=%1x\n" \ " cp_submit_value=|%s|\n" \ "orig_submit_value=|%s|\n" \ " size_l=%d\n" \ " disabled=%d\n" \ " readonly=%d\n" \ " name_cs=%d\n" \ " value_cs=%d\n" \ " accept_cs=|%s|\n" \ "}\n", \ (F), sizeof(*((F))), \ (F)->name, (F)->name, (F)->number, (F)->type, \ (F)->value, (F)->value, (F)->orig_value, (F)->orig_value, \ (F)->size, (F)->maxlength, (F)->group, (F)->num_value, \ (F)->hrange, (F)->lrange, (F)->select_list, (F)->submit_action, \ (F)->submit_method, (F)->submit_enctype, (F)->submit_title, \ (F)->no_cache, (F)->cp_submit_value, (F)->orig_submit_value, \ (F)->size_l, (F)->disabled, (F)->readonly, (F)->name_cs, (F)->value_cs, \ (F)->accept_cs)); \ } else { \ CTRACE((tfp, "\n" \ "KED: forminfo_ptr=0x00000000 (NULL) ["X"]\n")); \ } \ CTRACE_FLUSH(tfp); /* usage: DUMPSTRUCT_LINE(htline_ptr, "message"); */ #define DUMPSTRUCT_LINE(L,X) \ if ((L)) { \ CTRACE((tfp, "\n" \ "KED: htline_ptr=%p sizeof=%d ["X"]\n" \ "HTLine struct {\n" \ " *next=%p\n" \ " *prev=%p\n" \ " offset=%d\n" \ " size=%d\n" \ " split_after=%1x\n" \ " bullet=%1x\n" \ "expansion_line=%1x\n" \ "w/o U_C_S def\n" \ " data[]=%p\n" \ " data=|%s|\n" \ "}\n", \ (L), sizeof(*((L))), \ (L)->next, (L)->prev, (L)->offset, (L)->size, (L)->split_after, \ (L)->bullet, (L)->expansion_line, (L)->data, (L)->data)); \ }else{ \ CTRACE((tfp, "\n" \ "KED: htline_ptr=0x00000000 (NULL) ["X"]\n")); \ } \ CTRACE_FLUSH(tfp); #endif /* STRUCTDUMP_H */