/*  k 1003    27/08/90     */
/*  k 1005    10/09/90     */
/*  k 0051    12/09/90     */
/*  k 0054    13/09/90	   */
/*  k 1005    17/09/90     */  /* gluad ->glu */
/*  k 0059    21/09/90	   */
/*  k 0087    03/12/90	   */
/*  k 0157	15/04/91	*/
/* k 0207	06/09/91	*//* delete majelno */
/* k 0224       23/09/91        *//* ebss */
/* k 0230       09/10/91        *//* assemble some data */
/* k 0257	08/11/91	*//* Transient version */
/* k 1073   15/01/92    *//* clear work fields */
#include <ebss.h>               /* @0224 */
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
 /* @0230 */
 /* @0207 */
 extern msgop();
 struct parmglu *glu(struct parmglu *wglu)
  {
 struct srdt  *ws;
 struct rdt   *wr;
 struct majtb *wm;
 struct aname *wa;
 struct dlctb *wd;
 struct mat   *wn;
 struct namtb *wntb;
 struct nausg *wnsg;
 struct cash *wc;
 struct glu *wglua;              /* 1005 */
 struct nau   *wnau;
     int wcnt,i,j,k;
     int cntnau=0;
     char *w,*w1;           /* work ptr         */
     ws=avt->srdt;					/* @0087 */
     wglu->fl1 &= 255-CCASH-CNODE;  /* 1005 *//* @0157 */
     wglu->gluadar=0;wglu->gluadnod=0;   /* 1005 */
     wglu->fl2=0;                        /* 1005 */
     for (i=0;i<24;i++)
         { wglu->glulu[i]=' ';}  /* reset fields for result @1073 */
     wcnt=ws->gno;          /* number GLU       */
     wglua=ws->gluad[0];    /* ptr to glu-table */   /* 1003 */
     w=(wglu->inlu);						/* @0054 */
     for (i=0;i<wcnt;i++)
       {  w1=(wglua->namelu);                                   /* @0054 */
#if (RESIDENT == 0)
	 if (Res_strncmp(w,w1,8) !=0)	/* @0257 */
#else
	 if (strncmp(w,w1,8) !=0)
#endif
            wglua=wglua+1;
         else
	   {  w=(wglu->glulu); w1=(wglua->netlu);   /* 1005 */
#if (RESIDENT == 0)	/* @0257 */
	      Res_memcpy(w,w1,24);                      /* 1005 */
#else
              memcpy(w,w1,24);                      /* 1005 */
#endif
	      wglu->gluadar=wglua->netadr;
	      wglu->gluadnod=wglua->nodeadr;			/* @0054 */
	      wglu->fl1 |= CNODE;                     /* 1005 *//* @0157 */
              goto GLU4;                            /* 1005 */
           }                                        /* 1005 */
        }
     if ( wglu->glulu[0] =='\0' || wglu->glulu[0] ==' ')  /* 1073 1005 */
        { w=(wglu->glulu); w1=(wglu->inlu);
#if (RESIDENT == 0)	/* @0257 */
	  Res_memcpy(w,w1,8);  /* name LU to output list */
#else
	  memcpy(w,w1,8);  /* name LU to output list */
#endif
	}
     if ( wglu->mode ==GLUFID4)
        { w=(wglu->glunode); w1=(wglu->innode);
#if (RESIDENT == 0)	/* @0257 */
	  Res_memcpy(w,w1,16);  /* name NODE,AREA     */
#else
          memcpy(w,w1,16);  /* name NODE,AREA     */
#endif
        }
     if ( wglu->mode ==GLUFID2)
        { w=(wglu->glunode); w1=(wglu->innode);      /* 1005 */
#if (RESIDENT == 0)	/* @0257 */
	  Res_memcpy(w,w1,8);   /* name NODE             */
#else
          memcpy(w,w1,8);   /* name NODE             */
#endif
        }                                            /* 1005 */
GLU4:                                                /* 1005 */
     if (wglu->gluadar==0 || wglu->gluadnod==0)      /* 1005 */
	{ wc=avt->cash;      /* ptr to cash table  */		/* @0087 */
	  wcnt=avt->cnt;     /* count elements     */ /* 0051 *//* @0087 */
          for (i=0;i<wcnt;i++)
	    { w=(wc->lu); w1=(wglu->glulu);			/* @0054 */
#if (RESIDENT == 0)	/* @0257 */
	      if (Res_strncmp(w,w1,8) !=0 )
#else
              if (strncmp(w,w1,8) !=0 )
#endif
                 wc=wc+1;
              else
		{ wglu->fl1 |=CCASH;  /* cash found  *//* 1005 *//* @0157 */
                 wglu->gluadar=wc->adra; /* network area */
		 wglu->fl1 |= CNODE;                /* 1005 *//* @0157 */
		 w=(wglu->glunode); w1=(wc->node);		/* @0054 */
#if (RESIDENT == 0)	/* @0257 */
		 Res_memcpy(w,w1,8);   /* LU,NODE,AREA name */	/* @0054 */
#else
		 memcpy(w,w1,8);   /* LU,NODE,AREA name */	/* @0054 */
#endif
		 wglu->gluadnod=wc->adrn;			/* @0054 */
                 goto LOOKRET;
                }                                          /* 1005 */
             }
          }
LOKNODE:                                                  /* 1005 */
      w=(wglu->glunode); w1=(ws->noden);	/* @0059 */
     if ((wglu->glunode[0]!='\0') &&		/* @0059 */   /* 1005 */
	 (wglu->glunode[0]!=' ')  &&		/* @0059 */
#if (RESIDENT == 0)	/* @0257 */
	 (Res_strncmp(w,w1,8) != 0))		/* @0059 */
#else
	 (strncmp(w,w1,8) != 0))		/* @0059 */
#endif
        goto SARDT;                                       /* 1005 */
      wm=avt->majtb;                      /*  */	/* @0087 */
      w=wglu->glulu;						/* @0054 */
      for (i=0;i<2;i++)			/* @0207 */
        { if (wm->majname[0]=='\0')
             wm=wm+1;
          else
             { wr=wm->rdt;                               /* 1005  */
               cntnau=wr->nauno;
               wnau=wr->nau;
               for (j=0;j<cntnau;j++)
		 {  w1=wnau->name; /* */		/* @0054 */
#if (RESIDENT == 0)	/* @0257 */
		   if (Res_strncmp(w,w1,8) !=0)
#else
                   if (strncmp(w,w1,8) !=0)
#endif
                      wnau=wnau+1;
                   else
                    { wn=ws->mat[0];     /* ptr to mat */  /* 1003 */
								/* @0054 */
			      wglu->gluadar=wn->daf;		/* @0054 */
/* @0087 */		      wglu->gluadnod=avt->mynode;       /* 1005 */
                              w=wglu->glunode; w1=ws->noden;   /* 1005 */
#if (RESIDENT == 0)	/* @0257 */
			      Res_memcpy(w,w1,8);   /* node name *//* 1005 */
#else
                              memcpy(w,w1,8);   /* node name *//* 1005 */
#endif
			      wglu->fl1 |= CNODE;  /* @0157 */   /* 1005 */
                              wcnt=ws->ano;       /* count area name           */
                              wa=ws->aname[0];    /* ptr to area name table    */ /* 1003 */
                              for (k=0;k<wcnt;k++)
                                { if (wglu->gluadar != wa->addr)
                                     wa=wa+1;
                                  else
                                     { w=(wglu->gluarea); w1=(wa->aname);
#if (RESIDENT == 0)	/* @0257 */
				       Res_memcpy(w,w1,8);     /* name AREA  */
#else
                                       memcpy(w,w1,8);     /* name AREA  */
#endif
                                     }
                                 }
								/* @0054 */
			      goto LOOKRET;                    /* 1005 */
                      }
	         }
	       }						/* @0054 */
	       wm=wm+1;						/* @0054 */
		             }
     goto LOOKRET;
SARDT:
     wcnt=ws->ano;       /* count area name           */
     wa=ws->aname[0];    /* ptr to area name table    */ /* 1003 */
     for (i=0;i<wcnt;i++)
       { if (wglu->gluadar != wa->addr)
            wa=wa+1;
         else
           { w=(wglu->gluarea); w1=(wa->aname);
#if (RESIDENT == 0)	/* @0257 */
	    Res_memcpy(w,w1,8);     /* name AREA  */
#else
            memcpy(w,w1,8);     /* name AREA  */
#endif
           }
         wcnt=ws->matno;     /* count MAT  */
         wn=ws->mat[0];      /* ptr to mat-table */ /* 1003 */
         for (k=0;k<wcnt;k++)
           { if (wglu->gluadar != wn->daf)
                wn=wn+1;
             else
                { wcnt=wn->nodno;     /* count NODE */
                  wntb=wn->ntb[0];       /* ptr to node name table */
                   for (k=0;k<wcnt;k++)
                     { wnsg=wntb->nausg;   /* ptr to segad */
                       if (wglu->gluadar != wnsg->sarea)
                          wntb=wntb+1;
                       else
                         { w=(wglu->glunode);w1=(wntb->name);
#if (RESIDENT == 0)	/* @0257 */
			  Res_memcpy(w,w1,8); /* NODE name     */
#else
                          memcpy(w,w1,8); /* NODE name     */
#endif
			  wglu->fl1 |= CNODE; /*node name found *//* @0157 */
                          goto LOOKRET;
                         }
                     }
                 }
	      wglu->fl1 |= NNODE; /*node name not found *//* @0157 */
              goto LOOKRET;
              }
           wglu->gluadar=0;
           goto LOOKRET;
        }
  LOOKRET:
     wn=ws->mat[0];    /* ptr to mat-table  */ /* 1003 */
     if ( wn->type ==3)                        /* 1003 */
        { wglu->fl2=3;      /* LAN               */
          return (wglu);                       /* 1005 */
        }
     if ( wn->type ==2)                        /* 1003 */
        { wglu->fl2=2;      /* ROUTE           */
          return (wglu);                       /* 1005 */
        }
     else
       { wglu->fl2=1;     /*  SNA               */
         return (wglu);
       }
  }
