`
lobin
  • 浏览: 379463 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C: Windows编程: 第三章 TC

 
阅读更多
写道

 

 

中断

 

中断处理函数

 

编写中断处理函数需要指定interrupt以表示这是一个中断处理函数。如果没有指定interrupt,它就是一个普通的函数。

 

void interrupt <interrupt routine>()
{
  ... 
  ...
  ...
}

 

中断处理函数如上面指定了interrupt的函数反编译后的代码大概是这样的:

 

<interrupt routine>	proc	far
	push	ax
	push	bx
	push	cx
	push	dx
	push	es
	push	ds
	push	si
	push	di
	push	bp
	mov	bp,DGROUP
	mov	ds,bp
	mov	bp,sp
   
        ...
        ...
        ...

	pop	bp
	pop	di
	pop	si
	pop	ds
	pop	es
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	iret	
<interrupt routine>	endp

 

 

void interrupt kl_iroutine_0x32()
{
  printf("hello, world!\n");
}

void main()
{
    union REGS regs;

    disable();
    setvect(0x32, kl_iroutine_0x32);
    enable();


	int86(0x32, &regs, &regs);
	int86(0x32, &regs, &regs);
	int86(0x32, &regs, &regs);

    getch();
}

 

注册BGI驱动

int        _Cdecl registerbgidriver(void (*driver)(void));

注册的BGI驱动函数原型:

void (*driver)(void)

一些BGI驱动函数:

void           _Cdecl CGA_driver(void);
void           _Cdecl EGAVGA_driver(void);
void           _Cdecl IBM8514_driver(void);
void           _Cdecl Herc_driver(void);
void           _Cdecl ATT_driver(void);
void           _Cdecl PC3270_driver(void);

 

 

C:\TURBOC3>cd BGI

>BGIOBJ EGAVGA

 

BGI to OBJ Converter  Version 3.0  Copyright (c) 1987, 1990 Borland International

 

5554 bytes from 'EGAVGA.BGI' converted into 'EGAVGA.OBJ',

public name = '_EGAVGA_driver'.

 

在C:\TURBOC3\BGI下生成了一个EGAVGA.OBJ文件。

 

>TLIB LIB\GRAPHICS.LIB+EGAVGA

 

viewport

#include<graphics.h>

void main()
{
    //int gd = DETECT;
    //int gm;

    int gd = DETECT;
    int gm = VGAHI; // VGAHI      = 2,  /* 640x480 16 color 1 page     */

    registerbgidriver(EGAVGA_driver);

    initgraph(&gd, &gm, "C:\\TURBOC3\BGI");
  
    setbkcolor(BLACK);

    setviewport(100, 100, 540, 380, 0);

    setcolor(WHITE);
    setfillstyle(1, WHITE);
    rectangle(0, 0, 440, 280); 
    floodfill(50, 50, WHITE);

	//clearviewport();

    setviewport(150, 150, 590, 430, 0);

    setcolor(GREEN);
    setfillstyle(1, LIGHTGRAY);
    rectangle(0, 0, 440, 280); 
    floodfill(50, 50, GREEN);

    //clearviewport();

    setviewport(180, 180, 620, 460, 0);

    setcolor(WHITE);
    setfillstyle(1, BLUE);
    rectangle(0, 0, 440, 280); 
    floodfill(50, 50, WHITE);

	//clearviewport();

    getch();
    closegraph();
}

 https://pic.cnblogs.com/avatar/2131404/20200820032058.png

 

 

https://pic.cnblogs.com/avatar/2131404/20200820052338.png

 

#include<GRAPHICS.H>
void main()
{
    int gd = DETECT;
    int gm;

    registerbgidriver(EGAVGA_driver);

    initgraph(&gd, &gm, "C:\\TURBOC3\BGI");
  
    setbkcolor(12);
  
    setcolor(2);
    putpixel(10, 10, 1);
  
    getch();
    closegraph();
}

这里注册的BGI驱动EGAVGA_driver

 

 

void           _Cdecl EGAVGA_driver(void);

 

 

 

是在上面将BGI转换为OBJ(>BGIOBJ EGAVGA)的时候生成的:

public name = '_EGAVGA_driver'.

 

 

绘制矩形

#include<stdio.h>
#include<graphics.h>

#include<conio.h>
void main()
{
    int gd = DETECT;
    int gm = VGAHI; // VGAHI      = 2,  /* 640x480 16 color 1 page     */

    registerbgidriver(EGAVGA_driver);

    initgraph(&gd, &gm, "C:\\TURBOC3\BGI");
  
    setbkcolor(12);
  
    setcolor(2);
    setlinestyle(SOLID_LINE, EMPTY_FILL, 0 /*NORM_WIDTH*/);

    rectangle(10, 10, 640 - 10, 480 - 10);

    getch();
    closegraph();
}

 

 

 

 

分享到:
评论

相关推荐

    Tcl_TK编程权威指南pdf

    第3章 cgi应用程序--顾客留言簿 html简介 使用cgi创建动态页面 guestbook.cgi脚本程序 定义表单以及处理表单数据 cgi.tcl软件包 接下去的几步 第4章 tcl中的字符串处理 string命令 append命令 format...

    C语言课程设计案例精编光盘

    (5) 本光盘中除了第4篇中的3个程序(Ping、TCP、UDP)在Visual C++ 6.0中调试通过以外(因为TC和Win-TC中均没有需要的头文件),其余所有程序都在Win-TC和Turbo C 2.0中调试通过。 (6) 建议读者使用Win-TC来编辑和...

    《C语言课程设计案例精编》光盘

    (5) 本光盘中除了第4篇中的3个程序(Ping、TCP、UDP)在Visual C++ 6.0中调试通过以外(因为TC和Win-TC中均没有需要的头文件),其余所有程序都在Win-TC和Turbo C 2.0中调试通过。 (6) 建议读者使用Win-TC来编辑和...

    睁大你们的眼睛是代码是代码 C语言课程设计案例精编

    (5) 本光盘中除了第4篇中的3个程序(Ping、TCP、UDP)在Visual C++ 6.0中调试通过以外(因为TC和Win-TC中均没有需要的头文件),其余所有程序都在Win-TC和Turbo C 2.0中调试通过。 (6) 建议读者使用Win-TC来编辑和...

    Turbo C++ for Windows 3.1(上)

    首先,运行在DOS下的软件不可避免的都存在中文输入和显示十分困难,对中文的支持非常差,除非借助第三方软件的帮助;第二,DOS下的程序没有资源,不可能被汉化,你只能使用英文的界面,除非你的英文水平非常高,否则...

    若干源程序资料12.rar

    2012-06-11 21:07 765,000 AS3游戏编程大学.pdf 2012-06-11 21:40 750,563 ATL开发指南源码.rar 2012-06-11 21:05 186,863 BIOS练习工具加BIOS完全手册.rar 2012-06-11 21:03 340,134 C++ Primer Plus.第五版.习题...

    Turbo C++ 完全汉化版 3.1

    首先,运行在DOS下的软件不可避免的都存在中文输入和显示十分困难,对中文的支持非常差,除非借助第三方软件的帮助;第二,DOS下的程序没有资源,不可能被汉化,你只能使用英文的界面,除非你的英文水平非常高,否则...

    华为编程开发规范与案例

    三、维护类代码问题 第51页 1、 统一枚举类型的使用 第51页 【案例3.1.1】 第51页 2、 注释量至少占代码总量的20% 第51页 【案例3.2.1】对XXX产品BAM某版本部分代码注释量的统计 第51页 四、产品兼容性问题 第52页 ...

    C语言也能干大事 全部板书

    这种风格叫“掩码”,在Windows编程中这种用法会经常用到。 大家想像一下MessageBox的内部实现是怎么样的? if((mode& MB_OK)== MB_OK) { //显示OK按钮 } if((mode& MB_ICONQUESTION)== MB_ICONQUESTION) {...

    windows+IIS 环境下以Fastcgi方式配置php 5.3.3的方法

    第二步:下载php5.3.3的windows压缩版本:php-5.3.3-nts-Win32-VC9-x86.zip1、下载地址:http://windows.php.net/download/,选择VC9 x86 Non Thread Safe。有关PHP版本说明2、把php-5.3.3-nts-Win32-VC9-x86.zip解...

Global site tag (gtag.js) - Google Analytics