-char* gets (char* s)
+/*****************************************************************************/
+/* Code */
+/*****************************************************************************/
+
+
+
+char* __fastcall__ gets (char* s)
{
+ register char* p = s;
int c;
- int i = 0;
-
- do {
-
- /* Get next character */
- if ((c = fgetc (stdin)) == EOF) {
- /* Error or EOF */
- s [i] = 0;
- if (stdin->f_flags & _FERROR) {
- /* ERROR */
- return 0;
- } else {
- /* EOF */
- if (i) {
- return s;
- } else {
- return 0;
- }
- }
- }
-
- /* One char more */
- s [i++] = c;
-
- } while (c != '\n');
-
- /* Replace newline by NUL */
- s [i-1] = '\0';
+ unsigned i = 0;
+
+ while (1) {
+
+ /* Get next character */
+ if ((c = fgetc (stdin)) == EOF) {
+ /* Error or EOF */
+ *p = '\0';
+ if (stdin->f_flags & _FERROR) {
+ /* ERROR */
+ return 0;
+ } else {
+ /* EOF */
+ if (i) {
+ return s;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ /* One char more. Newline ends the input */
+ if ((char) c == '\n') {
+ *p = '\0';
+ break;
+ } else {
+ *p = c;
+ ++p;
+ ++i;
+ }
+
+ }
/* Done */
return s;
+