Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. MODULE drv;
  2.  
  3. IMPORT SYSTEM, API;
  4.  
  5. TYPE
  6.         ioctl_t = RECORD
  7.                 handle,
  8.                 io_code,
  9.                 input,
  10.                 inp_size,
  11.                 output,
  12.                 out_size: INTEGER
  13.         END;
  14.  
  15.  
  16. PROCEDURE [stdcall-, "core.dll", ""] RegService (name, adr: INTEGER): INTEGER;
  17.  
  18. PROCEDURE [stdcall] service_proc (my_ctl: ioctl_t): INTEGER;
  19. VAR
  20.         a, b, res: INTEGER;
  21. BEGIN
  22.         IF my_ctl.io_code = 0 THEN
  23.                 SYSTEM.GET(my_ctl.input, a);
  24.                 SYSTEM.GET(my_ctl.input + SYSTEM.SIZE(INTEGER), b);
  25.                 SYSTEM.PUT(my_ctl.output, a + b);
  26.                 res := 0
  27.         ELSE
  28.                 res := -1
  29.         END
  30.         RETURN res
  31. END service_proc;
  32.  
  33.  
  34. PROCEDURE [stdcall-] entry (action: INTEGER; cmdline: INTEGER): INTEGER;
  35. VAR
  36.         res: INTEGER;
  37. BEGIN
  38.         IF action = 1 THEN
  39.                 res := RegService(SYSTEM.SADR("test_drv"), SYSTEM.ADR(service_proc))
  40.         ELSE
  41.                 res := 0
  42.         END
  43.         RETURN res
  44. END entry;
  45.  
  46.  
  47. BEGIN
  48.         entry(API.action, API.cmdline);
  49.         SYSTEM.CODE(
  50.                 0C9H,  (*  leave  *)
  51.                 0C3H   (*  ret    *)
  52.                 )
  53. END drv.