📄 input.c
字号:
#include "define.h"
#define BUFFER_SIZE 4096
extern int read (int, unsigned char *, int);
static int bit_size; /* 记录最后一次读取的文件字符的个数 */
static unsigned char buffer[MAXLINE+1 + BUFSIZE+1]; /* 输入缓冲 */
int input_file_descr; /* 输入文件句柄描述 */
unsigned char *curr_ptr; /* 当前输入的字符的位置 */
char *filename; /* 当前输入文件的名字 */
unsigned char *last_ptr; /* 指向当前输入缓冲的末尾 + 1 */
char *line_ptr; /* 当前输入的行指针 */
int line_no; /* 当前输入文件的输入行号 */
void fill_buffer()
{
if ( bit_size == 0 ){
return ;
}
if ( curr_ptr >= last_ptr )
{
curr_ptr = last_ptr;
}
else
{
int n;
unsigned char* s;
n = (char *)last_ptr - (char *)line_ptr;
line_ptr = (char *)(&buffer[ MAXLINE ]) - n;
assert(last_ptr - curr_ptr <= MAXLINE);
s = &buffer[ MAXLINE ];
while( last_ptr >= curr_ptr )
{
*s-- = * last_ptr;
}
curr_ptr = s;
}
bit_size = read(input_file_descr, &buffer[ MAXLINE+1 ], BUFSIZE );
if ( bit_size < 0 )
{
error("Input reading error");
}else if( bit_size == 0 ){
return;
}else{
last_ptr = &buffer[ MAXLINE + 1 + bit_size ];
*last_ptr = '\n';
}
}
void next_line()
{
do {
if ( curr_ptr >= last_ptr ){
fill_buffer();
if ( curr_ptr >= last_ptr ){
curr_ptr = last_ptr;
return ;
}
} else {
line_no++;
}
line_ptr = (char *) curr_ptr;
while ( *curr_ptr == ' ' || *curr_ptr=='\t' ){ curr_ptr ++; }
} while ( *curr_ptr == '\n' && curr_ptr == last_ptr );
}
void init_input()
{
last_ptr = curr_ptr = &buffer[MAXLINE + 1];
bit_size = -1;
line_no = 0;
filename = NULL;
fill_buffer();
if ( curr_ptr >= last_ptr )
curr_ptr = last_ptr;
next_line();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -