Annotation of ntddk/src/video/displays/vga/lines.h, revision 1.1

1.1     ! root        1: /******************************Module*Header*******************************\
        !             2: * Module Name: lines.h
        !             3: *
        !             4: * Line drawing constants and structures.
        !             5: *
        !             6: * NOTE: This file mirrors LINES.INC.  Changes here must be reflected in
        !             7: * the .inc file!
        !             8: *
        !             9: * Created: 30-Mar-1992
        !            10: * Author: Andrew Milton [w-andym]
        !            11: *
        !            12: * Copyright (c) 1992 Microsoft Corporation
        !            13: \**************************************************************************/
        !            14: 
        !            15: typedef LONG STYLEPOS;
        !            16: 
        !            17: #define STYLE_MAX_COUNT     16
        !            18: #define STYLE_MAX_VALUE     0x3fffL
        !            19: #define RUN_MAX             20
        !            20: #define STRIP_MAX           100
        !            21: #define STYLE_DENSITY       3           // For VGA
        !            22: 
        !            23: // For the ROP table:
        !            24: 
        !            25: #define MIX_XOR_OFFSET      8
        !            26: 
        !            27: #define AND_ZERO            0L
        !            28: #define AND_PEN             1L
        !            29: #define AND_NOTPEN          2L
        !            30: #define AND_ONE             3L
        !            31: 
        !            32: #define XOR_ZERO            (AND_ZERO   << MIX_XOR_OFFSET)
        !            33: #define XOR_PEN             (AND_PEN    << MIX_XOR_OFFSET)
        !            34: #define XOR_NOTPEN          (AND_NOTPEN << MIX_XOR_OFFSET)
        !            35: #define XOR_ONE             (AND_ONE    << MIX_XOR_OFFSET)
        !            36: 
        !            37: // Flip and round flags:
        !            38: 
        !            39: #define FL_H_ROUND_DOWN         0x00000080L     // .... .... 1... ....
        !            40: #define FL_V_ROUND_DOWN         0x00008000L     // 1... .... .... ....
        !            41: 
        !            42: #define FL_FLIP_D               0x00000005L     // .... .... .... .1.1
        !            43: #define FL_FLIP_V               0x00000008L     // .... .... .... 1...
        !            44: #define FL_FLIP_SLOPE_ONE       0x00000010L     // .... .... ...1 ....
        !            45: #define FL_FLIP_HALF            0x00000002L     // .... .... .... ..1.
        !            46: #define FL_FLIP_H               0x00000200L     // .... ..1. .... ....
        !            47: 
        !            48: #define FL_ROUND_MASK           0x0000001CL     // .... .... ...1 11..
        !            49: #define FL_ROUND_SHIFT          2
        !            50: 
        !            51: #define FL_RECTLCLIP_MASK       0x0000000CL     // .... .... .... 11..
        !            52: #define FL_RECTLCLIP_SHIFT      2
        !            53: 
        !            54: #define FL_STRIP_MASK           0x00000003L     // .... .... .... ..11
        !            55: #define FL_STRIP_SHIFT          0
        !            56: 
        !            57: #define FL_SIMPLE_CLIP          0x00000020      // .... .... ..1. ....
        !            58: #define FL_COMPLEX_CLIP         0x00000040      // .... .... .1.. ....
        !            59: #define FL_CLIP                (FL_SIMPLE_CLIP | FL_COMPLEX_CLIP)
        !            60: 
        !            61: #define FL_ARBITRARYSTYLED      0x00000400L     // .... .1.. .... ....
        !            62: #define FL_MASKSTYLED           0x00000800L     // .... 1... .... ....
        !            63: #define FL_STYLED              (FL_ARBITRARYSTYLED | FL_MASKSTYLED)
        !            64: #define FL_ALTERNATESTYLED      0x00001000L     // ...1 .... .... ....
        !            65: 
        !            66: #define FL_STYLE_MASK           0x00000C00L
        !            67: #define FL_STYLE_SHIFT          10
        !            68: 
        !            69: // Simpler flag bits in high byte:
        !            70: 
        !            71: #define FL_DONT_DO_HALF_FLIP    0x00002000L     // ..1. .... .... ....
        !            72: #define FL_PHYSICAL_DEVICE      0x00004000L     // .1.. .... .... ....
        !            73: 
        !            74: // Miscellaneous DDA defines:
        !            75: 
        !            76: #define LROUND(x, flRoundDown) (((x) + F/2 - ((flRoundDown) > 0)) >> 4)
        !            77: #define F                     16
        !            78: #define FLOG2                 4
        !            79: #define LFLOOR(x)             ((x) >> 4)
        !            80: #define FXFRAC(x)             ((x) & (F - 1))
        !            81: 
        !            82: struct _STRIP;
        !            83: struct _LINESTATE;
        !            84: 
        !            85: typedef VOID (*PFNSTRIP)(struct _STRIP*, struct _LINESTATE*, LONG*);
        !            86: 
        !            87: typedef struct _STRIP {
        !            88: 
        !            89: // Updated by strip drawers:
        !            90: 
        !            91:     BYTE*           pjScreen;       // Points to the first pixel of the line
        !            92:     BYTE            jBitMask;       // Bit making for pixel in byte
        !            93:     BYTE            jFiller1[3];    //   jBitMask sometimes treated as a ULONG
        !            94:     BYTE            jStyleMask;     // Are we working on a gap in the style?
        !            95:     BYTE            jFiller2[3];    //   jStyleMask sometimes treated as a ULONG
        !            96: 
        !            97:     STYLEPOS*       psp;            // Pointer to current style entry
        !            98:     STYLEPOS        spRemaining;    // To go in current style
        !            99: 
        !           100: // Not modified by strip drawers:
        !           101: 
        !           102:     LONG            lNextScan;      // Signed increment to next scan
        !           103:     LONG*           plStripEnd;     // Points one element past last strip
        !           104:     LONG            flFlips;        // Indicates if line goes up or down
        !           105:     STYLEPOS*       pspStart;       // Pointer to start of style array
        !           106:     STYLEPOS*       pspEnd;         // Pointer to end of style array
        !           107:     ULONG           ulBitmapROP;    // ROP info for DFBs
        !           108:     ULONG           xyDensity;      // Density of style
        !           109: 
        !           110: // We leave room for a couple of extra dwords at the end of the strips
        !           111: // array that can be used by the strip drawers:
        !           112: 
        !           113:     LONG            alStrips[STRIP_MAX + 2]; // Array of strips
        !           114: } STRIP;
        !           115: 
        !           116: typedef struct _LINESTATE {
        !           117: 
        !           118:     STYLEPOS        spTotal;        // Sum of style array
        !           119:     STYLEPOS        spTotal2;       // Twice sum of style array
        !           120:     STYLEPOS        spNext;         // Style state at start of next line
        !           121:     STYLEPOS        spComplex;      // Style state at start of complex clip line
        !           122: 
        !           123:     STYLEPOS*       aspRtoL;        // Style array in right-to-left order
        !           124:     STYLEPOS*       aspLtoR;        // Style array in left-to-right order
        !           125: 
        !           126:     ULONG           xyDensity;      // Density of style
        !           127:     ULONG           cStyle;         // Size of style array
        !           128: 
        !           129:     ULONG           ulStyleMaskLtoR;// Original style mask, left-to-right order
        !           130:     ULONG           ulStyleMaskRtoL;// Original style mask, right-to-left order
        !           131: 
        !           132:     BOOL            ulStartMask;    // Determines if first element in style
        !           133:                                     // array is for a gap or a dash
        !           134: 
        !           135: // Used for 2 pass ROPs and/or device-format bitmaps:
        !           136: 
        !           137:     PFNSTRIP*       apfnStrip;      // Actual strip table if doing 2-pass ROP
        !           138:                                     // or a DFB
        !           139: 
        !           140:     ULONG           iColor;         // Color for 2nd pass of 2-pass ROP
        !           141:                                     // or color index for DFB pen
        !           142: 
        !           143:     ULONG           ulVgaMode;      // VGA mode for 2nd pass of 2-pass ROP
        !           144: 
        !           145:     ULONG           ulDrawModeIndex;// Set to mix - 1
        !           146:     ULONG           ulBitmapROP;    // ROP info for DFB strip drawer
        !           147:     LONG            lNextPlane;     // Offset to next plane, same scan line
        !           148: 
        !           149: } LINESTATE;                   /* ls */
        !           150: 
        !           151: BOOL bLinesSimple(PDEVSURF, POINTFIX*, POINTFIX*, RUN* prun, ULONG, LINESTATE*,
        !           152:                   RECTL*, PFNSTRIP*, FLONG);
        !           153: 
        !           154: BOOL bLines(PDEVSURF, POINTFIX*, POINTFIX*, RUN* prun, ULONG,
        !           155:             LINESTATE*, RECTL*, PFNSTRIP*, FLONG);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.