-- $Source: /home/harp/1/proto/monoBANK/winnt/win32-crt-wcharpkg.ads,v $ 
-- $Revision: 1.2 $ $Date: 96/09/13 15:35:11 $ $Author: mg $ 
-- See end of file for Copyright (c) information.

with Stdarg;
with Win32;
with Win32.crt.Ctype;
with Win32.crt.Stdio;
with Win32.crt.Strings;
 
package Win32.crt.WcharPkg is                                   -- wchar.h
    
    subtype size_t is Win32.size_t;  

    subtype wchar_t is Win32.wchar_t;

    subtype wint_t is Win32.crt.Ctype.wint_t;
    
    subtype wctype_t is wchar_t;  
    
    -- set bit masks for the possible character types
    UPPER   : constant := 16#1#;        -- upper case letter
    LOWER   : constant := 16#2#;        -- lower case letter
    DIGIT   : constant := 16#4#;        -- digit[0-9]
    SPACE   : constant := 16#8#;        -- tab, carriage return, newline,
                                        -- vertical tab or form feed
    PUNCT   : constant := 16#10#;       -- punctuation character
    CONTROL : constant := 16#20#;       -- control character
    BLANK   : constant := 16#40#;       -- space char
    HEX     : constant := 16#80#;       -- hexadecimal digit
    LEADBYTE: constant := 16#8000#;     -- multibyte leadbyte
    
    use type Win32.UINT;
    ALPHA: constant := Win32.UINT'(16#0100# or UPPER or LOWER);  
 
    function iswalpha (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswalpha;
   
    function iswupper (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswupper;

    function iswlower (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswlower;

    function iswdigit (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswdigit;

    function iswxdigit (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswxdigit;

    function iswspace (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswspace;

    function iswpunct (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswpunct;

    function iswalnum (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswalnum;

    function iswprint (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswprint;

    function iswgraph (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswgraph;

    function iswcntrl (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswcntrl;

    function iswascii (c : in wint_t) return Win32.INT 
        renames Win32.crt.Ctype.iswascii;

    function isleadbyte (c : Win32.crt.Ctype.Char) return Win32.INT
        renames Win32.crt.Ctype.isleadbyte;

    function towupper (c : in wchar_t) return wchar_t 
        renames Win32.crt.Ctype.towupper;

    function towlower (c : in wchar_t) return wchar_t 
        renames Win32.crt.Ctype.towlower;

    function iswctype (c : in wint_t; desc : in wctype_t) return 
        Win32.INT renames Win32.crt.Ctype.iswctype;

    function isctype(ch  : Win32.crt.Ctype.Char;
                     desc: Win32.INT)
        return Win32.INT
        renames Win32.crt.Ctype.isctype;

    function fgetwchar return wint_t;  
    
    function fputwchar (c : in wint_t) return wint_t;  
    
    function fgetwc (stream: Win32.crt.Stdio.FILE_Access) return wint_t;

    function fputwc (
         c     : in wint_t; 
         stream: Win32.crt.Stdio.FILE_Access) 
         return wint_t;

    function ungetwc (
        c     : in wint_t; 
        stream: Win32.crt.Stdio.FILE_Access) 
        return wint_t;
 
    function getwchar return wint_t;

    function putwchar (c : in wint_t) return wint_t;

    function getwc (stream: Win32.crt.Stdio.FILE_Access) return wint_t
        renames fgetwc;

    function putwc
        (c     : in wint_t; 
         stream: Win32.crt.Stdio.FILE_Access) return wint_t
        renames fputwc;
 
    function fwprintf (
        stream : Win32.crt.Stdio.FILE_Access;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function fwscanf (
        stream : Win32.crt.Stdio.FILE_Access;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function wprintf (
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function wscanf (
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function snwprintf (
        buffer : Win32.PWSTR;
        count  : size_t;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function swprintf (
        buffer : Win32.PWSTR;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function swscanf (
        buffer : Win32.PWSTR;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function vfwprintf (
        stream : Win32.crt.Stdio.FILE_Access;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function vwprintf (
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function vsnwprintf (
        buffer : Win32.PWSTR;
        count  : size_t;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;

    function vswprintf (
        buffer : Win32.PWSTR;
        format : Win32.PCWSTR;
        args   : Stdarg.ArgList := Stdarg.Empty) return Win32.INT;
    
    -- also defined in stdlib.h
    type access_unsigned_short is access all Win32.USHORT;  

    function wcstod
        (nptr  : access Win32.USHORT;
         endptr: access access_unsigned_short) return Win32.DOUBLE;  
    
    function wcstol
        (nptr  : in access_unsigned_short;
         endptr: access access_unsigned_short;
         base  : in Win32.INT) return Win32.LONG;  
    
    function wcstoul
        (nptr  : in access_unsigned_short;
         endptr: access access_unsigned_short;
         base  : in Win32.INT) return Win32.ULONG; 
         
    function itow
        (val   : in Win32.INT;
         buf   : in access_unsigned_short;
         radix : in Win32.INT) return access_unsigned_short;  
    
    function ltow
        (val   : in Win32.LONG;
         buf   : in access_unsigned_short;
         radix : in Win32.INT) return access_unsigned_short;  
    
    function ultow
        (val   : in Win32.ULONG;
         buf   : in access_unsigned_short;
         radix : in Win32.INT) return access_unsigned_short;  
    
    function wtol
        (nptr : in access_unsigned_short) return Win32.LONG;  
    
    function wtoi
        (nptr : in access_unsigned_short) return Win32.INT;  

    function wcscat
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return access_unsigned_short;  
    
    function wcschr
        (string1 : in access_unsigned_short; 
         c       : in wchar_t)
        return access_unsigned_short;  
    
    function wcscmp
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return Win32.INT;  
    
    function wcscpy
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return access_unsigned_short;  
    
    function wcscspn
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return size_t;  
    
    function wcslen
        (string1 : in access_unsigned_short) return size_t;  
    
    function wcsncat
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short;
         count   : in size_t) return access_unsigned_short;  
    
    function wcsncmp
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short;
         count   : in size_t) return Win32.INT;  
    
    function wcsncpy
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short;
         count   : in size_t) return access_unsigned_short;  
    
    function wcspbrk
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return access_unsigned_short;  
    
    function wcsrchr
        (string1 : in access_unsigned_short; 
         c       : in wchar_t)
        return access_unsigned_short;  
    
    function wcsspn
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return size_t;  
    
    function wcsstr
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return access_unsigned_short;  
    
    function wcstok
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return access_unsigned_short;  
    
    function wcsdup
        (string1 : in access_unsigned_short)
        return access_unsigned_short;  
    
    function wcsicmp
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return Win32.INT;  
    
    function wcsnicmp
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short;
         count   : in size_t) return Win32.INT;  
    
    function wcsnset
        (string1 : in access_unsigned_short;
         c       : in wchar_t;
         count   : in size_t) return access_unsigned_short;  
    
    function wcsrev
        (string1 : in access_unsigned_short)
        return access_unsigned_short;  
    
    function wcsset
        (string1 : in access_unsigned_short; 
         c       : in wchar_t)
        return access_unsigned_short;  
    
    function wcslwr
        (string1 : in access_unsigned_short)
        return access_unsigned_short;  
    
    function wcsupr
        (string1 : in access_unsigned_short)
        return access_unsigned_short;  
    
    function wcsxfrm
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short;
         count   : in size_t) return size_t;  
    
    function wcscoll
        (string1 : in access_unsigned_short;
         string2 : in access_unsigned_short) return Win32.INT;  
    
    function wcsicoll (
        string1 : in access_unsigned_short;             
        string2 : in access_unsigned_short) 
        return Win32.INT;  
    
    -- wcsftime is in package Time.
    
private

    pragma Inline(getwchar);
    pragma Inline(putwchar);
 
    pragma Import(C, fgetwchar, "_fgetwchar"); 
    pragma Import(C, fputwchar, "_fputwchar"); 
    pragma Import(C, fgetwc, "fgetwc");
    pragma Import(C, fputwc, "fputwc");
    pragma Import(C, ungetwc, "ungetwc");
    pragma Import(C, wcstod, "wcstod"); 
    pragma Import(C, wcstol, "wcstol"); 
    pragma Import(C, wcstoul, "wcstoul"); 
    pragma Import(C, itow, "_itow"); 
    pragma Import(C, ltow, "_ltow"); 
    pragma Import(C, ultow, "_ultow"); 
    pragma Import(C, wtol, "_wtol"); 
    pragma Import(C, wtoi, "_wtoi"); 
    pragma Import(C, wcscat, "wcscat"); 
    pragma Import(C, wcschr, "wcschr"); 
    pragma Import(C, wcscmp, "wcscmp"); 
    pragma Import(C, wcscpy, "wcscpy"); 
    pragma Import(C, wcscspn, "wcscspn"); 
    pragma Import(C, wcslen, "wcslen"); 
    pragma Import(C, wcsncat, "wcsncat"); 
    pragma Import(C, wcsncmp, "wcsncmp"); 
    pragma Import(C, wcsncpy, "wcsncpy"); 
    pragma Import(C, wcspbrk, "wcspbrk"); 
    pragma Import(C, wcsrchr, "wcsrchr"); 
    pragma Import(C, wcsspn, "wcsspn"); 
    pragma Import(C, wcsstr, "wcsstr"); 
    pragma Import(C, wcstok, "wcstok"); 
    pragma Import(C, wcsdup, "_wcsdup"); 
    pragma Import(C, wcsicmp, "_wcsicmp"); 
    pragma Import(C, wcsnicmp, "_wcsnicmp"); 
    pragma Import(C, wcsnset, "_wcsnset"); 
    pragma Import(C, wcsrev, "_wcsrev"); 
    pragma Import(C, wcsset, "_wcsset"); 
    pragma Import(C, wcslwr, "_wcslwr"); 
    pragma Import(C, wcsupr, "_wcsupr"); 
    pragma Import(C, wcsxfrm, "wcsxfrm"); 
    pragma Import(C, wcscoll, "wcscoll"); 
    pragma Import(C, wcsicoll, "_wcsicoll"); 

-------------------------------------------------------------------------------
--
-- THIS FILE AND ANY ASSOCIATED DOCUMENTATION IS PROVIDED WITHOUT CHARGE
-- "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
-- BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR
-- FITNESS FOR A PARTICULAR PURPOSE.  The user assumes the entire risk as to
-- the accuracy and the use of this file.  This file may be used, copied,
-- modified and distributed only by licensees of Microsoft Corporation's
-- WIN32 Software Development Kit in accordance with the terms of the 
-- licensee's End-User License Agreement for Microsoft Software for the
-- WIN32 Development Kit.
--
-- Copyright (c) Intermetrics, Inc. 1995
-- Portions (c) 1985-1994 Microsoft Corporation with permission.
-- Microsoft is a registered trademark and Windows and Windows NT are
-- trademarks of Microsoft Corporation.
--
-------------------------------------------------------------------------------

end Win32.crt.WcharPkg;