/*----------- 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",®s);
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] ,®s )
;
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",®s)}
;
entrc ("uii0",®s) ;
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 (<ime) ;
newtime = gmtime(<ime) ;
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 (<ime) ;
newtime = gmtime(<ime) ;
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",®s) ;
}
/*---------------------------------------------------------------------------*
* 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",®s) ;
**@@@@@@@@@**/
/*********** 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 , ®s.r6 ,1) ; /**
move lband name **/
regs.r7 = regs.r7 + 1 ; /*** incmnt
4 bytes ***/
memcpy ( regs.r7 , ®s.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 ;
}