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

📄 cg.c

📁 ESS3890+SL原代码(1*16内存)
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************  for graphic requirement.*************************************************************************/#ifdef NOT_USEDint cg_line_to(int x1, int y1, int dx, int dy, int color){    OSD_line_to(x1, y1, dx, dy, color);    cg_on = 1; OSD_on(1);    return 0;} #endif/************************************************************************  Function:  Description:*************************************************************************/int CG_show_frame(int x, int y, int dx, int dy, int mode){    int start_x, start_y, end_x, end_y;    start_x = x;    start_y = y;    end_x   = x + dx;    end_y   = y + dy;    cg_ch2pixel(&start_x, &start_y);    cg_ch2pixel(&end_x, &end_y);    OSD_frame(start_x, start_y, end_x, end_y, mode);    return 0;}/************************************************************************  Function:  Description:*************************************************************************/int CG_show_window(int x, int y, int dx, int dy, int mode, int depth, int color){    int start_x, start_y, end_x, end_y;    start_x = x;    start_y = y;    end_x   = x + dx;    end_y   = y + dy;    cg_ch2pixel(&start_x, &start_y);    cg_ch2pixel(&end_x, &end_y);    OSD_window(start_x, start_y, end_x - 1, end_y - 1, mode, depth, color);    return 0;}/************************************************************************  save and restore back ground color for icon.*************************************************************************/void CG_bkcolor_saver(int saver){#ifdef SCR_SAVER    if (saver) {	icon_bcolor_sav = icon_back_color;	icon_back_color = 0;	    } else        icon_back_color = icon_bcolor_sav;#endif}/************************************************************************  set up back ground color for icon.*************************************************************************/void ICON_set_bkcolor(int bkcolor){    icon_back_color = bkcolor;}/************************************************************************  set up auto color mapping on/off.*************************************************************************/void ICON_auto_mapping(int on_off){    icon_auto_mapping = on_off;}/************************************************************************  set up auto color mapping on/off.*************************************************************************/void ICON_color_mapping(int index, int color){    if (index<0||index>15||color<0||color>15)	return;    icon_mapping[index]=color;}/************************************************************************  select charset to be display.*************************************************************************/void ICON_charset_select(int charset){    current_charset = charset&0xf;}/************************************************************************  restore original charset.*************************************************************************/#define player_in_setup() 0void ICON_charset_restore(void){#ifdef BILINGUAL_OSD    if (osd_lang == CHINESE_OSD)  current_charset = 1;    else#endif    if (player_in_setup()/*&&osd_lang==ENGLISH_OSD*/)        current_charset = VWENGLISH_FONTS;    else        current_charset = 0;}/************************************************************************ ************************************************************************/static void set_rect_value(RECT *rect, int xs, int ys, int xe, int ye){    rect->xstart = xs;    rect->ystart = ys;    rect->xend = xe;    rect->yend = ye;}/************************************************************************ ************************************************************************/static void get_rect_value(RECT *rect, int *xs, int *ys, int *xe, int *ye){    *xs = rect->xstart;    *ys = rect->ystart;    *xe = rect->xend;    *ye = rect->yend;}/************************************************************************ ************************************************************************/static void get_area_rect_value(int entry, int *xs, int *ys, int *xe, int *ye){    int j, x0, y0, x1;    RECT *rect_ptr;        rect_ptr = &(gi_msg[entry].rect);    x0 = rect_ptr->xstart;    y0 = rect_ptr->ystart;    x1 = rect_ptr->xend;    /* Check to see if there is a message currently being displayed in     * the same area, and compare the message lengths.     */    for (j=0; j<MAX_MESSAGE_NUMBER; j++) {	rect_ptr = &(gi_msg[j].rect);	if ((j != entry) && (rect_ptr->xstart == x0) &&	    (rect_ptr->ystart == y0) && (rect_ptr->xend > x1)) {	    	    /* currently displayed msg is longer */ 	    icon_back_erase = 1;	    break;	}    }    if (j == MAX_MESSAGE_NUMBER) {	/* use new msg area */	rect_ptr = &(gi_msg[entry].rect);    }        *xs = rect_ptr->xstart;    *ys = rect_ptr->ystart;    *xe = rect_ptr->xend;    *ye = rect_ptr->yend;}/************************************************************************ ************************************************************************/static void color_map_set(ICON_CHAR *pichar, int *map, int bkcolor){    int i, j, k1, k2, n=pichar->format, tmp1[4], tmp2[4];    assert(n<=2);    for (i=0; i<n; i++) {        j = i<<1;        if (icon_auto_mapping) {            k1 = pichar->color_mapping[i]>>4;            k2 = pichar->color_mapping[i]&0xf;        } else {            k1 = icon_mapping[j];            k2 = icon_mapping[j+1];        }        if (!k1) k1=bkcolor;        if (!k2) k2=bkcolor;	tmp1[j] = k1;	tmp1[j+1] = k2;         tmp2[j] = k1<<4;        tmp2[j+1] = k2<<4;    }    n *= 2;    for (i=0; i<n; i++)        for (j=0; j<n; j++)            map[i*n+j]=tmp2[i]+tmp1[j];}/************************************************************************   check icon_id if it is control character.*************************************************************************/static int icon_control(int icon_id){    if (icon_id>=MIN_CONTROL_HEADER&&icon_id<=MAX_CONTROL_HEADER) {        switch (icon_id) {        case CN_HEADER:	    font_header = CHINESE_FONTS; break;        case ENORI_HEADER: font_header = ENGLISH_FONTS; break;         case ENVSF_HEADER: font_header = VWENGLISH_FONTS; break;#ifdef EXTRA_VWFONTS        case FRVSF_HEADER: font_header = VWFRENCH_FONTS; break;#endif#ifdef NEWVSE_FONT         case BIGVSE_HEADER: font_header = BIGVSE_FONTS; break;#endif        case HLION_HEADER: icon_hli_flag = 1; break;        case HLIOFF_HEADER: icon_hli_flag = 0; break;        default: break;        }        return 1;    }    return 0;}   /*************************************************************************************************************************************************/static int data_width(unsigned char width, unsigned char depth){    int k, mask=0xff, shift;    if (depth==4)	shift = 1;    else if (depth==2)	shift = 2;    else if (depth==1)	shift = 3;    else	return 0;    k = (width&(~(mask<<shift)))?1:0;    k <<= shift;    k += width&(mask<<shift);    return k;}/*************************************************************************************************************************************************/static void align_transfer(int align, RECT *rect){    int dot, x1, x2, y1, y2;    int x=rect->xstart, y=rect->ystart;    int width=rect->xend-rect->xstart;    int height=rect->yend-rect->ystart;    switch (align&0xf) {        case 0: x1=x; x2=x+width; y1=y; y2=y+height; break;        case 3: x1=x; x2=x+width; y1=y-(height>>1);                y2=y1+height; break;        case 6: x1=x; x2=x+width; y1=y-height; y2=y; break;        case 7: x1=x-(width>>1); x2=x1+width;                y1=y-height; y2=y; break;        case 8: x1=x-width; x2=x; y1=y-height; y2=y; break;        case 5: x1=x-width; x2=x; y1=y-(height>>1);                y2=y1+height; break;        case 2: x1=x-width; x2=x; y1=y; y2=y+height; break;        case 1: x1=x-(width>>1); x2=x1+width; y1=y;                y2=y+height; break;        case 4: x1=x-(width>>1); x2=x1+width;                y1=y-(height>>1); y2=y1+height; break;        default: return;    }    dot = 1&x1;    rect->xstart = x1-dot;    rect->ystart = y1;    rect->xend = x2-dot;    rect->yend = y2;}/*************************************************************************************************************************************************/static uchar * hli_insert(uchar* target, uchar* msg, int maxlength, 	int hli_s, int hli_e){    int i=0, j=0;    if (hli_s>=0&&hli_e>=0&&hli_e>hli_s) {        while (msg[i]&&(i+j<maxlength)) {            if (i==hli_s) {                target[i+j] = HLION_HEADER;                j++;             }            target[i+j]=msg[i];            i++;            if (i==hli_e+1) {                target[i+j] = HLIOFF_HEADER;                j++;             }        }        if (i+j<maxlength)            target[i+j] = 0;	else	    target[i+j-1] = 0;	return target;    } else	return msg; }/*************************************************************************************************************************************************/static int icon_extension(uchar *buffer, ICON_CHAR *pic, int bkcolor){    int i=-1, bytes, format=pic->format;    uchar *c = pic->data;    bkcolor &= 0xf;    bytes=icon_size(pic->data-pic->format-4, 0);    if (format==FORMAT0) {    /* 4 bits */        int byte_bkc, upper_bkc=bkcolor<<4;        byte_bkc = upper_bkc+bkcolor;        while (i<bytes) {            int data = c[++i];            if (data==0) c[i] = byte_bkc;            else if (data<=0xf) c[i] |= upper_bkc;            else if ((data&0xf0)==0) c[i] |= bkcolor;        }    } else {        int j=0, k, data, map[16], width=pic->width;        color_map_set(pic, map, bkcolor);        if (format==FORMAT2) {            while (i<bytes) {                k = data = c[++i];                data>>=4;                *buffer++ = map[data];                j+=2; if (j<width) { *buffer++ = map[k&0xf]; j+=2; }                if (j>=width) j=0;            }        } else {            while (i<bytes) {                int tmp[4];                data = c[++i];                for (k=3; k>=0; k--) { tmp[k] = data&0x3; data>>=2; }                *buffer++ = map[tmp[0]];                j+=2; if (j<width) {                    *buffer++ = map[tmp[1]];                    j+=2; if (j<width) {                        *buffer++ = map[tmp[2]];                        j+=2; if (j<width) {                            *buffer++ = map[tmp[3]];                             j+=2;                        }                    }                    }                    if (j>=width) j=0;            }        }        }        return format;}/*************************************************************************************************************************************************/static int icon_index(int icon_id){    int i, start, end;    int font = (font_header<0)?current_charset:font_header;    if (font<VWENGLISH_FONTS)        return icon_id;    icon_id += cg_font_attr[font].id_offset;    if (icon_table[0].id==icon_id) return 0;    start = 0;    end = icon_total_number-1;    while (start<end) {        i = end-start;        i = (i>1)?(i>>1):i;        i += start;        if (icon_table[i].id == icon_id)            return i;        else if (icon_table[i].id < icon_id)            start=i;        else if (end>i) /* if (icon_table[i].id > icon_id) */            end=i;        else            break;    }    if (icon_table[start].id==icon_id)        return i;    else        return -1;}/*************************************************************************************************************************************************/#ifdef NOT_USEDstatic unsigned char *icon_address(int icon_id){    FONT_ATR *pfont_atr;    int i = icon_index(icon_id);    if (i>=0)        return (uchar*)cg_font_info(current_charset, i, 1, &pfont_atr);    return 0;}#endif/*************************************************************************************************************************************************/static FONT_ATR *charset_index2font(int charset, int index){    FONT_ATR *pfont_atr;    if (charset>=FONT_LANGUAGES||index<0) return 0;    if (font_header<0) {    	if (charset<VWENGLISH_FONTS) {            if (index < OTHER_ONE_SPACE_FONTS_START) {                pfont_atr = &cg_font_attr[ENGLISH_FONTS];            } else {                pfont_atr = &cg_font_attr[CHINESE_FONTS];	    }	} else            pfont_atr = &cg_font_attr[charset];    } else if (font_header<FONT_LANGUAGES) {        pfont_atr = &cg_font_attr[font_header];    } else        return 0;    return pfont_atr;}/*************************************************************************************************************************************************/static uchar *cg_font_info(FONT_ATR *pfont_atr, int charset, int index, int *size){    uint k;    int *offset_tbl;    if (charset>=FONT_LANGUAGES||index<0) return 0;#if 0    /* this sanity check have some problem */    if (index>=pfont_atr->max_char) return 0;#endif    index -= pfont_atr->start_offset;    if (index<0) return 0;    offset_tbl = pfont_atr->offset_tbl;    *size = offset_tbl[index+1]-offset_tbl[index];    k = (uint)(pfont_atr->comp_font + offset_tbl[index]);    return (uchar*)k;}/*************************************************************************************************************************************************/static int icon_char_info(FONT_ATR *pfont_atr, uchar *p, ICON_CHAR *pichar){    int font = (font_header<0)?current_charset:font_header;    if (font<VWENGLISH_FONTS) {        pichar->width = pfont_atr->width;        pichar->height = pfont_atr->height;        pichar->base = 0;        pichar->format = FORMAT2;        pichar->data = p;    } else /*if (current_charset==VWENGLISH_FONTS)*/ {        pichar->width = p[0];        pichar->height = p[1];        pichar->base = p[2];        pichar->format = p[3]>>6;        if (pichar->format) {            pichar->color_mapping = p

⌨️ 快捷键说明

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