home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / proj.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  71 lines

  1. /* proj.c file for GNU Fortran
  2.    Copyright (C) 1995 Free Software Foundation, Inc.
  3.    Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
  4.  
  5. This file is part of GNU Fortran.
  6.  
  7. GNU Fortran is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2, or (at your option)
  10. any later version.
  11.  
  12. GNU Fortran is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GNU Fortran; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.     */
  20.  
  21. #include "proj.h"
  22. #include <ctype.h>
  23. #include "glimits.j"
  24.  
  25. #if !FFEPROJ_STRTOUL
  26. unsigned long int
  27. strtoul (const char *nptr, char **endptr, int base)
  28. {
  29.   unsigned long int number = 0;
  30.   unsigned long int old_number = 0;
  31.  
  32.   assert (base == 10);
  33.   assert (endptr == NULL);
  34.  
  35.   while (isdigit (*nptr))
  36.     {
  37.       number = old_number * 10 + (*(nptr++) - '0');
  38.       if ((number <= old_number) && (old_number != 0))
  39.     return ULONG_MAX;
  40.       old_number = number;
  41.     }
  42.  
  43.   return number;
  44. }
  45.  
  46. #endif
  47.  
  48. #if !FFEPROJ_BSEARCH
  49. void *
  50. bsearch (const void *key, const void *base, size_t nmemb, size_t size,
  51.      int (*compar) (const void *, const void *))
  52. {
  53.   size_t i;
  54.   int cmp;
  55.  
  56.   /* We do a dumb incremental search, not a binary search, for now. */
  57.  
  58.   for (i = 0; i < nmemb; ++i)
  59.     {
  60.       if ((cmp = (*compar) (key, base)) == 0)
  61.     return base;
  62.       if (cmp < 0)
  63.     break;
  64.       base += size;
  65.     }
  66.  
  67.   return NULL;
  68. }
  69.  
  70. #endif
  71.