gtdev-apphdr.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #define OO_APP_MAGIC (377180989U)
  2. #define OO_HANDLE (0xFF000000u)
  3. #define OO_SYSTEM_FRAME OO_HANDLE
  4. #define MAKE_OO_HANDLE(h) ((h) | OO_HANDLE)
  5. #define OO_GET_HANDLE(h) ((h) & ~OO_HANDLE)
  6. #define IS_OO_HANDLE(h) ((h) > OO_HANDLE)
  7. typedef enum {OO_RW=0, OO_RO=1,
  8. OO_SEQ=0, OO_KEYED=2} OO_Flags;
  9. typedef struct
  10. {
  11. ULONG key;
  12. void *value;
  13. } OO_Attr;
  14. #define pFrame _pFrameX
  15. typedef ULONG pFrame;
  16. typedef int AppID;
  17. typedef struct SFrameHdr
  18. {
  19. pFrame parent;
  20. pFrame prototype;
  21. OO_Flags flags;
  22. ULONG first;
  23. ULONG count;
  24. } OO_Hdr;
  25. typedef struct SFrame
  26. {
  27. OO_Hdr head;
  28. union
  29. {
  30. void *value[65000];
  31. OO_Attr pair[65000];
  32. } attr;
  33. } Frame;
  34. typedef void (* const OO_MethodPtr)(void);
  35. #define STRING_FRAME(name, parent, proto, first, count) \
  36. const OO_Hdr name = \
  37. { \
  38. (pFrame)parent, \
  39. (pFrame)proto, \
  40. OO_RO | OO_SEQ, \
  41. first, \
  42. count \
  43. }; \
  44. static const char * const name##Attr[count] = \
  45. {
  46. #define FRAME(name, parent, proto, first, count) \
  47. const OO_Hdr name = \
  48. { \
  49. (pFrame)parent, \
  50. (pFrame)proto, \
  51. OO_RO | OO_KEYED, \
  52. first, \
  53. count \
  54. }; \
  55. static const OO_Attr name##Attr[count] = \
  56. {
  57. #define ATTR(selector, val) {selector, (void *)(val)},
  58. #define STRING_ATTR(sel, s) {OO_FIRST_STRING+(sel), s},
  59. #define ENDFRAME };
  60. #define MAX_APPLET_NAME_SIZE (8)
  61. typedef struct SAppHdr
  62. {
  63. ULONG magic;
  64. UCHAR name[MAX_APPLET_NAME_SIZE];
  65. BYTE zeros[24];
  66. USHORT flags;
  67. ULONG dataLen;
  68. ULONG codeOffset;
  69. ULONG initDataOffset;
  70. ULONG initDataLen;
  71. ULONG optlen;
  72. } AppHdr;
  73. typedef enum {APPHDR_LOCALIZER=0x0001} APPHDR_FLAGS;
  74. typedef void (* APP_EXT_FUNC)(void);
  75. typedef struct SAppExtension
  76. {
  77. unsigned long name;
  78. unsigned long help;
  79. unsigned short index;
  80. } APP_EXTENSION;
  81. typedef struct SAppExtEntry
  82. {
  83. APP_EXT_FUNC extension;
  84. unsigned short flags;
  85. } APP_EXT_ENTRY;
  86. enum {APP_EXT_PROGRAM=0x0000, APP_EXT_FUNCTION=0x0001};
  87. typedef enum
  88. {
  89. ACB_BUILTIN =0x0001,
  90. ACB_INSTALLED =0x0002,
  91. ACB_LOCALIZER =0x0004,
  92. ACB_LOCK =0x0008,
  93. ACB_JT_VERSION=0x0010,
  94. ACB_SELECTED =0x0020,
  95. ACB_COLLAPSE =0x0800,
  96. ACB_BG =0x1000,
  97. ACB_COMPRESS =0x4000,
  98. ACB_DELETE =0x8000
  99. } ACB_Flags;
  100. typedef struct SACB
  101. {
  102. USHORT flags;
  103. AppID myID;
  104. AppID next;
  105. AppID prev;
  106. ULONG publicstorage;
  107. AppHdr const *appHeader;
  108. BYTE const *certhdr;
  109. pFrame appData;
  110. } ACB;
  111. #define MY_ACB(p) ((ACB*)((BYTE*)&(p)-OFFSETOF(ACB,appData)))
  112. #define MY_APP_ID(p) (MY_ACB(p)->myID)
  113. #define OO_FIRST_STRING 2048
  114. #define OO_FIRST_APP_STRING 2048
  115. #define OO_APPSTRING (OO_FIRST_STRING+OO_FIRST_APP_STRING)
  116. #define OO_FIRST_APP_ATTR 0x10000
  117. typedef enum {APP_NONE=0,
  118. APP_INTERACTIVE=1,
  119. APP_CON=2,
  120. APP_ACCESS_SYSVARS=4,
  121. APP_BACKGROUND=8}
  122. APP_Flags;