* 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); + PUSH(gbox->mode); + 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,'.'"); }