The window-oriented drawing functions in the AES
================================================

Formatting:	Tab width 5

Andreas Kromke
22.2.97
English translation: Peter West, April 99.


How do I recogise whether the functions are present?
====================================================

Currently you can't.


General
-------

The functions present since  MagiC 5.10:

	objc_wdraw()
	objc_wchange()
	graf_wwatchbox()
	form_wbutton()
	form_wkeybd()
	objc_wedit()

correspond to the respective equivalents

	objc_draw()
	objc_change()
	graf_watchbox()
	form_button()
	form_keybd()
	objc_edit()

with the difference that the drawing functions are restricted to the 
visible part of a window, i.e. that the objects to be drawn are 
positioned within a window (also window #0 = desktop).
For this a window handle is passed in addition to the known parameters.
These functions are required, for instance, for the background 
servicing of window dialogs.


Draw object(tree)
-----------------

Prototype:
		void objc_wdraw(
			OBJECT *tree,
			WORD object,
			WORD	depth,
			GRECT *clip,
			WORD windowhandle
			);

Call:
		contrl[0] = 60			function number
		contrl[1] = 3			entries in intin
		contrl[2] = 0			entries in intout
		contrl[3] = 2			entries in addrin
		contrl[4] = 0			entries in addrout

		intin[0] = object		as for objc_draw()
		intin[1] = depth		as for objc_draw()
		intin[2] = windowhandle	window

		addrin[0] = tree		as for objc_draw()
		addrin[1] = clip		NULL => whole window


Alter object status and redraw object
-------------------------------------

Prototype:
		void objc_wchange(
			OBJECT *tree,
			WORD object,
			WORD	newstate,
			GRECT *clip,
			WORD windowhandle
			);

Call:
		contrl[0] = 61			function number
		contrl[1] = 3			entries in intin
		contrl[2] = 0			entries in intout
		contrl[3] = 2			entries in addrin
		contrl[4] = 0			entries in addrout

		intin[0] = object		as for objc_change
		intin[1] = newstate		as for objc_change
		intin[2] = windowhandle	window

		addrin[0] = tree		as for objc_change()
		addrin[1] = clip		NULL => whole window

This call is equivalent to objc_change() without a redraw followed by
objc_wdraw().


Service button in window
------------------------

Prototype:
		WORD graf_wwatchbox(
			OBJECT *tree,
			WORD object,
			WORD instate,
			WORD outstate,
			WORD windowhandle
			);

Call:
		contrl[0] = 62			function number
		contrl[1] = 4			entries in intin
		contrl[2] = 1			entries in intout
		contrl[3] = 1			entries in addrin
		contrl[4] = 0			entries in addrout

		intin[0] = object		as for graf_watchbox().
		intin[1] = instate		as for graf_watchbox().
		intin[2] = outstate		as for graf_watchbox().
		intin[3] = windowhandle	window

		addrin[0] = tree		as for graf_watchbox()

		intout[0]				as for graf_watchbox()


Service button event for window dialogs
---------------------------------------

Prototype:
	WORD form_wbutton(
			OBJECT *tree,
			WORD object,
			WORD nclicks,
			WORD *nextob,
			WORD windowhandle
			);

Call:
		contrl[0] = 63			function number
		contrl[1] = 3			entries in intin
		contrl[2] = 2			entries in intout
		contrl[3] = 1			entries in addrin
		contrl[4] = 0			entries in addrout

		intin[0] = object		as for form_button()
		intin[1] = nclicks		as for form_button()
		intin[2] = windowhandle	window

		addrin[0] = tree		as for form_button()

		intout[0]				as for form_button()
		intout[1] = nextob		as for form_button()


Service keyboard event for window dialogs
-----------------------------------------

Prototype:
	WORD form_wkeybd(
			OBJECT *tree,
			WORD object,
			WORD nextob,
			WORD ichar,
			WORD *onextob,
			WORD *ochar,
			WORD windowhandle
			);

Call:
		contrl[0] = 64			function number
		contrl[1] = 3			entries in intin
		contrl[2] = 3			entries in intout
		contrl[3] = 1			entries in addrin
		contrl[4] = 0			entries in addrout

		intin[0] = object		as for form_keybd()
		intin[1] = ichar		as for form_keybd()
		intin[2] = nextob		as for form_keybd()
		intin[3] = windowhandle	window

		addrin[0] = tree		as for form_keybd()

		intout[0]				as for form_keybd()
		intout[1] = onextob		as for form_keybd()
		intout[2] = ochar		as for form_keybd()


Text field input for window dialogs
-----------------------------------

Prototype:
	WORD objc_wedit(
			OBJECT *tree,
			WORD object,
			WORD edchar,
			WORD *didx,
			WORD kind,
			WORD	windowhandle
			);

Call:
		contrl[0] = 65			function number
		contrl[1] = 5			entries in intin
		contrl[2] = 2			entries in intout
		contrl[3] = 1			entries in addrin
		contrl[4] = 0			entries in addrout

		intin[0] = object		as for objc_edit()
		intin[1] = edchar		as for objc_edit()
		intin[2] = *didx		as for objc_edit()
		intin[3] = kind		as for objc_edit()
		intin[4] = windowhandle	window

		addrin[0] = tree		as for objc_edit()

		intout[0]				as for objc_edit()
		intout[1] = *didx		as for objc_edit()

