home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OBJASM.ZIP / ORCOMDEF.C < prev    next >
Text File  |  1990-07-02  |  2KB  |  71 lines

  1. #include <stdio.h>
  2. #include "o.h"
  3.  
  4. unsigned int get_val( unsigned long * );
  5.  
  6. unsigned int get_val( value )
  7.     unsigned long   *value;
  8. {   
  9.     unsigned int    byte;
  10.     unsigned int    result;
  11.  
  12.     byte = get_byte();
  13.  
  14.     switch( byte ) {
  15.         case 0x81:
  16.             *value = (unsigned long)get_word();
  17.             result = 3;
  18.             break;
  19.         case 0x84:
  20.             *value = (unsigned long)get_word() 
  21.                      + ((unsigned long)get_byte() << 8);
  22.             result = 4;
  23.             break;
  24.         case 0x88:
  25.             *value = get_long();
  26.             result = 5;
  27.             break;
  28.         default:
  29.             *value = (unsigned long)byte;
  30.             result = 1;
  31.             break;
  32.     }
  33.     return( result );
  34. }
  35.  
  36. void comdef( length, scope )
  37.     unsigned int    length;
  38.     int             scope;
  39. {
  40.     char            name[41];
  41.     int             typ_idx;
  42.     int             var_type;
  43.     unsigned long   num_elements;
  44.     unsigned long   element_size;
  45.     char            cksum;
  46.  
  47.     --length;
  48.     while( length ) {
  49.         length -= get_name( name );
  50.         length -= get_index( &typ_idx );
  51.         --length;
  52.         var_type = get_byte();
  53.         if ( var_type == 0x61 ) {
  54.             /* MSC v4.0 actually has these values reversed, so you may
  55.                have to reverse the two lines below to generate resonable
  56.                .asm code */
  57.             length -= get_val( &num_elements );
  58.             length -= get_val( &element_size );
  59.         } else {
  60.             length -= get_val( &element_size );
  61.             num_elements = 1L;
  62.         }
  63.         ext_insert( name, 1, var_type, num_elements, 
  64.                                         (unsigned int)element_size, scope );
  65.     }
  66.     cksum = get_byte();
  67. }
  68.  
  69. 
  70.  
  71.