home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / b / bootp.zip / NVAL.C < prev    next >
Text File  |  1992-04-13  |  2KB  |  120 lines

  1. extern unsigned long rdvct();
  2. extern unsigned long peekl();
  3.  
  4. unsigned long default_nval_mul = 10l;
  5.  
  6. char *nval( s, np )
  7. char *s;
  8. unsigned long *np;
  9. {
  10. unsigned long l;
  11. int hex;
  12. unsigned long mul;
  13. int first;
  14. int dptr;
  15. int i;
  16. unsigned char *s1;
  17.  
  18. l = 0l;
  19. hex = 0;
  20. mul = default_nval_mul;
  21. first = 1;
  22. dptr = 0;
  23.  
  24. if( mul == 16 ) hex = 1;
  25.  
  26. while(*s)
  27.   {
  28.   if( (*s) == '&' )
  29.     dptr = 1;
  30.   else if( (toupper(*s)&0x0FF) == 'X' )
  31.     {
  32.     hex = 1;
  33.     mul = 16;
  34.     }
  35.   else if( isdigit( *s ) )
  36.     l = l*mul + *s - '0';
  37.   else if( hex && ((toupper(*s)&0x0FF) >= 'A') && ((toupper(*s)&0x0FF) <= 'F') )
  38.     l = l*mul + (toupper(*s)&0x0FF) - 'A' + 10;
  39.   else
  40.     {
  41.     if( first ) return(0l);
  42.     s++;
  43.     break;
  44.     }
  45.   first = 0;
  46.   s++;
  47.   }
  48.  
  49. if( dptr )
  50.   {
  51.   *np = peekl( rdvct(0x049) + l );
  52.   for( i=0; i<4; i++ )
  53.     {
  54.     s1 = peekl( rdvct(0x049) + 17 + i );    /* serial number */
  55.     if( (!isspace( s1 )) && (!isdigit( s1 )) )
  56.       {
  57.       pmsg( "ROM bad or not found\r\n" );
  58.       *np = 0l;
  59.       break;
  60.       }
  61.     }
  62.   }
  63. else
  64.   *np = l;
  65.  
  66. return( s );
  67. }
  68.  
  69. extern char *strstr();
  70.  
  71. do_one_arg( cmd, cmds, lptr, len )
  72. char *cmd;
  73. char *cmds;
  74. unsigned long *lptr;
  75. int len;
  76. {
  77. char *s;
  78. unsigned long n;
  79. unsigned char *cptr;
  80. unsigned int *iptr;
  81. int j;
  82.  
  83. iptr = cptr = lptr;
  84.  
  85. if( s = strstr( cmd, cmds ) )
  86.   {
  87.   s += strlen( cmds );
  88.   if( s = nval( s, &n ) )
  89.     {
  90.     if( len == 1 )
  91.       *cptr = n;
  92.     else if( len == 2 )
  93.       *iptr = n;
  94.     else if( len == 3 )
  95.       {
  96.       *iptr = (n & 0x0FFFFl);
  97.       cptr += 2;
  98.       *cptr = (n & 0x00FF0000l) >> 16;
  99.       }
  100.     else if( len == 4 )
  101.       {
  102.       *lptr = n;
  103.       if( s && *s )
  104.     {
  105.         for( j=1; (j<4) && s; j++ )
  106.       {
  107.       if( !(s = nval( s, &n ) ) ) break;
  108.       *lptr = *lptr | (n << (j*8));
  109.       }
  110.     }
  111.       }
  112.     else
  113.       return(0);
  114.     return(1);
  115.     }
  116.   }
  117.  
  118. return(0);
  119. }
  120.