7
7
8
8
void keywin_off (struct SHEET * key_win );
9
9
void keywin_on (struct SHEET * key_win );
10
- struct SHEET * open_console (struct SHTCTL * shtctl , unsigned int memtotal );
11
10
void close_console (struct SHEET * sht );
12
11
void close_constask (struct TASK * task );
13
12
@@ -17,14 +16,14 @@ void HariMain(void)
17
16
struct SHTCTL * shtctl ;
18
17
char s [40 ];
19
18
struct FIFO32 fifo , keycmd ;
20
- int fifobuf [128 ], keycmd_buf [32 ], * cons_fifo [ 2 ] ;
19
+ int fifobuf [128 ], keycmd_buf [32 ];
21
20
int mx , my , i , new_mx = -1 , new_my = 0 , new_wx = 0x7fffffff , new_wy = 0 ;
22
21
unsigned int memtotal ;
23
22
struct MOUSE_DEC mdec ;
24
23
struct MEMMAN * memman = (struct MEMMAN * ) MEMMAN_ADDR ;
25
- unsigned char * buf_back , buf_mouse [256 ], * buf_cons [ 2 ] ;
24
+ unsigned char * buf_back , buf_mouse [256 ];
26
25
struct SHEET * sht_back , * sht_mouse ;
27
- struct TASK * task_a , * task_cons [ 2 ], * task ;
26
+ struct TASK * task_a , * task ;
28
27
static char keytable0 [0x80 ] = {
29
28
0 , 0 , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '0' , '-' , '^' , 0x08 , 0 ,
30
29
'Q' , 'W' , 'E' , 'R' , 'T' , 'Y' , 'U' , 'I' , 'O' , 'P' , '@' , '[' , 0x0a , 0 , 'A' , 'S' ,
@@ -89,11 +88,11 @@ void HariMain(void)
89
88
mx = (binfo -> scrnx - 16 ) / 2 ; /* 计算坐标使其位于画面中央 */
90
89
my = (binfo -> scrny - 28 - 16 ) / 2 ;
91
90
92
- sheet_slide (sht_back , 0 , 0 );
93
- sheet_slide (key_win , 32 , 4 );
91
+ sheet_slide (sht_back , 0 , 0 );
92
+ sheet_slide (key_win , 32 , 4 );
94
93
sheet_slide (sht_mouse , mx , my );
95
- sheet_updown (sht_back , 0 );
96
- sheet_updown (key_win , 1 );
94
+ sheet_updown (sht_back , 0 );
95
+ sheet_updown (key_win , 1 );
97
96
sheet_updown (sht_mouse , 2 );
98
97
keywin_on (key_win );
99
98
@@ -189,17 +188,17 @@ void HariMain(void)
189
188
fifo32_put (& keycmd , KEYCMD_LED );
190
189
fifo32_put (& keycmd , key_leds );
191
190
}
192
- if (i == 256 + 0x3b && key_shift != 0 && key_win != 0 ) {
191
+ if (i == 256 + 0x3b && key_shift != 0 && key_win != 0 ) { /* Shift+F1 */
193
192
task = key_win -> task ;
194
- if (task != 0 && task -> tss .ss0 != 0 ) { /* Shift+F1 */
193
+ if (task != 0 && task -> tss .ss0 != 0 ) {
195
194
cons_putstr0 (task -> cons , "\nBreak(key) :\n" );
196
195
io_cli (); /*强制结束处理时禁止任务切换*/
197
196
task -> tss .eax = (int ) & (task -> tss .esp0 );
198
197
task -> tss .eip = (int ) asm_end_app ;
199
198
io_sti ();
200
199
}
201
200
}
202
- if (i == 256 + 0x3c && key_shift != 0 ) { /* Shift+F2 */
201
+ if (i == 256 + 0x3c && key_shift != 0 ) { /* Shift+F2 */
203
202
if (key_win != 0 ) {
204
203
keywin_off (key_win );
205
204
}
@@ -256,7 +255,7 @@ void HariMain(void)
256
255
if (3 <= x && x < sht -> bxsize - 3 && 3 <= y && y < 21 ) {
257
256
mmx = mx ; /*进入窗口移动模式*/
258
257
mmy = my ;
259
- mmx2 = sht -> vx0 ;
258
+ mmx2 = sht -> vx0 ;
260
259
new_wy = sht -> vy0 ;
261
260
}
262
261
if (sht -> bxsize - 21 <= x && x < sht -> bxsize - 5 && 5 <= y && y < 19 ) {
@@ -274,7 +273,7 @@ void HariMain(void)
274
273
fifo32_put (& task -> fifo , 4 );
275
274
io_sti ();
276
275
}
277
- }
276
+ }
278
277
break ;
279
278
}
280
279
}
@@ -284,7 +283,7 @@ void HariMain(void)
284
283
x = mx - mmx ; /*计算鼠标指针移动量*/
285
284
y = my - mmy ;
286
285
new_wx = (mmx2 + x + 2 ) & ~3 ;
287
- new_wy = new_wy + y ;
286
+ new_wy = new_wy + y ;
288
287
mmy = my ;
289
288
}
290
289
} else {
@@ -293,11 +292,13 @@ void HariMain(void)
293
292
if (new_wx != 0x7fffffff ) {
294
293
sheet_slide (sht , new_wx , new_wy ); /*固定图层位置*/
295
294
new_wx = 0x7fffffff ;
296
- }
295
+ }
297
296
}
298
297
}
299
298
} else if (768 <= i && i <= 1023 ) { /*命令行窗口关闭处理*/
300
299
close_console (shtctl -> sheets0 + (i - 768 ));
300
+ } else if (1024 <= i && i <= 2023 ) {
301
+ close_constask (taskctl -> tasks0 + (i - 1024 ));
301
302
}
302
303
}
303
304
}
@@ -321,19 +322,13 @@ void keywin_on(struct SHEET *key_win)
321
322
return ;
322
323
}
323
324
324
- struct SHEET * open_console (struct SHTCTL * shtctl , unsigned int memtotal )
325
+ struct TASK * open_constask (struct SHEET * sht , unsigned int memtotal )
325
326
{
326
327
struct MEMMAN * memman = (struct MEMMAN * ) MEMMAN_ADDR ;
327
- struct SHEET * sht = sheet_alloc (shtctl );
328
- unsigned char * buf = (unsigned char * ) memman_alloc_4k (memman , 256 * 165 );
329
328
struct TASK * task = task_alloc ();
329
+ int * cons_fifo = (int * ) memman_alloc_4k (memman , 128 * 4 );
330
330
task -> cons_stack = memman_alloc_4k (memman , 64 * 1024 );
331
331
task -> tss .esp = task -> cons_stack + 64 * 1024 - 12 ;
332
- int * cons_fifo = (int * ) memman_alloc_4k (memman , 128 * 4 );
333
- sheet_setbuf (sht , buf , 256 , 165 , -1 ); /*无透明色*/
334
- make_window8 (buf , 256 , 165 , "console" , 0 );
335
- make_textbox8 (sht , 8 , 28 , 240 , 128 , COL8_000000 );
336
- task -> tss .esp = memman_alloc_4k (memman , 64 * 1024 ) + 64 * 1024 - 12 ;
337
332
task -> tss .eip = (int ) & console_task ;
338
333
task -> tss .es = 1 * 8 ;
339
334
task -> tss .cs = 2 * 8 ;
@@ -344,9 +339,20 @@ struct SHEET *open_console(struct SHTCTL *shtctl, unsigned int memtotal)
344
339
* ((int * ) (task -> tss .esp + 4 )) = (int ) sht ;
345
340
* ((int * ) (task -> tss .esp + 8 )) = memtotal ;
346
341
task_run (task , 2 , 2 ); /* level=2, priority=2 */
347
- sht -> task = task ;
348
- sht -> flags |= 0x20 ; /*有光标*/
349
342
fifo32_init (& task -> fifo , 128 , cons_fifo , task );
343
+ return task ;
344
+ }
345
+
346
+ struct SHEET * open_console (struct SHTCTL * shtctl , unsigned int memtotal )
347
+ {
348
+ struct MEMMAN * memman = (struct MEMMAN * ) MEMMAN_ADDR ;
349
+ struct SHEET * sht = sheet_alloc (shtctl );
350
+ unsigned char * buf = (unsigned char * ) memman_alloc_4k (memman , 256 * 165 );
351
+ sheet_setbuf (sht , buf , 256 , 165 , -1 ); /*无透明色*/
352
+ make_window8 (buf , 256 , 165 , "console" , 0 );
353
+ make_textbox8 (sht , 8 , 28 , 240 , 128 , COL8_000000 );
354
+ sht -> task = open_constask (sht , memtotal );
355
+ sht -> flags |= 0x20 ; /*有光标*/
350
356
return sht ;
351
357
}
352
358
0 commit comments