⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample

📁 linux 下类似于TC功能的编译器,但还没有完成,希望大家共同研究
💻
📖 第 1 页 / 共 3 页
字号:
                        {                                target=source->next;                                j--;                        }                        for(j=0;j<CODE_QUANTUM;j++)                                target->data[(lines+shift-1)%CODE_QSET][j]=source->data[lines-1][j];                        lines--;                }                source=source->prev;                pages--;        }        if(source==pg)        {                i=rows-(pages-1)*CODE_QSET;                lines=i-line-1;                while(lines>0)                {                        j=(int)( (i-1+shift)/CODE_QSET );                        target=source;                        while(j>0)                        {                                target=source->next;                                j--;                        }                        for(j=0;j<CODE_QUANTUM;j++)                                target->data[(i-1+shift)%CODE_QSET][j]=source->data[i-1][j];                        lines--;                        i--;                }//                for(i=0;i<shift;i++)//                        for(j=0;j<CODE_QUANTUM;j++)//                                source->data[line+i+1][j]='\0';        }}void CodeArea::CopyLine(chtype *source,int begin,int len,int clearup){        int i=0;        int line=currow%CODE_QSET;        chtype *target=NULL;        if(source==NULL)                source=LocatePage(NULL,currow)->data[line];        if(line+1>=CODE_QSET)                target=LocatePage(NULL,currow)->next->data[(line+1)%CODE_QSET];                else                target=LocatePage(NULL,currow)->data[(line+1)%CODE_QSET];                if(begin>=CODE_QUANTUM)                goto err;        if(begin+len>=CODE_QUANTUM)                goto err;        if(target==NULL || source==NULL)                goto err;        for(i=0;i<CODE_QUANTUM;i++)        {                if(i<len)                {                        target[i]=source[begin+i];                        if(clearup==TRUE)                                source[begin+i]='\0';                }                else                        target[i]='\0';        }err:        return;        }int  CodeArea::ReadFile(char *filename){        int ret=0;        int i=0;        int size=0;        PageList dptr=pagelist;        PageList newp=NULL;        load_file file(filename);        if (file.success != ZC_OK)         {                ret=-1;                goto over;        }        while(i<CODE_QSET && (size=file.getline(dptr->data[i])))        {                linecolor(dptr->data[i]);                if(dptr==pagelist && i==0)        //get col width of the first line                        totalcol=size;                i++;                if(i==CODE_QSET)                {                        newp=AllocPage();                        InsertPage(dptr,newp);                        dptr=newp;                        i=0;                }                totalrow++;                        maxcol=(size>maxcol)?(size):(maxcol);        }        curpage=0;        totalrow--;                //in order to process untitled file        ShowPage(pagelist,0,GetHeight(),0,GetWidth(),0,0);        wmove(basewin,0,0);over:        return ret;}PageList CodeArea::LocatePage(PageList page,int row){        int pg=(int)(row/CODE_QSET);        if(page==NULL)                page=beginpage;        while(pg>curpage)        {                page=page->next;                pg--;        }        return page;        }int  CodeArea::GetCurColWidth(PageList page,int line){                int j=0;        page=LocatePage(page,line);        line=line % CODE_QSET;        while(page->data[line][j]!='\0')        {                if(page->data[line][j]=='\t')                        j=j+TABSIZE;                else                        j=j+1;        }        return (j<CODE_QUANTUM)?(j):(CODE_QUANTUM-1);}void CodeArea::linecolor(chtype *line){        int i, k,pos=0;        int wordbegin,wordend;        int color=GetColor();        char a[MAXIDLEN + 1];        char ch=line[pos];        char prech;again:        wordbegin=0;        wordend=0;        while(ch==' ' && pos+1<CODE_QUANTUM)        {                line[pos]=line[pos]|COLOR_PAIR(GetColor());                        pos++;                ch=line[pos];        }        if(pos+1>=CODE_QUANTUM || ch=='\0')                goto over;        if (multiremark)        {                if(ch=='*')                {                        line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE);                        GETCH(pos);                        if(ch=='/')                        {                                                                line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE);                                multiremark=FALSE;                                GETCH(pos);                        }                }                else                {                        line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE);                        GETCH(pos);                }                                }        else if( isalpha(ch) )        {                k=0;                wordbegin=pos;                do                {                        if(k < MAXIDLEN)                                a[k++]=ch;                        GETCH(pos);                }while( isalpha(ch) || isdigit(ch)|| ch=='_' );                wordend=pos;                a[k]=0;                keyword[0]=a;                i=NRW;                while(strcmp(a,keyword[i--]));                if(++i)                {                        color=COLOR_YELLOW_BLUE;                }        //key word                else                {                        color=GetColor();                }        //identifier                while(wordbegin<wordend)                {                        line[wordbegin]=line[wordbegin]|COLOR_PAIR(color);                        wordbegin++;                }        }        else if ( isdigit(ch) )        {                wordbegin=pos;                color=COLOR_CYAN_BLUE;                do                {                        GETCH(pos);                }while(isdigit(ch));                if(ch=='.')                {                        do                        {                                GETCH(pos);                        }while(isdigit(ch));                                                }                else if(ch=='x')                {                        if (wordbegin+1!=pos || line[wordbegin]!='0')                        {//error such as 012x123456 or 1x123456                                color=COLOR_CYAN_RED;                        }                        do                        {                                GETCH(pos);                        }while(isdigit(ch) || ((ch>='a')&&(ch<='f')) || ((ch>='A')&&(ch<='F')) );                }                wordend=pos;                while(wordbegin<wordend)                {                        line[wordbegin]=line[wordbegin]|COLOR_PAIR(color)|A_UNDERLINE;                                ;                        wordbegin++;                }                        }        else if(ch=='"')        {                wordbegin=pos;                color=COLOR_CYAN_BLUE;                do                {                        line[pos]=line[pos]|COLOR_PAIR(color);                        GETCH(pos);                }while(ch!='"' && ch!='\0');                if(ch=='"')                {                        line[pos]=line[pos]|COLOR_PAIR(color);                        GETCH(pos);                }                else if(ch=='\0')                {        //missed a ",corrected it                        //line[pos]='"'|COLOR_PAIR(color);                        //line[pos+1]='\0';                        char word;                        color=COLOR_CYAN_RED;                        wordend=pos;                        while(wordbegin<wordend)                        {                                word=line[wordbegin];                                line[wordbegin]=word|COLOR_PAIR(color);                                wordbegin++;                        }                }        }        else if(ch=='/')        {                wordbegin=pos;                GETCH(pos);                if(ch=='/')                {                        pos=wordbegin;                        do                        {                                line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE);                                GETCH(pos);                        }while(ch!='\0');                }                else if(ch=='*')                {                        multiremark=TRUE;                        line[pos-1]=line[pos-1]|COLOR_PAIR(COLOR_GREEN_BLUE);                        line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE);                        GETCH(pos);                }                else                {                        line[pos-1]=line[pos-1]|COLOR_PAIR(COLOR_MAGENTA_BLUE);                        pos--;                        GETCH(pos);                }        }        else if(ch=='\'')        {                wordbegin=pos;                color=COLOR_CYAN_BLUE;                do                {                        prech=ch;                        line[pos]=line[pos]|COLOR_PAIR(color);                        GETCH(pos);                }while((ch=='\'' && prech=='\\') || (ch!='\'' && ch!='\0'));                if(ch=='\'')                {                        line[pos]=line[pos]|COLOR_PAIR(color);                        GETCH(pos);                }                else if(ch=='\0')                {                        char word;                        color=COLOR_CYAN_RED;                        wordend=pos;                        while(wordbegin<wordend)                        {                                word=line[wordbegin];                                line[wordbegin]=word|COLOR_PAIR(color);                                wordbegin++;                        }                }        }        else        {                line[pos]=line[pos]|COLOR_PAIR(COLOR_MAGENTA_BLUE);                GETCH(pos);        }        goto again;over:        return;}07-29

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -