File: rws.h

package info (click to toggle)
wine-gecko-2.24 2.24%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 740,092 kB
  • ctags: 688,789
  • sloc: cpp: 3,160,639; ansic: 1,619,153; python: 164,084; java: 128,022; asm: 114,527; xml: 69,863; sh: 55,281; makefile: 49,648; perl: 20,454; objc: 2,344; yacc: 2,066; pascal: 995; lex: 982; exp: 449; php: 244; lisp: 228; awk: 211; sed: 61; csh: 21; ada: 16; ruby: 3
file content (756 lines) | stat: -rw-r--r-- 42,953 bytes parent folder | download | duplicates (7)
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
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/****************************************************************************/
/* RWS - beta version 0.80                                                  */
/****************************************************************************/

// RWS.H
// Remote Workplace Server - main header

/****************************************************************************/

#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

/****************************************************************************/