Beispiel #1
0
void print_AllSTD(student_t *student, int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("%i.", (i+1));
        print_std(&student[i]);
        printf("");
    }
}
Beispiel #2
0
void gfall_( 
#endif
             int *IUT0, int *IUT6, int *IUNIT, char *FILEd
            ,int *MCOMFL, int *NCOMFL, char *COMFLE 
            ,int *MCOMST, int *NCOMST, char *COMSET 
            ,int *IACT, int *IWRITE, int *INAME,int *IWREV
            ,int *ICAST,int *IDATA0, int *IALL ,int *ISKIP ,int *IERR
            ,char *fmt , ...)
{
  va_list ap         ;       /* ARGUMENT LIST                                 */
  TABLE table[NDATA] ;       /* DATE-TABLE                                    */
  int   key_list_ptr[NDATA]; /*                                               */
  int   *ICHECK      ;       /* (=999999) FLAG TO CHECK ARGUMENT SETTING      */

  char  cdefault=' ' ;       /* LOCAL CHAR  ARGUMENT TO INITIALIZE DATA-TABLE */  
  int   idefault=1   ;       /* LOCAL INT   ARGUMENT TO INITIALIZE DATA-TABLE */   
  int   idefault2=1  ;       /* LOCAL INT   ARGUMENT TO INITIALIZE DATA-TABLE */   
  int   idefault3=1  ;       /* LOCAL INT   ARGUMENT TO INITIALIZE DATA-TABLE */   
  float fdefault=0.0 ;       /* LOCAL FLOAT ARGUMENT TO INITIALIZE DATA-TABLE */  


  const char *ERMSGA = " ## SUBROUTINE GFALL : RECOVERBLE ERROR OCCURENCE; CONTINUE   ";
  const char *ERMSGB = " ## SUBROUTINE GFALL : FATAL      ERROR OCCURENCE; RETURNED   ";
  const char *ERRCV1 = " ## THE PARAMETER 'INAME' WILL BE SET TO THE DEFAULT VALUE    ";
  const char *EREXP1 = " ## KEYWORD IS NOT DEFINED IN gfc.h                           ";
  const char *EREXP2 = " ## ERROR OCCUERED WHEN MAKING DATA TABLE                     ";
  const char *EREXP3 = " ## AN ILLEGAL VALUE WAS SPECIFIED FOR A CONTROLLING PARAMETER";

  const char *WRMSG0 = " ## SUBROUTINE GFALL : WARNING                                ";
  const char *WRMSG1 = " ## GFALL: WARNING INCOMPLETE SET, DISCARD DATA               ";
  const char *WRMSG2 = " ## GFALL: NOTE! DATA WERE NOT READ BECAUSE ISKIP WAS SET TO 1";
  const char *WRMSG3 = " ## GFALL: RETURNED SINCE IALL=-2 AND NEW_SET IS FOUND        ";
  const char *WRMSG4 = " ## GFALL: RETURNED SINCE IALL=-1 AND THE 2ND NEW_SET FOUND   ";
  const char *WRMSG5 = " ## GFALL: NOTE! -2 WILL BE SET TO THE IALL                   ";
  const char *WRMSG6 = " ## GFALL: NOTE!  2 WILL BE SET TO THE ERROR CODE, IERR       ";

  const char *OPNMSG[8] = {  " GFALL: LOOKING FOR A DATA SET                           "
                            ," GFALL: WRITING     A DATA SET                           "        
                            ," GFALL: OPENING     A DATA FILE                          "       
                            ," GFALL: OPENING     A DATA FILE                          "       
                            ," GFALL: LOOKING FOR THE NEXT DATA SET                    " 
                            ," GFALL: APPEND-WRITING     A DATA SET                    " 
                            ," GFALL: CLOSING     THE DATA FILE                        "     
                            ," GFALL: CLOSING     THE DATA FILE                        "     
                         } ;

 const char *ENDMSG[2] = {  "GFALL: SUCCESSFULLY RETURNING                             "
                           ,"GFALL: INCOMPLETE READ (END OF FILE)                      " 
                        };

 const char *ACTION[3] = {  "** PERSING ***"
                           ,"** READING OK ***"
                           ,"** WRITING OK ***" };

 const char *TYPEARG[3] = {  "INTEGER"
                            ,"SINGLE "
                            ,"DOUBLE " };

  const int  INAMED = 1;

  /*LOCAL ENTRY FOR BUFFER */ 
  char  *p                     ;
  char  headx[9]= " "          ;
  char  FILE[61]   = " "       ;
  char  CDUMMY[61]             ;
  char  NAMERD[31]             ;
  char  KEYWRD[9]= " "         ; 
  int   i,j,nbuf,idata         ;   
  int   ndata=0                ;
  int   keynum                 ; 
  int   TYPE0                  ;
  int   imatch=0               ;
  int   *NUM,*NUM2,NUMd,NUM2d  ;
  int   IERRDM                 ;
  int   *IVAR,ibuf             ;  
  float *FVAR,fbuf             ;

  /*LOCAL ENTRY FOR READ & WRITE MODE */ 
  int        ITYPE[2] ;       /*SPECIFIES THE TYPE OF ACTION TO BE TAKEN         */
  int        IDEST    ;       /*SPECIFIES DESTINATION VARIABLE/ARRAYS TO STORE   */
  int        ISRCE    ;       /*SPECIFIES SOURCE VARIABLE/ARRAYS TO BE WRITTEN   */
  static int IMODE[FILEMAX];  /*SPECIFIES THE TYPE OF INPUT  MODE                */
  static int IFPOS[FILEMAX];  /*SPECIFIES CURRENT FILE POSITION                  */
  int JGOT[NDATA],JSTART,JALL;/*LOCAL ENTRY FOR CHECKING READ-IN DATA            */

/*********************************************************************************/
/* NOTE                                                                          */
/*  ITYPE[0] HAS A SAME SENSE AS ONE OF PREVIOUS VESION, AND ITYPE[1] IS NEEDED  */  
/* TO CHECK THE TYPE OF PASSED ARUGUMENT, WHICH IS INTEGER ,OR SINGLE FLOATING   */
/* POINT ,OR DOUBLE FLOATING POINT.                                              */
/*********************************************************************************/

  JSTART=0; 
  JALL  =0; 
  for(i=0;i<NDATA;i++) JGOT[i]=0;

#ifdef DEBUG0
for(i=1;i<=MAXKEY;i++){
printf("%2d %s  ",i,KEYWD0[i]);
switch( TYPE[i]){
case  TYPEI0 : printf("TYPEI0"); break;
case  TYPEI1 : printf("TYPEI1"); break;
case  TYPEI2 : printf("TYPEI2"); break;
case  TYPEI3 : printf("TYPEI3"); break;
case  TYPEIN : printf("TYPEIN"); break;
case  TYPEF0 : printf("TYPEF0"); break;
case  TYPEF1 : printf("TYPEF1"); break;
case  TYPEF2 : printf("TYPEF2"); break;
case  TYPEF3 : printf("TYPEF3"); break;
case  TYPEFN : printf("TYPEFN"); break;
default      : printf("NOT MATCH"); break;
}
printf("\n");
}
#endif

  /*GFALL: **********************************************************************/
  /*GFALL: [0    ] START OF EXCUTION OF GFALL */

  /*GFALL: **********************************************************************/
  /*GFALL: [1    ] PERSE FORMAT SENTENCE AND MAKE DATA-TABLE*/
  /*GFALL: [1-1  ] COUNT NUMBER OF KEYWORD */
  p=fmt;
  i=0;

  while(*p!='\0'&&*p!='!'){
      if(*p == '*'){
          key_list_ptr[ndata]=i;
          ndata++;
      } 
      p++;
      i++;
  }/*while(*p) */
  sprintf(MESSAGE,"** GFALL   *** :ndata :%d ",ndata); 
  print_std(IUT6,MESSAGE);

  /*GFALL: [1-2  ] INITIALIZE TABLE */
  for(i=0;i<ndata;i++){ 
      table[i].name   = &cdefault;
      table[i].keynum =  idefault;
      table[i].max2   = &idefault;
      table[i].max    = &idefault;
      table[i].num2   = &idefault2;
      table[i].num    = &idefault3;
      table[i].i0     = &idefault;
      table[i].i1     = &idefault;
      table[i].i2     = &idefault;
      table[i].i3     = &idefault;
      table[i].in     = &idefault;
      table[i].f0     = &fdefault;
      table[i].f1     = &fdefault;
      table[i].f2     = &fdefault;
      table[i].f3     = &fdefault;
      table[i].fn     = &fdefault;
  }/* for(i=0;i<ndata;i++)  */

  /*GFALL: [1-3  ] SEARCH KEYWORD AND CHECK KEYNUM */
  for(nbuf=0;nbuf<ndata;nbuf++){
      p=fmt+key_list_ptr[nbuf];
      headx[0]=*p; 
      for(i=0;i<7;i++){
          p++;
          headx[i+1]=*p;
      }
      imatch=0; 
      for(i=1;i<=MAXKEY;i++){
          if(strcmp(headx,KEYWD0[i])==0){
              table[nbuf].keynum=i;
              keynum=table[nbuf].keynum;  
              TYPE0=TYPE[keynum];
              if(   TYPE0==TYPEI0 || TYPE0==TYPEI1 || TYPE0==TYPEI2 
                 || TYPE0==TYPEI3 || TYPE0==TYPEIN){
                  table[nbuf].itype=INTARY;
              }
              else{
	          p++;CDUMMY[0]=*p;
	          p++;CDUMMY[1]=*p;
                  if(CDUMMY[0]=='%' && CDUMMY[1]=='D') {table[nbuf].itype=DBLARY;}
                  else                                 {table[nbuf].itype=FLTARY;}
              }
          imatch=1;
          }
      }
      if(imatch==0){
          sprintf(MESSAGE,ERMSGB);                        print_std(IUT0,MESSAGE);
          sprintf(MESSAGE," UNDEFINED KEYWORD :%s",headx);print_std(IUT0,MESSAGE);
          sprintf(MESSAGE,EREXP1);strcat(MESSAGE,headx);  print_std(IUT0,MESSAGE);
          *IERR=1; 
          return;
      }
      keynum=table[nbuf].keynum;
#ifdef DEBUG1
printf("%02d-th keynum=%2d:keyword=%8s:data-type=%s:default-name=%s \n"
,nbuf,keynum,KEYWD0[keynum],CTYPE[TYPE[keynum]],NAME0[keynum]);
#endif
  }

  /*GFALL: [1-4  ] MAKE DATA TABLE */
  va_start(ap,fmt);
  for(i=0;i<ndata;i++){
      keynum=table[i].keynum;  
      TYPE0 =table[i].itype-6;      
 
      switch(TYPE[keynum]){
          case TYPEI0: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEI0 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].max2 = &ONE;
              table[i].max  = &ONE;
              table[i].name = va_arg(ap, char *);
              table[i].i0   = va_arg(ap, int  *);
              break;

          case TYPEI1: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEI1 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char *);
              table[i].max  = va_arg(ap, int  *);
              table[i].max2 = &ONE;
              table[i].num  = va_arg(ap, int  *);
              table[i].num2 = &ONE;
              table[i].i1   = va_arg(ap, int  *);
              break;

          case TYPEI2: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEI2 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char *);
              table[i].max  = va_arg(ap, int  *);
              table[i].max2 = &TWO;
              table[i].num  = va_arg(ap, int  *);
              table[i].num2 = &TWO;
              table[i].i1   = va_arg(ap, int  *);
              table[i].i2   = va_arg(ap, int  *);
              break;

          case TYPEI3: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEI3 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char *);
              table[i].max  = va_arg(ap, int  *);
              table[i].max2 = &THREE;
              table[i].num  = va_arg(ap, int  *);
              table[i].num2 = &THREE;
              table[i].i1   = va_arg(ap, int  *);
              table[i].i2   = va_arg(ap, int  *);
              table[i].i3   = va_arg(ap, int  *);
              break;

          case TYPEIN: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEIN IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char *);
              table[i].max  = va_arg(ap, int  *);
              table[i].max2 = va_arg(ap, int  *);
              table[i].num  = va_arg(ap, int  *);
              table[i].num2 = va_arg(ap, int  *);
              table[i].in   = va_arg(ap, int  *);
              break;
 
          case TYPEF0: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEF0 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].max2 = &ONE;
              table[i].max  = &ONE;
              table[i].name = va_arg(ap, char  *);
              table[i].f0   = va_arg(ap, float *);
              break;

          case TYPEF1: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEF1 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char  *);
              table[i].max  = va_arg(ap, int   *);
              table[i].max2 = &ONE;
              table[i].num  = va_arg(ap, int   *);
              table[i].num2 = &ONE;
              table[i].f1   = va_arg(ap, float *);
              break;

          case TYPEF2: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEF2 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char *);
              table[i].max  = va_arg(ap, int   *);
              table[i].max2 = &TWO;
              table[i].num  = va_arg(ap, int   *);
              table[i].num2 = &TWO;
              table[i].f1   = va_arg(ap, float *);
              table[i].f2   = va_arg(ap, float *);
              break;

          case TYPEF3: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEF3 IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char *);
              table[i].max  = va_arg(ap, int   *);
              table[i].max2 = &THREE;
              table[i].num  = va_arg(ap, int   *);
              table[i].num2 = &THREE;
              table[i].f1   = va_arg(ap, float *);
              table[i].f2   = va_arg(ap, float *);
              table[i].f3   = va_arg(ap, float *);
              break;

          case TYPEFN: 
              sprintf(MESSAGE,"%s  :%8s: POINTER OF TYPEFN IS SET AS %8s"
                             ,ACTION[0],KEYWD0[keynum],TYPEARG[TYPE0]); 
              table[i].name = va_arg(ap, char  *);
              table[i].max  = va_arg(ap, int   *);
              table[i].max2 = va_arg(ap, int   *);
              table[i].num  = va_arg(ap, int   *);
              table[i].num2 = va_arg(ap, int   *);
              table[i].fn   = va_arg(ap, float *);
              break;
 
      }/* switch(TYPEkeynum]) */

      print_std(IUT6,MESSAGE);

  }/* for(i=0;i<ndata;i++) */

  /*GFALL: [1-5  ] CHECK :ARGUMENT IS CORRECTLY SET ? */
  ICHECK = va_arg(ap, int   *);
  if(*ICHECK != 999999){
      sprintf(MESSAGE,ERMSGB);print_std(IUT0,MESSAGE);
      sprintf(MESSAGE,EREXP2);print_std(IUT0,MESSAGE);
      *IERR=1;
      return;
  }
  va_end(ap);


   /*GFALL: **********************************************************************/
  /*GFALL: [2    ] PREPARE FOR READ AND WRITE MODE */
  /*GFALL: [2-1  ] DUMMY SUBSTITUTION TO AVOID WARNING OF COMPILER */
  ibuf=0 ; IVAR=&ibuf;
  fbuf=0 ; FVAR=&fbuf;
  NUMd=0 ; NUM =&NUMd ; 
  NUM2d=0; NUM2=&NUM2d; 

  /*GFALL: [2-2  ] SET FILE NAME AS C CHARACTER CODE FORMAT */
  i=0;while( *(FILEd+i) != ' ' && i<61){*(FILE+i)=*(FILEd+i);i++;}

  /*GFALL: [2-3  ] SET INITIAL VALUES */
  *IERR = 0;
  *IWREV = *IWREV;
  JSTART=0;
  if(*IACT!=1 && *IACT!=5) JALL=2;

  if(*IACT%2==1) {
      for(idata=0;idata<ndata;idata++){
          *table[idata].num=0;
      }
  }


  /*GFALL: [2-4  ] CHECK PASSED CONTROL PARAMETERS */
  if(*IACT<1 || *IACT>8){
      sprintf(MESSAGE,ERMSGB);print_std(IUT0,MESSAGE);
      sprintf(MESSAGE,EREXP3);print_std(IUT0,MESSAGE);
      *IERR = 1;
      return;
  }

  if(*IACT%2==0 && *IWRITE!=1&& *IWRITE!=2&& *IWRITE!=3){
      sprintf(MESSAGE,ERMSGB);print_std(IUT0,MESSAGE);
      sprintf(MESSAGE,EREXP3);print_std(IUT0,MESSAGE);
      *IERR = 1;
      return;
  }

  if(*IALL!=-2 && *IALL!=-1 && *IALL!=0 && *IALL!=1 ){
      sprintf(MESSAGE,ERMSGB);print_std(IUT0,MESSAGE);
      sprintf(MESSAGE,EREXP3);print_std(IUT0,MESSAGE);
      *IERR = 1;
      return;
  }

  if(*IACT%2==0 && *INAME!=1&& *INAME!=2){
      sprintf(MESSAGE,ERMSGA);print_std(IUT0,MESSAGE);
      sprintf(MESSAGE,EREXP3);print_std(IUT0,MESSAGE);
      sprintf(MESSAGE,ERRCV1);print_std(IUT0,MESSAGE);
      *INAME=INAMED;
  }

  if(*ISKIP!=0 && *ISKIP!=1){
      *ISKIP=0;
  }

  /*GFALL: **********************************************************************/
  sprintf(MESSAGE,"%s",OPNMSG[*IACT-1]);          print_std(IUT6,MESSAGE);
  sprintf(MESSAGE," FILENAME       =   %s",FILE); print_std(IUT6,MESSAGE);

  /*GFALL: [3    ] ACTION TYPE READ */
  if(*IACT%2==1){
    
  /*GFALL: [3-1  ] OPEN THE FILE */
      if(*IACT==1 || *IACT==3){
          ITYPE[0]=OPEN;
          gfrd_(ITYPE,&IDEST,&IMODE[*IUNIT],&IFPOS[*IUNIT],ICAST,
                IUNIT,FILE,KEYWRD,NAMERD,COMFLE,
                IVAR,IVAR,IVAR,IVAR,IVAR,
                FVAR,FVAR,FVAR,FVAR,FVAR,
                NUM,NCOMFL,&ONE,MCOMFL,IUT0,IERR);
          if(ONE!=1)*IERR=1;
          if(*IERR!=0)goto line999;

          p=COMFLE;
          for(i=0;i<*NCOMFL;i++){
              for(j=0;j<59;j++)CDUMMY[j]=p[j];
              CDUMMY[59] = '\0';
              sprintf(MESSAGE,"FILE COMMENT %s ",CDUMMY);
              print_std(IUT6,MESSAGE); 
              p=p+60;
          }

      }/* if(*IACT==1 || *IACT==3) */

  /*GFALL: [3-2  ] SEARCH AND READ THE NEXT FLOW DATA SET */
      if(*IACT==1 || *IACT==5){
 
      line100: ;

  /*GFALL: [3-2-1] CHECK IF ALL DATA HAVE BEEN READ-IN */
      JALL=JSTART;
      for(i=0;i<ndata;i++){
          JALL=JALL*JGOT[i];
      }
      if(JALL==1) goto line200; 

  /*GFALL: [3-2-2] INQUIRE THE NEXT CONTENT IN THE FILE */ 
      ITYPE[0]=INQUIR;
      gfrd_(ITYPE,&IDEST,&IMODE[*IUNIT],&IFPOS[*IUNIT],ICAST,
            IUNIT,FILE,KEYWRD,NAMERD,COMSET,
            IVAR,IVAR,IVAR,IVAR,IVAR,
            FVAR,FVAR,FVAR,FVAR,FVAR,
            NUM,NCOMST,&ONE,MCOMST,IUT0,IERR);
      if(ONE!=1)*IERR=1;
      if(*IERR!=0)goto line999;

  /*GFALL: [3-2-3] END OF THE FILE */
      if(ITYPE[0]==CLOSE){
          *IACT=7;
          goto line200;    
      } 

  /*GFALL: [3-2-3] A NEW SET */
      if(ITYPE[0]==NEWSET){
          if(JSTART==1){
              sprintf(MESSAGE,WRMSG0);print_std(IUT6,MESSAGE);
              sprintf(MESSAGE,WRMSG1);print_std(IUT6,MESSAGE);
          } 

          if(*IALL==-2){
              sprintf(MESSAGE,WRMSG0);print_std(IUT6,MESSAGE);
              sprintf(MESSAGE,WRMSG3);print_std(IUT6,MESSAGE);
              sprintf(MESSAGE,WRMSG6);print_std(IUT6,MESSAGE);
	      *IERR= 2;
	      return;
	  }

          if(*IALL==-1&&JSTART==1){
              sprintf(MESSAGE,WRMSG0);print_std(IUT6,MESSAGE);
              sprintf(MESSAGE,WRMSG4);print_std(IUT6,MESSAGE);
              sprintf(MESSAGE,WRMSG5);print_std(IUT6,MESSAGE);
              sprintf(MESSAGE,WRMSG6);print_std(IUT6,MESSAGE);
	      *IERR= 2;
	      *IALL=-2;
	      return;
	  }

          p=COMSET;
          for(i=0;i<*NCOMST;i++){
              for(j=0;j<59;j++)CDUMMY[j]=p[j];
              CDUMMY[59] = '\0';
              sprintf(MESSAGE,"SET  COMMENT %s ",CDUMMY);
              print_std(IUT6,MESSAGE); 
              p=p+60;
          }
          for(i=0;i<ndata;i++){
              JGOT[i]=0;
          }    
          JSTART=1;
          goto line100 ;
       }/* if(ITYPE[0]==NEWSET) */ 

  /*GFALL: [3-2-4] CHECK :KEYWORD IS MATCHED IN THE LIST OF gfc.h */
      imatch=0; 
      for(i=1;i<=MAXKEY;i++){
          if(strcmp(KEYWRD,KEYWD0[i])==0){
              imatch=1;
              keynum=i;
          }
      }
      if(imatch==0){
          sprintf(MESSAGE,ERMSGB);               print_std(IUT0,MESSAGE);
          sprintf(MESSAGE,"%s %s",EREXP1,KEYWRD);print_std(IUT0,MESSAGE);
          *IERR=1; 
          return;
      }

  /*GFALL: [3-2-5] CHECK :KEYWORD IS MATCHED IN THE LIST OF ARGUMENT */
      imatch=0; 
      for(i=0;i<ndata;i++){
          if(keynum==table[i].keynum&&JGOT[i]==0){
              imatch=1; 
              idata=i;
          }  
      }

  /*GFALL: [3-2-6] READ DATA */
      if(imatch==1){
          switch(TYPE[keynum]){
              case TYPEI0: IDEST= ARY0D;break;
              case TYPEI1: IDEST= ARY1D;break;
              case TYPEI2: IDEST= ARY1D;break;
              case TYPEI3: IDEST= ARY1D;break;
              case TYPEIN: IDEST= ARY2D;break;
              case TYPEF0: IDEST= ARY0D;break;
              case TYPEF1: IDEST= ARY1D;break;
              case TYPEF2: IDEST= ARY1D;break;
              case TYPEF3: IDEST= ARY1D;break;
              case TYPEFN: IDEST= ARY2D;break;
          }

          ITYPE[1]=table[idata].itype;
	  
#ifdef DEBUG000
printf("PASS 000 \n");
printf("PASS 000 :ITYPE :%d\n",ITYPE[0] );
printf("PASS 000 :KEYWRD:%s\n",KEYWRD);
printf("PASS 000 :keynum:%d\n",keynum);
printf("PASS 000 :idata :%d\n",idata );
printf("PASS 000 :imatch:%d\n",imatch);
printf("PASS 000 :IDEST :%d\n",IDEST );
printf("PASS 000 :MAX2  :%d\n",*table[idata].max2  );
printf("PASS 000 :MAX   :%d\n",*table[idata].max   );
#endif

          i=idata;
          if(*ISKIP==1) ITYPE[0]=-ITYPE[0];
          gfrd_(ITYPE,&IDEST,&IMODE[*IUNIT],&IFPOS[*IUNIT],ICAST,
                IUNIT,FILE,KEYWRD,NAMERD,COMSET,
                table[i].i0,table[i].i1,table[i].i2,table[i].i3,table[i].in,
                table[i].f0,table[i].f1,table[i].f2,table[i].f3,table[i].fn,
                table[i].num,table[i].num2,table[i].max,table[i].max2,IUT0,IERR);

          if(*IERR!=0)goto line999;
          JGOT[idata]=1;

          for(j=0;j<30;j++) *(table[idata].name+j)=*(NAMERD+j);
          j=30;             *(NAMERD+j)='\0';

          sprintf(MESSAGE,"%s  %s  (%8d,%8d)" 
                 ,ACTION[1],NAMERD,*table[idata].num2,*table[idata].num);
          if(TYPE[keynum]==TYPEI0){
              sprintf(CDUMMY,"%8d"   ,*table[idata].i0);
              strcat(MESSAGE,CDUMMY) ;
          }  
          if(TYPE[keynum]==TYPEF0){
              if(table[idata].itype==FLTARY){
                  sprintf(CDUMMY,"%14.6E",*table[idata].f0);
                  strcat(MESSAGE,CDUMMY) ;
              }
              if(table[idata].itype==DBLARY){
                  sprintf(CDUMMY,"%22.14E",*(double *)table[idata].f0);
                  strcat(MESSAGE,CDUMMY) ;
              }
          }
          print_std(IUT6,MESSAGE);

          goto line100;

      }/* if(imatch==1) */

  /*GFALL: [3-2-7] SKIP TO THE NEXT DATA */
      if(imatch==0){
          ITYPE[0]=-ITYPE[0];
          gfrd_(ITYPE,&IDEST,&IMODE[*IUNIT],&IFPOS[*IUNIT],ICAST,
                IUNIT,FILE,KEYWRD,NAMERD,COMSET,
                IVAR,IVAR,IVAR,IVAR,IVAR,
                FVAR,FVAR,FVAR,FVAR,FVAR,
                NUM,NUM2,&ONE,&ONE,IUT0,IERR);
          if(ONE!=1)*IERR=1;
          if(*IERR!=0)goto line999;

          sprintf(MESSAGE,"%s  SKIP TO THE NEXT DATA           (%8s)" ,ACTION[1],KEYWRD);
          print_std(IUT6,MESSAGE);

          goto line100;
      }/* if(imatch==0) */
    
      line200: ;
  }/* if(*IACT==1 || *IACT==5) */

  line999: ;

  /*GFALL: [3-3  ] CLOSE THE FILE */
  if(*IACT==1 || *IACT==7 || *IERR!=0){

  ITYPE[0]=CLOSE;
  gfrd_(ITYPE,&IDEST,&IMODE[*IUNIT],&IFPOS[*IUNIT],ICAST,
        IUNIT,FILE,KEYWRD,NAMERD,COMSET,
        IVAR,IVAR,IVAR,IVAR,IVAR,
        FVAR,FVAR,FVAR,FVAR,FVAR,
        NUM,NUM2,&ONE,&ONE,IUT0,&IERRDM);
  if(ONE!=1)*IERR=1;
  /* Note : IERRDM is used to avoid resetting IERR ARGUMENT */
  }/* if(*IACT==1 || *IACT==7 || *IERR!=0) */

  if(JALL==0&&*IALL==1){
      sprintf(MESSAGE,ENDMSG[1]);print_std(IUT6,MESSAGE);
      sprintf(MESSAGE,ERMSGB);print_std(IUT0,MESSAGE);
      *IERR=1;
      return;
  }

  if(*IERR==0){
      if(JALL==0){sprintf(MESSAGE,ENDMSG[1]);}
      else       {sprintf(MESSAGE,ENDMSG[0]);}
      print_std(IUT6,MESSAGE);
      if(*ISKIP==1){sprintf(MESSAGE,WRMSG2);print_std(IUT6,MESSAGE);}

  }
  else{
      sprintf(MESSAGE,ERMSGB);
      print_std(IUT0,MESSAGE);
      
  }

  return;
  }/* if(*IACT%2==1) */

  /*GFALL: **********************************************************************/
  /*GFALL: [4    ] ACTION TYPE WRITE */
  if(*IACT%2==0){

  /*GFALL: [4-1  ] OPEN THE FILE IN THE SPECIFIED MODE */
  if(*IACT==2 || *IACT==4 ){
      ITYPE[0] = OPEN;
      gfwrt_(ITYPE,&ISRCE,IWRITE,IWREV,
             IUNIT,FILE,KEYWRD,NAMERD,COMFLE,
             IVAR,IVAR,IVAR,IVAR,IVAR,
             FVAR,FVAR,FVAR,FVAR,FVAR,
             NUM,NCOMFL,&ONE,IUT0,IERR);
      if(ONE!=1)*IERR=1;
      if(*IERR!=0)goto line999;

      p=COMFLE;
      for(i=0;i<*NCOMFL;i++){
          for(j=0;j<59;j++)CDUMMY[j]=p[j];
          CDUMMY[59] = '\0';
          sprintf(MESSAGE,"FILE COMMENT %s ",CDUMMY);
          print_std(IUT6,MESSAGE); 
          p=p+60;
      }

  }/* if(*IACT==2 || *IACT==4 ) */

  /*GFALL: [4-2  ] APPEND-WRITE A FLOW DATA SET */   
  if(*IACT==2 || *IACT==6 ){

      ITYPE[0]=NEWSET;
      gfwrt_(ITYPE,&ISRCE,IWRITE,IWREV,
             IUNIT,FILE,KEYWRD,NAMERD,COMSET,
             IVAR,IVAR,IVAR,IVAR,IVAR,
             FVAR,FVAR,FVAR,FVAR,FVAR,
             NUM,NCOMST,&ONE,IUT0,IERR);
      if(ONE!=1)*IERR=1;
      if(*IERR!=0)goto line1999;
     
      p=COMSET;
      for(i=0;i<*NCOMST;i++){
          for(j=0;j<59;j++)CDUMMY[j]=p[j];
          CDUMMY[59] = '\0';
          sprintf(MESSAGE,"SET  COMMENT %s ",CDUMMY);
          print_std(IUT6,MESSAGE); 
          p=p+60;
      }

  /*GFALL: [4-3  ] WRITE DATA */
      for(idata=0;idata<ndata;idata++){
   
          if(*table[idata].num>0 || *IDATA0==1 ){

 	
              keynum=table[idata].keynum;
              strcpy(KEYWRD,KEYWD0[table[idata].keynum ]);
              if(*INAME==1){
                  for(j=0;j<30;j++){
                     table[idata].name[j]=*(NAME0[keynum]+j);
                  }
              }

              switch(TYPE[keynum]){
                  case TYPEI0: ITYPE[0]=INTARY; ISRCE= ARY0D ; break;
                  case TYPEI1: ITYPE[0]=INTARY; ISRCE= ARY1D ; break;
                  case TYPEI2: ITYPE[0]=INTARY; ISRCE= ARY1D ; break;
                  case TYPEI3: ITYPE[0]=INTARY; ISRCE= ARY1D ; break;
                  case TYPEIN: ITYPE[0]=INTARY; ISRCE= ARY2D ; break;
                  case TYPEF0: ITYPE[0]=FLTARY; ISRCE= ARY0D ; break;
                  case TYPEF1: ITYPE[0]=FLTARY; ISRCE= ARY1D ; break;
                  case TYPEF2: ITYPE[0]=FLTARY; ISRCE= ARY1D ; break;
                  case TYPEF3: ITYPE[0]=FLTARY; ISRCE= ARY1D ; break;
                  case TYPEFN: ITYPE[0]=FLTARY; ISRCE= ARY2D ; break;
              }
              ITYPE[0]=table[idata].itype;

#ifdef DEBUG001          
printf("PASS 001 \n");
printf("PASS 001 :ITYPE :%d\n",ITYPE[0] );
printf("PASS 001 :KEYWRD:%s\n",KEYWRD);
printf("PASS 001 :keynum:%d\n",keynum);
printf("PASS 001 :idata :%d\n",idata );
printf("PASS 001 :imatch:%d\n",imatch);
printf("PASS 001 :ISRCE :%d\n",ISRCE );
printf("PASS 001 :MAX2  :%d\n",*table[idata].max2  );
printf("PASS 001 :MAX   :%d\n",*table[idata].max   );
printf("PASS 001 :IUT0  :%d\n",*IUT0);
#endif

              i=idata;
              gfwrt_(ITYPE,&ISRCE,IWRITE,IWREV,
                     IUNIT,FILE,KEYWRD,table[idata].name,COMSET,
                     table[i].i0,table[i].i1,table[i].i2,table[i].i3,table[i].in,
                     table[i].f0,table[i].f1,table[i].f2,table[i].f3,table[i].fn,
                     table[i].num,table[i].num2,table[i].max2,IUT0,IERR);
              if(*IERR!=0)goto line1999;

              for(j=0;j<30;j++) *(NAMERD+j)=*(table[idata].name+j) ;
              j=30;             *(NAMERD+j)='\0';
             
              sprintf(MESSAGE,"%s  %s  (%8d,%8d)" 
                     ,ACTION[2],NAMERD,*table[idata].num2,*table[idata].num);
              if(TYPE[keynum]==TYPEI0){
                  sprintf(CDUMMY,"%8d"   ,*table[idata].i0);
                  strcat(MESSAGE,CDUMMY) ;
              }  
              if(TYPE[keynum]==TYPEF0){
                  if(table[idata].itype==FLTARY){
                      sprintf(CDUMMY,"%14.6E",*table[idata].f0);
                      strcat(MESSAGE,CDUMMY) ;
                  }
                  if(table[idata].itype==DBLARY){
                      sprintf(CDUMMY,"%14.6E",*(double *)table[idata].f0);
                      strcat(MESSAGE,CDUMMY) ;
                  }
              }
              print_std(IUT6,MESSAGE);

          }/* if(*table[idata].num>0) */

      }/* for(idata=0;idata<ndata;idata++) */

  }/* if(*IACT==2 || *IACT==6 ) */

  line1999: ;

  /*GFALL: [4-4  ] CLOSE THE FILE */
  if(*IACT==2 || *IACT==8 ){
      ITYPE[0] = CLOSE;
      gfwrt_(ITYPE,&ISRCE,IWRITE,IWREV,
             IUNIT,FILE,KEYWRD,NAMERD,COMFLE,
             IVAR,IVAR,IVAR,IVAR,IVAR,
             FVAR,FVAR,FVAR,FVAR,FVAR,
             &ONE,&ONE,&ONE,IUT0,&IERRDM);
      if(ONE!=1)*IERR=1;
      /* Note : IERRDM is used to avoid resetting IERR ARGUMENT */
  }

  if(*IERR==0){
      if(JALL==0){sprintf(MESSAGE,ENDMSG[1]);}
      else       {sprintf(MESSAGE,ENDMSG[0]);}
      print_std(IUT6,MESSAGE);
  }
  else{
      sprintf(MESSAGE,ERMSGB);
      print_std(IUT0,MESSAGE);
  }/* if(*IERR==0) */

  return;

  }/* if(*IACT%2==0) */

}