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