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

📄 go.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 3 页
字号:
      {
       k=2;
       addr=(long)((TextFont[0]-0xa1)*94+(TextFont[1]-0xa1))*32;
       fseek(fhz16,addr,SEEK_SET);
       fread(FONT_BUF,1,32,fhz16); //读取字库
      }
      else                                        //是字符
      {
       addr=(long)(TextFont[0])*16;
       fseek(fasc16,addr,SEEK_SET);
       fread(FONT_BUF,1,16,fasc16); //读取字库
      }
      return k; */

    // BC++3.1用
    unsigned TempFont,TFont;
    int k = 1;
    if (TextFont[0] >= 0xa0)                      //是汉字
    {
        TFont = *(unsigned *) TextFont;
    }
    else
    {
        TFont = (unsigned) * TextFont;
    }

    if (TFont & 0xff00)                         //是汉字
    {
        k = 2;
        TempFont = (TFont << 8) & 0xff00;
        TempFont |= (TFont >> 8) & 0x00ff;
    }
    else                                        //是字符
    {
        TempFont = TFont & 0x00ff;
    }
    reg.x.dx = TempFont;
    int86x(0x7f, &reg, &reg, &sreg);
    //  if(reg.x.cflag)
    movedata(reg.x.dx, 0, FontSeg, FontOff, k * 16);
    return k;
}

/*把汉字字模传到显示缓冲区
  sx,sy-缓冲区的位置
  LineStyle-字模数据的地址
  n-字模行数 */
void Put(int sx, int sy, unsigned char *LineStyle, int n)
{
    int lsx, lst, j, k;
    char c;
    unsigned char n1,n2;
    if (sx > 631)
    {
        return;
    }

    lsx = sx % 8,lst = sx / 8;
    k = sy * 80 + lst;
    outp(0x3ce, 0);
    outp(0x3cf, FontColor);
    outp(0x3ce, 1);
    outp(0x3cf, 0xff);
    outp(0x3ce, 3);
    outp(0x3cf, FWriteMode);
    outp(0x3c4, 2);
    outp(0x3c5, 0xff);
    if (lsx)        //不是整字节开始
    {
        for (j = 0; j < n; j++)
        {
            n1 = (unsigned char) (LineStyle[j] >> lsx),
            n2 = (unsigned char) (LineStyle[j] << (8 - lsx));
            outp(0x3ce, 8);
            outp(0x3cf, n1);
            seeseg = (unsigned char _based(videoseg) * )k;         //地址
            c = *seeseg;
            *seeseg = c;
            outp(0x3ce, 8);
            outp(0x3cf, n2);
            seeseg = (unsigned char _based(videoseg) * )(k + 1);         //地址
            c = *seeseg;
            *seeseg = c;
            k += 80;
        }
    }
    else
    {
        for (j = 0; j < n; j++)
        {
            outp(0x3ce, 8);
            outp(0x3cf, LineStyle[j]);
            seeseg = (unsigned char _based(videoseg) * )k;         //地址
            c = *seeseg;
            *seeseg = c;
            k += 80;
        }
    }
    outp(0x3ce, 3);
    outp(0x3cf, 0);
    outp(0x3ce, 8);
    outp(0x3cf, 0xff);
}

int ViewOne16Char(int x, int y, unsigned char *TextFont)
{
    int i, k;
    unsigned char buf1[16],buf2[16];
    k = ReadFont(TextFont);
    if (k > 0)
    {
        if (k == 2)       // 汉字
        {
            for (i = 0; i < 16; i++)
            {
                buf1[i] = FONT_BUF[2 * i];
                buf2[i] = FONT_BUF[2 * i + 1];
            }
            Put(x, y, buf1, 16);
            Put(x + 8, y, buf2, 16);
        }
        else           // 字
        {
            Put(x, y, FONT_BUF, 16);
        }
    }
    return k;
}

//
int ViewOne24Char(int x, int y, unsigned char *TextFont, int Size)
{
    unsigned char c;
    unsigned j,i,w = 0,l,s;
    c = *TextFont;
    if (Size == 48)
    {
        for (i = 1632; i < 1692; i += 5)
        {
            if (c == FontBuffer[i])
            {
                //start
                s = (unsigned) FontBuffer[i + 1];
                s = s * 256 + (unsigned) FontBuffer[i + 2];
                //
                l = (unsigned) FontBuffer[i + 3];
                l = l * 256 + (unsigned) FontBuffer[i + 4];
                w = l / 48;
                for (j = 0; j < w; j++)
                {
                    Put(x + j * 8, y, &FontBuffer[s], 48);
                    s += 48;
                }
                w = w * 8;
                break;
            }
        }
    }
    else
    {
        for (i = 0; i < 13; i++)
        {
            if (c == FontBufferCal[i])
            {
                s = 13 + i * 48;
                w = 2;
                for (j = 0; j < w; j++)
                {
                    Put(x + j * 8, y, &FontBufferCal[s], 24);
                    s += 24;
                }
                w = 12;
                break;
            }
        }
    }
    return w;
}

// 显示字符串
void DrawText(int x, int y, char *String, unsigned char Co, int MaxLine)
{
    int Tempx, Tempy;
    int Mark = 0, k, Count = 0;
    unsigned char TempNum,C[2] =
    {
        0xff,0xff
    };
    Tempx = x,Tempy = y;
    FontColor = Co;
    while (*String)
    {
        TempNum = *String;
        switch (TempNum)
        {
        case 0x9:
            Tempx += 7 * Cowx;
        case 0x20:
            Tempx += Cowx;
            String++;
            continue;
        case 0x0d:
            String++;
        case 0x0a:
            Tempx = x;
            Tempy += Liney;
            String++;
            break;
        case '&':
            Mark = 1 - Mark;
            String++;
            break;
        default:
            if (MaxLine < 0)   //特殊汉字
            {
                if (MaxLine <= -10)
                {
                    k = ViewOne24Char(Tempx, Tempy, String, 24);
                }
                else
                {
                    k = ViewOne24Char(Tempx, Tempy, String, 48);
                }
                Tempx += k;
                String++;
            }
            else
            {
                k = ViewOne16Char(Tempx, Tempy, String);
                if (Mark)
                {
                    Put(Tempx, Tempy + Liney - 4, C, 2);
                    if (k == 2)
                    {
                        Put(Tempx + Cowx, Tempy + Liney - 4, C, 2);
                    }
                    Mark = 0;
                }
                Count += k;
                Tempx += k * Cowx;
                String += k;
            }
            break;
        }
    }
    CurX = Tempx,CurY = Tempy;
}

/* DrawTextEx
   显示字符串,字符串的宽度被限制在RW的宽度之内
   x,y-显示开始的位置
   String-字符串
   RW-字符串显示的宽度
   Co-字符的颜色
   AligMent-对齐方式 0-Left,1-Center,2-Right
*/
int __strlen(char *String)
{
    int i, Result = 0;
    for (i = 0; i < (int) strlen(String); i++)
    {
        if (String[i] == '\n')
        {
            break;
        }
        if (String[i] == '.' || String[i] == '-')
        {
            Result += 16;
        }
        else
        {
            Result += 24;
        }
    }
    return Result;
}

int __strlenex(char *String)
{
    int i, Result = 0;
    for (i = 0; i < (int) strlen(String); i++)
    {
        if (String[i] != '&')
        {
            Result += 8;
        }
    }
    return Result;
}

void DrawTextEx(int x, int y, char *String, int RW, unsigned char Co, int AlignMent)
{
    int w;
    if (AlignMent <= -10)
    {
        w = 12 * strlen(String);
    }
    else if (AlignMent < 0)
    {
        w = __strlen(String);
    }
    else
    {
        w = __strlenex(String);
    }  //求字符串的长度
    switch (AlignMent)
    {
    case 0:
        break;
    case 1:
        x = x + (RW - w) / 2;
        break;
    default:
        if (RW > w)
        {
            x = x + RW - w - 3;
        }
    }
    DrawText(x, y, String, Co, AlignMent);
}

//特殊显示函数
void Printf(char *String, unsigned char Co)
{
    int Tempx, Tempy, k;
    unsigned char TempNum;
    Tempx = FontCurX,Tempy = FontCurY;
    FontColor = Co;
    while (*String)
    {
        TempNum = *String;
        switch (TempNum)
        {
        case 0x9:
            Tempx += 7 * Cowx;
        case 0x20:
            Tempx += Cowx;
            String++;
            continue;
        case 0x0d:
            String++;
        case 0x0a:
            Tempx = 0;
            Tempy += Liney;
            String++;
            break;
        default:
            k = ViewOne16Char(Tempx, Tempy, String);
            Tempx += k * 8;
            String += k;
            break;
        }
        if (Tempx > 639)
        {
            Tempy += Liney;Tempx = 0;
        }
        if (Tempy > 468)
        {
            Tempy -= 18;
            MoveScreen(0, 18, 639, 467, 0, 0);
            DrawBar(0, 449, 639, 467, clBlack, 0xff);
        }
    }
    FontCurX = Tempx,FontCurY = Tempy;
}

//显示位图
void ShowBitmap(int x, int y, int w, int h)
{
    int i;
    unsigned char FaceBuffer[2000];
    int handle;

    handle = open("FDIGI.DAT", O_BINARY | O_RDONLY);
    if (handle == -1)
    {
        printf("Error:%d-%d", errno, EMFILE);
        Getkey();
        return;
    }
    read(handle, FaceBuffer, 2000);
    close(handle);

    FontColor = clBlack;
    for (i = 0; i < w / 8; i++)
    {
        Put(2 + x + i * 8, 2 + y, &FaceBuffer[i * h], h);
    }

    FontColor = clYellow;
    for (i = 0; i < w / 8; i++)
    {
        Put(x + i * 8, y, &FaceBuffer[i * h], h);
    }

    FontColor = clGreen;
    for (i = 0; i < w / 8; i++)
    {
        Put(1 + x + i * 8, 1 + y, &FaceBuffer[i * h], h);
    }
}

void ShowBitmapEx(void)
{
    int i;
    unsigned char FaceBuffer[1200];
    int handle;
    handle = open("JDIGI.DAT", O_BINARY | O_RDONLY);
    if (handle == -1)
    {
        printf("Error:%d-%d", errno, EMFILE);
        Getkey();
        return;
    }
    read(handle, FaceBuffer, 1100);
    close(handle);

    FontColor = clBlack;
    for (i = 0; i < 6; i++)
    {
        Put(364 + i * 8, 304, &FaceBuffer[i * 42], 42);
    }
    for (i = 0; i < 6; i++)
    {
        Put(364 + i * 8, 337, &FaceBuffer[252 + i * 42], 42);
    }
    for (i = 0; i < 6; i++)
    {
        Put(364 + i * 8, 378, &FaceBuffer[504 + i * 42], 42);
    }
    for (i = 0; i < 6; i++)
    {
        Put(364 + i * 8, 411, &FaceBuffer[756 + i * 42], 42);
    }

    FontColor = clBlue;
    for (i = 0; i < 6; i++)
    {
        Put(363 + i * 8, 303, &FaceBuffer[i * 42], 42);
    }
    for (i = 0; i < 6; i++)
    {
        Put(363 + i * 8, 336, &FaceBuffer[252 + i * 42], 42);
    }
    for (i = 0; i < 6; i++)
    {
        Put(363 + i * 8, 377, &FaceBuffer[504 + i * 42], 42);
    }
    for (i = 0; i < 6; i++)
    {
        Put(363 + i * 8, 410, &FaceBuffer[756 + i * 42], 42);
    }
}

/*                    第四部分:控件                  */

/*    本部分包含仿Windows界面的一部份控件,由于MC6.0不是面向对象的,
  因此,每一个控件的数据成员使用一个结构来表示,其方法使用函数来实现.*/

//TPanel控件
//显示TPanel空件
void ShowPanel(TPanel *Panel)
{
    int Off = 0, sx, sy, ex, ey;
    sx = Panel->Left;
    sy = Panel->Top;
    ex = sx + Panel->Width - 1;
    ey = sy + Panel->Height - 1;
    //画表面
    DrawBar(sx, sy, ex, ey, Panel->Color, 0xff); //实线填充
    if (Panel->BorderStyle)                  //存在
    {
        Rectangle(sx, sy, ex, ey, clBlack, clBlack);
        Off++;
    }
    if (Panel->BevelOuter)                   //外
    {
        Rectangle(sx + Off, sy + Off, ex - Off, ey - Off, clBlack, clWhite);
        Off++;
    }
    if (Panel->BevelInner)                   //内
    {
        Rectangle(sx + Off, sy + Off, ex - Off, ey - Off, clWhite, clBlack);
    }
}

//TLabel控件
void ShowLabel(TLabel *Label, char *Caption)
{
    int sx, sy, ex, ey;
    sx = Label->Left;
    sy = Label->Top;
    ex = sx + Label->Width - 1;
    ey = sy + Label->Height - 1;
    if (Caption)                //如果新的内容不为NULL,更新内容
    {
        strcpy(Label->Caption, Caption);
    }
    DrawBar(sx, sy, ex, ey, Label->Color, 0xff);          //显示背景
    if (Label->Ctrl3D)          //3D效果
    {
        DrawTextEx(sx + 1, sy + 1, Label->Caption, ex - sx + 1,    //显示阴影
          Label->FontBColor, Label->AlignMent);
    }

    DrawTextEx(sx, sy, Label->Caption, ex - sx + 1,        //显示字符
         Label->FontColor, Label->AlignMent);
}

//TEdit控件
void InsertChar(char *s, char c, int Locate)         //在字符串

⌨️ 快捷键说明

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