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.