flparse.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.  * $Log:   P:/user/amir/lite/vcs/flparse.c_v  $
  3.  * 
  4.  *    Rev 1.4   10 Sep 1997 16:29:18   danig
  5.  * Got rid of generic names
  6.  * 
  7.  *    Rev 1.3   20 Jul 1997 17:16:38   amirban
  8.  * Get rid of warnings
  9.  * 
  10.  *    Rev 1.2   07 Jul 1997 15:21:42   amirban
  11.  * Ver 2.0
  12.  * 
  13.  *    Rev 1.1   18 Aug 1996 13:48:16   amirban
  14.  * Comments
  15.  * 
  16.  *    Rev 1.0   03 Jun 1996 16:21:46   amirban
  17.  * Initial revision.
  18.  */
  19. /************************************************************************/
  20. /*                                                                      */
  21. /* FAT-FTL Lite Software Development Kit */
  22. /* Copyright (C) M-Systems Ltd. 1995-1996 */
  23. /* */
  24. /************************************************************************/
  25. #include "fatlite.h"
  26. #ifdef PARSE_PATH
  27. /*----------------------------------------------------------------------*/
  28. /*          f l P a r s e P a t h */
  29. /* */
  30. /* Converts a DOS-like path string to a simple-path array. */
  31. /*                                                                      */
  32. /* Parameters:                                                          */
  33. /* ioreq->irData : address of path string to convert */
  34. /* ioreq->irPath : address of array to receive parsed-path */
  35. /*                                                                      */
  36. /* Returns:                                                             */
  37. /* FLStatus : 0 on success, otherwise failed                */
  38. /*----------------------------------------------------------------------*/
  39. FLStatus flParsePath(IOreq FAR2 *ioreq)
  40. {
  41.   char FAR1 *dosPath;
  42.   FLSimplePath FAR1 *sPath = ioreq->irPath;
  43.   unsigned offset = 0, dots = 0, chars = 0;
  44.   FLBoolean isExt = FALSE;
  45.   for (dosPath = (char FAR1 *) ioreq->irData; ; dosPath++) {
  46.     if (*dosPath == '\' || *dosPath == 0) {
  47.       if (offset != 0) {
  48. while (offset < sizeof(FLSimplePath))
  49.   sPath->name[offset++] = ' ';
  50. if (chars == 0) {
  51.   if (dots == 2)
  52.     sPath--;
  53. }
  54. else
  55.   sPath++;
  56. offset = dots = chars = 0;
  57. isExt = FALSE;
  58.       }
  59.       sPath->name[offset] = 0;
  60.       if (*dosPath == 0)
  61. break;
  62.     }
  63.     else if (*dosPath == '.') {
  64.       dots++;
  65.       while (offset < sizeof sPath->name)
  66. sPath->name[offset++] = ' ';
  67.       isExt = TRUE;
  68.     }
  69.     else if (offset < sizeof(FLSimplePath) &&
  70.      (isExt || offset < sizeof sPath->name)) {
  71.       chars++;
  72.       if (*dosPath == '*') {
  73. while (offset < (isExt ? sizeof(FLSimplePath) : sizeof sPath->name))
  74.   sPath->name[offset++] = '?';
  75.       }
  76.       else if (*dosPath >= 'a' && *dosPath <= 'z')
  77. sPath->name[offset++] = *dosPath - ('a' - 'A');
  78.       else
  79. sPath->name[offset++] = *dosPath;
  80.     }
  81.   }
  82.   return flOK;
  83. }
  84. #endif /* PARSE_PATH */