📄 input.c
字号:
/*input.c:建立并管理输入缓冲区*/#include "cmm.h"#include <unistd.h>unsigned char *cp, /*cp为当前的输入字符*/ *limit; /*limit指向缓冲区的结束处*/int lineno; /*行计数*/char *line; /*指向当前的行*/int infd; /*输入文件的描述符*/char *file; /*文件名*/static unsigned char *buffer; /*输入缓冲区*//*inputInit:一次性读入整个文件,并设置好缓冲区*/void inputInit(void){ int size; int flen = lseek(infd, 0, SEEK_END);/*取得文件的偏移量,及文件的长度*/ if(flen == -1) { error("lseek error\n"); exit(1); } buffer = allocate(flen+1, PERM); /*之前的lseek调用改变了文件内的偏移量,这里将 *重新设置文件的偏移量为文件的开始处,以便read调用*/ lseek(infd, 0,SEEK_SET); size = read(infd, buffer,flen); if(size == -1) { error("read error\n"); exit(1); } lineno = 0; cp = buffer; line = (char *)cp; limit = buffer + size; *limit = '\n'; return ;}/*nexline:当遇到换行符时调用nexline进行行计数, 并跳过行开始处的空白符*/void nexline(void){ if (cp >= limit) return ; lineno++; for (line = (char *)cp; *cp == ' ' || *cp == '\t';) cp++;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -