[project @ 1997-08-25 22:24:51 by sof]
[ghc-hetmet.git] / ghc / compiler / utils / Argv.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1996
3 %
4 \section[Argv]{@Argv@: direct (non-standard) access to command-line arguments}
5
6 \begin{code}
7 #include "HsVersions.h"
8
9 module Argv ( argv ) where
10
11 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ <= 200
12 import PreludeGlaST     ( indexAddrOffAddr )
13 #endif
14
15 CHK_Ubiq() -- debugging consistency check
16 IMP_FASTSTRING()
17
18 #if __GLASGOW_HASKELL__ == 201
19 # define ADDR       GHCbase.Addr
20 # define PACK_STR   packCString
21 #elif __GLASGOW_HASKELL__ >= 202
22 # define ADDR       GlaExts.Addr
23 # define PACK_STR   mkFastCharString
24 #else
25 # define ADDR       _Addr
26 # define PACK_STR   mkFastCharString
27 /*
28 # define ADDR       _Addr
29 # define PACK_STR   _packCString
30 */
31 #endif
32
33 argv :: [FAST_STRING]
34 argv = unpackArgv ``prog_argv'' (``prog_argc''::Int)
35
36 unpackArgv :: ADDR -> Int -> [FAST_STRING] -- argv[1 .. argc-1]
37
38 unpackArgv argv argc = unpack 1
39   where
40     unpack :: Int -> [FAST_STRING]
41     unpack n
42       = if (n >= argc)
43         then ([] :: [FAST_STRING])
44         else case (indexAddrOffAddr argv n) of { item ->
45              PACK_STR item : unpack (n + 1)
46              }
47 \end{code}