home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 215 / DDJ9301.ZIP / PORT.ASC < prev    next >
Text File  |  1992-12-08  |  2KB  |  120 lines

  1.  
  2. _PORTING FROM 16-BIT TO 32-BIT EXTENDED DOS_
  3. by Joe Huffman
  4.  
  5. Figure 1: 
  6.  
  7. /***** Use shifts and logical operators to speed up the binary search routine.  
  8. Avoids the use of slow divides. *****/
  9. unsigned int binary_search(const char **array_p, const char *find_p, int size)
  10. {
  11.   unsigned int mask = 1 << 15;  /* Assumes 16-bit integers! */
  12.   unsigned int index = mask;
  13.   int comp_val = 1;     /* Initialize the compare value to decrease */
  14.                         /* the index until index < size. */
  15.   while(index >= size ||
  16.         mask && (comp_val = strcmp(array_p[index], find_p)) != 0)
  17.   {
  18.     if(comp_val > 0)   /* If the value is too high, clear this bit. */
  19.       index ^= mask;
  20.     mask >>= 1;
  21.     index |= mask;
  22.   }
  23.   return index;
  24. }
  25.  
  26.  
  27. Figure  2: 
  28.  
  29.  
  30. struct fig_2a
  31. {
  32.   char c;
  33.   int  i;
  34. };
  35. struct fig_2b
  36. {
  37.   char c1, c2;
  38.   int  i;
  39. };
  40.  
  41. Compiler                        sizeof(struct fig_2a)  sizeof(struct fig_2b)
  42.  
  43. Borland C/C++ 3.1  all models          3                      4
  44. Microsoft C/C++ 7.0 all models         4                      4
  45. Watcom 386/9.0 (32-bit code)           5                      6
  46. Zortech 3.0 T,S,C,M,L,Z models         4                      4
  47. Zortech 3.0 X model                    8                      8
  48.  
  49.  
  50.  
  51. Figure 3: 
  52.  
  53. struct fig_3a
  54. {
  55.   char c1;
  56.   int  i1;
  57.   char c2;
  58.   int  i2;
  59.   char c3;
  60.   int  i3;
  61.   char c4;
  62. };
  63. struct fig_3b
  64. {
  65.   char c1;
  66.   char c2;
  67.   char c3;
  68.   char c4;
  69.   int  i1;
  70.   int  i2;
  71.   int  i3;
  72.  
  73. };
  74.  
  75.  
  76. Compiler                        sizeof(struct fig_3a)  sizeof(struct fig_3b)
  77.  
  78. Borland C/C++ 3.1  all models          10                     10
  79. Microsoft C/C++ 7.0 all models         14                     10
  80. Watcom 386/9.0 (32-bit code)           16                     16
  81. Zortech 3.0 T,S,C,M,L,Z models         14                     10
  82. Zortech 3.0 X model                    28                     16
  83.  
  84.  
  85.  
  86.  
  87. Figure 4: 
  88.  
  89. struct attribute
  90. {
  91.   char fg_color, bg_color;
  92. };
  93.  
  94.  
  95.  
  96. Figure 5: 
  97.  
  98.  
  99. #define BYTES_PER_ATTR  2
  100. #define TABLE_SIZE     10
  101. struct attribute attr_table[TABLE_SIZE];
  102.  
  103. void read_attr_table(FILE *fp)
  104. {
  105.   int i;
  106.   char *p = (char *)&attr_table[0];
  107.  
  108.   for(i = 0; i < TABLE_SIZE; i++)
  109.   {
  110.     int j;
  111.     for(j = 0; j < BYTES_PER_ATTR; j++)
  112.     {
  113.       int tmp;
  114.       scanf(fp, "%d", &tmp);
  115.       *p++ = tmp;
  116.     }
  117.   }
  118. }
  119.  
  120.