2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  $ Id $ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Copyright  ( c )  2014 - 2017  Chung ,  Hyung - Hwan .  All  rights  reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Redistribution  and  use  in  source  and  binary  forms ,  with  or  without 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    modification ,  are  permitted  provided  that  the  following  conditions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    are  met : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    1.  Redistributions  of  source  code  must  retain  the  above  copyright 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       notice ,  this  list  of  conditions  and  the  following  disclaimer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    2.  Redistributions  in  binary  form  must  reproduce  the  above  copyright 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       notice ,  this  list  of  conditions  and  the  following  disclaimer  in  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       documentation  and / or  other  materials  provided  with  the  distribution . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    THIS  SOFTWARE  IS  PROVIDED  BY  THE  AUTHOR  " AS IS "  AND  ANY  EXPRESS  OR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    IMPLIED  WARRANTIES ,  INCLUDING ,  BUT  NOT  LIMITED  TO ,  THE  IMPLIED  WARRANTIES 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    OF  MERCHANTABILITY  AND  FITNESS  FOR  A  PARTICULAR  PURPOSE  ARE  DISCLAIMED . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    IN  NO  EVENT  SHALL  THE  AUTHOR  BE  LIABLE  FOR  ANY  DIRECT ,  INDIRECT , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    INCIDENTAL ,  SPECIAL ,  EXEMPLARY ,  OR  CONSEQUENTIAL  DAMAGES  ( INCLUDING ,  BUT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    NOT  LIMITED  TO ,  PROCUREMENT  OF  SUBSTITUTE  GOODS  OR  SERVICES ;  LOSS  OF  USE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    DATA ,  OR  PROFITS ;  OR  BUSINESS  INTERRUPTION )  HOWEVER  CAUSED  AND  ON  ANY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    THEORY  OF  LIABILITY ,  WHETHER  IN  CONTRACT ,  STRICT  LIABILITY ,  OR  TORT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( INCLUDING  NEGLIGENCE  OR  OTHERWISE )  ARISING  IN  ANY  WAY  OUT  OF  THE  USE  OF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    THIS  SOFTWARE ,  EVEN  IF  ADVISED  OF  THE  POSSIBILITY  OF  SUCH  DAMAGE . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "_x11.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <moo-utl.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <X11/Xutil.h> 
  
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <errno.h> 
  
						 
					
						
							
								
									
										
										
										
											2017-02-18 13:31:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <stdlib.h> 
  
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-24 18:09:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								typedef  struct  x11_modctx_t  x11_modctx_t ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  x11_modctx_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_class_t  x11_class ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2017-02-13 13:25:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* TODO: bchars_to_xchar2bstr??? */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  XChar2b *  uchars_to_xchar2bstr  ( moo_t *  moo ,  const  moo_uch_t *  inptr ,  moo_oow_t  inlen ,  moo_oow_t *  outlen )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_uch_t  uch ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									const  moo_uch_t *  endptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XChar2b *  outbuf ,  *  outptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									outbuf  =  moo_allocmem  ( moo ,  ( inlen  +  1 )  *  MOO_SIZEOF ( * outptr ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! outbuf )  return  MOO_NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									outptr  =  outbuf ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endptr  =  inptr  +  inlen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									while  ( inptr  <  endptr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										uch  =  * inptr + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# if (MOO_SIZEOF_UCH_T > 2) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( uch  >  0xFFFF )  uc  =  0xFFFD ;  /* unicode replacement character */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										outptr - > byte1  =  ( uch  > >  8 )  &  0xFF ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										outptr - > byte2  =  uch  &  0xFF ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										outptr + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									outptr - > byte1  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									outptr - > byte2  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( outlen )  * outlen  =  outptr  -  outbuf ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  outbuf ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-13 13:25:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* ------------------------------------------------------------------------ */  
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_open_display  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11_trailer_t *  tr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Display *  disp  =  MOO_NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									XEvent *  event  =  MOO_NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									char *  dispname  =  MOO_NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									moo_ooi_t  connno ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// TODO: CHECK if the receiver is an X11 object
  
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( nargs  > =  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										moo_oop_t  np ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										np  =  MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( np  ! =  moo - > _nil ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											moo_oow_t  bl ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! MOO_OBJ_IS_CHAR_POINTER ( np ) )  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												goto  oops ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											bl  =  MOO_OBJ_GET_SIZE ( np ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											dispname  =  moo_dupootobcstr  ( moo ,  MOO_OBJ_GET_CHAR_SLOT ( np ) ,  & bl ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! dispname ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												MOO_DEBUG2  ( moo ,  " <x11.connect> Cannot convert display name %.*js \n " ,  MOO_OBJ_GET_SIZE ( np ) ,  MOO_OBJ_GET_CHAR_SLOT ( np ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												MOO_STACK_SETRETTOERRNUM  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												goto  oops ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									event  =  moo_allocmem  ( moo ,  MOO_SIZEOF ( * event ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! event ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERRNUM  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										goto  oops ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 16:48:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									disp  =  XOpenDisplay ( dispname ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! disp ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_DEBUG1  ( moo ,  " <x11.open_display> Cannot connect to X11 server %hs \n " ,  XDisplayName ( dispname ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 16:48:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ESYSERR ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										goto  oops ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! MOO_IN_SMPTR_RANGE ( disp ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_DEBUG1  ( moo ,  " <x11.open_display> Display pointer to %hs not in small pointer range \n " ,  XDisplayName ( dispname ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ERANGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										goto  oops ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									connno  =  ConnectionNumber ( disp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! MOO_IN_SMOOI_RANGE ( connno ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_DEBUG1  ( moo ,  " <x11.open_display> Connection number to %hs out of small integer range \n " ,  XDisplayName ( dispname ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ERANGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										goto  oops ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr  =  ( x11_trailer_t * ) moo_getobjtrailer  ( moo ,  ( moo_oop_t ) x11 ,  MOO_NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr - > event  =  event ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr - > connection_number  =  connno ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr - > wm_delete_window  =  XInternAtom  ( disp ,  " WM_DELETE_WINDOW " ,  False ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MOO_ASSERT  ( moo ,  MOO_IN_SMPTR_RANGE ( disp ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11 - > display  =  MOO_SMPTR_TO_OOP ( disp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_STACK_SETRETTORCV  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( dispname )  moo_freemem  ( moo ,  dispname ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								oops :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( disp )  XCloseDisplay  ( disp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( event )  moo_freemem  ( moo ,  event ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( dispname )  moo_freemem  ( moo ,  dispname ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_close_display  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-20 16:33:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11_trailer_t *  tr ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// TODO: CHECK if the receiver is an X11 object
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( x11 - > display  ! =  moo - > _nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-18 13:31:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_ASSERT  ( moo ,  MOO_OOP_IS_SMPTR ( x11 - > display ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XCloseDisplay  ( MOO_OOP_TO_SMPTR ( x11 - > display ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										x11 - > display  =  moo - > _nil ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-18 13:31:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-20 16:33:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr  =  moo_getobjtrailer  ( moo ,  MOO_STACK_GETRCV ( moo , nargs ) ,  MOO_NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tr - > event ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										moo_freemem  ( moo ,  tr - > event ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										tr - > event  =  MOO_NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MOO_STACK_SETRETTORCV  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_get_fd  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
									
										
										
										
											2017-02-15 11:57:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11_trailer_t *  tr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// TODO: CHECK if the receiver is an X11 object
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr  =  moo_getobjtrailer  ( moo ,  MOO_STACK_GETRCV ( moo , nargs ) ,  MOO_NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_STACK_SETRET ( moo ,  nargs ,  MOO_SMOOI_TO_OOP ( tr - > connection_number ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 11:57:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 07:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_get_llevent  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
									
										
										
										
											2017-02-13 13:25:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11_trailer_t *  tr ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 11:57:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XEvent *   event ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// TODO: CHECK if the receiver is an X11 object
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//MOO_ASSERT (moo, MOO_CLASSOF(moo,x11) == modctx->x11_class);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tr  =  moo_getobjtrailer  ( moo ,  ( moo_oop_t ) x11 ,  MOO_NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									event  =  tr - > event ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( XPending ( disp ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										oop_x11_llevent_t  e ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										XNextEvent  ( disp ,  event ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 07:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										e  =  ( oop_x11_llevent_t ) MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										/* TOOD: check if e is an instance of X11.LLEvent */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										e - > type  =  MOO_SMOOI_TO_OOP ( event - > type ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										e - > window  =  MOO_SMOOI_TO_OOP ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 07:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										/* if the following is going to trigger GC directly or indirectly,
 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 *  e  must  be  proteced  with  moo_pushtmp ( ) .  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 *  also  x11 ,  tr  must  be  refetched  from  the  stack .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 07:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										switch  ( event - > type ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											case  ClientMessage : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( event - > xclient . data . l [ 0 ]  = =  tr - > wm_delete_window ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 16:03:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													e - > type  =  MOO_SMOOI_TO_OOP ( 65537 ) ;  /* match SHELL_CLOSE in X11.LLEventType */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													e - > window  =  MOO_SMOOI_TO_OOP ( event - > xclient . window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													/* WINDOW CLSOE EVENT */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												break ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											case  Expose : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												XRectangle  rect ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												rect . x       =  event - > xexpose . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												rect . y       =  event - > xexpose . y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												rect . width   =  event - > xexpose . width ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												rect . height  =  event - > xexpose . height ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( XCheckWindowEvent  ( disp ,  event - > xexpose . window ,  ExposureMask ,  event ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													Region  reg ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													/* merge all expose events in the event queue */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													reg  =  XCreateRegion  ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													XUnionRectWithRegion  ( & rect ,  reg ,  reg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														rect . x       =  event - > xexpose . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														rect . y       =  event - > xexpose . y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														rect . width   =  event - > xexpose . width ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														rect . height  =  event - > xexpose . height ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														XUnionRectWithRegion  ( & rect ,  reg ,  reg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													while  ( XCheckWindowEvent  ( disp ,  event - > xexpose . window ,  ExposureMask ,  event ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													XClipBox  ( reg ,  & rect ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													XDestroyRegion  ( reg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												e - > window  =  MOO_SMOOI_TO_OOP ( event - > xexpose . window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												e - > x  =  MOO_SMOOI_TO_OOP ( rect . x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												e - > y  =  MOO_SMOOI_TO_OOP ( rect . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												e - > width  =  MOO_SMOOI_TO_OOP ( rect . width ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												e - > height  =  MOO_SMOOI_TO_OOP ( rect . height ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 07:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											case  ButtonPress : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											case  ButtonRelease : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												e - > window  =  MOO_SMOOI_TO_OOP ( event - > xbutton . window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												e - > x  =  MOO_SMOOI_TO_OOP ( event - > xbutton . x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												e - > y  =  MOO_SMOOI_TO_OOP ( event - > xbutton . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRET  ( moo ,  nargs ,  ( moo_oop_t ) e ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										/* nil if there is no event */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 16:03:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								MOO_DEBUG0  ( moo ,  " NO PENDING EVENT.... \n " ) ;  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRET  ( moo ,  nargs ,  moo - > _nil ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_create_window  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Window  wind ;  /* Window -> XID, unsigned long */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									int  scrn ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Window  parent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XSetWindowAttributes  attrs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11_trailer_t *  tr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_t  a0 ,  a1 ,  a2 ,  a3 ,  a4 ,  a5 ,  a6 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a0  =  MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* parent window - Integer or nil (Window) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a1  =  MOO_STACK_GETARG ( moo ,  nargs ,  1 ) ;  /* x - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a2  =  MOO_STACK_GETARG ( moo ,  nargs ,  2 ) ;  /* y - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a3  =  MOO_STACK_GETARG ( moo ,  nargs ,  3 ) ;  /* width - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a4  =  MOO_STACK_GETARG ( moo ,  nargs ,  4 ) ;  /* height - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a5  =  MOO_STACK_GETARG ( moo ,  nargs ,  5 ) ;  /* fgcolor - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a6  =  MOO_STACK_GETARG ( moo ,  nargs ,  6 ) ;  /* bgcolor - SmallInteger */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMOOI ( a1 )  | |  ! MOO_OOP_IS_SMOOI ( a2 )  | |  ! MOO_OOP_IS_SMOOI ( a3 )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    ! MOO_OOP_IS_SMOOI ( a4 )  | |  ! MOO_OOP_IS_SMOOI ( a5 )  | |  ! MOO_OOP_IS_SMOOI ( a6 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									einval : 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.create_window> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tr  =  moo_getobjtrailer  ( moo ,  ( moo_oop_t ) x11 ,  MOO_NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									/* ScreenCount (disp); -> the number of screens available in this display server */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( a0  = =  moo - > _nil )  
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										scrn  =  DefaultScreen  ( disp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										parent  =  RootWindow  ( disp ,  scrn ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									else  if  ( ! MOO_OOP_IS_SMOOI ( a0 ) )  goto  einval ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 11:57:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										XWindowAttributes  wa ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										parent  =  MOO_OOP_TO_SMOOI ( a0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										XGetWindowAttributes  ( disp ,  parent ,  & wa ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										scrn  =  XScreenNumberOfScreen ( wa . screen ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									attrs . event_mask  =  KeyPressMask  |  KeyReleaseMask  |  ButtonPressMask  |  ButtonReleaseMask  |  ExposureMask /* | StructureNotifyMask*/ ;  /* TODO: accept it as a parameter??? */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									attrs . border_pixel  =  BlackPixel  ( disp ,  scrn ) ;  /* TODO: use a6 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									attrs . background_pixel  =  WhitePixel  ( disp ,  scrn ) ; /* TODO: use a7 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									wind  =  XCreateWindow  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										disp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										parent , 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a1 ) ,  /* x */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a2 ) ,  /* y */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a3 ) ,  /* width */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a4 ) ,  /* height */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										0 ,  /* border width */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										CopyFromParent ,  /* depth */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										InputOutput ,     /* class */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										CopyFromParent ,  /* visual */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										CWEventMask  |  CWBackPixel  |  CWBorderPixel ,  & attrs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! wind ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ESYSERR ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( parent  = =  RootWindow ( disp ,  scrn ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XSetWMProtocols  ( disp ,  wind ,  & tr - > wm_delete_window ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									/*if (!MOO_IN_SMOOI_RANGE ((moo_ooi_t)wind))*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( wind  >  MOO_SMOOI_MAX ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										XDestroyWindow  ( disp ,  wind ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ERANGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									XMapWindow  ( disp ,  wind ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XFlush  ( disp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MOO_STACK_SETRET  ( moo ,  nargs ,  MOO_SMOOI_TO_OOP ( wind ) ) ;  
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_destroy_window  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_t  a0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 16:48:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-27 16:03:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									a0  =  MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* window - Integer (Window) */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMOOI ( a0 ) )  
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 16:48:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.destroy_window> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 16:48:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Display *  disp ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Window  wind ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-13 13:25:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										wind  =  MOO_OOP_TO_SMOOI ( a0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XUnmapWindow  ( disp ,  wind ) ;  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XDestroyWindow  ( disp ,  wind ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTORCV  ( moo ,  nargs ) ;  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-24 18:09:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 11:57:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_create_gc  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Window  wind ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									GC  gc ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XWindowAttributes  wa ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_t  a0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									a0  =  MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* Window - SmallInteger */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMOOI ( a0 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.create_gc> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									wind  =  MOO_OOP_TO_SMOOI ( a0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									gc  =  XCreateGC  ( disp ,  wind ,  0 ,  MOO_NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! MOO_IN_SMPTR_RANGE ( gc ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.create_gc> GC pointer not in small pointer range \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ERANGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*	XGetWindowAttributes (disp, wind, &wa);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XCopyGC  ( disp ,  DefaultGC ( disp ,  XScreenNumberOfScreen ( wa . screen ) ) ,  GCForeground  |  GCBackground  |  GCLineWidth  |  GCLineStyle ,  gc ) ; */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_STACK_SETRET  ( moo ,  nargs ,  MOO_SMPTR_TO_OOP ( gc ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_destroy_gc  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									oop_x11_gc_t  gc ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									gc  =  ( oop_x11_gc_t ) MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* GC object */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMPTR ( gc - > font_ptr ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XFreeFont  ( disp ,  MOO_OOP_TO_SMPTR ( gc - > font_ptr ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gc - > font_ptr  =  moo - > _nil ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMPTR ( gc - > font_set ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XFreeFontSet  ( disp ,  MOO_OOP_TO_SMPTR ( gc - > font_set ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gc - > font_set  =  moo - > _nil ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								MOO_DEBUG0  ( moo ,  " Freed Font Set \n " ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMPTR ( gc - > gc_handle ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XFreeGC  ( disp ,  MOO_OOP_TO_SMPTR ( gc - > gc_handle ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gc - > gc_handle =  moo - > _nil ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_STACK_SETRETTORCV  ( moo ,  nargs ) ;  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_apply_gc  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									oop_x11_gc_t  a0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									GC  gc ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									unsigned  long  int  mask  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XGCValues  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a0  =  ( oop_x11_gc_t ) MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TODO check if a0 is an instance of X11.GC */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMPTR ( a0 - > gc_handle ) )  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.apply_gc> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									gc  =  MOO_OOP_TO_SMPTR ( a0 - > gc_handle ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OBJ_IS_CHAR_POINTER ( a0 - > font_name )  & &  MOO_OBJ_GET_SIZE ( a0 - > font_name )  >  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										XFontSet  fs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										char  * * missing_charsets ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										int  num_missing_charsets  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										char  * default_string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TODO: don't create this again  and again */   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TODO: use font name */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										fs  =  XCreateFontSet  ( disp ,  " -adobe-*-medium-r-normal-*-14-*-*-*-*-*-*-*,-baekmuk-*-medium-r-normal-*-14-*-*-*-*-*-*-*,-*-*-medium-r-normal-*-*-*-*-*-*-*-*-* " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											& missing_charsets ,  & num_missing_charsets ,  & default_string ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( num_missing_charsets ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											int  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_DEBUG0  ( moo ,  " The following charsets are missing: \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for ( i  =  0 ;  i  <  num_missing_charsets ;  i + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   MOO_DEBUG1  ( moo ,  " \t %s \n " ,   missing_charsets [ i ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_DEBUG1  ( moo ,  " The string %s will be used in place of any characters from those set \n " ,  default_string ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											XFreeStringList ( missing_charsets ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( fs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TODO: error handling. rollback upon failure... etc */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_ASSERT  ( moo ,  MOO_IN_SMPTR_RANGE ( fs ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( MOO_OOP_IS_SMPTR ( a0 - > font_set ) )  
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								MOO_DEBUG0  ( moo ,  " Freed Font Set .. \n " ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												XFreeFontSet  ( disp ,  MOO_OOP_TO_SMPTR ( a0 - > font_set ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											a0 - > font_set  =  MOO_SMPTR_TO_OOP  ( fs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								MOO_DEBUG0  ( moo ,  " XCreateFontSet ok.... \n " ) ;  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											XFontStruct *  font ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* TODO: .... use font_name */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											font  =  XLoadQueryFont  ( disp ,  " -misc-fixed-medium-r-normal-ko-18-120-100-100-c-180-iso10646-1 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( font ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ! MOO_IN_SMPTR_RANGE ( font ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													MOO_DEBUG0  ( moo ,  " <x11.apply_gc> Font pointer not in small pointer range \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													XFreeFont  ( disp ,  font ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ERANGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													XSetFont  ( disp ,  gc ,  font - > fid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													if  ( MOO_OOP_IS_SMPTR ( a0 - > font_ptr ) )  XFreeFont  ( disp ,  MOO_OOP_TO_SMPTR ( a0 - > font_ptr ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													a0 - > font_ptr  =  MOO_SMPTR_TO_OOP ( font ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												MOO_DEBUG2  ( moo ,  " <x11.apply_gc> Cannot load font - %.*js \n " ,  MOO_OBJ_GET_SIZE ( a0 - > font_name ) ,  MOO_OBJ_GET_CHAR_SLOT ( a0 - > font_name ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_ESYSERR ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* TODO: accept mask as an option parameter. then only apply fields that matches this given mask */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMOOI ( a0 - > foreground ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mask  | =  GCForeground ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										v . foreground  =  MOO_OOP_TO_SMOOI ( a0 - > foreground ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMOOI ( a0 - > background ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mask  | =  GCBackground ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										v . background  =  MOO_OOP_TO_SMOOI ( a0 - > background ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMOOI ( a0 - > line_width ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mask  | =  GCLineWidth ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										v . line_width  =  MOO_OOP_TO_SMOOI ( a0 - > line_width ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMOOI ( a0 - > line_style ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mask  | =  GCLineStyle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										v . line_style  =  MOO_OOP_TO_SMOOI ( a0 - > line_style ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMOOI ( a0 - > fill_style ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mask  | =  GCFillStyle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										v . fill_style  =  MOO_OOP_TO_SMOOI ( a0 - > fill_style ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									XChangeGC  ( disp ,  gc ,  mask ,  & v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_STACK_SETRETTORCV  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_draw_rectangle  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_t  a0 ,  a1 ,  a2 ,  a3 ,  a4 ,  a5 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									a0  =  MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* Window - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a1  =  MOO_STACK_GETARG ( moo ,  nargs ,  1 ) ;  /* GC - SMPTR */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a2  =  MOO_STACK_GETARG ( moo ,  nargs ,  2 ) ;  /* x - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a3  =  MOO_STACK_GETARG ( moo ,  nargs ,  3 ) ;  /* y - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a4  =  MOO_STACK_GETARG ( moo ,  nargs ,  4 ) ;  /* width - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a5  =  MOO_STACK_GETARG ( moo ,  nargs ,  5 ) ;  /* height - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMOOI ( a0 )  | |  ! MOO_OOP_IS_SMPTR ( a1 )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    ! MOO_OOP_IS_SMOOI ( a2 )  | |  ! MOO_OOP_IS_SMOOI ( a3 )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    ! MOO_OOP_IS_SMOOI ( a4 )  | |  ! MOO_OOP_IS_SMOOI ( a5 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.draw_rectangle> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									XDrawRectangle  ( disp ,  ( Window ) MOO_OOP_TO_SMOOI ( a0 ) ,  ( GC ) MOO_OOP_TO_SMPTR ( a1 ) ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a2 ) ,  MOO_OOP_TO_SMOOI ( a3 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a4 ) ,  MOO_OOP_TO_SMOOI ( a5 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_fill_rectangle  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_t  a0 ,  a1 ,  a2 ,  a3 ,  a4 ,  a5 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a0  =  MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* Window - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a1  =  MOO_STACK_GETARG ( moo ,  nargs ,  1 ) ;  /* GC - SMPTR */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									a2  =  MOO_STACK_GETARG ( moo ,  nargs ,  2 ) ;  /* x - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a3  =  MOO_STACK_GETARG ( moo ,  nargs ,  3 ) ;  /* y - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a4  =  MOO_STACK_GETARG ( moo ,  nargs ,  4 ) ;  /* width - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a5  =  MOO_STACK_GETARG ( moo ,  nargs ,  5 ) ;  /* height - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMOOI ( a0 )  | |  ! MOO_OOP_IS_SMPTR ( a1 )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    ! MOO_OOP_IS_SMOOI ( a2 )  | |  ! MOO_OOP_IS_SMOOI ( a3 )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    ! MOO_OOP_IS_SMOOI ( a4 )  | |  ! MOO_OOP_IS_SMOOI ( a5 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.fill_rectangle> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									XFillRectangle  ( disp ,  ( Window ) MOO_OOP_TO_SMOOI ( a0 ) ,  ( GC ) MOO_OOP_TO_SMPTR ( a1 ) ,  
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a2 ) ,  MOO_OOP_TO_SMOOI ( a3 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_OOP_TO_SMOOI ( a4 ) ,  MOO_OOP_TO_SMOOI ( a5 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  moo_pfrc_t  pf_draw_string  ( moo_t *  moo ,  moo_ooi_t  nargs )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									oop_x11_t  x11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									oop_x11_gc_t  gc ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_oop_t  a1 ,  a2 ,  a3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Display *  disp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11  =  ( oop_x11_t ) MOO_STACK_GETRCV ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									disp  =  MOO_OOP_TO_SMPTR ( x11 - > display ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									gc  =  ( oop_x11_gc_t ) MOO_STACK_GETARG ( moo ,  nargs ,  0 ) ;  /* GC object */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a1  =  MOO_STACK_GETARG ( moo ,  nargs ,  1 ) ;  /* x - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a2  =  MOO_STACK_GETARG ( moo ,  nargs ,  2 ) ;  /* y - SmallInteger */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									a3  =  MOO_STACK_GETARG ( moo ,  nargs ,  3 ) ;  /* string */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TODO: check if gc is an instance of X11.GC */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ! MOO_OOP_IS_SMOOI ( a1 )  | |  ! MOO_OOP_IS_SMOOI ( a2 )  | |  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    ! MOO_OBJ_IS_CHAR_POINTER ( a3 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_DEBUG0  ( moo ,  " <x11.draw_string> Invalid parameters \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MOO_STACK_SETRETTOERROR  ( moo ,  nargs ,  MOO_EINVAL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( MOO_OOP_IS_SMPTR ( gc - > font_set ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-18 16:15:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										moo_oow_t  bcslen ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										moo_bch_t *  bb ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										int  ascent  =  10 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XRectangle  r ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-18 16:15:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									# if defined(MOO_OOCH_IS_UCH) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										moo_oow_t  oocslen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										oocslen  =  MOO_OBJ_GET_SIZE ( a3 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( moo_convootobchars  ( moo ,  MOO_OBJ_GET_CHAR_SLOT ( a3 ) ,  & oocslen ,  MOO_NULL ,  & bcslen )  < =  - 1  | | 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    ! ( bb  =  moo_allocmem  ( moo ,  MOO_SIZEOF ( moo_bch_t )  *  bcslen ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_DEBUG0  ( moo ,  " <x11.draw_string> Error in converting a string \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_STACK_SETRETTOERRNUM  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-18 16:15:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										moo_convootobchars  ( moo ,  MOO_OBJ_GET_CHAR_SLOT ( a3 ) ,  & oocslen ,  bb ,  & bcslen ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bb  =  MOO_OBJ_GET_CHAR_SLOT ( a3 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										bcslen  =  oocslen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XmbTextExtents ( MOO_OOP_TO_SMPTR ( gc - > font_set ) ,  bb ,  bcslen ,  MOO_NULL ,  & r ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ascent  =  r . height ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-18 16:15:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										/* what about Xutf8DrawString? */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										XmbDrawString  ( disp ,  ( Window ) MOO_OOP_TO_SMOOI ( ( ( oop_x11_widget_t ) gc - > widget ) - > window_handle ) ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_OOP_TO_SMPTR ( gc - > font_set ) ,  MOO_OOP_TO_SMPTR ( gc - > gc_handle ) ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_OOP_TO_SMOOI ( a1 ) ,  MOO_OOP_TO_SMOOI ( a2 )  +  ascent ,   bb ,  bcslen ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-18 16:15:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									# if defined(MOO_OOCH_IS_UCH) 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										moo_freemem  ( moo ,  bb ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-18 16:15:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XChar2b *  stptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										moo_oow_t  stlen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										int  ascent  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* TODO: draw string chunk by chunk to avoid memory allocation in uchars_to_xchars2bstr */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										stptr  =  uchars_to_xchar2bstr  ( moo ,  MOO_OBJ_GET_CHAR_SLOT ( a3 ) ,  MOO_OBJ_GET_SIZE ( a3 ) ,  & stlen ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! stptr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_DEBUG0  ( moo ,  " <x11.draw_string> Error in converting a string \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_STACK_SETRETTOERRNUM  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( MOO_OOP_IS_SMPTR ( gc - > font_ptr ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											int  direction ,  descent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											XCharStruct  overall ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											XTextExtents16  ( MOO_OOP_TO_SMPTR ( gc - > font_ptr ) ,  stptr ,  stlen ,  & direction ,  & ascent ,  & descent ,  & overall ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										XDrawString16  ( disp ,  ( Window ) MOO_OOP_TO_SMOOI ( ( ( oop_x11_widget_t ) gc - > widget ) - > window_handle ) ,  MOO_OOP_TO_SMPTR ( gc - > gc_handle ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_OOP_TO_SMOOI ( a1 ) ,  MOO_OOP_TO_SMOOI ( a2 )  +  ascent ,  stptr ,  stlen ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-29 15:04:35 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-27 08:32:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										moo_freemem  ( moo ,  stptr ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_STACK_SETRETTORCV  ( moo ,  nargs ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 16:09:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  MOO_PF_SUCCESS ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* ------------------------------------------------------------------------ */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  moo_pfinfo_t  x11_pfinfo [ ]  =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-12-28 17:15:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{  MI ,  {  ' a ' , ' p ' , ' p ' , ' l ' , ' y ' , ' _ ' , ' g ' , ' c ' , ' \0 '  } ,                          0 ,  {  pf_apply_gc ,         1 ,  1  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' c ' , ' l ' , ' o ' , ' s ' , ' e ' , ' _ ' , ' d ' , ' i ' , ' s ' , ' p ' , ' l ' , ' a ' , ' y ' , ' \0 '  } ,      0 ,  {  pf_close_display ,    0 ,  0  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' c ' , ' r ' , ' e ' , ' a ' , ' t ' , ' e ' , ' _ ' , ' g ' , ' c ' , ' \0 '  } ,                      0 ,  {  pf_create_gc ,        1 ,  1  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' c ' , ' r ' , ' e ' , ' a ' , ' t ' , ' e ' , ' _ ' , ' w ' , ' i ' , ' n ' , ' d ' , ' o ' , ' w ' , ' \0 '  } ,      0 ,  {  pf_create_window ,    7 ,  7  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' d ' , ' e ' , ' s ' , ' t ' , ' r ' , ' o ' , ' y ' , ' _ ' , ' g ' , ' c ' , ' \0 '  } ,                  0 ,  {  pf_destroy_gc ,       1 ,  1  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' d ' , ' e ' , ' s ' , ' t ' , ' r ' , ' o ' , ' y ' , ' _ ' , ' w ' , ' i ' , ' n ' , ' d ' , ' o ' , ' w ' , ' \0 '  } ,  0 ,  {  pf_destroy_window ,   1 ,  1  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' d ' , ' r ' , ' a ' , ' w ' , ' _ ' , ' r ' , ' e ' , ' c ' , ' t ' , ' a ' , ' n ' , ' g ' , ' l ' , ' e ' , ' \0 '  } ,  0 ,  {  pf_draw_rectangle ,   6 ,  6  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' d ' , ' r ' , ' a ' , ' w ' , ' _ ' , ' s ' , ' t ' , ' r ' , ' i ' , ' n ' , ' g ' , ' \0 '  } ,              0 ,  {  pf_draw_string ,      4 ,  4  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' f ' , ' i ' , ' l ' , ' l ' , ' _ ' , ' r ' , ' e ' , ' c ' , ' t ' , ' a ' , ' n ' , ' g ' , ' l ' , ' e ' , ' \0 '  } ,  0 ,  {  pf_fill_rectangle ,   6 ,  6  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' g ' , ' e ' , ' t ' , ' _ ' , ' f ' , ' d ' , ' \0 '  } ,                                  0 ,  {  pf_get_fd ,           0 ,  0  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' g ' , ' e ' , ' t ' , ' _ ' , ' l ' , ' l ' , ' e ' , ' v ' , ' e ' , ' n ' , ' t ' , ' \0 ' } ,               0 ,  {  pf_get_llevent ,      1 ,  1  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{  MI ,  {  ' o ' , ' p ' , ' e ' , ' n ' , ' _ ' , ' d ' , ' i ' , ' s ' , ' p ' , ' l ' , ' a ' , ' y ' , ' \0 '  } ,          0 ,  {  pf_open_display ,     0 ,  1  }  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 11:57:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  x11_import  ( moo_t *  moo ,  moo_mod_t *  mod ,  moo_oop_class_t  _class )  
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-06-18 17:29:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( moo_setclasstrsize ( moo ,  _class ,  MOO_SIZEOF ( x11_trailer_t ) ,  MOO_NULL )  < =  - 1 )  return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-19 17:33:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-31 14:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  moo_pfbase_t *  x11_query  ( moo_t *  moo ,  moo_mod_t *  mod ,  const  moo_ooch_t *  name ,  moo_oow_t  namelen )  
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-03-31 14:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  moo_findpfbase  ( moo ,  x11_pfinfo ,  MOO_COUNTOF ( x11_pfinfo ) ,  name ,  namelen ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  void  x11_unload  ( moo_t *  moo ,  moo_mod_t *  mod )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									/* TODO: anything else? close all open dll handles? For that, pf_open must store the value it returns to mod->ctx or somewhere..*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									moo_freemem  ( moo ,  mod - > ctx ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  void  gc_mod_x11  ( moo_t *  moo ,  moo_mod_t *  mod )  
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									x11_modctx_t *  ctx  =  mod - > ctx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MOO_ASSERT  ( moo ,  ctx  ! =  MOO_NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-25 05:16:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ctx - > x11_class  =  ( moo_oop_class_t ) moo_moveoop  ( moo ,  ( moo_oop_t ) ctx - > x11_class ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  moo_mod_x11  ( moo_t *  moo ,  moo_mod_t *  mod )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( mod - > hints  &  MOO_MOD_LOAD_FOR_IMPORT ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mod - > gc  =  MOO_NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mod - > ctx  =  MOO_NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										x11_modctx_t *  ctx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										static  moo_ooch_t  name_x11 [ ]  =  {  ' X ' , ' 1 ' , ' 1 ' , ' \0 '  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ctx  =  moo_callocmem  ( moo ,  MOO_SIZEOF ( * ctx ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! ctx )  return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ctx - > x11_class  =  ( moo_oop_class_t ) moo_findclass  ( moo ,  moo - > sysdic ,  name_x11 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( ! ctx - > x11_class ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											/* Not a single X11.XXX has been defined. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											MOO_DEBUG0  ( moo ,  " X11 class not found \n " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											moo_freemem  ( moo ,  ctx ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-16 09:45:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mod - > gc  =  gc_mod_x11 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mod - > ctx  =  ctx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									mod - > import  =  x11_import ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mod - > query  =  x11_query ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mod - > unload  =  x11_unload ;  
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 14:18:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-12 18:59:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-26 17:15:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* ------------------------------------------------------------------------ */