/*----------- http://publib.boulder.ibm.com/infocenter/tpfhelp/current/topic/com.ibm.tpf.doc_put.cur/pdf/gtpa2m00.pdf----------------------------------------------------------------*
*              *
*  NAME = dxcnucl   VER=00    4MAY92     PROGRAMMED BY KIM,SB *
*---------------------------------------------------------------------------*/
#include <myapphdr.h>
#include <string.h>
#include <memory.h>
#include <ctype.h>
#include <stdlib.h>
#define maxlin 1000
struct TPF_regs  regs = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 } ;  /** register areas*/

static char string [maxlin]; /**this area is used for d/b read and system wrk**/
 static char fn  [10]   ;  /** file  names ***/
 int long i = 0L ;
 int long  c=0L;
main()
{
     char    *p_wrk ;  /**** start point of work area used by kread pgm ***/
 FILE   *fpt;
  FILE *fpo;
  long rc ;
  char ch ;
  int long no ,*intptr    ;

  /**@@  char *malloc() ;  aldy alioc  @@**/
  struct lvl  *p_lvl  ;        /*** core level ****/
  struct lvl  *k  ;        /*** core level ****/
  struct eb0eb  *p_ecb        ;
 /***************************  CREATE ECB AND DATA LEVEL ***********/

  p_ecb =  0L ;
  p_lvl =  0L ;
  p_ecb =  (( struct eb0eb  * ) malloc(sizeof ( struct eb0eb  ))) ;
  p_lvl =  (( struct lvl  * ) malloc(sizeof ( struct lvl ))) ;
     /*@@
      mydply("ecb",p_ecb) ;
        mydply("lvl",p_lvl) ;
    @@@@***/
   memset (p_ecb ,0,sizeof ( struct eb0eb  ) ) ; /** clear the ecb    **/
   memset (p_lvl ,0,sizeof ( struct lvl    ) ) ; /** clear the lvl    **/
   /**@
 printf("\n size of ecb   =%08x=", sizeof ( struct eb0eb  )  ) ;
 printf("\n ecb area addr =%08x=", p_ecb ) ;
 printf("\n lvl area addr =%08lx=", p_lvl ) ;
   @@**/
 regs.r9 = (int long )    p_ecb ;
 ecbptr()->ce1cr0 = (int long )     p_lvl ;
 ecbptr()->ce1lva = (int long )     p_lvl ; /** save lvl storage addr for opzr pgm**/
 ecbptr()->ce1dbf = (int long )     p_lvl ; /*** to get temp data base information **/
 setlvladr ( ) ;         /** set level address **/
 ecbptr()->ce1ct0  = 0x0021 ; ecbptr()->ce1cc0  = 0x017d ; /**SET USED**/
 ecbptr()->ce1nol  = 1l    ;  /*** no of level used value is 1 ***/
  /*****  save work area pointer for kread program *******/
   p_wrk   =  &string[0]   ;       /** point of work area ***/
   ecbptr()->ce1krb = (int long ) p_wrk ;
 /***************  READ DATA BASE STRUCTURE ***********/
   /******** READ GENERATION DATA BASE INFORMATION *******/
  fpt= fopen("gend","r") ;
  while ( (ch= getc(fpt)) != '~'  ) string[i++] = ch ;
  string[i] = '~';/** set eof **/
  fclose(fpt) ;
 /****** search EACH FILE name and NO OF files ITEM  ****/
     i = 0 ;
     (long int)k =  ecbptr()->ce1dbf  ;
     while  ( string [i] != '~'  )
  {
      if  ( strncmp( &string[i] , "BAND=",5 ) == 0  )
    {
    strncpy( &(k->bann[c][0]) , &string[i+5],2); /** move band name **/
    i = i + 8 ;
    while ( strncmp( &string[i] , "NUMBER=",7) != 0  ) {i++  ;}
    i = i + 7 ;
    *intptr = 0L ;
    while ( string[i] >= '0' && string[i] <= '9'  )  /** convert to digit **/
      {
      *intptr = 10 * (*intptr) + string[i++] - '0'  ;
      }
    /**@@@   printf("\n number is =%d=" , *intptr )  ; @@@***/
    k->number[c] = *intptr  ;
    c++ ;
    }
      else ;
      i++ ;
  }
   /**@@@test@@@@***** at this point file name and no of files info is on area
   for ( i = 0 ;i < 10 ;i++)
      {
      printf("\nname =%c%c= no of rec =%d=", k->bann[i][0] ,k->bann[i][1] , k->number[i] ) ;
      }
   @@@@@@@@@***/
   /***************************search long or short  **************/
   i = 0 ; c=0 ;
   while  ( string [i] != '~'  )
      {
      if      ( strncmp( &string[i] , "TYPE=L1LT",9 ) == 0  ) srchid("L") ;
      else if ( strncmp( &string[i] , "TYPE=L1ST",9 ) == 0  ) srchid("S") ;
      ++i ;
      }
  /*** @@@@
 for ( i = 0 ;i < 30 ;i++)
  {
  printf("\nid   =%c%c= l or small=%c=",   k->ids [i][0]  ,  k->ids [i][1]  ,   k->ids [i][2]  ) ;
  } @@@@*********/
 /****** END OF DBLAYOUT *******************************************/
 entrc("opzr",&regs);
 printf("/end of nucl  job") ;
}
 /********///////////(   SUB ROUTINE AREA ) //////////////******/
srchid ( char *s)
{
  struct lvl  *k  ;        /*** core level ****/
  (long int) k =  ecbptr()->ce1dbf  ;
  /***@@@@ printf("\n index =%d=    character =%s=",i,s )  ; @@@@***/
    while ( strncmp( &string[i] , "ID=(",4) != 0  ) {++i  ;}
    i = i + 4  ;
   LOOP :
    if   ( strncmp( &string[i+2] , ",",1) == 0  )
       {
       strncpy( &(k->ids [c][0]) , &string[i],2); /** move id      **/
       strncpy( &(k->ids [c][2]) , s        ,1); /** move  l   or  s */
       ++c ;
       i = i +3 ;
       }
    else if( strncmp( &string[i+2] , ")",1) == 0  )      /**  end ?**/
       {
       strncpy( &(k->ids [c][0]) , &string[i],2); /** move id      **/
       strncpy( &(k->ids [c][2]) , s        ,1); /** move  l   or  s */
       ++c ;
       return ;
       }
    else
       ++i ;
   goto LOOP ;

}
/***********************************************************************/
/** sub routine of set level address for all level address     *********/
/***********************************************************************/
setlvladr ( )         /** set level address **/
{
  struct lvl  *k  ;        /*** core level ****/
     (long int)k =  ecbptr()->ce1lva  ;        /** set base ***/

     k->l0 = ecbptr()->ce1lva  ;
     k->l1 =  k->l0 +(long) L1LTSIZE  ;
     k->l2 =  k->l1 +(long) L1LTSIZE  ;
     k->l3 =  k->l2 +(long) L1LTSIZE  ;
     k->l4 =  k->l3 +(long) L1LTSIZE  ;
     k->l5 =  k->l4 +(long) L1LTSIZE  ;
     k->l6 =  k->l5 +(long) L1LTSIZE  ;
     k->l7 =  k->l6 +(long) L1LTSIZE  ;
     k->l8 =  k->l7 +(long) L1LTSIZE  ;
     k->l9 =  k->l8 +(long) L1LTSIZE  ;
     k->la =  k->l9 +(long) L1LTSIZE  ;
     k->lb =  k->la +(long) L1LTSIZE  ;
     k->lc =  k->lb +(long) L1LTSIZE  ;
     k->ld =  k->lc +(long) L1LTSIZE  ;
     k->le =  k->ld +(long) L1LTSIZE  ;
     k->lf =  k->le +(long) L1LTSIZE  ;
     return      ;
}
/*---------------------------------------------------------------------------*
*    cremc   macro handling   29jan93 sb kim        *
*              *
*---------------------------------------------------------------------------*/
/* void cremc(int , void *, void *);
**/
cremc(int  i, char *p, char *program_name   )
{
   FILE *fp   ;  char rc ; long ii ;
   static char data [200] ;
   static char buffer [200] ;
   long  offset = 0L ;

  /**@@  printf ("\n<< cremc -mac started >>") ;
  @@**/
  /*@@@@
   printf("\nstor address parmstrng  is %08x\n",p ) ;
  @@**/
 ii = (long ) i ;
 memcpy (&data[0],&ii,4) ;
 memcpy (&data[4],program_name ,4) ;
 memcpy (&data[8],p,ii) ;

      /*@@  mydplyh (&data[0],40) ;
      @@*/
   /****** write to disk ***************************/
   /****** read list disk **********/
      fp = fopen("dxccr" , "ab+")    ;
     /** list is not exist so create   routine ***/
     /*@@   printf("\n =%d=",fp) ;
     @@*/
     fseek(fp ,offset,0)   ;   /**���ھ�����0 **/
     rc = fwrite(&data[0] ,ii+8,1,fp );
         if (rc != 1  )
    {
     printf("\nSERRC CTL-000000 error writing to crem list  ") ;
     exit(99) ;
     }
   /*@@  printf("\n  crem list created  -e o j ") ;
   @@*/
    fclose(fp);
    return   ;
}
/*---------------------------------------------------------------------------*
*     chk level whether atted HANDLING PROGRAM    28jan93    KIM,SB      *
*  level test         *
*---------------------------------------------------------------------------*/
levtest(num)
{
 int r ;
 r =0 ; /** set ok  **/
 /***@@@@printf ("\n<< levtest pgm started >>"  )  ;   @@@@@@@@@@***/
  switch (num)
  {
  case 0 : { if ( ecbptr()->ce1ct0  == 0x0021) r=1     ; }break ;
  case 1 : { if ( ecbptr()->ce1ct1  == 0x0021) r=1     ; }break ;
  case 2 : { if ( ecbptr()->ce1ct2  == 0x0021) r=1     ; }break ;
  case 3 : { if ( ecbptr()->ce1ct3  == 0x0021) r=1     ; }break ;
  case 4 : { if ( ecbptr()->ce1ct4  == 0x0021) r=1     ; }break ;
  case 5 : { if ( ecbptr()->ce1ct5  == 0x0021) r=1     ; }break ;
  case 6 : { if ( ecbptr()->ce1ct6  == 0x0021) r=1     ; }break ;
  case 7 : { if ( ecbptr()->ce1ct7  == 0x0021) r=1     ; }break ;
  case 8 : { if ( ecbptr()->ce1ct8  == 0x0021) r=1     ; }break ;
  case 9 : { if ( ecbptr()->ce1ct9  == 0x0021) r=1     ; }break ;
  case 10: { if ( ecbptr()->ce1cta  == 0x0021) r=1     ; }break ;
  case 11: { if ( ecbptr()->ce1ctb  == 0x0021) r=1     ; }break ;
  case 12: { if ( ecbptr()->ce1ctc  == 0x0021) r=1     ; }break ;
  case 13: { if ( ecbptr()->ce1ctd  == 0x0021) r=1     ; }break ;
  case 14: { if ( ecbptr()->ce1cte  == 0x0021) r=1     ; }break ;
  case 15: { if ( ecbptr()->ce1ctf  == 0x0021) r=1     ; }break ;

  }

     return (r) ;
}
/*---------------------------------------------------------------------------*
*    level free        HANDLING PROGRAM    27OCT92    KIM,SB      *
*              *
*---------------------------------------------------------------------------*/
relcc (num)
{

  /***@@@@@@@ printf ("\n<< relcc pgm started >>"  )  ; @@@@@@@@@***/
  switch (num)
  {
  case 0 : {ecbptr()->ce1ct0  = 0x0001 ;  ecbptr()->ce1cr0  = 0L ;
    ecbptr()->ce1cc0  = 0x0000 ;}break ;
  case 1 : {ecbptr()->ce1ct1  = 0x0001 ;  ecbptr()->ce1cr1  = 0L ;
    ecbptr()->ce1cc1  = 0x0000 ;}break ;
  case 2 : {ecbptr()->ce1ct2  = 0x0001 ;  ecbptr()->ce1cr2  = 0L ;
    ecbptr()->ce1cc2  = 0x0000 ;}break ;
  case 3 : {ecbptr()->ce1ct3  = 0x0001 ;  ecbptr()->ce1cr3  = 0L ;
    ecbptr()->ce1cc3  = 0x0000 ;}break ;
  case 4 : {ecbptr()->ce1ct4  = 0x0001 ;  ecbptr()->ce1cr4  = 0L ;
    ecbptr()->ce1cc4  = 0x0000 ;}break ;
  case 5 : {ecbptr()->ce1ct5  = 0x0001 ;  ecbptr()->ce1cr5  = 0L ;
    ecbptr()->ce1cc5  = 0x0000 ;}break ;
  case 6 : {ecbptr()->ce1ct6  = 0x0001 ;  ecbptr()->ce1cr6  = 0L ;
    ecbptr()->ce1cc6  = 0x0000 ;}break ;
  case 7 : {ecbptr()->ce1ct7  = 0x0001 ;  ecbptr()->ce1cr7  = 0L ;
    ecbptr()->ce1cc7  = 0x0000 ;}break ;
  case 8 : {ecbptr()->ce1ct8  = 0x0001 ;  ecbptr()->ce1cr8  = 0L ;
    ecbptr()->ce1cc8  = 0x0000 ;}break ;
  case 9 : {ecbptr()->ce1ct9  = 0x0001 ;  ecbptr()->ce1cr9  = 0L ;
    ecbptr()->ce1cc9  = 0x0000 ;}break ;
  case 10: {ecbptr()->ce1cta  = 0x0001 ;  ecbptr()->ce1cra  = 0L ;
    ecbptr()->ce1cca  = 0x0000 ;}break ;
  case 11: {ecbptr()->ce1ctb  = 0x0001 ;  ecbptr()->ce1crb  = 0L ;
    ecbptr()->ce1ccb  = 0x0000 ;}break ;
  case 12: {ecbptr()->ce1ctc  = 0x0001 ;  ecbptr()->ce1crc  = 0L ;
    ecbptr()->ce1ccc  = 0x0000 ;}break ;
  case 13: {ecbptr()->ce1ctd  = 0x0001 ;  ecbptr()->ce1crd  = 0L ;
    ecbptr()->ce1ccd  = 0x0000 ;}break ;
  case 14: {ecbptr()->ce1cte  = 0x0001 ;  ecbptr()->ce1cre  = 0L ;
    ecbptr()->ce1cce  = 0x0000 ;}break ;
  case 15: {ecbptr()->ce1ctf  = 0x0001 ;  ecbptr()->ce1crf  = 0L ;
    ecbptr()->ce1ccf  = 0x0000 ;}break ;

  }
     ecbptr()->ce1nol --   ;
  /************  if nol is minus then dump ************/
     return ;
}
/*---------------------------------------------------------------------------*
*        ttttt  ppppp    ffffff       ccc      *
*   t  p    p    f       dddddd     c       *
*   t  ppppp    ffffff      c       *
*   t  p    f        ccc      *
*---------------------------------------------------------------------------*/
opzr()
{
   FILE *fpc  ;     /** list chk area**/
   long n ,l ,rc  ;     /** list chk area**/
   static char buffer [200] ;
   char *program_name  ,*p   ;       /** list chk area**/
   long offset = 0L  ;      /** list chk area**/

    struct mi0mi *imsg ;
    char ch, *j ;   int long  i=1L ;
    int long  count = 0L;

  /*@ printf ("\n << opzr-PGM-STARTED>> ") ;
  @*/
   /**************************************** check host in data */
   /**************************************** check host in data */
  if ((fpc= fopen("dxcins" , "r+")) == 0 )
     {
     goto NEXT ;     /** DATA is not exist ** goto next **/
     }
   fgets (buffer,199,fpc)      ; /* read to buffer **/
   fclose(fpc);
   imsg = ecbptr()->ce1cr0  ;
   memset (imsg,0,L1LTSIZE ) ; /** clear the buffer **/
   j = &(imsg-> mi0acc)  ;
   strncpy ( j ,buffer,200 ) ;
   imsg->mi0acc[ strlen(imsg->mi0acc) - 1 ] = 0 ;   /** set x0d to 0 **/
   imsg->mi0cct = strlen(buffer)-1 ;
   ecbptr()->ebrs01 = 1 ; /** set host input **/
   goto PROCESS ;

NEXT:
   /**************************************** check list   cremc**/
   /**************************************** check list   cremc**/
   /****** read list disk ****** s+w ****/
  if ((fpc= fopen("dxccr" , "r+")) == 0 )
     {
     goto INPUT;     /** list is not exist ** goto next **/
     }

  while (fseek(fpc,offset,0)  == 0    )   /**���ھ�����0 **/
     {
     rc = fread( &l,4,1,fpc);  if (rc != 1  )  { goto DEL   ; }
     offset = offset+4L;
     if (fseek(fpc,offset,0)  != 0 ) { goto ERROR ; }
    /*@ printf("\n loop d =%ld=",offset ) ;
    @*/
     rc = fread(&buffer[0], l+2L , 1 , fpc ); /**@@???@@**/
   /*@  printf("\n rc     =%ld=",rc     ) ;
   @*/
   if (rc != 1  )  { goto ERROR ; }
     if  ( buffer[0] != '*'  )            /** item exist ? **/
    {  /** yes * process to proper program **/
    /*@ printf("\n <<<goto crem pgm %s>>> ",buffer   ) ;
    @*/
    memcpy ( &(ecbptr()->ebw000) , &buffer[4] , l     ) ;   /** move to ecb **/
    fseek(fpc,offset,0) ;
    rc = fwrite("****",4,1,fpc );           if (rc != 1  )  { goto ERROR ; }
    fclose(fpc);
    entrc ( &buffer[0]  ,&regs )  ;
    serrc("\n** DUMP CTL-000000 SYSTEM CORRUPTED  on opzr   ** ") ; exit(99) ;
    }
     offset = offset+4L+l ;
    /*@ printf("\n OFFSET =%ld=",offset ) ;
    @*/
    }
 DEL :
   system("del dxccr") ;
/********* end of routine for  *********** check list cremc**/

/** input data  ************************************************     **/
/** input data  ************************************************     **/
 INPUT :
    printf ("\n>") ;
    imsg = ecbptr()->ce1cr0  ;

    memset (imsg,0,L1LTSIZE ) ; /** clear the buffer **/
 

    j = &(imsg-> mi0acc)  ;

    while ( (ch = getchar())  !=  '\n'  )
    {
     *(j++) = ch   ;

       /**  putchar (ch) ; ****/

     count++ ;
    }

      imsg = ecbptr()->ce1cr0  ;
      imsg->mi0cct = count ;
PROCESS :
      memcpy ( &(imsg->mi0bid) , "MI", 2   )  ;
      if (imsg->mi0acc[0]== '!'  ) {entdc("ulk0",&regs)} ;
    entrc  ("uii0",&regs) ;
    exit(888) ;

 ERROR :
    printf("error reading from crem lst \n") ;
    exit(99)   ;

}
struct eb0eb  *ecbptr()
{
  /*@@ printf("\n<<ecbptr function  ended>> ") ;  @@***/
      return( (long)  regs.r9 ) ;
}
/*---------------------------------------------------------------------------*
*  FINDC MACRO   HANDLING PROGRAM      8OCT92    KIM,SB       *
*    for ltoa <stdlib.h> is needed .          *
*---------------------------------------------------------------------------*/
long findc(enum t_lvl level  )
{
  long rc ;
  long seq  ,i ;
  long *r    ;   /** point of core to find ***/
  long   *ptr   ;

  FILE *fp ;
  long offset =   0L   ;
  long t  ;

     char  *p ;
     static char  band[5] ;
     char  buffer [40] ;  int radix = 16 ;

  struct tm *newtime ;       /** time val **/
  long ltime  ;

  /**@ printf ("\n<< fiNDc pgm started >>"  )  ;   @@**/
  strncpy ( &band[0],"a:",2 ) ;     /** directory**/
 /** get ordinal no ***/
     p =   &t      ;
  switch (level )
  {
 

  case 0 :  memcpy(p,&( ecbptr()->ce1fm0) , 4 ); ptr = ecbptr()->ce1cr0 ;  break ;
  case 1 :  memcpy(p,&( ecbptr()->ce1fm1) , 4 ); ptr = ecbptr()->ce1cr1 ;  break ;
  case 2 :  memcpy(p,&( ecbptr()->ce1fm2) , 4 ); ptr = ecbptr()->ce1cr2 ;  break ;
  case 3 :  memcpy(p,&( ecbptr()->ce1fm3) , 4 ); ptr = ecbptr()->ce1cr3 ;  break ;
  case 4 :  memcpy(p,&( ecbptr()->ce1fm4) , 4 ); ptr = ecbptr()->ce1cr4 ;  break ;
  case 5 :  memcpy(p,&( ecbptr()->ce1fm5) , 4 ); ptr = ecbptr()->ce1cr5 ;  break ;
  case 6 :  memcpy(p,&( ecbptr()->ce1fm6) , 4 ); ptr = ecbptr()->ce1cr6 ;  break ;
  case 7 :  memcpy(p,&( ecbptr()->ce1fm7) , 4 ); ptr = ecbptr()->ce1cr7 ;  break ;
  case 8 :  memcpy(p,&( ecbptr()->ce1fm8) , 4 ); ptr = ecbptr()->ce1cr8 ;  break ;
  case 9 :  memcpy(p,&( ecbptr()->ce1fm9) , 4 ); ptr = ecbptr()->ce1cr9 ;  break ;
  case 10:  memcpy(p,&( ecbptr()->ce1fma) , 4 ); ptr = ecbptr()->ce1cra ;  break ;
  case 11:  memcpy(p,&( ecbptr()->ce1fmb) , 4 ); ptr = ecbptr()->ce1crb ;  break ;
  case 12:  memcpy(p,&( ecbptr()->ce1fmc) , 4 ); ptr = ecbptr()->ce1crc ;  break ;
  case 13:  memcpy(p,&( ecbptr()->ce1fmd) , 4 ); ptr = ecbptr()->ce1crd ;  break ;
  case 14:  memcpy(p,&( ecbptr()->ce1fme) , 4 ); ptr = ecbptr()->ce1cre ;  break ;
  case 15:  memcpy(p,&( ecbptr()->ce1fmf) , 4 ); ptr = ecbptr()->ce1crf ;  break ;
  }
       /**@@ printf("\n  t  is =%08lx=", t )  ;   @@@***/

 /**** make file name *******/
   i = 0L ;
   memcpy  ( &i , p  ,1 ) ;    /**@ mydply ("i",i )     ; @@**/
    p  =ultoa (  i , buffer , radix ) ;
  memcpy ( &band[2], p , 2 ) ;    /** move band**/
     band[4] = 0x00     ;
  /**@@  printf ( "\n band have  =%s=" , band  ) ;     @@**/
 /********  make ordinal no ********/
   /**@@@  mydplyh (  regs.r9  , 200 ) ;  @@@**/
     p =   &t    ;
     p = p + 1  ;
     i = 0L ;
     memcpy( &i  ,  p ,3  )     ;
     t = i   ;
   /*@@@     printf("\nord no is  is =%08lx=  and =%ld=", t,t  )  ;
    @@**/
  /*************** calculate  offset ***********/
  offset = 0L ;
  offset = t     ;
  offset = offset  * L1LTSIZE ;
  /************  stamp time @@@@@@@@@@@@@@@@@@@@@@
  time (&ltime) ;
  newtime = gmtime(&ltime) ;
  printf("tme =%s=",asctime(newtime) ) ;
    t = ptr+100L ;
  strncpy (    t    , asctime(newtime) ,10 ) ;
  @@@@@@@@@@@@@        ***********/
  /*** level chk .already exist means dumping  ***********/
  switch (levtest(level))
   {
   case 1 : serrc("\n** DUMP CTL-000000 BLOCK ALREADY EXIST** ")  ;  break ;
   case 0 : klset(level) ;  /** set used bit  ***/   break ;
   }
     r =   kladr(level)  ;  /***** get core level address ****/
  /*@@ mydply ("r",r)   ;
    mydply ("ecbptr()->ce1cra",ecbptr()->ce1cra)   ;
    exit(99) ;
  @@**/
 klset(level)  ;       /***** set inuse      ****/
/***** read from dasd *********************************/

// mydply ("offset",offset) ;
// printf ("\n band =%s=",band) ;

 if ((fp = fopen(band , "rb")) == 0 )
     {
     printf ("ȭ�� %s �� �� l2lt \n",band)  ; serrc("\n** DUMP CTL-000000 CAN NOT OPEN       ** ") ;
     }
 else
 {
   if (fseek(fp,offset,0)  == 0    )  /**���ھ�����0 **/
   {
    rc = fread( r,L1LTSIZE-1,1,fp);
         if (rc != 1  )
         {
         printf("error reading from file ksb \n") ;
          exit(99)     ;
         }
   }
   else
   {
    printf("error reading from file ksb \n") ;
   }
   fclose(fp);
 }
   return((long)r) ;
}
/*---------------------------------------------------------------------------*
*  FILEC MACRO   HANDLING PROGRAM      8OCT92    KIM,SB       *
*              *
*---------------------------------------------------------------------------*/
filec(enum t_lvl level )
{
       long rc ;  struct am0sg  *am    ;
     long   *ptr ,*ptr1  ;
     FILE *fpo;
     long offset =   0L, t , i ;

     char  *p  ;
     char  buffer [40] ;  int radix = 16 ;
     static char  band[5] ;

  struct tm *newtime ;       /** time val **/
  long ltime  ;

    /*@ printf ("\n<< filec pgm started >>"  )  ;
    @*/
  strncpy ( &band[0],"a:",2 ) ;     /** directory**/
 /** get ordinal no ***/
      p  = &t     ;
  switch (level )
  {
  case 0 :  (memcpy(p,&( ecbptr()->ce1fm0) , 4 )  ); ptr = ecbptr()->ce1cr0 ;  break ;
  case 1 :  (memcpy(p,&( ecbptr()->ce1fm1) , 4 )  ); ptr = ecbptr()->ce1cr1 ;  break ;
  case 2 :  (memcpy(p,&( ecbptr()->ce1fm2) , 4 )  ); ptr = ecbptr()->ce1cr2 ;  break ;
  case 3 :  (memcpy(p,&( ecbptr()->ce1fm3) , 4 )  ); ptr = ecbptr()->ce1cr3 ;  break ;
  case 4 :  (memcpy(p,&( ecbptr()->ce1fm4) , 4 )  ); ptr = ecbptr()->ce1cr4 ;  break ;
  case 5 :  (memcpy(p,&( ecbptr()->ce1fm5) , 4 )  ); ptr = ecbptr()->ce1cr5 ;  break ;
  case 6 :  (memcpy(p,&( ecbptr()->ce1fm6) , 4 )  ); ptr = ecbptr()->ce1cr6 ;  break ;
  case 7 :  (memcpy(p,&( ecbptr()->ce1fm7) , 4 )  ); ptr = ecbptr()->ce1cr7 ;  break ;
  case 8 :  (memcpy(p,&( ecbptr()->ce1fm8) , 4 )  ); ptr = ecbptr()->ce1cr8 ;  break ;
  case 9 :  (memcpy(p,&( ecbptr()->ce1fm9) , 4 )  ); ptr = ecbptr()->ce1cr9 ;  break ;
  case 10:  (memcpy(p,&( ecbptr()->ce1fma) , 4 )  ); ptr = ecbptr()->ce1cra ;  break ;
  case 11:  (memcpy(p,&( ecbptr()->ce1fmb) , 4 )  ); ptr = ecbptr()->ce1crb ;  break ;
  case 12:  (memcpy(p,&( ecbptr()->ce1fmc) , 4 )  ); ptr = ecbptr()->ce1crc ;  break ;
  case 13:  (memcpy(p,&( ecbptr()->ce1fmd) , 4 )  ); ptr = ecbptr()->ce1crd ;  break ;
  case 14:  (memcpy(p,&( ecbptr()->ce1fme) , 4 )  ); ptr = ecbptr()->ce1cre ;  break ;
  case 15:  (memcpy(p,&( ecbptr()->ce1fmf) , 4 )  ); ptr = ecbptr()->ce1crf ;  break ;
  }
 /**@@
      printf("\n  t  is =%08lx=", t )  ;
    @@**/
 /**** make file name *******/
  i = 0 ;
  memcpy ( &i , p , 1 ) ;
  p  = ultoa ( i , buffer , radix ) ;
  /********@@ printf (  "\n band =%s=",p) ; ***/
  /**@*   mydplyh( p , 10) ; @@***/
  memcpy ( &band[2],  p , 2 ) ;     /** directory**/
     band[4] = 0x00     ;
  /*@@@ printf ( "\n band have  =%s=" , band  ) ; @@***/
 /********  make ordinal no ********/
   /**@@@  mydplyh (  regs.r9  , 200 ) ;  @@@**/
   /**@@@     printf("\n  t  is =%08lx=", t )  ;   @@***/
     p =   &t    ;
   /**@@@  mydplyh(&t ,9) ;  @@***/
   /**@@ mydply("t",t) ;  @@***/
     p = p + 1  ;
     i = 0L ;
     memcpy( &i  ,  p ,3  )     ;
     t = i   ;
 /* @@  printf("\nord no is  is =%08lx=  and =%ld= ", t,t  )  ;
  @*/
  /*************** calculate  offset ***********/
  t = t * L1LTSIZE     ;
  offset   = offset  + t  ;
  /*@@ mydply("offset",offset) ; @@**/
  /************  stamp time @@@@@@@@@@@@@@@@@@@@@@
  time (&ltime) ;
  newtime = gmtime(&ltime) ;
  printf("tme =%s=",asctime(newtime) ) ;
    t = ptr+100 ;
  strncpy (    t    , asctime(newtime) ,10 ) ;
  @@@@@@@@@@@u@@        ***********/
  /************  stamp latest entered program name ****/
  ptr1 = (long) ptr + 4L  ;
  memcpy( ptr1 ,  &(ecbptr()->ce1pgm )  , 4  )   ;

  /************  write to dasd      ***********/

  if ((fpo= fopen(band, "rb+")) == 0 )
       {
     printf ("ȭ�� %s �� �� l2lt ",band ); serrc("\n** DUMP CTL-000000 CAN NOT OPEN       ** ") ;
       }
  else {
 fseek(fpo,offset,0)   ;   /**���ھ�����0 **/

 rc = fwrite(ptr ,L1LTSIZE-1,1,fpo);
     if (rc != 1  )
     {
     printf("\nerror writing to file L1LT  ") ;
      exit(99) ;
     }
 

  fclose(fpo);
  /**@@  printf ("\n filec ended " );   @@****/
       }
  relcc(level) ;   /*** free level ***/
  return ;
}
/*---------------------------------------------------------------------------*
*        ttttt  ppppp    ffffff       ccc      *
*   t  p    p    f       dddddd     c       *
*   t  ppppp    ffffff      c       *
*   t  p    f        ccc      *
*---------------------------------------------------------------------------*/
opze()
{  /*** CLEAR ALL DATA LEVEL **/
  relcc(0) ;
  relcc(1) ;
  relcc(2) ;
  relcc(3) ;
  relcc(4) ;
  relcc(5) ;
  relcc(6) ;
  relcc(7) ;
  relcc(8) ;
  relcc(9) ;
  relcc(DA) ;
  relcc(DB) ;
  relcc(DC) ;
  relcc(DD) ;
  relcc(DE) ;
  relcc(DF) ;
 ecbptr()->ce1cr0 =  ecbptr()->ce1lva  ;  /* set up data level 0 */
 ecbptr()->ce1ct0  = 0x0021 ; ecbptr()->ce1cc0  = 0x017d ; /**SET USED**/
 ecbptr()->ce1nol  = 1l    ;  /*** no of level is 1 ***/
  entrc("opzr",&regs) ;
}
/*---------------------------------------------------------------------------*
*  getcc   HANDLING PROGRAM     27OCT92   KIM,SB  *
*              *
*---------------------------------------------------------------------------*/
long getcc (enum t_lvl level , enum t_getfm format , third_parameter)
{
   long int r ; /***** return pointer for level block *****/
  /**@@   printf ("\n<< GETCC pgm started >>"  )  ;     @@**/

   switch (levtest(level))
    {
    case 1 :  serrc("\n** DUMP CTL-000000 BLOCK ALREADY EXIST** ")  ;  break ;
    case 0 :  klset(level) ;   /** set used bit  ***/   break ;
    }

      r =  kladr(level)  ;  /***** get core level address ****/

       return (r)   ;
 
 

}
/*---------------------------------------------------------------------------*
*    level setting       HANDLING PROGRAM    27OCT92    KIM,SB      *
*              *
*---------------------------------------------------------------------------*/
klset (num)
{

  /***@@@@@@@ printf ("\n<< Klset pgm started >>"  )  ; @@@@@@@@@***/
  switch (num)
  {
  case 0 : {ecbptr()->ce1ct0  = 0x0021 ;  ecbptr()->ce1cc0  = 0x017d ;}break ;
  case 1 : {ecbptr()->ce1ct1  = 0x0021 ;  ecbptr()->ce1cc1  = 0x017d ;}break ;
  case 2 : {ecbptr()->ce1ct2  = 0x0021 ;  ecbptr()->ce1cc2  = 0x017d ;}break ;
  case 3 : {ecbptr()->ce1ct3  = 0x0021 ;  ecbptr()->ce1cc3  = 0x017d ;}break ;
  case 4 : {ecbptr()->ce1ct4  = 0x0021 ;  ecbptr()->ce1cc4  = 0x017d ;}break ;
  case 5 : {ecbptr()->ce1ct5  = 0x0021 ;  ecbptr()->ce1cc5  = 0x017d ;}break ;
  case 6 : {ecbptr()->ce1ct6  = 0x0021 ;  ecbptr()->ce1cc6  = 0x017d ;}break ;
  case 7 : {ecbptr()->ce1ct7  = 0x0021 ;  ecbptr()->ce1cc7  = 0x017d ;}break ;
  case 8 : {ecbptr()->ce1ct8  = 0x0021 ;  ecbptr()->ce1cc8  = 0x017d ;}break ;
  case 9 : {ecbptr()->ce1ct9  = 0x0021 ;  ecbptr()->ce1cc9  = 0x017d ;}break ;
  case 10: {ecbptr()->ce1cta  = 0x0021 ;  ecbptr()->ce1cca  = 0x017d ;}break ;
  case 11: {ecbptr()->ce1ctb  = 0x0021 ;  ecbptr()->ce1ccb  = 0x017d ;}break ;
  case 12: {ecbptr()->ce1ctc  = 0x0021 ;  ecbptr()->ce1ccc  = 0x017d ;}break ;
  case 13: {ecbptr()->ce1ctd  = 0x0021 ;  ecbptr()->ce1ccd  = 0x017d ;}break ;
  case 14: {ecbptr()->ce1cte  = 0x0021 ;  ecbptr()->ce1cce  = 0x017d ;}break ;
  case 15: {ecbptr()->ce1ctf  = 0x0021 ;  ecbptr()->ce1ccf  = 0x017d ;}break ;

  }
     return ;
}
/*---------------------------------------------------------------------------*
*    level addr setting       HANDLING PROGRAM    27OCT92    KIM,SB      *
*              *
*---------------------------------------------------------------------------*/
long kladr (num)
{
  struct lvl  *k  ;        /*** core level ****/
  unsigned long int adr ;
 /**@@@ printf ("\n<< Kladr pgm started >>"  )  ; @@@@***/
     (long int)k =  ecbptr()->ce1lva  ;        /** set base ***/

  switch (num)
  {
  case 0 : { memcpy( &(ecbptr()->ce1cr0),&(k->l0)  , 4); adr = k->l0;}break ;
  case 1 : { memcpy( &(ecbptr()->ce1cr1),&(k->l1)  , 4); adr = k->l1;}break ;
  case 2 : { memcpy( &(ecbptr()->ce1cr2),&(k->l2)  , 4); adr = k->l2;}break ;
  case 3 : { memcpy( &(ecbptr()->ce1cr3),&(k->l3)  , 4); adr = k->l3;}break ;
  case 4 : { memcpy( &(ecbptr()->ce1cr4),&(k->l4)  , 4); adr = k->l4;}break ;
  case 5 : { memcpy( &(ecbptr()->ce1cr5),&(k->l5)  , 4); adr = k->l5;}break ;
  case 6 : { memcpy( &(ecbptr()->ce1cr6),&(k->l6)  , 4); adr = k->l6;}break ;
  case 7 : { memcpy( &(ecbptr()->ce1cr7),&(k->l7)  , 4); adr = k->l7;}break ;
  case 8 : { memcpy( &(ecbptr()->ce1cr8),&(k->l8)  , 4); adr = k->l8;}break ;
  case 9 : { memcpy( &(ecbptr()->ce1cr9),&(k->l9)  , 4); adr = k->l9;}break ;
  case 10: { memcpy( &(ecbptr()->ce1cra),&(k->la)  , 4); adr = k->la;}break ;
  case 11: { memcpy( &(ecbptr()->ce1crb),&(k->lb)  , 4); adr = k->lb;}break ;
  case 12: { memcpy( &(ecbptr()->ce1crc),&(k->lc)  , 4); adr = k->lc;}break ;
  case 13: { memcpy( &(ecbptr()->ce1crd),&(k->ld)  , 4); adr = k->ld;}break ;
  case 14: { memcpy( &(ecbptr()->ce1cre),&(k->le)  , 4); adr = k->le;}break ;
  case 15: { memcpy( &(ecbptr()->ce1crf),&(k->lf)  , 4); adr = k->lf;}break ;

  }
     ecbptr()->ce1nol ++   ;
     /*@@@
     mydply ("adr",adr) ;
     mydply ("ecbptr()->ce1lva   ",ecbptr()->ce1lva   ) ;
     mydply ("ecbptr()->ce1cra   ",ecbptr()->ce1cra   ) ;
       @@@@***/
     return ( ( long ) adr) ;
}
/*---------------------------------------------------------------------------*
*  getFc   HANDLING PROGRAM     27OCT92   KIM,SB  *
*              *
*---------------------------------------------------------------------------*/
#define  band  0xef
unsigned long int getfc (enum t_lvl level ,int type , char *record_id ,int block , int error )
{

   static char id [2] ;
   static char tmp[5] ;
  struct lvl  *k  ;        /*** core level ****/

   long  r,t  ; /***** return pointer and work  *****/
   int       i ; /***** item slot counter ****/
   unsigned long int   *f ; /***** return value of addr from kread ****/
   /**@@@ **
   printf ("\n<< GETFC  pgm started >>"  )     ;
 @@**/
   memcpy(id,record_id,2 )   ;
 /*@@@@@@
   mydply ("level",level)           ;
   mydply ("type",type)             ;
   printf(" record  id is =%s=",id ) ;
   mydply ("record_id",record_id )  ;
   mydply ("block ",block )         ;
   mydply ("error ",error )         ;
   *@@@@@*/
 /*************** get  core addr  handling****************/
      switch (block )
 {
 case 0: /******get block routine   *******/
     { switch (levtest(level))
   {
   case 1 :     serrc("\n** DUMP CTL-000000 BLOCK ALREADY EXIST** ")  ;  break ;
   case 0 :     klset(level) ;   /** set used bit  ***/ break ;
   }
   r =  kladr(level)  ;     /***** get core level address ****/
     } break ;
 case 1: /******  no block routine ********/
     { switch (levtest(level))       /** chk block whether not exist **/
   {
   case 0 :     serrc("\n** DUMP CTL-000000 BLOCK NOT     EXIST** ")  ;  break ;
   }
     } break ;
 }

 /******* check if id is on table      ****************/
   (long)k =    ecbptr()->ce1dbf  ;

 /*@for ( i = 0 ;i < 30 ;i++)
  {
  printf("\nid   =%c%c= l or small=%c=",   k->ids [i][0]  ,  k->ids [i][1]  ,   k->ids [i][2]  ) ;
  }
 @@**/
 /******* check id is on table AND READ L OR S TERM    ****************/
 i = 0 ;
 while ( k->ids[i][2] != 0 )
     {
     if( strncmp( &id[0] , &(k->ids[i][0]) , 2 ) == 0  )      /** found ? ***/
       {
       goto outside ;
       }
     ++i ;
     }
     serrc ("\nCTL-000000  ID IS NOT ON THE KSB SYSTEM ") ;  exit(9) ;

 outside :

  kread( &(k->ids[i][2])  )  ;  /*** read system file * band =ef  give band type "s" or "l" **/
           /**** AND get seq no & file ****/
 /*@@ mydply("ecbptr()->ce1tmp before ban ",ecbptr()->ce1tmp) ;
  @@**/
     f = &(ecbptr()->ce1tmp)        ;
     memcpy( &tmp[1]  , f    ,3  )  ; /*** move ord no   ***/
   /**@@
     memcpy( &tmp[4]  ,&tmp[0], 1 )  ;
     memcpy( &tmp[0]  ,&tmp[2], 1 )  ;
     memcpy( &tmp[2]  ,&tmp[4], 1 )  ;
   @@**/
  /**** set short or long ****/
     tmp[0] = 0xe0   ; /** set short **/
    /**@@@@  mydplyh ( &(k->ids[i] [0]) , 100 )  ; *@@**/
     if ( k->ids[i] [2] ==  'L' ) tmp[0] = 0xb0      ;    /** long ?**/

     memcpy( f , &tmp[0] ,4  )      ; /*** move file addr    ***/

/***@@@@@@@@@   mydply("ecbptr()->ce1tmp ban end ",ecbptr()->ce1tmp) ; @@**/

   /****  and  move file addr to ecb ******************/
  switch (level)
  {
  case 0 : { memcpy ( &(ecbptr()->ce1fm0)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 1 : { memcpy ( &(ecbptr()->ce1fm1)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 2 : { memcpy ( &(ecbptr()->ce1fm2)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 3 : { memcpy ( &(ecbptr()->ce1fm3)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 4 : { memcpy ( &(ecbptr()->ce1fm4)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 5 : { memcpy ( &(ecbptr()->ce1fm5)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 6 : { memcpy ( &(ecbptr()->ce1fm6)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 7 : { memcpy ( &(ecbptr()->ce1fm7)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 8 : { memcpy ( &(ecbptr()->ce1fm8)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 9 : { memcpy ( &(ecbptr()->ce1fm9)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 10: { memcpy ( &(ecbptr()->ce1fma)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 11: { memcpy ( &(ecbptr()->ce1fmb)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 12: { memcpy ( &(ecbptr()->ce1fmc)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 13: { memcpy ( &(ecbptr()->ce1fmd)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 14: { memcpy ( &(ecbptr()->ce1fme)  ,&( ecbptr()->ce1tmp) ,4 );}break ;
  case 15: { memcpy ( &(ecbptr()->ce1fmf)  ,&( ecbptr()->ce1tmp) ,4 );}break ;

  }
       return (    ecbptr()->ce1tmp )  ;
}
/*---------------------------------------------------------------------------*
*  KREAD   PROGRAM      5NOV92    KIM,SB       *
*  read system file and get or save  ( ksbltn : long term seq no      *
*  or       ( ksbstn : short   seq no      *
*---------------------------------------------------------------------------*/
kread(char *ind )
{
  long rc ;
  unsigned long int   i ;
  FILE *fp ;
  long offset =   0L ;

  int banord   ;    /** BAND ORDINAL ****/
  struct globz *p_g ;    /*** point of glbl**/
  int seq  ;  unsigned long int  *f  ;      /** file sequence ***/
  /***@@@ printf ("\n<< kread.c pgm started >>"  )  ; @@2**/

  /**@@@@@  printf ("\nid is =%s=",ind) ; @@@@@@@****/
  p_g   = (long ) ecbptr()->ce1krb  ;  /***** point of base ***/
   f   = ecbptr()->ce1tmp  ;  /***** point of wrk  ***/
 /******** READ SYSTEM FILE **********/
 if ((fp = fopen("a:EF", "rb+")) == 0 )
     printf ("ȭ��    �� �� l2lt \n" );
 else
   {
  if    (fseek(fp,offset,0)  == 0    )  /**���ھ�����0 **/
    {
    rc = fread( p_g ,L1LTSIZE-1,1,fp);
         if (rc != 1  )
         {
         printf("error reading from file ksb \n") ;
          exit(99)      ;
         }
    }
   else
   {
    printf("error reading from file ksb \n") ;
   }
   }
   /**@@@***
  mydply ("p_g->ksbstn",p_g->ksbstn) ;
   regs.r0 = &(p_g->ksbstn) ;
   regs.r1 = 200 ;
   entrc("hexd",&regs) ;
  **@@@@@@@@@**/
 /***********  GET NEXT SEQ NO FROM FILE *********/
  if (*ind == 'L' ) /*** LONG TERM ****/
     {
      ecbptr()->ce1tmp = p_g->ksbltn ;
      p_g->ksbltn = p_g->ksbltn + 1l;
     }
  else if (*ind == 'S')
     {
      ecbptr()->ce1tmp = p_g->ksbstn ;
      p_g->ksbstn = p_g->ksbstn + 1l ;
     }
  else
     {
     serrc("\nCTL-000000  catastrophic error occured ! very dangerous call kim,sang abek ") ;
     }
  /******@@@@@mydply ("p_g->ksbstn",p_g->ksbstn) ;  @@@@@@@@@*****/
 /***************** fileing system file ***************/
       offset =   0L ; /*****reset offsert *****/
   if (fseek(fp,offset,0)  == 0    )   /**���ھ�����0 **/
   {
   rc = fwrite(p_g   ,L1LTSIZE-1,1,fp );
       if (rc != 1  )
       {
       printf("\nerror writing to file EF (SYSTEM)  ") ;
        exit(99)    ;
       }
   }
   else
       {
       printf("error reading from file ksb \n") ;
       }
 /***************  end of this program role ***********/

   fclose(fp) ;

 /***@@@      mydply  ("ecbptr()->ce1tmp" ,ecbptr()->ce1tmp  ) ; @@***/
   return    ;
}
/*---------------------------------------------------------------------------*
*  Face  MACRO   HANDLING PROGRAM      8DEC92    KIM,SB       *
*              *
*  input = >  r0 : type no   , r6:  record ord , r7 : addr of adr fld      *
*  output =>  r0 :0  r7: 1   / invlid rec type         *
*     �ҹ��ڸ� �빮�ڷ� �ٲٴ� routine ����.       *
*---------------------------------------------------------------------------*/
face()
{
  struct lvl  *k  ;     /*** ksb core level ****/
   static char lband[5] ;
   static char id [2] ;
   static char tmp[5] ;
   long int r,t  ; /*****  return pointer  and work  *****/
   int long   i ; /***** item slot counter ****/
   unsigned long int   *f ; /***** return value of addr from kread ****/
     long  *p     ;
     char   c ;
     char  buffer [15] ;  int long radix = 16 ;

      /***@@   printf ("\n<< FACE-pgm started >>") ;    @@**/
 /******* check if id is on table      ****************/
  (long) k =    ecbptr()->ce1dbf  ;
 /***@@@@@@@@
  for ( i = 0 ;i < 30 ;i++)
  {
  printf("\nlband  =%c%c= number of rec =%d=", k->bann[i][0] , k->bann[i][1] , k->number  [i]  ) ;
  }
    @@@@@@@@@@@*/
 /**** make file name *******/
  (long) p  = ltoa (  regs.r6  , buffer , radix ) ;
  memcpy ( &lband[0], &buffer[0]  , 2 ) ;     /** copy lband **/

 /** change to upper  **/
  lband[0] = toupper (lband[0]) ;
  lband[1] = toupper (lband[1]) ;
 /**@@   mydplyh ( &lband[0] , 2 ) ; @@**/
 /******* check id is on table   ****************/
 i = 0 ;
 while ( k->bann[i][0] != 0 )
     {
     if( strncmp( &lband[0] , &(k->bann[i][0]) , 2 ) == 0  )   /** found ? ***/
       {
       goto outside ;
       }
     ++i ;
     }
     regs.r7 = 1 ; goto ERR ;

 outside :
 

 if ( regs.r0 > k->number[i] ) goto ERR ; /** no of record is exceed **/

 /***  ok ! wnated id is on table so set up ebcfax and r0 to max ***/
 

  regs.r7 = regs.r7 + 4 ;      /*** incmnt 4 bytes ***/
  memcpy ( regs.r7   , &regs.r6 ,1) ;  /** move lband name **/
  regs.r7 = regs.r7 + 1 ;      /*** incmnt 4 bytes ***/
  memcpy ( regs.r7   , &regs.r0 ,3) ;        /** move ord  **/
 

  regs.r0 =  k->number[i]     ;        /** move max no of file **/
  regs.r0 = regs.r0  - 1L     ;        /** move max no of file **/
  return  ;

/***error routine **/
 ERR:
  regs.r0 = 0 ;
  return  ;
}

 

/*
*====================================================================*
* TPFAPI.H -- FOR TPF-C COMPATIBILITY - INCLUDE DXCAPI.H      *
*====================================================================*
* 5695-068           *
* CONTAINS RESTRICTED MATERIALS OF IBM        *
* (C) COPYRIGHT IBM CORPORATION 1991        *
* LICENSED MATERIALS.  PROPERTY OF IBM        *
* REFER TO COPYRIGHT INSTRUCTIONS         *
* FORM NUMBER G120-2083          *
*--------------------------------------------------------------------*
*  DEV   DEV0690 CREATE MODULE         @DEV0690
*  DEV   ST00015 ADD INCLUDES FOR C$SYSEQ.H C$MI0MI.H  @ST00015
*--------------------------------------------------------------------*
*/
/**@@@@@@@@@@@@@@ KSB @@@@@@@@@ NOOPED BY KIMSB ***
#ifndef _tpfapi__
#define _tpfapi__
#include <dxcbapi.h>
#include <c$syseq.h>
#include <c$mi0mi.h>
#endif
@@@@@@@@@@@@@@ KSB @@@@@@@@@**********/
/**@@@@@@ KSB AREA @@@@@@@@@****/
       struct TPF_regs regs   ;

 
 

/*
*====================================================================*
* TPFAPI.H -- FOR TPF-C COMPATIBILITY - INCLUDE DXCAPI.H      *
*====================================================================*
* 5695-068           *
* CONTAINS RESTRICTED MATERIALS OF IBM        *
* (C) COPYRIGHT IBM CORPORATION 1991        *
* LICENSED MATERIALS.  PROPERTY OF IBM        *
* REFER TO COPYRIGHT INSTRUCTIONS         *
* FORM NUMBER G120-2083          *
*--------------------------------------------------------------------*
*  DEV   DEV0690 CREATE MODULE         @DEV0690
*  DEV   ST00015 ADD INCLUDES FOR C$SYSEQ.H C$MI0MI.H  @ST00015
*--------------------------------------------------------------------*
*/
/**@@@@@@@@@@@@@@ KSB @@@@@@@@@ NOOPED BY KIMSB ***
#ifndef _tpfapi__
#define _tpfapi__
#include <dxcbapi.h>
#include <c$syseq.h>
#include <c$mi0mi.h>
#endif
@@@@@@@@@@@@@@ KSB @@@@@@@@@**********/
/**@@@@@@ KSB AREA @@@@@@@@@****/
       struct TPF_regs regs   ;

 
 
 
 
 
 

#ifndef __am0sg
#define __am0sg
/*
*====================================================================*
* C$AM0SG.H  DEFINE A STRUCTURE FOE THE AM0SG DSECT      *
*====================================================================*
*      ALCS COMPTABLE   KOREA SYSTEM BANK        *
*--------------------------------------------------------------------*
* FUNCTION... DEFINES THE AM0SG STRUCTURE, CORRESPONDING TO THE      *
*       AM0SG DSECT IN ASSEMBLER.         *
*--------------------------------------------------------------------*
*  DEV   DEV0690 CREATE MODULE         @DEV0690
*--------------------------------------------------------------------*
*/

struct am0sg
  {
  /*
  **   Standard header area
  */
  char      am0rid[2];        /*    Basic ID       */
  unsigned char     am0rcc;        /*    Record code check      */
  unsigned char     am0ctl;        /*    Control byte      */
  #define AM0RS1    0xf0    /* Bits 0-3 reserved       */
  #define AM0ALN    0x08    /* Router Alternate Line Selection in use*/
  #define AM0BLT    0x04    /* BSC On-Line Test Block       */
  #define AM0RS2    0x03    /* Bits 6-7 reserved       */
  char      am0pgm[4];        /*    Program stamp      */
  void     *am0fch;        /*    Forward chain address   */
  void     *am0bch;        /*    Back chain address      */
  short int     am0cct;        /*    Byte count       */
  unsigned long int  am0lit : 24;     /*   Reserved/LNIATA   */  /**== 3dec==**/
  char      am0np1;        /*    NOP character 1 (ALC)   */
  char      am0np2;        /*    NOP character 2 (ALC)   */
  char      am0txt;        /*    Message text start adrs */
  #define AM0ML1    93         /* Max chars in 128 byte block*/
  #define AM0ML2    337         /* Max chars in 381 byte block*/
  #define AM0ML3    1020        /* Max chars in 1055 byte blk */

     /*
     ** This is a continuation of the AM0SG Structure used by OMT,
     ** SRT, and Recoup only for 381 byte blocks
     */

  unsigned char     am0rs1[AM0ML2-1];  /* Position past text      */
  char      am0appl[4];   /* Origin of Message or     *
       * Application Name      */

  void     *am0fp;   /* External Forward Pointer      */
  void     *am0bp;   /* External Backward Pointer (Reserved) */
  unsigned char     am0rcps; /* RCPL- Low order byte of sequence nbr */
  unsigned char     am0rcpc; /* RCPL- Control Byte 2 (rcplctl2)      */
  unsigned char     am0cb0;  /* RCPL- Control Byte 0 (rcplctl0)      */
  unsigned char     am0cb4;  /* RCPL- Control Byte 4 (rcplctl4)      */

     /*
 Sequence Numbers used by Message Recovery
     */
  short int     am0sqi;  /* Input Synchronous Sequence Number    */
  short int     am0sqo;  /* Output Synchronous Sequence Number   */

     /*
     Output message flags
     */

  unsigned char     am0omf;  /* Flags         */
  #define AM0VSN    0x80     /* Indicates Valid Sequence Number      */
  /*      0x40      * Reserved        */
  #define AM0UNS    0x20     /* Indicates Unsolicited Message      */
  #define AM0REC    0x10     /* Indicates Message is Recoverable     */
  #define AM0IFC    0x08     /* Message has Internal Forward Chain   */
  #define AM0NRL    0x04     /* Message has No-Release Option      */
  #define AM0PRR    0x02     /* Message is not SRT-Recoverable      */
  #define AM0OLD    0x01     /* Message is from old (non-SNA) applic.*/

  };

#endif

 
 
 
 

#ifndef __wa0aa
#define __wa0aa
/*
*====================================================================*
* C$WA0aa  -- APPLICATION IPARS AGENT ASSEMBLY AREA (AAA) REC  *
*====================================================================*
*             *
* CONTAINS RESTRICTED MATERIALS OF ksb        *
* LICENSED MATERIALS.  PROPERTY         *
* REFER TO COPYRIGHT INSTRUCTIONS         *
* FORM NUMBER           *
*--------------------------------------------------------------------*
*/

struct wa0aa
  {
  /*
  **   TRANSACTION SAVE AREA
  */
  char        wa0bid[2];    /* Record ID - "AA"               */
  unsigned char       wa0chk;     /* Record code check       */
  unsigned char       wa0ctl;     /* Control byte -always 0       */
  char        wa0pgm[4];    /* Program stamp (not used)       */
  void       *wa0fch;     /* Forward chain addr. (not used) */
  void       *wa0bch;     /* Backward chain addr.(not used) */

  short int       wa0cct;     /* char. count - includes terminal*
         * address, data, and EOM       */
  union {

    struct {
      unsigned char   _wa0adr [3] ;  /* Terminal set address        */
    } _term;

    struct {
      unsigned char   _wa0lno;     /* Line number        */
      unsigned char   _wa0ino;     /* Interchange address       */
      unsigned char   _wa0tno;     /* Terminal address        */
    } _lniata;
  } _term_addr;

  #define wa0adr  _term_addr._term._wa0adr

  #define wa0ln0  _term_addr._lniata._wa0lno
  #define wa0in0  _term_addr._lniata._wa0ino
  #define wa0tn0  _term_addr._lniata._wa0tno
  long        wa0fad  ;  /*@@@ file address for display  @@***/
  long        wa0pra  ;  /*@@@  pnr address @@***/
  long        wa0sin  ;/* system indicator if 1= from host input*/
  char        wa0hst  ;/* system indicator if char "h" then     */
      /* api function for to receive data    */
  char        wa0acc[360];  /* Action code - up to 360       *
         * bytes of message and the EOM   */
  };

#endif


/*-------------------------------------------------------*
*     FILE DISPLAY PGM     KIM,SB   *
*     converted to hea format     *
*        *
* input   regs.r10  :  point of start area  *
*    regs.r11  :  length  : max is 512  *
* allart   register corruption    *
*        *
*--------------------------------------------------------*/
#include <myapphdr.h>
#include <ctype.h>
#include <string.h>
hexd ( )
{
   #define SIZE 512
   unsigned char buffer[SIZE+40];
   char  ch;
   int long  *ptc ;    /** point of core area to be displayed  **/
   int long  rc;
   int long x,y;
  /*@@  printf("\n<< hexd pgm  strted >> "); @@@****/
   printf("\n--display core area is =%08lx=--", regs.r10 )  ;
  /*@@ printf("\n--display area is =%p=--", regs.r10 )  ;@@**/
   memset (buffer,0,sizeof (buffer)) ; /** clear the buffer **/
   (int long) ptc =   regs.r10 ;
   memcpy (buffer,ptc ,regs.r11) ;    /***  copy to core **/
 

 /* display the record */

  /********* for (x=0;x<SIZE; x+=y)  ****/
for (x=0;x<regs.r11 ; x+=y)
{
  printf("\n%03d:  ",x);
  for (y = 0 ; y<16; ++y)
  {
    ch = buffer  [ x+y ] ;
    printf ("%c ", (isprint(ch)) ? ch : '.'  );
  }
  printf("\n   : ",x);  /*start new line */
  for (y = 0 ; y<16; ++y)  /*display 16 characters in hex */
  {
     printf("%02x",buffer[x+y] );
  }
}
   puts  ("\n-A- ENDof display the area ");
   return ;
}