
#define MATCH 0

void
resolve_names()
{
char *funcname = "resolve_names";
ScreenPtr s;
ElementPtr ele,tele;
PackagePtr pck,tpck;
int i;

pck = first_package;

while(pck != 0){
  if(strlen(pck->nextname)){
    tpck = first_package;
    while(strcmp(pck->nextname, tpck->name) != MATCH)
      {
      
	if((tpck = tpck->next) == 0)
	  {
	    printf("%s: can't match next: %s in package %s\n"
		   ,funcname, pck->nextname, pck->name);
	    exit(1);
	  }
      }
    pck->next = tpck;
  }
 

if(strlen(pck->screen_name)){
  for(i=0;screen_sets[i];++i){
    if(strcmp(pck->screen_name, screen_sets[i]->name) == MATCH){
      break;
    }
    else{
      printf("%s: can't match screen named %s in package %s\n"
		 ,funcname, pck->screen_name, pck->name);
      exit(1);
    }
   }
  pck->screen = screen_sets[i];
}
else{
  printf("%s: missing screen name in package %s\n",funcname,pck->name);
  exit(1);
}



/*
* build element chain, then locate the element window
*/
  ele = pck->ele;
  while(ele != 0){
    if(strlen(ele->nextname)){
      tele = pck->ele;
      while(strcmp(ele->nextname, tele->name) != MATCH)
       {
	  if((tele = tele->cnext) == 0)
	    {
	      printf("%s: can't match next: %s in element %s\n"
		     ,funcname, ele->nextname, ele->name);
	      exit(1);
	    }
        }
     }

    if(strlen(ele->screen_name)){
      s = pck->screen;
      while(strcmp(ele->screen_name, s->name) != MATCH)
        {
	  if((s = s->cnext) == 0)
	    {
	      printf("%s: can't match screen: %s in element %s\n"
		     ,funcname, ele->screen_name, ele->name);
	      exit(1);
	    }
        }
      ele->w = s->w;
     }

  ele->next = tele;
  ele = ele->cnext;    
  }

	 


}

}




Window
findparent(i, name, child)
 int i;
 char *name, *child;
{
  char *funcname = "findparent";
  ScreenPtr s;
  
  s = screen_sets[i];
  while (s != 0){
    if(strcmp(name, s->name)){
      s = s->next;
    }
    else{
      if (s->w) return(s->w);
      else{
            printf("%s: can't create child %s before parent %s\n",
		     funcname,child,name);
	    exit(1);
	  }
    }
  }
 
  printf("%s: can't find window named %s in this set.\n",funcname,name);
  exit(1);    
}



void
makewindows()
{
char *funcname = "makewindows";
ScreenPtr s;
OpaqueFrame frame;
int i;

for(i=0;(s = screen_sets[i]);++i){
  while(s != 0){
    switch(s->type){


    case WINDOW:

      s->w = XCreateWindow(
		    strcmp(s->parentname, "RootWindow") ? 
			   (Window)findparent(i,s->parentname, s->name) :
			   RootWindow, 
	            s->x, 
	            s->y, 
	            s->width, 
	            s->height,
	            s->borderwidth,
		    s->border_pixmap,
		    s->backgrnd_pixmap
		   );


      if (s->w == 0) {
	printf("%s: can't open opaque window\n", funcname);
	exit(1);
      }
printf("XMapping window %d\n",s->w);

      XMapWindow(s->w);

      break;

    case TRANSPARENCY:
      printf("making transparent window named %s\n",s->name);

      s->w = XCreateTransparency(
		    strcmp(s->parentname, "RootWindow") ? 
			   (Window)findparent(i,s->parentname, s->name) :
			   RootWindow, 
			   s->x,
			   s->y,
			   s->width,
			   s->height  );

        if (s->w == 0) {
	  printf("%s: can't open transparent window\n", funcname);
	  exit(1);
	}
       XMapWindow(s->w);
       break;

    case VIDEO:
printf("making video window named %s\n",s->name);

      s->w = XCreateVideoWindow (
		    strcmp(s->parentname, "RootWindow") ? 
			   (Window)findparent(i,s->parentname, s->name) :
			   RootWindow, 
	            s->x, 
	            s->y, 
	            s->width, 
	            s->height,
	            s->borderwidth,
		    s->border_pixmap,
		    s->backgrnd_pixmap
		   );

      if (s->w == 0) {
	printf("%s: can't open video window\n", funcname);
	exit(1);
      }

        XMapWindow(s->w);
        XStartVideo(s->w,0,0,PRIO_2);

        break;

    case STILL:
printf("making still video named %s\n",s->name);

      s->w = XCreateVideoWindow (
		    strcmp(s->parentname, "RootWindow") ? 
			   (Window)findparent(i,s->parentname, s->name) :
			   RootWindow, 
	            s->x, 
	            s->y, 
	            s->width, 
	            s->height,
	            s->borderwidth,
		    s->border_pixmap,
		    s->backgrnd_pixmap
		   );

      if (s->w == 0) {
	printf("%s: can't open video window\n", funcname);
	exit(1);
      }

        XMapWindow(s->w);
        XStillVideo(s->w,0,0,MAKE16(s->x),s->y,MAKE16(s->width),s->height);

      break;
    default:
      break;
  }

  s = s->cnext;
  }
}
  XFlush();
}
