-
Notifications
You must be signed in to change notification settings - Fork 0
/
RWS.H
777 lines (654 loc) · 42.6 KB
/
RWS.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
/****************************************************************************/
/* RWS - beta version 0.80 */
/****************************************************************************/
// RWS.H
// Remote Workplace Server - main header
/****************************************************************************/
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Remote Workplace Server - Project headers.
*
* The Initial Developer of the Original Code is Richard L. Walsh.
*
* Portions created by the Initial Developer are Copyright (C) 2004-2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** */
/****************************************************************************/
#ifndef RWS_H_INCLUDED
#define RWS_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************/
/* Server Request Structures */
/****************************************************************************/
// These structures are created & initialized in shared memory by
// RwsClient and are passed to RwsServer. On return, the client app
// can access any data they contain.
// Every request to RwsServer starts with one of these
typedef struct _RWSHDR
{
ULONG Size; // total size of the request block
USHORT MsgId; // used by RwsDispatch
USHORT Flags; // used by RwsDispatch & RwsFreeMem
struct _RWSHDR * PrevHdr; // not used
USHORT Rc; // return code from server
USHORT Cnt; // argument count
ULONG Id; // for use by application
} RWSHDR;
typedef RWSHDR* PRWSHDR;
// Every request to RwsServer has at least two of these in a linked list.
// The first immediately follows RWSHDR and describes the type of call;
// the second describes the return value. Additional structs describe
// each of the arguments; the last in the chain has a zero in pnext.
// Note: in case you were wondering, "DSC" is short for descriptor
typedef struct _RWSDSC
{
struct _RWSDSC *pnext;
ULONG value; // data actually passed to or returned by procedure
ULONG type; // describes how RWS should handle this argument
USHORT flags; // currently, identifies this as an arg/rtn/proc
USHORT rc; // error code generated while handling this item
USHORT cbgive; // size of the give (input) buffer
USHORT cbget; // size of the get (output) buffer
VOID * pget; // pointer to the get buffer
} RWSDSC; // note: the give buffer immediately follows
typedef RWSDSC* PRWSDSC; // this structure (i.e. it's at &RWSDSC[1])
/****************************************************************************/
/* Client Request Structures */
/****************************************************************************/
// These structures describe the layout of the stack when an app calls
// RwsCall or RwsBuild. They can be used with RwsCallIndirect and
// RwsBuildIndirect to avoid pushing a large number of arguments onto
// the stack
// header structure - required
typedef struct _RWSBLD
{
PRWSHDR* ppHdr;
ULONG callType;
ULONG callValue;
ULONG rtnType;
ULONG rtnSize;
ULONG argCnt;
} RWSBLD;
typedef RWSBLD* PRWSBLD;
// argument structures - as needed
typedef struct _RWSARG
{
ULONG type;
ULONG size;
ULONG value;
} RWSARG;
typedef RWSARG* PRWSARG;
/****************************************************************************/
/* Exported Procedures used by Clients */
/****************************************************************************/
// These functions' va list is equivalent to an array of zero or more
// RWSARG structures (i.e. {ULONG type, ULONG size, ULONG value}...)
ULONG _System RwsCall( PRWSHDR* ppHdr, ULONG callType, ULONG callValue,
ULONG rtnType, ULONG rtnSize, ULONG argCnt, ...);
ULONG _System RwsCallIndirect( PRWSBLD pBld);
ULONG _System RwsCallAsync( HWND hwnd, PRWSHDR* ppHdr,
ULONG callType, ULONG callValue,
ULONG rtnType, ULONG rtnSize,
ULONG argCnt, ...);
ULONG _System RwsCallIndirectAsync( HWND hwnd, PRWSBLD pBld);
ULONG _System RwsBuild( PRWSHDR* ppHdr, ULONG callType, ULONG callValue,
ULONG rtnType, ULONG rtnSize, ULONG argCnt, ...);
ULONG _System RwsBuildIndirect( PRWSBLD pBld);
ULONG _System RwsQueryVersion( PULONG pulReserved);
ULONG _System RwsClientInit( BOOL fRegister);
ULONG _System RwsClientTerminate( void);
ULONG _System RwsDispatch( PRWSHDR pHdr);
ULONG _System RwsDispatchStatus( PBOOL pfReady);
ULONG _System RwsCancelDispatch( HWND hNotify, ULONG idNotify);
ULONG _System RwsNotify( HWND hNotify, ULONG idNotify);
ULONG _System RwsDispatchAsync( HWND hwnd, PRWSHDR pHdr);
ULONG _System RwsFreeMem( PRWSHDR pHdr);
ULONG _System RwsGetResult( PRWSHDR pHdr, ULONG ndxArg, PULONG pSize);
ULONG _System RwsGetArgPtr( PRWSHDR pHdr, ULONG ndxArg, PRWSDSC* ppArg);
ULONG _System RwsGetServerMsgID( PULONG pulMsgID);
ULONG _System RwsGetRcString( ULONG rc, ULONG cbBuf, char * pszBuf);
ULONG _System RwsGetTimeout( PULONG pulSecs, PULONG pulUser);
ULONG _System RwsSetTimeout( ULONG ulSecs);
/****************************************************************************/
// == Ordinals for functions exported by RWSCLIxx ==
#define ORD_RWSCLIENTINIT 2
#define ORD_RWSCALL 3
#define ORD_RWSCALLINDIRECT 4
#define ORD_RWSCALLASYNC 5
#define ORD_RWSCALLINDIRECTASYNC 6
#define ORD_RWSBUILD 7
#define ORD_RWSBUILDINDIRECT 8
#define ORD_RWSDISPATCH 9
#define ORD_RWSDISPATCHASYNC 10
#define ORD_RWSFREEMEM 11
#define ORD_RWSGETRESULT 12
#define ORD_RWSGETARGPTR 13
#define ORD_RWSGETSERVERMSGID 14
#define ORD_RWSGETRCSTRING 15
#define ORD_RWSGETTIMEOUT 16
#define ORD_RWSSETTIMEOUT 17
#define ORD_RWSCLIENTTERMINATE 18
#define ORD_RWSQUERYVERSION 19
#define ORD_RWSDISPATCHSTATUS 20
#define ORD_RWSCANCELDISPATCH 21
#define ORD_RWSNOTIFY 22
/****************************************************************************/
// == RwsCommand values ==
#define RWSCMD_POPUPMENU 1
#define RWSCMD_OPEN 2
#define RWSCMD_LOCATE 3
#define RWSCMD_LISTOBJECTS 4
#define RWSCMD_OPENUSING 5
#define RWSCMD_DELETE 6
#define RWSCMD_FIRST 1
#define RWSCMD_LAST 6
// == Flags used by specific commands ==
#define LISTOBJ_STANDARD 0x00000000 // abstract & transient objects
#define LISTOBJ_FILESHADOWS 0x00000001 // handles of shadowed files
#define LISTOBJ_ALL 0x00000002 // all objects - NOT recommended
#define LISTOBJ_MASK 0x00000003
#define LISTOBJ_OVERFLOW 0x80000000 // buffer overflow
// == WM_CONTROL Notifications used with RwsNotify() ==
// WM_CONTROL msgs will be posted to hNotify in this format:
// mp1 = MPFROM2SHORT( idNotify, RWSN_*)
// mp2 - depends on RWSN_ code:
// RWSN_ENTER mp2 = 0
// RWSN_EXIT mp2 = rc returned by RwsDispatch()
// RWSN_BLOCKED mp2 = 0
// RWSN_CANCEL mp2 = (RwsDispatch will now exit) ? TRUE : FALSE
#define RWSN_ENTER 1
#define RWSN_EXIT 2
#define RWSN_BLOCKED 3
#define RWSN_CANCEL 4
/****************************************************************************/
/* Macros & #defines */
/****************************************************************************/
// == Name & Version stuff ==
#define RWSVERSION "0.80" // current version for text
#define RWSVERSIONNBR "08" // current version for files
// RWSFULLVERSION for RWS v0.80 GA, oo v1.1, FPos v0.80, & Iconomize v0.80
// is 0x08000100
#define RWSFULLVERSION 0x08000100 // fussy version
#define RWSSRVSTEM "RWSSRV" // server name stem
#define RWSCLISTEM "RWSCLI" // client name stem
#define RWSCLASSSTEM "RWS" // WPS class name stem
#define RWSSRVNAME RWSSRVSTEM RWSVERSIONNBR // server name
#define RWSCLINAME RWSCLISTEM RWSVERSIONNBR // client name
#define RWSCLASSNAME RWSCLASSSTEM RWSVERSIONNBR // class name
#define RWSSRVMOD RWSSRVNAME // server module name
#define RWSCLIMOD RWSCLINAME // client module name
#define RWSSRVDLL RWSSRVMOD ".DLL" // server dll name
#define RWSCLIDLL RWSCLIMOD ".DLL" // client dll name
/****************************************************************************/
// == Address macros ==
// use these to calculate the address of a structure or buffer
// which immediately follows the referenced structure
// takes a ptr to RWSHDR, returns a ptr to the RWSDSC for the procedure
#define CALCPROCPTR(p) ((PRWSDSC)(PVOID)(&((PRWSHDR)p)[1]))
// takes a ptr to RWSHDR, returns a ptr to the RWSDSC for the return value
#define CALCRTNPTR(p) (CALCPROCPTR(p)->pnext)
// takes a ptr to RWSDSC, returns a ptr to the give buffer which follows it
#define CALCGIVEPTR(p) ((PBYTE)(PVOID)(&((PRWSDSC)p)[1]))
// takes a ptr to RWSBLD, returns a ptr to the first RWSARG following it
#define CALCARGPTR(p) ((PRWSARG)(PVOID)(&((PRWSBLD)p)[1]))
/****************************************************************************/
// == Error Handler macros ==
// error macros that make it easy to break out of a function bracketed by
// a do{...}while(FALSE) loop - they assume 'rc' has already been defined
// used to set an error code
#define ERRNBR(x) {rc = (x); break;}
// used to evaluate the error code returned by a function
#define ERRRTN(x) {rc = (x); if (rc) break;}
/****************************************************************************/
// == Miscellanea ==
#define RWSMAXARGS 16 // this only applies to methods & functions
#define RWSSTRINGSIZE CCHMAXPATH // the default string buffer size
#define RWSMEMSIZE 0x10000 // the amount of gettable shared
// memory each client allocates
// arranges character sequences so they're recognizable
// when viewed as a DWORD (e.g. 'INIT' becomes 0x494e4954)
#define READABLEULONG(a,b,c,d) ((ULONG)((((ULONG)(a))<<24) | \
(((ULONG)(b))<<16) | \
(((ULONG)(c))<<8) | \
((ULONG)(d))))
/****************************************************************************/
/* Type Descriptor Primitives */
/****************************************************************************/
// These describe the data the client will GIVE to the server and what it
// will GET back from the server. GIVEP/GETP identify Primary categories;
// GIVEQ/GETQ identify Qualifiers, i.e. subcategories and/or special handling.
//
// Client apps have little reason to use these - they should use the RWS*_
// macros listed in the "RWSDSC Type Descriptors" section below.
/****************************************************************************/
// == Argument/Return Descriptors ==
// GIVEP() values
#define GIVE_ASIS 0 // dword
#define GIVE_VOID 1 // nothing (rtn only)
#define GIVE_PSTR 2 // ptr to string
#define GIVE_PBUF 3 // ptr to fixed lth buf
#define GIVE_PPVOID 4 // ptr to pvoid or ulong
#define GIVE_PULONG GIVE_PPVOID // a synonym for those who need one
#define GIVE_CONV 5 // none - value derived by conversion
#define GIVE_COPYSTR 6 // none - value derived by strcpy into alloc
#define GIVE_COPYBUF 7 // none - value derived by memcpy into alloc
// GETP() values
#define GET_ASIS 0 // no action needed
#define GET_VOID 1 // nothing (rtn only)
#define GET_CONV 2 // value converted into buf
#define GET_PPSTR 3 // strcpy *value into buf
#define GET_PPBUF 4 // memcpy *value into buf
#define GET_PSTR 5 // strcpy value into buf (rtn only)
#define GET_PBUF 6 // memcpy value into buf (rtn only)
#define GET_COPYICON 7 // copy icon handle to client process (rtn only)
#define GET_COPYMINI 8 // copy mini-icon to client process (rtn only)
// GIVEQ()/GETQ() values
// used only by GIVE_CONV & GET_CONV
#define CONV_OBJPATH 1 // object from/to f/q name (or from obj ID)
#define CONV_OBJFQTITLE 2 // object from/to f/q title (or from obj ID)
#define CONV_OBJHNDL 3 // object from/to hobj
#define CONV_OBJHWND 4 // object from/to hwnd
#define CONV_OBJPREC 5 // object from/to pminirecordcore
#define CONV_OBJNAME 6 // object to name
#define CONV_OBJTITLE 7 // object to title
#define CONV_OBJID 8 // object to object ID
#define CONV_OBJFLDR 9 // object to folder containing object
#define CONV_SHDFQTITLE 10 // original obj from shadow f/q title or obj ID
#define CONV_SHDHNDL 11 // original obj from shadow hobj
#define CONV_SHDPREC 12 // original obj from shadow pminirecordcore
#define CONV_CLSNAME 13 // class from/to classname
#define CONV_CLSOBJ 14 // class from object
#define CONV_CLSOBJPATH 15 // class from object's f/q name or obj ID
#define CONV_CLSOBJFQTITLE 16 // class from object's f/q title or obj ID
#define CONV_CLSOBJHNDL 17 // class from object's hobj
#define CONV_CLSOBJHWND 18 // class from object's hwnd
#define CONV_CLSOBJPREC 19 // class from object's pminirecordcore
#define CONV_CLSSHDFQTITLE 20 // class from object from shadow f/q title
#define CONV_CLSSHDHNDL 21 // class from object from shadow hobj
#define CONV_CLSSHDPREC 22 // class from object from shadow pminirecordcore
#define CONV_SOMID 23 // somid to/from string
#define CONV_OBJICON 24 // object to icon
#define CONV_OBJMINI 25 // object to mini-icon
#define CONV_CLSICON 26 // class to icon
#define CONV_CLSMINI 27 // class to mini-icon
#define CONV_SOMCLSMGR 28 // SOM Class Manager object (input ignored)
#define CONV_PREVIOUS 29 // reuse previous arg's object (RWSC_* only)
// GETQ() values
// used only by GET_(P)PSTR & GET_(P)PBUF
#define COPY_CNTRTN 40 // nbr of bytes to copy is in return
#define COPY_CNTARG1 41 // nbr of bytes to copy is in Arg1
#define COPY_CNTARG2 42 // nbr of bytes to copy is in Arg2
#define COPY_CNTARG3 43 // nbr of bytes to copy is in Arg3
#define COPY_CNTARG4 44 // nbr of bytes to copy is in Arg4
#define COPY_CNTARG5 45 // nbr of bytes to copy is in Arg5
#define COPY_CNTARG6 46 // nbr of bytes to copy is in Arg6
#define COPY_CNTARG7 47 // nbr of bytes to copy is in Arg7
#define COPY_CNTARG8 48 // nbr of bytes to copy is in Arg8
#define COPY_CNTARG9 49 // nbr of bytes to copy is in Arg9
#define COPY_CNTULONG 50 // copy cnt is in ulong at start of buf
#define COPY_CNTUSHORT 51 // copy cnt is in ushort at start of buf
#define COPY_CNTULZERO 52 // copy array of ulongs, last one is zero
#define COPY_MASK 63 // mask off memory bits
#define COPY_CNTFIRST COPY_CNTRTN
#define COPY_CNTLAST COPY_CNTULZERO
// GIVEQ()/GETQ() flags
// used by GIVE_COPYSTR & GIVE_COPYBUF to alloc object/SOM memory
// used by GET_(P)PSTR & GET_(P)PBUF to free object/SOM memory
// also used to free somId's used as input args
#define COPY_OBJMEM 64 // alloc/free object memory
#define FREE_OBJMEM COPY_OBJMEM
#define COPY_SOMMEM 128 // alloc/free som memory
#define FREE_SOMMEM COPY_SOMMEM
#define COPY_MEMMASK 192 // mask off copy bits
// note: since CONV_* & COPY_* are used in different contexts, their
// values could overlap; for now they don't as a safety precaution
/****************************************************************************/
// == Procedure Descriptors ==
// GIVEP() values
#define PROC_MNAM 1 // method by pointer to name
#define PROC_MPFN 2 // method by pointer to function
#define PROC_KORD 3 // SOM kernel function by ordinal
#define PROC_KPFN 4 // SOM kernel function by pointer to function
#define PROC_CONV 5 // data conversion only
#define PROC_CMD 6 // built-in command
// GIVEQ() values
#define PRTN_BOOL 0 // non-zero return indicates success
#define PRTN_ZERO 1 // zero return indicates success
#define PRTN_IGNORE 2 // return doesn't indicate outcome
#define PRTN_LASTGIVEQ PRTN_IGNORE // applies to methods & functions
#define PRTN_NA 3 // not applicable (PROC_CONV & PROC_CMD)
// == RWSDSC Flag values ==
#define DSC_PROC 1 // procedure
#define DSC_RTN 2 // return
#define DSC_ARG 3 // arg
#define DSC_CONV 4 // convert
/****************************************************************************/
// == Structure/Macros to access the Type Descriptors ==
typedef struct _RWSTYPE
{
BYTE givep;
BYTE giveq;
BYTE getp;
BYTE getq;
} RWSTYPE;
#define TORWSTYPE(a,b,c,d) ((ULONG)(((ULONG)a) | (((ULONG)b)<<8) | \
(((ULONG)c)<<16) | (((ULONG)d)<<24)))
#define GIVEP(arg) (((RWSTYPE*)(PVOID)(&arg))->givep)
#define GIVEQ(arg) (((RWSTYPE*)(PVOID)(&arg))->giveq)
#define GETP(arg) (((RWSTYPE*)(PVOID)(&arg))->getp)
#define GETQ(arg) (((RWSTYPE*)(PVOID)(&arg))->getq)
/****************************************************************************/
/* RWSDSC Type Descriptors */
/****************************************************************************/
// Client apps should use the following macros rather than the
// Type Descriptor Primitives listed above.
/****************************************************************************/
// == Procedures ==
#define RWSP_MNAM TORWSTYPE( PROC_MNAM, PRTN_BOOL, 0, 0)
#define RWSP_MNAMZ TORWSTYPE( PROC_MNAM, PRTN_ZERO, 0, 0)
#define RWSP_MNAMI TORWSTYPE( PROC_MNAM, PRTN_IGNORE, 0, 0)
#define RWSP_MPFN TORWSTYPE( PROC_MPFN, PRTN_BOOL, 0, 0)
#define RWSP_MPFNZ TORWSTYPE( PROC_MPFN, PRTN_ZERO, 0, 0)
#define RWSP_MPFNI TORWSTYPE( PROC_MPFN, PRTN_IGNORE, 0, 0)
#define RWSP_KORD TORWSTYPE( PROC_KORD, PRTN_BOOL, 0, 0)
#define RWSP_KORDZ TORWSTYPE( PROC_KORD, PRTN_ZERO, 0, 0)
#define RWSP_KORDI TORWSTYPE( PROC_KORD, PRTN_IGNORE, 0, 0)
#define RWSP_KPFN TORWSTYPE( PROC_KPFN, PRTN_BOOL, 0, 0)
#define RWSP_KPFNZ TORWSTYPE( PROC_KPFN, PRTN_ZERO, 0, 0)
#define RWSP_KPFNI TORWSTYPE( PROC_KPFN, PRTN_IGNORE, 0, 0)
#define RWSP_CONV TORWSTYPE( PROC_CONV, PRTN_NA, 0, 0)
#define RWSP_CMD TORWSTYPE( PROC_CMD, PRTN_NA, 0, 0)
/****************************************************************************/
// == In-only Arguments ==
#define RWSI_ASIS TORWSTYPE( GIVE_ASIS, 0, GET_ASIS, 0)
#define RWSI_PSTR TORWSTYPE( GIVE_PSTR, 0, GET_ASIS, 0)
#define RWSI_PBUF TORWSTYPE( GIVE_PBUF, 0, GET_ASIS, 0)
#define RWSI_PPVOID TORWSTYPE( GIVE_PPVOID, 0, GET_ASIS, 0)
#define RWSI_PULONG TORWSTYPE( GIVE_PPVOID, 0, GET_ASIS, 0)
#define RWSI_OPATH TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_ASIS, 0)
#define RWSI_OFTITLE TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_ASIS, 0)
#define RWSI_OHNDL TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_ASIS, 0)
#define RWSI_OHWND TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_ASIS, 0)
#define RWSI_OPREC TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_ASIS, 0)
#define RWSI_SFTITLE TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_ASIS, 0)
#define RWSI_SHNDL TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_ASIS, 0)
#define RWSI_SPREC TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_ASIS, 0)
#define RWSI_CNAME TORWSTYPE( GIVE_CONV, CONV_CLSNAME, GET_ASIS, 0)
#define RWSI_COBJ TORWSTYPE( GIVE_CONV, CONV_CLSOBJ, GET_ASIS, 0)
#define RWSI_COPATH TORWSTYPE( GIVE_CONV, CONV_CLSOBJPATH, GET_ASIS, 0)
#define RWSI_COFTITLE TORWSTYPE( GIVE_CONV, CONV_CLSOBJFQTITLE,GET_ASIS, 0)
#define RWSI_COHNDL TORWSTYPE( GIVE_CONV, CONV_CLSOBJHNDL, GET_ASIS, 0)
#define RWSI_COHWND TORWSTYPE( GIVE_CONV, CONV_CLSOBJHWND, GET_ASIS, 0)
#define RWSI_COPREC TORWSTYPE( GIVE_CONV, CONV_CLSOBJPREC, GET_ASIS, 0)
#define RWSI_CSFTITLE TORWSTYPE( GIVE_CONV, CONV_CLSSHDFQTITLE,GET_ASIS, 0)
#define RWSI_CSHNDL TORWSTYPE( GIVE_CONV, CONV_CLSSHDHNDL, GET_ASIS, 0)
#define RWSI_CSPREC TORWSTYPE( GIVE_CONV, CONV_CLSSHDPREC, GET_ASIS, 0)
#define RWSI_SOMID TORWSTYPE( GIVE_CONV, CONV_SOMID, GET_ASIS, 0)
#define RWSI_SOMIDFREE TORWSTYPE( GIVE_CONV, CONV_SOMID, GET_ASIS, FREE_SOMMEM)
#define RWSI_SOMCLSMGR TORWSTYPE( GIVE_CONV, CONV_SOMCLSMGR, GET_ASIS, 0)
#define RWSI_POBJSTR TORWSTYPE( GIVE_COPYSTR, COPY_OBJMEM, GET_ASIS, 0)
#define RWSI_PSOMSTR TORWSTYPE( GIVE_COPYSTR, COPY_SOMMEM, GET_ASIS, 0)
#define RWSI_POBJBUF TORWSTYPE( GIVE_COPYBUF, COPY_OBJMEM, GET_ASIS, 0)
#define RWSI_PSOMBUF TORWSTYPE( GIVE_COPYBUF, COPY_SOMMEM, GET_ASIS, 0)
/****************************************************************************/
// == In/Out Arguments ==
#define RWSO_PPSTR TORWSTYPE( GIVE_PPVOID, 0, GET_PPSTR, 0)
#define RWSO_PPBUF TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, 0)
#define RWSO_PPBUFCNTRTN TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTRTN )
#define RWSO_PPBUFCNTARG1 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG1)
#define RWSO_PPBUFCNTARG2 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG2)
#define RWSO_PPBUFCNTARG3 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG3)
#define RWSO_PPBUFCNTARG4 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG4)
#define RWSO_PPBUFCNTARG5 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG5)
#define RWSO_PPBUFCNTARG6 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG6)
#define RWSO_PPBUFCNTARG7 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG7)
#define RWSO_PPBUFCNTARG8 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG8)
#define RWSO_PPBUFCNTARG9 TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTARG9)
#define RWSO_PPBUFCNTULONG TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTULONG)
#define RWSO_PPBUFCNTUSHORT TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTUSHORT)
#define RWSO_PPBUFCNTULZERO TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, COPY_CNTULZERO)
#define RWSO_PPSTROBJFREE TORWSTYPE( GIVE_PPVOID, 0, GET_PPSTR, FREE_OBJMEM)
#define RWSO_PPSTRSOMFREE TORWSTYPE( GIVE_PPVOID, 0, GET_PPSTR, FREE_SOMMEM)
#define RWSO_PPBUFOBJFREE TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, FREE_OBJMEM)
#define RWSO_PPBUFSOMFREE TORWSTYPE( GIVE_PPVOID, 0, GET_PPBUF, FREE_SOMMEM)
#define RWSO_OPATH TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJPATH)
#define RWSO_OFTITLE TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJFQTITLE)
#define RWSO_ONAME TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJNAME)
#define RWSO_OTITLE TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJTITLE)
#define RWSO_OHNDL TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJHNDL)
#define RWSO_OHWND TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJHWND)
#define RWSO_OPREC TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJPREC)
#define RWSO_OID TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJID)
#define RWSO_OFLDR TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJFLDR)
#define RWSO_OICON TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJICON)
#define RWSO_OMINI TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_OBJMINI)
#define RWSO_CICON TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_CLSICON)
#define RWSO_CMINI TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_CLSMINI)
#define RWSO_CNAME TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_CLSNAME)
#define RWSO_SOMID TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_SOMID)
#define RWSO_SOMIDFREE TORWSTYPE( GIVE_PPVOID, 0, GET_CONV, CONV_SOMID+FREE_SOMMEM)
/****************************************************************************/
// == Return ==
#define RWSR_ASIS TORWSTYPE( GIVE_VOID, 0, GET_ASIS, 0)
#define RWSR_VOID TORWSTYPE( GIVE_VOID, 0, GET_VOID, 0)
#define RWSR_OPATH TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJPATH)
#define RWSR_OFTITLE TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJFQTITLE)
#define RWSR_ONAME TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJNAME)
#define RWSR_OTITLE TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJTITLE)
#define RWSR_OHNDL TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJHNDL)
#define RWSR_OHWND TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJHWND)
#define RWSR_OPREC TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJPREC)
#define RWSR_OID TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJID)
#define RWSR_OFLDR TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJFLDR)
#define RWSR_OICON TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJICON)
#define RWSR_OMINI TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_OBJMINI)
#define RWSR_CICON TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_CLSICON)
#define RWSR_CMINI TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_CLSMINI)
#define RWSR_CNAME TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_CLSNAME)
#define RWSR_SOMID TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_SOMID)
#define RWSR_SOMIDFREE TORWSTYPE( GIVE_VOID, 0, GET_CONV, CONV_SOMID+FREE_SOMMEM)
#define RWSR_COPYICON TORWSTYPE( GIVE_VOID, 0, GET_COPYICON, 0)
#define RWSR_COPYMINI TORWSTYPE( GIVE_VOID, 0, GET_COPYMINI, 0)
#define RWSR_PSTR TORWSTYPE( GIVE_VOID, 0, GET_PSTR, 0)
#define RWSR_PBUF TORWSTYPE( GIVE_VOID, 0, GET_PBUF, 0)
#define RWSR_PBUFCNTARG1 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG1)
#define RWSR_PBUFCNTARG2 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG2)
#define RWSR_PBUFCNTARG3 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG3)
#define RWSR_PBUFCNTARG4 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG4)
#define RWSR_PBUFCNTARG5 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG5)
#define RWSR_PBUFCNTARG6 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG6)
#define RWSR_PBUFCNTARG7 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG7)
#define RWSR_PBUFCNTARG8 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG8)
#define RWSR_PBUFCNTARG9 TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTARG9)
#define RWSR_PBUFCNTULONG TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTULONG)
#define RWSR_PBUFCNTUSHORT TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTUSHORT)
#define RWSR_PBUFCNTULZERO TORWSTYPE( GIVE_VOID, 0, GET_PBUF, COPY_CNTULZERO)
#define RWSR_PPSTR TORWSTYPE( GIVE_VOID, 0, GET_PPSTR, 0)
#define RWSR_PPBUF TORWSTYPE( GIVE_VOID, 0, GET_PPBUF, 0)
#define RWSR_PSTROBJFREE TORWSTYPE( GIVE_VOID, 0, GET_PSTR, FREE_OBJMEM)
#define RWSR_PBUFOBJFREE TORWSTYPE( GIVE_VOID, 0, GET_PBUF, FREE_OBJMEM)
#define RWSR_PPSTROBJFREE TORWSTYPE( GIVE_VOID, 0, GET_PPSTR, FREE_OBJMEM)
#define RWSR_PPBUFOBJFREE TORWSTYPE( GIVE_VOID, 0, GET_PPBUF, FREE_OBJMEM)
#define RWSR_PSTRSOMFREE TORWSTYPE( GIVE_VOID, 0, GET_PSTR, FREE_SOMMEM)
#define RWSR_PBUFSOMFREE TORWSTYPE( GIVE_VOID, 0, GET_PBUF, FREE_SOMMEM)
#define RWSR_PPSTRSOMFREE TORWSTYPE( GIVE_VOID, 0, GET_PPSTR, FREE_SOMMEM)
#define RWSR_PPBUFSOMFREE TORWSTYPE( GIVE_VOID, 0, GET_PPBUF, FREE_SOMMEM)
/****************************************************************************/
// == Data Conversion ==
#define RWSC_OPATH_OBJ TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_ASIS, 0)
#define RWSC_OPATH_OTITLE TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJTITLE)
#define RWSC_OPATH_OHNDL TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJHNDL)
#define RWSC_OPATH_OHWND TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJHWND)
#define RWSC_OPATH_OPREC TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJPREC)
#define RWSC_OPATH_OID TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJID)
#define RWSC_OPATH_OICON TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJICON)
#define RWSC_OPATH_OMINI TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_OBJMINI)
#define RWSC_OPATH_CLASS TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_CLSOBJ)
#define RWSC_OPATH_CNAME TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_CLSNAME)
#define RWSC_OPATH_CICON TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_CLSICON)
#define RWSC_OPATH_CMINI TORWSTYPE( GIVE_CONV, CONV_OBJPATH, GET_CONV, CONV_CLSMINI)
#define RWSC_OFTITLE_OBJ TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_ASIS, 0)
#define RWSC_OFTITLE_ONAME TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJNAME)
#define RWSC_OFTITLE_OHNDL TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJHNDL)
#define RWSC_OFTITLE_OHWND TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJHWND)
#define RWSC_OFTITLE_OPREC TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJPREC)
#define RWSC_OFTITLE_OID TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJID)
#define RWSC_OFTITLE_OICON TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJICON)
#define RWSC_OFTITLE_OMINI TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_OBJMINI)
#define RWSC_OFTITLE_CLASS TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_CLSOBJ)
#define RWSC_OFTITLE_CNAME TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_CLSNAME)
#define RWSC_OFTITLE_CICON TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_CLSICON)
#define RWSC_OFTITLE_CMINI TORWSTYPE( GIVE_CONV, CONV_OBJFQTITLE, GET_CONV, CONV_CLSMINI)
#define RWSC_OHNDL_OBJ TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_ASIS, 0)
#define RWSC_OHNDL_OPATH TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJPATH)
#define RWSC_OHNDL_OFTITLE TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_OHNDL_ONAME TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJNAME)
#define RWSC_OHNDL_OTITLE TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJTITLE)
#define RWSC_OHNDL_OHWND TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJHWND)
#define RWSC_OHNDL_OPREC TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJPREC)
#define RWSC_OHNDL_OID TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJID)
#define RWSC_OHNDL_OFLDR TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJFLDR)
#define RWSC_OHNDL_OICON TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJICON)
#define RWSC_OHNDL_OMINI TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_OBJMINI)
#define RWSC_OHNDL_CLASS TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_CLSOBJ)
#define RWSC_OHNDL_CNAME TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_CLSNAME)
#define RWSC_OHNDL_CICON TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_CLSICON)
#define RWSC_OHNDL_CMINI TORWSTYPE( GIVE_CONV, CONV_OBJHNDL, GET_CONV, CONV_CLSMINI)
#define RWSC_OHWND_OBJ TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_ASIS, 0)
#define RWSC_OHWND_OPATH TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJPATH)
#define RWSC_OHWND_OFTITLE TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_OHWND_ONAME TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJNAME)
#define RWSC_OHWND_OTITLE TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJTITLE)
#define RWSC_OHWND_OHNDL TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJHNDL)
#define RWSC_OHWND_OPREC TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJPREC)
#define RWSC_OHWND_OID TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJID)
#define RWSC_OHWND_OFLDR TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJFLDR)
#define RWSC_OHWND_OICON TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJICON)
#define RWSC_OHWND_OMINI TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_OBJMINI)
#define RWSC_OHWND_CLASS TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_CLSOBJ)
#define RWSC_OHWND_CNAME TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_CLSNAME)
#define RWSC_OHWND_CICON TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_CLSICON)
#define RWSC_OHWND_CMINI TORWSTYPE( GIVE_CONV, CONV_OBJHWND, GET_CONV, CONV_CLSMINI)
#define RWSC_OPREC_OBJ TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_ASIS, 0)
#define RWSC_OPREC_OPATH TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJPATH)
#define RWSC_OPREC_OFTITLE TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_OPREC_ONAME TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJNAME)
#define RWSC_OPREC_OTITLE TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJTITLE)
#define RWSC_OPREC_OHNDL TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJHNDL)
#define RWSC_OPREC_OHWND TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJHWND)
#define RWSC_OPREC_OID TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJID)
#define RWSC_OPREC_OFLDR TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJFLDR)
#define RWSC_OPREC_OICON TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJICON)
#define RWSC_OPREC_OMINI TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_OBJMINI)
#define RWSC_OPREC_CLASS TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_CLSOBJ)
#define RWSC_OPREC_CNAME TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_CLSNAME)
#define RWSC_OPREC_CICON TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_CLSICON)
#define RWSC_OPREC_CMINI TORWSTYPE( GIVE_CONV, CONV_OBJPREC, GET_CONV, CONV_CLSMINI)
#define RWSC_SFTITLE_OBJ TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_ASIS, 0)
#define RWSC_SFTITLE_OPATH TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJPATH)
#define RWSC_SFTITLE_OFTITLE TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_SFTITLE_ONAME TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJNAME)
#define RWSC_SFTITLE_OHNDL TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJHNDL)
#define RWSC_SFTITLE_OHWND TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJHWND)
#define RWSC_SFTITLE_OPREC TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJPREC)
#define RWSC_SFTITLE_OID TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJID)
#define RWSC_SFTITLE_OFLDR TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJFLDR)
#define RWSC_SFTITLE_OICON TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJICON)
#define RWSC_SFTITLE_OMINI TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_OBJMINI)
#define RWSC_SFTITLE_CLASS TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_CLSOBJ)
#define RWSC_SFTITLE_CNAME TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_CLSNAME)
#define RWSC_SFTITLE_CICON TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_CLSICON)
#define RWSC_SFTITLE_CMINI TORWSTYPE( GIVE_CONV, CONV_SHDFQTITLE, GET_CONV, CONV_CLSMINI)
#define RWSC_SHNDL_OBJ TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_ASIS, 0)
#define RWSC_SHNDL_OPATH TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJPATH)
#define RWSC_SHNDL_OFTITLE TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_SHNDL_ONAME TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJNAME)
#define RWSC_SHNDL_OTITLE TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJTITLE)
#define RWSC_SHNDL_OHNDL TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJHNDL)
#define RWSC_SHNDL_OHWND TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJHWND)
#define RWSC_SHNDL_OPREC TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJPREC)
#define RWSC_SHNDL_OID TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJID)
#define RWSC_SHNDL_OFLDR TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJFLDR)
#define RWSC_SHNDL_OICON TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJICON)
#define RWSC_SHNDL_OMINI TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_OBJMINI)
#define RWSC_SHNDL_CLASS TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_CLSOBJ)
#define RWSC_SHNDL_CNAME TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_CLSNAME)
#define RWSC_SHNDL_CICON TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_CLSICON)
#define RWSC_SHNDL_CMINI TORWSTYPE( GIVE_CONV, CONV_SHDHNDL, GET_CONV, CONV_CLSMINI)
#define RWSC_SPREC_OBJ TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_ASIS, 0)
#define RWSC_SPREC_OPATH TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJPATH)
#define RWSC_SPREC_OFTITLE TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_SPREC_ONAME TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJNAME)
#define RWSC_SPREC_OTITLE TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJTITLE)
#define RWSC_SPREC_OHNDL TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJHNDL)
#define RWSC_SPREC_OHWND TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJHWND)
#define RWSC_SPREC_OPREC TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJPREC)
#define RWSC_SPREC_OID TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJID)
#define RWSC_SPREC_OFLDR TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJFLDR)
#define RWSC_SPREC_OICON TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJICON)
#define RWSC_SPREC_OMINI TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_OBJMINI)
#define RWSC_SPREC_CLASS TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_CLSOBJ)
#define RWSC_SPREC_CNAME TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_CLSNAME)
#define RWSC_SPREC_CICON TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_CLSICON)
#define RWSC_SPREC_CMINI TORWSTYPE( GIVE_CONV, CONV_SHDPREC, GET_CONV, CONV_CLSMINI)
#define RWSC_PREV_OPATH TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJPATH)
#define RWSC_PREV_OFTITLE TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_PREV_ONAME TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJNAME)
#define RWSC_PREV_OTITLE TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJTITLE)
#define RWSC_PREV_OHNDL TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJHNDL)
#define RWSC_PREV_OHWND TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJHWND)
#define RWSC_PREV_OPREC TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJPREC)
#define RWSC_PREV_OID TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJID)
#define RWSC_PREV_OFLDR TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJFLDR)
#define RWSC_PREV_OICON TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJICON)
#define RWSC_PREV_OMINI TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_OBJMINI)
#define RWSC_PREV_CLASS TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_CLSOBJ)
#define RWSC_PREV_CNAME TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_CLSNAME)
#define RWSC_PREV_CICON TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_CLSICON)
#define RWSC_PREV_CMINI TORWSTYPE( GIVE_CONV, CONV_PREVIOUS, GET_CONV, CONV_CLSMINI)
#define RWSC_OBJ_OPATH TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJPATH)
#define RWSC_OBJ_OFTITLE TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJFQTITLE)
#define RWSC_OBJ_ONAME TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJNAME)
#define RWSC_OBJ_OTITLE TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJTITLE)
#define RWSC_OBJ_OHNDL TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJHNDL)
#define RWSC_OBJ_OHWND TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJHWND)
#define RWSC_OBJ_OPREC TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJPREC)
#define RWSC_OBJ_OID TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJID)
#define RWSC_OBJ_OFLDR TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJFLDR)
#define RWSC_OBJ_OICON TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJICON)
#define RWSC_OBJ_OMINI TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_OBJMINI)
#define RWSC_OBJ_CLASS TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSOBJ)
#define RWSC_OBJ_CNAME TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSNAME)
#define RWSC_OBJ_CICON TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSICON)
#define RWSC_OBJ_CMINI TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSMINI)
#define RWSC_CLASS_CNAME TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSNAME)
#define RWSC_CLASS_CICON TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSICON)
#define RWSC_CLASS_CMINI TORWSTYPE( GIVE_ASIS, 0, GET_CONV, CONV_CLSMINI)
#define RWSC_CNAME_CLASS TORWSTYPE( GIVE_CONV, CONV_CLSNAME, GET_ASIS, 0)
#define RWSC_CNAME_CICON TORWSTYPE( GIVE_CONV, CONV_CLSNAME, GET_CONV, CONV_CLSICON)
#define RWSC_CNAME_CMINI TORWSTYPE( GIVE_CONV, CONV_CLSNAME, GET_CONV, CONV_CLSMINI)
#define RWSC_NULL_SOMCLSMGR TORWSTYPE( GIVE_CONV, CONV_SOMCLSMGR, GET_ASIS, 0)
#define RWSC_ADDR_PSTR TORWSTYPE( GIVE_ASIS, 0, GET_PSTR, 0)
#define RWSC_ADDR_PBUF TORWSTYPE( GIVE_ASIS, 0, GET_PBUF, 0)
/****************************************************************************/
#ifdef __cplusplus
}
#endif
#endif // RWS_H_INCLUDED
/****************************************************************************/