diff --git a/Modules/cgen.py b/Modules/cgen.py index d6e9c9646fa..ea4626365d6 100644 --- a/Modules/cgen.py +++ b/Modules/cgen.py @@ -376,6 +376,11 @@ def mkobject(type, arg): return 'mknew' + type + 'object(' + arg + ')' +# Open optional file argument +if sys.argv[1:]: + sys.stdin = open(sys.argv[1], 'r') + + # Input line number lno = 0 diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index cc2e26a5a99..835c7dbfce0 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -181,13 +181,121 @@ strop_strip(self, args) } +#include + +static object * +strop_lower(self, args) + object *self; /* Not used */ + object *args; +{ + char *s; + int i, n; + object *new; + int changed; + + if (!getargs(args, "s#", &s, &n)) + return NULL; + new = newsizedstringobject(s, n); + if (new == NULL) + return NULL; + s = getstringvalue(new); + changed = 0; + for (i = 0; i < n; i++) { + char c = s[i]; + if (isupper(c)) { + changed = 1; + s[i] = tolower(c); + } + } + if (!changed) { + DECREF(new); + INCREF(args); + return args; + } + return new; +} + + +static object * +strop_upper(self, args) + object *self; /* Not used */ + object *args; +{ + char *s; + int i, n; + object *new; + int changed; + + if (!getargs(args, "s#", &s, &n)) + return NULL; + new = newsizedstringobject(s, n); + if (new == NULL) + return NULL; + s = getstringvalue(new); + changed = 0; + for (i = 0; i < n; i++) { + char c = s[i]; + if (islower(c)) { + changed = 1; + s[i] = toupper(c); + } + } + if (!changed) { + DECREF(new); + INCREF(args); + return args; + } + return new; +} + + +static object * +strop_swapcase(self, args) + object *self; /* Not used */ + object *args; +{ + char *s; + int i, n; + object *new; + int changed; + + if (!getargs(args, "s#", &s, &n)) + return NULL; + new = newsizedstringobject(s, n); + if (new == NULL) + return NULL; + s = getstringvalue(new); + changed = 0; + for (i = 0; i < n; i++) { + char c = s[i]; + if (islower(c)) { + changed = 1; + s[i] = toupper(c); + } + else if (isupper(c)) { + changed = 1; + s[i] = tolower(c); + } + } + if (!changed) { + DECREF(new); + INCREF(args); + return args; + } + return new; +} + + /* List of functions defined in the module */ static struct methodlist strop_methods[] = { {"index", strop_index}, + {"lower", strop_lower}, {"split", strop_split}, {"splitfields", strop_splitfields}, {"strip", strop_strip}, + {"swapcase", strop_swapcase}, + {"upper", strop_upper}, {NULL, NULL} /* sentinel */ };