NODE *lreadchars(NODE *args) { unsigned int c, i; char *strhead, *strptr; NODETYPES type = STRING; c = (unsigned int)getint(pos_int_arg(args)); if (stopping_flag == THROWING) return UNBOUND; charmode_on(); input_blocking++; #ifndef TIOCSTI if (!setjmp(iblk_buf)) #endif { strhead = malloc((size_t)(c + 2)); strptr = strhead + 1; fread(strptr, 1, (int)c, readstream); setstrrefcnt(strhead, 0); } input_blocking = 0; #ifndef TIOCSTI if (stopping_flag == THROWING) return(UNBOUND); #endif if (feof(readstream)) { free(strhead); return(NIL); } for (i = 0; i < c; i++) if (getparity(strptr[i])) type = BACKSLASH_STRING; return(make_strnode(strptr, strhead, (int)c, type, strnzcpy)); }
NODE *lreadchar(NODE *args) { #ifdef WIN32 MSG msg; #endif /* WIN32 */ char c; if (readchar_lookahead_buf >= 0) { c = (char)readchar_lookahead_buf; readchar_lookahead_buf = -1; return(make_strnode((char *)&c, (struct string_block *)NULL, 1, (getparity(c) ? BACKSLASH_STRING : STRING), strnzcpy)); } charmode_on(); input_blocking++; #ifdef HAVE_WX if (interactive && readstream==stdin) { reading_char_now = 1; c = getFromWX(); reading_char_now = 0; } else c = (char)getc(readstream); #else #ifndef TIOCSTI if (!setjmp(iblk_buf)) #endif { #ifdef mac csetmode(C_RAW, stdin); while ((c = (char)getc(readstream)) == EOF && readstream == stdin); csetmode(C_ECHO, stdin); #else /* !mac */ #ifdef ibm if (interactive && readstream==stdin) #ifndef WIN32 c = (char)getch(); #else /* WIN32 */ { win32_update_text(); if (!char_avail) while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); if (char_avail) break; } c = buffered_char; char_avail = 0; } #endif /* WIN32 */ else
NODE *lkeyp() { long nc; #ifdef mac int c; #endif if (readstream == stdin && interactive) { charmode_on(); fflush(stdout); #ifdef __ZTC__ zflush(); #endif #if defined(mac) csetmode(C_RAW, stdin); c = ungetc(getc(readstream), readstream); csetmode(C_ECHO, stdin); return(c == EOF ? False : True); #elif defined(ibm) return(kbhit() ? True : False); #else #ifdef FIONREAD ioctl(0,FIONREAD,(char *)(&nc)); #else ndprintf(stdout,"Can't KEYP, no FIONREAD on this system\n"); nc = 1; /* pretend there's a char so we don't loop */ #endif if (nc > 0) return(True); else return(False); #endif } ungetc(getc(readstream),readstream); if (feof(readstream)) return(True); else return(False); }
NODE *lreadchar() { char c; charmode_on(); input_blocking++; #ifndef TIOCSTI if (!setjmp(iblk_buf)) #endif #ifdef mac csetmode(C_RAW, stdin); while ((c = (char)getc(readstream)) == EOF && readstream == stdin); csetmode(C_ECHO, stdin); #else #ifdef ibm if (interactive && readstream==stdin) c = (char)getch(); else c = (char)getc(readstream); if (c == 17) { /* control-q */ to_pending = 0; err_logo(STOP_ERROR,NIL); } if (c == 23) { /* control-w */ logo_pause(); return(lreadchar()); } #else c = (char)getc(readstream); #endif #endif input_blocking = 0; if (feof(readstream)) { return(NIL); } return(make_strnode(&c, (char *)NULL, 1, (getparity(c) ? STRING : BACKSLASH_STRING), strnzcpy)); }
/* * This routine implements the 'print' command. It displays the data * buffer in hexadecimal. It is only useful for checking the disk for * a specific set of data (by reading it then printing it). */ int a_print() { int i, j, lines, nomore = 0; int c, one_line = 0; int tty_lines = get_tty_lines(); /* * If we are running out of command file, don't page the output. * Otherwise we are running with a user. Turn off echoing of * input characters so we can page the output. */ if (option_f || (!isatty(0)) || (!isatty(1))) nomore++; else { enter_critical(); echo_off(); charmode_on(); exit_critical(); } /* * Loop through the data buffer. */ lines = 0; for (i = 0; i < scan_size * SECSIZE / sizeof (int); i += 6) { /* * Print the data. */ for (j = 0; j < 6; j++) if (i + j < scan_size * SECSIZE / sizeof (int)) fmt_print("0x%08x ", *((int *)((int *)cur_buf + i + j))); fmt_print("\n"); lines++; /* * If we are paging and hit the end of a page, wait for * the user to hit either space-bar, "q", return, * or ctrl-C before going on. */ if (one_line || (!nomore && (lines % (tty_lines - 1) == 0))) { /* * Print until first screenfull */ if (lines < (tty_lines -1)) continue; /* * Get the next character. */ (void) printf("- hit space for more - "); c = getchar(); (void) printf("\015"); one_line = 0; /* * Handle display one line command (return key) */ if (c == '\012') { one_line++; } /* Handle Quit command */ if (c == 'q') { (void) printf( " \015"); goto PRINT_EXIT; } /* handle ^D */ if (c == '\004') fullabort(); } } /* * If we were doing paging, turn echoing back on. */ PRINT_EXIT: if (!nomore) { enter_critical(); charmode_off(); echo_on(); exit_critical(); } return (0); }