API.ob07 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. (*
  2. BSD 2-Clause License
  3. Copyright (c) 2023, Anton Krotov
  4. All rights reserved.
  5. *)
  6. MODULE API;
  7. IMPORT SYSTEM;
  8. CONST
  9. eol* = 0DX + 0AX;
  10. BIT_DEPTH* = 32;
  11. VAR
  12. action*, cmdline*, org*: INTEGER;
  13. PROCEDURE [stdcall-] sysfunc3* (arg1, arg2, arg3: INTEGER): INTEGER;
  14. BEGIN
  15. SYSTEM.CODE(
  16. 053H, (* push ebx *)
  17. 08BH, 045H, 008H, (* mov eax, dword [ebp + 8] *)
  18. 08BH, 05DH, 00CH, (* mov ebx, dword [ebp + 12] *)
  19. 08BH, 04DH, 010H, (* mov ecx, dword [ebp + 16] *)
  20. 0CDH, 040H, (* int 64 *)
  21. 05BH, (* pop ebx *)
  22. 0C9H, (* leave *)
  23. 0C2H, 00CH, 000H (* ret 12 *)
  24. )
  25. RETURN 0
  26. END sysfunc3;
  27. PROCEDURE OutChar* (c: CHAR);
  28. BEGIN
  29. sysfunc3(63, 1, ORD(c))
  30. END OutChar;
  31. PROCEDURE OutLn*;
  32. BEGIN
  33. OutChar(0DX);
  34. OutChar(0AX)
  35. END OutLn;
  36. PROCEDURE OutStr (pchar: INTEGER);
  37. VAR
  38. c: CHAR;
  39. BEGIN
  40. IF pchar # 0 THEN
  41. REPEAT
  42. SYSTEM.GET(pchar, c);
  43. IF c # 0X THEN
  44. OutChar(c)
  45. END;
  46. INC(pchar)
  47. UNTIL c = 0X
  48. END
  49. END OutStr;
  50. PROCEDURE DebugMsg* (lpText, lpCaption: INTEGER);
  51. BEGIN
  52. IF lpCaption # 0 THEN
  53. OutLn;
  54. OutStr(lpCaption);
  55. OutChar(":");
  56. OutLn
  57. END;
  58. OutStr(lpText);
  59. IF lpCaption # 0 THEN
  60. OutLn
  61. END
  62. END DebugMsg;
  63. PROCEDURE _NEW* (size: INTEGER): INTEGER;
  64. RETURN sysfunc3(68, 12, size)
  65. END _NEW;
  66. PROCEDURE _DISPOSE* (ptr: INTEGER): INTEGER;
  67. BEGIN
  68. sysfunc3(68, 13, ptr)
  69. RETURN 0
  70. END _DISPOSE;
  71. PROCEDURE init* (reserved, _org: INTEGER);
  72. BEGIN
  73. org := _org - 4096;
  74. sysfunc3(68, 11, 0)
  75. END init;
  76. PROCEDURE exit* (code: INTEGER);
  77. BEGIN
  78. sysfunc3(-1, 0, 0)
  79. END exit;
  80. PROCEDURE exit_thread* (code: INTEGER);
  81. BEGIN
  82. sysfunc3(-1, 0, 0)
  83. END exit_thread;
  84. PROCEDURE dllentry* (hinstDLL, fdwReason, lpvReserved: INTEGER): INTEGER;
  85. BEGIN
  86. action := hinstDLL;
  87. cmdline := fdwReason
  88. RETURN hinstDLL
  89. END dllentry;
  90. PROCEDURE sofinit*;
  91. END sofinit;
  92. END API.