1 #include <stdio.h>
2 #include "erl_driver.h"
3
4 static ErlDrvPort erlang_port;
5 static ErlDrvData outputv_start(ErlDrvPort, char*);
6 static void outputv_stop(ErlDrvData),
7 outputv_read(ErlDrvData, char*, ErlDrvSizeT),
8 outputv(ErlDrvData, ErlIOVec*);
9
10 static ErlDrvEntry outputv_driver_entry =
11 {
12 NULL,
13 outputv_start,
14 outputv_stop,
15 outputv_read,
16 NULL,
17 NULL,
18 "outputv_drv",
19 NULL,
20 NULL,
21 NULL,
22 NULL,
23 outputv,
24 NULL,
25 NULL,
26 NULL,
27 NULL,
28 ERL_DRV_EXTENDED_MARKER,
29 ERL_DRV_EXTENDED_MAJOR_VERSION,
30 ERL_DRV_EXTENDED_MINOR_VERSION,
31 0,
32 NULL,
33 NULL,
34 NULL
35 };
36
DRIVER_INIT(outputv_drv)37 DRIVER_INIT(outputv_drv)
38 {
39 erlang_port = (ErlDrvPort)-1;
40 return &outputv_driver_entry;
41 }
42
outputv_start(ErlDrvPort port,char * buf)43 static ErlDrvData outputv_start(ErlDrvPort port, char *buf)
44 {
45 if (erlang_port != (ErlDrvPort)-1) {
46 return ERL_DRV_ERROR_GENERAL;
47 }
48
49 erlang_port = port;
50 return (ErlDrvData)port;
51 }
52
outputv_read(ErlDrvData port,char * buf,ErlDrvSizeT count)53 static void outputv_read(ErlDrvData port, char *buf, ErlDrvSizeT count)
54 {
55 erlang_port = (ErlDrvPort)-1;
56 }
57
outputv_stop(ErlDrvData port)58 static void outputv_stop(ErlDrvData port)
59 {
60 erlang_port = (ErlDrvPort)-1;
61 }
62
63 /* Erts outputv -> drv, echo it back */
outputv(ErlDrvData port,ErlIOVec * ev)64 static void outputv(ErlDrvData port, ErlIOVec* ev)
65 {
66 driver_outputv(erlang_port, NULL, 0, ev, 0);
67 }
68
69
70
71
72
73
74
75
76