[project @ 1997-03-14 07:52:06 by simonpj]
[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 import PreludeGlaST     ( indexAddrOffAddr )
12
13 CHK_Ubiq() -- debugging consistency check
14
15 #if __GLASGOW_HASKELL__ >= 200
16 # define ADDR       GHCbase.Addr
17 # define PACK_STR   packCString
18 #else
19 # define ADDR       _Addr
20 # define PACK_STR   mkFastCharString
21 /*
22 # define ADDR       _Addr
23 # define PACK_STR   _packCString
24 */
25 #endif
26
27 argv :: [FAST_STRING]
28 argv = unpackArgv ``prog_argv'' (``prog_argc''::Int)
29
30 unpackArgv :: ADDR -> Int -> [FAST_STRING] -- argv[1 .. argc-1]
31
32 unpackArgv argv argc = unpack 1
33   where
34     unpack :: Int -> [FAST_STRING]
35     unpack n
36       = if (n >= argc)
37         then ([] :: [FAST_STRING])
38         else case (indexAddrOffAddr argv n) of { item ->
39              PACK_STR item : unpack (n + 1)
40              }
41 \end{code}