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

📄 codearea.c.bak

📁 linux 下类似于TC功能的编译器,但还没有完成,希望大家共同研究
💻 BAK
字号:
#include "codearea.h"int CodeArea::InitCodeArea(int Y,int X,int Height,int Width,int Color,int FontStyle,int WinType){        int ret=FALSE;        if(InitBaseWindow(Y,X,Height,Width,Color,0,FontStyle,WinType,"")==FALSE)                return FALSE;        field[0] = new_field(Height,Width,0,0,0,0);        field[1] = NULL;        field_opts_off(field[0], O_AUTOSKIP);        field_opts_off(field[0], O_STATIC);         set_field_fore(field[0], COLOR_PAIR(Color));        set_field_back(field[0], COLOR_PAIR(Color));        form = new_form(field);        set_current_field(form, field[0]);        keypad(basewin,TRUE);        set_form_win(form, basewin);        set_form_sub(form, derwin(basewin, Height, Width,0,0));        box(basewin, 0, 0);        curs_set(1);        post_form(form);        wrefresh(basewin);        insertmode=TRUE;        currow=curcol=totalrow=totalcol=0;        curpage=totalpage=0;        return ret;}int CodeArea::CodeAreaDriver(int key){        int ret=0;        int tempy,tempx;        int nextpage,begin;        tempy=tempx=0;         switch(key)        {                case KEY_LEFT:                        if(curcol>0)                        {                                curcol = curcol-1;                                form_driver(form,REQ_PREV_CHAR);                                ret = UPDATE_STATUS;                        }                        else                        {                                if (currow>0)                                {                                        form_driver(form,REQ_PREV_LINE);                                        form_driver(form,REQ_END_LINE);                                        getyx(basewin,tempy,curcol);                                        currow--;                                        ret = UPDATE_STATUS;                                }                        }                                                break;                case KEY_RIGHT:                        form_driver(form,REQ_NEXT_CHAR);                        curcol++;                        ret = UPDATE_STATUS;                        break;                case KEY_UP:                        if(currow>0)                        {                                form_driver(form,REQ_PREV_LINE);                                currow--;                                curcol=0;                                ret = UPDATE_STATUS;                        }                                                break;                case KEY_DOWN:                        if (currow<totalrow)                        {                                form_driver(form,REQ_NEXT_LINE);                                currow++;                                curcol=0;                                ret = UPDATE_STATUS;                        }                        break;                case KEY_HOME:                        curcol=0;                        form_driver(form,REQ_BEG_LINE);                        ret = UPDATE_STATUS;                        break;                case KEY_END:                        form_driver(form,REQ_END_LINE);                        getyx(basewin,tempy,curcol);                        ret = UPDATE_STATUS;                        break;                case 10://KEY_ENTER:INS                        currow++;                        totalrow++;                        curcol=0;                        form_driver(form,REQ_NEW_LINE);                        ret = UPDATE_STATUS;                        break;                case KEY_F(2):                        LostActive();                        ret = ACTIVE_TOPMENU;                        break;                case KEY_BACKSPACE:                        getyx(basewin,tempy,curcol);                        if(curcol<=0 && totalrow>0 && currow>0)                        {                                totalrow--;                                currow--;                        }                                                form_driver(form,REQ_DEL_PREV);                        getyx(basewin,tempy,curcol);                        ret = UPDATE_STATUS;                        break;                case KEY_DC:                        if(curcol<=0)                                form_driver(form,REQ_DEL_LINE);                        else                                form_driver(form,REQ_DEL_CHAR);                        ret = UPDATE_STATUS;                        break;                case KEY_PPAGE:                                                nextpage=((int)(currow/GetHeight())-1)*GetHeight()+1;                        if (nextpage>0)                        {                                getyx(basewin,tempy,tempx);                                form_driver(form,REQ_SCR_BPAGE);                                currow-=GetHeight();                                if(currow-GetHeight()<=0)                                {                                        tempy-=currow;//                                        currow=0;                                        while(tempy-->0)                                                form_driver(form,REQ_PREV_LINE);                                }                                form_driver(form,REQ_END_LINE);                                ret = UPDATE_STATUS;                        }                        break;                case KEY_NPAGE:                        getyx(basewin,tempy,tempx);                        nextpage=currow-tempy+GetHeight();                        if (nextpage<totalrow)                        {                                form_driver(form,REQ_SCR_FPAGE);                                begin=nextpage - (int)(nextpage/GetHeight())*GetHeight();                                currow+=GetHeight();                                if (currow>totalrow)                                {                                                                                currow-=begin;                                        while(currow>totalrow)                                        {                                                form_driver(form,REQ_PREV_LINE);                                                currow--;                                        }                                                                        }                                form_driver(form,REQ_END_LINE);                                ret = UPDATE_STATUS;                        }                        break;                case KEY_TAB://TAB                        for(int i=0;i<TABSIZE;i++)                                form_driver(form,KEY_SPACE);                        curcol+=TABSIZE;                        ret = UPDATE_STATUS;                        break;                case KEY_INSERT:                        if(insertmode)                        {                                form_driver(form,REQ_OVL_MODE);                                insertmode=FALSE;                                ret = UPDATE_STATUS_REPLACE;                        }                        else                        {                                form_driver(form,REQ_INS_MODE);                                insertmode=TRUE;                                ret = UPDATE_STATUS_INSERT;                        }                                                break;                default:                        if (curcol<GetWidth())                        {                                curcol++;                                form_driver(form, key);                                ret = UPDATE_STATUS;                                                }                        else if (curcol<MAX_COLS)                        {                                curcol++;                                form_driver(form, key);                                ret = UPDATE_STATUS;                        }                        break;                }        return ret;}void CodeArea::DestroyCodeArea(){        unpost_form(form);        free_form(form);        free_field(field[0]);        DestroyBaseWindow();}int  CodeArea::Active(int item){        if(active!=TRUE)        {                active=TRUE;        }        return active;}int  CodeArea::Active(){        if (active!=TRUE)        {                active=TRUE;        }        curs_set(1);        wmove(basewin,currow,curcol);        return active;}int  CodeArea::IsActive(){        return active;}int  CodeArea::LostActive(){        if(active!=FALSE)        {                active=FALSE;        }        curs_set(0);        return active;}int  CodeArea::GetCurCol(){        return curcol;}int  CodeArea::GetCurRow(){        return currow;}

⌨️ 快捷键说明

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