lwpanel.h 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. /*
  2. * LWSDK Header File: Panel Services
  3. * Copyright 1999 NewTek, Inc.
  4. */
  5. #ifndef LWPANEL_H
  6. #define LWPANEL_H
  7. #include <lwserver.h>
  8. #include <lwxpanel.h>
  9. #define PANEL_SERVICES_NAME "LWPanelServices"
  10. #define LWPANELFUNCS_GLOBAL "LWPanelServices"
  11. #define LWRASTERFUNCS_GLOBAL "RasterServices"
  12. #define LWCONTEXTMENU_GLOBAL "ContextMenuServices"
  13. #define LWPANELS_API_VERSION 19
  14. typedef void *LWControlID;
  15. typedef void *LWPanelID;
  16. typedef void *LWContextMenuID;
  17. typedef unsigned short LWDualKey;
  18. typedef struct st_display_Metrics {
  19. int width, height;
  20. int pixX, pixY;
  21. int maxColors, depth;
  22. int textHeight;
  23. int textAscent;
  24. } display_Metrics;
  25. #define LWDisplayMetrics display_Metrics
  26. /* Values are exchanged with controls by means of these wrappers */
  27. typedef int LWType;
  28. #define LWT_NULL 0
  29. #define LWT_STRING 1
  30. #define LWT_INTEGER 2
  31. #define LWT_FLOAT 3
  32. #define LWT_DISTANCE 4
  33. #define LWT_VINT 5
  34. #define LWT_VFLOAT 6
  35. #define LWT_VDIST 7
  36. #define LWT_BOOLEAN 8
  37. #define LWT_CHOICE 9
  38. #define LWT_SURFACE 10
  39. #define LWT_FONT 11
  40. #define LWT_TEXT 12
  41. #define LWT_LAYERS 13
  42. #define LWT_CUSTOM 14
  43. #define LWT_RANGE 15
  44. #define LWT_LWITEM 16
  45. #define LWT_PERCENT 17
  46. #define LWT_POPUP 18
  47. #define LWT_AREA 19
  48. #define LWT_XPANEL 20
  49. #define LWT_TREE 21
  50. #define LWT_MLIST 22
  51. #define LWT__LAST LWT_MLIST
  52. typedef struct st_LWValString {
  53. LWType type;
  54. char *buf;
  55. int bufLen;
  56. } LWValString;
  57. typedef struct st_LWValInt {
  58. LWType type;
  59. int value;
  60. int defVal;
  61. } LWValInt;
  62. typedef struct st_LWValFloat {
  63. LWType type;
  64. double value;
  65. double defVal;
  66. } LWValFloat;
  67. typedef struct st_LWValIVector {
  68. LWType type;
  69. int val[3];
  70. int defVal;
  71. } LWValIVector;
  72. typedef struct st_LWValFVector {
  73. LWType type;
  74. double val[3];
  75. double defVal;
  76. } LWValFVector;
  77. typedef struct st_LWValCustom {
  78. LWType type;
  79. int val[4];
  80. } LWValCustom;
  81. typedef struct st_LWValPointer {
  82. LWType type;
  83. void *ptr;
  84. } LWValPointer;
  85. typedef struct st_LWPanStringDesc {
  86. LWType type;
  87. int width;
  88. } LWPanStringDesc;
  89. typedef struct st_LWPanChoiceDesc {
  90. LWType type;
  91. const char **items;
  92. int vertical;
  93. } LWPanChoiceDesc;
  94. typedef struct st_LWPanTextDesc {
  95. LWType type;
  96. const char **text;
  97. } LWPanTextDesc;
  98. typedef struct st_LWPanRangeDesc {
  99. LWType type;
  100. int width;
  101. int min;
  102. int max;
  103. } LWPanRangeDesc;
  104. typedef struct st_LWPanAreaDesc {
  105. LWType type;
  106. int width;
  107. int height;
  108. } LWPanAreaDesc;
  109. typedef struct st_LWPanLWItemDesc {
  110. LWType type;
  111. void *global;
  112. int itemType;
  113. char **list;
  114. int count;
  115. int width;
  116. } LWPanLWItemDesc;
  117. typedef struct st_LWPanPopupDesc {
  118. LWType type;
  119. int width;
  120. int (*countFn)(void *);
  121. char *(*nameFn)(void *, int);
  122. } LWPanPopupDesc;
  123. typedef struct st_LWPanListBoxDesc {
  124. LWType type;
  125. int width,visItems, top; // width in pixels, height in items, top visible item
  126. int (*countFn)(void *);
  127. char *(*nameFn)(void *, int);
  128. } LWPanListBoxDesc;
  129. typedef struct st_LWPanMultiListBoxDesc {
  130. LWType type;
  131. int width,visItems, top; // width in pixels, height in items, top visible item
  132. int (*countFn)(void *);
  133. char *(*nameFn)(void *, int, int); // item, column
  134. int (*colWidth)(void *, int i); // pixel width of column i, up to 8 columns terminate with 0
  135. } LWPanMultiListBoxDesc;
  136. typedef struct st_LWPanXPanDesc {
  137. LWType type;
  138. int width, height;
  139. void *xpan;
  140. } LWPanXPanDesc;
  141. typedef struct st_LWPanTreeDesc {
  142. LWType type;
  143. int width, height;
  144. int (*countFn)(void *data, void *node); /* return number of leafs under given node, NULL node is root */
  145. void *(*leafFn)(void *data, void *node, int i); /* return leaf i of node, NULL node is root */
  146. char *(*infoFn)(void *data, void *node, int *nodeFlags); /* return "name" for node, fill 0 flags, or save non-zero flags */
  147. void (*moveFn)(void *data, void *node, void *parentNode, int i); /* NULL prevents moves, or called when user moves node, with new parent, position */
  148. } LWPanTreeDesc;
  149. typedef enum { /* Tags to get/set panel attributes */
  150. PAN_X, PAN_Y, PAN_W, PAN_H, PAN_MOUSEX, PAN_MOUSEY,
  151. PAN_FLAGS, PAN_USERDRAW, PAN_USERACTIVATE,
  152. PAN_USEROPEN, PAN_USERCLOSE, PAN_TITLE,PAN_USERDATA, PAN_USERKEYS,
  153. PAN_LWINSTANCE, PAN_MOUSEBUTTON, PAN_MOUSEMOVE ,PAN_PANFUN, PAN_VERSION, PAN_RESULT,
  154. PAN_HOSTDISPLAY, PAN_USERKEYUPS, PAN_QUALIFIERS, PAN_TO_FRONT
  155. } pTag;
  156. typedef enum { DR_ERASE, DR_RENDER, DR_GHOST, DR_REFRESH } DrMode;
  157. typedef enum { /* Tags to get/set panel attributes */
  158. CTL_X, CTL_Y, CTL_W, CTL_H, CTL_VALUE,
  159. CTL_HOTX, CTL_HOTY, CTL_HOTW, CTL_HOTH, CTL_LABELWIDTH,
  160. CTL_MOUSEX, CTL_MOUSEY,
  161. CTL_FLAGS, CTL_USERDRAW, CTL_USEREVENT, CTL_LABEL, CTL_USERDATA,
  162. CTL_PANEL, CTL_PANFUN, /* use these 2 to get your panelID and functions! */
  163. CTL_RANGEMIN, CTL_RANGEMAX, /* get/set slider range params API 10 and later */
  164. CTL_ACTIVATE /* set only, to actvate/enter string controls API 10 and later */
  165. } cTag;
  166. typedef enum { MX_HCHOICE, MX_VCHOICE ,MX_POPUP } MxType;
  167. typedef void (*LWPanHook)(LWPanelID, void *);
  168. typedef void (*LWPanKeyHook)(LWPanelID, void *, LWDualKey);
  169. typedef void (*LWPanMouseHook)(LWPanelID, void *, int, int, int); /* see input qualifier bits */
  170. typedef void (*LWPanDrawHook)(LWPanelID, void *, DrMode);
  171. typedef void (*LWCtlDrawHook)(LWControlID, void *,DrMode);
  172. typedef void (*LWCtlEventHook)(LWControlID, void *);
  173. typedef union un_LWValue {
  174. LWType type;
  175. LWValString str;
  176. LWValInt intv;
  177. LWValFloat flt;
  178. LWValIVector ivec;
  179. LWValFVector fvec;
  180. LWValPointer ptr;
  181. LWValCustom cust;
  182. } LWValue;
  183. typedef union un_LWPanControlDesc {
  184. LWType type;
  185. LWPanStringDesc string;
  186. LWPanChoiceDesc choice;
  187. LWPanTextDesc text;
  188. LWPanRangeDesc range;
  189. LWPanAreaDesc area;
  190. LWPanLWItemDesc lwitem;
  191. LWPanPopupDesc popup;
  192. LWPanListBoxDesc listbox;
  193. LWPanXPanDesc xpanel;
  194. LWPanTreeDesc tree;
  195. LWPanMultiListBoxDesc multiList;
  196. } LWPanControlDesc;
  197. typedef LWPanControlDesc ControlDesc;
  198. typedef struct st_DrawFuncs {
  199. void (*drawPixel)(LWPanelID,int,int,int); /* color,x,y */
  200. void (*drawRGBPixel)(LWPanelID,int,int,int,int,int); /* r,g,b,x,y */
  201. void (*drawLine)(LWPanelID,int,int,int,int,int); /* color,x,y,x2,y2 */
  202. void (*drawBox)(LWPanelID,int,int,int,int,int); /* color,x,y,w,h */
  203. void (*drawRGBBox)(LWPanelID,int,int,int,int,int,int,int); /* r,g,b,x,y,w,h */
  204. void (*drawBorder)(LWPanelID,int,int,int,int,int); /* indent,x,y,w,h (h==0 -> divider) */
  205. int (*textWidth)(LWPanelID,char *); /* text */
  206. void (*drawText)(LWPanelID,char *,int,int,int); /* text,color,x,y */
  207. const LWDisplayMetrics *(*dispMetrics)();
  208. } DrawFuncs;
  209. typedef struct st_LWControl {
  210. void (*draw)(LWControlID, DrMode);
  211. void (*get)(LWControlID, cTag, LWValue *);
  212. void (*set)(LWControlID, cTag, LWValue *);
  213. void *priv_data;
  214. } LWControl;
  215. typedef struct st_LWPanelFuncs {
  216. LWPanelID (*create)(char *, void *);
  217. void (*destroy)(LWPanelID);
  218. int (*open)(LWPanelID,int); /* flags int (see flag bits PANF_ etc.) */
  219. int (*handle)(LWPanelID, int); /* process input manually after non-blocking open, use EVNT_ bits to process async. or synchronously */
  220. void (*draw)(LWPanelID, DrMode);
  221. void (*close)(LWPanelID);
  222. void (*get)(LWPanelID, pTag, void *);
  223. void (*set)(LWPanelID, pTag, void *);
  224. LWControl *(*addControl)(LWPanelID pan, char *type, ControlDesc *data, char *label);
  225. LWControl *(*nextControl)(LWPanelID pan, LWControlID ctl);
  226. DrawFuncs *drawFuncs;
  227. void *user_data; /* do whatcha like */
  228. GlobalFunc *globalFun; /* please set this to your GlobalFunction pointer.. at least for file req. */
  229. } LWPanelFuncs;
  230. typedef void *LWRasterID;
  231. typedef struct st_LWRasterFuncs {
  232. void (*drawPixel)(LWRasterID,int,int,int); /* color,x,y */
  233. void (*drawRGBPixel)(LWRasterID,int,int,int,int,int); /* r,g,b,x,y */
  234. void (*drawLine)(LWRasterID,int,int,int,int,int); /* color,x,y,x2,y2 */
  235. void (*drawBox)(LWRasterID,int,int,int,int,int); /* color,x,y,w,h */
  236. void (*drawRGBBox)(LWRasterID,int,int,int,int,int,int,int); /* r,g,b,x,y,w,h */
  237. void (*eraseBox)(LWRasterID,int,int,int,int); /* x,y,w,h */
  238. void (*drawBorder)(LWRasterID,int,int,int,int,int); /* indent,x,y,w,h (h==0 -> divider) */
  239. void (*drawText)(LWRasterID,char *,int,int,int); /* text,color,x,y */
  240. LWRasterID (*create)(int,int,int); /* w, h, flags */
  241. void (*destroy)(LWRasterID);
  242. void (*blitPanel)(LWRasterID, int, int, LWPanelID, int,int,int,int); /* src, srcx, srcy, dest, destx, desty, w, h*/
  243. } LWRasterFuncs;
  244. typedef struct st_ContextMenuFuncs {
  245. LWContextMenuID (*cmenuCreate)(LWPanPopupDesc *desc, void *userdata);
  246. int (*cmenuDeploy)(LWContextMenuID menu, LWPanelID pan, int item); // item==-1 for no choice initially and/or on return
  247. void (*cmenuDestroy)(LWContextMenuID menu);
  248. } ContextMenuFuncs;
  249. #define RGB_(r,g,b) ((long)(((r) << 16) | ((b) << 8) | (g) | 0x1000000))
  250. #define PANF_BLOCKING 1 /* open waits for close, or returns immediately */
  251. #define PANF_CANCEL 2 /* Continue or Continue/Cancel*/
  252. #define PANF_FRAME 4 /* Windowing System Title bar */
  253. #define PANF_MOUSETRAP 8 /* Please track mouse input and call mouse callbacks */
  254. #define PANF_PASSALLKEYS 16 /* Pass Enter/Esc keys to panel, instead of closing with OK/Cancel */
  255. #define PANF_ABORT 32 /* Abort instead of Continue, usw w/ PANF_CANEL!! */
  256. #define PANF_NOBUTT 64 /* No Continue or Continue/Cancel*/
  257. #define PANF_RESIZE 128 /* Allow resizing of window. Clients should reposition/recreate controls */
  258. #define CTLF_DISABLE 0x100 // Read-Only ,i.e. check if button has been drawn w/DR_GHOST , or erase
  259. #define CTLF_INVISIBLE 0x200 // Read-Only ... erased
  260. #define CTLF_GHOST CTLF_DISABLE
  261. #define LWI_IMAGE LWI_BONE+1
  262. #define LWI_ANY LWI_IMAGE+1
  263. #define NODE_FLAG_EXPND 1 /* TreeControl item expanded state*/
  264. #define NODE_FLAG_WRITE 1024 /* TreeControl flag write-mode, allows clearing of other bits*/
  265. #define EVNT_BLOCKING 1 /* 1 << 0 i.e. bit flags handle() method waits for input, or gives immediate return */
  266. #define EVNT_ALL 2 /* 1 << 1 if set, handle() method will poll entire queue of events, */
  267. /* w/EVNT_BLOCKING handle() won't return 'til panel is closed , w/out EVNT_BLOCKING, EVNT_ALL is irrelevant */
  268. typedef int InputMode;
  269. #define TRUECOLOR(dm) (dm->depth ? 1:0)
  270. #define PALETTESIZE(dm) (dm->depth ? 1<<24:1<<dm->depth)
  271. #define PAN_CREATE(pfunc,tit) ((*pfunc->create)(tit,NULL))
  272. #define PAN_POST(pfunc,pan) ((*pfunc->open)(pan,PANF_BLOCKING|PANF_CANCEL|PANF_FRAME))
  273. #define PAN_KILL(pfunc,pan) ((*pfunc->destroy)(pan))
  274. #define HCHOICE_CTL(pfunc,pan,tit,ls) (desc.type=LWT_CHOICE,desc.choice.vertical=MX_HCHOICE,\
  275. desc.choice.items=ls,\
  276. (*pfunc->addControl) (pan, "ChoiceControl", &desc, tit))
  277. #define VCHOICE_CTL(pfunc,pan,tit,ls) (desc.type=LWT_CHOICE,desc.choice.vertical=MX_VCHOICE,\
  278. desc.choice.items=ls,\
  279. (*pfunc->addControl) (pan, "ChoiceControl", &desc, tit))
  280. #define POPUP_CTL(pfunc,pan,tit,ls) (desc.type=LWT_CHOICE,desc.choice.items=ls,\
  281. (*pfunc->addControl) (pan, "PopupControl", &desc, tit))
  282. #define WPOPUP_CTL(pfunc,pan,tit,ls,w) (desc.type=LWT_CHOICE,desc.choice.vertical=w, desc.choice.items=ls,\
  283. (*pfunc->addControl) (pan, "PopupControl", &desc, tit))
  284. #define FLOAT_CTL(pfunc,pan,tit) (desc.type=LWT_FLOAT,\
  285. (*pfunc->addControl) (pan, "FloatControl", &desc, tit))
  286. /* RO means 'read-only', uneditable text gadget */
  287. #define FLOATRO_CTL(pfunc,pan,tit) (desc.type=LWT_FLOAT,\
  288. (*pfunc->addControl) (pan, "FloatInfoControl", &desc, tit))
  289. #define FVEC_CTL(pfunc,pan,tit) (desc.type=LWT_VFLOAT,\
  290. (*pfunc->addControl) (pan, "FVecControl", &desc, tit))
  291. #define FVECRO_CTL(pfunc,pan,tit) (desc.type=LWT_VFLOAT,\
  292. (*pfunc->addControl) (pan, "FVecInfoControl", &desc, tit))
  293. #define DVEC_CTL(pfunc,pan,tit) (desc.type=LWT_VDIST,\
  294. (*pfunc->addControl) (pan, "FVecControl", &desc, tit))
  295. #define DIST_CTL(pfunc,pan,tit) (desc.type=LWT_DISTANCE,\
  296. (*pfunc->addControl) (pan, "FloatControl", &desc, tit))
  297. /* a popup list of LW items (i.e. lights, objects, bones, ..search 'LWI_' ) */
  298. #define ITEM_CTL(pfunc,pan,tit,glb,typ) (desc.type=LWT_LWITEM, desc.lwitem.global=glb, desc.lwitem.itemType=typ,\
  299. desc.lwitem.list=NULL, desc.lwitem.count=0,desc.lwitem.width=0, \
  300. (*pfunc->addControl) (pan, "LWListControl", &desc, tit) )
  301. /* a popup list of LW items (i.e. lights, objects, bones, ..search 'LWI_' ) */
  302. #define WITEM_CTL(pfunc,pan,tit,glb,typ,w) (desc.type=LWT_LWITEM,desc.lwitem.global=glb, desc.lwitem.itemType=typ,\
  303. desc.lwitem.list=NULL,desc.lwitem.count=0,desc.lwitem.width=w, \
  304. (*pfunc->addControl) (pan, "LWListControl", &desc, tit) )
  305. #define PIKITEM_CTL(pfunc,pan,tit,glb,typ,w) (desc.type=LWT_LWITEM,desc.lwitem.global=glb, desc.lwitem.itemType=typ,\
  306. desc.lwitem.list=NULL,desc.lwitem.count=0,desc.lwitem.width=w, \
  307. (*pfunc->addControl) (pan, "LWPickListControl", &desc, tit) )
  308. /* a 'do something now' button */
  309. #define BUTTON_CTL(pfunc,pan,tit) (desc.type=LWT_INTEGER,\
  310. (*pfunc->addControl) (pan, "ButtonControl", &desc, tit))
  311. #define WBUTTON_CTL(pfunc,pan,tit,w) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=0,\
  312. (*pfunc->addControl) (pan, "ButtonControl", &desc, tit))
  313. /* a checkbox */
  314. #define BOOL_CTL(pfunc,pan,tit) (desc.type=LWT_BOOLEAN,\
  315. (*pfunc->addControl) (pan, "BoolControl", &desc, tit))
  316. /* a selectable text button */
  317. #define BOOLBUTTON_CTL(pfunc,pan,tit) (desc.type=LWT_BOOLEAN,\
  318. (*pfunc->addControl) (pan, "BoolButtonControl", &desc, tit))
  319. #define WBOOLBUTTON_CTL(pfunc,pan,tit,w) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=0,\
  320. (*pfunc->addControl) (pan, "BoolButtonControl", &desc, tit))
  321. #define INT_CTL(pfunc,pan,tit) (desc.type=LWT_INTEGER,\
  322. (*pfunc->addControl) (pan, "NumControl", &desc, tit))
  323. #define INTRO_CTL(pfunc,pan,tit) (desc.type=LWT_INTEGER,\
  324. (*pfunc->addControl) (pan, "NumInfoControl", &desc, tit))
  325. #define SLIDER_CTL(pfunc,pan,tit,w,mn,mx) (desc.type=LWT_RANGE,desc.range.width=w,\
  326. desc.range.min=mn,desc.range.max=mx,\
  327. (*pfunc->addControl)(pan, "SliderControl", &desc, tit))
  328. #define VSLIDER_CTL(pfunc,pan,tit,w,mn,mx) (desc.type=LWT_RANGE,desc.range.width=w,\
  329. desc.range.min=mn,desc.range.max=mx,\
  330. (*pfunc->addControl)(pan, "VSlideControl", &desc, tit))
  331. #define HSLIDER_CTL(pfunc,pan,tit,w,mn,mx) (desc.type=LWT_RANGE,desc.range.width=w,\
  332. desc.range.min=mn,desc.range.max=mx,\
  333. (*pfunc->addControl)(pan, "HSlideControl", &desc, tit))
  334. #define UNSLIDER_CTL(pfunc,pan,tit,w,mn,mx) (desc.type=LWT_RANGE,desc.range.width=w,\
  335. desc.range.min=mn,desc.range.max=mx,\
  336. (*pfunc->addControl)(pan, "UnboundSlideControl", &desc, tit))
  337. #define MINISLIDER_CTL(pfunc,pan,tit,w,mn,mx) (desc.type=LWT_RANGE,desc.range.width=w,\
  338. desc.range.min=mn,desc.range.max=mx,\
  339. (*pfunc->addControl)(pan, "MiniSliderControl", &desc, tit))
  340. #define IVEC_CTL(pfunc,pan,tit) (desc.type=LWT_VINT,\
  341. (*pfunc->addControl) (pan, "VecControl", &desc, tit))
  342. #define IVECRO_CTL(pfunc,pan,tit) (desc.type=LWT_VINT,\
  343. (*pfunc->addControl) (pan, "VecInfoControl", &desc, tit))
  344. #define RGB_CTL(pfunc,pan,tit) (desc.type=LWT_VINT,\
  345. (*pfunc->addControl) (pan, "RGBControl", &desc, tit))
  346. #define MINIRGB_CTL(pfunc,pan,tit) (desc.type=LWT_VINT,\
  347. (*pfunc->addControl) (pan, "MiniRGBControl", &desc, tit))
  348. #define MINIHSV_CTL(pfunc,pan,tit) (desc.type=LWT_VINT,\
  349. (*pfunc->addControl) (pan, "MiniHSVControl", &desc, tit))
  350. #define RGBVEC_CTL(pfunc,pan,tit) (desc.type=LWT_VINT,\
  351. (*pfunc->addControl) (pan, "RGBVecControl", &desc, tit))
  352. #define STR_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  353. (*pfunc->addControl) (pan, "EditControl", &desc, tit))
  354. #define STRRO_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  355. (*pfunc->addControl) (pan, "InfoControl", &desc, tit))
  356. /* file name string + file-requester ! */
  357. #define FILE_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  358. (*pfunc->addControl) (pan, "FileControl", &desc, tit))
  359. /* width in pixels not char.s here */
  360. #define FILEBUTTON_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  361. (*pfunc->addControl) (pan, "FileButtonControl", &desc, tit))
  362. #define LOAD_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  363. (*pfunc->addControl) (pan, "LoadControl", &desc, tit))
  364. #define LOADBUTTON_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  365. (*pfunc->addControl) (pan, "LoadButtonControl", &desc, tit))
  366. #define SAVE_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  367. (*pfunc->addControl) (pan, "SaveControl", &desc, tit))
  368. #define SAVEBUTTON_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  369. (*pfunc->addControl) (pan, "SaveButtonControl", &desc, tit))
  370. #define DIR_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  371. (*pfunc->addControl) (pan, "DirControl", &desc, tit))
  372. #define DIRBUTTON_CTL(pfunc,pan,tit,w) (desc.type=LWT_STRING,desc.string.width=w,\
  373. (*pfunc->addControl) (pan, "DirButtonControl", &desc, tit))
  374. #define TEXT_CTL(pfunc,pan,tit,sts) (desc.type=LWT_TEXT,desc.text.text=sts,\
  375. (*pfunc->addControl) (pan, "TextControl", &desc, tit))
  376. #define AREA_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,\
  377. (*pfunc->addControl)(pan, "AreaControl", &desc, tit))
  378. #define PALETTE_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_RANGE,desc.area.width=w,desc.area.height=h,\
  379. (*pfunc->addControl)(pan, "PaletteControl", &desc, tit))
  380. #define OPENGL_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,\
  381. (*pfunc->addControl)(pan, "OpenGLControl", &desc, tit))
  382. #define CUSTPOPUP_CTL(pfunc,pan,tit,w,name,num) (desc.type=LWT_POPUP,desc.popup.width=w,desc.popup.nameFn=name,\
  383. desc.popup.countFn=num,\
  384. (*pfunc->addControl)(pan, "CustomPopupControl", &desc, tit))
  385. #define CANVAS_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,\
  386. (*pfunc->addControl)(pan, "CanvasControl", &desc, tit))
  387. #define POPDOWN_CTL(pfunc,pan,tit,ls) (desc.type=LWT_CHOICE,desc.choice.vertical=MX_POPUP,\
  388. desc.choice.items=ls,\
  389. (*pfunc->addControl) (pan, "PopDownControl", &desc, tit))
  390. /* get intvector w/(dx,dy,count) */
  391. #define DRAGBUT_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,(*pfunc->addControl)(pan, "DragButtonControl", &desc, tit))
  392. #define VDRAGBUT_CTL(pfunc,pan,tit) (desc.type=LWT_AREA,desc.area.width=0,desc.area.height=-1,(*pfunc->addControl)(pan, "DragButtonControl", &desc, tit))
  393. #define HDRAGBUT_CTL(pfunc,pan,tit) (desc.type=LWT_AREA,desc.area.width=-1,desc.area.height=0,(*pfunc->addControl)(pan, "DragButtonControl", &desc, tit))
  394. #define DRAGAREA_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,(*pfunc->addControl)(pan, "DragAreaControl", &desc, tit))
  395. #define LISTBOX_CTL(pfunc,pan,tit,w,vis,name,num) (desc.type=LWT_POPUP,desc.listbox.width=w,desc.listbox.nameFn=name,\
  396. desc.listbox.countFn=num, desc.listbox.visItems=vis,\
  397. (*pfunc->addControl)(pan, "ListBoxControl", &desc, tit))
  398. #define MULTILIST_CTL(pfunc,pan,tit,w,vis,name,num,colw) (desc.type=LWT_MLIST,desc.multiList.width=w,desc.multiList.nameFn=name,\
  399. desc.multiList.countFn=num,desc.multiList.visItems=vis,desc.multiList.colWidth=colw,\
  400. (*pfunc->addControl)(pan, "MultiListBoxControl", &desc, tit))
  401. #define PERCENT_CTL(pfunc,pan,tit) (desc.type=LWT_RANGE,\
  402. desc.range.min=0,desc.range.max=100,\
  403. (*pfunc->addControl)(pan, "PercentControl", &desc, tit))
  404. #define ANGLE_CTL(pfunc,pan,tit) (desc.type=LWT_RANGE,\
  405. desc.range.min=0,desc.range.max=360,\
  406. (*pfunc->addControl)(pan, "AngleControl", &desc, tit))
  407. #define BORDER_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,\
  408. (*pfunc->addControl)(pan, "BorderControl", &desc, tit))
  409. #define TABCHOICE_CTL(pfunc,pan,tit,ls) (desc.type=LWT_CHOICE,desc.choice.vertical=MX_HCHOICE,\
  410. desc.choice.items=ls,\
  411. (*pfunc->addControl) (pan, "TabChoiceControl", &desc, tit))
  412. #define CHANNEL_CTL(pfunc,pan,tit,w,h) (desc.type=LWT_AREA,desc.area.width=w,desc.area.height=h,\
  413. (*pfunc->addControl) (pan, "ChannelControl", &desc, tit))
  414. #define XPANEL_CTL(pfunc,pan,tit,xp) (desc.type=LWT_XPANEL, desc.xpanel.xpan=xp,\
  415. (*pfunc->addControl) (pan, "XPanelControl", &desc, tit))
  416. #define TREE_CTL(pfunc,pan,tit,w,h,info,num,node) (desc.type=LWT_TREE,desc.tree.width=w,desc.tree.height=h,desc.tree.infoFn=info,\
  417. desc.tree.countFn=num,desc.tree.leafFn=node,desc.tree.moveFn=NULL,\
  418. (*pfunc->addControl)(pan, "TreeControl", &desc, tit))
  419. /*
  420. The folowing macros require a few global LWValue variables initialized as
  421. appropriate types.
  422. - - - - - - CUT HERE - - - - - */
  423. /* required by macros in lwpanel.h */
  424. /*static LWValue ival={LWT_INTEGER},ivecval={LWT_VINT},
  425. fval={LWT_FLOAT},fvecval={LWT_VFLOAT},sval={LWT_STRING}; */
  426. /* - - - - - - CUT HERE - - - - - */
  427. #define SET_STR(ctl,s,l) (sval.str.buf=s,sval.str.bufLen=l,(*ctl->set)(ctl, CTL_VALUE, &sval))
  428. #define SET_INT(ctl,n) (ival.intv.value=n,(*ctl->set)(ctl, CTL_VALUE, &ival))
  429. #define SET_FLOAT(ctl,f) (fval.flt.value=f,(*ctl->set)(ctl, CTL_VALUE, &fval))
  430. #define SET_FVEC(ctl,x,y,z) (fvecval.fvec.val[0]=x,fvecval.fvec.val[1]=y,fvecval.fvec.val[2]=z,\
  431. (*ctl->set)(ctl, CTL_VALUE, &fvecval))
  432. #define SET_IVEC(ctl,x,y,z) (ivecval.ivec.val[0]=x,ivecval.ivec.val[1]=y,ivecval.ivec.val[2]=z,\
  433. (*ctl->set)(ctl, CTL_VALUE, &ivecval))
  434. #define SETV_FVEC(ctl,v) (fvecval.fvec.val[0]=v[0],fvecval.fvec.val[1]=v[1],fvecval.fvec.val[2]=v[2],\
  435. (*ctl->set)(ctl, CTL_VALUE, &fvecval))
  436. #define SETV_IVEC(ctl,v) (ivecval.ivec.val[0]=v[0],ivecval.ivec.val[1]=v[1],ivecval.ivec.val[2]=v[2],\
  437. (*ctl->set)(ctl, CTL_VALUE, &ivecval))
  438. #define GET_STR(ctl,s,l) (sval.str.buf=s,sval.str.bufLen=l,(*ctl->get)(ctl, CTL_VALUE, &sval))
  439. #define GET_INT(ctl,n) ((*ctl->get)(ctl, CTL_VALUE, &ival),n=ival.intv.value)
  440. #define GET_FLOAT(ctl,f) ((*ctl->get)(ctl, CTL_VALUE, &fval),f=fval.flt.value)
  441. #define GET_FVEC(ctl,x,y,z) ((*ctl->get)(ctl, CTL_VALUE, &fvecval),x=fvecval.fvec.val[0],y=fvecval.fvec.val[1],z=fvecval.fvec.val[2])
  442. #define GETV_FVEC(ctl,v) ((*ctl->get)(ctl, CTL_VALUE, &fvecval),v[0]=fvecval.fvec.val[0],v[1]=fvecval.fvec.val[1],v[2]=fvecval.fvec.val[2])
  443. #define GET_IVEC(ctl,x,y,z) ((*ctl->get)(ctl, CTL_VALUE, &ivecval),x=ivecval.ivec.val[0],y=ivecval.ivec.val[1],z=ivecval.ivec.val[2])
  444. #define GETV_IVEC(ctl,v) ((*ctl->get)(ctl, CTL_VALUE, &ivecval),v[0]=ivecval.ivec.val[0],v[1]=ivecval.ivec.val[1],v[2]=ivecval.ivec.val[2])
  445. #define CON_X(ctl) ((*ctl->get)(ctl, CTL_X, &ival),ival.intv.value)
  446. #define CON_Y(ctl) ((*ctl->get)(ctl, CTL_Y, &ival),ival.intv.value)
  447. #define CON_W(ctl) ((*ctl->get)(ctl, CTL_W, &ival),ival.intv.value)
  448. #define CON_H(ctl) ((*ctl->get)(ctl, CTL_H, &ival),ival.intv.value)
  449. #define CON_LW(ctl) ((*ctl->get)(ctl, CTL_LABELWIDTH, &ival),ival.intv.value)
  450. #define CON_PAN(ctl) ((*ctl->get)(ctl, CTL_PANEL, &ival),ival.ptr.ptr)
  451. #define CON_PANFUN(ctl) ((*ctl->get)(ctl, CTL_PANFUN, &ival),ival.ptr.ptr)
  452. #define CON_HOTX(ctl) ((*ctl->get)(ctl, CTL_HOTX, &ival),ival.intv.value)
  453. #define CON_HOTY(ctl) ((*ctl->get)(ctl, CTL_HOTY, &ival),ival.intv.value)
  454. #define CON_HOTW(ctl) ((*ctl->get)(ctl, CTL_HOTW, &ival),ival.intv.value)
  455. #define CON_HOTH(ctl) ((*ctl->get)(ctl, CTL_HOTH, &ival),ival.intv.value)
  456. #define CON_MOUSEX(ctl) ((*ctl->get)(ctl, CTL_MOUSEX, &ival),ival.intv.value)
  457. #define CON_MOUSEY(ctl) ((*ctl->get)(ctl, CTL_MOUSEY, &ival),ival.intv.value)
  458. #define MOVE_CON(ctl,x,y) ( (ival.intv.value=x,(*ctl->set)(ctl, CTL_X, &ival)),(ival.intv.value=y,(*ctl->set)(ctl, CTL_Y, &ival)) )
  459. #define CON_SETEVENT(ctl,f,d) ( (ival.ptr.ptr=(void*)d,(*ctl->set)(ctl,CTL_USERDATA,&ival)), (ival.ptr.ptr=(void*)f,(*ctl->set)(ctl,CTL_USEREVENT,&ival)) )
  460. #define ERASE_CON(ctl) ((*ctl->draw)(ctl,DR_ERASE))
  461. #define REDRAW_CON(ctl) ((*ctl->draw)(ctl,DR_REFRESH))
  462. #define GHOST_CON(ctl) ((*ctl->draw)(ctl,DR_GHOST))
  463. #define RENDER_CON(ctl) ((*ctl->draw)(ctl,DR_RENDER))
  464. #define UNGHOST_CON(ctl) ((*ctl->draw)(ctl,DR_RENDER))
  465. #define ACTIVATE_CON(ctl) (ival.intv.value=0, (*ctl->set)(ctl, CTL_ACTIVATE, &ival))
  466. #define PAN_GETX(pfunc,pan) ((*pfunc->get)(pan,PAN_X,(void *)&(ival.intv.value)),ival.intv.value)
  467. #define PAN_GETY(pfunc,pan) ((*pfunc->get)(pan,PAN_Y,(void *)&(ival.intv.value)),ival.intv.value)
  468. #define PAN_GETW(pfunc,pan) ((*pfunc->get)(pan,PAN_W,(void *)&(ival.intv.value)),ival.intv.value)
  469. #define PAN_GETH(pfunc,pan) ((*pfunc->get)(pan,PAN_H,(void *)&(ival.intv.value)),ival.intv.value)
  470. #define PAN_SETH(pfunc,pan,h) ( ival.intv.value=h, (*pfunc->set)(pan, PAN_H, (void *)&ival.intv.value) )
  471. #define PAN_SETW(pfunc,pan,w) ( ival.intv.value=w,(*pfunc->set)(pan, PAN_W, (void *)&ival.intv.value) )
  472. #define MOVE_PAN(pfunc,pan,x,y) ( ival.intv.value=x,(*pfunc->set)(pan, PAN_X, (void *)&ival.intv.value),ival.intv.value=y,(*pfunc->set)(pan, PAN_Y, (void *)&ival.intv.value) )
  473. #define PAN_SETDATA(pfunc,pan,d) ( (*pfunc->set)(pan,PAN_USERDATA,(void *)d) )
  474. #define PAN_SETDRAW(pfunc,pan,d) ( (*pfunc->set)(pan,PAN_USERDRAW,(void *)d) )
  475. #define PAN_SETKEYS(pfunc,pan,d) ( (*pfunc->set)(pan,PAN_USERKEYS,(void *)d) )
  476. #define PAN_GETVERSION(pfunc,pan) ((*pfunc->get)(pan,PAN_VERSION,(void *)&(ival.intv.value)),ival.intv.value)
  477. /* input qualifiers */
  478. #define IQ_CTRL 1
  479. #define IQ_SHIFT 2
  480. #define IQ_ALT 4
  481. #define IQ_CONSTRAIN 8
  482. #define IQ_ADJUST 16
  483. #define MOUSE_LEFT 32
  484. #define MOUSE_MID 64
  485. #define MOUSE_RIGHT 96
  486. #define MOUSE_DOWN 128
  487. #define RCLICK(code) ( (code&MOUSE_LEFT) && (code&MOUSE_MID) ? 1:0)
  488. #define LCLICK(code) ( (code&MOUSE_LEFT) && (!(code&MOUSE_MID)) ? 1:0)
  489. #define MCLICK(code) ( (!(code&MOUSE_LEFT)) && (code&MOUSE_MID) ? 1:0)
  490. #define PALETTESIZE(dm) (dm->depth ? 1<<24:1<<dm->depth)
  491. /* Input key codes */
  492. #define LWDK_CHAR(c) ((LWDualKey) (c))
  493. #define LWDK_F1 ((LWDualKey) 0x1001)
  494. #define LWDK_F2 ((LWDualKey) 0x1002)
  495. #define LWDK_F3 ((LWDualKey) 0x1003)
  496. #define LWDK_F4 ((LWDualKey) 0x1004)
  497. #define LWDK_F5 ((LWDualKey) 0x1005)
  498. #define LWDK_F6 ((LWDualKey) 0x1006)
  499. #define LWDK_F7 ((LWDualKey) 0x1007)
  500. #define LWDK_F8 ((LWDualKey) 0x1008)
  501. #define LWDK_F9 ((LWDualKey) 0x1009)
  502. #define LWDK_F10 ((LWDualKey) 0x100A)
  503. #define LWDK_F11 ((LWDualKey) 0x100B)
  504. #define LWDK_F12 ((LWDualKey) 0x100C)
  505. #define LWDK_SC_LEFT ((LWDualKey) 0x1010)
  506. #define LWDK_SC_RIGHT ((LWDualKey) 0x1011)
  507. #define LWDK_SC_UP ((LWDualKey) 0x1012)
  508. #define LWDK_SC_DOWN ((LWDualKey) 0x1013)
  509. #define LWDK_DELETE ((LWDualKey) 0x1020)
  510. #define LWDK_HELP ((LWDualKey) 0x1021)
  511. #define LWDK_RETURN ((LWDualKey) 0x1022)
  512. #define LWDK_HOME ((LWDualKey) 0x108F)
  513. #define LWDK_END ((LWDualKey) 0x1090)
  514. #define LWDK_PAGEUP ((LWDualKey) 0x1091)
  515. #define LWDK_PAGEDOWN ((LWDualKey) 0x1092)
  516. #define LWDK_TOP_0 ((LWDualKey) 0x1030)
  517. #define LWDK_TOP_1 ((LWDualKey) 0x1031)
  518. #define LWDK_TOP_2 ((LWDualKey) 0x1032)
  519. #define LWDK_TOP_3 ((LWDualKey) 0x1033)
  520. #define LWDK_TOP_4 ((LWDualKey) 0x1034)
  521. #define LWDK_TOP_5 ((LWDualKey) 0x1035)
  522. #define LWDK_TOP_6 ((LWDualKey) 0x1036)
  523. #define LWDK_TOP_7 ((LWDualKey) 0x1037)
  524. #define LWDK_TOP_8 ((LWDualKey) 0x1038)
  525. #define LWDK_TOP_9 ((LWDualKey) 0x1039)
  526. #define LWDK_PAD_0 ((LWDualKey) 0x1040)
  527. #define LWDK_PAD_1 ((LWDualKey) 0x1041)
  528. #define LWDK_PAD_2 ((LWDualKey) 0x1042)
  529. #define LWDK_PAD_3 ((LWDualKey) 0x1043)
  530. #define LWDK_PAD_4 ((LWDualKey) 0x1044)
  531. #define LWDK_PAD_5 ((LWDualKey) 0x1045)
  532. #define LWDK_PAD_6 ((LWDualKey) 0x1046)
  533. #define LWDK_PAD_7 ((LWDualKey) 0x1047)
  534. #define LWDK_PAD_8 ((LWDualKey) 0x1048)
  535. #define LWDK_PAD_9 ((LWDualKey) 0x1049)
  536. #define LWDK_PAD_OPAREN ((LWDualKey) 0x1050)
  537. #define LWDK_PAD_CPAREN ((LWDualKey) 0x1051)
  538. #define LWDK_PAD_SLASH ((LWDualKey) 0x1052)
  539. #define LWDK_PAD_STAR ((LWDualKey) 0x1053)
  540. #define LWDK_PAD_DASH ((LWDualKey) 0x1054)
  541. #define LWDK_PAD_PLUS ((LWDualKey) 0x1055)
  542. #define LWDK_PAD_DECIMAL ((LWDualKey) 0x1056)
  543. #define LWDK_PAD_ENTER ((LWDualKey) 0x1057)
  544. #define LWDK_ALT ((LWDualKey) 0x1060)
  545. #define LWDK_SHIFT ((LWDualKey) 0x1061)
  546. #define LWDK_CTRL ((LWDualKey) 0x1062)
  547. /* Color Definitions */
  548. #define SYSTEM_Ic(i) (4136 + i)
  549. #define COLOR_BG LWP_BG
  550. #define COLOR_DK_YELLOW LWP_EDIT_IMG
  551. #define COLOR_DK_GREY LWP_SHADOW
  552. #define COLOR_LT_YELLOW LWP_EDIT_SEL
  553. #define COLOR_MD_GREY LWP_B_FACE
  554. #define COLOR_LT_GREY LWP_GLINT
  555. #define COLOR_BLACK LWP_NORMAL
  556. #define COLOR_WHITE LWP_HEADLINE
  557. #define LWP_NONE SYSTEM_Ic(0)
  558. #define LWP_INVERT SYSTEM_Ic(1)
  559. #define LWP_BG SYSTEM_Ic(2)
  560. #define LWP_NORMAL SYSTEM_Ic(3)
  561. #define LWP_HEADLINE SYSTEM_Ic(4)
  562. #define LWP_INFO_BG SYSTEM_Ic(5)
  563. #define LWP_INFO_IMG SYSTEM_Ic(6)
  564. #define LWP_INFO_DIS SYSTEM_Ic(7)
  565. #define LWP_EDIT_BG SYSTEM_Ic(8)
  566. #define LWP_EDIT_IMG SYSTEM_Ic(9)
  567. #define LWP_EDIT_SEL SYSTEM_Ic(10)
  568. #define LWP_EDIT_DIS SYSTEM_Ic(11)
  569. #define LWP_BLACK SYSTEM_Ic(12)
  570. #define LWP_SHADOW SYSTEM_Ic(13)
  571. #define LWP_LOWERED SYSTEM_Ic(14)
  572. #define LWP_RAISED SYSTEM_Ic(15)
  573. #define LWP_HILIGHT SYSTEM_Ic(16)
  574. #define LWP_0_STAT SYSTEM_Ic(17)
  575. #define LWP_1_STAT SYSTEM_Ic(18)
  576. #define LWP_2_STAT SYSTEM_Ic(19)
  577. #define LWP_3_STAT SYSTEM_Ic(20)
  578. #define LWP_4_STAT SYSTEM_Ic(21)
  579. #define LWP_5_STAT SYSTEM_Ic(22)
  580. #define LWP_0_DLOG SYSTEM_Ic(23)
  581. #define LWP_1_DLOG SYSTEM_Ic(24)
  582. #define LWP_2_DLOG SYSTEM_Ic(25)
  583. #define LWP_3_DLOG SYSTEM_Ic(26)
  584. #define LWP_4_DLOG SYSTEM_Ic(27)
  585. #define LWP_5_DLOG SYSTEM_Ic(28)
  586. #define LWP_0_DOIT SYSTEM_Ic(29)
  587. #define LWP_1_DOIT SYSTEM_Ic(30)
  588. #define LWP_2_DOIT SYSTEM_Ic(31)
  589. #define LWP_3_DOIT SYSTEM_Ic(32)
  590. #define LWP_4_DOIT SYSTEM_Ic(33)
  591. #define LWP_5_DOIT SYSTEM_Ic(34)
  592. #define LWP_0_DRAG SYSTEM_Ic(35)
  593. #define LWP_1_DRAG SYSTEM_Ic(36)
  594. #define LWP_2_DRAG SYSTEM_Ic(37)
  595. #define LWP_3_DRAG SYSTEM_Ic(38)
  596. #define LWP_4_DRAG SYSTEM_Ic(39)
  597. #define LWP_5_DRAG SYSTEM_Ic(40)
  598. #define LWP_1_BG SYSTEM_Ic(41)
  599. #define LWP_2_BG SYSTEM_Ic(42)
  600. #define LWP_3_BG SYSTEM_Ic(43)
  601. /* Same Palette different names (based on defaults)!*/
  602. #define LWP_GRAY1 SYSTEM_Ic( 7)
  603. #define LWP_GRAY2 SYSTEM_Ic(13)
  604. #define LWP_GRAY3 SYSTEM_Ic( 1)
  605. #define LWP_GRAY4 SYSTEM_Ic( 8)
  606. #define LWP_GRAY5 SYSTEM_Ic( 5)
  607. #define LWP_GRAY6 SYSTEM_Ic( 2)
  608. #define LWP_GRAY7 SYSTEM_Ic(11)
  609. #define LWP_GRAY8 SYSTEM_Ic( 9)
  610. #define LWP_WHITE SYSTEM_Ic( 4)
  611. #define LWP_CANARY1 SYSTEM_Ic(17)
  612. #define LWP_CANARY2 SYSTEM_Ic(18)
  613. #define LWP_CANARY3 SYSTEM_Ic(19)
  614. #define LWP_CANARY4 SYSTEM_Ic(20)
  615. #define LWP_CANARY5 SYSTEM_Ic(21)
  616. #define LWP_CANARY6 SYSTEM_Ic(22)
  617. #define LWP_AQUA1 SYSTEM_Ic(23)
  618. #define LWP_AQUA2 SYSTEM_Ic(24)
  619. #define LWP_AQUA3 SYSTEM_Ic(25)
  620. #define LWP_AQUA4 SYSTEM_Ic(26)
  621. #define LWP_AQUA5 SYSTEM_Ic(27)
  622. #define LWP_AQUA6 SYSTEM_Ic(28)
  623. #define LWP_LAVENDER1 SYSTEM_Ic(29)
  624. #define LWP_LAVENDER2 SYSTEM_Ic(30)
  625. #define LWP_LAVENDER3 SYSTEM_Ic(31)
  626. #define LWP_LAVENDER4 SYSTEM_Ic(32)
  627. #define LWP_LAVENDER5 SYSTEM_Ic(33)
  628. #define LWP_LAVENDER6 SYSTEM_Ic(34)
  629. #define LWP_OLIVE1 SYSTEM_Ic(35)
  630. #define LWP_OLIVE2 SYSTEM_Ic(36)
  631. #define LWP_OLIVE3 SYSTEM_Ic(37)
  632. #define LWP_OLIVE4 SYSTEM_Ic(38)
  633. #define LWP_OLIVE5 SYSTEM_Ic(39)
  634. #define LWP_OLIVE6 SYSTEM_Ic(40)
  635. #endif