Mercurial > hg > octave-nkf
annotate scripts/strings/strcat.m @ 20376:196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
* libinterp/corefcn/strfns.cc (strvcat): return an empty string for an empty
argument list. Simply dropping the input checking, will return an empty
string. This makes it more consistent with cat(), vertcat, and horzcat()
functions, which return [] for this cases. It makes it easier to support
"strcat (cell{:})" when cell is empty.
* scripts/strings/cstrcat.m, scripts/strings/strcat.m: same as above. But
because [cellstr{:}] when cellstr is empty returns double ([]), we
specifically return "".
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Fri, 01 May 2015 16:21:39 +0100 |
parents | 4197fc428c7d |
children | 5212cda4ac0e |
rev | line source |
---|---|
19898
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19790
diff
changeset
|
1 ## Copyright (C) 1994-2015 John W. Eaton |
10032 | 2 ## Copyright (C) 2009 Jaroslav Hajek |
2313 | 3 ## |
4 ## This file is part of Octave. | |
5 ## | |
6 ## Octave is free software; you can redistribute it and/or modify it | |
7 ## under the terms of the GNU General Public License as published by | |
7016 | 8 ## the Free Software Foundation; either version 3 of the License, or (at |
9 ## your option) any later version. | |
2313 | 10 ## |
11 ## Octave is distributed in the hope that it will be useful, but | |
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 ## General Public License for more details. | |
15 ## | |
16 ## You should have received a copy of the GNU General Public License | |
7016 | 17 ## along with Octave; see the file COPYING. If not, see |
18 ## <http://www.gnu.org/licenses/>. | |
920 | 19 |
3361 | 20 ## -*- texinfo -*- |
21 ## @deftypefn {Function File} {} strcat (@var{s1}, @var{s2}, @dots{}) | |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
22 ## Return a string containing all the arguments concatenated |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
23 ## horizontally. If the arguments are cell strings, @code{strcat} |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
24 ## returns a cell string with the individual cells concatenated. |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
25 ## For numerical input, each element is converted to the |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
26 ## corresponding ASCII character. Trailing white space for any |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
27 ## character string input is eliminated before the strings are |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
28 ## concatenated. Note that cell string values do @strong{not} have |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
29 ## whitespace trimmed. |
14821
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
30 ## |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10037
diff
changeset
|
31 ## For example: |
3426 | 32 ## |
3361 | 33 ## @example |
34 ## @group | |
14821
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
35 ## strcat ("|", " leading space is preserved", "|") |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
36 ## @result{} | leading space is preserved| |
14821
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
37 ## @end group |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
38 ## @end example |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
39 ## |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
40 ## @example |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
41 ## @group |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
42 ## strcat ("|", "trailing space is eliminated ", "|") |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
43 ## @result{} |trailing space is eliminated| |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
44 ## @end group |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
45 ## @end example |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
46 ## |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
47 ## @example |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
48 ## @group |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
49 ## strcat ("homogeneous space |", " ", "| is also eliminated") |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
50 ## @result{} homogeneous space || is also eliminated |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
51 ## @end group |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
52 ## @end example |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
53 ## |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
54 ## @example |
aad7d7ee8e8a
Clarify doc string for strcat.
Ben Abbott <bpabbott@mac.com>
parents:
14363
diff
changeset
|
55 ## @group |
3361 | 56 ## s = [ "ab"; "cde" ]; |
57 ## strcat (s, s, s) | |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
58 ## @result{} |
17859
5e4cac8f4e43
strcat.m: Fix bad example in docstring (bug #40486).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
59 ## "ababab " |
3361 | 60 ## "cdecdecde" |
61 ## @end group | |
62 ## @end example | |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
63 ## |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
64 ## @example |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
65 ## @group |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
66 ## s = @{ "ab"; "cd " @}; |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
67 ## strcat (s, s, s) |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
68 ## @result{} |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
69 ## @{ |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
70 ## [1,1] = ababab |
19790
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
17859
diff
changeset
|
71 ## [2,1] = cd cd cd |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
72 ## @} |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
73 ## @end group |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
74 ## @end example |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
75 ## |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8143
diff
changeset
|
76 ## @seealso{cstrcat, char, strvcat} |
3361 | 77 ## @end deftypefn |
2697 | 78 |
2314 | 79 ## Author: jwe |
80 | |
6138 | 81 function st = strcat (varargin) |
920 | 82 |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
83 if (nargin == 0) |
20376
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
84 st = ""; |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
85 elseif (nargin == 1) |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
86 st = varargin{1}; |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
87 else |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
88 ## Convert to cells of strings |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
89 uo = "uniformoutput"; |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
90 reals = cellfun ("isreal", varargin); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
91 if (any (reals)) |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
92 varargin(reals) = cellfun ("char", varargin(reals), uo, false); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
93 endif |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
94 chars = cellfun ("isclass", varargin, "char"); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
95 allchar = all (chars); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
96 varargin(chars) = cellfun ("cellstr", varargin(chars), uo, false); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
97 if (! all (cellfun ("isclass", varargin, "cell"))) |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
98 error ("strcat: inputs must be strings or cells of strings"); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
99 endif |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
100 |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
101 ## We don't actually need to bring all cells to common size, because |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
102 ## cellfun can now expand scalar cells. |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
103 err = common_size (varargin{:}); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
104 |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
105 if (err) |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
106 error ("strcat: arguments must be the same size, or be scalars"); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
107 endif |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
108 |
17385
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
109 ## Cellfun handles everything for us. |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
110 st = cellfun ("horzcat", varargin{:}, uo, false); |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
111 |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
112 if (allchar) |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
113 ## If all inputs were strings, return strings. |
5ca5aff90ffd
strcat.m: Clarify in docstring that space isn't stripped from cell string inputs.
Rik <rik@octave.org>
parents:
17338
diff
changeset
|
114 st = char (st); |
7504
ddcf233d765b
detect cellstr args in strcat
John W. Eaton <jwe@octave.org>
parents:
7411
diff
changeset
|
115 endif |
920 | 116 endif |
117 | |
7504
ddcf233d765b
detect cellstr args in strcat
John W. Eaton <jwe@octave.org>
parents:
7411
diff
changeset
|
118 endfunction |
920 | 119 |
17338
1c89599167a6
maint: End m-files with 1 blank line.
Rik <rik@octave.org>
parents:
17281
diff
changeset
|
120 |
6138 | 121 ## test the dimensionality |
122 ## 1d | |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
123 %!assert (strcat ("ab ", "ab "), "abab") |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
124 %!assert (strcat ({"ab "}, "ab "), {"ab ab"}) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
125 %!assert (strcat ("ab ", {"ab "}), {"abab "}) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
126 %!assert (strcat ({"ab "}, {"ab "}), {"ab ab "}) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
127 %!assert (strcat ("", "ab"), "ab") |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
128 %!assert (strcat ("", {"ab"}, {""}), {"ab"}) |
6138 | 129 ## 2d |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
130 %!assert (strcat (["ab ";"cde"], ["ab ";"cde"]), ["abab ";"cdecde"]) |
7411 | 131 |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
132 ## test for deblanking implied trailing spaces of character input |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
133 %!assert (strcat ("foo", "bar"), "foobar") |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
134 %!assert (strcat (["a"; "bb"], ["foo"; "bar"]), ["afoo "; "bbbar"]) |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
135 |
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
136 ## test for mixing character and cell inputs |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
137 %!assert (strcat ("a", {"bc", "de"}, "f"), {"abcf", "adef"}) |
7411 | 138 |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
139 ## test for scalar strings with vector strings |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
140 %!assert (strcat (["a"; "b"], "c"), ["ac"; "bc"]) |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
141 |
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7504
diff
changeset
|
142 ## test with cells with strings of differing lengths |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
143 %!assert (all (strcmp (strcat ({"a", "bb"}, "ccc"), {"accc", "bbccc"}))) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14327
diff
changeset
|
144 %!assert (all (strcmp (strcat ("a", {"bb", "ccc"}), {"abb", "accc"}))) |
7411 | 145 |
14868
5d3a684236b0
maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents:
14821
diff
changeset
|
146 %!assert (strcat (1, 2), strcat (char (1), char (2))) |
5d3a684236b0
maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents:
14821
diff
changeset
|
147 %!assert (strcat ("", 2), strcat ([], char (2))) |
7411 | 148 |
20376
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
149 %!assert (strcat (), "") |
8143
3a4694d67dbb
strcat.m: Compatibility of non-char data
Ben Abbott <bpabbott@mac.com>
parents:
7813
diff
changeset
|
150 |