1: /* $Header: packet.h,v 10.3 86/02/01 15:47:13 tony Rel $ */ 2: /* packet.h Packet descriptions for Workstation Graphics Architecture 3: * command packets 4: * 5: * Each object has two definitions. The more human-readable one 6: * has "reasonable" definitions, the one beginning with a_ expresses 7: * the structure as an array of shorts so that the C compiler doesn't 8: * move it around for silly alignment reasons. 9: * 10: * Author: Paul J. Asente 11: * Digital Equipment Corporation 12: * Western Reseach Lab 13: * Date: June 1983 14: */ 15: 16: /**************************************************************************** 17: * * 18: * Copyright (c) 1983, 1984 by * 19: * DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts. * 20: * All rights reserved. * 21: * * 22: * This software is furnished on an as-is basis and may be used and copied * 23: * only with inclusion of the above copyright notice. This software or any * 24: * other copies thereof may be provided or otherwise made available to * 25: * others only for non-commercial purposes. No title to or ownership of * 26: * the software is hereby transferred. * 27: * * 28: * The information in this software is subject to change without notice * 29: * and should not be construed as a commitment by DIGITAL EQUIPMENT * 30: * CORPORATION. * 31: * * 32: * DIGITAL assumes no responsibility for the use or reliability of its * 33: * software on equipment which is not supplied by DIGITAL. * 34: * * 35: * * 36: ****************************************************************************/ 37: 38: #ifndef WGA_PACKET 39: #define WGA_PACKET 40: 41: typedef struct _CopyAreaMod { 42: unsigned : 8; 43: unsigned m_source : 3; 44: unsigned m_mask : 3; 45: unsigned : 3; 46: unsigned m_map : 3; 47: unsigned m_clipping : 3; 48: } CopyAreaMod; 49: 50: typedef struct _DrawCurveMod { 51: unsigned : 8; 52: unsigned m_source : 3; 53: unsigned m_mask : 3; 54: unsigned : 3; 55: unsigned m_map : 3; 56: unsigned m_clipping : 3; 57: unsigned m_drawMode : 1; 58: unsigned m_patState : 2; 59: unsigned m_patMode : 2; 60: } DrawCurveMod; 61: 62: typedef struct _PrintTextMod { 63: unsigned : 8; 64: unsigned m_source : 3; 65: unsigned m_mask: 3; 66: unsigned m_dest : 3; 67: unsigned m_map : 3; 68: unsigned m_clipping : 3; 69: unsigned m_textSize : 1; 70: unsigned m_control : 1; 71: } PrintTextMod; 72: 73: typedef struct _FillAreaMod { 74: unsigned : 8; 75: unsigned m_source : 3; 76: unsigned : 6; 77: unsigned m_map : 3; 78: unsigned m_clipping : 3; 79: } FillAreaMod; 80: 81: typedef struct _FloodAreaMod { 82: unsigned : 8; 83: unsigned m_source : 3; 84: unsigned : 9; 85: unsigned m_clipping : 3; 86: unsigned m_boundary : 1; 87: } FloodAreaMod; 88: 89: typedef struct _LoadCursorMod { 90: unsigned : 8; 91: unsigned m_source : 3; 92: unsigned m_mask : 3; 93: unsigned : 3; 94: unsigned m_map : 3; 95: } LoadCursorMod; 96: 97: typedef struct _SetMouseCharacteristicsMod { 98: unsigned : 8; 99: unsigned m_tracking : 3; 100: } SetMouseCharacteristicsMod; 101: 102: typedef struct _SetTabletCharacteristicsMod { 103: unsigned : 8; 104: unsigned m_tracking : 3; 105: } SetTabletCharacteristicsMod; 106: 107: typedef struct _PacketHeader { 108: union { 109: struct { 110: unsigned _opcode : 8; 111: unsigned _modifier : 24; 112: } ph; 113: long emptymod; 114: CopyAreaMod copy; 115: DrawCurveMod draw; 116: PrintTextMod text; 117: FillAreaMod fill; 118: FloodAreaMod flood; 119: LoadCursorMod cursor; 120: SetMouseCharacteristicsMod mouse; 121: SetTabletCharacteristicsMod tablet; 122: } ph_modifier; 123: a_CharPtr ph_next; 124: } PacketHeader; 125: 126: #define ph_copyMod ph_modifier.copy 127: #define ph_drawMod ph_modifier.draw 128: #define ph_textMod ph_modifier.text 129: #define ph_fillMod ph_modifier.fill 130: #define ph_floodMod ph_modifier.flood 131: #define ph_cursorMod ph_modifier.cursor 132: #define ph_mouseMod ph_modifier.mouse 133: #define ph_tabletMod ph_modifier.tablet 134: 135: typedef short a_PacketHeader[4]; 136: 137: #define ph_opcode ph_modifier.ph._opcode 138: 139: #define COPY_AREA 1 140: 141: typedef struct _CopyAreaPacket { 142: a_PacketHeader cap_head; 143: union { 144: a_SubBitmap image; 145: Constant const; 146: a_Halftone pattern; 147: } cap_source; 148: a_SubBitmap cap_sourceMask; 149: a_Extent cap_maskSize; 150: a_Bitmap cap_destImage; 151: a_Point cap_destOffset; 152: union { 153: a_MapPtr ptr; 154: a_Map literal; 155: } cap_map; 156: union { 157: a_RectangleList rectList; 158: a_Rectangle litRect; 159: } cap_clipping; 160: } CopyAreaPacket; 161: 162: typedef short a_CopyAreaPacket[33]; 163: 164: #define DRAW_CURVE 2 165: 166: typedef struct _DrawCurvePacket { 167: a_PacketHeader dcp_head; 168: union { 169: a_SubBitmap image; 170: Constant const; 171: a_Halftone pattern; 172: } dcp_source; 173: a_SubBitmap dcp_sourceMask; 174: a_Extent dcp_maskSize; 175: a_Bitmap dcp_destImage; 176: a_Point dcp_destOffset; 177: union { 178: a_MapPtr ptr; 179: a_Map literal; 180: } dcp_map; 181: union { 182: a_RectangleList rectList; 183: a_Rectangle litRect; 184: } dcp_clipping; 185: a_SegmentList dcp_path; 186: a_PatternString dcp_pattern; 187: union { 188: a_PatternState literal; 189: a_PatternStatePtr ptr; 190: } dcp_patState; 191: union { 192: a_SubBitmap image; 193: Constant const; 194: a_Halftone pattern; 195: } dcp_secondSource; 196: } DrawCurvePacket; 197: 198: typedef short a_DrawCurvePacket[49]; 199: 200: #define PRINT_TEXT 3 201: 202: typedef struct _PrintTextPacket { 203: a_PacketHeader ptp_head; 204: union { 205: a_FontPtr font; 206: Constant const; 207: a_Halftone pattern; 208: } ptp_source; 209: a_FontPtr ptp_mask; 210: short filler[7]; 211: a_Bitmap ptp_destImage; 212: union { 213: a_Point literal; 214: a_PointPtr ptr; 215: } ptp_initialOffset; 216: union { 217: a_MapPtr ptr; 218: a_Map literal; 219: } ptp_map; 220: union { 221: a_RectangleList rectList; 222: a_Rectangle litRect; 223: } ptp_clipping; 224: a_TextString ptp_text; 225: a_ControlString ptp_control; 226: short ptp_charPad; 227: short ptp_spacePad; 228: } PrintTextPacket; 229: 230: typedef short a_PrintTextPacket[41]; 231: 232: #define FILL_AREA 11 233: 234: typedef struct _FillAreaPacket { 235: a_PacketHeader fap_head; 236: union { 237: Constant const; 238: a_Halftone pattern; 239: } fap_source; 240: a_Bitmap fap_destImage; 241: a_Point fap_destOffset; 242: union { 243: a_MapPtr ptr; 244: a_Map literal; 245: } fap_map; 246: a_Rectangle fap_clippingRec; 247: a_SegmentList fap_path; 248: } FillAreaPacket; 249: 250: typedef short a_FillAreaPacket[28]; 251: 252: #define FLOOD_AREA 4 253: 254: typedef struct _FloodAreaPacket { 255: a_PacketHeader flp_head; 256: union { 257: Constant const; 258: a_Halftone pattern; 259: } flp_source; 260: a_Bitmap flp_destImage; 261: a_Point flp_seed; 262: Rectangle flp_clippingRec; 263: union { 264: a_MapPtr ptr; 265: a_Map literal; 266: } flp_boundary; 267: } FloodAreaPacket; 268: 269: typedef short a_FloodAreaPacket[24]; 270: 271: #define LOAD_CURSOR 5 272: 273: typedef struct _LoadCursorPacket { 274: a_PacketHeader lcp_head; 275: union { 276: a_SubBitmap image; 277: Constant const; 278: a_Halftone pattern; 279: } lcp_source; 280: a_SubBitmap lcp_sourceMask; 281: a_Extent lcp_maskSize; 282: union { 283: a_MapPtr ptr; 284: a_Map literal; 285: } lcp_map; 286: short lcp_blink; 287: short lcp_tip_x; 288: short lcp_tip_y; 289: short lcp_center_x; 290: short lcp_center_y; 291: } LoadCursorPacket; 292: 293: typedef short a_LoadCursorPacket[29]; 294: 295: #define SET_CURSOR_POSITION 6 296: 297: typedef struct _SetCursorPositionPacket { 298: a_PacketHeader scp_head; 299: a_Point scp_position; 300: } SetCursorPositionPacket; 301: 302: typedef short a_SetCursorPositionPacket[6]; 303: 304: #define ATTACH_CURSOR 7 305: 306: typedef struct _AttachCursorPacket { 307: a_PacketHeader acp_head; 308: short acp_device; 309: } AttachCursorPacket; 310: 311: typedef short a_AttachCursorPacket[5]; 312: 313: #define GET_CURSOR_POSITION 8 314: 315: typedef struct _GetCursorPositionPacket { 316: a_PacketHeader gcp_head; 317: a_Point gcp_position; 318: } GetCursorPositionPacket; 319: 320: typedef short a_GetCursorPositionPacket[6]; 321: 322: #define MOVE_OBJECT 9 323: #define MOVE_OBJECT_ROM 128 324: 325: typedef struct _MoveObjectPacket { 326: a_PacketHeader mop_head; 327: short mop_objectType; 328: a_MemSize mop_objectSize; 329: a_CharPtr mop_source; 330: a_CharPtr mop_dest; 331: } MoveObjectPacket; 332: 333: typedef short a_MoveObjectPacket[11]; 334: 335: #define REPORT_STATUS 10 336: #define REPORT_STATUS_ROM 129 337: 338: typedef struct _ReportStatusPacket { 339: a_PacketHeader rsp_head; 340: char rsp_deviceType[4]; 341: short rsp_deviceVersion; 342: short rsp_ucodeVersion; 343: a_Bitmap rsp_visibleFramebuffer; 344: a_MemArea rsp_freeFramebuffer; 345: a_MemArea rsp_freeProgramMemory; 346: a_MemArea rsp_hostMemory; 347: } ReportStatusPacket; 348: 349: typedef short a_ReportStatusPacket[25]; 350: 351: #define NO_OPERATION 0 352: 353: typedef struct _NoopPacket { 354: a_PacketHeader nop_head; 355: } NoopPacket; 356: 357: typedef short a_NoopPacket[4]; 358: 359: #define GET_MOUSE_POSITION 12 360: 361: typedef struct _GetMousePositionPacket { 362: a_PacketHeader gmp_head; 363: a_Point gmp_position; 364: } GetMousePositionPacket; 365: 366: typedef short a_GetMousePositionPacket[6]; 367: 368: #define SET_MOUSE_CHARACTERISTICS 13 369: 370: typedef struct _SetMouseCharacteristicsPacket { 371: a_PacketHeader smc_head; 372: union { 373: struct { 374: short multiplier; 375: short divisor; 376: } linear; 377: struct { 378: short scale; 379: short threshold; 380: } exponential; 381: } tracking; 382: } SetMouseCharacteristicsPacket; 383: 384: 385: #define smc_multiplier tracking.linear.multiplier 386: #define smc_divisor tracking.linear.divisor 387: #define smc_threshold tracking.exponential.threshold 388: #define smc_scale tracking.exponential.scale 389: 390: typedef short a_SetMouseCharacteristicsPacket[6]; 391: 392: #define GET_TABLET_POSITION 14 393: 394: typedef struct _GetTabletPositionPacket { 395: a_PacketHeader gtp_head; 396: a_Point gtp_position; 397: } GetTabletPositionPacket; 398: 399: typedef short a_GetTabletPositionPacket[6]; 400: 401: #define SET_TABLET_CHARACTERISTICS 16 402: 403: typedef struct _SetTabletCharacteristicsPacket { 404: a_PacketHeader stc_head; 405: union { 406: struct { 407: short multiplier; 408: short divisor; 409: } linear; 410: struct { 411: a_Point input; 412: a_Point output; 413: } quantized; 414: } tracking; 415: } SetTabletCharacteristicsPacket; 416: 417: #define stc_multiplier tracking.linear.multiplier 418: #define stc_divisor tracking.linear.divisor 419: #define stc_input tracking.quantized.input 420: #define stc_output tracking.quantized.output 421: 422: typedef short a_SetTabletCharacteristicsPacket[8]; 423: 424: #define SET_POINTING_DEVICE_REPORTING 15 425: 426: typedef struct _SetPointingDeviceReportingPacket { 427: a_PacketHeader spdp_head; 428: short spdp_enable; 429: } SetPointingDeviceReportingPacket; 430: 431: typedef short a_SetPointingDeviceReportingPacket[5]; 432: 433: typedef union _Packet { 434: a_CopyAreaPacket copyArea; 435: a_DrawCurvePacket drawCurve; 436: a_PrintTextPacket writeText; 437: a_FillAreaPacket fillArea; 438: a_FloodAreaPacket floodArea; 439: a_LoadCursorPacket loadCursor; 440: a_SetCursorPositionPacket setCursor; 441: a_AttachCursorPacket attachCursor; 442: a_GetCursorPositionPacket getCursor; 443: a_MoveObjectPacket moveObject; 444: a_ReportStatusPacket reportStatus; 445: a_NoopPacket noop; 446: a_GetMousePositionPacket getMouse; 447: a_SetMouseCharacteristicsPacket setMouse; 448: a_GetTabletPositionPacket getTablet; 449: a_SetTabletCharacteristicsPacket setTablet; 450: a_SetPointingDeviceReportingPacket setPointingDevice; 451: } Packet; 452: 453: #endif