SAS AMIGA 680x0OBJ Module Disassembler 6.57
Copyright © 1995 SAS Institute, Inc.


Amiga Object File Loader V1.00
68000 Instruction Set

EXTERNAL DEFINITIONS

@AllocTmpRas 00F8-00    @FreeTmpRas 01CA-00    @AreaPolyDraw 0202-00    
@AddVertex 070C-00    @KillVertex 074A-00    _ptdata 0000-01

SECTION 00 "text" 00000D4C BYTES
;   1: /** areapolydraw.c
;   2:  *
;   3:  *   This file contains the functions Alloc/FreeAreaInfo() and Alloc/FreeTmpRas()
;   4:  *   to initialize and free TmpRas and AreaInfo structures, as well as the
;   5:  *   function AreaPolyDraw(), and AddVertex() and KillVertex().
;   6:  *
;   7:  *   W.G.J. Langeveld, 14 July 1988
;   8:  *
;   9: **/
;  10: #include <functions.h>
;  11: #include "ralprotos.h"
;  12: #include <exec/types.h>
;  13: #include <exec/exec.h>
;  14: #include <intuition/intuition.h>
;  15: #include <graphics/gfxmacros.h>
;  16: #include <devices/timer.h>
;  17: #include <stdlib.h>
;  18: #include <string.h>
;  19: #include <ctype.h>
;  20: 
;  21: #include "areapolydraw.h"
;  22: #include "areapatterns.h"
;  23: 
;  24: static int AllocAreaInfo(struct RastPort *, int);
;  25: static int FreeAreaInfo(struct RastPort *);
;  26: static int FindAreaSize(struct vtx *, int *, int *, int *, int *);
;  27: static int setdither(unsigned int *, int);
;  28: static int bm(int *, int);
;  29: static struct vtx *AreaPolyClip(struct vtx *, int, int, int, int);
;  30: static struct vtx *SHClip(struct vtx *, int, int);
;  31: static struct vtx *addvtx(struct vtx *, struct vtx *);
;  32: static int inside(struct vtx *, int, int);
;  33: static struct vtx *addintersect(struct vtx *, struct vtx *,
;  34: struct vtx *, int, int);
;  35: 
;  36: extern struct IntuitionBase *IntuitionBase;
;  37: extern struct GfxBase *GfxBase;
;  38: 
;  39: #define AISIZE ((long) sizeof(struct AreaInfo))
;  40: #define TRSIZE ((long) sizeof(struct TmpRas))
;  41: 	
;  42: #define min(a, b) ( ((a) > (b)) ? (b) : (a) )
;  43: 	
;  44: static int bm(), setdither(), FindAreaSize();
;  45: static struct vtx *AreaPolyClip();
;  46: 	
;  47: #define BD_LEFT   1
;  48: #define BD_RIGHT  2
;  49: #define BD_TOP    3
;  50: #define BD_BOTTOM 4
;  51: 	
;  52: /**
;  53:  *
;  54:  *    NAME
;  55:  *
;  56:  * AllocAreaInfo()
;  57:  * ===============
;  58:  *
;  59:  *    SYNOPSIS
;  60:  *
;  61:  * AllocAreaInfo(rp, nverts)
;  62:  * FreeAreaInfo(rp)
;  63:  *
;  64:  *    FUNCTION
;  65:  *
;  66:  * Function to allocate and initialize and free an AreaInfo structure
;  67:  * for Area functions.
;  68:  *
;  69:  *    INPUTS
;  70:  *
;  71:  * struct RastPort *rp Rastport to be initialized
;  72:  * int nverts  Number of vertices allowed
;  73:  *
;  74:  *    RESULT
;  75:  *
;  76:  * The fields in Rastport rp are initialized.
;  77:  *
;  78:  *    ADDITIONAL CONSIDERATIONS
;  79:  *
;  80:  *    BUGS
;  81:  *
;  82:  * None known.
;  83:  *
;  84:  *    AUTHOR
;  85:  *
;  86:  * W.G.J. Langeveld, 8 November1988
;  87:  *
;  88: **/
;  89: static int AllocAreaInfo(rp, nverts)
;  90: 	struct RastPort *rp;
;  91: 	int nverts;
       | 0000  594F                           SUBQ.W      #4,A7
       | 0002  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
       | 0006  2E00                           MOVE.L      D0,D7
       | 0008  2A48                           MOVEA.L     A0,A5
;  92: {
;  93: 	struct AreaInfo *ai = NULL;
;  94: 	UBYTE *aidata = NULL;
       | 000A  97CB                           SUBA.L      A3,A3
;  95: 	
;  96: 	if (ai = rp->AreaInfo) 
       | 000C  206D 0010                      MOVEA.L     0010(A5),A0
       | 0010  2F4E 0014                      MOVE.L      A6,0014(A7)
       | 0014  2008                           MOVE.L      A0,D0
       | 0016  670E                           BEQ.B       0026
;  97: 	{
;  98: 		if (ai->MaxCount >= nverts)
       | 0018  3228 0012                      MOVE.W      0012(A0),D1
       | 001C  B247                           CMP.W       D7,D1
       | 001E  6D06                           BLT.B       0026
;  99: 			return(1);
       | 0020  7001                           MOVEQ       #01,D0
       | 0022  6000 0080                      BRA.W       00A4
; 100: 	}
; 101: 	
; 102: 	ai = (struct AreaInfo *) AllocMem(AISIZE, MEMF_CLEAR);
       | 0026  7018                           MOVEQ       #18,D0
       | 0028  7201                           MOVEQ       #01,D1
       | 002A  4841                           SWAP        D1
       | 002C  2C78 0004                      MOVEA.L     0004,A6
       | 0030  4EAE FF3A                      JSR         FF3A(A6)
       | 0034  2440                           MOVEA.L     D0,A2
; 103: 	if (ai == NULL)
       | 0036  4A80                           TST.L       D0
       | 0038  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 003C  6738                           BEQ.B       0076
; 104: 		goto cleanup;
; 105: 	
; 106: 	aidata = (UBYTE *) AllocMem((long) nverts * 5L, MEMF_CLEAR);
       | 003E  3007                           MOVE.W      D7,D0
       | 0040  48C0                           EXT.L       D0
       | 0042  2200                           MOVE.L      D0,D1
       | 0044  E581                           ASL.L       #2,D1
       | 0046  D081                           ADD.L       D1,D0
       | 0048  7201                           MOVEQ       #01,D1
       | 004A  4841                           SWAP        D1
       | 004C  2C78 0004                      MOVEA.L     0004,A6
       | 0050  4EAE FF3A                      JSR         FF3A(A6)
       | 0054  2640                           MOVEA.L     D0,A3
; 107: 	if (aidata == NULL)
       | 0056  4A80                           TST.L       D0
       | 0058  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 005C  6718                           BEQ.B       0076
; 108: 		goto cleanup;
; 109: 	
; 110: 	InitArea(ai, (WORD *) aidata, (long) nverts);
       | 005E  3007                           MOVE.W      D7,D0
       | 0060  48C0                           EXT.L       D0
       | 0062  204A                           MOVEA.L     A2,A0
       | 0064  224B                           MOVEA.L     A3,A1
       | 0066  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 006A  4EAE FEE6                      JSR         FEE6(A6)
; 111: 	
; 112: 	rp->AreaInfo = ai;
       | 006E  2B4A 0010                      MOVE.L      A2,0010(A5)
; 113: 	
; 114: 	return(2);
       | 0072  7002                           MOVEQ       #02,D0
       | 0074  602E                           BRA.B       00A4
; 115: 	
; 116: 	cleanup :
; 117: 	if (aidata)
       | 0076  200B                           MOVE.L      A3,D0
       | 0078  6714                           BEQ.B       008E
; 118: 		FreeMem(aidata, (long) nverts * 5L);
       | 007A  3007                           MOVE.W      D7,D0
       | 007C  48C0                           EXT.L       D0
       | 007E  2200                           MOVE.L      D0,D1
       | 0080  E581                           ASL.L       #2,D1
       | 0082  D081                           ADD.L       D1,D0
       | 0084  224B                           MOVEA.L     A3,A1
       | 0086  2C78 0004                      MOVEA.L     0004,A6
       | 008A  4EAE FF2E                      JSR         FF2E(A6)
       | 008E  2C6F 0014                      MOVEA.L     0014(A7),A6
; 119: 	if (ai)
       | 0092  200A                           MOVE.L      A2,D0
       | 0094  670C                           BEQ.B       00A2
; 120: 		FreeMem(ai,     AISIZE);
       | 0096  224A                           MOVEA.L     A2,A1
       | 0098  7018                           MOVEQ       #18,D0
       | 009A  2C78 0004                      MOVEA.L     0004,A6
       | 009E  4EAE FF2E                      JSR         FF2E(A6)
; 121: 	
; 122: 	return(0);
       | 00A2  7000                           MOVEQ       #00,D0
       | 00A4  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
       | 00A8  584F                           ADDQ.W      #4,A7
       | 00AA  4E75                           RTS
; 123: }
; 124: 
; 125: static int FreeAreaInfo(rp)
; 126: 	struct RastPort *rp;
       | 00AC  594F                           SUBQ.W      #4,A7
       | 00AE  48E7 2016                      MOVEM.L     D2/A3/A5-A6,-(A7)
       | 00B2  2A48                           MOVEA.L     A0,A5
; 127: {
; 128: 	struct AreaInfo *ai;
; 129: 	UBYTE *aidata;
; 130: 	
; 131: 	if (ai = rp->AreaInfo) 
       | 00B4  266D 0010                      MOVEA.L     0010(A5),A3
       | 00B8  2F4E 0010                      MOVE.L      A6,0010(A7)
       | 00BC  200B                           MOVE.L      A3,D0
       | 00BE  672E                           BEQ.B       00EE
; 132: 	{
; 133: 		if (aidata = (UBYTE *) ai->VctrTbl) 
       | 00C0  2053                           MOVEA.L     (A3),A0
       | 00C2  2008                           MOVE.L      A0,D0
       | 00C4  6718                           BEQ.B       00DE
; 134: 		{
; 135: 			FreeMem(aidata, (long) ai->MaxCount * 5L);
       | 00C6  322B 0012                      MOVE.W      0012(A3),D1
       | 00CA  48C1                           EXT.L       D1
       | 00CC  2401                           MOVE.L      D1,D2
       | 00CE  E582                           ASL.L       #2,D2
       | 00D0  D481                           ADD.L       D1,D2
       | 00D2  2240                           MOVEA.L     D0,A1
       | 00D4  2002                           MOVE.L      D2,D0
       | 00D6  2C78 0004                      MOVEA.L     0004,A6
       | 00DA  4EAE FF2E                      JSR         FF2E(A6)
; 136: 		}
; 137: 		FreeMem(ai, AISIZE);
       | 00DE  224B                           MOVEA.L     A3,A1
       | 00E0  7018                           MOVEQ       #18,D0
       | 00E2  2C78 0004                      MOVEA.L     0004,A6
       | 00E6  4EAE FF2E                      JSR         FF2E(A6)
; 138: 		rp->AreaInfo = NULL;
       | 00EA  42AD 0010                      CLR.L       0010(A5)
; 139: 	}
; 140: 	
; 141: 	return(0);
       | 00EE  7000                           MOVEQ       #00,D0
       | 00F0  4CDF 6804                      MOVEM.L     (A7)+,D2/A3/A5-A6
       | 00F4  584F                           ADDQ.W      #4,A7
       | 00F6  4E75                           RTS
; 142: }
; 143: 
; 144: 
; 145: /**
; 146:  *
; 147:  *    NAME
; 148:  *
; 149:  * AllocTmpRas()
; 150:  * =============
; 151:  *
; 152:  *    SYNOPSIS
; 153:  *
; 154:  * AllocTmpRas(rp, width, height)
; 155:  *
; 156:  *    FUNCTION
; 157:  *
; 158:  * Function to allocate and initialize and free a TmpRas structure
; 159:  * for Area functions.
; 160:  *
; 161:  *    INPUTS
; 162:  *
; 163:  * struct RastPort *rp Rastport to be initialized
; 164:  * int width, height Size of TmpRas needed
; 165:  *
; 166:  *    RESULT
; 167:  *
; 168:  * The fields in Rastport rp are initialized.
; 169:  *
; 170:  *    ADDITIONAL CONSIDERATIONS
; 171:  *
; 172:  *    BUGS
; 173:  *
; 174:  * None known.
; 175:  *
; 176:  *    AUTHOR
; 177:  *
; 178:  * W.G.J. Langeveld, 24 July 1988
; 179:  *
; 180: **/
; 181: long AllocTmpRas(rp, width, height)
; 182: 	struct RastPort *rp;
; 183: 	int width, height;
       | 00F8  594F                           SUBQ.W      #4,A7
       | 00FA  48E7 0336                      MOVEM.L     D6-D7/A2-A3/A5-A6,-(A7)
       | 00FE  2C01                           MOVE.L      D1,D6
       | 0100  2E00                           MOVE.L      D0,D7
       | 0102  2A48                           MOVEA.L     A0,A5
; 184: {
; 185: 	struct TmpRas *tr = NULL;
; 186: 	UBYTE *trdata = NULL;
       | 0104  97CB                           SUBA.L      A3,A3
; 187: 	
; 188: 	if (tr = rp->TmpRas) 
       | 0106  206D 000C                      MOVEA.L     000C(A5),A0
       | 010A  2F4E 0018                      MOVE.L      A6,0018(A7)
       | 010E  2008                           MOVE.L      A0,D0
       | 0110  6726                           BEQ.B       0138
; 189: 	{
; 190: 		if (tr->Size >= (long) RASSIZE((long) width, (long) height))
       | 0112  3207                           MOVE.W      D7,D1
       | 0114  48C1                           EXT.L       D1
       | 0116  700F                           MOVEQ       #0F,D0
       | 0118  D280                           ADD.L       D0,D1
       | 011A  E689                           LSR.L       #3,D1
       | 011C  0281 0000 FFFE                 ANDI.L      #0000FFFE,D1
       | 0122  3006                           MOVE.W      D6,D0
       | 0124  48C0                           EXT.L       D0
       | 0126  6100  0000-XX.1                BSR.W       __CXM22
       | 012A  2228 0004                      MOVE.L      0004(A0),D1
       | 012E  B280                           CMP.L       D0,D1
       | 0130  6D06                           BLT.B       0138
; 191: 			return(1);
       | 0132  7001                           MOVEQ       #01,D0
       | 0134  6000 008C                      BRA.W       01C2
; 192: 	}
; 193: 	
; 194: 	tr = (struct TmpRas *) AllocMem (TRSIZE, MEMF_CLEAR);
       | 0138  7008                           MOVEQ       #08,D0
       | 013A  7201                           MOVEQ       #01,D1
       | 013C  4841                           SWAP        D1
       | 013E  2C78 0004                      MOVEA.L     0004,A6
       | 0142  4EAE FF3A                      JSR         FF3A(A6)
       | 0146  2440                           MOVEA.L     D0,A2
; 195: 	if (tr == NULL)
       | 0148  4A80                           TST.L       D0
       | 014A  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 014E  6746                           BEQ.B       0196
; 196: 		goto cleanup;
; 197: 	
; 198: 	trdata = (UBYTE *) AllocRaster((long) width, (long) height);
       | 0150  3007                           MOVE.W      D7,D0
       | 0152  48C0                           EXT.L       D0
       | 0154  3206                           MOVE.W      D6,D1
       | 0156  48C1                           EXT.L       D1
       | 0158  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 015C  4EAE FE14                      JSR         FE14(A6)
       | 0160  2640                           MOVEA.L     D0,A3
; 199: 	if (trdata == NULL)
       | 0162  4A80                           TST.L       D0
       | 0164  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 0168  672C                           BEQ.B       0196
; 200: 		goto cleanup;
; 201: 	
; 202: 	InitTmpRas(tr, trdata, (long) RASSIZE((long) width, (long) height) );
       | 016A  3007                           MOVE.W      D7,D0
       | 016C  48C0                           EXT.L       D0
       | 016E  720F                           MOVEQ       #0F,D1
       | 0170  D081                           ADD.L       D1,D0
       | 0172  E688                           LSR.L       #3,D0
       | 0174  0280 0000 FFFE                 ANDI.L      #0000FFFE,D0
       | 017A  3206                           MOVE.W      D6,D1
       | 017C  48C1                           EXT.L       D1
       | 017E  6100  0000-XX.1                BSR.W       __CXM22
       | 0182  204A                           MOVEA.L     A2,A0
       | 0184  224B                           MOVEA.L     A3,A1
       | 0186  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 018A  4EAE FE2C                      JSR         FE2C(A6)
; 203: 	
; 204: 	rp->TmpRas = tr;
       | 018E  2B4A 000C                      MOVE.L      A2,000C(A5)
; 205: 	
; 206: 	return(2);
       | 0192  7002                           MOVEQ       #02,D0
       | 0194  602C                           BRA.B       01C2
; 207: 	
; 208: 	cleanup :
; 209: 	if (trdata)
       | 0196  200B                           MOVE.L      A3,D0
       | 0198  6712                           BEQ.B       01AC
; 210: 		FreeRaster(trdata, (long) width, (long) height);
       | 019A  3007                           MOVE.W      D7,D0
       | 019C  48C0                           EXT.L       D0
       | 019E  3206                           MOVE.W      D6,D1
       | 01A0  48C1                           EXT.L       D1
       | 01A2  204B                           MOVEA.L     A3,A0
       | 01A4  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 01A8  4EAE FE0E                      JSR         FE0E(A6)
       | 01AC  2C6F 0018                      MOVEA.L     0018(A7),A6
; 211: 	if (tr)
       | 01B0  200A                           MOVE.L      A2,D0
       | 01B2  670C                           BEQ.B       01C0
; 212: 		FreeMem(tr,     TRSIZE);
       | 01B4  224A                           MOVEA.L     A2,A1
       | 01B6  7008                           MOVEQ       #08,D0
       | 01B8  2C78 0004                      MOVEA.L     0004,A6
       | 01BC  4EAE FF2E                      JSR         FF2E(A6)
; 213: 	
; 214: 	return(0);
       | 01C0  7000                           MOVEQ       #00,D0
       | 01C2  4CDF 6CC0                      MOVEM.L     (A7)+,D6-D7/A2-A3/A5-A6
       | 01C6  584F                           ADDQ.W      #4,A7
       | 01C8  4E75                           RTS
; 215: }
; 216: 
; 217: long FreeTmpRas(rp)
; 218: 	struct RastPort *rp;
       | 01CA  594F                           SUBQ.W      #4,A7
       | 01CC  48E7 0016                      MOVEM.L     A3/A5-A6,-(A7)
       | 01D0  2A48                           MOVEA.L     A0,A5
; 219: {
; 220: 	struct TmpRas *tr;
; 221: 	
; 222: 	if (tr = rp->TmpRas) 
       | 01D2  266D 000C                      MOVEA.L     000C(A5),A3
       | 01D6  2F4E 000C                      MOVE.L      A6,000C(A7)
       | 01DA  200B                           MOVE.L      A3,D0
       | 01DC  671A                           BEQ.B       01F8
; 223: 	{
; 224: 		FreeMem(tr->RasPtr, tr->Size);
       | 01DE  2253                           MOVEA.L     (A3),A1
       | 01E0  202B 0004                      MOVE.L      0004(A3),D0
       | 01E4  2C78 0004                      MOVEA.L     0004,A6
       | 01E8  4EAE FF2E                      JSR         FF2E(A6)
; 225: 		FreeMem(tr, TRSIZE);
       | 01EC  224B                           MOVEA.L     A3,A1
       | 01EE  7008                           MOVEQ       #08,D0
       | 01F0  4EAE FF2E                      JSR         FF2E(A6)
; 226: 		rp->TmpRas = NULL;
       | 01F4  42AD 000C                      CLR.L       000C(A5)
; 227: 	}
; 228: 	
; 229: 	return(0);
       | 01F8  7000                           MOVEQ       #00,D0
       | 01FA  4CDF 6800                      MOVEM.L     (A7)+,A3/A5-A6
       | 01FE  584F                           ADDQ.W      #4,A7
       | 0200  4E75                           RTS
; 230: }
; 231: 
; 232: /**
; 233:  *
; 234:  *    NAME
; 235:  *
; 236:  * AreaPolyDraw()
; 237:  * ==============
; 238:  *
; 239:  *    SYNOPSIS
; 240:  *
; 241:  * AreaPolyDraw(rp, vertex, ppen, xoff, yoff)
; 242:  *
; 243:  *    FUNCTION
; 244:  *
; 245:  * Draws a filled n-vertex polygon according to the outline in linked
; 246:  * list of vertices. Performs pre-clipping, allows various textures and
; 247:  * 4-pixel dithering patterns.
; 248:  *
; 249:  *    INPUTS
; 250:  *
; 251:  * w  Pointer to a window to receive the imagery.
; 252:  *       vertex  Ptr to linked list of vtx structures
; 253:  * ppen  Pattern pen. 0->15: use APen 0 through 15.
; 254:  *                If texture flag set, use one of 16 textures.
; 255:  *                If dither flag is set use one of 125 dithers.
; 256:  *                If outline flag is set, use outline.
; 257:  * xoff  X offset for polygon
; 258:  * yoff  Y offset for polygon
; 259:  *
; 260:  *    RESULT
; 261:  *
; 262:  * Zero on failure, non-zero otherwise.
; 263:  *
; 264:  *    ADDITIONAL CONSIDERATIONS
; 265:  *
; 266:  * This routine allocates its own AreaInfo and TmpRas structures, and
; 267:  * frees them as well. If the RastPort already had these, they are saved
; 268:  * and restored at the end.
; 269:  * The routine preclips all AreaMoves and AreaDraws so they won't
; 270:  *       require a TmpRas larger than a single full bitplane the size of
; 271:  *       the window. Window borders are taken into account.
; 272:  *
; 273:  *    BUGS
; 274:  *
; 275:  * None known.
; 276:  *
; 277:  *    AUTHOR
; 278:  *
; 279:  * W.G.J. Langeveld, 24 July 1988
; 280:  *          revised: November 1989.
; 281:  *
; 282: **/
; 283: AreaPolyDraw(w, v, ppen, xoff, yoff)
; 284: 	struct Window *w;
; 285: 	struct vtx *v;
; 286: 	int ppen, xoff, yoff;
       | 0202  9EFC 0114                      SUBA.W      #0114,A7
       | 0206  48E7 3F36                      MOVEM.L     D2-D7/A2-A3/A5-A6,-(A7)
       | 020A  3C2F 0140                      MOVE.W      0140(A7),D6
       | 020E  2E01                           MOVE.L      D1,D7
       | 0210  2A49                           MOVEA.L     A1,A5
; 287: {
; 288: 	register int n;
; 289: 	register struct vtx *tmp;
; 290: 	register int pow, clipped = 0;
       | 0212  426F 0120                      CLR.W       0120(A7)
; 291: 	int resai = 0, restr = 0, res = 0, notmoved, type;
       | 0216  426F 0134                      CLR.W       0134(A7)
; 292: 	struct RastPort *rp;
; 293: 	struct RastPort tmprp;
; 294: 	int minx, maxx, miny, maxy;
; 295: 	int clipxmin, clipymin, clipxmax, clipymax;
; 296: 	unsigned int colpat[64];
; 297: 	
; 298: 	if (w == NULL)
       | 021A  47EF 0032                      LEA         0032(A7),A3
       | 021E  36C0                           MOVE.W      D0,(A3)+
       | 0220  26C8                           MOVE.L      A0,(A3)+
       | 0222  26CE                           MOVE.L      A6,(A3)+
       | 0224  2208                           MOVE.L      A0,D1
       | 0226  6606                           BNE.B       022E
; 299: 		return(0);
       | 0228  7000                           MOVEQ       #00,D0
       | 022A  6000 0404                      BRA.W       0630
; 300: 	rp = w->RPort;
       | 022E  2468 0032                      MOVEA.L     0032(A0),A2
; 301: 	
; 302: 	if (v == NULL)
       | 0232  220D                           MOVE.L      A5,D1
       | 0234  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 0238  6606                           BNE.B       0240
; 303: 		return(0);
       | 023A  7000                           MOVEQ       #00,D0
       | 023C  6000 03F2                      BRA.W       0630
; 304: 	if (ppen & APD_NOFILL)
       | 0240  0800 000A                      BTST        #000A,D0
       | 0244  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 0248  6706                           BEQ.B       0250
; 305: 		return(0);
       | 024A  7000                           MOVEQ       #00,D0
       | 024C  6000 03E2                      BRA.W       0630
; 306: 	/*
; 307: 	 *   See if we need clipping
; 308: 	 */
; 309: 	clipxmin =             w->BorderLeft;
       | 0250  47E8 0036                      LEA         0036(A0),A3
       | 0254  1A1B                           MOVE.B      (A3)+,D5
; 310: 	clipymin =             w->BorderTop;
       | 0256  4885                           EXT.W       D5
       | 0258  181B                           MOVE.B      (A3)+,D4
; 311: 	clipxmax = w->Width  - w->BorderRight - 1;
       | 025A  4884                           EXT.W       D4
       | 025C  101B                           MOVE.B      (A3)+,D0
       | 025E  4880                           EXT.W       D0
       | 0260  3228 0008                      MOVE.W      0008(A0),D1
       | 0264  9240                           SUB.W       D0,D1
; 312: 	clipymax = w->Height - w->BorderBottom - 1;
       | 0266  5341                           SUBQ.W      #1,D1
       | 0268  1028 0039                      MOVE.B      0039(A0),D0
       | 026C  4880                           EXT.W       D0
       | 026E  3428 000A                      MOVE.W      000A(A0),D2
       | 0272  9440                           SUB.W       D0,D2
; 313: 	
; 314: 	n = FindAreaSize(v, &minx, &miny, &maxx, &maxy);
       | 0274  5342                           SUBQ.W      #1,D2
       | 0276  486F 0130                      PEA         0130(A7)
       | 027A  486F 0130                      PEA         0130(A7)
       | 027E  486F 0130                      PEA         0130(A7)
       | 0282  3F41 0036                      MOVE.W      D1,0036(A7)
       | 0286  3F42 0038                      MOVE.W      D2,0038(A7)
       | 028A  204D                           MOVEA.L     A5,A0
       | 028C  43EF 0130                      LEA         0130(A7),A1
       | 0290  2C6F 0044                      MOVEA.L     0044(A7),A6
       | 0294  6100 03A4                      BSR.W       063A
       | 0298  4FEF 000C                      LEA         000C(A7),A7
; 315: 	/*
; 316: 	 *   If so, clip the vertexlist, compute new size and set flag.
; 317: 	 */
; 318: 	if ((minx < clipxmin) || (miny < clipymin) ||
       | 029C  3F40 0138                      MOVE.W      D0,0138(A7)
       | 02A0  302F 0124                      MOVE.W      0124(A7),D0
       | 02A4  B045                           CMP.W       D5,D0
       | 02A6  6D1C                           BLT.B       02C4
       | 02A8  302F 0128                      MOVE.W      0128(A7),D0
       | 02AC  B044                           CMP.W       D4,D0
       | 02AE  6D14                           BLT.B       02C4
; 319: 	(maxx > clipxmax) || (maxy > clipymax)  ) 
       | 02B0  302F 002A                      MOVE.W      002A(A7),D0
       | 02B4  322F 012C                      MOVE.W      012C(A7),D1
       | 02B8  B240                           CMP.W       D0,D1
       | 02BA  6E08                           BGT.B       02C4
       | 02BC  322F 0130                      MOVE.W      0130(A7),D1
       | 02C0  B242                           CMP.W       D2,D1
       | 02C2  6F36                           BLE.B       02FA
; 320: 	{
; 321: 		v = AreaPolyClip(v, clipxmin, clipymin, clipxmax, clipymax);
       | 02C4  3F02                           MOVE.W      D2,-(A7)
       | 02C6  3F2F 002C                      MOVE.W      002C(A7),-(A7)
       | 02CA  2005                           MOVE.L      D5,D0
       | 02CC  2204                           MOVE.L      D4,D1
       | 02CE  204D                           MOVEA.L     A5,A0
       | 02D0  6100 07A6                      BSR.W       0A78
       | 02D4  2A40                           MOVEA.L     D0,A5
; 322: 		n = FindAreaSize(v, &minx, &miny, &maxx, &maxy);
       | 02D6  486F 0134                      PEA         0134(A7)
       | 02DA  486F 0134                      PEA         0134(A7)
       | 02DE  486F 0134                      PEA         0134(A7)
       | 02E2  2040                           MOVEA.L     D0,A0
       | 02E4  43EF 0134                      LEA         0134(A7),A1
       | 02E8  6100 0350                      BSR.W       063A
       | 02EC  4FEF 0010                      LEA         0010(A7),A7
; 323: 		clipped = 1;
       | 02F0  3F7C 0001 0120                 MOVE.W      #0001,0120(A7)
       | 02F6  3F40 0138                      MOVE.W      D0,0138(A7)
; 324: 	}
; 325: 	/*
; 326: 	 *   Check for empty set
; 327: 	 */
; 328: 	if (v == NULL)
       | 02FA  200D                           MOVE.L      A5,D0
       | 02FC  6700 0332                      BEQ.W       0630
; 329: 		return(0);
; 330: 	if (n == 0)
       | 0300  4A6F 0138                      TST.W       0138(A7)
       | 0304  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 0308  6700 0316                      BEQ.W       0620
; 331: 		goto cleanup;
; 332: 	/*
; 333: 	 *   Make a copy of the rastport
; 334: 	 */
; 335: 	movmem(rp, &tmprp, sizeof(struct RastPort));
       | 030C  204A                           MOVEA.L     A2,A0
       | 030E  43EF 00BC                      LEA         00BC(A7),A1
       | 0312  7064                           MOVEQ       #64,D0
       | 0314  6100  0000-XX.1                BSR.W       @movmem
; 336: 	/*
; 337: 	 *   Add an outline if requested
; 338: 	 */
; 339: 	if (ppen & APD_OUTLINE) 
       | 0318  082F 0003 0032                 BTST        #0003,0032(A7)
       | 031E  670E                           BEQ.B       032E
; 340: 	{
; 341: 		SetOPen(&tmprp, (long) tmprp.FgPen)
       | 0320  1F6F 00D5 00D7                 MOVE.B      00D5(A7),00D7(A7)
       | 0326  08EF 0003 00DD                 BSET        #0003,00DD(A7)
       | 032C  6006                           BRA.B       0334
; 342: 	}
; 343: 	else
; 344: 	{
; 345: 		BNDRYOFF(&tmprp);
       | 032E  08AF 0003 00DD                 BCLR        #0003,00DD(A7)
; 346: 	}
; 347: 	/*
; 348: 	 *   Set APen
; 349: 	 */
; 350: 	if ((ppen & 0xFF) < 16)
       | 0334  303C 00FF                      MOVE.W      #00FF,D0
       | 0338  C06F 0032                      AND.W       0032(A7),D0
       | 033C  7210                           MOVEQ       #10,D1
       | 033E  B041                           CMP.W       D1,D0
       | 0340  6C0E                           BGE.B       0350
; 351: 		SetAPen(&tmprp, (long) (ppen & 0xFF));
       | 0342  48C0                           EXT.L       D0
       | 0344  43EF 00BC                      LEA         00BC(A7),A1
       | 0348  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 034C  4EAE FEAA                      JSR         FEAA(A6)
; 352: 	/*
; 353: 	 *   If object still too large, just draw it, don't bother filling
; 354: 	 */
; 355: 	if ((minx < clipxmin) || (miny < clipymin) ||
       | 0350  302F 0124                      MOVE.W      0124(A7),D0
       | 0354  B045                           CMP.W       D5,D0
       | 0356  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 035A  6D1E                           BLT.B       037A
       | 035C  302F 0128                      MOVE.W      0128(A7),D0
       | 0360  B044                           CMP.W       D4,D0
       | 0362  6D16                           BLT.B       037A
; 356: 	(maxx > clipxmax) || (maxy > clipymax)  ) 
       | 0364  302F 012C                      MOVE.W      012C(A7),D0
       | 0368  B06F 002A                      CMP.W       002A(A7),D0
       | 036C  6E0C                           BGT.B       037A
       | 036E  302F 0130                      MOVE.W      0130(A7),D0
       | 0372  B06F 002C                      CMP.W       002C(A7),D0
       | 0376  6F00 00A8                      BLE.W       0420
; 357: 	{
; 358: 		tmp = v;
       | 037A  264D                           MOVEA.L     A5,A3
; 359: 		notmoved = 1;
       | 037C  7801                           MOVEQ       #01,D4
; 360: 		while (tmp) 
       | 037E  6000 0090                      BRA.W       0410
; 361: 		{
; 362: 			type = tmp->type;
       | 0382  3A2B 0004                      MOVE.W      0004(A3),D5
; 363: 			if (notmoved && (type == AREADRAW))
       | 0386  4A44                           TST.W       D4
       | 0388  6708                           BEQ.B       0392
       | 038A  2005                           MOVE.L      D5,D0
       | 038C  5540                           SUBQ.W      #2,D0
       | 038E  6602                           BNE.B       0392
; 364: 				type = AREAMOVE;
       | 0390  7A01                           MOVEQ       #01,D5
; 365: 			switch (type) 
       | 0392  3005                           MOVE.W      D5,D0
       | 0394  5340                           SUBQ.W      #1,D0
       | 0396  670E                           BEQ.B       03A6
       | 0398  5340                           SUBQ.W      #1,D0
       | 039A  672A                           BEQ.B       03C6
       | 039C  5340                           SUBQ.W      #1,D0
       | 039E  6744                           BEQ.B       03E4
       | 03A0  5340                           SUBQ.W      #1,D0
       | 03A2  6740                           BEQ.B       03E4
       | 03A4  6068                           BRA.B       040E
; 366: 			{
; 367: 			case AREAMOVE :
; 368: 				Move(&tmprp, (long) (tmp->x + xoff), (long) (tmp->y + yoff));
       | 03A6  302B 0006                      MOVE.W      0006(A3),D0
       | 03AA  D047                           ADD.W       D7,D0
       | 03AC  48C0                           EXT.L       D0
       | 03AE  322B 0008                      MOVE.W      0008(A3),D1
       | 03B2  D246                           ADD.W       D6,D1
       | 03B4  48C1                           EXT.L       D1
       | 03B6  43EF 00BC                      LEA         00BC(A7),A1
       | 03BA  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 03BE  4EAE FF10                      JSR         FF10(A6)
; 369: 				notmoved = 0;
       | 03C2  7800                           MOVEQ       #00,D4
; 370: 				break;
       | 03C4  6044                           BRA.B       040A
; 371: 			case AREADRAW :
; 372: 				Draw(&tmprp, (long) (tmp->x + xoff), (long) (tmp->y + yoff) );
       | 03C6  302B 0006                      MOVE.W      0006(A3),D0
       | 03CA  D047                           ADD.W       D7,D0
       | 03CC  48C0                           EXT.L       D0
       | 03CE  322B 0008                      MOVE.W      0008(A3),D1
       | 03D2  D246                           ADD.W       D6,D1
       | 03D4  48C1                           EXT.L       D1
       | 03D6  43EF 00BC                      LEA         00BC(A7),A1
       | 03DA  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 03DE  4EAE FF0A                      JSR         FF0A(A6)
; 373: 				break;
       | 03E2  6026                           BRA.B       040A
; 374: 			case AREACIRCLE :
; 375: 			case AREAELLIPSE :
; 376: 				DrawEllipse(&tmprp, (long) (tmp->x + xoff), (long) (tmp->y + yoff),
       | 03E4  45EB 0006                      LEA         0006(A3),A2
       | 03E8  301A                           MOVE.W      (A2)+,D0
       | 03EA  D047                           ADD.W       D7,D0
       | 03EC  48C0                           EXT.L       D0
       | 03EE  321A                           MOVE.W      (A2)+,D1
       | 03F0  D246                           ADD.W       D6,D1
       | 03F2  48C1                           EXT.L       D1
       | 03F4  341A                           MOVE.W      (A2)+,D2
       | 03F6  48C2                           EXT.L       D2
       | 03F8  362B 000C                      MOVE.W      000C(A3),D3
; 377: 				(long) tmp->a         , (long) tmp->b );
       | 03FC  48C3                           EXT.L       D3
       | 03FE  43EF 00BC                      LEA         00BC(A7),A1
       | 0402  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 0406  4EAE FF4C                      JSR         FF4C(A6)
; 378: 				break;
; 379: 			}
       | 040A  2C6F 0038                      MOVEA.L     0038(A7),A6
; 380: 			tmp = tmp->next;
       | 040E  2653                           MOVEA.L     (A3),A3
; 381: 		}
       | 0410  200B                           MOVE.L      A3,D0
       | 0412  6600 FF6E                      BNE.W       0382
; 382: 		res = 1;
       | 0416  3F7C 0001 0134                 MOVE.W      #0001,0134(A7)
       | 041C  6000 01FE                      BRA.W       061C
; 383: 	}
; 384: 	else
; 385: 	{
; 386: 		/*
; 387: 		 *   Allocate new AreaInfo/TmpRas (resxx = 2) or use the ones we have (resxx = 1).
; 388: 		 */
; 389: 		resai = AllocAreaInfo(&tmprp, n + 10);
       | 0420  700A                           MOVEQ       #0A,D0
       | 0422  D06F 0138                      ADD.W       0138(A7),D0
       | 0426  41EF 00BC                      LEA         00BC(A7),A0
       | 042A  6100 FBD4                      BSR.W       0000
       | 042E  3A00                           MOVE.W      D0,D5
; 390: 		restr = AllocTmpRas(&tmprp, maxx - minx + 32, maxy - miny + 2);
       | 0430  322F 012C                      MOVE.W      012C(A7),D1
       | 0434  926F 0124                      SUB.W       0124(A7),D1
       | 0438  0641 0020                      ADDI.W      #0020,D1
       | 043C  342F 0130                      MOVE.W      0130(A7),D2
       | 0440  946F 0128                      SUB.W       0128(A7),D2
       | 0444  5442                           ADDQ.W      #2,D2
       | 0446  3F40 002A                      MOVE.W      D0,002A(A7)
       | 044A  2001                           MOVE.L      D1,D0
       | 044C  2202                           MOVE.L      D2,D1
       | 044E  41EF 00BC                      LEA         00BC(A7),A0
       | 0452  6100 FCA4                      BSR.W       00F8
; 391: 		/*
; 392: 		 *   AreaMove, AreaDraw, AreaCircle, AreaEllipse.
; 393: 		 */
; 394: 		if (resai && restr) 
       | 0456  3F40 0028                      MOVE.W      D0,0028(A7)
       | 045A  4A45                           TST.W       D5
       | 045C  6700 019A                      BEQ.W       05F8
       | 0460  4A40                           TST.W       D0
       | 0462  6700 0194                      BEQ.W       05F8
; 395: 		{
; 396: 			tmp = v;
       | 0466  264D                           MOVEA.L     A5,A3
; 397: 			notmoved = 1;
       | 0468  7801                           MOVEQ       #01,D4
; 398: 			while (tmp) 
       | 046A  6000 0090                      BRA.W       04FC
; 399: 			{
; 400: 				type = tmp->type;
       | 046E  3A2B 0004                      MOVE.W      0004(A3),D5
; 401: 				if (notmoved && (type == AREADRAW))
       | 0472  4A44                           TST.W       D4
       | 0474  6708                           BEQ.B       047E
       | 0476  2005                           MOVE.L      D5,D0
       | 0478  5540                           SUBQ.W      #2,D0
       | 047A  6602                           BNE.B       047E
; 402: 					type = AREAMOVE;
       | 047C  7A01                           MOVEQ       #01,D5
; 403: 				switch (type) 
       | 047E  3005                           MOVE.W      D5,D0
       | 0480  5340                           SUBQ.W      #1,D0
       | 0482  670E                           BEQ.B       0492
       | 0484  5340                           SUBQ.W      #1,D0
       | 0486  672A                           BEQ.B       04B2
       | 0488  5340                           SUBQ.W      #1,D0
       | 048A  6744                           BEQ.B       04D0
       | 048C  5340                           SUBQ.W      #1,D0
       | 048E  6740                           BEQ.B       04D0
       | 0490  6068                           BRA.B       04FA
; 404: 				{
; 405: 				case AREAMOVE :
; 406: 					AreaMove(&tmprp, (long) (tmp->x + xoff),
       | 0492  302B 0006                      MOVE.W      0006(A3),D0
       | 0496  D047                           ADD.W       D7,D0
       | 0498  48C0                           EXT.L       D0
       | 049A  322B 0008                      MOVE.W      0008(A3),D1
       | 049E  D246                           ADD.W       D6,D1
       | 04A0  48C1                           EXT.L       D1
; 407: 					(long) (tmp->y + yoff));
       | 04A2  43EF 00BC                      LEA         00BC(A7),A1
       | 04A6  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 04AA  4EAE FF04                      JSR         FF04(A6)
; 408: 					notmoved = 0;
       | 04AE  7800                           MOVEQ       #00,D4
; 409: 					break;
       | 04B0  6044                           BRA.B       04F6
; 410: 				case AREADRAW :
; 411: 					AreaDraw(&tmprp, (long) (tmp->x + xoff),
       | 04B2  302B 0006                      MOVE.W      0006(A3),D0
       | 04B6  D047                           ADD.W       D7,D0
       | 04B8  48C0                           EXT.L       D0
       | 04BA  322B 0008                      MOVE.W      0008(A3),D1
       | 04BE  D246                           ADD.W       D6,D1
       | 04C0  48C1                           EXT.L       D1
; 412: 					(long) (tmp->y + yoff) );
       | 04C2  43EF 00BC                      LEA         00BC(A7),A1
       | 04C6  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 04CA  4EAE FEFE                      JSR         FEFE(A6)
; 413: 					break;
       | 04CE  6026                           BRA.B       04F6
; 414: 				case AREACIRCLE :
; 415: 				case AREAELLIPSE :
; 416: 					AreaEllipse(&tmprp, (long) (tmp->x + xoff),
       | 04D0  45EB 0006                      LEA         0006(A3),A2
       | 04D4  301A                           MOVE.W      (A2)+,D0
       | 04D6  D047                           ADD.W       D7,D0
       | 04D8  48C0                           EXT.L       D0
       | 04DA  321A                           MOVE.W      (A2)+,D1
       | 04DC  D246                           ADD.W       D6,D1
       | 04DE  48C1                           EXT.L       D1
       | 04E0  341A                           MOVE.W      (A2)+,D2
       | 04E2  48C2                           EXT.L       D2
       | 04E4  362B 000C                      MOVE.W      000C(A3),D3
; 417: 					(long) (tmp->y + yoff),
; 418: 					(long) tmp->a         ,
; 419: 					(long) tmp->b );
       | 04E8  48C3                           EXT.L       D3
       | 04EA  43EF 00BC                      LEA         00BC(A7),A1
       | 04EE  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 04F2  4EAE FF46                      JSR         FF46(A6)
; 420: 					break;
; 421: 				}
       | 04F6  2C6F 0038                      MOVEA.L     0038(A7),A6
; 422: 				tmp = tmp->next;
       | 04FA  2653                           MOVEA.L     (A3),A3
; 423: 			}
       | 04FC  200B                           MOVE.L      A3,D0
       | 04FE  6600 FF6E                      BNE.W       046E
; 424: 			/*
; 425: 			 *   Set up an areafill pattern
; 426: 			 */
; 427: 			setmem(colpat, 128, 0);
       | 0502  41EF 003C                      LEA         003C(A7),A0
       | 0506  303C 0080                      MOVE.W      #0080,D0
       | 050A  7200                           MOVEQ       #00,D1
       | 050C  6100  0000-XX.1                BSR.W       @setmem
; 428: 			/*
; 429: 			 *   Copy either a texture...
; 430: 			 */
; 431: 			if (ppen & APD_TEXTURE) 
       | 0510  3A2F 0032                      MOVE.W      0032(A7),D5
       | 0514  0805 0008                      BTST        #0008,D5
       | 0518  6700 008E                      BEQ.W       05A8
; 432: 			{
; 433: 				pow = arpt[ppen & 0xF].power;
       | 051C  3005                           MOVE.W      D5,D0
       | 051E  0240 000F                      ANDI.W      #000F,D0
       | 0522  48C0                           EXT.L       D0
       | 0524  2200                           MOVE.L      D0,D1
       | 0526  E581                           ASL.L       #2,D1
       | 0528  9280                           SUB.L       D0,D1
       | 052A  D281                           ADD.L       D1,D1
       | 052C  47EC  00FA-01.2                LEA         01.000000FA(A4),A3
       | 0530  D7C1                           ADDA.L      D1,A3
       | 0532  3A13                           MOVE.W      (A3),D5
; 434: 				movmem(arpt[ppen & 0xF].data, colpat,
       | 0534  6A12                           BPL.B       0548
       | 0536  7001                           MOVEQ       #01,D0
       | 0538  3200                           MOVE.W      D0,D1
       | 053A  9245                           SUB.W       D5,D1
       | 053C  7000                           MOVEQ       #00,D0
       | 053E  03C0                           BSET.L      D1,D0
       | 0540  2200                           MOVE.L      D0,D1
       | 0542  E541                           ASL.W       #2,D1
       | 0544  9240                           SUB.W       D0,D1
       | 0546  6008                           BRA.B       0550
       | 0548  3005                           MOVE.W      D5,D0
       | 054A  5240                           ADDQ.W      #1,D0
       | 054C  7200                           MOVEQ       #00,D1
       | 054E  01C1                           BSET.L      D0,D1
; 435: 				(pow < 0) ? (1 << (1 - pow)) * 3 : 1 << (pow + 1));
       | 0550  2001                           MOVE.L      D1,D0
       | 0552  206B 0002                      MOVEA.L     0002(A3),A0
       | 0556  43EF 003C                      LEA         003C(A7),A1
       | 055A  6100  0000-XX.1                BSR.W       @movmem
; 436: 				
; 437: 				SetAfPt(&tmprp, (unsigned short *) colpat, pow); // Stop a complaint
       | 055E  41EF 003C                      LEA         003C(A7),A0
       | 0562  2F48 00C4                      MOVE.L      A0,00C4(A7)
       | 0566  3005                           MOVE.W      D5,D0
       | 0568  1F40 00D9                      MOVE.B      D0,00D9(A7)
; 438: 				if (pow < 0)
       | 056C  4A45                           TST.W       D5
       | 056E  6A16                           BPL.B       0586
; 439: 					SetAPen(&tmprp, 255L);
       | 0570  43EF 00BC                      LEA         00BC(A7),A1
       | 0574  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 0578  7000                           MOVEQ       #00,D0
       | 057A  4600                           NOT.B       D0
       | 057C  4EAE FEAA                      JSR         FEAA(A6)
       | 0580  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 0584  600E                           BRA.B       0594
; 440: 				else
; 441: 					SetAPen(&tmprp, 1L);
       | 0586  43EF 00BC                      LEA         00BC(A7),A1
       | 058A  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 058E  7001                           MOVEQ       #01,D0
       | 0590  4EAE FEAA                      JSR         FEAA(A6)
; 442: 				SetDrMd(&tmprp, JAM2);
       | 0594  43EF 00BC                      LEA         00BC(A7),A1
       | 0598  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 059C  7001                           MOVEQ       #01,D0
       | 059E  4EAE FE9E                      JSR         FE9E(A6)
       | 05A2  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 05A6  603A                           BRA.B       05E2
; 443: 			}
; 444: 			/*
; 445: 			 *   ...or a dithered color
; 446: 			 */
; 447: 			else
; 448: 			if (ppen & APD_DITHER) 
       | 05A8  0805 0009                      BTST        #0009,D5
       | 05AC  6734                           BEQ.B       05E2
; 449: 			{
; 450: 				setdither(colpat, ppen & 0xFF);
       | 05AE  3005                           MOVE.W      D5,D0
       | 05B0  0240 00FF                      ANDI.W      #00FF,D0
       | 05B4  41EF 003C                      LEA         003C(A7),A0
       | 05B8  6100 01C0                      BSR.W       077A
; 451: 				
; 452: 				SetAfPt(&tmprp, (unsigned short *) colpat, -1);
       | 05BC  41EF 003C                      LEA         003C(A7),A0
       | 05C0  2F48 00C4                      MOVE.L      A0,00C4(A7)
       | 05C4  50EF 00D9                      ST          00D9(A7)
; 453: 				SetAPen(&tmprp, 255L);
       | 05C8  43EF 00BC                      LEA         00BC(A7),A1
       | 05CC  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 05D0  7000                           MOVEQ       #00,D0
       | 05D2  4600                           NOT.B       D0
       | 05D4  4EAE FEAA                      JSR         FEAA(A6)
; 454: 				SetDrMd(&tmprp, JAM2);
       | 05D8  43EF 00BC                      LEA         00BC(A7),A1
       | 05DC  7001                           MOVEQ       #01,D0
       | 05DE  4EAE FE9E                      JSR         FE9E(A6)
; 455: 			}
; 456: 			/*
; 457: 			 *   Do the blit. Make sure the blit finishes before deallocating.
; 458: 			 */
; 459: 			AreaEnd(&tmprp);
       | 05E2  43EF 00BC                      LEA         00BC(A7),A1
       | 05E6  2C6C  0000-XX.2                MOVEA.L     _GfxBase(A4),A6
       | 05EA  4EAE FEF8                      JSR         FEF8(A6)
; 460: 			WaitBlit();
       | 05EE  4EAE FF1C                      JSR         FF1C(A6)
; 461: 			
; 462: 			res = 1;
       | 05F2  3F7C 0001 0134                 MOVE.W      #0001,0134(A7)
; 463: 		}
; 464: 		/*
; 465: 		 *   Free allocated resources.
; 466: 		 */
; 467: 		if (resai == 2)
       | 05F8  7002                           MOVEQ       #02,D0
       | 05FA  B06F 002A                      CMP.W       002A(A7),D0
       | 05FE  2C6F 0038                      MOVEA.L     0038(A7),A6
       | 0602  6608                           BNE.B       060C
; 468: 			FreeAreaInfo(&tmprp);
       | 0604  41EF 00BC                      LEA         00BC(A7),A0
       | 0608  6100 FAA2                      BSR.W       00AC
; 469: 		if (restr == 2)
       | 060C  7002                           MOVEQ       #02,D0
       | 060E  B06F 0028                      CMP.W       0028(A7),D0
       | 0612  6608                           BNE.B       061C
; 470: 			FreeTmpRas(&tmprp);
       | 0614  41EF 00BC                      LEA         00BC(A7),A0
       | 0618  6100 FBB0                      BSR.W       01CA
       | 061C  2C6F 0038                      MOVEA.L     0038(A7),A6
; 471: 	}
; 472: 	/*
; 473: 	 *   Deallocate our local copy of the list
; 474: 	 */
; 475: 	
; 476: 	cleanup:
; 477: 	
; 478: 	if (clipped)
       | 0620  4A6F 0120                      TST.W       0120(A7)
       | 0624  6706                           BEQ.B       062C
; 479: 		KillVertex(v);
       | 0626  204D                           MOVEA.L     A5,A0
       | 0628  6100 0120                      BSR.W       074A
; 480: 	
; 481: 	return(res);
       | 062C  302F 0134                      MOVE.W      0134(A7),D0
       | 0630  4CDF 6CFC                      MOVEM.L     (A7)+,D2-D7/A2-A3/A5-A6
       | 0634  DEFC 0114                      ADDA.W      #0114,A7
       | 0638  4E75                           RTS
; 482: }
; 483: 
; 484: 
; 485: /**
; 486:  *
; 487:  *   Find number of vertices and horizontal and vertical extent.
; 488:  *
; 489: **/
; 490: static int FindAreaSize(v, minx, miny, maxx, maxy)
; 491: 	struct vtx *v;
; 492: 	int *minx, *miny, *maxx, *maxy;
       | 063A  594F                           SUBQ.W      #4,A7
       | 063C  48E7 2324                      MOVEM.L     D2/D6-D7/A2/A5,-(A7)
       | 0640  246F 001C                      MOVEA.L     001C(A7),A2
       | 0644  2A48                           MOVEA.L     A0,A5
; 493: {
; 494: 	int n = 0, t;
       | 0646  7E00                           MOVEQ       #00,D7
; 495: 	
; 496: 	*minx = *miny = 20000;
       | 0648  303C 4E20                      MOVE.W      #4E20,D0
       | 064C  3480                           MOVE.W      D0,(A2)
       | 064E  3280                           MOVE.W      D0,(A1)
; 497: 	*maxx = *maxy = 0;
       | 0650  206F 0024                      MOVEA.L     0024(A7),A0
       | 0654  4250                           CLR.W       (A0)
       | 0656  206F 0020                      MOVEA.L     0020(A7),A0
       | 065A  4250                           CLR.W       (A0)
       | 065C  2F4E 0014                      MOVE.L      A6,0014(A7)
; 498: 	
; 499: 	while (v) 
       | 0660  6000 009A                      BRA.W       06FC
; 500: 	{
; 501: 		switch (v->type) 
       | 0664  302D 0004                      MOVE.W      0004(A5),D0
       | 0668  5340                           SUBQ.W      #1,D0
       | 066A  6710                           BEQ.B       067C
       | 066C  5340                           SUBQ.W      #1,D0
       | 066E  670E                           BEQ.B       067E
       | 0670  5340                           SUBQ.W      #1,D0
       | 0672  6736                           BEQ.B       06AA
       | 0674  5340                           SUBQ.W      #1,D0
       | 0676  6738                           BEQ.B       06B0
       | 0678  6000 0080                      BRA.W       06FA
; 502: 		{
; 503: 		case AREAMOVE :
; 504: 			n++;
       | 067C  5247                           ADDQ.W      #1,D7
; 505: 		case AREADRAW :
; 506: 			n++;
       | 067E  5247                           ADDQ.W      #1,D7
; 507: 			if ((t = v->x) < *minx)
       | 0680  3C2D 0006                      MOVE.W      0006(A5),D6
       | 0684  BC51                           CMP.W       (A1),D6
       | 0686  6C02                           BGE.B       068A
; 508: 				*minx = t;
       | 0688  3286                           MOVE.W      D6,(A1)
; 509: 			if (t > *maxx)
       | 068A  206F 0020                      MOVEA.L     0020(A7),A0
       | 068E  BC50                           CMP.W       (A0),D6
       | 0690  6F02                           BLE.B       0694
; 510: 				*maxx = t;
       | 0692  3086                           MOVE.W      D6,(A0)
; 511: 			if ((t = v->y) < *miny)
       | 0694  3C2D 0008                      MOVE.W      0008(A5),D6
       | 0698  BC52                           CMP.W       (A2),D6
       | 069A  6C02                           BGE.B       069E
; 512: 				*miny = t;
       | 069C  3486                           MOVE.W      D6,(A2)
; 513: 			if (t > *maxy)
       | 069E  206F 0024                      MOVEA.L     0024(A7),A0
       | 06A2  BC50                           CMP.W       (A0),D6
       | 06A4  6F54                           BLE.B       06FA
; 514: 				*maxy = t;
       | 06A6  3086                           MOVE.W      D6,(A0)
; 515: 			break;
       | 06A8  6050                           BRA.B       06FA
; 516: 		case AREACIRCLE :
; 517: 			v->b = v->a;
       | 06AA  3B6D 000A 000C                 MOVE.W      000A(A5),000C(A5)
; 518: 		case AREAELLIPSE :
; 519: 			n += 2;
       | 06B0  5447                           ADDQ.W      #2,D7
; 520: 			if ((t = v->x - v->a) < *minx)
       | 06B2  302D 000A                      MOVE.W      000A(A5),D0
       | 06B6  322D 0006                      MOVE.W      0006(A5),D1
       | 06BA  2401                           MOVE.L      D1,D2
       | 06BC  9440                           SUB.W       D0,D2
       | 06BE  B451                           CMP.W       (A1),D2
       | 06C0  6C02                           BGE.B       06C4
; 521: 				*minx = t;
       | 06C2  3282                           MOVE.W      D2,(A1)
; 522: 			if ((t = v->x + v->a) > *maxx)
       | 06C4  302D 0006                      MOVE.W      0006(A5),D0
       | 06C8  D06D 000A                      ADD.W       000A(A5),D0
       | 06CC  206F 0020                      MOVEA.L     0020(A7),A0
       | 06D0  B050                           CMP.W       (A0),D0
       | 06D2  6F02                           BLE.B       06D6
; 523: 				*maxx = t;
       | 06D4  3080                           MOVE.W      D0,(A0)
; 524: 			if ((t = v->y - v->b) < *miny)
       | 06D6  302D 000C                      MOVE.W      000C(A5),D0
       | 06DA  322D 0008                      MOVE.W      0008(A5),D1
       | 06DE  2401                           MOVE.L      D1,D2
       | 06E0  9440                           SUB.W       D0,D2
       | 06E2  B452                           CMP.W       (A2),D2
       | 06E4  6C02                           BGE.B       06E8
; 525: 				*miny = t;
       | 06E6  3482                           MOVE.W      D2,(A2)
; 526: 			if ((t = v->y + v->b) > *maxy)
       | 06E8  302D 0008                      MOVE.W      0008(A5),D0
       | 06EC  D06D 000C                      ADD.W       000C(A5),D0
       | 06F0  206F 0024                      MOVEA.L     0024(A7),A0
       | 06F4  B050                           CMP.W       (A0),D0
       | 06F6  6F02                           BLE.B       06FA
; 527: 				*maxy = t;
       | 06F8  3080                           MOVE.W      D0,(A0)
; 528: 			break;
; 529: 		}
; 530: 		v = v->next;
       | 06FA  2A55                           MOVEA.L     (A5),A5
; 531: 	}
       | 06FC  200D                           MOVE.L      A5,D0
       | 06FE  6600 FF64                      BNE.W       0664
; 532: 	return(n);
       | 0702  3007                           MOVE.W      D7,D0
       | 0704  4CDF 24C4                      MOVEM.L     (A7)+,D2/D6-D7/A2/A5
       | 0708  584F                           ADDQ.W      #4,A7
       | 070A  4E75                           RTS
; 533: }
; 534: 
; 535: /**
; 536:  *
; 537:  *   Allocate a new vtx structure, and add to list.
; 538:  *
; 539: **/
; 540: struct vtx *AddVertex(v)
; 541: 	struct vtx *v;
       | 070C  594F                           SUBQ.W      #4,A7
       | 070E  48E7 0016                      MOVEM.L     A3/A5-A6,-(A7)
       | 0712  2A48                           MOVEA.L     A0,A5
       | 0714  2F4E 000C                      MOVE.L      A6,000C(A7)
; 542: {
; 543: 	struct vtx *t, *m;
; 544: 	
; 545: 	if (v) 
       | 0718  200D                           MOVE.L      A5,D0
       | 071A  670A                           BEQ.B       0726
; 546: 	{
; 547: 		t = v;
       | 071C  264D                           MOVEA.L     A5,A3
; 548: 		while (t->next)
       | 071E  0C40 2653                      CMPI.W      #2653,D0
; 549: 			t = t->next;
       | 0722  4A93                           TST.L       (A3)
       | 0724  66FA                           BNE.B       0720
; 550: 	}
; 551: 	
; 552: 	m = (struct vtx *) AllocMem((long) sizeof(struct vtx), MEMF_CLEAR);
       | 0726  700E                           MOVEQ       #0E,D0
       | 0728  7201                           MOVEQ       #01,D1
       | 072A  4841                           SWAP        D1
       | 072C  2C78 0004                      MOVEA.L     0004,A6
       | 0730  4EAE FF3A                      JSR         FF3A(A6)
       | 0734  2040                           MOVEA.L     D0,A0
       | 0736  2C6F 000C                      MOVEA.L     000C(A7),A6
; 553: 	
; 554: 	if (v)
       | 073A  200D                           MOVE.L      A5,D0
       | 073C  6702                           BEQ.B       0740
; 555: 		t->next = m;
       | 073E  2688                           MOVE.L      A0,(A3)
; 556: 	
; 557: 	return(m);
       | 0740  2008                           MOVE.L      A0,D0
       | 0742  4CDF 6800                      MOVEM.L     (A7)+,A3/A5-A6
       | 0746  584F                           ADDQ.W      #4,A7
       | 0748  4E75                           RTS
; 558: }
; 559: 
; 560: /**
; 561:  *
; 562:  *   Delete vtx structure list.
; 563:  *
; 564: **/
; 565: struct vtx *KillVertex(v)
; 566: 	struct vtx *v;
       | 074A  594F                           SUBQ.W      #4,A7
       | 074C  48E7 0016                      MOVEM.L     A3/A5-A6,-(A7)
       | 0750  2A48                           MOVEA.L     A0,A5
       | 0752  2F4E 000C                      MOVE.L      A6,000C(A7)
; 567: {
; 568: 	struct vtx *t;
; 569: 	
; 570: 	while (v) 
       | 0756  6014                           BRA.B       076C
; 571: 	{
; 572: 		t = v->next;
       | 0758  2655                           MOVEA.L     (A5),A3
; 573: 		FreeMem(v, (long) sizeof(struct vtx));
       | 075A  224D                           MOVEA.L     A5,A1
       | 075C  700E                           MOVEQ       #0E,D0
       | 075E  2C78 0004                      MOVEA.L     0004,A6
       | 0762  4EAE FF2E                      JSR         FF2E(A6)
; 574: 		v = t;
       | 0766  2A4B                           MOVEA.L     A3,A5
       | 0768  2C6F 000C                      MOVEA.L     000C(A7),A6
; 575: 	}
       | 076C  200D                           MOVE.L      A5,D0
       | 076E  66E8                           BNE.B       0758
; 576: 	
; 577: 	return(NULL);
       | 0770  7000                           MOVEQ       #00,D0
       | 0772  4CDF 6800                      MOVEM.L     (A7)+,A3/A5-A6
       | 0776  584F                           ADDQ.W      #4,A7
       | 0778  4E75                           RTS
; 578: }
; 579: 
; 580: 
; 581: 
; 582: /**
; 583:  *
; 584:  *   This function calculates a dithering pattern for color n,
; 585:  *   where n is a number between 0 and 124 (inclusive) according to
; 586:  *
; 587:  *      n = r * 25 + g * 5 + b,
; 588:  *
; 589:  *   with r, g, and b between 0 and 4 (inclusive).
; 590:  *
; 591: **/
; 592: static unsigned int bits[16][2] = 
; 593: {
; 594: 	{0x0000, 0x0000
; 595: }
; 596: ,
; 597: {
; 598: 	0xaaaa, 0x0000
; 599: }
; 600: ,
; 601: {
; 602: 	0x5555, 0x0000
; 603: }
; 604: ,
; 605: {
; 606: 	0xffff, 0x0000
; 607: }
; 608: ,
; 609: {
; 610: 	0x0000, 0xaaaa
; 611: }
; 612: ,
; 613: {
; 614: 	0xaaaa, 0xaaaa
; 615: }
; 616: ,
; 617: {
; 618: 	0x5555, 0xaaaa
; 619: }
; 620: ,
; 621: {
; 622: 	0xffff, 0xaaaa
; 623: }
; 624: ,
; 625: {
; 626: 	0x0000, 0x5555
; 627: }
; 628: ,
; 629: {
; 630: 	0xaaaa, 0x5555
; 631: }
; 632: ,
; 633: {
; 634: 	0x5555, 0x5555
; 635: }
; 636: ,
; 637: {
; 638: 	0xffff, 0x5555
; 639: }
; 640: ,
; 641: {
; 642: 	0x0000, 0xffff
; 643: }
; 644: ,
; 645: {
; 646: 	0xaaaa, 0xffff
; 647: }
; 648: ,
; 649: {
; 650: 	0x5555, 0xffff
; 651: }
; 652: ,
; 653: {
; 654: 	0xffff, 0xffff
; 655: }
; 656: };
; 657: 
; 658: static int setdither(ptdata, n)
; 659: 	unsigned int ptdata[];
; 660: 	int n;
       | 077A  9EFC 0014                      SUBA.W      #0014,A7
       | 077E  48E7 3F14                      MOVEM.L     D2-D7/A3/A5,-(A7)
       | 0782  2A48                           MOVEA.L     A0,A5
       | 0784  3E00                           MOVE.W      D0,D7
; 661: {
; 662: 	int r, g, b;
; 663: 	int l, m, nblack, nwhite, nmagenta, ncyan, nyellow;
; 664: 	static int indices[4];
; 665: 	static int map[4] = 
; 666: 	{
; 667: 		0, 3, 1, 2 
; 668: 	};
; 669: 	
; 670: 	/*
; 671: 	 *   Argument tests
; 672: 	 */
; 673: 	if (ptdata == 0L)
       | 0786  3F40 002E                      MOVE.W      D0,002E(A7)
       | 078A  2F4E 0030                      MOVE.L      A6,0030(A7)
       | 078E  200D                           MOVE.L      A5,D0
       | 0790  6700 029E                      BEQ.W       0A30
; 674: 		return;
; 675: 	if (n < 0)
       | 0794  4A47                           TST.W       D7
       | 0796  6B00 0298                      BMI.W       0A30
; 676: 		return;
; 677: 	
; 678: 	n = (n & 0x7f);
       | 079A  0247 007F                      ANDI.W      #007F,D7
; 679: 	if (n > 124)
       | 079E  707C                           MOVEQ       #7C,D0
       | 07A0  BE40                           CMP.W       D0,D7
       | 07A2  6F02                           BLE.B       07A6
; 680: 		n = 124;
       | 07A4  3E00                           MOVE.W      D0,D7
; 681: 	/*
; 682: 	 *   Extract r, g, and b
; 683: 	 */
; 684: 	r = n / 25;
       | 07A6  3007                           MOVE.W      D7,D0
       | 07A8  48C0                           EXT.L       D0
       | 07AA  7219                           MOVEQ       #19,D1
       | 07AC  81C1                           DIVS.W      D1,D0
       | 07AE  2C00                           MOVE.L      D0,D6
; 685: 	b = n - r * 25;
       | 07B0  E540                           ASL.W       #2,D0
       | 07B2  D046                           ADD.W       D6,D0
       | 07B4  2400                           MOVE.L      D0,D2
       | 07B6  E542                           ASL.W       #2,D2
       | 07B8  D440                           ADD.W       D0,D2
       | 07BA  3007                           MOVE.W      D7,D0
       | 07BC  9042                           SUB.W       D2,D0
; 686: 	g = b / 5;
       | 07BE  3F40 0020                      MOVE.W      D0,0020(A7)
       | 07C2  48C0                           EXT.L       D0
       | 07C4  7205                           MOVEQ       #05,D1
       | 07C6  81C1                           DIVS.W      D1,D0
       | 07C8  2E00                           MOVE.L      D0,D7
; 687: 	b = b - g * 5;
       | 07CA  E540                           ASL.W       #2,D0
       | 07CC  D047                           ADD.W       D7,D0
       | 07CE  322F 0020                      MOVE.W      0020(A7),D1
       | 07D2  9240                           SUB.W       D0,D1
       | 07D4  2A01                           MOVE.L      D1,D5
; 688: 	/*
; 689: 	 *   Initialize number of black pixels in a square
; 690: 	 */
; 691: 	nblack = 4;
       | 07D6  7804                           MOVEQ       #04,D4
; 692: 	/*
; 693: 	 *   Number of white pixels...
; 694: 	 */
; 695: 	if (nwhite = min(min(r, g), b)) 
       | 07D8  BC47                           CMP.W       D7,D6
       | 07DA  6F04                           BLE.B       07E0
       | 07DC  3007                           MOVE.W      D7,D0
       | 07DE  0C40 3006                      CMPI.W      #3006,D0
       | 07E2  B045                           CMP.W       D5,D0
       | 07E4  6F04                           BLE.B       07EA
       | 07E6  3005                           MOVE.W      D5,D0
       | 07E8  600A                           BRA.B       07F4
       | 07EA  BC47                           CMP.W       D7,D6
       | 07EC  6F04                           BLE.B       07F2
       | 07EE  3007                           MOVE.W      D7,D0
       | 07F0  0C40 3006                      CMPI.W      #3006,D0
       | 07F4  3F40 0026                      MOVE.W      D0,0026(A7)
       | 07F8  670C                           BEQ.B       0806
; 696: 	{
; 697: 		r -= nwhite;
       | 07FA  9C40                           SUB.W       D0,D6
; 698: 		g -= nwhite;
       | 07FC  9E40                           SUB.W       D0,D7
; 699: 		b -= nwhite;
       | 07FE  9A40                           SUB.W       D0,D5
; 700: 		nblack -= nwhite;
       | 0800  7204                           MOVEQ       #04,D1
       | 0802  9240                           SUB.W       D0,D1
       | 0804  2801                           MOVE.L      D1,D4
; 701: 	}
; 702: 	/*
; 703: 	 *   ...and cyan, magenta or yellow pixels
; 704: 	 */
; 705: 	ncyan    = min(g, b);
       | 0806  BE45                           CMP.W       D5,D7
       | 0808  6F04                           BLE.B       080E
       | 080A  3205                           MOVE.W      D5,D1
       | 080C  0C40 3207                      CMPI.W      #3207,D0
; 706: 	nmagenta = min(r, b);
       | 0810  3F41 0020                      MOVE.W      D1,0020(A7)
       | 0814  BC45                           CMP.W       D5,D6
       | 0816  6F04                           BLE.B       081C
       | 0818  3405                           MOVE.W      D5,D2
       | 081A  0C40 3406                      CMPI.W      #3406,D0
; 707: 	nyellow  = min(r, g);
       | 081E  3F42 0022                      MOVE.W      D2,0022(A7)
       | 0822  BC47                           CMP.W       D7,D6
       | 0824  6F04                           BLE.B       082A
       | 0826  3607                           MOVE.W      D7,D3
       | 0828  0C40 3606                      CMPI.W      #3606,D0
       | 082C  3F43 0024                      MOVE.W      D3,0024(A7)
; 708: 	
; 709: 	if (ncyan) 
       | 0830  4A41                           TST.W       D1
       | 0832  6708                           BEQ.B       083C
; 710: 	{
; 711: 		g -= ncyan;
       | 0834  9E41                           SUB.W       D1,D7
; 712: 		b -= ncyan;
       | 0836  9A41                           SUB.W       D1,D5
; 713: 		nblack -= ncyan;
       | 0838  9841                           SUB.W       D1,D4
       | 083A  6016                           BRA.B       0852
; 714: 	}
; 715: 	else
; 716: 	if (nmagenta) 
       | 083C  4A42                           TST.W       D2
       | 083E  6708                           BEQ.B       0848
; 717: 	{
; 718: 		r -= nmagenta;
       | 0840  9C42                           SUB.W       D2,D6
; 719: 		b -= nmagenta;
       | 0842  9A42                           SUB.W       D2,D5
; 720: 		nblack -= nmagenta;
       | 0844  9842                           SUB.W       D2,D4
       | 0846  600A                           BRA.B       0852
; 721: 	}
; 722: 	else
; 723: 	if (nyellow) 
       | 0848  4A43                           TST.W       D3
       | 084A  6706                           BEQ.B       0852
; 724: 	{
; 725: 		r -= nyellow;
       | 084C  9C43                           SUB.W       D3,D6
; 726: 		g -= nyellow;
       | 084E  9E43                           SUB.W       D3,D7
; 727: 		nblack -= nyellow;
       | 0850  9843                           SUB.W       D3,D4
; 728: 	}
; 729: 	/*
; 730: 	 *   ...and red green and blue pixels
; 731: 	 */
; 732: 	if      (r)
       | 0852  3F47 0028                      MOVE.W      D7,0028(A7)
       | 0856  2005                           MOVE.L      D5,D0
       | 0858  3F40 002A                      MOVE.W      D0,002A(A7)
       | 085C  4A46                           TST.W       D6
       | 085E  6704                           BEQ.B       0864
; 733: 		nblack -= r;
       | 0860  9846                           SUB.W       D6,D4
       | 0862  600E                           BRA.B       0872
; 734: 	else
; 735: 	if (g)
       | 0864  4A47                           TST.W       D7
       | 0866  6704                           BEQ.B       086C
; 736: 		nblack -= g;
       | 0868  9847                           SUB.W       D7,D4
       | 086A  6006                           BRA.B       0872
; 737: 	else
; 738: 	if (b)
       | 086C  4A45                           TST.W       D5
       | 086E  6702                           BEQ.B       0872
; 739: 		nblack -= b;
       | 0870  9845                           SUB.W       D5,D4
; 740: 	/*
; 741: 	 *   Set up the color indices for the four pixels
; 742: 	 */
; 743: 	m = 0;
       | 0872  7400                           MOVEQ       #00,D2
; 744: 	for (l = 0; l < nblack;   l++, m++)
       | 0874  7600                           MOVEQ       #00,D3
       | 0876  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 087A  6014                           BRA.B       0890
; 745: 		indices[map[m]] = 0;
       | 087C  301B                           MOVE.W      (A3)+,D0
       | 087E  48C0                           EXT.L       D0
       | 0880  2200                           MOVE.L      D0,D1
       | 0882  D281                           ADD.L       D1,D1
       | 0884  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 0888  4270 1800                      CLR.W       00(A0,D1.L)
       | 088C  5243                           ADDQ.W      #1,D3
       | 088E  5242                           ADDQ.W      #1,D2
       | 0890  B644                           CMP.W       D4,D3
       | 0892  6DE8                           BLT.B       087C
; 746: 	for (l = 0; l < nwhite;   l++, m++)
       | 0894  7600                           MOVEQ       #00,D3
       | 0896  48C2                           EXT.L       D2
       | 0898  2002                           MOVE.L      D2,D0
       | 089A  D080                           ADD.L       D0,D0
       | 089C  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 08A0  D7C0                           ADDA.L      D0,A3
       | 08A2  382F 0026                      MOVE.W      0026(A7),D4
       | 08A6  6016                           BRA.B       08BE
; 747: 		indices[map[m]] = 1;
       | 08A8  301B                           MOVE.W      (A3)+,D0
       | 08AA  48C0                           EXT.L       D0
       | 08AC  2200                           MOVE.L      D0,D1
       | 08AE  D281                           ADD.L       D1,D1
       | 08B0  7001                           MOVEQ       #01,D0
       | 08B2  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 08B6  3180 1800                      MOVE.W      D0,00(A0,D1.L)
       | 08BA  5243                           ADDQ.W      #1,D3
       | 08BC  5242                           ADDQ.W      #1,D2
       | 08BE  B644                           CMP.W       D4,D3
       | 08C0  6DE6                           BLT.B       08A8
; 748: 	for (l = 0; l < ncyan;    l++, m++)
       | 08C2  7600                           MOVEQ       #00,D3
       | 08C4  48C2                           EXT.L       D2
       | 08C6  2002                           MOVE.L      D2,D0
       | 08C8  D080                           ADD.L       D0,D0
       | 08CA  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 08CE  D7C0                           ADDA.L      D0,A3
       | 08D0  382F 0020                      MOVE.W      0020(A7),D4
       | 08D4  6016                           BRA.B       08EC
; 749: 		indices[map[m]] = 5;
       | 08D6  301B                           MOVE.W      (A3)+,D0
       | 08D8  48C0                           EXT.L       D0
       | 08DA  2200                           MOVE.L      D0,D1
       | 08DC  D281                           ADD.L       D1,D1
       | 08DE  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 08E2  31BC 0005 1800                 MOVE.W      #0005,00(A0,D1.L)
       | 08E8  5243                           ADDQ.W      #1,D3
       | 08EA  5242                           ADDQ.W      #1,D2
       | 08EC  B644                           CMP.W       D4,D3
       | 08EE  6DE6                           BLT.B       08D6
; 750: 	for (l = 0; l < nmagenta; l++, m++)
       | 08F0  7600                           MOVEQ       #00,D3
       | 08F2  48C2                           EXT.L       D2
       | 08F4  2002                           MOVE.L      D2,D0
       | 08F6  D080                           ADD.L       D0,D0
       | 08F8  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 08FC  D7C0                           ADDA.L      D0,A3
       | 08FE  382F 0022                      MOVE.W      0022(A7),D4
       | 0902  6016                           BRA.B       091A
; 751: 		indices[map[m]] = 6;
       | 0904  301B                           MOVE.W      (A3)+,D0
       | 0906  48C0                           EXT.L       D0
       | 0908  2200                           MOVE.L      D0,D1
       | 090A  D281                           ADD.L       D1,D1
       | 090C  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 0910  31BC 0006 1800                 MOVE.W      #0006,00(A0,D1.L)
       | 0916  5243                           ADDQ.W      #1,D3
       | 0918  5242                           ADDQ.W      #1,D2
       | 091A  B644                           CMP.W       D4,D3
       | 091C  6DE6                           BLT.B       0904
; 752: 	for (l = 0; l < nyellow;  l++, m++)
       | 091E  7600                           MOVEQ       #00,D3
       | 0920  48C2                           EXT.L       D2
       | 0922  2002                           MOVE.L      D2,D0
       | 0924  D080                           ADD.L       D0,D0
       | 0926  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 092A  D7C0                           ADDA.L      D0,A3
       | 092C  382F 0024                      MOVE.W      0024(A7),D4
       | 0930  6016                           BRA.B       0948
; 753: 		indices[map[m]] = 7;
       | 0932  301B                           MOVE.W      (A3)+,D0
       | 0934  48C0                           EXT.L       D0
       | 0936  2200                           MOVE.L      D0,D1
       | 0938  D281                           ADD.L       D1,D1
       | 093A  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 093E  31BC 0007 1800                 MOVE.W      #0007,00(A0,D1.L)
       | 0944  5243                           ADDQ.W      #1,D3
       | 0946  5242                           ADDQ.W      #1,D2
       | 0948  B644                           CMP.W       D4,D3
       | 094A  6DE6                           BLT.B       0932
; 754: 	for (l = 0; l < r;        l++, m++)
       | 094C  7600                           MOVEQ       #00,D3
       | 094E  48C2                           EXT.L       D2
       | 0950  2002                           MOVE.L      D2,D0
       | 0952  D080                           ADD.L       D0,D0
       | 0954  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 0958  D7C0                           ADDA.L      D0,A3
       | 095A  6016                           BRA.B       0972
; 755: 		indices[map[m]] = 2;
       | 095C  301B                           MOVE.W      (A3)+,D0
       | 095E  48C0                           EXT.L       D0
       | 0960  2200                           MOVE.L      D0,D1
       | 0962  D281                           ADD.L       D1,D1
       | 0964  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 0968  31BC 0002 1800                 MOVE.W      #0002,00(A0,D1.L)
       | 096E  5243                           ADDQ.W      #1,D3
       | 0970  5242                           ADDQ.W      #1,D2
       | 0972  B646                           CMP.W       D6,D3
       | 0974  6DE6                           BLT.B       095C
; 756: 	for (l = 0; l < g;        l++, m++)
       | 0976  7800                           MOVEQ       #00,D4
       | 0978  48C2                           EXT.L       D2
       | 097A  2002                           MOVE.L      D2,D0
       | 097C  D080                           ADD.L       D0,D0
       | 097E  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 0982  D7C0                           ADDA.L      D0,A3
       | 0984  362F 0028                      MOVE.W      0028(A7),D3
       | 0988  6016                           BRA.B       09A0
; 757: 		indices[map[m]] = 3;
       | 098A  301B                           MOVE.W      (A3)+,D0
       | 098C  48C0                           EXT.L       D0
       | 098E  2200                           MOVE.L      D0,D1
       | 0990  D281                           ADD.L       D1,D1
       | 0992  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 0996  31BC 0003 1800                 MOVE.W      #0003,00(A0,D1.L)
       | 099C  5244                           ADDQ.W      #1,D4
       | 099E  5242                           ADDQ.W      #1,D2
       | 09A0  B843                           CMP.W       D3,D4
       | 09A2  6DE6                           BLT.B       098A
; 758: 	for (l = 0; l < b;        l++, m++)
       | 09A4  7600                           MOVEQ       #00,D3
       | 09A6  48C2                           EXT.L       D2
       | 09A8  2002                           MOVE.L      D2,D0
       | 09AA  D080                           ADD.L       D0,D0
       | 09AC  47EC  019A-01.2                LEA         01.0000019A(A4),A3
       | 09B0  D7C0                           ADDA.L      D0,A3
       | 09B2  342F 002A                      MOVE.W      002A(A7),D2
       | 09B6  6014                           BRA.B       09CC
; 759: 		indices[map[m]] = 4;
       | 09B8  301B                           MOVE.W      (A3)+,D0
       | 09BA  48C0                           EXT.L       D0
       | 09BC  2200                           MOVE.L      D0,D1
       | 09BE  D281                           ADD.L       D1,D1
       | 09C0  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 09C4  31BC 0004 1800                 MOVE.W      #0004,00(A0,D1.L)
       | 09CA  5243                           ADDQ.W      #1,D3
       | 09CC  B642                           CMP.W       D2,D3
       | 09CE  6DE8                           BLT.B       09B8
; 760: 	/*
; 761: 	 *   Convert to bitmaps and return in ptdata.
; 762: 	 */
; 763: 	movmem(bits[bm(indices, 0)], &ptdata[0], 4);
       | 09D0  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 09D4  7000                           MOVEQ       #00,D0
       | 09D6  6100 0062                      BSR.W       0A3A
       | 09DA  48C0                           EXT.L       D0
       | 09DC  E580                           ASL.L       #2,D0
       | 09DE  41EC  015A-01.2                LEA         01.0000015A(A4),A0
       | 09E2  D1C0                           ADDA.L      D0,A0
       | 09E4  224D                           MOVEA.L     A5,A1
       | 09E6  7004                           MOVEQ       #04,D0
       | 09E8  6100  0000-XX.1                BSR.W       @movmem
; 764: 	movmem(bits[bm(indices, 1)], &ptdata[2], 4);
       | 09EC  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 09F0  7001                           MOVEQ       #01,D0
       | 09F2  6100 0046                      BSR.W       0A3A
       | 09F6  48C0                           EXT.L       D0
       | 09F8  E580                           ASL.L       #2,D0
       | 09FA  41EC  015A-01.2                LEA         01.0000015A(A4),A0
       | 09FE  D1C0                           ADDA.L      D0,A0
       | 0A00  43ED 0004                      LEA         0004(A5),A1
       | 0A04  7004                           MOVEQ       #04,D0
       | 0A06  6100  0000-XX.1                BSR.W       @movmem
; 765: 	movmem(bits[bm(indices, 2)], &ptdata[4], 4);
       | 0A0A  41EC  0000-02.2                LEA         02.00000000(A4),A0
       | 0A0E  7002                           MOVEQ       #02,D0
       | 0A10  6100 0028                      BSR.W       0A3A
       | 0A14  48C0                           EXT.L       D0
       | 0A16  E580                           ASL.L       #2,D0
       | 0A18  41EC  015A-01.2                LEA         01.0000015A(A4),A0
       | 0A1C  D1C0                           ADDA.L      D0,A0
       | 0A1E  43ED 0008                      LEA         0008(A5),A1
       | 0A22  7004                           MOVEQ       #04,D0
       | 0A24  4CDF 28FC                      MOVEM.L     (A7)+,D2-D7/A3/A5
       | 0A28  DEFC 0014                      ADDA.W      #0014,A7
       | 0A2C  6000  0000-XX.1                BRA.W       @movmem
; 766: 	
; 767: 	return;
       | 0A30  4CDF 28FC                      MOVEM.L     (A7)+,D2-D7/A3/A5
       | 0A34  DEFC 0014                      ADDA.W      #0014,A7
       | 0A38  4E75                           RTS
; 768: }
; 769: 
; 770: /**
; 771:  *
; 772:  *   Extract bitmap n from quadruple s
; 773:  *
; 774: **/
; 775: static int bm(s, n)
; 776: 	int s[], n;
       | 0A3A  594F                           SUBQ.W      #4,A7
       | 0A3C  48E7 3C00                      MOVEM.L     D2-D5,-(A7)
       | 0A40  2400                           MOVE.L      D0,D2
; 777: {
; 778: 	int index = 0;
; 779: 	int mask = 1 << n;
       | 0A42  3002                           MOVE.W      D2,D0
       | 0A44  7200                           MOVEQ       #00,D1
       | 0A46  01C1                           BSET.L      D0,D1
; 780: 	
; 781: 	
; 782: 	index = (( ((s[3] & mask) << 3) +
       | 0A48  3028 0006                      MOVE.W      0006(A0),D0
       | 0A4C  C041                           AND.W       D1,D0
; 783: 	((s[2] & mask) << 2) +
       | 0A4E  3628 0004                      MOVE.W      0004(A0),D3
       | 0A52  C641                           AND.W       D1,D3
; 784: 	((s[1] & mask) << 1) +
       | 0A54  3828 0002                      MOVE.W      0002(A0),D4
       | 0A58  C841                           AND.W       D1,D4
; 785: 	((s[0] & mask)     )   ) >> n) & 0xf ;
       | 0A5A  3A10                           MOVE.W      (A0),D5
       | 0A5C  CA41                           AND.W       D1,D5
       | 0A5E  D844                           ADD.W       D4,D4
       | 0A60  E543                           ASL.W       #2,D3
       | 0A62  E740                           ASL.W       #3,D0
       | 0A64  D043                           ADD.W       D3,D0
       | 0A66  D044                           ADD.W       D4,D0
       | 0A68  D045                           ADD.W       D5,D0
       | 0A6A  E460                           ASR.W       D2,D0
       | 0A6C  0240 000F                      ANDI.W      #000F,D0
; 786: 	
; 787: 	return(index);
       | 0A70  4CDF 003C                      MOVEM.L     (A7)+,D2-D5
       | 0A74  584F                           ADDQ.W      #4,A7
       | 0A76  4E75                           RTS
; 788: }
; 789: 
; 790: 
; 791: 
; 792: // These are already defined (differently in one case)
; 793: 	//static struct vtx *addintersect(), *addvtx();
; 794: 	//int inside();
; 795: 	//static struct vtx *SHClip();
; 796: 	
; 797: 	/**
; 798: 	 *
; 799: 	 *   Clip a vertex list against a rectangle
; 800: 	 *
; 801: 	**/
; 802: 	static struct vtx *AreaPolyClip(vi, x1, y1, x2, y2)
; 803: 	struct vtx *vi;
; 804: 	int x1, y1, x2, y2;
       | 0A78  514F                           SUBQ.W      #8,A7
       | 0A7A  48E7 0214                      MOVEM.L     D6/A3/A5,-(A7)
       | 0A7E  2C01                           MOVE.L      D1,D6
       | 0A80  2200                           MOVE.L      D0,D1
; 805: {
; 806: 	struct vtx *vo = NULL;
; 807: 	
; 808: 	vo = SHClip(vi, BD_LEFT, x1);
       | 0A82  2F48 000C                      MOVE.L      A0,000C(A7)
       | 0A86  2F4E 0010                      MOVE.L      A6,0010(A7)
       | 0A8A  7001                           MOVEQ       #01,D0
       | 0A8C  6100 0048                      BSR.W       0AD6
; 809: 	/*
; 810: 	 *   Be careful not to deallocate the input list!
; 811: 	 */
; 812: 	vi = vo;
       | 0A90  2A40                           MOVEA.L     D0,A5
; 813: 	
; 814: 	vo = SHClip(vi, BD_RIGHT, x2);
       | 0A92  2040                           MOVEA.L     D0,A0
       | 0A94  322F 0018                      MOVE.W      0018(A7),D1
       | 0A98  7002                           MOVEQ       #02,D0
       | 0A9A  6100 003A                      BSR.W       0AD6
       | 0A9E  2640                           MOVEA.L     D0,A3
; 815: 	KillVertex(vi);
       | 0AA0  204D                           MOVEA.L     A5,A0
       | 0AA2  6100 FCA6                      BSR.W       074A
; 816: 	vi = vo;
; 817: 	
; 818: 	vo = SHClip(vi, BD_TOP, y1);
       | 0AA6  2206                           MOVE.L      D6,D1
       | 0AA8  204B                           MOVEA.L     A3,A0
       | 0AAA  7003                           MOVEQ       #03,D0
       | 0AAC  6100 0028                      BSR.W       0AD6
       | 0AB0  2A40                           MOVEA.L     D0,A5
; 819: 	KillVertex(vi);
       | 0AB2  204B                           MOVEA.L     A3,A0
       | 0AB4  6100 FC94                      BSR.W       074A
; 820: 	vi = vo;
; 821: 	
; 822: 	vo = SHClip(vi, BD_BOTTOM, y2);
       | 0AB8  322F 001A                      MOVE.W      001A(A7),D1
       | 0ABC  204D                           MOVEA.L     A5,A0
       | 0ABE  7004                           MOVEQ       #04,D0
       | 0AC0  6100 0014                      BSR.W       0AD6
       | 0AC4  2640                           MOVEA.L     D0,A3
; 823: 	KillVertex(vi);
       | 0AC6  204D                           MOVEA.L     A5,A0
       | 0AC8  6100 FC80                      BSR.W       074A
; 824: 	
; 825: 	return(vo);
       | 0ACC  200B                           MOVE.L      A3,D0
       | 0ACE  4CDF 2840                      MOVEM.L     (A7)+,D6/A3/A5
       | 0AD2  504F                           ADDQ.W      #8,A7
       | 0AD4  4E75                           RTS
; 826: }
; 827: 
; 828: /**
; 829:  *
; 830:  *   Polygon clipping against a single boundary
; 831:  *   Sutherland-Hodgman, Foley and Van dam page 454
; 832:  *   Modified to do just rectangular clips.
; 833:  *
; 834: **/
; 835: static struct vtx *SHClip(vi, bordertype, bordervalue)
; 836: 	struct vtx *vi;
; 837: 	int bordertype, bordervalue;
       | 0AD6  9EFC 000C                      SUBA.W      #000C,A7
       | 0ADA  48E7 0736                      MOVEM.L     D5-D7/A2-A3/A5-A6,-(A7)
       | 0ADE  2C01                           MOVE.L      D1,D6
       | 0AE0  2E00                           MOVE.L      D0,D7
       | 0AE2  2A48                           MOVEA.L     A0,A5
; 838: {
; 839: 	struct vtx *p, *s, *vo, *t, *u;
; 840: 	int first = 1;
       | 0AE4  7A01                           MOVEQ       #01,D5
; 841: 	/*
; 842: 	 *   Find last vertex s
; 843: 	 */
; 844: 	s = NULL;
       | 0AE6  97CB                           SUBA.L      A3,A3
; 845: 	
; 846: 	t = vi;
       | 0AE8  244D                           MOVEA.L     A5,A2
       | 0AEA  2F4E 0020                      MOVE.L      A6,0020(A7)
; 847: 	while (t) 
       | 0AEE  600C                           BRA.B       0AFC
; 848: 	{
; 849: 		if (t->type == AREADRAW)
       | 0AF0  7002                           MOVEQ       #02,D0
       | 0AF2  B06A 0004                      CMP.W       0004(A2),D0
       | 0AF6  6602                           BNE.B       0AFA
; 850: 			s = t;
       | 0AF8  264A                           MOVEA.L     A2,A3
; 851: 		t = t->next;
       | 0AFA  2452                           MOVEA.L     (A2),A2
; 852: 	}
       | 0AFC  200A                           MOVE.L      A2,D0
       | 0AFE  66F0                           BNE.B       0AF0
; 853: 	/*
; 854: 	 *   If there is no last vertex, there is nothing to do
; 855: 	 */
; 856: 	if (s == NULL)
; 857: 		return(NULL);
       | 0B00  95CA                           SUBA.L      A2,A2
       | 0B02  200B                           MOVE.L      A3,D0
       | 0B04  6700 00DA                      BEQ.W       0BE0
; 858: 	/*
; 859: 	 *   Set up output vertex array
; 860: 	 */
; 861: 	vo = AddVertex(NULL);
       | 0B08  204A                           MOVEA.L     A2,A0
       | 0B0A  6100 FC00                      BSR.W       070C
; 862: 	if (vo == NULL)
       | 0B0E  2F40 001C                      MOVE.L      D0,001C(A7)
       | 0B12  6606                           BNE.B       0B1A
; 863: 		return(NULL);
       | 0B14  7000                           MOVEQ       #00,D0
       | 0B16  6000 00CA                      BRA.W       0BE2
       | 0B1A  2C6F 0020                      MOVEA.L     0020(A7),A6
; 864: 	/*
; 865: 	 *   Loop over the list
; 866: 	 */
; 867: 	while (vi) 
       | 0B1E  6000 00B2                      BRA.W       0BD2
; 868: 	{
; 869: 		/*
; 870: 		 *   Skip non-vertices.
; 871: 		 */
; 872: 		if ((vi->type == AREAMOVE) || (vi->type == AREADRAW)) 
       | 0B22  302D 0004                      MOVE.W      0004(A5),D0
       | 0B26  7201                           MOVEQ       #01,D1
       | 0B28  B041                           CMP.W       D1,D0
       | 0B2A  6706                           BEQ.B       0B32
       | 0B2C  5540                           SUBQ.W      #2,D0
       | 0B2E  6600 0092                      BNE.W       0BC2
; 873: 		{
; 874: 			p = vi;
; 875: 			/*
; 876: 			 *   Now s and p correspond to the vertices in Fig. 11.21 in
; 877: 			 *   Foley and Van Dam
; 878: 			 */
; 879: 			if (inside(p, bordertype, bordervalue)) 
       | 0B32  2007                           MOVE.L      D7,D0
       | 0B34  2206                           MOVE.L      D6,D1
       | 0B36  204D                           MOVEA.L     A5,A0
       | 0B38  6100 00EC                      BSR.W       0C26
       | 0B3C  4A40                           TST.W       D0
       | 0B3E  675E                           BEQ.B       0B9E
; 880: 			{
; 881: 				if (inside(s, bordertype, bordervalue)) 
       | 0B40  2007                           MOVE.L      D7,D0
       | 0B42  2206                           MOVE.L      D6,D1
       | 0B44  204B                           MOVEA.L     A3,A0
       | 0B46  6100 00DE                      BSR.W       0C26
       | 0B4A  4A40                           TST.W       D0
       | 0B4C  670A                           BEQ.B       0B58
; 882: 				{
; 883: 					addvtx(vo, p);
       | 0B4E  204A                           MOVEA.L     A2,A0
       | 0B50  224D                           MOVEA.L     A5,A1
       | 0B52  6100 0098                      BSR.W       0BEC
       | 0B56  6064                           BRA.B       0BBC
; 884: 				}
; 885: 				else
; 886: 				{
; 887: 					t = addintersect(vo, s, p, bordertype, bordervalue);
       | 0B58  2F0D                           MOVE.L      A5,-(A7)
       | 0B5A  2007                           MOVE.L      D7,D0
       | 0B5C  2206                           MOVE.L      D6,D1
       | 0B5E  204A                           MOVEA.L     A2,A0
       | 0B60  224B                           MOVEA.L     A3,A1
       | 0B62  6100 012A                      BSR.W       0C8E
       | 0B66  2640                           MOVEA.L     D0,A3
; 888: 					u = addvtx(vo, p);
       | 0B68  204A                           MOVEA.L     A2,A0
       | 0B6A  224D                           MOVEA.L     A5,A1
       | 0B6C  6100 007E                      BSR.W       0BEC
       | 0B70  584F                           ADDQ.W      #4,A7
       | 0B72  2240                           MOVEA.L     D0,A1
; 889: 					/*
; 890: 					 *   Tricky: (only the first time!) if the first point is inside, but the
; 891: 					 *   previous point (which is the last point in the list) is outside,
; 892: 					 *   we want to reverse the functions of the two added points. The new
; 893: 					 *   intersect (t) becomes a "move", whereas the point at hand becomes a
; 894: 					 *   "draw" (if they were "draw" and "move" before). Reason: the intersect
; 895: 					 *   gets added *first*, even though it is the leftover of the *last* point.
; 896: 					 */
; 897: 					if (first && t && u) 
       | 0B74  4A45                           TST.W       D5
       | 0B76  6744                           BEQ.B       0BBC
       | 0B78  200B                           MOVE.L      A3,D0
       | 0B7A  6740                           BEQ.B       0BBC
       | 0B7C  2009                           MOVE.L      A1,D0
       | 0B7E  673C                           BEQ.B       0BBC
; 898: 					{
; 899: 						if ((s->type == AREADRAW) && (p->type == AREAMOVE)) 
       | 0B80  7002                           MOVEQ       #02,D0
       | 0B82  206F 0024                      MOVEA.L     0024(A7),A0
       | 0B86  B068 0004                      CMP.W       0004(A0),D0
       | 0B8A  6630                           BNE.B       0BBC
       | 0B8C  7201                           MOVEQ       #01,D1
       | 0B8E  B26D 0004                      CMP.W       0004(A5),D1
       | 0B92  6628                           BNE.B       0BBC
; 900: 						{
; 901: 							t->type = AREAMOVE;
       | 0B94  3741 0004                      MOVE.W      D1,0004(A3)
; 902: 							u->type = AREADRAW;
       | 0B98  3340 0004                      MOVE.W      D0,0004(A1)
       | 0B9C  601E                           BRA.B       0BBC
; 903: 						}
; 904: 					}
; 905: 				}
; 906: 			}
; 907: 			else
; 908: 			{
; 909: 				if (inside(s, bordertype, bordervalue)) 
       | 0B9E  2007                           MOVE.L      D7,D0
       | 0BA0  2206                           MOVE.L      D6,D1
       | 0BA2  204B                           MOVEA.L     A3,A0
       | 0BA4  6100 0080                      BSR.W       0C26
       | 0BA8  4A40                           TST.W       D0
       | 0BAA  6710                           BEQ.B       0BBC
; 910: 				{
; 911: 					addintersect(vo, s, p, bordertype, bordervalue);
       | 0BAC  2F0D                           MOVE.L      A5,-(A7)
       | 0BAE  2007                           MOVE.L      D7,D0
       | 0BB0  2206                           MOVE.L      D6,D1
       | 0BB2  204A                           MOVEA.L     A2,A0
       | 0BB4  224B                           MOVEA.L     A3,A1
       | 0BB6  6100 00D6                      BSR.W       0C8E
       | 0BBA  584F                           ADDQ.W      #4,A7
; 912: 				}
; 913: 			}
; 914: 			first = 0;
       | 0BBC  7A00                           MOVEQ       #00,D5
; 915: 			/*
; 916: 			 *   Advance to next pair of vertices
; 917: 			 */
; 918: 			s = p;
       | 0BBE  264D                           MOVEA.L     A5,A3
       | 0BC0  600E                           BRA.B       0BD0
; 919: 		}
; 920: 		else
; 921: 		if (vi->type) 
       | 0BC2  4A6D 0004                      TST.W       0004(A5)
       | 0BC6  6708                           BEQ.B       0BD0
; 922: 		{
; 923: 			/*
; 924: 			 *   If this is something other than AREADRAW or MOVE, but not NULL,
; 925: 			 *   copy it straight into the output.
; 926: 			 */
; 927: 			addvtx(vo, vi);
       | 0BC8  204A                           MOVEA.L     A2,A0
       | 0BCA  224D                           MOVEA.L     A5,A1
       | 0BCC  6100 001E                      BSR.W       0BEC
; 928: 		}
; 929: 		vi = vi->next;
       | 0BD0  2A55                           MOVEA.L     (A5),A5
; 930: 	}
       | 0BD2  2F4B 0024                      MOVE.L      A3,0024(A7)
       | 0BD6  246F 001C                      MOVEA.L     001C(A7),A2
       | 0BDA  200D                           MOVE.L      A5,D0
       | 0BDC  6600 FF44                      BNE.W       0B22
; 931: 	
; 932: 	return(vo);
       | 0BE0  200A                           MOVE.L      A2,D0
       | 0BE2  4CDF 6CE0                      MOVEM.L     (A7)+,D5-D7/A2-A3/A5-A6
       | 0BE6  DEFC 000C                      ADDA.W      #000C,A7
       | 0BEA  4E75                           RTS
; 933: }
; 934: 
; 935: /**
; 936:  *
; 937:  *   Add a vertex p to list vo.
; 938:  *
; 939: **/
; 940: static struct vtx *addvtx(vo, p)
; 941: 	struct vtx *vo, *p;
       | 0BEC  514F                           SUBQ.W      #8,A7
       | 0BEE  48E7 0014                      MOVEM.L     A3/A5,-(A7)
       | 0BF2  2A49                           MOVEA.L     A1,A5
; 942: {
; 943: 	struct vtx *t;
; 944: 	
; 945: 	if (t = AddVertex(vo)) 
       | 0BF4  2F48 0008                      MOVE.L      A0,0008(A7)
       | 0BF8  2F4E 000C                      MOVE.L      A6,000C(A7)
       | 0BFC  6100 FB0E                      BSR.W       070C
       | 0C00  2040                           MOVEA.L     D0,A0
       | 0C02  4A80                           TST.L       D0
       | 0C04  6716                           BEQ.B       0C1C
; 946: 	{
; 947: 		t->type = p->type;
       | 0C06  47ED 0004                      LEA         0004(A5),A3
; 948: 		t->x    = p->x;
       | 0C0A  43E8 0004                      LEA         0004(A0),A1
; 949: 		t->y    = p->y;
       | 0C0E  32DB                           MOVE.W      (A3)+,(A1)+
; 950: 		t->a    = p->a;
       | 0C10  32DB                           MOVE.W      (A3)+,(A1)+
; 951: 		t->b    = p->b;
       | 0C12  32DB                           MOVE.W      (A3)+,(A1)+
       | 0C14  32ED 000A                      MOVE.W      000A(A5),(A1)+
       | 0C18  32ED 000C                      MOVE.W      000C(A5),(A1)+
; 952: 	}
; 953: 	return(t);
       | 0C1C  2008                           MOVE.L      A0,D0
       | 0C1E  4CDF 2800                      MOVEM.L     (A7)+,A3/A5
       | 0C22  504F                           ADDQ.W      #8,A7
       | 0C24  4E75                           RTS
; 954: }
; 955: 
; 956: /**
; 957:  *
; 958:  *   Determine whether a vertex is inside or outside the border
; 959:  *
; 960: **/
; 961: static int inside(s, bordertype, bordervalue)
; 962: 	struct vtx *s;
; 963: 	int bordertype, bordervalue;
       | 0C26  594F                           SUBQ.W      #4,A7
       | 0C28  48E7 0300                      MOVEM.L     D6-D7,-(A7)
       | 0C2C  2C01                           MOVE.L      D1,D6
       | 0C2E  2E00                           MOVE.L      D0,D7
       | 0C30  2F4E 0008                      MOVE.L      A6,0008(A7)
; 964: {
; 965: 	if (s) 
       | 0C34  2008                           MOVE.L      A0,D0
       | 0C36  674C                           BEQ.B       0C84
; 966: 	{
; 967: 		switch (bordertype) 
       | 0C38  3007                           MOVE.W      D7,D0
       | 0C3A  5340                           SUBQ.W      #1,D0
       | 0C3C  670E                           BEQ.B       0C4C
       | 0C3E  5340                           SUBQ.W      #1,D0
       | 0C40  6718                           BEQ.B       0C5A
       | 0C42  5340                           SUBQ.W      #1,D0
       | 0C44  6722                           BEQ.B       0C68
       | 0C46  5340                           SUBQ.W      #1,D0
       | 0C48  672C                           BEQ.B       0C76
       | 0C4A  6038                           BRA.B       0C84
; 968: 		{
; 969: 		case BD_LEFT :
; 970: 			return(s->x >= bordervalue);
       | 0C4C  3228 0006                      MOVE.W      0006(A0),D1
       | 0C50  B246                           CMP.W       D6,D1
       | 0C52  5CC0                           SGE         D0
       | 0C54  4400                           NEG.B       D0
       | 0C56  4880                           EXT.W       D0
       | 0C58  602C                           BRA.B       0C86
; 971: 			break;
; 972: 		case BD_RIGHT :
; 973: 			return(s->x < bordervalue);
       | 0C5A  3228 0006                      MOVE.W      0006(A0),D1
       | 0C5E  B246                           CMP.W       D6,D1
       | 0C60  5DC0                           SLT         D0
       | 0C62  4400                           NEG.B       D0
       | 0C64  4880                           EXT.W       D0
       | 0C66  601E                           BRA.B       0C86
; 974: 			break;
; 975: 		case BD_TOP :
; 976: 			return(s->y >= bordervalue);
       | 0C68  3228 0008                      MOVE.W      0008(A0),D1
       | 0C6C  B246                           CMP.W       D6,D1
       | 0C6E  5CC0                           SGE         D0
       | 0C70  4400                           NEG.B       D0
       | 0C72  4880                           EXT.W       D0
       | 0C74  6010                           BRA.B       0C86
; 977: 			break;
; 978: 		case BD_BOTTOM :
; 979: 			return(s->y < bordervalue);
       | 0C76  3228 0008                      MOVE.W      0008(A0),D1
       | 0C7A  B246                           CMP.W       D6,D1
       | 0C7C  5DC0                           SLT         D0
       | 0C7E  4400                           NEG.B       D0
       | 0C80  4880                           EXT.W       D0
       | 0C82  0C40 7000                      CMPI.W      #7000,D0
; 980: 			break;
; 981: 		}
; 982: 	}
; 983: 	return(0);
       | 0C86  4CDF 00C0                      MOVEM.L     (A7)+,D6-D7
       | 0C8A  584F                           ADDQ.W      #4,A7
       | 0C8C  4E75                           RTS
; 984: }
; 985: 
; 986: /**
; 987:  *
; 988:  *   Add the intersect of vectors s and p with the border to list vo
; 989:  *   Routine assumes that one vector is inside, the other outside (no
; 990:  *   particular order).
; 991:  *
; 992: **/
; 993: static struct vtx *addintersect(vo, s, p, bordertype, bordervalue)
; 994: 	struct vtx *vo, *s, *p;
; 995: 	int bordertype, bordervalue;
       | 0C8E  514F                           SUBQ.W      #8,A7
       | 0C90  48E7 3B14                      MOVEM.L     D2-D4/D6-D7/A3/A5,-(A7)
       | 0C94  2C01                           MOVE.L      D1,D6
       | 0C96  2E00                           MOVE.L      D0,D7
       | 0C98  266F 0028                      MOVEA.L     0028(A7),A3
       | 0C9C  2A49                           MOVEA.L     A1,A5
; 996: {
; 997: 	struct vtx *v;
; 998: 	
; 999: 	v = AddVertex(vo);
       | 0C9E  2F48 001C                      MOVE.L      A0,001C(A7)
       | 0CA2  2F4E 0020                      MOVE.L      A6,0020(A7)
       | 0CA6  6100 FA64                      BSR.W       070C
       | 0CAA  2040                           MOVEA.L     D0,A0
;1000: 	
;1001: 	if (s && p && v) 
       | 0CAC  200D                           MOVE.L      A5,D0
       | 0CAE  6700 0092                      BEQ.W       0D42
       | 0CB2  200B                           MOVE.L      A3,D0
       | 0CB4  6700 008C                      BEQ.W       0D42
       | 0CB8  2008                           MOVE.L      A0,D0
       | 0CBA  6700 0086                      BEQ.W       0D42
;1002: 	{
;1003: 		v->type = p->type;
       | 0CBE  316B 0004 0004                 MOVE.W      0004(A3),0004(A0)
;1004: 		
;1005: 		switch (bordertype) 
       | 0CC4  3007                           MOVE.W      D7,D0
       | 0CC6  5340                           SUBQ.W      #1,D0
       | 0CC8  670E                           BEQ.B       0CD8
       | 0CCA  5340                           SUBQ.W      #1,D0
       | 0CCC  670A                           BEQ.B       0CD8
       | 0CCE  5340                           SUBQ.W      #1,D0
       | 0CD0  673C                           BEQ.B       0D0E
       | 0CD2  5340                           SUBQ.W      #1,D0
       | 0CD4  6738                           BEQ.B       0D0E
       | 0CD6  606A                           BRA.B       0D42
;1006: 		{
;1007: 		case BD_LEFT :
;1008: 		case BD_RIGHT :
;1009: 			v->x = bordervalue;
       | 0CD8  3146 0006                      MOVE.W      D6,0006(A0)
;1010: 			v->y = s->y + (int) (((long) (bordervalue - s->x) * (p->y - s->y)) /
       | 0CDC  3006                           MOVE.W      D6,D0
       | 0CDE  322D 0006                      MOVE.W      0006(A5),D1
       | 0CE2  9041                           SUB.W       D1,D0
       | 0CE4  342D 0008                      MOVE.W      0008(A5),D2
       | 0CE8  362B 0008                      MOVE.W      0008(A3),D3
       | 0CEC  9642                           SUB.W       D2,D3
;1011: 			(p->x - s->x));
       | 0CEE  382B 0006                      MOVE.W      0006(A3),D4
       | 0CF2  9841                           SUB.W       D1,D4
       | 0CF4  48C4                           EXT.L       D4
       | 0CF6  48C3                           EXT.L       D3
       | 0CF8  48C0                           EXT.L       D0
       | 0CFA  2203                           MOVE.L      D3,D1
       | 0CFC  6100  0000-XX.1                BSR.W       __CXM33
       | 0D00  2204                           MOVE.L      D4,D1
       | 0D02  6100  0000-XX.1                BSR.W       __CXD33
       | 0D06  D440                           ADD.W       D0,D2
       | 0D08  3142 0008                      MOVE.W      D2,0008(A0)
;1012: 			break;
       | 0D0C  6034                           BRA.B       0D42
;1013: 		case BD_TOP :
;1014: 		case BD_BOTTOM :
;1015: 			v->y = bordervalue;
       | 0D0E  3146 0008                      MOVE.W      D6,0008(A0)
;1016: 			v->x = s->x + (int) (((long) (bordervalue - s->y) * (p->x - s->x)) /
       | 0D12  3006                           MOVE.W      D6,D0
       | 0D14  322D 0008                      MOVE.W      0008(A5),D1
       | 0D18  9041                           SUB.W       D1,D0
       | 0D1A  342D 0006                      MOVE.W      0006(A5),D2
       | 0D1E  362B 0006                      MOVE.W      0006(A3),D3
       | 0D22  9642                           SUB.W       D2,D3
;1017: 			(p->y - s->y));
       | 0D24  382B 0008                      MOVE.W      0008(A3),D4
       | 0D28  9841                           SUB.W       D1,D4
       | 0D2A  48C4                           EXT.L       D4
       | 0D2C  48C3                           EXT.L       D3
       | 0D2E  48C0                           EXT.L       D0
       | 0D30  2203                           MOVE.L      D3,D1
       | 0D32  6100  0000-XX.1                BSR.W       __CXM33
       | 0D36  2204                           MOVE.L      D4,D1
       | 0D38  6100  0000-XX.1                BSR.W       __CXD33
       | 0D3C  D440                           ADD.W       D0,D2
       | 0D3E  3142 0006                      MOVE.W      D2,0006(A0)
;1018: 			break;
;1019: 		}
       | 0D42  2008                           MOVE.L      A0,D0
       | 0D44  4CDF 28DC                      MOVEM.L     (A7)+,D2-D4/D6-D7/A3/A5
       | 0D48  504F                           ADDQ.W      #8,A7
       | 0D4A  4E75                           RTS

SECTION 01 "__MERGED" 000001A4 BYTES
0000 04 04 0A 0A 11 11 A0 A0 40 40 A0 A0 11 11 0A 0A ......  @@  ....
0010 04 04 08 08 10 10 20 20 40 40 20 20 10 10 08 08 ......  @@  ....
0020 10 10 00 00 00 00 00 00 01 01 82 82 44 44 28 28 ............DD((
0030 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 ................
0040 10 10 10 10 10 10 10 10 10 10 FF FF 10 10 10 10 ................
OFFSETS 0050 THROUGH 005F CONTAIN ZERO
0060 04 04 04 04 04 04 FF FF 80 80 80 80 80 80 FF FF ................
OFFSETS 0070 THROUGH 007F CONTAIN ZERO
0080 10 10 80 80 40 40 20 20 10 10 08 08 04 04 02 02 ....@@  ........
0090 01 01 00 00 55 55 00 00 AA AA 11 11 44 44 88 88 ....UU..**..DD..
00A0 44 44 22 22 00 00 44 44 00 00 00 00 00 00 00 00 DD""..DD........
00B0 88 88 11 11 11 11 11 11 00 00 33 33 33 33 33 33 ..........333333
00C0 33 33 33 33 33 33 33 33 33 33 0F 0F 0F 0F 0F 0F 3333333333......
00D0 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 00 FF 00 FF 00 FF ................
00E0 00 FF 00 FF 00 FF 00 FF 00 FF 81 FC C3 13 7D 22 ...........|C.}"
00F0 20 F2 E1 9F 1F 84 08 C6 7E 62 00 03  ra....F~b..
00FC 00000000-01 01.00000000
0100 00 03 ..
0102 00000010-01 01.00000010
0106 00 03 ..
0108 00000020-01 01.00000020
010C 00 03 ..
010E 00000030-01 01.00000030
0112 00 03 ..
0114 00000040-01 01.00000040
0118 FF FD .}
011A 00000050-01 01.00000050
OFFSETS 011E THROUGH 011F CONTAIN ZERO
0120 00000080-01 01.00000080
0124 00 03 ..
0126 00000082-01 01.00000082
012A 00 02 ..
012C 00000092-01 01.00000092
0130 00 01 ..
0132 0000009A-01 01.0000009A
0136 00 02 ..
0138 0000009E-01 01.0000009E
013C 00 01 ..
013E 000000A6-01 01.000000A6
0142 00 02 ..
0144 000000AA-01 01.000000AA
0148 00 02 ..
014A 000000B2-01 01.000000B2
014E FF FD .}
0150 000000BA-01 01.000000BA
0154 00 03 ..
0156 000000EA-01 01.000000EA
015A 00 00 00 00 AA AA ....**
0160 00 00 55 55 00 00 FF FF 00 00 00 00 AA AA AA AA ..UU........****
0170 AA AA 55 55 AA AA FF FF AA AA 00 00 55 55 AA AA **UU**..**..UU**
0180 55 55 55 55 55 55 FF FF 55 55 00 00 FF FF AA AA UUUUUU..UU....**
0190 FF FF 55 55 FF FF FF FF FF FF 00 00 00 03 00 01 ..UU............
01A0 00 02 00 00 ....

SECTION 02 "__MERGED" 00000008 BYTES
