当前位置: 首页 > news >正文

做付费下载的网站大连网站建设腾讯大厦

做付费下载的网站,大连网站建设腾讯大厦,浙江房产信息网查询,移动互联网终端27.1 应用程序运行时关闭命令行窗口 需要实现的功能#xff1a; 在应用程序运行的时候#xff0c;可以关闭所对应的命令行窗口。思路#xff1a;1.先调整bootpack.c中按下x按钮时#xff0c;暂时将窗口隐藏起来#xff0c;并当fifo接收从console.c发送的关闭窗…27.1 应用程序运行时关闭命令行窗口 需要实现的功能 在应用程序运行的时候可以关闭所对应的命令行窗口。思路1.先调整bootpack.c中按下x按钮时暂时将窗口隐藏起来并当fifo接收从console.c发送的关闭窗口请求数据时释放指定的图层。2.由于cons.sht在命令行关闭后会置0所以将console_task函数中的变量sheet 部分改用变量 cons.sht代替。3.如果FIFO中接收到4这个数据则表示收到了关闭命令行窗 口的信号此时取消定时器并发出清理图层的消息然后将 cons-sht 置为 0。 /* bootpack.c */ if(sht-bxsize-21 x x sht-bxsize-5 5 y y 19){//点击x关闭窗口if((sht-flags 0x10) ! 0){/*该窗口不是应用程序窗口*/task sht-task;cons_putstr0(task-cons, \nBreak(mouse) :\n);io_cli();task-tss.eax (int)(task-tss.esp0);task-tss.eip (int) asm_end_app;io_sti();}else{//是命令行窗口task sht-task;sheet_updown(sht, -1);/*从这里开始*/keywin_off(key_win);key_win shtctl-sheets[shtctl-top - 1];keywin_on(key_win);/*到这里结束*/io_cli();fifo32_put(task-fifo, 4);io_sti();}task_run(task, -1, 0);/*为了确实执行结束处理如果处于休眠状态则唤醒*/ } 中略 }else if(2024 i i 2279){/*只关闭命令行窗口*/sht2 shtctl-sheets0(i-2024);memman_free_4k(memman, (int)sht2-buf, 256*165);sheet_free(sht2); }/* console.c */ int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax) {中略struct FIFO32 *sys_fifo (struct FIFO32 *) *((int *) 0x0fec); /*这里*/中略} else if (edx 15) {for (;;) {中略if (i 4) { /*只关闭命令行窗口*/ /*从此开始*/timer_cancel(cons-timer);io_cli();fifo32_put(sys_fifo, cons-sht - shtctl-sheets0 2024); /*20242279*/cons-sht 0;io_sti();} /*到此结束*/中略}} else if (edx 16) {中略 } 27.2 保护应用程序 GDT 中的段设置是供所有任务通用的而LDT中的段设置则只对某个应用程序有效。如果将应用程序段设置在LDT中其他的任务由于无法使用该LDT也就不用担心它们来搞破坏了。 /* bootpack.h */ 中略 #define AR_CODE32_ER 0x409a #define AR_LDT 0x0082 /*这里*/ #define AR_TSS32 0x0089 #define AR_INTGATE32 0x008e /* mtask.c */ 中略 struct TASK {int sel, flags; /* sel代表GDT编号*/int level, priority;struct FIFO32 fifo;struct TSS32 tss;struct SEGMENT_DESCRIPTOR ldt[2]; /*这里*/struct CONSOLE *cons;int ds_base, cons_stack; }; /* mtask.c */ struct TASK *task_init(struct MEMMAN *memman){中略for (i 0; i MAX_TASKS; i) {taskctl-tasks0[i].flags 0;taskctl-tasks0[i].sel (TASK_GDT0 i) * 8;taskctl-tasks0[i].tss.ldtr (TASK_GDT0 MAX_TASKS i) * 8; /*这里*/set_segmdesc(gdt TASK_GDT0 i, 103, (int) taskctl-tasks0[i].tss, AR_TSS32);set_segmdesc(gdt TASK_GDT0 MAX_TASKS i, 15, (int) taskctl-tasks0[i].ldt, AR_LDT);/*这里*/}中略 }struct TASK *task_alloc(void){中略for (i 0; i MAX_TASKS; i) {if (taskctl-tasks0[i].flags 0) {中略task-tss.fs 0;task-tss.gs 0;/*删掉原来的task-tss.ldtr 0;*/task-tss.iomap 0x40000000;task-tss.ss0 0;return task;}}return 0; /*已经全部正在使用*/ }int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline){中略if (finfo !s 0) {/*找到文件的情况*/中略if (finfo-size 36 strncmp(p 4, Hari, 4) 0 *p 0x00) {中略set_segmdesc(task-ldt 0, finfo-size - 1, (int) p, AR_CODE32_ER 0x60); /*这里*/set_segmdesc(task-ldt 1, segsiz - 1, (int) q, AR_DATA32_RW 0x60); /*这里*/for (i 0; i datsiz; i) {q[esp i] p[dathrb i];}start_app(0x1b, 0 * 8 4, esp, 1 * 8 4, (task-tss.esp0)); /*这里*/中略} else {cons_putstr0(cons, .hrb file format error.\n);}中略}中略 } 27.3 优化应用程序的大小 思路举例 主要是因为创建 hello3.hrb 时所引用的 a_nask.nas变大了包含了像 _api_openwin 和_api_linewin这些在这个应用程序中根本用不到的函数所以将a_nask.nas中的函数都拆开形成api001.nas~api020.nas。随后将Makefile文件中的a_nask.nas全部按照下述进行更换。 OBJS_API api001.obj api002.obj 中略 api019.obj api020.obja.bim : a.obj $(OBJS_API) Makefile$(OBJ2BIM) $(RULEFILE) out:a.bim map:a.map a.obj $(OBJS_API) 27.4 库 思路 将很多个 .obj文件打包成一个文件。在 Makefile 中加上下面的代码 GOLIB $(TOOLPATH)golib00.exe apilib.lib : Makefile $(OBJS_API) $(GOLIB) $(OBJS_API) out:apilib.lib 顺便写一个apilib.h文件就可以在应用程序开头的 API函数声明#include apilib.h 。 /* apilib.h */ void api_putchar(int c); void api_putstr0(char *s); void api_putstr1(char *s, int l); void api_end(void); int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title); void api_putstrwin(int win, int x, int y, int col, int len, char *str); void api_boxfilwin(int win, int x0, int y0, int x1, int y1, int col); void api_initmalloc(void); char *api_malloc(int size); void api_free(char *addr, int size); void api_point(int win, int x, int y, int col); void api_refreshwin(int win, int x0, int y0, int x1, int y1); void api_linewin(int win, int x0, int y0, int x1, int y1, int col); void api_closewin(int win); int api_getkey(int mode); int api_alloctimer(void); void api_inittimer(int timer, int data); void api_settimer(int timer, int time); void api_freetimer(int timer); void api_beep(int tone);
http://www.zqtcl.cn/news/627595/

相关文章:

  • 北京快速建站制作公司wordpress wpoptions
  • iis如何建立网站门源县住房和城乡建设局网站
  • 装修素材图片都从什么网站找铁门关网站建设
  • 网站服务器环境不支持mysql数据库免费商标图案logo
  • 以什么主题做网站好wordpress怎么设置404
  • 为什么手机进网站乱码网络营销工具的特点
  • DW怎么做网站下拉菜单网站建设外包网站
  • 手机做兼职的网站设计公司注册记账代理公司
  • 如何在vs做网站建筑工程电影网
  • 甘肃网站开发网站建设自己在家接单
  • 龙岗网站制作资讯福田区龙岗区发布通告
  • 百度如何快速收录网站嘉兴手机建站模板
  • 服务注册中心有哪些给你一个网站你如何做优化
  • 我做网站如何分流客户openwrt 做视频网站
  • 徐州微信网站建设建设工程项目
  • 便宜网站建设公司envision wordpress
  • 网站怎么做百度快照logo网站域名做固定资产怎么处理
  • 2003 iis网站发布工会网站建设管理工作总结
  • 商城网站大概多少钱长沙网站设计公司推荐
  • 海南省交通建设局网站首页做网站开发一般用什么语言
  • 个人备案网站沭阳哪里可以做网站
  • 环球资源网站什么时候做的搜索引擎优化名词解释
  • 名者观看网站做商城网站还要服务器
  • 网站建设课程考核方案广州 天河网站设计
  • 写作网站哪个比较赚钱小红书推广运营
  • 明年做啥网站能致富网站 公众号 建设方案
  • wordpress怎么修改网站标题做招投标应该了解的网站
  • 大庆市网站建设公司dooplay主题wordpress
  • 小学网站建设实施方案手机网站策划书方案
  • 延边网站建设国外设计公司网站欣赏