void cmd108_sub_pset32();

void cmd108_sub()
/* EAX == opt, lines == ECX, dat == ES:EDI, gbox == DS:ESI */
/* EDX == x0, EBX == y0 */
{
    GRAPHBOX *gbox == DS:ESI;

    EDX <<= 16;
    EBX <<= 16;
    PUSHAD();
+   PUSH(EAX);
+   AL = gbox->mode;
+   AL &= 0x1f;
+   if (AL == 1)
+       goto mode1;
+   if (AL == 4)
+       goto mode4;
+mode1:
+   POP(EAX);
    EAX >>= 6;
    EAX &= 0x03;
    if (== 0) { /* pset */
...中略...
        (unsigned int) EDX >>= 16;
        (unsigned int) EBX >>= 16;
        return;
//  }
+
+mode4:
+   POP(EAX);
+   EAX >>= 6;
+   EAX &= 0x03;
+   if (== 0) { /* pset */
+       do {
+           PUSH(ESI);
+           EDX = [ES:EDI +  8];
+           PUSH(ECX);
+           EBX = [ES:EDI + 12];
+           EBP = [ES:EDI + 16];
+           EAX = [ES:EDI + 20];
+           PUSH(EDI);
+           ECX = (offset) gbox;
+           ESI = [ES:EDI +  0];
+           EDI = [ES:EDI +  4];
+           ESI += [SS:ESP + 32]; /* x0 */
+           EDI += [SS:ESP + 28]; /* y0 */
+           cmd108_sub_pset32();
+           POP(EDI);
+           POP(ECX);
+           EDI += 24;
+           POP(ESI);
+           ECX--;
+       } while (!= 0);
+       POPAD();
+       (unsigned int) EDX >>= 16;
+       (unsigned int) EBX >>= 16;
+       return;
+   }
+   INT(0x03); /*pest以外はとりあえず未サポート */
}
void cmd108_sub_pset32()
{
    GRAPHBOX *gbox == DS:ECX;
    PUSH(ECX);
    PUSH(gbox->x_bsize);
    PUSH(EDX);
    do {
         EDX = EDI;
         ECX = ESI;
         (unsigned int) EDX >>= 16;
         (unsigned int) ECX >>= 16;
         IMUL(EDX, (int) [SS:ESP + 4]);
         ESI += [SS:ESP];
         EDX += ECX;
         ECX = (int) [SS:ESP + 8];
         EDI += EBX;
         (int) [DS:ECX + EDX * 4 + 64] = EAX; /* この *4 がミソ */
         EBP--;
    } while (!= 0);
    POP(EDX);
    POP(EAX);
    POP(ECX);
    return;
}

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