forked from KolibriOS/kolibrios
53 lines
923 B
Plaintext
53 lines
923 B
Plaintext
|
MODULE drv;
|
||
|
|
||
|
IMPORT SYSTEM, API;
|
||
|
|
||
|
TYPE
|
||
|
ioctl_t = RECORD
|
||
|
handle,
|
||
|
io_code,
|
||
|
input,
|
||
|
inp_size,
|
||
|
output,
|
||
|
out_size: INTEGER
|
||
|
END;
|
||
|
|
||
|
|
||
|
PROCEDURE [stdcall-, "core.dll", ""] RegService (name, adr: INTEGER): INTEGER;
|
||
|
|
||
|
PROCEDURE [stdcall] service_proc (my_ctl: ioctl_t): INTEGER;
|
||
|
VAR
|
||
|
a, b, res: INTEGER;
|
||
|
BEGIN
|
||
|
IF my_ctl.io_code = 0 THEN
|
||
|
SYSTEM.GET(my_ctl.input, a);
|
||
|
SYSTEM.GET(my_ctl.input + SYSTEM.SIZE(INTEGER), b);
|
||
|
SYSTEM.PUT(my_ctl.output, a + b);
|
||
|
res := 0
|
||
|
ELSE
|
||
|
res := -1
|
||
|
END
|
||
|
RETURN res
|
||
|
END service_proc;
|
||
|
|
||
|
|
||
|
PROCEDURE [stdcall-] entry (action: INTEGER; cmdline: INTEGER): INTEGER;
|
||
|
VAR
|
||
|
res: INTEGER;
|
||
|
BEGIN
|
||
|
IF action = 1 THEN
|
||
|
res := RegService(SYSTEM.SADR("test_drv"), SYSTEM.ADR(service_proc))
|
||
|
ELSE
|
||
|
res := 0
|
||
|
END
|
||
|
RETURN res
|
||
|
END entry;
|
||
|
|
||
|
|
||
|
BEGIN
|
||
|
entry(API.action, API.cmdline);
|
||
|
SYSTEM.CODE(
|
||
|
0C9H, (* leave *)
|
||
|
0C3H (* ret *)
|
||
|
)
|
||
|
END drv.
|