1/* -*- mode: C; coding: macintosh; -*- (nowrap)
2 * ###################################################################
3 *  tclAE - AppleEvent extension for Tcl
4 *
5 *  FILE: "tclAEInt.h"
6 *                                    created: 8/20/1999 {9:28:03 PM}
7 *                                last update: 2/6/04 {11:54:51 PM}
8 *  Author: Jonathan Guyer
9 *  E-mail: jguyer@his.com
10 *    mail: POMODORO no seisan
11 *     www: http://www.his.com/~jguyer/
12 *
13 * ========================================================================
14 *               Copyright � 1999-2000 Jonathan Guyer
15 * ========================================================================
16 * Permission to use, copy, modify, and distribute this software and its
17 * documentation for any purpose and without fee is hereby granted,
18 * provided that the above copyright notice appear in all copies and that
19 * both that the copyright notice and warranty disclaimer appear in
20 * supporting documentation.
21 *
22 * Jonathan Guyer disclaims all warranties with regard to this software,
23 * including all implied warranties of merchantability and fitness.  In
24 * no event shall Jonathan Guyer be liable for any special, indirect or
25 * consequential damages or any damages whatsoever resulting from loss of
26 * use, data or profits, whether in an action of contract, negligence or
27 * other tortuous action, arising out of or in connection with the use or
28 * performance of this software.
29 * ========================================================================
30 *  Description:
31 *
32 *  History
33 *
34 *  modified   by  rev reason
35 *  ---------- --- --- -----------
36 *  8/20/1999  JEG 1.0 original
37 * ###################################################################
38 */
39
40#pragma once
41
42#ifndef _TCLAE_INT
43#define _TCLAE_INT
44
45#if TARGET_API_MAC_OSX
46#define TCLAE_NO_EPPC
47#endif
48
49#ifdef TCLAE_USE_FRAMEWORK_INCLUDES
50#include <Carbon/Carbon.h>
51#else
52#include <AppleEvents.h>
53#if !defined(TCLAE_NO_EPPC) || defined(TCLAE_CW)
54#include <EPPC.h>
55#endif
56#endif
57
58#include "tclAE.h"
59
60typedef struct cmd_return {
61	int     status;
62	Tcl_Obj *object;
63} CmdReturn;
64
65/* global storing the macRoman Tcl_Encoding */
66extern Tcl_Encoding tclAE_macRoman_encoding;
67
68/* Build commands */
69
70int         Tclae_BuildCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
71int         Tclae_SendCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
72
73/* Handler commands */
74
75int			Tclae_GetCoercionHandlerCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
76int			Tclae_GetEventHandlerCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
77int			Tclae_InstallCoercionHandlerCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
78int			Tclae_InstallEventHandlerCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
79int			Tclae_RemoveCoercionHandlerCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
80int			Tclae_RemoveEventHandlerCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
81
82OSErr		TclaeErrorCodeFromInterp(Tcl_Interp *interp);
83int			TclaeInitEventHandlers(Tcl_Interp *interp);
84void		TclaeInitCoercionHandlers(Tcl_Interp *interp);
85AEReturnID	TclaeRegisterQueueHandler(Tcl_Interp *interp, Tcl_Obj *replyHandlerProc);
86
87/* Address commands */
88
89int         Tclae_LaunchCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
90int         Tclae_ProcessesCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
91int         Tclae_RemoteProcessResolverGetProcessesCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
92int         Tclae_IPCListPortsCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
93int         Tclae_PPCBrowserCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
94int			Tclae_GetAEAddressDescFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, AEAddressDesc **addressDescPtr);
95#if TARGET_API_MAC_CARBON
96int         Tclae_GetPOSIXPathCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
97int         Tclae_GetHFSPathCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
98#endif // TARGET_API_MAC_CARBON
99
100void            TclaeInitAEAddresses();
101CmdReturn*      TclaeParse( Tcl_Interp *interp, register AEDesc *desc, Tcl_Obj *parentPtr );
102
103/* AEDesc objects */
104
105void		TclaeInitAEDescs();
106
107Tcl_Obj *	Tclae_NewAEDescObj(AEDesc *descPtr);
108Tcl_Obj *	Tclae_NewConstAEDescObj(const AEDesc *descPtr);
109Tcl_Obj *	Tclae_NewAEDescRefObj(AEDesc *descPtr);
110Tcl_Obj *	Tclae_NewConstAEDescRefObj(const AEDesc *descPtr);
111int			Tclae_GetAEDescObjFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Tcl_Obj **descObjHdl, int parseGizmo);
112int			Tclae_GetAEDescFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr,	AEDesc **descPtr, int parseGizmo);
113int			Tclae_GetConstAEDescFromObj(Tcl_Interp *interp,	Tcl_Obj *objPtr, const AEDesc **descPtr, int parseGizmo);
114int		Tclae_ConvertToAEDesc(Tcl_Interp *interp, Tcl_Obj *objPtr);
115
116void	TclaeUpdateStringOfAEDesc(Tcl_Obj *objPtr);
117
118void		TclaeDetachAEDescObj(Tcl_Obj *obj);
119
120/* AEDesc commands */
121
122int         Tclae_CoerceDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
123int         Tclae_CoerceDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
124int         Tclae_CountItemsCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
125int         Tclae_CreateDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
126int         Tclae_CreateListCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
127int         Tclae_DeleteItemCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
128int         Tclae_DeleteKeyDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
129int         Tclae_DuplicateDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
130int         Tclae_GetAttributeDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
131int         Tclae_GetAttributeDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
132int         Tclae_GetDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
133int			Tclae_GetDescTypeCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
134int         Tclae_GetKeyDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
135int         Tclae_GetKeyDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
136int         Tclae_GetNthDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
137int         Tclae_GetNthDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
138int         Tclae_PutDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
139int         Tclae_PutDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
140int         Tclae_PutKeyDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
141int         Tclae_PutKeyDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
142int         Tclae_ReplaceDescDataCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
143int         Tclae_SetDescTypeCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
144
145int         Tclae__GetAEDescCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
146
147
148CmdReturn*  TclaeCoerceDesc(Tcl_Interp *interp, AEDesc *fromAEDesc, Tcl_Obj *toTypeObjPtr);
149void*		TclaeDataFromObj(Tcl_Interp* interp, OSType typeCode, Tcl_Obj* dataObjPtr, Size* dataSizePtr);
150int			TclaeGetAttributeDesc(Tcl_Interp *interp, Tcl_Obj *theAppleEventObjPtr, Tcl_Obj *theAttributeObjPtr, Tcl_Obj *theDesiredTypeObjPtr, AEDesc *keyAEDescPtr);
151int         TclaeGetKeyDesc(Tcl_Interp *interp, Tcl_Obj *theAERecordObjPtr, Tcl_Obj *theAEKeywordObjPtr, Tcl_Obj *theDesiredTypeObjPtr, AEDesc *keyAEDescPtr);
152int         TclaeGetNthDesc(Tcl_Interp *interp, Tcl_Obj *theAEDescListObjPtr, Tcl_Obj *theIndexObjPtr, Tcl_Obj *theDesiredTypeObjPtr, Tcl_Obj *theKeywordVarObjPtr,	AEDesc *nthAEDescPtr);
153OSType      TclaeGetOSTypeFromObj(Tcl_Obj *objPtr);
154Tcl_Obj*    TclaeNewOSTypeObj(OSType theOSType);
155int         TclaePrint(Tcl_Interp *interp, AEDesc *inAEDescPtr);
156int         TclaePutDesc(Tcl_Interp *interp, Tcl_Obj *theAEDescListObjPtr, Tcl_Obj *theIndexObjPtr, AEDesc *nthAEDescPtr);
157int         TclaePutKeyDesc(Tcl_Interp *interp, Tcl_Obj *theAERecordObjPtr, Tcl_Obj *theAEKeywordObjPtr, AEDesc *keyAEDescPtr);
158CmdReturn * TclaeDataFromAEDesc(Tcl_Interp *interp, const AEDesc *theAEDescPtr, Tcl_Obj *desiredTypePtr, Tcl_Obj *typeCodeVarPtr);
159
160Size		TclaeGetDescDataSize(const AEDesc * theAEDesc);
161OSErr		TclaeGetDescData(const AEDesc *theAEDesc, void *dataPtr, Size maximumSize);
162void *		TclaeAllocateAndGetDescData(const AEDesc *theAEDesc, Size *sizePtr);
163
164/* Object commands */
165
166int         Tclae_SetObjectCallbacksCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
167int         Tclae_ResolveCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
168int         Tclae_CallObjectAccessorCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
169int         Tclae_GetObjectAccessorCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
170int         Tclae_InstallObjectAccessorCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
171int         Tclae_RemoveObjectAccessorCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
172int         Tclae_DisposeTokenCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
173
174void		TclaeInitObjectAccessors(Tcl_Interp *interp);
175
176#endif /* _TCLAE_INT */
177