diff options
Diffstat (limited to 'src/fns.c')
| -rw-r--r-- | src/fns.c | 62 |
1 files changed, 62 insertions, 0 deletions
| @@ -5082,6 +5082,65 @@ If nil, use the current buffer." */ ) | |||
| 5082 | return make_digest_string (digest, SHA1_DIGEST_SIZE); | 5082 | return make_digest_string (digest, SHA1_DIGEST_SIZE); |
| 5083 | } | 5083 | } |
| 5084 | 5084 | ||
| 5085 | DEFUN ("external-standard-input-read-char",Fexternal_standard_input_read_char, Sexternal_standard_input_read_char, 0, 0, 0, | ||
| 5086 | doc: /* Read a single character from the system standard input. | ||
| 5087 | |||
| 5088 | Returns -1 if standard input is at the end.*/) | ||
| 5089 | (void) | ||
| 5090 | { | ||
| 5091 | int c; | ||
| 5092 | Lisp_Object val; | ||
| 5093 | |||
| 5094 | c = getchar(); | ||
| 5095 | XSETINT(val,c); | ||
| 5096 | |||
| 5097 | return val; | ||
| 5098 | } | ||
| 5099 | |||
| 5100 | DEFUN ("external-standard-input-read-line", Fexternal_standard_input_read_line, Sexternal_standard_input_read_line, 0, 0, 0, | ||
| 5101 | doc: /* Read a line from the system standard input.*/) | ||
| 5102 | (void) | ||
| 5103 | { | ||
| 5104 | ptrdiff_t size, len; | ||
| 5105 | char *line; | ||
| 5106 | Lisp_Object val; | ||
| 5107 | int c; | ||
| 5108 | |||
| 5109 | val = Qnil; | ||
| 5110 | size = 100; | ||
| 5111 | len = 0; | ||
| 5112 | line = xmalloc (size); | ||
| 5113 | |||
| 5114 | while ((c = getchar ()) != '\n' && c != '\r') | ||
| 5115 | { | ||
| 5116 | if (c == EOF) | ||
| 5117 | { | ||
| 5118 | if (errno != 0) | ||
| 5119 | break; | ||
| 5120 | } | ||
| 5121 | else | ||
| 5122 | { | ||
| 5123 | if (len == size) | ||
| 5124 | line = xpalloc (line, &size, 1, -1, sizeof *line); | ||
| 5125 | line[len++] = c; | ||
| 5126 | } | ||
| 5127 | } | ||
| 5128 | |||
| 5129 | if (len || c == '\n' || c == '\r') | ||
| 5130 | { | ||
| 5131 | val = make_string (line, len); | ||
| 5132 | xfree (line); | ||
| 5133 | } | ||
| 5134 | else | ||
| 5135 | { | ||
| 5136 | xfree (line); | ||
| 5137 | error ("Error reading from stdin"); | ||
| 5138 | } | ||
| 5139 | |||
| 5140 | return val; | ||
| 5141 | } | ||
| 5142 | |||
| 5143 | |||
| 5085 | 5144 | ||
| 5086 | void | 5145 | void |
| 5087 | syms_of_fns (void) | 5146 | syms_of_fns (void) |
| @@ -5249,4 +5308,7 @@ this variable. */); | |||
| 5249 | defsubr (&Ssecure_hash); | 5308 | defsubr (&Ssecure_hash); |
| 5250 | defsubr (&Sbuffer_hash); | 5309 | defsubr (&Sbuffer_hash); |
| 5251 | defsubr (&Slocale_info); | 5310 | defsubr (&Slocale_info); |
| 5311 | defsubr (&Sexternal_standard_input_read_char); | ||
| 5312 | defsubr (&Sexternal_standard_input_read_line); | ||
| 5313 | |||
| 5252 | } | 5314 | } |