Mercurial > octave
annotate libinterp/corefcn/sysdep.cc @ 29117:10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
* macros.texi: Delete @xbackslashchar macro which was needed for Texinfo
versions < 5.1 (2013 release date). Alphabetize macros. Document macros
more clearly.
* func.txi, data.cc, error.cc, file-io.cc, regexp.cc, strfns.cc, utils.cc,
pt-eval.cc, beep.m, dlmwrite.m, strread.m, textread.m, asctime.m, ctime.m:
Replace "@xbackslashchar" with just "@backslashchar".
* graphics.cc (Fwaitfor): Replace '\' in @qcode macro with @backslashchar.
* input.cc (FPS1): Replace '\' in @qcode macro with @backslashchar.
Use single quotes in @example block to avoid "\\" construct.
* jsonencode.cc (Fjsonencode): Replace '\' in @qcode macro with @backslashchar.
* sysdep.cc (Fwinqueryreg): Replace '\' in @qcode macro with @backslashchar.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 27 Nov 2020 17:01:47 -0800 |
parents | 2883b3d08b7e |
children | 6c2fa2293242 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 1993-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
1 | 25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21662
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
1 | 28 #endif |
29 | |
23662
bd77ab816e43
eliminate obsolete file lo-math.h
John W. Eaton <jwe@octave.org>
parents:
23575
diff
changeset
|
30 #include <cmath> |
1343 | 31 #include <cstddef> |
32 | |
3503 | 33 #include <iostream> |
1728 | 34 #include <string> |
35 | |
1430 | 36 #if defined (HAVE_TERMIOS_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
37 # include <termios.h> |
1430 | 38 #elif defined (HAVE_TERMIO_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
39 # include <termio.h> |
1430 | 40 #elif defined (HAVE_SGTTY_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
41 # include <sgtty.h> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
42 #endif |
4067 | 43 |
44 #if defined (HAVE_CONIO_H) | |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
45 # include <conio.h> |
1430 | 46 #endif |
47 | |
3248 | 48 #if defined (HAVE_SYS_IOCTL_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
49 # include <sys/ioctl.h> |
3248 | 50 #endif |
51 | |
1463 | 52 #if defined (HAVE_FLOATINGPOINT_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
53 # include <floatingpoint.h> |
1463 | 54 #endif |
55 | |
2508 | 56 #if defined (HAVE_IEEEFP_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
57 # include <ieeefp.h> |
2508 | 58 #endif |
59 | |
21554
9f0088f3f335
call openmp function at initialization (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20788
diff
changeset
|
60 #if defined (HAVE_OMP_H) |
21556 | 61 # include <omp.h> |
21554
9f0088f3f335
call openmp function at initialization (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20788
diff
changeset
|
62 #endif |
9f0088f3f335
call openmp function at initialization (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20788
diff
changeset
|
63 |
2926 | 64 #include "cmd-edit.h" |
65 #include "file-ops.h" | |
2893 | 66 #include "lo-mappers.h" |
24714
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
67 #include "lo-sysinfo.h" |
2317 | 68 #include "mach-info.h" |
2926 | 69 #include "oct-env.h" |
25530
197126863d95
sysdep.cc: Use wide character versions of Windows API functions (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25311
diff
changeset
|
70 #include "uniconv-wrappers.h" |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21888
diff
changeset
|
71 #include "unistd-wrappers.h" |
1769 | 72 |
22097
5ad67277b007
include builtin-defun-decls.h as needed
John W. Eaton <jwe@octave.org>
parents:
22096
diff
changeset
|
73 #include "builtin-defun-decls.h" |
6208 | 74 #include "Cell.h" |
1352 | 75 #include "defun.h" |
76 #include "error.h" | |
21115
629643522cc0
include errwarn.h in all files that use gripe_disabled_feature
John W. Eaton <jwe@octave.org>
parents:
21109
diff
changeset
|
77 #include "errwarn.h" |
529 | 78 #include "input.h" |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
79 #include "interpreter-private.h" |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
22051
diff
changeset
|
80 #include "octave.h" |
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
22051
diff
changeset
|
81 #include "ov.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
82 #include "ovl.h" |
3234 | 83 #include "pager.h" |
6419 | 84 #include "parse.h" |
5770 | 85 #include "sighandlers.h" |
1352 | 86 #include "sysdep.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22089
diff
changeset
|
87 #include "interpreter.h" |
529 | 88 #include "utils.h" |
6598 | 89 #include "file-stat.h" |
529 | 90 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21662
diff
changeset
|
91 #if ! defined (STDIN_FILENO) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21115
diff
changeset
|
92 # define STDIN_FILENO 1 |
529 | 93 #endif |
444 | 94 |
22019
2d8e9bdf5683
Dont use OCTAVE_USE_WINDOWS_API for w32_XXXX function definitions (Bug #48352)
John Donoghue
parents:
21989
diff
changeset
|
95 #if defined (__MINGW32__) || defined (_MSC_VER) |
13771
80b30e186b73
[Win32] Use Toolhelp32 APi to find octinterp module path.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13751
diff
changeset
|
96 |
80b30e186b73
[Win32] Use Toolhelp32 APi to find octinterp module path.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13751
diff
changeset
|
97 #define WIN32_LEAN_AND_MEAN |
21949
baeffde5c87d
fix build for Windows systems
John W. Eaton <jwe@octave.org>
parents:
21910
diff
changeset
|
98 #include <windows.h> |
13771
80b30e186b73
[Win32] Use Toolhelp32 APi to find octinterp module path.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13751
diff
changeset
|
99 #include <tlhelp32.h> |
28371
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
100 #include <psapi.h> |
21949
baeffde5c87d
fix build for Windows systems
John W. Eaton <jwe@octave.org>
parents:
21910
diff
changeset
|
101 #include <shellapi.h> |
13771
80b30e186b73
[Win32] Use Toolhelp32 APi to find octinterp module path.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13751
diff
changeset
|
102 |
5451 | 103 #endif |
104 | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
105 namespace octave |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
106 { |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
107 #if defined (__386BSD__) || defined (__FreeBSD__) || defined (__NetBSD__) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
108 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
109 static void |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
110 BSD_init (void) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
111 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
112 # if defined (HAVE_FLOATINGPOINT_H) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
113 // Disable trapping on common exceptions. |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
114 # if ! defined (FP_X_DNML) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
115 # define FP_X_DNML 0 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
116 # endif |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
117 fpsetmask (~(FP_X_OFL|FP_X_INV|FP_X_DZ|FP_X_DNML|FP_X_UFL|FP_X_IMP)); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
118 # endif |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
119 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
120 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
121 #endif |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
122 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
123 #if defined (__MINGW32__) || defined (_MSC_VER) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
124 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
125 static void |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
126 w32_set_octave_home (void) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
127 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
128 std::string bin_dir; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
129 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
130 HANDLE h = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
131 #if defined (TH32CS_SNAPMODULE32) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
132 | TH32CS_SNAPMODULE32 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
133 #endif |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
134 , 0); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
135 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
136 if (h != INVALID_HANDLE_VALUE) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
137 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
138 MODULEENTRY32W mod_info; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
139 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
140 ZeroMemory (&mod_info, sizeof (mod_info)); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
141 mod_info.dwSize = sizeof (mod_info); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
142 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
143 if (Module32FirstW (h, &mod_info)) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
144 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
145 do |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
146 { |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
147 std::string mod_name (sys::u8_from_wstring (mod_info.szModule)); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
148 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
149 if (mod_name.find ("octinterp") != std::string::npos) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
150 { |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
151 bin_dir = sys::u8_from_wstring (mod_info.szExePath); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
152 if (! bin_dir.empty () && bin_dir.back () != '\\') |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
153 bin_dir.push_back ('\\'); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
154 break; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
155 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
156 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
157 while (Module32NextW (h, &mod_info)); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
158 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
159 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
160 CloseHandle (h); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
161 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
162 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
163 if (! bin_dir.empty ()) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
164 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
165 size_t pos = bin_dir.rfind (R"(\bin\)"); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
166 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
167 if (pos != std::string::npos) |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
168 sys::env::putenv ("OCTAVE_HOME", bin_dir.substr (0, pos)); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
169 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
170 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
171 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
172 static void |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
173 w32_init (void) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
174 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
175 w32_set_octave_home (); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
176 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
177 command_editor::prefer_env_winsize (true); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
178 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
179 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
180 #endif |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
181 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
182 // Set app id if we have the SetCurrentProcessExplicitAppUserModelID |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
183 // available (>= Win7). FIXME: Could we check for existence of this |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
184 // function in the configure script instead of dynamically loading |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
185 // shell32.dll? |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
186 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
187 void set_application_id (void) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
188 { |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
189 #if defined (__MINGW32__) || defined (_MSC_VER) |
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
190 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
191 typedef HRESULT (WINAPI *SETCURRENTAPPID)(PCWSTR AppID); |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
192 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
193 HMODULE hShell = LoadLibrary ("shell32.dll"); |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
194 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
195 if (hShell) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
196 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
197 SETCURRENTAPPID pfnSetCurrentProcessExplicitAppUserModelID |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
198 = reinterpret_cast<SETCURRENTAPPID> (GetProcAddress (hShell, "SetCurrentProcessExplicitAppUserModelID")); |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
199 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
200 if (pfnSetCurrentProcessExplicitAppUserModelID) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
201 pfnSetCurrentProcessExplicitAppUserModelID (L"gnu.octave." VERSION); |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
202 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
203 FreeLibrary (hShell); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
204 } |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
205 |
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
206 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
207 } |
22165
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
208 } |
20e684ec108e
move system dependent code to sysdep.cc
John W. Eaton <jwe@octave.org>
parents:
22141
diff
changeset
|
209 |
19856
5c1a38089f89
Change open_with_system_app to internal function.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
210 DEFUN (__open_with_system_app__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
211 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
212 @deftypefn {} {} __open_with_system_app__ (@var{file}) |
27143
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
213 Internal function. Returns 1 on successful system call and 0 otherwise. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
214 @end deftypefn */) |
19271
030d56f67363
implement the open function
John W. Eaton <jwe@octave.org>
parents:
19270
diff
changeset
|
215 { |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
216 if (args.length () != 1) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
217 print_usage (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
218 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
219 std::string file = args(0).xstring_value ("__open_with_system_app__: argument must be a filename"); |
19271
030d56f67363
implement the open function
John W. Eaton <jwe@octave.org>
parents:
19270
diff
changeset
|
220 |
21979
d04da18a407a
use OCTAVE_USE_WINDOWS_API more consistently
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
221 #if defined (OCTAVE_USE_WINDOWS_API) |
28175
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
222 std::wstring wfile = octave::sys::u8_to_wstring (file); |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
223 HINSTANCE status = ShellExecuteW (0, 0, wfile.c_str (), 0, 0, SW_SHOWNORMAL); |
19271
030d56f67363
implement the open function
John W. Eaton <jwe@octave.org>
parents:
19270
diff
changeset
|
224 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
225 // ShellExecute returns a value greater than 32 if successful. |
27143
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
226 return octave_value (reinterpret_cast<ptrdiff_t> (status) > 32); |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
227 #else |
27346
1effc78e7cd1
open.m: Allow files with space in their path to be open.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27335
diff
changeset
|
228 // Quote file path |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28371
diff
changeset
|
229 file = '"' + file + '"'; |
27346
1effc78e7cd1
open.m: Allow files with space in their path to be open.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27335
diff
changeset
|
230 |
27143
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
231 # if defined (__APPLE__) |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
232 # define FSYSTEM_OPEN_STR "open " |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
233 # else |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
234 # define FSYSTEM_OPEN_STR "xdg-open " |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
235 # endif |
20961
f55251db0833
Add support for the Mac OS X "open" command.
Ben Abbott <bpabbott@mac.com>
parents:
20941
diff
changeset
|
236 octave_value_list tmp |
27143
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
237 = Fsystem (ovl (FSYSTEM_OPEN_STR + file + " 2> /dev/null", |
20961
f55251db0833
Add support for the Mac OS X "open" command.
Ben Abbott <bpabbott@mac.com>
parents:
20941
diff
changeset
|
238 false, "async"), |
f55251db0833
Add support for the Mac OS X "open" command.
Ben Abbott <bpabbott@mac.com>
parents:
20941
diff
changeset
|
239 1); |
27143
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
240 # undef FSYSTEM_OPEN_STR |
19271
030d56f67363
implement the open function
John W. Eaton <jwe@octave.org>
parents:
19270
diff
changeset
|
241 |
27143
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
242 // Asynchronous Fsystem calls return the new child process identifier, |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
243 // which must be greater than 1 if successful. |
64ff1053ffbf
F__open_with_system_app__: Consistent return value for all platforms.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27126
diff
changeset
|
244 return octave_value (tmp(0).double_value () > 1); |
19774
904912f18357
make open_with_system_app a built-in function
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
245 #endif |
19271
030d56f67363
implement the open function
John W. Eaton <jwe@octave.org>
parents:
19270
diff
changeset
|
246 } |
030d56f67363
implement the open function
John W. Eaton <jwe@octave.org>
parents:
19270
diff
changeset
|
247 |
28260
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
248 DEFUN (__is_elevated_process__, args, , |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
249 doc: /* -*- texinfo -*- |
28753 | 250 @deftypefn {} {@var{retval} =} __is_elevated_process__ () |
28260
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
251 Check if current process has elevated rights. |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
252 |
28753 | 253 On Windows, return true if the current process has elevated right. Otherwise, |
28260
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
254 return false. |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
255 On non-Windows platforms, this function fails with an error. |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
256 @end deftypefn */) |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
257 { |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
258 #if defined (OCTAVE_USE_WINDOWS_API) |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
259 if (args.length () != 0) |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
260 print_usage (); |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
261 |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
262 bool retval = false; |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
263 HANDLE h_token = nullptr; |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
264 |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
265 if (OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &h_token)) |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
266 { |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
267 TOKEN_ELEVATION elevation; |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
268 DWORD return_length = sizeof (TOKEN_ELEVATION); |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
269 if (GetTokenInformation (h_token, TokenElevation, &elevation, |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
270 sizeof (elevation), &return_length)) |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
271 retval = elevation.TokenIsElevated; |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
272 } |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
273 |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
274 if (h_token) |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
275 CloseHandle (h_token); |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
276 |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
277 return ovl (retval); |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
278 |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
279 #else |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
280 octave_unused_parameter (args); |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
281 error ("__is_elevated_process__: " |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
282 "Function is only supported on Windows platforms."); |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
283 #endif |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
284 } |
ec77c790fce2
pkg.m: Install packages globally if process has elevated rights (bug #44548).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28175
diff
changeset
|
285 |
28371
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
286 DEFUN (__wmemory__, args, , |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
287 doc: /* -*- texinfo -*- |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
288 @deftypefn {} {[@var{proc}, @var{sys}] =} __wmemory__ () |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
289 Return memory information on Windows. |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
290 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
291 On non-Windows platforms, this function fails with an error. |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
292 @end deftypefn */) |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
293 { |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
294 #if defined (OCTAVE_USE_WINDOWS_API) |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
295 if (args.length () != 0) |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
296 print_usage (); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
297 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
298 // Get memory usage of the current process |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
299 octave_scalar_map proc_struct; |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
300 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
301 HANDLE h_proc = GetCurrentProcess (); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
302 if (h_proc == nullptr) |
28905
89a425f2c202
maint: Use Octave convention that error() messages don't end with a period.
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
303 error ("__wmemory__: Couldn't open handle to own process"); |
28371
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
304 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
305 PROCESS_MEMORY_COUNTERS proc_mem_count; |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
306 if (GetProcessMemoryInfo (h_proc, &proc_mem_count, sizeof (proc_mem_count))) |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
307 { |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
308 proc_struct.setfield ("PageFaultCount", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
309 proc_mem_count.PageFaultCount); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
310 proc_struct.setfield ("PeakWorkingSetSize", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
311 proc_mem_count.PeakWorkingSetSize); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
312 proc_struct.setfield ("WorkingSetSize", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
313 proc_mem_count.WorkingSetSize); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
314 proc_struct.setfield ("QuotaPeakPagedPoolUsage", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
315 proc_mem_count.QuotaPeakPagedPoolUsage); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
316 proc_struct.setfield ("QuotaPagedPoolUsage", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
317 proc_mem_count.QuotaPagedPoolUsage); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
318 proc_struct.setfield ("QuotaPeakNonPagedPoolUsage", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
319 proc_mem_count.QuotaPeakNonPagedPoolUsage); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
320 proc_struct.setfield ("QuotaNonPagedPoolUsage", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
321 proc_mem_count.QuotaNonPagedPoolUsage); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
322 proc_struct.setfield ("PagefileUsage", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
323 proc_mem_count.PagefileUsage); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
324 proc_struct.setfield ("PeakPagefileUsage", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
325 proc_mem_count.PeakPagefileUsage); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
326 } |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
327 else |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
328 { |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
329 proc_struct.setfield ("PageFaultCount", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
330 proc_struct.setfield ("PeakWorkingSetSize", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
331 proc_struct.setfield ("WorkingSetSize", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
332 proc_struct.setfield ("QuotaPeakPagedPoolUsage", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
333 proc_struct.setfield ("QuotaPagedPoolUsage", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
334 proc_struct.setfield ("QuotaPeakNonPagedPoolUsage", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
335 proc_struct.setfield ("QuotaNonPagedPoolUsage", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
336 proc_struct.setfield ("PagefileUsage", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
337 proc_struct.setfield ("PeakPagefileUsage", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
338 } |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
339 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
340 CloseHandle (h_proc); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
341 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
342 // Get system memory usage |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
343 octave_scalar_map sys_struct; |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
344 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
345 MEMORYSTATUSEX mem_stat; |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
346 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
347 mem_stat.dwLength = sizeof (mem_stat); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
348 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
349 if (GlobalMemoryStatusEx (&mem_stat)) |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
350 { |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
351 sys_struct.setfield ("MemoryLoad", mem_stat.dwMemoryLoad); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
352 sys_struct.setfield ("TotalPhys", mem_stat.ullTotalPhys); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
353 sys_struct.setfield ("AvailPhys", mem_stat.ullAvailPhys); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
354 sys_struct.setfield ("TotalPageFile", mem_stat.ullTotalPageFile); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
355 sys_struct.setfield ("AvailPageFile", mem_stat.ullAvailPageFile); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
356 sys_struct.setfield ("TotalVirtual", mem_stat.ullTotalVirtual); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
357 sys_struct.setfield ("AvailVirtual", mem_stat.ullAvailVirtual); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
358 sys_struct.setfield ("AvailExtendedVirtual", |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
359 mem_stat.ullAvailExtendedVirtual); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
360 } |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
361 else |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
362 { |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
363 sys_struct.setfield ("MemoryLoad", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
364 sys_struct.setfield ("TotalPhys", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
365 sys_struct.setfield ("AvailPhys", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
366 sys_struct.setfield ("TotalPageFile", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
367 sys_struct.setfield ("AvailPageFile", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
368 sys_struct.setfield ("TotalVirtual", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
369 sys_struct.setfield ("AvailVirtual", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
370 sys_struct.setfield ("AvailExtendedVirtual", 0); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
371 } |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
372 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
373 return ovl (proc_struct, sys_struct); |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
374 |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
375 #else |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
376 octave_unused_parameter (args); |
28905
89a425f2c202
maint: Use Octave convention that error() messages don't end with a period.
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
377 error ("__wmemory__: Function is only supported on Windows platforms"); |
28371
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
378 #endif |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
379 } |
401599248e4d
Add function to query memory information on Windows (patch #9924).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28261
diff
changeset
|
380 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
381 namespace octave |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
382 { |
5451 | 383 #if defined (__MINGW32__) |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
384 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
385 static void |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
386 MINGW_init (void) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
387 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
388 w32_init (); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
389 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
390 |
5451 | 391 #endif |
392 | |
6080 | 393 #if defined (_MSC_VER) |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
394 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
395 static void |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
396 MSVC_init (void) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
397 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
398 w32_init (); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
399 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
400 |
6080 | 401 #endif |
402 | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
403 // Return TRUE if FILE1 and FILE2 refer to the same (physical) file. |
6598 | 404 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
405 bool same_file_internal (const std::string& file1, const std::string& file2) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
406 { |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21662
diff
changeset
|
407 #if defined (OCTAVE_USE_WINDOWS_API) |
6598 | 408 |
27576
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
409 // FIXME: When Octave switches to C++17, consider replacing this function |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
410 // by https://en.cppreference.com/w/cpp/filesystem/equivalent. |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
411 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
412 bool retval = false; |
6691 | 413 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
414 std::wstring file1w = sys::u8_to_wstring (file1); |
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
415 std::wstring file2w = sys::u8_to_wstring (file2); |
25714
ad0b4817c09d
Fix lifetime issue with C string references from C++ strings (bug #54398)
Markus Mützel <markus.muetzel@gmx.de>
parents:
25655
diff
changeset
|
416 const wchar_t *f1 = file1w.c_str (); |
ad0b4817c09d
Fix lifetime issue with C string references from C++ strings (bug #54398)
Markus Mützel <markus.muetzel@gmx.de>
parents:
25655
diff
changeset
|
417 const wchar_t *f2 = file2w.c_str (); |
16564
aa5299a1d770
* sysdep.cc (same_file_internal): Handle directories on Windows systems.
John W. Eaton <jwe@octave.org>
parents:
16537
diff
changeset
|
418 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
419 bool f1_is_dir = GetFileAttributesW (f1) & FILE_ATTRIBUTE_DIRECTORY; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
420 bool f2_is_dir = GetFileAttributesW (f2) & FILE_ATTRIBUTE_DIRECTORY; |
16564
aa5299a1d770
* sysdep.cc (same_file_internal): Handle directories on Windows systems.
John W. Eaton <jwe@octave.org>
parents:
16537
diff
changeset
|
421 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
422 // Windows native code |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
423 // Reference: http://msdn2.microsoft.com/en-us/library/aa363788.aspx |
6598 | 424 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
425 DWORD share = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE; |
16564
aa5299a1d770
* sysdep.cc (same_file_internal): Handle directories on Windows systems.
John W. Eaton <jwe@octave.org>
parents:
16537
diff
changeset
|
426 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
427 HANDLE hfile1 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
428 = CreateFileW (f1, 0, share, 0, OPEN_EXISTING, |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
429 f1_is_dir ? FILE_FLAG_BACKUP_SEMANTICS : 0, 0); |
6691 | 430 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
431 if (hfile1 != INVALID_HANDLE_VALUE) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
432 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
433 HANDLE hfile2 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
434 = CreateFileW (f2, 0, share, 0, OPEN_EXISTING, |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
435 f2_is_dir ? FILE_FLAG_BACKUP_SEMANTICS : 0, 0); |
6598 | 436 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
437 if (hfile2 != INVALID_HANDLE_VALUE) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
438 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
439 BY_HANDLE_FILE_INFORMATION hfi1; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
440 BY_HANDLE_FILE_INFORMATION hfi2; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
441 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
442 if (GetFileInformationByHandle (hfile1, &hfi1) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
443 && GetFileInformationByHandle (hfile2, &hfi2)) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
444 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
445 retval = (hfi1.dwVolumeSerialNumber == hfi2.dwVolumeSerialNumber |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
446 && hfi1.nFileIndexHigh == hfi2.nFileIndexHigh |
27576
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
447 && hfi1.nFileIndexLow == hfi2.nFileIndexLow |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
448 && hfi1.nFileSizeHigh == hfi2.nFileSizeHigh |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
449 && hfi1.nFileSizeLow == hfi2.nFileSizeLow |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
450 && hfi1.ftLastWriteTime.dwLowDateTime |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
451 == hfi2.ftLastWriteTime.dwLowDateTime |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
452 && hfi1.ftLastWriteTime.dwHighDateTime |
3b50efa29be4
improve file equaliy check for MS Windows (bug #55161).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
27420
diff
changeset
|
453 == hfi2.ftLastWriteTime.dwHighDateTime); |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
454 } |
6598 | 455 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
456 CloseHandle (hfile2); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
457 } |
6691 | 458 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
459 CloseHandle (hfile1); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
460 } |
6691 | 461 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
462 return retval; |
6598 | 463 |
464 #else | |
465 | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
466 // POSIX Code |
6598 | 467 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
468 sys::file_stat fs_file1 (file1); |
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
469 sys::file_stat fs_file2 (file2); |
6598 | 470 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
471 return (fs_file1 && fs_file2 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
472 && fs_file1.ino () == fs_file2.ino () |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
473 && fs_file1.dev () == fs_file2.dev ()); |
6598 | 474 |
475 #endif | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
476 } |
6598 | 477 |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
478 // Return TRUE if NAME refers to an existing drive letter or UNC share |
26995
ab5bfee22d18
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26844
diff
changeset
|
479 |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
480 bool drive_or_unc_share (const std::string& name) |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
481 { |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
482 #if defined (OCTAVE_USE_WINDOWS_API) |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
483 size_t len = name.length (); |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
484 bool candidate = false; |
26995
ab5bfee22d18
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26844
diff
changeset
|
485 if (len > 1 && isalpha(name[0]) && name[1]==':' |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
486 && (len == 2 || (len == 3 && name[2] == '\\'))) |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
487 candidate = true; |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
488 if (len > 4 && name[0] == '\\' && name[1] == '\\') |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
489 { |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
490 // It starts with two slashes. Find the next slash. |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28371
diff
changeset
|
491 size_t next_slash = name.find ('\\', 3); |
27741
b5e88a4bce43
Stop compilation warning regarding signed/unsigned comparison in MXE Octave (bug #52720)
Rik <rik@octave.org>
parents:
27577
diff
changeset
|
492 if (next_slash != std::string::npos && len > next_slash+1) |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
493 { |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
494 // Check if it ends with the share |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28371
diff
changeset
|
495 size_t last_slash = name.find ('\\', next_slash+1); |
27741
b5e88a4bce43
Stop compilation warning regarding signed/unsigned comparison in MXE Octave (bug #52720)
Rik <rik@octave.org>
parents:
27577
diff
changeset
|
496 if (last_slash == std::string::npos |
b5e88a4bce43
Stop compilation warning regarding signed/unsigned comparison in MXE Octave (bug #52720)
Rik <rik@octave.org>
parents:
27577
diff
changeset
|
497 || (len > next_slash+2 && last_slash == len-1)) |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
498 candidate = true; |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
499 } |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
500 } |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
501 |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
502 if (candidate) |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
503 { |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
504 // Open a handle to the file. |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
505 std::wstring wname = sys::u8_to_wstring (name); |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
506 HANDLE h |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
507 = CreateFileW (wname.c_str (), FILE_READ_ATTRIBUTES, |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
508 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
509 nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
510 nullptr); |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
511 if (h != INVALID_HANDLE_VALUE) |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
512 { |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
513 CloseHandle (h); |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
514 return true; |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
515 } |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
516 } |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
517 |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
518 return false; |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
519 |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
520 #else |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
521 |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
522 octave_unused_parameter (name); |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
523 |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
524 return false; |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
525 |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
526 #endif |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26617
diff
changeset
|
527 } |
26995
ab5bfee22d18
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26844
diff
changeset
|
528 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
529 void sysdep_init (void) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
530 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
531 // Use a function from libgomp to force loading of OpenMP library. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
532 // Otherwise, a dynamically loaded library making use of OpenMP such |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
533 // as GraphicsMagick will segfault on exit (bug #41699). |
21554
9f0088f3f335
call openmp function at initialization (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20788
diff
changeset
|
534 #if defined (HAVE_OMP_GET_NUM_THREADS) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
535 omp_get_num_threads (); |
21554
9f0088f3f335
call openmp function at initialization (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20788
diff
changeset
|
536 #endif |
9f0088f3f335
call openmp function at initialization (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20788
diff
changeset
|
537 |
14861
f7afecdd87ef
maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents:
14445
diff
changeset
|
538 #if defined (__386BSD__) || defined (__FreeBSD__) || defined (__NetBSD__) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
539 BSD_init (); |
5451 | 540 #elif defined (__MINGW32__) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
541 MINGW_init (); |
6080 | 542 #elif defined (_MSC_VER) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
543 MSVC_init (); |
1 | 544 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
545 } |
1 | 546 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
547 void sysdep_cleanup (void) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
548 { |
21989
6bce4d23af6b
eliminate OCTAVE_USE_WINDOWS_API and OCTAVE_USE_OS_X_API from header files
John W. Eaton <jwe@octave.org>
parents:
21979
diff
changeset
|
549 #if defined (OCTAVE_USE_WINDOWS_API) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
550 // Let us fail immediately without displaying any dialog. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
551 SetProcessShutdownParameters (0x280, SHUTDOWN_NORETRY); |
21989
6bce4d23af6b
eliminate OCTAVE_USE_WINDOWS_API and OCTAVE_USE_OS_X_API from header files
John W. Eaton <jwe@octave.org>
parents:
21979
diff
changeset
|
552 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
553 } |
5451 | 554 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
555 // Set terminal in raw mode. From less-177. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
556 // |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
557 // Change terminal to "raw mode", or restore to "normal" mode. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
558 // "Raw mode" means |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
559 // 1. An outstanding read will complete on receipt of a single keystroke. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
560 // 2. Input is not echoed. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
561 // 3. On output, \n is mapped to \r\n. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
562 // 4. \t is NOT expanded into spaces. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
563 // 5. Signal-causing characters such as ctrl-C (interrupt), |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
564 // etc. are NOT disabled. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
565 // It doesn't matter whether an input \n is mapped to \r, or vice versa. |
767 | 566 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
567 void raw_mode (bool on, bool wait) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
568 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
569 static bool curr_on = false; |
529 | 570 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
571 int tty_fd = STDIN_FILENO; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
572 if (! octave_isatty_wrapper (tty_fd)) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
573 { |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
574 interpreter& interp = __get_interpreter__ ("raw_mode"); |
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
575 |
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
576 if (interp.interactive () && ! application::forced_interactive ()) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
577 error ("stdin is not a tty!"); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
578 } |
529 | 579 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
580 if (on == curr_on) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
581 return; |
529 | 582 |
583 #if defined (HAVE_TERMIOS_H) | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
584 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
585 struct termios s; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
586 static struct termios save_term; |
529 | 587 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
588 if (on) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
589 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
590 // Get terminal modes. |
529 | 591 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
592 tcgetattr (tty_fd, &s); |
529 | 593 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
594 // Save modes and set certain variables dependent on modes. |
529 | 595 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
596 save_term = s; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
597 // ospeed = s.c_cflag & CBAUD; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
598 // erase_char = s.c_cc[VERASE]; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
599 // kill_char = s.c_cc[VKILL]; |
529 | 600 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
601 // Set the modes to the way we want them. |
529 | 602 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
603 s.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
604 s.c_oflag |= (OPOST | ONLCR); |
529 | 605 #if defined (OCRNL) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
606 s.c_oflag &= ~(OCRNL); |
529 | 607 #endif |
608 #if defined (ONOCR) | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
609 s.c_oflag &= ~(ONOCR); |
529 | 610 #endif |
611 #if defined (ONLRET) | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
612 s.c_oflag &= ~(ONLRET); |
529 | 613 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
614 s.c_cc[VMIN] = (wait ? 1 : 0); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
615 s.c_cc[VTIME] = 0; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
616 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
617 else |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
618 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
619 // Restore saved modes. |
1358 | 620 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
621 s = save_term; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
622 } |
3658 | 623 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
624 tcsetattr (tty_fd, wait ? TCSAFLUSH : TCSADRAIN, &s); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
625 } |
529 | 626 #elif defined (HAVE_TERMIO_H) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
627 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
628 struct termio s; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
629 static struct termio save_term; |
529 | 630 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
631 if (on) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
632 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
633 // Get terminal modes. |
529 | 634 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
635 ioctl (tty_fd, TCGETA, &s); |
529 | 636 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
637 // Save modes and set certain variables dependent on modes. |
529 | 638 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
639 save_term = s; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
640 // ospeed = s.c_cflag & CBAUD; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
641 // erase_char = s.c_cc[VERASE]; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
642 // kill_char = s.c_cc[VKILL]; |
529 | 643 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
644 // Set the modes to the way we want them. |
529 | 645 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
646 s.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
647 s.c_oflag |= (OPOST | ONLCR); |
529 | 648 #if defined (OCRNL) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
649 s.c_oflag &= ~(OCRNL); |
529 | 650 #endif |
651 #if defined (ONOCR) | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
652 s.c_oflag &= ~(ONOCR); |
529 | 653 #endif |
654 #if defined (ONLRET) | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
655 s.c_oflag &= ~(ONLRET); |
529 | 656 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
657 s.c_cc[VMIN] = (wait ? 1 : 0); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
658 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
659 else |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
660 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
661 // Restore saved modes. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
662 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
663 s = save_term; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
664 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
665 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
666 ioctl (tty_fd, TCSETAW, &s); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
667 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
668 #elif defined (HAVE_SGTTY_H) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
669 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
670 octave_unused_parameter (wait); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
671 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
672 struct sgttyb s; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
673 static struct sgttyb save_term; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
674 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
675 if (on) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
676 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
677 // Get terminal modes. |
1358 | 678 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
679 ioctl (tty_fd, TIOCGETP, &s); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
680 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
681 // Save modes and set certain variables dependent on modes. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
682 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
683 save_term = s; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
684 // ospeed = s.sg_ospeed; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
685 // erase_char = s.sg_erase; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
686 // kill_char = s.sg_kill; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
687 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
688 // Set the modes to the way we want them. |
3658 | 689 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
690 s.sg_flags |= CBREAK; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
691 s.sg_flags &= ~(ECHO); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
692 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
693 else |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
694 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
695 // Restore saved modes. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
696 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
697 s = save_term; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
698 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
699 |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
700 ioctl (tty_fd, TIOCSETN, &s); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
701 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
702 #else |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
703 |
24118
f87c9f5c0f43
maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents:
23812
diff
changeset
|
704 octave_unused_parameter (wait); |
f87c9f5c0f43
maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents:
23812
diff
changeset
|
705 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
706 warn_disabled_feature ("", "raw mode console I/O"); |
529 | 707 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
708 // Make sure the current mode doesn't toggle. |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
709 on = curr_on; |
529 | 710 #endif |
711 | |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
712 curr_on = on; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
713 } |
529 | 714 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
715 FILE * popen (const char *command, const char *mode) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
716 { |
6726 | 717 #if defined (__MINGW32__) || defined (_MSC_VER) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
718 wchar_t *wcommand = u8_to_wchar (command); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
719 wchar_t *wmode = u8_to_wchar (mode); |
25530
197126863d95
sysdep.cc: Use wide character versions of Windows API functions (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25311
diff
changeset
|
720 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
721 unwind_action free_memory ([=] () |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
722 { |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
723 ::free (wcommand); |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
724 ::free (wmode); |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
725 }); |
25530
197126863d95
sysdep.cc: Use wide character versions of Windows API functions (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25311
diff
changeset
|
726 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
727 if (wmode && wmode[0] && ! wmode[1]) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
728 { |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
729 // Use binary mode on Windows if unspecified |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
730 wchar_t tmode[3] = {wmode[0], L'b', L'\0'}; |
6726 | 731 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
732 return _wpopen (wcommand, tmode); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
733 } |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
734 else |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
735 return _wpopen (wcommand, wmode); |
6726 | 736 #else |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
737 return ::popen (command, mode); |
6726 | 738 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
739 } |
6726 | 740 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
741 int pclose (FILE *f) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
742 { |
6726 | 743 #if defined (__MINGW32__) || defined (_MSC_VER) |
25655
be7ba25bb5bf
Fix Windows cross-build after 85c3e315bd43.
Markus Mützel <markus.muetzel@gmx.de>
parents:
25649
diff
changeset
|
744 return ::_pclose (f); |
6726 | 745 #else |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
746 return ::pclose (f); |
6726 | 747 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
748 } |
6726 | 749 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
750 // Read one character from the terminal. |
767 | 751 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
752 int kbhit (bool wait) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
753 { |
20788
a2b96b523472
Rewrite a8ee668e7fd7 to use #if defined rather than #ifdef.
Rik <rik@octave.org>
parents:
20786
diff
changeset
|
754 #if defined (HAVE__KBHIT) && defined (HAVE__GETCH) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
755 // This essentially means we are on a Windows system. |
27045
7894624afc47
Fix pause() with no arguments called on Windows (bug #55943)
Mike Miller <mtmiller@octave.org>
parents:
27011
diff
changeset
|
756 |
7894624afc47
Fix pause() with no arguments called on Windows (bug #55943)
Mike Miller <mtmiller@octave.org>
parents:
27011
diff
changeset
|
757 // The value to return when wait is false and no input is ready. |
7894624afc47
Fix pause() with no arguments called on Windows (bug #55943)
Mike Miller <mtmiller@octave.org>
parents:
27011
diff
changeset
|
758 static constexpr int eof = std::istream::traits_type::eof (); |
7894624afc47
Fix pause() with no arguments called on Windows (bug #55943)
Mike Miller <mtmiller@octave.org>
parents:
27011
diff
changeset
|
759 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
760 int c; |
20786
a8ee668e7fd7
Fix kbhit and pause on Windows systems.
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
761 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
762 if (wait) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
763 c = _getch (); |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
764 else |
27045
7894624afc47
Fix pause() with no arguments called on Windows (bug #55943)
Mike Miller <mtmiller@octave.org>
parents:
27011
diff
changeset
|
765 c = (! _kbhit ()) ? eof : _getch (); |
20786
a8ee668e7fd7
Fix kbhit and pause on Windows systems.
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
766 |
4067 | 767 #else |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
768 raw_mode (true, wait); |
3658 | 769 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
770 // Get current handler. |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
771 interrupt_handler saved_interrupt_handler |
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
772 = ignore_interrupts (); |
5770 | 773 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
774 // Restore it, disabling system call restarts (if possible) so the |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
775 // read can be interrupted. |
5770 | 776 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
777 set_interrupt_handler (saved_interrupt_handler, false); |
5770 | 778 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
779 int c = std::cin.get (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
780 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
781 if (std::cin.fail () || std::cin.eof ()) |
27011
c3716220d5b9
fix pause and kbhit with glibc 2.28 end-of-file state behavior (bug #55029)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
782 { |
c3716220d5b9
fix pause and kbhit with glibc 2.28 end-of-file state behavior (bug #55029)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
783 std::cin.clear (); |
c3716220d5b9
fix pause and kbhit with glibc 2.28 end-of-file state behavior (bug #55029)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
784 clearerr (stdin); |
c3716220d5b9
fix pause and kbhit with glibc 2.28 end-of-file state behavior (bug #55029)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
785 } |
3658 | 786 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
787 // Restore it, enabling system call restarts (if possible). |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
788 set_interrupt_handler (saved_interrupt_handler, true); |
5770 | 789 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
790 raw_mode (false, true); |
4067 | 791 #endif |
3658 | 792 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
793 return c; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
794 } |
529 | 795 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
796 std::string get_P_tmpdir (void) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
797 { |
21979
d04da18a407a
use OCTAVE_USE_WINDOWS_API more consistently
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
798 #if defined (OCTAVE_USE_WINDOWS_API) |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
799 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
800 std::string retval; |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
801 |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
802 #if defined (P_tmpdir) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
803 retval = P_tmpdir; |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
804 #endif |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
805 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
806 // Apparently some versions of MinGW and MSVC either don't define |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
807 // P_tmpdir, or they define it to a single backslash, neither of which |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
808 // is particularly helpful. |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
809 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
810 if (retval.empty () || retval == R"(\)") |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
811 { |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
812 retval = sys::env::getenv ("TEMP"); |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
813 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
814 if (retval.empty ()) |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
815 retval = sys::env::getenv ("TMP"); |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
816 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
817 if (retval.empty ()) |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
818 retval = R"(c:\temp)"; |
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
819 } |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
820 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
821 return retval; |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
822 |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
823 #elif defined (P_tmpdir) |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
824 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
825 return P_tmpdir; |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
826 |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
827 #else |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
828 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
829 return "/tmp"; |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
830 |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
831 #endif |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
832 } |
12228
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
833 } |
0f70c5db58c3
try to get better value than \ for P_tmpdir on Windows systems
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
834 |
1957 | 835 DEFUN (clc, , , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
836 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
837 @deftypefn {} {} clc () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
838 @deftypefnx {} {} home () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
839 Clear the terminal screen and move the cursor to the upper left corner. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
840 @end deftypefn */) |
529 | 841 { |
16537
106a38d7b396
optionall disable redisplay in command editor clear screen function
John W. Eaton <jwe@octave.org>
parents:
16404
diff
changeset
|
842 bool skip_redisplay = true; |
106a38d7b396
optionall disable redisplay in command editor clear screen function
John W. Eaton <jwe@octave.org>
parents:
16404
diff
changeset
|
843 |
21748
176536b15d68
use namespace for command_editor and command_history classes
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
844 octave::command_editor::clear_screen (skip_redisplay); |
529 | 845 |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
846 return ovl (); |
529 | 847 } |
848 | |
549 | 849 DEFALIAS (home, clc); |
850 | |
1957 | 851 DEFUN (getenv, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
852 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
853 @deftypefn {} {} getenv (@var{var}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
854 Return the value of the environment variable @var{var}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
855 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
856 For example, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
857 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
858 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
859 getenv ("PATH") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
860 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
861 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
862 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
863 returns a string containing the value of your path. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
864 @seealso{setenv, unsetenv} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
865 @end deftypefn */) |
529 | 866 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20799
diff
changeset
|
867 if (args.length () != 1) |
5823 | 868 print_usage (); |
529 | 869 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
870 std::string name = args(0).string_value (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
871 |
21732
6a1eded90355
use namespace for system env class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
872 return ovl (octave::sys::env::getenv (name)); |
529 | 873 } |
874 | |
19167
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
875 /* |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
876 %!assert (ischar (getenv ("OCTAVE_HOME"))) |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
877 */ |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
878 |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
879 DEFUN (setenv, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
880 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
881 @deftypefn {} {} setenv (@var{var}, @var{value}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
882 @deftypefnx {} {} setenv (@var{var}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
883 @deftypefnx {} {} putenv (@dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
884 Set the value of the environment variable @var{var} to @var{value}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
885 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
886 If no @var{value} is specified then the variable will be assigned the null |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
887 string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
888 @seealso{unsetenv, getenv} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
889 @end deftypefn */) |
1706 | 890 { |
891 int nargin = args.length (); | |
892 | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
893 if (nargin < 1 || nargin > 2) |
5823 | 894 print_usage (); |
1706 | 895 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
896 std::string var = args(0).xstring_value ("setenv: VAR must be a string"); |
1706 | 897 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
898 std::string val = (nargin == 2 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
899 ? args(1).xstring_value ("setenv: VALUE must be a string") |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
20990
diff
changeset
|
900 : ""); |
20582
ba2b07c13913
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
901 |
21732
6a1eded90355
use namespace for system env class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
902 octave::sys::env::putenv (var, val); |
1706 | 903 |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
904 return ovl (); |
1706 | 905 } |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
906 |
19167
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
907 DEFALIAS (putenv, setenv); |
1706 | 908 |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
909 /* |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
910 %!test |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
911 %! setenv ("dummy_variable_that_cannot_matter", "foobar"); |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
912 %! assert (getenv ("dummy_variable_that_cannot_matter"), "foobar"); |
19167
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
913 %! unsetenv ("dummy_variable_that_cannot_matter"); |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
914 %! assert (getenv ("dummy_variable_that_cannot_matter"), ""); |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
915 */ |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
916 |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
917 DEFUN (unsetenv, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
918 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
919 @deftypefn {} {@var{status} =} unsetenv (@var{var}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
920 Delete the environment variable @var{var}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
921 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
922 Return 0 if the variable was deleted, or did not exist, and -1 if an error |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
923 occurred. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
924 @seealso{setenv, getenv} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
925 @end deftypefn */) |
19167
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
926 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20799
diff
changeset
|
927 if (args.length () != 1) |
19167
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
928 print_usage (); |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
929 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
930 std::string tmp = args(0).string_value (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
931 |
25916
3f2282954600
Support non-ASCII characters in environment variables on Windows (bug #53922).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25714
diff
changeset
|
932 return ovl (octave::sys::unsetenv_wrapper (tmp)); |
19167
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
933 } |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
934 |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
935 /* |
6f0290863d50
Add new function unsetenv from gnulib to Octave.
Rik <rik@octave.org>
parents:
18674
diff
changeset
|
936 ## Test for unsetenv is in setenv test |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
937 */ |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
938 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
939 #if defined (OCTAVE_USE_WINDOWS_API) |
24710
a979bb895b64
avoid reinterpret_cast on function pointer in previous change
John W. Eaton <jwe@octave.org>
parents:
24709
diff
changeset
|
940 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
941 namespace octave |
24710
a979bb895b64
avoid reinterpret_cast on function pointer in previous change
John W. Eaton <jwe@octave.org>
parents:
24709
diff
changeset
|
942 { |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
943 static void |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
944 reg_close_key_wrapper (HKEY key) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
945 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
946 RegCloseKey (key); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
947 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
948 |
27126
3d9e72cac668
allow Windows build to work again
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
949 // This function is also used in ov-java.cc, so don't declare static. |
3d9e72cac668
allow Windows build to work again
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
950 // Maybe the functions that use it should be here instead? |
3d9e72cac668
allow Windows build to work again
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
951 |
3d9e72cac668
allow Windows build to work again
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
952 LONG |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
953 get_regkey_value (HKEY h_rootkey, const std::string subkey, |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
954 const std::string name, octave_value& value) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
955 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
956 LONG result; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
957 HKEY h_subkey; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
958 |
28175
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
959 std::wstring wsubkey = sys::u8_to_wstring (subkey); |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
960 result = RegOpenKeyExW (h_rootkey, wsubkey.c_str (), 0, KEY_READ, |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
961 &h_subkey); |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
962 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
963 if (result != ERROR_SUCCESS) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
964 return result; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
965 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
966 unwind_action restore_keys ([=] () { reg_close_key_wrapper (h_subkey); }); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
967 |
28175
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
968 std::wstring wname = sys::u8_to_wstring (name); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
969 DWORD length = 0; |
28175
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
970 result = RegQueryValueExW (h_subkey, wname.c_str (), nullptr, nullptr, |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
971 nullptr, &length); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
972 if (result != ERROR_SUCCESS) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
973 return result; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
974 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
975 DWORD type = 0; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
976 OCTAVE_LOCAL_BUFFER (BYTE, data, length); |
28175
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
977 result = RegQueryValueExW (h_subkey, wname.c_str (), nullptr, &type, |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
978 data, &length); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
979 if (result != ERROR_SUCCESS) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
980 return result; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
981 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
982 if (type == REG_DWORD) |
27421 | 983 value = octave_int32 (*(reinterpret_cast<DWORD *> (data))); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
984 else if (type == REG_SZ || type == REG_EXPAND_SZ) |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
27143
diff
changeset
|
985 value = string_vector (sys::u8_from_wstring (reinterpret_cast<wchar_t *> (data))); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
986 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
987 return result; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
988 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
989 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
990 static LONG |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
991 get_regkey_names (HKEY h_rootkey, const std::string subkey, |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
992 std::list<std::string> &fields) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
993 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
994 LONG retval; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
995 HKEY h_subkey; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
996 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
997 fields.clear (); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
998 |
28175
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
999 std::wstring wsubkey = sys::u8_to_wstring (subkey); |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
1000 retval = RegOpenKeyExW (h_rootkey, wsubkey.c_str (), 0, KEY_READ, |
b895daca20e2
Avoid potential lifetime issues with temporary std::wstring objects.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27932
diff
changeset
|
1001 &h_subkey); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1002 if (retval != ERROR_SUCCESS) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1003 return retval; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1004 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1005 DWORD idx = 0; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1006 const int MAX_VALUE_NAME_SIZE = 32766; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1007 wchar_t value_name[MAX_VALUE_NAME_SIZE+1]; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1008 DWORD value_name_size = MAX_VALUE_NAME_SIZE; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1009 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1010 while (true) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1011 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1012 retval = RegEnumValueW (h_subkey, idx, value_name, &value_name_size, |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1013 nullptr, nullptr, nullptr, nullptr); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1014 if (retval != ERROR_SUCCESS) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1015 break; |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
1016 fields.push_back (sys::u8_from_wstring (value_name)); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1017 value_name_size = MAX_VALUE_NAME_SIZE; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1018 idx++; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1019 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1020 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1021 if (retval == ERROR_NO_MORE_ITEMS) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1022 retval = ERROR_SUCCESS; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1023 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1024 RegCloseKey (h_subkey); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1025 |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1026 return retval; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1027 } |
24710
a979bb895b64
avoid reinterpret_cast on function pointer in previous change
John W. Eaton <jwe@octave.org>
parents:
24709
diff
changeset
|
1028 } |
a979bb895b64
avoid reinterpret_cast on function pointer in previous change
John W. Eaton <jwe@octave.org>
parents:
24709
diff
changeset
|
1029 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1030 #endif |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1031 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1032 DEFUN (winqueryreg, args, , |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1033 doc: /* -*- texinfo -*- |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1034 @deftypefn {} {@var{value} =} winqueryreg (@var{rootkey}, @var{subkey}, @var{valuename}) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1035 @deftypefnx {} {@var{value} =} winqueryreg (@var{rootkey}, @var{subkey}) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1036 @deftypefnx {} {@var{names} =} winqueryreg (@code{"name"}, @var{rootkey}, @var{subkey}) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1037 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1038 Query names or value from the Windows registry. |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1039 |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1040 On Windows, return the value of the registry key @var{subkey} from the root key |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1041 @var{rootkey}. You can specify the name of the queried registry value with the |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1042 optional argument @var{valuename}. Otherwise, if called with only two |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1043 arguments or @var{valuename} is empty, then the default value of @var{subkey} |
25003
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1044 is returned. If the registry value is of type @nospell{@qcode{"REG_DWORD"}} |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1045 then @var{value} is of class int32. If the value is of the type |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1046 @nospell{@qcode{"REG_SZ"}} or @nospell{@qcode{"REG_EXPAND_SZ"}} a string is |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1047 returned. |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1048 |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1049 If the first argument is @qcode{"name"}, a cell array of strings with the names |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1050 of the values at that key is returned. |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1051 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1052 The variable @var{rootkey} must be a string with a valid root key identifier: |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1053 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1054 @table @asis |
25003
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1055 @item @nospell{HKCR} |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1056 @itemx @nospell{HKEY_CLASSES_ROOT} |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1057 |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1058 @item @nospell{HKEY_CURRENT_CONFIG} |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1059 |
25003
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1060 @item @nospell{HKCU} |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1061 @itemx @nospell{HKEY_CURRENT_USER} |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1062 |
25003
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1063 @item @nospell{HKLM} |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1064 @itemx @nospell{HKEY_LOCAL_MACHINE} |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1065 |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1066 |
25003
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1067 @item @nospell{HKU} |
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1068 @itemx @nospell{HKEY_USERS} |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1069 |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1070 |
25003
2365c2661b3c
doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24720
diff
changeset
|
1071 @item @nospell{HKEY_PERFORMANCE_DATA} |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1072 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1073 @end table |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1074 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1075 Examples: |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1076 |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28930
diff
changeset
|
1077 Get a list of value names at the key |
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28930
diff
changeset
|
1078 @nospell{@qcode{'HKCU@backslashchar{}Environment'}}: |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1079 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1080 @example |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1081 @group |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1082 @var{valuenames} = winqueryreg ("name", "HKEY_CURRENT_USER", ... |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1083 "Environment"); |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1084 @end group |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1085 @end example |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1086 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1087 For each @var{valuenames}, display the value: |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1088 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1089 @example |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1090 @group |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1091 for @var{k} = 1:numel (@var{valuenames}) |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1092 @var{val} = winqueryreg ("HKEY_CURRENT_USER", "Environment", ... |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1093 @var{valuenames}@{@var{k}@}); |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1094 @var{str} = sprintf ("%s = %s", @var{valuenames}@{@var{k}@}, num2str (@var{val})); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1095 disp (@var{str}); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1096 endfor |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1097 @end group |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1098 @end example |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1099 |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1100 On non-Windows platforms this function fails with an error. |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1101 @end deftypefn */) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1102 { |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1103 #if defined (OCTAVE_USE_WINDOWS_API) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1104 if ((args.length () < 2) || (args.length () > 3)) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1105 print_usage (); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1106 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1107 // Input check |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1108 std::string rootkey_name |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1109 = args(0).xstring_value ("winqueryreg: the first argument must be 'name' " |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1110 "or a valid ROOTKEY identifier"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1111 std::string subkey_name = ""; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1112 std::string value_name = ""; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1113 bool get_names = false; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1114 if (rootkey_name.compare ("name") == 0) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1115 { |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1116 if (args.length () < 3) |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1117 error ("winqueryreg: if the first argument is 'name', " |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
1118 "ROOTKEY and SUBKEY must be given"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1119 get_names = true; |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1120 rootkey_name |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1121 = args(1).xstring_value ("winqueryreg: ROOTKEY must be a string"); |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1122 subkey_name |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1123 = args(2).xstring_value ("winqueryreg: SUBKEY must be a string"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1124 } |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1125 else |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1126 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1127 subkey_name |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1128 = args(1).xstring_value ("winqueryreg: SUBKEY must be a string"); |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1129 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1130 if (args.length () == 3) |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1131 value_name |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1132 = args(2).xstring_value ("winqueryreg: VALUENAME must be a string"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1133 } |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1134 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1135 // Get rootkey handle |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1136 HKEY h_rootkey; |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1137 if (rootkey_name == "HKEY_CLASSES_ROOT" || rootkey_name == "HKCR") |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1138 h_rootkey = HKEY_CLASSES_ROOT; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1139 else if (rootkey_name == "HKEY_CURRENT_CONFIG") |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1140 h_rootkey = HKEY_CURRENT_CONFIG; |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1141 else if (rootkey_name == "HKEY_CURRENT_USER" || rootkey_name == "HKCU") |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1142 h_rootkey = HKEY_CURRENT_USER; |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1143 else if (rootkey_name == "HKEY_LOCAL_MACHINE" || rootkey_name == "HKLM") |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1144 h_rootkey = HKEY_LOCAL_MACHINE; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1145 else if (rootkey_name == "HKEY_PERFORMANCE_DATA") |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1146 h_rootkey = HKEY_PERFORMANCE_DATA; |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1147 else if (rootkey_name == "HKEY_USERS" || rootkey_name == "HKU") |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1148 h_rootkey = HKEY_USERS; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1149 else |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1150 error ("winqueryreg: ROOTKEY is not a valid root key identifier"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1151 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1152 if (get_names) |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1153 { |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1154 std::list<std::string> fields; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1155 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1156 LONG retval = octave::get_regkey_names (h_rootkey, subkey_name, fields); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1157 if (retval != ERROR_SUCCESS) |
26162
ef1ef6364a6a
Silence compiler warnings about incorrect format specifiers cross-compiling (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26046
diff
changeset
|
1158 error ("winqueryreg: error %ld reading names from registry", retval); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1159 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1160 Cell fieldnames (dim_vector (1, fields.size ())); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1161 size_t i; |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1162 std::list<std::string>::const_iterator it; |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1163 for (i = 0, it = fields.begin (); it != fields.end (); ++it, ++i) |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1164 fieldnames(i) = *it; |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1165 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1166 return ovl (fieldnames); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1167 } |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1168 else |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1169 { |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1170 octave_value key_val; |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1171 LONG retval = octave::get_regkey_value (h_rootkey, subkey_name, |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27046
diff
changeset
|
1172 value_name, key_val); |
24720
48f22c5b22aa
winqueryreg: Fix error on Windows XP (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24714
diff
changeset
|
1173 if (retval == ERROR_FILE_NOT_FOUND) |
28905
89a425f2c202
maint: Use Octave convention that error() messages don't end with a period.
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
1174 error ("winqueryreg: no value found for '%s' at %s\\%s", |
24720
48f22c5b22aa
winqueryreg: Fix error on Windows XP (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24714
diff
changeset
|
1175 value_name.c_str (), rootkey_name.c_str (), |
48f22c5b22aa
winqueryreg: Fix error on Windows XP (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24714
diff
changeset
|
1176 subkey_name.c_str ()); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1177 if (retval != ERROR_SUCCESS) |
26162
ef1ef6364a6a
Silence compiler warnings about incorrect format specifiers cross-compiling (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26046
diff
changeset
|
1178 error ("winqueryreg: error %ld reading the specified key", retval); |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1179 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1180 return ovl (key_val); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1181 } |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1182 #else |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1183 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1184 octave_unused_parameter (args); |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1185 |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1186 error ("winqueryreg: function is only supported on Windows platforms"); |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1187 |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1188 #endif |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1189 } |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1190 |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1191 /* |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1192 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1193 %! assert (ischar (winqueryreg ("HKEY_LOCAL_MACHINE", |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1194 %! 'SOFTWARE\Microsoft\Windows\CurrentVersion', |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1195 %! "ProgramFilesDir"))); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1196 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1197 %! assert (isa (winqueryreg ("HKEY_LOCAL_MACHINE", |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1198 %! 'SYSTEM\CurrentControlSet\Control\FileSystem', |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1199 %! "Win31FileSystem"), "int32")); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1200 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1201 %! assert (iscellstr (winqueryreg ("name", "HKEY_LOCAL_MACHINE", |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1202 %! 'SOFTWARE\Microsoft\Windows\CurrentVersion'))); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1203 %!testif ; ispc () |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1204 %! fail ('winqueryreg (1, ''SOFTWARE\Microsoft\Windows\CurrentVersion'')', |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1205 %! "first argument must be 'name' or a valid ROOTKEY identifier"); |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1206 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1207 %! fail ('winqueryreg ("HKEY_LOCAL_MACHINE", 1)', "SUBKEY must be a string"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1208 %!testif ; ispc () |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1209 %! fail (['winqueryreg ("HKEY_LOCAL_MACHINE", ', ... |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1210 %! '''SOFTWARE\Microsoft\Windows\CurrentVersion'', 1)'], |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1211 %! "VALUENAME must be a string"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1212 %!testif ; ispc () |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1213 %! fail (['winqueryreg ("FOO", ', ... |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1214 %! '''SOFTWARE\Microsoft\Windows\CurrentVersion'')'], |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1215 %! "ROOTKEY is not a valid root key identifier"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1216 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1217 %! fail ('winqueryreg ("HKEY_LOCAL_MACHINE", ''FOO\bar'')', |
24720
48f22c5b22aa
winqueryreg: Fix error on Windows XP (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24714
diff
changeset
|
1218 %! "no value found for"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1219 %!testif ; ispc () |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1220 %! fail (['winqueryreg ("HKEY_LOCAL_MACHINE", ', ... |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1221 %! '''SOFTWARE\Microsoft\Windows\CurrentVersion'', "foo")'], |
24720
48f22c5b22aa
winqueryreg: Fix error on Windows XP (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24714
diff
changeset
|
1222 %! "no value found for"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1223 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1224 %! fail ('winqueryreg ("name", "HKEY_LOCAL_MACHINE")', |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1225 %! "if the first argument is 'name', ROOTKEY and SUBKEY must be given"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1226 %!testif ; ispc () |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1227 %! fail (['winqueryreg ("name", 1, ', ... |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1228 %! '''SOFTWARE\Microsoft\Windows\CurrentVersion'')'], |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1229 %! "ROOTKEY must be a string"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1230 %!testif ; ispc () |
24665
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1231 %! fail ('winqueryreg ("name", "HKEY_LOCAL_MACHINE", 1)', |
4a9793818fca
Use Octave coding conventions in cset a829062fdea4.
Rik <rik@octave.org>
parents:
24664
diff
changeset
|
1232 %! "SUBKEY must be a string"); |
24664
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1233 */ |
a829062fdea4
Add function "winqueryreg" (bug #52935).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
1234 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1235 // FIXME: perhaps kbhit should also be able to print a prompt? |
3372 | 1236 |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
1237 DEFMETHOD (kbhit, interp, args, , |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
1238 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1239 @deftypefn {} {} kbhit () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1240 @deftypefnx {} {} kbhit (1) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1241 Read a single keystroke from the keyboard. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1242 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1243 If called with an argument, don't wait for a keypress. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1244 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1245 For example, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1246 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1247 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1248 x = kbhit (); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1249 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1250 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1251 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1252 will set @var{x} to the next character typed at the keyboard as soon as |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1253 it is typed. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1254 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1255 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1256 x = kbhit (1); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1257 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1258 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1259 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1260 is identical to the above example, but doesn't wait for a keypress, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1261 returning the empty string if no key is available. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1262 @seealso{input, pause} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1263 @end deftypefn */) |
529 | 1264 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1265 // FIXME: add timeout and default value args? |
529 | 1266 |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
1267 Fdrawnow (interp); |
6423 | 1268 |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
1269 int c = octave::kbhit (args.length () == 0); |
3657 | 1270 |
25311
10ec5795bd06
allow kbhit to work in command-line scripts (bug #53412)
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
1271 if (c == -1) |
10ec5795bd06
allow kbhit to work in command-line scripts (bug #53412)
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
1272 c = 0; |
16015 | 1273 |
25311
10ec5795bd06
allow kbhit to work in command-line scripts (bug #53412)
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
1274 char s[2] = { static_cast<char> (c), '\0' }; |
529 | 1275 |
25311
10ec5795bd06
allow kbhit to work in command-line scripts (bug #53412)
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
1276 return octave_value (s); |
529 | 1277 } |
1278 | |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1279 // State of the pause system |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1280 static bool Vpause_enabled = true; |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1281 |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
1282 DEFMETHOD (pause, interp, args, nargout, |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
1283 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1284 @deftypefn {} {} pause () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1285 @deftypefnx {} {} pause (@var{n}) |
26046
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1286 @deftypefnx {} {@var{old_state} =} pause ("on") |
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1287 @deftypefnx {} {@var{old_state} =} pause ("off") |
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1288 @deftypefnx {} {@var{old_state} =} pause ("query") |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1289 Suspend the execution of the program or change the state of the pause function. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1290 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1291 If invoked without an input arguments then the program is suspended until a |
26046
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1292 character is typed. If argument @var{n} is a positive real value, it indicates |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1293 the number of seconds the program shall be suspended, for example: |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1294 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1295 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1296 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1297 tic; pause (0.05); toc |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1298 @print{} Elapsed time is 0.05039 seconds. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1299 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1300 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1301 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1302 The following example prints a message and then waits 5 seconds before |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1303 clearing the screen. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1304 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1305 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1306 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1307 disp ("wait please..."); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1308 pause (5); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1309 clc; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1310 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1311 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1312 |
26046
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1313 If invoked with a string argument @qcode{"on"}, @qcode{"off"}, or |
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1314 @qcode{"query"}, the state of the pause function is changed or queried. When |
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1315 the state is @qcode{"off"}, the pause function returns immediately. The |
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1316 optional return value contains the previous state of the pause function. In |
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1317 the following example pause is disabled locally: |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1318 |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1319 @example |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1320 @group |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1321 old_state = pause ("off"); |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1322 tic; pause (0.05); toc |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1323 @print{} Elapsed time is 3.00407e-05 seconds. |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1324 pause (old_state); |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1325 @end group |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1326 @end example |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1327 |
26046
ff0aa19333c9
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
26026
diff
changeset
|
1328 While the program is suspended Octave still handles figures painting and |
25961
f7b205562f1d
Allow graphics events to be processed while pause is active (bug #53729)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25916
diff
changeset
|
1329 graphics callbacks execution. |
f7b205562f1d
Allow graphics events to be processed while pause is active (bug #53729)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25916
diff
changeset
|
1330 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1331 @seealso{kbhit} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1332 @end deftypefn */) |
529 | 1333 { |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1334 octave_value_list retval; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1335 |
529 | 1336 int nargin = args.length (); |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1337 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
1338 if (nargin > 1) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
1339 print_usage (); |
529 | 1340 |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1341 if (nargin == 1 && args(0).is_string ()) |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1342 { |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1343 bool saved_state = Vpause_enabled; |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1344 std::string state = args(0).string_value (); |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1345 |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1346 if (state == "on") |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1347 Vpause_enabled = true; |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1348 else if (state == "off") |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1349 Vpause_enabled = false; |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1350 else if (state == "query") |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1351 ;// Do nothing |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1352 else |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28371
diff
changeset
|
1353 error (R"(pause: first argument must be "on", "off", or "query")"); |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1354 |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1355 if (nargout > 0 || state == "query") |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1356 retval.append (saved_state ? "on" : "off"); |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1357 } |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1358 else if (Vpause_enabled) |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1359 { |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1360 double dval; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1361 |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1362 if (nargin == 0) |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1363 dval = octave_Inf; |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1364 else |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1365 dval = args(0).xdouble_value ("pause: N must be a scalar real value"); |
6419 | 1366 |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1367 if (octave::math::isnan (dval)) |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1368 warning ("pause: NaN is an invalid delay"); |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1369 else |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1370 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
1371 Fdrawnow (interp); |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1372 |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1373 octave::sleep (dval, true); |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1374 } |
3234 | 1375 } |
26026
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1376 |
511295347a27
Allow pause state to be changed (bug #53723)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25961
diff
changeset
|
1377 return retval; |
2630 | 1378 } |
1379 | |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1380 /* |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1381 %!test |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1382 %! pause (1); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14160
diff
changeset
|
1383 |
28930
2883b3d08b7e
maint: Remove unnecessary parentheses bracketing %!error BIST tests.
Rik <rik@octave.org>
parents:
28905
diff
changeset
|
1384 %!error pause (1, 2) |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1385 */ |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1386 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1387 // FIXME: maybe this should only return 1 if IEEE floating |
862 | 1388 // point functions really work. |
1389 | |
1957 | 1390 DEFUN (isieee, , , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1391 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1392 @deftypefn {} {} isieee () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1393 Return true if your computer @emph{claims} to conform to the IEEE standard |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1394 for floating point calculations. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1395 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1396 No actual tests are performed. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1397 @end deftypefn */) |
862 | 1398 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1399 octave::mach_info::float_format flt_fmt |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1400 = octave::mach_info::native_float_format (); |
2317 | 1401 |
21739
c4ab2e54f100
use namespace for oct_mach_info class
John W. Eaton <jwe@octave.org>
parents:
21736
diff
changeset
|
1402 return ovl (flt_fmt == octave::mach_info::flt_fmt_ieee_little_endian |
c4ab2e54f100
use namespace for oct_mach_info class
John W. Eaton <jwe@octave.org>
parents:
21736
diff
changeset
|
1403 || flt_fmt == octave::mach_info::flt_fmt_ieee_big_endian); |
862 | 1404 } |
1405 | |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1406 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14160
diff
changeset
|
1407 %!assert (islogical (isieee ())) |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1408 */ |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1409 |
4600 | 1410 DEFUN (native_float_format, , , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1411 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1412 @deftypefn {} {} native_float_format () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1413 Return the native floating point format as a string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1414 @end deftypefn */) |
4600 | 1415 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1416 octave::mach_info::float_format flt_fmt |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27276
diff
changeset
|
1417 = octave::mach_info::native_float_format (); |
4600 | 1418 |
21739
c4ab2e54f100
use namespace for oct_mach_info class
John W. Eaton <jwe@octave.org>
parents:
21736
diff
changeset
|
1419 return ovl (octave::mach_info::float_format_as_string (flt_fmt)); |
4600 | 1420 } |
1421 | |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1422 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14160
diff
changeset
|
1423 %!assert (ischar (native_float_format ())) |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1424 */ |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1425 |
1957 | 1426 DEFUN (tilde_expand, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1427 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1428 @deftypefn {} {} tilde_expand (@var{string}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1429 @deftypefnx {} {} tilde_expand (@var{cellstr}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1430 Perform tilde expansion on @var{string}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1431 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1432 If @var{string} begins with a tilde character, (@samp{~}), all of the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1433 characters preceding the first slash (or all characters, if there is no |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1434 slash) are treated as a possible user name, and the tilde and the following |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1435 characters up to the slash are replaced by the home directory of the named |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1436 user. If the tilde is followed immediately by a slash, the tilde is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1437 replaced by the home directory of the user running Octave. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1438 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1439 If the input is a cell array of strings @var{cellstr} then tilde expansion |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1440 is performed on each string element. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1441 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1442 Examples: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1443 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1444 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1445 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1446 tilde_expand ("~joeuser/bin") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1447 @result{} "/home/joeuser/bin" |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1448 tilde_expand ("~/bin") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1449 @result{} "/home/jwe/bin" |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1450 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1451 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1452 @end deftypefn */) |
1750 | 1453 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20799
diff
changeset
|
1454 if (args.length () != 1) |
5823 | 1455 print_usage (); |
1750 | 1456 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
1457 octave_value arg = args(0); |
6116 | 1458 |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20961
diff
changeset
|
1459 string_vector sv = arg.xstring_vector_value ("tilde_expand: argument must be char or cellstr object"); |
6116 | 1460 |
21733
cb0fdd941d84
use namespace for system file_ops class
John W. Eaton <jwe@octave.org>
parents:
21732
diff
changeset
|
1461 sv = octave::sys::file_ops::tilde_expand (sv); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20789
diff
changeset
|
1462 |
23575
e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents:
23459
diff
changeset
|
1463 if (arg.iscellstr ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1464 return ovl (Cell (arg.dims (), sv)); |
1750 | 1465 else |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1466 return ovl (sv); |
1750 | 1467 } |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1468 |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1469 /* |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1470 %!test |
20016
47d420d769ba
* sysdep.cc (Fget_home_directory): New function.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
1471 %! home = get_home_directory (); |
20064
ab7582167810
Fix failing BIST test for tilde_expand() on Windows (bug #44796).
Rik <rik@octave.org>
parents:
20024
diff
changeset
|
1472 %! assert (tilde_expand ("~/foobar"), [home "/foobar"]); |
12825
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1473 %! assert (tilde_expand ("/foo/bar"), "/foo/bar"); |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1474 %! assert (tilde_expand ("foo/bar"), "foo/bar"); |
a1dcb854a4f9
codesprint: new tests for sysdep.cc functions
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1475 */ |
17851
af685269e06c
avoid symbol conflicts in display.cc
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
1476 |
20016
47d420d769ba
* sysdep.cc (Fget_home_directory): New function.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
1477 DEFUN (get_home_directory, , , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1478 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1479 @deftypefn {} {@var{homedir} =} get_home_directory () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1480 Return the current home directory. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1481 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1482 On most systems, this is equivalent to @code{getenv ("HOME")}. On Windows |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1483 systems, if the environment variable @env{HOME} is not set then it is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1484 equivalent to |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1485 @code{fullfile (getenv ("HOMEDRIVE"), getenv ("HOMEPATH"))} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1486 @seealso{getenv} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21949
diff
changeset
|
1487 @end deftypefn */) |
20016
47d420d769ba
* sysdep.cc (Fget_home_directory): New function.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
1488 { |
21732
6a1eded90355
use namespace for system env class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1489 return ovl (octave::sys::env::get_home_directory ()); |
20016
47d420d769ba
* sysdep.cc (Fget_home_directory): New function.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
1490 } |
47d420d769ba
* sysdep.cc (Fget_home_directory): New function.
John W. Eaton <jwe@octave.org>
parents:
19861
diff
changeset
|
1491 |
20024
cf9b94a89620
Document get_home_directory in Octave manual and NEWS file.
Rik <rik@octave.org>
parents:
20016
diff
changeset
|
1492 /* |
cf9b94a89620
Document get_home_directory in Octave manual and NEWS file.
Rik <rik@octave.org>
parents:
20016
diff
changeset
|
1493 %!test |
cf9b94a89620
Document get_home_directory in Octave manual and NEWS file.
Rik <rik@octave.org>
parents:
20016
diff
changeset
|
1494 %! if (! ispc ()) |
20181
aa36fb998a4d
maint: Remove unnecessary whitespace at end of lines.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
1495 %! assert (get_home_directory (), getenv ("HOME")); |
20024
cf9b94a89620
Document get_home_directory in Octave manual and NEWS file.
Rik <rik@octave.org>
parents:
20016
diff
changeset
|
1496 %! endif |
cf9b94a89620
Document get_home_directory in Octave manual and NEWS file.
Rik <rik@octave.org>
parents:
20016
diff
changeset
|
1497 */ |
24714
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1498 |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1499 DEFUN (__blas_version__, , , |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1500 doc: /* -*- texinfo -*- |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1501 @deftypefn {} {} __blas_version__ () |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1502 Undocumented internal function. |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1503 @end deftypefn */) |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1504 { |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1505 return ovl (octave::sys::blas_version ()); |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1506 } |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1507 |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1508 DEFUN (__lapack_version__, , , |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1509 doc: /* -*- texinfo -*- |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1510 @deftypefn {} {} __lapack_version__ () |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1511 Undocumented internal function. |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1512 @end deftypefn */) |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1513 { |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1514 return ovl (octave::sys::lapack_version ()); |
d2c727a438ab
Add "-blas" and "-lapack" options to "version" (bug #45659).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24710
diff
changeset
|
1515 } |