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,'.'");
     }

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2006-02-16 (木) 18:00:46 (5977d)