#include <stdio.h>
#include "kdefs.h"
#include "ktable.h"
#define SKIP 0xa1 + 0xff - 0xfe
#define CI_CNT 19 - 1
#define V_CNT 21 - 1
KCHAR c2p(comp2)
KCHAR comp2;
{
KCHAR comb2;
short Ci_val;
short V_val ;
short Cf_val;
short mask ;
short high = CI_CNT ;
short low = 0 ;
int disp,cnt;
long Cfbit ;
for (;;) {
Ci_val = (low + high) / 2 ;
if (low >= high)
break ;
if (comp2 < cmp_srchtbl[Ci_val][0])
high = Ci_val - 1 ;
else if (comp2 < cmp_srchtbl[Ci_val+1][0])
break ;
else low = Ci_val + 1 ;
}
V_val = 1;
while(1) {
if (comp2 < cmp_srchtbl[Ci_val][V_val]) {
while(cmp_srchtbl[Ci_val][--V_val] == 0)
;
break;
}else if (V_val == V_CNT)
break ;
V_val++;
}
disp = comp2 - cmp_srchtbl[Ci_val][V_val] ;
mask = cmp_srchtbl[Ci_val][V_val] & BYTE_MASK ;
if ((mask + disp) > 0xfe)
disp -= SKIP ;
Cfbit = cmp_bitmap[Ci_val][V_val] ;
for (cnt = -1 , Cf_val = -1; cnt < disp; Cf_val++)
{
if (Cfbit & BIT_MASK)
cnt++ ;
Cfbit >>= 1 ;
}
comb2 = (unsigned int) (Ci_val + 0x0a) ;
comb2 = (comb2 << 5) | (V_val + (V_val + 1)/3 + 2) ;
comb2 = (comb2 << 5) | Cf_val ;
return(comb2 | 0x8000) ;
}
KCHAR c2j(comp2)
KCHAR comp2;
{
KCHAR comb2;
short Ci_val;
short V_val ;
short Cf_val;
short mask ;
short high = CI_CNT ;
short low = 0 ;
int disp,cnt;
long Cfbit ;
for (;;) {
Ci_val = (low + high) / 2 ;
if (low >= high)
break ;
if (comp2 < cmp_srchtbl[Ci_val][0])
high = Ci_val - 1 ;
else if (comp2 < cmp_srchtbl[Ci_val+1][0])
break ;
else low = Ci_val + 1 ;
}
V_val = 1;
while(1) {
if (comp2 < cmp_srchtbl[Ci_val][V_val]) {
while(cmp_srchtbl[Ci_val][--V_val] == 0)
;
break;
}else if (V_val == V_CNT)
break ;
V_val++;
}
disp = comp2 - cmp_srchtbl[Ci_val][V_val] ;
mask = cmp_srchtbl[Ci_val][V_val] & BYTE_MASK ;
if ((mask + disp) > 0xfe)
disp -= SKIP ;
Cfbit = cmp_bitmap[Ci_val][V_val] ;
for (cnt = -1 , Cf_val = -1; cnt < disp; Cf_val++)
{
if (Cfbit & BIT_MASK)
cnt++ ;
Cfbit >>= 1 ;
}
comb2 = (unsigned int) (Ci_val + 2);
comb2 = (comb2 << 5) | (V_val + (V_val + 1) / 6 * 2 + 3);
comb2 = (comb2 << 5) | (Cf_val + (Cf_val) / 18);
return(comb2 | 0x8000) ;
}
#ifdef TESTPRINT
main()
{
unsigned short comp2, comb2;
int i,j;
printf("\ncompletion code combination code\n");
for (i=0xb0;i<=0xc8;i++) {
for (j=0xa1;j<=0xfe;j++) {
comp2 = i<<8|j;
comb2 = comptopack(comp2);
printf(" %4x %4x\n", comp2,comb2);
}
}
}
#endif