1{% extends "base/wrap.c.j2" %}
2{% block headers %}
3#include <sys/syscall.h>
4#include <unistd.h>
5#include <string.h>
6#include <stdio.h>
7{{ super() }}
8
9{% endblock %}
10
11{% block main %}
12{{ super() }}
13
14snd_config_t *snd_config = NULL;
15
16__GLXextFuncPtr glXGetProcAddressARB(const GLubyte *name) {
17    {% for func in functions %}
18    {% if not func.name.startswith('snd_') %}
19    if (strcmp(name, "{{ func.name }}") == 0) {
20        return (void *){{ func.name }};
21    }
22    {% endif %}
23    {% endfor %}
24    printf("glXGetProcAddress(%s) not found\n", name);
25    return NULL;
26}
27
28__GLXextFuncPtr glXGetProcAddress(const GLubyte *name) {
29    return glXGetProcAddressARB(name);
30}
31{% endblock %}
32
33{% block definition %}
34#if !defined(skip_client_{{ func.name }}) && !defined(skip_index_{{ func.name }})
35{{ super() -}}
36#endif
37{% endblock %}
38
39{% block call %}
40    {{ func.name }}_INDEXED packed_data;
41    packed_data.func = {{ func.name }}_INDEX;
42    {% for arg in func.args %}
43    packed_data.args.a{{ loop.index }} = ({{ arg.type|unconst }}){{ arg.name }};
44    {% endfor %}
45    {% if not func.void %}
46    {{ func.return }} ret;
47    syscall(SYS_proxy, (void *)&packed_data, &ret);
48    return ret;
49    {% else %}
50    syscall(SYS_proxy, (void *)&packed_data, NULL);
51    {% endif %}
52{% endblock %}
53