本文整理汇总了C++中cons_putstr0函数的典型用法代码示例。如果您正苦于以下问题:C++ cons_putstr0函数的具体用法?C++ cons_putstr0怎么用?C++ cons_putstr0使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cons_putstr0函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: task_now
int *inthandler0d(int *esp)
{
struct CONSOLE *cons = (struct CONSOLE *) *((int *) 0x0fec);
struct TASK *task = task_now();
char s[30];
cons_putstr0(cons, "\nINT 0D :\n General Protected Exception.\n");
sprintf(s, "EIP = %08X\n", esp[11]);
cons_putstr0(cons, s);
return &(task->tss.esp0); /* 異常終了させる */
}
开发者ID:FuDesign2008,项目名称:mess,代码行数:10,代码来源:console.c
示例2: inthandler0c
int inthandler0c (int *esp)
{
struct CONSOLE *cons = (struct CONSOLE *) *((int *) 0x0fec);
struct TASK *task = task_now();
char s[30];
cons_putstr0 (cons, "\nINT 0C : \n Stack Exception.\n");
sprintf (s, "EIP = %x\n", esp[11]);
cons_putstr0 (cons, s);
return &(task->tss.esp0);
}
开发者ID:msyksphinz,项目名称:sicp_exercise,代码行数:10,代码来源:console.c
示例3: cmd_dir
void cmd_dir(struct CONSOLE *cons, char *cmdline)
{
struct FILEINFO *finfo = (struct FILEINFO *) (ADR_DISKIMG + 0x002600);
int i, j;
char s[30];
for (i = 0; i < 224; i++) {
if (finfo[i].name[0] == 0x00) {
break;
}
if (finfo[i].name[0] != 0xe5) {
if ((finfo[i].type & 0x18) == 0) {
sprintf(s, "filename.ext %7d\n", finfo[i].size);
for (j = 0; j < 8; j++) {
s[j] = finfo[i].name[j];
}
s[ 9] = finfo[i].ext[0];
s[10] = finfo[i].ext[1];
s[11] = finfo[i].ext[2];
cons_putstr0(cons, s);
//s[22] = ' ';
dbg_putstr0(s,COL8_FFFFFF);
}
}
}
cons_newline(cons);
return;
}
开发者ID:barmi,项目名称:bxos,代码行数:27,代码来源:console.c
示例4: cmd_dir
void cmd_dir(struct CONSOLE *cons)
{
/* dir命令 */
struct FILEINFO *finfo = (struct FILEINFO *) (ADR_DISKIMG + 0x002600);
int i, j;
char s[30];
for (i = 0; i < 224; i++) {
if (finfo[i].name[0] == 0x00) { // 不包含任何文件名信息
break;
}
if (finfo[i].name[0] != 0xe5) { // 没有被删除
if ((finfo[i].type & 0x18) == 0) {
sprintf(s, "filename.ext %7d\n", finfo[i].size);
for (j = 0; j < 8; j++) {
s[j] = finfo[i].name[j];
}
s[ 9] = finfo[i].ext[0];
s[10] = finfo[i].ext[1];
s[11] = finfo[i].ext[2];
cons_putstr0(cons, s);
}
}
}
cons_newline(cons);
return;
}
开发者ID:NeilJudson,项目名称:HomemadeOS,代码行数:26,代码来源:console.c
示例5: cons_runcmd
void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, int memtotal)
{
if (strcmp(cmdline, "mem") == 0 && cons->sht != 0) {
cmd_mem(cons, memtotal);
} else if (strcmp(cmdline, "cls") == 0 && cons->sht != 0) {
cmd_cls(cons);
} else if (strcmp(cmdline, "dir") == 0 && cons->sht != 0) {
cmd_dir(cons, cmdline);
} else if (strcmp(cmdline, "task") == 0) {
cmd_task();
} else if (strcmp(cmdline, "exit") == 0) {
cmd_exit(cons, fat);
} else if (strncmp(cmdline, "start ", 6) == 0) {
cmd_start(cons, cmdline, memtotal);
} else if (strncmp(cmdline, "ncst ", 5) == 0) {
cmd_ncst(cons, cmdline, memtotal);
} else if (strncmp(cmdline, "langmode ", 9) == 0) {
cmd_langmode(cons, cmdline);
} else if (strncmp(cmdline, "taskmgr", 7) == 0) {
open_taskmgr(memtotal);
} else if (cmdline[0] != 0) {
if (cmd_app(cons, fat, cmdline) == 0) {
/* Ŀ�ǵ嵵 �ƴϰ�, ���ø����̼ǵ� �ƴϰ�, �� �൵ �ƴϴ� */
cons_putstr0(cons, "Bad command or file name.\n\n");
}
}
return;
}
开发者ID:barmi,项目名称:bxos,代码行数:28,代码来源:console.c
示例6: cmd_mem
void cmd_mem(struct CONSOLE *cons, unsigned int memtotal)
{
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
char s[60];
sprintf(s, "total %dMB\nfree %dKB\n\n", memtotal / (1024 * 1024), memman_total(memman) / 1024);
cons_putstr0(cons, s);
return;
}
开发者ID:FuDesign2008,项目名称:mess,代码行数:8,代码来源:console.c
示例7: cmd_app
int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline)
{
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
struct FILEINFO *finfo;
struct SEGMENT_DESCRIPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) ADR_GDT;
char name[13], *p, *q;
struct TASK *task = task_now();
int i, segsiz, datsiz, esp, dathrb;
/* コマンドラインからファイル名を生成 */
for (i = 0; i < 8; i++) {
if (cmdline[i] <= ' ') {
break;
}
name[i] = cmdline[i];
}
name[i] = 0; /* とりあえずファイル名の後ろを0にする */
/* ファイルを探す */
finfo = file_search(name, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
if (finfo == 0) {
/* 見つからなかったので後ろに".HRB"をつけてもう一度探してみる */
name[i ] = '.';
name[i + 1] = 'H';
name[i + 2] = 'R';
name[i + 3] = 'B';
name[i + 4] = 0;
finfo = file_search(name, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
}
if (finfo != 0) {
/* ファイルが見つかった場合 */
p = (char *) memman_alloc_4k(memman, finfo->size);
file_loadfile(finfo->clustno, finfo->size, p, fat, (char *) (ADR_DISKIMG + 0x003e00));
if (finfo->size >= 36 && strncmp(p + 4, "Hari", 4) == 0 && *p == 0x00) {
segsiz = *((int *) (p + 0x0000));
esp = *((int *) (p + 0x000c));
datsiz = *((int *) (p + 0x0010));
dathrb = *((int *) (p + 0x0014));
q = (char *) memman_alloc_4k(memman, segsiz);
*((int *) 0xfe8) = (int) q;
set_segmdesc(gdt + 1003, finfo->size - 1, (int) p, AR_CODE32_ER + 0x60);
set_segmdesc(gdt + 1004, segsiz - 1, (int) q, AR_DATA32_RW + 0x60);
for (i = 0; i < datsiz; i++) {
q[esp + i] = p[dathrb + i];
}
start_app(0x1b, 1003 * 8, esp, 1004 * 8, &(task->tss.esp0));
memman_free_4k(memman, (int) q, segsiz);
} else {
cons_putstr0(cons, ".hrb file format error.\n");
}
memman_free_4k(memman, (int) p, finfo->size);
cons_newline(cons);
return 1;
}
/* ファイルが見つからなかった場合 */
return 0;
}
开发者ID:tgib23,项目名称:30days_os,代码行数:58,代码来源:console.c
示例8: hrb_api
void hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax) {
/* Syscall Table */
struct CONSOLE *cons = (struct CONSOLE *) *((int *) 0x0fec);
if (edx == 1) {
cons_putchar(cons, eax & 0xff, 1);
} else if (edx == 2) {
cons_putstr0(cons, (char *) ebx);
} else if (edx == 3) {
cons_putstr1(cons, (char *) ebx, ecx);
}
}
开发者ID:RogerTsang,项目名称:osask,代码行数:11,代码来源:console.c
示例9: cmd_langmode
void cmd_langmode(struct CONSOLE *cons, char *cmdline)
{
struct TASK *task = task_now();
unsigned char mode = cmdline[9] - '0';
if (mode <= 2) {
task->langmode = mode;
} else {
cons_putstr0(cons, "mode number error.\n");
}
cons_newline(cons);
return;
}
开发者ID:bigpussy,项目名称:harib_os_src,代码行数:12,代码来源:console.c
示例10: task_now
int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax)
{
int ds_base = *((int *) 0xfe8);
struct TASK *task = task_now();
struct CONSOLE *cons = (struct CONSOLE *) *((int *) 0x0fec);
struct SHTCTL *shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
struct SHEET *sht;
int *reg = &eax + 1; /* eaxの次の番地 */
/* 保存のためのPUSHADを強引に書き換える */
/* reg[0] : EDI, reg[1] : ESI, reg[2] : EBP, reg[3] : ESP */
/* reg[4] : EBX, reg[5] : EDX, reg[6] : ECX, reg[7] : EAX */
if (edx == 1) {
cons_putchar(cons, eax & 0xff, 1);
} else if (edx == 2) {
cons_putstr0(cons, (char *) ebx + ds_base);
} else if (edx == 3) {
cons_putstr1(cons, (char *) ebx + ds_base, ecx);
} else if (edx == 4) {
return &(task->tss.esp0);
} else if (edx == 5) {
sht = sheet_alloc(shtctl);
sheet_setbuf(sht, (char *) ebx + ds_base, esi, edi, eax);
make_window8((char *) ebx + ds_base, esi, edi, (char *) ecx + ds_base, 0);
sheet_slide(sht, 100, 50);
sheet_updown(sht, 3); /* 3という高さはtask_aの上 */
reg[7] = (int) sht;
} else if (edx == 6) {
sht = (struct SHEET *) ebx;
putfonts8_asc(sht->buf, sht->bxsize, esi, edi, eax, (char *) ebp + ds_base);
sheet_refresh(sht, esi, edi, esi + ecx * 8, edi + 16);
} else if (edx == 7) {
sht = (struct SHEET *) ebx;
boxfill8(sht->buf, sht->bxsize, ebp, eax, ecx, esi, edi);
sheet_refresh(sht, eax, ecx, esi + 1, edi + 1);
} else if (edx == 8) {
memman_init((struct MEMMAN *) (ebx + ds_base));
ecx &= 0xfffffff0; /* 16バイト単位に */
memman_free((struct MEMMAN *) (ebx + ds_base), eax, ecx);
} else if (edx == 9) {
ecx = (ecx + 0x0f) & 0xfffffff0; /* 16バイト単位に切り上げ */
reg[7] = memman_alloc((struct MEMMAN *) (ebx + ds_base), ecx);
} else if (edx == 10) {
ecx = (ecx + 0x0f) & 0xfffffff0; /* 16バイト単位に切り上げ */
memman_free((struct MEMMAN *) (ebx + ds_base), eax, ecx);
} else if (edx == 11) {
sht = (struct SHEET *) ebx;
sht->buf[sht->bxsize * edi + esi] = eax;
sheet_refresh(sht, esi, edi, esi + 1, edi + 1);
}
return 0;
}
开发者ID:ymkjp,项目名称:home-made-os,代码行数:52,代码来源:console.c
示例11: fex_api
void fex_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax)
{
/*
* 寄存器顺序是按照PUSHAD的顺序写的,PUSHAD指令压入32位寄存器,其入栈顺序是:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
*/
struct CONSOLE *cons = (struct CONSOLE *) *((int *) 0x0fec);
if (edx == 1) {
cons_putchar(cons, eax & 0xff, 1);
} else if (edx == 2) {
cons_putstr0(cons, (char *) ebx);
} else if (edx == 3) {
cons_putstr1(cons, (char *) ebx, ecx);
}
return;
}
开发者ID:NeilJudson,项目名称:HomemadeOS,代码行数:15,代码来源:console.c
示例12: cons_runcmd
void cons_runcmd (char *cmdline, struct CONSOLE *cons, int *fat, unsigned int memtotal)
{
if (strcmp(cmdline, "mem") == 0) {
cmd_mem (cons, memtotal);
} else if (strcmp(cmdline, "cls") == 0) {
cmd_cls (cons);
} else if (strcmp (cmdline, "dir") == 0) {
cmd_dir (cons);
} else if (cmdline[0]=='t' && cmdline[1]=='y' && cmdline[2]=='p' && cmdline[3]=='e' && cmdline[4]==' ') {
cmd_type (cons, fat, cmdline);
} else if (cmdline[0] != 0) {
if (cmd_app(cons, fat, cmdline) == 0) {
// Not Command Line and Empty
cons_putstr0 (cons, "bad command.\n\n");
}
}
}
开发者ID:msyksphinz,项目名称:sicp_exercise,代码行数:17,代码来源:console.c
示例13: cons_runcmd
void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, unsigned int memtotal)
{
if (strcmp(cmdline, "mem") == 0) {
cmd_mem(cons, memtotal);
} else if (strcmp(cmdline, "cls") == 0) {
cmd_cls(cons);
} else if (strcmp(cmdline, "dir") == 0) {
cmd_dir(cons);
} else if (strncmp(cmdline, "type", 5) == 0) {
cmd_type(cons, fat, cmdline);
} else if (cmdline[0] != 0) {
if (cmd_app(cons, fat, cmdline) == 0) {
cons_putstr0(cons, "Bad command.\n\n");
}
}
return;
}
开发者ID:LinuxKernelDevelopment,项目名称:30,代码行数:17,代码来源:console.c
示例14: cmd_type
void cmd_type(struct CONSOLE *cons, int *fat, char *cmdline)
{
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
struct FILEINFO *finfo = file_search(cmdline + 5, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
char *p;
if (finfo != 0) {
/* ファイルが見つかった場合 */
p = (char *) memman_alloc_4k(memman, finfo->size);
file_loadfile(finfo->clustno, finfo->size, p, fat, (char *) (ADR_DISKIMG + 0x003e00));
cons_putstr1(cons, p, finfo->size);
memman_free_4k(memman, (int) p, finfo->size);
} else {
/* ファイルが見つからなかった場合 */
cons_putstr0(cons, "File not found.\n");
}
cons_newline(cons);
return;
}
开发者ID:FuDesign2008,项目名称:mess,代码行数:18,代码来源:console.c
示例15: cons_runcmd
void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, unsigned int memtotal)
{
/* 执行命令 */
if (strcmp(cmdline, "mem") == 0) {
/* mem命令 */
cmd_mem(cons, memtotal);
} else if (strcmp(cmdline, "cls") == 0) {
/* cls命令 */
cmd_cls(cons);
} else if (strcmp(cmdline, "dir") == 0) {
/* dir命令 */
cmd_dir(cons);
} else if (strncmp(cmdline, "type ", 5) == 0) {
/* type命令 */
cmd_type(cons, fat, cmdline);
} else if (cmdline[0] != 0) {
if (cmd_app(cons, fat, cmdline) == 0) {
/* 不是命令,不是应用程序,也不是空行 */
cons_putstr0(cons, "Bad command.\n\n");
}
}
return;
}
开发者ID:NeilJudson,项目名称:HomemadeOS,代码行数:23,代码来源:console.c
示例16: cons_runcmd
void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, int memtotal)
{
if (strcmp(cmdline, "mem") == 0 && cons->sht != 0) {
cmd_mem(cons, memtotal);
} else if (strcmp(cmdline, "cls") == 0 && cons->sht != 0) {
cmd_cls(cons);
} else if (strcmp(cmdline, "dir") == 0 && cons->sht != 0) {
cmd_dir(cons);
} else if (strncmp(cmdline, "type ", 5) == 0 && cons->sht != 0) {
cmd_type(cons, fat, cmdline);
} else if (strcmp(cmdline, "exit") == 0) {
cmd_exit(cons, fat);
} else if (strncmp(cmdline, "start ", 6) == 0) {
cmd_start(cons, cmdline, memtotal);
} else if (strncmp(cmdline, "ncst ", 5) == 0) {
cmd_ncst(cons, cmdline, memtotal);
} else if (cmdline[0] != 0) {
if (cmd_app(cons, fat, cmdline) == 0) {
/* コマンドではなく、アプリでもなく、さらに空行でもない */
cons_putstr0(cons, "Bad command.\n\n");
}
}
return;
}
开发者ID:bigpussy,项目名称:harib_os_src,代码行数:24,代码来源:console.c
示例17: HariMain
//.........这里部分代码省略.........
cursor_c = COL8_000000; // Delete cursor
fifo32_put (&task_cons->fifo, 3); // cursor OFF console
}
sheet_refresh (sht_win, 0, 0, sht_win->bxsize, 21);
sheet_refresh (sht_cons, 0, 0, sht_cons->bxsize, 21);
}
if (i == 256 + 0x1c) {
if (key_to != 0) {
fifo32_put (&task_cons->fifo, 10 + 256);
}
}
if (i == 256 + 0x2a) { // Left Shift ON
key_shift |= 1;
}
if (i == 256 + 0x36) { // Right Shift ON
key_shift |= 2;
}
if (i == 256 + 0xaa) { // Left Shift OFF
key_shift &= ~1;
}
if (i == 256 + 0xb6) { // Right Shift ON
key_shift &= ~2;
}
if (i == 256 + 0x3a) { // CapsLock
key_leds ^= 4;
fifo32_put(&keycmd, KEYCMD_LED);
fifo32_put(&keycmd, key_leds);
}
if (i == 256 + 0x45) { // NumLock
key_leds ^= 2;
fifo32_put(&keycmd, KEYCMD_LED);
fifo32_put(&keycmd, key_leds);
}
if (i == 256 + 0x45) { // ScrollLock
key_leds ^= 1;
fifo32_put(&keycmd, KEYCMD_LED);
fifo32_put(&keycmd, key_leds);
}
if (i == 256 + 0xfa) { // KeyBoard receive Data
keycmd_wait = -1;
}
if (i == 256 + 0xfe) { // KeyBoard failed to receive Data
wait_KBC_sendready ();
io_out8(PORT_KEYDAT, keycmd_wait);
}
if (i == 256 + 0x3b && key_shift != 0 && task_cons->tss.ss0 != 0) { /* Shift+F1 */
cons = (struct CONSOLE *) *((int *) 0x0fec);
cons_putstr0 (cons, "\nBreak(key) : \n");
io_cli ();
task_cons->tss.eax = (int) &(task_cons->tss.esp0);
task_cons->tss.eip = (int) asm_end_app;
io_sti ();
}
// Redraw cursor
if (cursor_c >= 0) {
boxfill8 (sht_win->buf, sht_win->bxsize, cursor_c, cursor_x, 28, cursor_x + 7, 43);
}
sheet_refresh(sht_win, cursor_x, 28, cursor_x + 8, 44);
} else if (512 <= i && i <= 767) { // Mouse Data
if (mouse_decode(&mdec, i-512) != 0) {
// sprintf (s, "[lcr %d %d]", mdec.x, mdec.y);
// if ((mdec.btn & 0x01) != 0) { s[1] = 'L'; }
// if ((mdec.btn & 0x02) != 0) { s[3] = 'R'; }
// if ((mdec.btn & 0x04) != 0) { s[2] = 'C'; }
// putfonts8_asc_sht (sht_back, 32, 16, COL8_FFFFFF, COL8_008484, s, 15);
mx += mdec.x;
my += mdec.y;
if (mx < 0) { mx = 0; } if (mx > binfo->scrnx - 1) { mx = binfo->scrnx - 1; }
if (my < 0) { my = 0; } if (my > binfo->scrny - 1) { my = binfo->scrny - 1; }
// sprintf(s, "(%d, %d)", mx, my);
// putfonts8_asc_sht (sht_back, 0, 0, COL8_FFFFFF, COL8_008484, s, 10);
sheet_slide (sht_mouse, mx, my);
if ((mdec.btn & 0x01) != 0) {
sheet_slide (sht_win, mx - 80, my - 8);
}
}
} else if (i <= 1) {
if (i != 0) {
timer_init(timer, &fifo, 0);
if (cursor_c >= 0) {
cursor_c = COL8_000000;
}
} else {
timer_init(timer, &fifo, 1);
if (cursor_c >= 0) {
cursor_c = COL8_FFFFFF;
}
}
timer_settime(timer, 50);
if (cursor_c >= 0) {
boxfill8 (sht_win->buf, sht_win->bxsize, cursor_c, cursor_x, 28, cursor_x + 7, 43);
sheet_refresh(sht_win, cursor_x, 28, cursor_x + 8, 44);
}
}
}
}
}
开发者ID:msyksphinz,项目名称:sicp_exercise,代码行数:101,代码来源:bootpack.c
示例18: HariMain
//.........这里部分代码省略.........
key_win = shtctl->sheets[j];
keywin_on(key_win);
}
if (i == 256 + 0x2a) { /* 左シフト ON */
key_shift |= 1;
}
if (i == 256 + 0x36) { /* 右シフト ON */
key_shift |= 2;
}
if (i == 256 + 0xaa) { /* 左シフト OFF */
key_shift &= ~1;
}
if (i == 256 + 0xb6) { /* 右シフト OFF */
key_shift &= ~2;
}
if (i == 256 + 0x3a) { /* CapsLock */
key_leds ^= 4;
fifo32_put(&keycmd, KEYCMD_LED);
fifo32_put(&keycmd, key_leds);
}
if (i == 256 + 0x45) { /* NumLock */
key_leds ^= 2;
fifo32_put(&keycmd, KEYCMD_LED);
fifo32_put(&keycmd, key_leds);
}
if (i == 256 + 0x46) { /* ScrollLock */
key_leds ^= 1;
fifo32_put(&keycmd, KEYCMD_LED);
fifo32_put(&keycmd, key_leds);
}
if (i == 256 + 0x3b && key_shift != 0 && key_win != 0) { /* Shift+F1 */
task = key_win->task;
if (task != 0 && task->tss.ss0 != 0) {
cons_putstr0(task->cons, "\nBreak(key) :\n");
io_cli(); /* 強制終了処理中にタスクが変わると困るから */
task->tss.eax = (int) &(task->tss.esp0);
task->tss.eip = (int) asm_end_app;
io_sti();
}
}
if (i == 256 + 0x3c && key_shift != 0) { /* Shift+F2 */
/* 新しく作ったコンソールを入力選択状態にする(そのほうが親切だよね?) */
if (key_win != 0) {
keywin_off(key_win);
}
key_win = open_console(shtctl, memtotal);
sheet_slide(key_win, 32, 4);
sheet_updown(key_win, shtctl->top);
keywin_on(key_win);
}
if (i == 256 + 0x57) { /* F11 */
sheet_updown(shtctl->sheets[1], shtctl->top - 1);
}
if (i == 256 + 0xfa) { /* キーボードがデータを無事に受け取った */
keycmd_wait = -1;
}
if (i == 256 + 0xfe) { /* キーボードがデータを無事に受け取れなかった */
wait_KBC_sendready();
io_out8(PORT_KEYDAT, keycmd_wait);
}
} else if (512 <= i && i <= 767) { /* マウスデータ */
if (mouse_decode(&mdec, i - 512) != 0) {
/* マウスカーソルの移動 */
mx += mdec.x;
my += mdec.y;
if (mx < 0) {
开发者ID:FuDesign2008,项目名称:mess,代码行数:67,代码来源:bootpack.c
示例19: debug
////输出到控制台窗口的调试日志
void debug(const char *fmt, ...)
{
if(!log_ready)
return;
va_list arg = (va_list)((char *)(&fmt) + 4);
/* 同步log */
if(!is_async_log){
char buf[512];
int len = vsprintf(buf,fmt,arg);
buf[len++] = '\n';
buf[len++] = 0;
int wait_count = 100000;
while(debug_running && wait_count--){
//print_on_screen3("other debug is running");
//nothing
}
if(wait_count == 0){
panic("debug wait timeout: %s",buf);
}
debug_running = 1;
cons_putstr0(log_win->task->cons,buf);
debug_running = 0;
return;
}
//return;
static int invoke = 0; /* 为了检测debug是否已经被嵌套调用了 */
invoke++;
/* 申请日志的缓冲 */
cli();
char * buf=get_log_buf(log_buf_mgr);
sti();
if(buf == NULL){
print_on_screen3("no log buf");
invoke--;
return;
}
int len = vsprintf(buf,fmt,arg);
buf[len++] = '\n';
buf[len++] = 0;
if(strlen(buf) + 2 > LOG_ENTRY_SIZE){
panic("log is too log: %s", buf);
}
if(invoke > 10){
panic("debug may invoke recursively: %s",buf);
}
if(is_async_log){
if(log_win != 0){
io_cli();
//print_on_screen3("utls: add log process[%d,%s]",log_fifo_buffer->task->pid,log_fifo_buffer->task->name);
int retval = fifo32_put(log_fifo_buffer,(int)buf);
if(retval == -1){ /* fifo已满 */
//释放日志缓冲
put_log_buf(log_buf_mgr,buf);
}
io_sti();
}else{
/* 释放日志缓冲 */
io_cli();
put_log_buf(log_buf_mgr,buf);
io_sti();
}
}
invoke--;
return;
}
开发者ID:jjhlzn,项目名称:haribote,代码行数:75,代码来源:utils.c
示例20: HariMain
//.........这里部分代码省略.........
if (i == 256+0x0e) {//退格键
if (key_win == sht_win) {//发送给任务a
if (cursor_x > 8) {
putfont8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF, " ", 1);
cursor_x -= 8;
}
} else {
fifo32_put(&key_win->task->fifo, 8+256);
}
}
//回车键
if (i == 256+0x1c) {
if (key_win != sht_win) {
fifo32_put(&key_win->task->fifo, 10+256);
}
}
//tab键
if (i == 256 + 0x0f) {
cursor_c = keywin_off(key_win, sht_win, cursor_c, cursor_x);
int j = key_win->height - 1;
if (j == 0) {
j = shtctl->top - 1;
}
key_win = shtctl->sheets[j];
cursor_c = keywin_on(key_win, sht_win, cursor_c);
}
//shift+F1,结束应用程序
if (i == 256 + 0x3b && key_shift != 0 && task_cons->tss.ss0 != 0) {
struct CONSOLE *cons = (struct CONSOLE *)*((int *)0x0fec);
cons_putstr0(cons,"Break(KEY)\n");
io_cli();//修改寄存器时禁止中断
task_cons->tss.eax = (int)&(task_cons->tss.esp0);
task_cons->tss.eip = (int)asm_end_app;
io_sti();
}
//F11
if (i == 256 + 0x57 && shtctl->top > 2) {
sheet_updown(shtctl->sheets[1], shtctl->top - 1);
}
//重新显示光标
if (cursor_c >= 0) {
boxfill8(sht_win->buf, sht_win->bxsize, cursor_c, cursor_x, 28, cursor_x+7, 43);
}
sheet_refresh(sht_win, cursor_x, 28, cursor_x+8, 44);
if (i == 256 + 0x2a) {//左shift on
key_shift |= 1;
}
if (i == 256 + 0x36) {//右shift on
key_shift |= 2;
}
if (i == 256 + 0xaa) {//左shift off
key_shift &= ~1;
}
if (i == 256 + 0xb6) {//右shift off
key_shift &= ~2;
}
} else if (512 <= i && i <= 767) {//鼠标数据
//鼠标的3个字节都齐全了,显示出来
if (mouse_decode(&mdec, i-512) != 0) {
//计算鼠标新的位置
开发者ID:qioixiy,项目名称:osdays,代码行数:67,代码来源:bootpack.c
注:本文中的cons_putstr0函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论