home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / dos-ref.doc / examples / chap4.arj / TRUENAME.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-09-25  |  1.0 KB  |  55 lines

  1. /* TRUENAME.C */
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <ctype.h>
  6. #include <dos.h>
  7.  
  8. #ifdef __TURBOC__
  9. #define _asm asm
  10. #endif
  11.  
  12. void ret(char *s, int retval) { puts(s); exit(retval); }
  13.  
  14. char far *truename(char far *s, char far *d)
  15. {
  16.     char far *s2;
  17.     
  18.     /* INT 21h AH=60h doesn't like leading or trailing blanks */
  19.     while (isspace(*s))
  20.         s++;
  21.     s2 = s;
  22.     while (*s2) s2++;
  23.     s2--;
  24.     while (isspace(*s2))
  25.         *s2-- = 0;
  26.     
  27.     _asm push di
  28.     _asm push si
  29.     _asm les di, d
  30.     _asm lds si, s
  31.     _asm mov ah, 60h
  32.     _asm int 21h
  33.     _asm pop si
  34.     _asm pop di
  35.     _asm jc error
  36.     return d;
  37. error:
  38.     return (char far *) 0;
  39. }
  40.  
  41. main(int argc, char *argv[])
  42. {
  43.     char buf[128];
  44.     char far *s;
  45.     if (argc < 2)
  46.         ret("usage: dospath <filename>", 1);
  47.     if (_osmajor < 3)
  48.         ret("requires DOS 3.0 or greater", 1);
  49.     
  50.     if (s = truename(argv[1], buf))
  51.         ret(s, 0);
  52.     else
  53.         ret("invalid filename", 1);
  54. }
  55.