home *** CD-ROM | disk | FTP | other *** search
/ Solo Programadores 22 / SOLO_22.iso / packages / win32ada / data.z / win32-winsock.adb < prev    next >
Encoding:
Text File  |  1995-11-17  |  9.3 KB  |  246 lines

  1. -- $Source: /home/harp/1/proto/monoBANK/winnt/win32-winsock.adb,v $ 
  2. -- $Revision: 1.3 $ $Date: 95/02/13 09:21:11 $ $Author: mg $ 
  3. -------------------------------------------------------------------------------
  4. --
  5. -- THIS FILE AND ANY ASSOCIATED DOCUMENTATION IS FURNISHED "AS IS" WITHOUT 
  6. -- WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
  7. -- TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR 
  8. -- PURPOSE.  The user assumes the entire risk as to the accuracy and the 
  9. -- use of this file.
  10. --
  11. -- Copyright (c) Intermetrics, Inc. 1995
  12. -- Royalty-free, unlimited, worldwide, non-exclusive use, modification, 
  13. -- reproduction and further distribution of this file is permitted.
  14. --
  15. -------------------------------------------------------------------------------
  16.  
  17.  
  18. with Interfaces.C;
  19. use Interfaces.C;
  20.  
  21. package body Win32.Winsock is
  22.  
  23.     procedure FD_CLR(fd : SOCKET;
  24.                      set: access FD_SET) is                 -- winsock.h:75
  25.         i : integer := 0;
  26.     begin
  27.         while (i < integer(set.all.fd_count)) loop
  28.             if (set.all.fd_array(i) = fd) then
  29.                 while (i < integer(set.all.fd_count - 1)) loop
  30.                     set.all.fd_array(i) := set.all.fd_array(i+1); 
  31.                     i := i + 1;
  32.                 end loop;
  33.                 set.all.fd_count := set.all.fd_count - 1;
  34.                 exit;
  35.             end if;
  36.         end loop;
  37.     end FD_CLR;
  38.  
  39.     procedure FD_SET_PROC(fd : SOCKET;
  40.                           set: access FD_SET) is            -- winsock.h:90
  41.     begin
  42.         if (set.all.fd_count < FD_SETSIZE) then
  43.             set.all.fd_array(integer(set.all.fd_count)) := fd;
  44.             set.all.fd_count := set.all.fd_count + 1;
  45.         end if;
  46.     end FD_SET_PROC;
  47.  
  48.     procedure FD_ZERO(set: access FD_SET) is                -- winsock.h:95
  49.     begin
  50.         set.all.fd_count := 0;
  51.     end FD_ZERO;
  52.  
  53.     function timerisset(tvp: access TIMEVAL) return Win32.BOOL is 
  54.                                                             -- winsock.h:112
  55.     begin
  56.         return Win32.BOOL
  57.                 (Win32.ULONG(tvp.all.tv_sec) or Win32.ULONG(tvp.all.tv_usec));
  58.     end timerisset;
  59.  
  60.     function timercmp(tvp: access TIMEVAL;
  61.                       uvp: access TIMEVAL;
  62.                       cmp: LPCMPFN) 
  63.                       return Win32.BOOL is                  -- winsock.h:113
  64.     begin
  65.         if ((cmp(tvp.all.tv_sec, uvp.all.tv_sec) or
  66.                 (tvp.all.tv_sec = uvp.all.tv_sec)) and 
  67.                 cmp(tvp.all.tv_usec, uvp.all.tv_usec)) then
  68.                 return Win32.TRUE;
  69.         end if;
  70.         return Win32.FALSE;
  71.     end timercmp;
  72.  
  73.     procedure timerclear(tvp: access TIMEVAL) is            -- winsock.h:116
  74.     begin
  75.         tvp.all.tv_sec := 0;
  76.         tvp.all.tv_usec := 0;
  77.     end timerclear;
  78.  
  79.     function IO(x: Win32.Char;
  80.                 y: Win32.BYTE) 
  81.                 return Win32.LONG is                        -- winsock.h:135
  82.     begin
  83.        return Win32.LONG(
  84.                 IOC_VOID or 
  85.                 Win32.Utils.MAKELONG(
  86.                     Win32.Utils.MAKEWORD(Win32.BYTE(Win32.CHAR'Pos(x)), y), 0));
  87.     end IO;
  88.  
  89.     function To_BYTE is new Ada.Unchecked_Conversion(Interfaces.C.Char,
  90.                 Win32.BYTE);
  91.  
  92.     function FIONREAD return Win32.LONG is                  -- winsock.h:141
  93.         x : Interfaces.C.Char := 'f';
  94.         y : Win32.BYTE := 127;
  95.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  96.     begin
  97.          return Win32.LONG(
  98.                   Win32.ULONG((IOC_OUT or Win32.ULONG(u_long'size)) and 
  99.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  100.                   Win32.Utils.MAKELONG(w,0));
  101.    end FIONREAD;
  102.  
  103.     function FIONBIO return Win32.LONG is                   -- winsock.h:142
  104.         x : Interfaces.C.Char := 'f';
  105.         y : Win32.BYTE := 126;
  106.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  107.     begin
  108.          return Win32.LONG(
  109.                   Win32.ULONG((IOC_IN or Win32.ULONG(u_long'size)) and 
  110.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  111.                   Win32.Utils.MAKELONG(w,0));
  112.    end FIONBIO;
  113.  
  114.     function FIOASYNC return Win32.LONG is                  -- winsock.h:143
  115.         x : Interfaces.C.Char := 'f';
  116.         y : Win32.BYTE := 125;
  117.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  118.     begin
  119.          return Win32.LONG(
  120.                   Win32.ULONG((IOC_IN or Win32.ULONG(u_long'size)) and 
  121.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  122.                   Win32.Utils.MAKELONG(w,0));
  123.    end FIOASYNC;
  124.  
  125.     function SIOCSHIWAT return Win32.LONG is                -- winsock.h:146
  126.         x : Interfaces.C.Char := 's';
  127.         y : Win32.BYTE := 0;
  128.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  129.     begin
  130.          return Win32.LONG(
  131.                   Win32.ULONG((IOC_IN or Win32.ULONG(u_long'size)) and 
  132.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  133.                   Win32.Utils.MAKELONG(w,0));
  134.    end SIOCSHIWAT;
  135.  
  136.     function SIOCGHIWAT return Win32.LONG is                -- winsock.h:147
  137.         x : Interfaces.C.Char := 's';
  138.         y : Win32.BYTE := 1;
  139.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  140.     begin
  141.          return Win32.LONG(
  142.                   Win32.ULONG((IOC_OUT or Win32.ULONG(u_long'size)) and 
  143.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  144.                   Win32.Utils.MAKELONG(w,0));
  145.    end SIOCGHIWAT;
  146.  
  147.     function  SIOCSLOWAT return Win32.LONG is               -- winsock.h:148
  148.         x : Interfaces.C.Char := 's';
  149.         y : Win32.BYTE := 2;
  150.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  151.     begin
  152.          return Win32.LONG(
  153.                   Win32.ULONG((IOC_IN or Win32.ULONG(u_long'size)) and 
  154.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  155.                   Win32.Utils.MAKELONG(w,0));
  156.     end SIOCSLOWAT;
  157.  
  158.     function SIOCGLOWAT return Win32.LONG is                -- winsock.h:149
  159.         x : Interfaces.C.Char := 's';
  160.         y : Win32.BYTE := 3;
  161.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  162.     begin
  163.          return Win32.LONG(
  164.                   Win32.ULONG((IOC_OUT or Win32.ULONG(u_long'size)) and 
  165.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  166.                   Win32.Utils.MAKELONG(w,0));
  167.     end SIOCGLOWAT;
  168.  
  169.     function  SIOCATMARK return Win32.LONG is               -- winsock.h:150
  170.         x : Interfaces.C.Char := 's';
  171.         y : Win32.BYTE := 7;
  172.         w : Win32.WORD := Win32.Utils.MAKEWORD(To_BYTE(x), y);
  173.     begin
  174.          return Win32.LONG(
  175.                   Win32.ULONG((IOC_OUT or Win32.ULONG(u_long'size)) and 
  176.                   Win32.ULONG(IOCPARM_MASK * 2**16)) or 
  177.                   Win32.Utils.MAKELONG(w,0));
  178.    end SIOCATMARK;
  179.  
  180.     function IN_CLASSA(i: Win32.LONG) return Win32.BOOL is  -- winsock.h:293
  181.     begin
  182.         if ((Win32.ULONG(i) and  16#80000000#) = 0) then 
  183.             return Win32.TRUE;
  184.         end if;
  185.         return Win32.FALSE;
  186.     end IN_CLASSA;
  187.  
  188.  
  189.     function IN_CLASSB(i: Win32.LONG) return Win32.BOOL is  -- winsock.h:299
  190.     begin
  191.         if ((Win32.ULONG(i) and  16#c0000000#) = 16#80000000#) then 
  192.             return Win32.TRUE;
  193.         end if;
  194.         return Win32.FALSE;
  195.     end IN_CLASSB;
  196.  
  197.     function IN_CLASSC(i: Win32.LONG) return Win32.BOOL is  -- winsock.h:305
  198.     begin
  199.         if ((Win32.ULONG(i) and  16#e0000000#) = 16#c0000000#) then
  200.             return Win32.TRUE;
  201.         end if;
  202.         return Win32.FALSE;
  203.     end IN_CLASSC;
  204.  
  205.     function WSAMAKEASYNCREPLY(buflen: Win32.WORD;
  206.                                error : Win32.WORD) 
  207.                                return Win32.DWORD is
  208.                                                             -- winsock.h:872 
  209.     begin     
  210.         return Win32.Utils.MAKELONG(buflen, error);
  211.     end WSAMAKEASYNCREPLY;
  212.  
  213.     function WSAMAKESELECTREPLY(event: Win32.WORD;
  214.                                 error: Win32.WORD)  
  215.                                 return Win32.DWORD is
  216.                                                             -- winsock.h:877      
  217.     begin     
  218.         return Win32.Utils.MAKELONG(event,error);
  219.     end WSAMAKESELECTREPLY;
  220.  
  221.     function WSAGETASYNCBUFLEN(lParam: Win32.LPARAM) return Win32.WORD is
  222.                                                 -- winsock.h:883          
  223.     begin     
  224.         return Win32.Utils.LOWORD(Win32.DWORD(lParam));
  225.     end WSAGETASYNCBUFLEN;
  226.  
  227.     function WSAGETASYNCERROR(lParam: Win32.LPARAM) return Win32.WORD is
  228.                                                             -- winsock.h:889 
  229.     begin     
  230.         return Win32.Utils.HIWORD(Win32.DWORD(lParam));
  231.     end WSAGETASYNCERROR;
  232.  
  233.     function WSAGETSELECTEVENT(lParam: Win32.LPARAM) return Win32.WORD is
  234.                                                             -- winsock.h:895 
  235.     begin     
  236.         return Win32.Utils.LOWORD(Win32.DWORD(lParam));
  237.     end WSAGETSELECTEVENT;
  238.  
  239.     function WSAGETSELECTERROR(lParam: Win32.LPARAM)   return Win32.WORD is
  240.                                                             -- winsock.h:901  
  241.     begin     
  242.         return Win32.Utils.HIWORD(Win32.DWORD(lParam));
  243.     end WSAGETSELECTERROR;
  244.  
  245. end Win32.Winsock;
  246.