* Warnings fixed
[scilab.git] / scilab / modules / core / src / c / getmemory.c
1
2 /*-----------------------------------------------------------------------------------*/
3 /* INRIA 2005 */
4 /* Allan CORNET */
5 /* References
6 @sa http://nixdoc.net/man-pages/Tru64/man2/getsysinfo.2.html
7 @sa http://www.opensource.apple.com/darwinsource/projects/other/gccfast-1621.1/libiberty/physmem.c
8 @sa http://lists.gnu.org/archive/html/bug-gnulib/2003-08/msg00102.html
9 */
10 #include "getmemory.h"
11
12 int getfreememory()
13 {
14 #define kooctet 1024
15 #undef MEMOK
16
17 #if defined(_MSC_VER)
18   {
19     #define MEMOK 1
20     MEMORYSTATUS stat;
21     GlobalMemoryStatus (&stat);
22     return stat.dwAvailPhys/kooctet;
23   }
24 #endif
25
26 #if defined(hpux)
27 #define MEMOK 1
28
29  {
30    struct pst_static pst;
31   /*    pstat_getstatic(&pst, sizeof(pst), (size_t) 1, 0);
32         memorysizeKO=(pst.psd_free)/kooctet;*/
33   return 0;
34  }
35
36 #endif
37 #if defined(__APPLE__) 
38 #define MEMOK 1
39       {
40         vm_statistics_data_t page_info;
41         vm_size_t pagesize;
42         mach_msg_type_number_t count;
43         kern_return_t kret;
44     
45         pagesize = 0;
46         kret = host_page_size (mach_host_self(), &pagesize);
47         count = HOST_VM_INFO_COUNT;
48     
49         kret = host_statistics (mach_host_self(), HOST_VM_INFO,(host_info_t)&page_info, &count);
50         return page_info.free_count*pagesize / 1024;
51       }
52 #endif
53
54 #if HAVE_TABLE && defined TBL_VMSTATS
55 #define MEMOK 1
56    { /* This works on Tru64 UNIX V4/5.  */
57      struct tbl_vmstats vmstats;
58
59      if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1)
60        {
61          double pages = vmstats.free_count;
62          double pagesize = vmstats.pagesize;
63
64          if (0 <= pages && 0 <= pagesize)
65            return pages * pagesize;
66          else
67            return 0;
68        }
69    }
70 #endif
71
72 #ifndef  MEMOK
73 /* Linux ,Solaris and others assumed*/
74       return (sysconf(_SC_AVPHYS_PAGES)*sysconf(_SC_PAGESIZE))/kooctet;
75 #endif
76
77 }
78 /*-----------------------------------------------------------------------------------*/ 
79 int getmemorysize()
80 {
81 #define kooctet 1024
82 #undef MEMOK
83
84
85 #if defined(_MSC_VER)
86 #define MEMOK 1
87   {
88     MEMORYSTATUS stat;
89     GlobalMemoryStatus (&stat);
90     return stat.dwTotalPhys/kooctet;
91   }
92 #endif
93
94 #if defined(hpux)
95 #define MEMOK 1
96   {
97     struct pst_static pst;
98     pstat_getstatic(&pst, sizeof(pst), (size_t) 1, 0);
99     return (pst.physical_memory)/kooctet;
100   }
101 #endif
102
103 #if defined(__APPLE__) 
104 #define MEMOK 1
105   {
106     size_t len;
107     int total;
108     int mib[2];
109
110     mib[0] = CTL_HW;
111     mib[1] = HW_PHYSMEM;
112     len = sizeof (total);
113  
114     sysctl(mib, 2, &total, &len, NULL, 0);
115     return  total/1024;
116   }
117 #endif
118
119 #if HAVE_GETSYSINFO && defined GSI_PHYSMEM
120 #define MEMOK 1
121    { /* This works on Tru64 UNIX V4/5.  */
122      int physmem;
123
124      if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem),
125                     NULL, NULL, NULL) == 1)
126        {
127         double kbytes = physmem;
128
129         if (0 <= kbytes)
130           return kbytes * 1024.0;
131         else
132           return 0;
133        }
134    }
135 #endif
136
137 #ifndef  MEMOK
138   /* Linux ,Solaris and others */
139   return (sysconf(_SC_PHYS_PAGES)*sysconf(_SC_PAGESIZE))/kooctet;
140 #endif
141 }
142 /*-----------------------------------------------------------------------------------*/