📄 errmsg.c
字号:
/*error report func*/
#include <stdio.h>
#include <stdlib.h>
#include "util.h"
#include "errmsg.h"
int lineNum = 1;
static char *fileName = "";
/*创建换行链表,i 参数:每行的结束位置
如果知道字符的位置,则可以推算出字符所在的行
*/
IntList intList(int i, IntList rest)
{IntList l= checked_malloc(sizeof *l);
l->i=i; l->rest=rest;
return l;
}
/*换行整数链表表头,若当前行未结束,则恰好是当前行的上一行*/
IntList linePos=NULL;
/*换行*/
extern tokPos;
void newLine()
{lineNum++;
linePos = intList(tokPos, linePos);
}
/*输出错误信息和位置*/
void error(int pos, char *message)
{
IntList lines = linePos;
int num=lineNum;
while (lines && lines->i >= pos) {
lines=lines->rest; num--;
}
if (fileName)
fprintf(stderr,"ERROR:[%s:",fileName);
if (lines)
fprintf(stderr,"%d.%d: %s]", num, pos-lines->i,message);
fprintf(stderr,"\n");
}
extern FILE *fp; /*引用全局文件指针*/
/*重置初始化参数*/
void reset(char* fname)
{
fileName=fname;
lineNum=1;
linePos=intList(0,NULL);
if(fp)
fclose(fp);/*重新打开文件*/
fp = fopen(fname,"r");
if (!fp) {
error(0,"cannot open"); exit(1);
}
initBuffer();
LoadBuffer(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -