OSASK改造パッチ
- cmd054()の途中から、最後までを入れ替え
(offset) gbox = cmd[ 8];
(offset) win = gbox->window;
TEST(AH, 0x80);
if (== 0) {
if (win->draw_enable != 0) {
+ AL = gbox->mode;
+ AL &= 0x1f;
+ if (AL == 1)
+ goto mode1;
+ if (AL == 4)
+ goto mode4;
+ INT(0x03);
+ mode1:
EAX = ESP;
PUSH((int) 0x0000);
PUSH(SS);
PUSH(EAX);
PUSH(ECX); /* lines(1) */
EAX = cmd[16];
ECX = cmd[20];
EDX = cmd[24];
EBX = cmd[28];
if (EAX > EDX)
XCHG(EAX, EDX);
if (ECX > EBX)
XCHG(ECX, EBX);
EDX++;
EBX++;
EDX -= EAX;
EBX -= ECX;
EAX -= gbox->vx0;
ECX -= gbox->vy0;
(short) [SS:ESP + 18] -= AX;
(short) [SS:ESP + 22] -= CX;
EAX += gbox->x0;
ECX += gbox->y0;
PUSH(EBX);
PUSH(EDX);
PUSH(ECX);
PUSH(EAX);
PUSH(win->slot);
PUSH(cmd[ 4]); /* opt */
PUSH((int) 0x0418); /* linear dots */
EBX = ESP;
CALL(0x0017,0); // GUIGUI統合shellcall
ESP += 44;
+ goto fin;
+ mode4:
+ /* 面倒なので手抜きでgbox全部をflushする */
+ ECX = gbox->x_bsize;
+ ECX -= gbox->x_vsize;
+ ECX *= 4;
+ PUSH(0x0000);
+ PUSH(DS);
+ PUSH(gbox->vbuf0);
+ PUSH(ECX);
+ PUSH(gbox->y_vsize);
+ PUSH(gbox->x_vsize);
+ PUSH(gbox->y0);
+ PUSH(gbox->x0);
+ PUSH(win->slot);
+ EAX = gbox->mode;
+ PUSH(EAX);
+ PUSH(0x0414);
+ EBX = ESP;
+ CALL(0x0017,0); // GUIGUI統合shellcall
+ ESP += 44;
+ goto fin;
* }
* gbox->flags |= WINFLAG_MUSTREDRAW;
}
+fin:
ESP += 24;
POP(EBP);
(offset) cmd += 32;
asmout("JMP nextcmd");
}
SAFE_CUT("DB ..$-$-1,'drawLine(GB):Invalid option ',0,'.'");
}
|