/*
 *  WIND_GET					(C) Digital Design 1993
 *
 *  Erfragen von Fensterparametern.
 *  Fr jedes Fenster k”nnen die Elemente der Rechteckliste, die Gr”že
 *  des Fensters sowie die Gr”že und Position des horizontalen und
 *  vertikalen Schiebers erfragt werden.
 */
#include <gemdefs.h>
#include <stdarg.h>

typedef int *INTP;

int wind_get( int wi_ghandle, int wi_gfield, ...
	      /* int *wi_gw1, int *wi_gw2, int *wi_gw3, int *wi_gw4 */ )
{
  va_list ap;

  intin[0] = wi_ghandle; /* Window Handle des Fensters, dessen		*
			  * Parameter erfragt werden sollen.		*/
  intin[1] = wi_gfield; /* gibt an, welche Informationen erfragt werden *
			 * sollen:					*
			 *						*
			 * 4 (WF_WORKXYWH): Die Koordinaten des		*
			 * Arbeitsbereichs eines Fensters werden	*
			 * ausgegeben:					*
			 *     *wi_gw1 = X-Koordinate			*
			 *     *wi_gw2 = Y-Koordinate			*
			 *     *wi_gw3 = Breite 			*
			 *     *wi_gw4 = H”he				*
			 *						*
			 * 5 (WF_CURRXYWH): Die Koordinaten der		*
			 * Gesamtgr”že des Fensters einschliežlich	*
			 * R„nder, Titelzeile und Informationszeile	*
			 * werden ausgegeben:				*
			 *     *wi_gw1 = X-Koordinate			*
			 *     *wi_gw2 = Y-Koordinate			*
			 *     *wi_gw3 = Breite 			*
			 *     *wi_gw4 = H”he				*
			 *						*
			 * 6 (WF_PREVXYWH): Die Koordinaten der		*
			 * Gesamtgr”že des vorhergehenden Fensters	*
			 * werden ausgegeben:				*
			 *     *wi_gw1 = X-Koordinate			*
			 *     *wi_gw2 = Y-Koordinate			*
			 *     *wi_gw3 = Breite 			*
			 *     *wi_gw4 = H”he				*
			 *						*
			 * 7 (WF_FULLXYWH): Die Koordinaten der	Gesamt-	*
			 * gr”že des Fensters in seiner gr”žtm”glichen	*
			 * Gr”že (durch ÝWIND_CREATEÝWIND_CRE.CÝ festgelegt) werden  *
			 * ausgegeben:					*
			 *     *wi_gw1 = X-Koordinate			*
			 *     *wi_gw2 = Y-Koordinate			*
			 *     *wi_gw3 = Breite 			*
			 *     *wi_gw4 = H”he				*
			 *						*
			 * 8 (WF_HSLIDE): Die relative Position des	*
			 * horizontalen	Schiebers wird ausgegeben	*
			 * (von 0 bis 1000):				*
			 *     *wi_gw1: 1 = Position ganz links 	*
			 *		1000 = Position ganz rechts	*
			 *						*
			 * 9 (WF_VSLIDE): Die relative Position des	*
			 * vertikalen Schiebers wird ausgegeben		*
			 * (von 0 bis 1000):				*
			 *     *wi_gw1: 1 = Position ganz oben		*
			 *		1000 = Position ganz unten	*
			 *						*
			 * 10 (WF_TOP): Das Window Handle des obersten	*
			 * (= aktiven) Fensters wird ausgegeben:	*
			 *     *wi_gw1 = Window Handle			*
			 *						*
			 * 11 (WF_FIRSTXYWH): Die Koordinaten des	*
			 * ersten Rechtecks in der Rechteckliste des	*
			 * Fensters werden ausgegeben:			*
			 *     *wi_gw1 = X-Koordinate			*
			 *     *wi_gw2 = Y-Koordinate			*
			 *     *wi_gw3 = Breite 			*
			 *     *wi_gw4 = H”he				*
			 *						*
			 * 12 (WF_NEXTXYWH): Die Koordinaten des	*
			 * n„chsten Rechtecks in der Rechteckliste des	*
			 * Fensters werden ausgegeben:			*
			 *     *wi_gw1 = X-Koordinate			*
			 *     *wi_gw2 = Y-Koordinate			*
			 *     *wi_gw3 = Breite 			*
			 *     *wi_gw4 = H”he				*
			 *						*
			 * 13 (WF_RESVD): Reserviert, keine Bedeutung.	*
			 *						*
			 * 15 (WF_HSLSIZE): Die Gr”že des horizontalen	*
			 * Schiebers relativ zur Gr”že des umrandenden	*
			 * Kastens wird ausgegeben:			*
			 *    *wi_gw1: -1 = Minimalgr”že		*
			 *		    (quadratischer Kasten)	*
			 *	   1-1000 = relative Gr”že im Vergleich	*
			 *		    zum Scrollbalken		*
			 *						*
			 * 16 (WF_VSLSIZE): Die Gr”že des vertikalen	*
			 * Schiebers relativ zur Gr”že des umrandenden	*
			 * Kastens wird ausgegeben:			*
			 *    *wi_gw1: -1 = Minimalgr”že		*
			 *		    (quadratischer Kasten)	*
			 *	   1-1000 = relative Gr”že im Vergleich	*
			 *		    zum Scrollbalken		*
			 *						*
			 * 17 (WF_SCREEN): Adresse und L„nge des	*
			 * internen Buffers fr Drop-Down-Mens und	*
			 * Alertboxen werden ausgegeben:		*
			 *     *wi_gw1 = 'Erster Teil' der Adresse	*
			 *     *wi_gw2 = 'Zweiter Teil' der Adresse	*
			 *     *wi_gw3 = 'Erster Teil' der L„nge	*
			 *     *wi_gw4 = 'Zweiter Teil' der L„nge	*
			 *						*
			 * 24 (WF_BEVENT): Liefert den BEVENT-Status	*
			 * des Fensters im Bit 0 von wi_gw1.		*
			 * ACHTUNG: Diese Funktion wird erst ab		*
			 * MultiTOS 1.0 bzw. WINX 2.1 untersttzt!	*
			 *						*
			 * 25 (WF_BOTTOM): Liefert die Kennung des	*
			 * untersten Fensters im Fensterstapel:		*
			 *     *wi_gw1 = Window Handle			*
			 * Ist kein Fenster offen, enth„lt wi_gw1	*
			 * -1 (NOWINDOW).				*
			 * ACHTUNG: Diese Funktion wird erst ab		*
			 * MultiTOS 1.0 bzw. WINX 2.1 untersttzt!	*/
  AES( 104, 2, 5, 0, 0 );

  va_start( ap, wi_gfield );
  *(va_arg( ap, INTP )) = intout[1];
  switch (wi_gfield)
  {
    case 4: case 5: case 6: case 7: case 11: case 12: case 17:
      *(va_arg( ap, INTP )) = intout[2];
      *(va_arg( ap, INTP )) = intout[3];
      *(va_arg( ap, INTP )) = intout[4];
  }
  va_end( ap );
  return intout[0]; /* = wi_greturn: positiv bei Erfolg, 0 bei Fehler	*
		     * (z.B. nicht existierendes Window Handle) 	*/
}
/* siehe auch: Ýwind_setÝWIND_SET.CÝ */