/*
 * vaproto.h
 *
 * project: venus
 *
 * author: stefan eissing
 *
 * description: definition of the Venus <-> accessory protcol
 *
 * last change: 28.09.1990
 */

#ifndef __vaproto__
#define __vaproto__

/* message numbers for the XACC protocol by Konrad Hinsen
 * Gemini supports XACC level 0. These are not needed for
 * the Venus-Acc. protocol.
 */
#define ACC_ID		0x400
#define ACC_OPEN	0x401
#define ACC_CLOSE	0x402
#define ACC_ACC		0x403

/* message number for communication between Venus and accessories.
 * if file or pathnames are used in these messages you got to
 * give absolute names (including drive letter), all letters need
 * to be upper case. Pathnames always terminate with a backslash!
 *
 * messages from Venus start with VA
 * message to Venus start with AV
 *
 * AV_PROTOKOLL can be used by accessories to ask which messages
 * are supported by the main application (there are differences
 * between Gemini and Venus). It would be fine if other GEM
 * application would also support this protocol. At least,
 * AV_SENDKEY is easy to implement and very useful!
 */

/* AV_PROTOKOLL: message to ask which messages are supported.
 * If you get no answer, the protocol isn't supported at all.
 */
#define AV_PROTOKOLL		0x4700
/*
 * Word 6+7: pointer to the name of the accessory. This name
 *           has to be 8 chars long and nullterminated (like
 *           it is neccessary for appl_find())
 * The meaning of the bits in the words 3, 4 and 5 is:
 * Word 3:
 * Bit 0:		(VA_SETSTATUS)
 * Bit 1:		(VA_START)
 * All other bits are reserved for future extension and should
 * therefore be set to zero. This is also neede for the bits
 * in word 4 and 5.
 */
 
/* VA_PROTOSTATUS: answer to AV_PROTKOLL. Words 3 to 7 contain
 * information which features are supported. If a feature is
 * supported the according bit is set to 1.
 */
#define VA_PROTOSTATUS		0x4701
/*
 * Word 6+7: pointer to the name of the application (8 chars long,
 *           nullterminated, like appl_find() needs it.
 * The meaning of the bits in the words 3, 4 and 5 is:
 * Word 3:
 * Bit 0		(AV_SENDKEY)
 * Bit 1		(AV_ASKFILEFONT)
 * Bit 2		(AV_ASKCONFONT, AV_OPENCONSOLE)
 * Bit 3		(AV_ASKOBJECT)
 * Bit 4		(AV_OPENWIND)
 * Bit 5		(AV_STARTPROG)
 * Bit 6		(AV_ACCWINDOPEN, AV_ACCWINDCLOSED)
 * Bit 7		(AV_STATUS, AV_GETSTATUS)
 * All other bits are reserved for future extension and should
 * therefore be set to zero. This is also neede for the bits
 * in word 4 and 5.
 *
 * AV_SENDKEY is very easy to support. Still interested? Read on.
 */

/* AV_GETSTATUS: An accessory may ask for the status which it has
 * given the application via AV_STATUS.
 */
#define AV_GETSTATUS		0x4703

/* AV_STATUS: An accessory can tell the main application its status.
 * This status can be saved by the main application and restored
 * if the program is started again. An accessory may then ask with
 * AV_GETSTATUS for its status. Of course it has to knock with
 * AV_PROTOKOLL first!
 * Word 3+4: pointer to a string which contains no control
 *           sequences and must not be longer than 256 chars.
 *           This pointer may be NULL (0L).
 */
#define AV_STATUS			0x4704

/* VA_SETSTATUS: The main application tells the accessory its
 * saved state which was requested by AV_GETSTATUS.
 * Word 3+4: pointer to a string which contains no control
 *           sequences and must not be longer than 256 chars.
 *           This pointer may be NULL (0L).
 */
#define VA_SETSTATUS		0x4705

/* AV_SENDKEY: An accessory send a keyboard event to the main
 * application. If an accessory doesn't use a certain key it
 * sould inform the main application about it. (menu shortcuts
 * can be active when an accessory window it on top)
 * Word 3 = keyboard state (Shift, Alternate)   ev_mmokstate
 * Word 4 = scan- and ascii-code                ev_mkreturn
 */
#define	AV_SENDKEY			0x4710

/* VA_START: Accessory will be activated (should be treated like
 * AC_OPEN). Word 3+4 contains an pointer to a commandline and
 * may be NULL. The commandline usually contains file and pathnames.
 */
#define VA_START			0x4711

/* AV_ASKFILEFONT: Asks for the font used in file windows.
 */
#define AV_ASKFILEFONT		0x4712

/* VA_FILEFONT: Returns the font used in file windows.
 * Word 3 = font number (font id)
 * Word 4 = font size (in points)
 */
#define VA_FILEFONT			0x4713

/* AV_ASKCONFONT: Asks for the font used in the console window.
 */
#define AV_ASKCONFONT		0x4714

/* VA_CONFONT: Returns the font used in the console window.
 * Word 3 = font number      (font id)
 * Word 4 = font size        (in points)
 */
#define VA_CONFONT			0x4715

/* AV_ASKOBJECT: Asks for the names of the selected objects. If
 * no object is selected, the empty string is returned. If more
 * than one obects is selected, the names are separated by spaces.
 */
#define AV_ASKOBJECT	0x4716

/* VA_OBJECT: Returns the name of the selected objects. Words 3+4
 * contain a pointer to the string.
 */
#define VA_OBJECT		0x4717

/* AV_OPENCONSOLE: Gemini should open the console window.
 * If it is already open, it is made the top window.
 * Should only be used if transparent to the user!
 */
#define AV_OPENCONSOLE	0x4718

/* VA_CONSOLEOPEN: Returns if the console window could be opended.
 * Word 3 == 0 (no) != 0 (yes)
 */
#define VA_CONSOLEOPEN	0x4719

/* AV_OPENWIND: The application should open a window. The path for
 * the window and a wildcard is given. Instead of opening a window
 * a program can also open the file selector with the given path
 * and wildcard.
 * Word 3+4 (Pointer) window path
 * Word 5+6 (Pointer) wildcard used to display files
 */
#define AV_OPENWIND		0x4720

/* VA_WINDOPEN: Returns if the window could be opened.
 * values as in VA_CONSOLEOPEN
 */
#define VA_WINDOPEN		0x4721

/* AV_STARTPROG: The main application should start a program.
 * Gemini/Venus also takes installed applications into accout.
 * So you can open any file with this message, Gemini will start
 * the proper application.
 * Word 3+4 (Pointer) filename (absolute path)
 * Word 5+6 (Pointer) commandline (maybe NULL)
 */
#define AV_STARTPROG	0x4722

/* VA_PROGSTART: Returns if the program could be started.
 * Word 3 == 0: no, != 0 yes
 */
#define VA_PROGSTART	0x4723

/* AV_ACCWINDOPEN: An accessory informs the application that it
 * has opened a window.
 * Word 3: AES-handle of the opened window.
 */
#define AV_ACCWINDOPEN	0x4724

/* VA_DRAGACCWIND: The application reports that someone has dragged
 * an object into the accessory window. Works only if the 
 * application knows via AV_ACCWINDOPEN about this window
 * Word 3   AES-handle of the window
 * Word 4   X-position of mouse cursor
 * Word 5   Y-position of mouse cursor
 * Word 6+7 pointer to a string containing the names of the objects.
 */
#define VA_DRAGACCWIND	0x4725

/* AV_ACCWINDCLOSED: The accessory reports that it has closed a
 * window. 
 * Word 3   AES-handle of the window
 */
#define AV_ACCWINDCLOSED	0x4726

#endif