{-# LINE 1 "System\\Win32\\Path.hsc" #-}



{-# LINE 2 "System\\Win32\\Path.hsc" #-}

{-# LANGUAGE Safe #-}



{-# LINE 6 "System\\Win32\\Path.hsc" #-}

-----------------------------------------------------------------------------

-- |

-- Module      :  System.Win32.Path

-- Copyright   :  (c) Tamar Christina, 1997-2003

-- License     :  BSD-style (see the file libraries/base/LICENSE)

--

-- Maintainer  :  Tamar Christina <tamar@zhox.com>

-- Stability   :  provisional

-- Portability :  portable

--

-- A collection of FFI declarations for interfacing with Win32.

--

-----------------------------------------------------------------------------



module System.Win32.Path (

   filepathRelativePathTo

 , pathRelativePathTo

 ) where



import System.Win32.Types

import System.Win32.File



import Foreign



#include "windows_cconv.h"







filepathRelativePathTo :: FilePath -> FilePath -> IO FilePath

filepathRelativePathTo from to =

  withTString from $ \p_from ->

  withTString to   $ \p_to   ->

  allocaArray ((260) * ((1))) $ \p_AbsPath -> do

{-# LINE 39 "System\\Win32\\Path.hsc" #-}

    _ <- failIfZero "PathRelativePathTo" (c_pathRelativePathTo p_AbsPath p_from fILE_ATTRIBUTE_DIRECTORY

                                                                         p_to   fILE_ATTRIBUTE_NORMAL)

    path <- peekTString p_AbsPath

    _ <- localFree p_AbsPath

    return path



pathRelativePathTo :: FilePath -> FileAttributeOrFlag -> FilePath -> FileAttributeOrFlag -> IO FilePath

pathRelativePathTo from from_attr to to_attr =

  withTString from $ \p_from ->

  withTString to   $ \p_to   ->

  allocaArray ((260) * ((1))) $ \p_AbsPath -> do

{-# LINE 50 "System\\Win32\\Path.hsc" #-}

    _ <- failIfZero "PathRelativePathTo" (c_pathRelativePathTo p_AbsPath p_from from_attr

                                                                         p_to   to_attr)

    path <- peekTString p_AbsPath

    _ <- localFree p_AbsPath

    return path



foreign import WINDOWS_CCONV unsafe "Shlwapi.h PathRelativePathToW" 

         c_pathRelativePathTo :: LPTSTR -> LPCTSTR -> DWORD -> LPCTSTR -> DWORD -> IO UINT