📄 fguser.h
字号:
#define GET_X(event) ((event)->vse_x) /* get x position */#define GET_Y(event) ((event)->vse_y) /* get y position */#define GET_TIME(event) ((event)->vse_time) /* get time */#define GET_TYPE(event) ((event)->vse_type) /* get entry type */#define GET_KEY(event) ((event)->vse_key) /* get keycode */#define GET_DIR(event) ((event)->vse_direction) /* get direction */#define GET_DEVICE(event) ((event)->vse_device) /* get device */#define GETEND(eq) (++(eq)->header.head >= (eq)->header.size ? \ (eq)->header.head = 0 : 0 )/* * macros to be used by the event queue loader *//* ISFULL yields TRUE if queue is full */#define ISFULL(eq) ((eq)->header.tail+1 == (eq)->header.head || \ ((eq)->header.tail+1 == (eq)->header.size && \ (eq)->header.head == 0))/* get address of the billet for NEXT event */#define PUTBEGIN(eq) (&(eq)->header.events[(eq)->header.tail])#define PUT_X(event, value) ((event)->vse_x = value) /* put X pos */#define PUT_Y(event, value) ((event)->vse_y = value) /* put Y pos */#define PUT_TIME(event, value) ((event)->vse_time = value) /* put time */#define PUT_TYPE(event, value) ((event)->vse_type = value) /* put type */#define PUT_KEY(event, value) ((event)->vse_key = value) /* put input key */#define PUT_DIR(event, value) ((event)->vse_direction = value) /* put dir */#define PUT_DEVICE(event, value) ((event)->vse_device = value) /* put dev */#define PUTEND(eq) (++(eq)->header.tail >= (eq)->header.size ? \ (eq)->header.tail = 0 : 0) /****************************************************************** * * DMA I/O DEFINITIONS * ******************************************************************//* * The DMA request queue is implemented as a ring buffer of "DMAreq" * structures. The queue is accessed using ring indices located in the * "DMAreq_header" structure. Access is implemented using access macros * similar to the event queue access macros above. */ struct FIFOreq { short FIFOtype; /* FIFO type code */ char *bufp; /* virtual adrs of buffer */ int length; /* transfer buffer length */ }; struct DMAreq { short DMAtype; /* DMA type code (for VAXstar) */ short DMAdone; /* DMA done parameter */ char *bufp; /* virtual adrs of buffer */ int length; /* transfer buffer length */ };/* DMA type command codes */#define DISPLIST 1 /* display list DMA */#define PTOB 2 /* 1 plane Qbus to bitmap DMA */#define BTOP 3 /* 1 plane bitmap to Qbus DMA *//* DMA done notification code */#define FIFO_EMPTY 0x01 /* DONE when FIFO becomes empty */#define COUNT_ZERO 0x02 /* DONE when count becomes zero */#define WORD_PACK 0x04 /* program the gate array for word packing */#define BYTE_PACK 0x08 /* program gate array for byte packing */#define REQUEST_DONE 0x100 /* clear when driver has processed request */#define HARD_ERROR 0x200 /* DMA hardware error occurred *//* DMA request queue is a ring buffer of request structures */ struct FIFOreq_header { short status; /* master FIFO status word */ int shared_size; /* size of shared memory in bytes */ struct FIFOreq *FIFOreq; /* start address of request queue */ int used; /* # of queue entries currently used */ int size; /* # of "FIFOreq"'s in the request queue */ int oldest; /* index to oldest queue'd request */ int newest; /* index to newest queue'd request */ }; struct DMAreq_header { int QBAreg; /* cookie Qbus map reg for this buffer */ short status; /* master DMA status word */ int shared_size; /* size of shared memory in bytes */ struct DMAreq *DMAreq; /* start address of request queue */ int used; /* # of queue entries currently used */ int size; /* # of "DMAreq"'s in the request queue */ int oldest; /* index to oldest queue'd request */ int newest; /* index to newest queue'd request */ };/* bit definitions for DMAstatus word in DMAreq_header */#define DMA_ACTIVE 0x0004 /* DMA in progress */#define DMA_ERROR 0x0080 /* DMA hardware error */#define DMA_IGNORE 0x0002 /* flag to ignore this interrupt *//* * macros for DMA request queue fiddling */ /* DMA status set/check macros */#define DMA_SETACTIVE(header) ((header)->status |= DMA_ACTIVE)#define DMA_CLRACTIVE(header) ((header)->status &= ~DMA_ACTIVE)#define DMA_ISACTIVE(header) ((header)->status & DMA_ACTIVE)#define DMA_SETERROR(header) ((header)->status |= DMA_ERROR)#define DMA_CLRERROR(header) ((header)->status &= ~DMA_ERROR)#define DMA_ISERROR(header) ((header)->status & DMA_ERROR)#define DMA_SETIGNORE(header) ((header)->status |= DMA_IGNORE)#define DMA_CLRIGNORE(header) ((header)->status &= ~DMA_IGNORE)#define DMA_ISIGNORE(header) ((header)->status & DMA_IGNORE)/* yields TRUE if queue is empty (ISEMPTY) or full (ISFULL) */#define DMA_ISEMPTY(header) ((header)->used == 0)#define DMA_ISFULL(header) ((header)->used >= (header)->size)/* returns address of the billet for next (PUT) * or oldest (GET) request */#define FIFO_PUTBEGIN(header) (&(header)->FIFOreq[(header)->newest])#define FIFO_GETBEGIN(header) (&(header)->FIFOreq[(header)->oldest])#define DMA_PUTBEGIN(header) (&(header)->DMAreq[(header)->newest])#define DMA_GETBEGIN(header) (&(header)->DMAreq[(header)->oldest])/* does queue access pointer maintenance */#define DMA_GETEND(header) (++(header)->oldest >= (header)->size \ ? (header)->oldest = 0 : 0); \ --(header)->used;#define DMA_PUTEND(header) (++(header)->newest >= (header)->size \ ? (header)->newest = 0 : 0); \ ++(header)->used;/****************************************************************** * * COLOR MAP WRITE BUFFER DEFINITIONS * ******************************************************************/ struct rgb { unsigned char offset; /* color map address for load */ unsigned char red; /* data for red map */ unsigned char green; /* data for green map */ unsigned char blue; /* data for blue map */ }; struct color_buf { char status; /* load request/service status */ short count; /* number of entries to br loaded */ struct rgb rgb[16]; };#define LOAD_COLOR_MAP 0x0001/****************************************************************** * * SCROLL ASSIST DEFINITIONS * ******************************************************************/ struct scroll { short status; short viper_constant; short y_scroll_constant; short y_offset; short x_index_pending; short y_index_pending; };#define LOAD_REGS 0x0001#define LOAD_INDEX 0x0002/****************************************************************** * * MOUSE/TABLET/KBD PROGRAMMING DEFINITIONS * ******************************************************************//* * LK201 programmming definitions */#define LK_UPDOWN 0x86 /* bits for setting lk201 modes */#define LK_AUTODOWN 0x82#define LK_DOWN 0x80#define LK_DEFAULTS 0xD3 /* reset (some) default settings */#define LK_AR_ENABLE 0xE3 /* global auto repeat enable */#define LK_CL_ENABLE 0x1B /* keyclick enable */#define LK_KBD_ENABLE 0x8B /* keyboard enable */#define LK_BELL_ENABLE 0x23 /* the bell */#define LK_RING_BELL 0xA7 /* ring keyboard bell */#define LK_LED_ENABLE 0x13 /* light led */#define LK_LED_DISABLE 0x11 /* turn off led */#define LED_1 0x81 /* led bits */#define LED_2 0x82#define LED_3 0x84#define LED_4 0x88#define LED_ALL 0x8F#define LK_LED_HOLD LED_4#define LK_LED_LOCK LED_3#define LK_LED_COMPOSE LED_2#define LK_LED_WAIT LED_1#define LK_KDOWN_ERROR 0x3D /* key down on powerup error */#define LK_POWER_ERROR 0x3E /* keyboard failure on powerup test */#define LK_OUTPUT_ERROR 0xB5 /* keystrokes lost during inhibit */#define LK_INPUT_ERROR 0xB6 /* garbage command to keyboard */#define LK_LOWEST 0x56 /* lowest significant keycode */#define LK_DIV6_START 0xAD /* start of div 6 */#define LK_DIV5_END 0xB2 /* end of div 5 */#define LAST_PARAM 0x80 /* "no more params" bit */ struct prgkbd { short cmd; /* LK201 command opcode */ short param1; /* 1st cmd parameter (can be null) */ short param2; /* 2nd cmd parameter (can be null) */ };/* * "special" LK-201 keys */#define SHIFT 174#define LOCK 176#define REPEAT 180#define CNTRL 175#define ALLUP 179#define HOLD 86/* * cursor programming structure */ struct prg_cursor { unsigned short acc_factor; /* cursor aceleration factor */ unsigned short threshold; /* threshold to trigger acc at */ };/* * mouse definitions */#define INCREMENTAL 'R' /* stream mode reports (55 hz) */#define PROMPT_MODE 'D' /* report when prompted */#define REQUEST_POS 'P' /* request position report */#define SELF_TEST 'T' /* request self test */#define MOUSE_ID 0x2 /* mouse ID in lo 4 bits */#define START_FRAME 0x80 /* start of report frame bit */#define X_SIGN 0x10 /* position sign bits */#define Y_SIGN 0x08#define RIGHT_BUTTON 0x01 /* mouse buttons */#define MIDDLE_BUTTON 0x02#define LEFT_BUTTON 0x04/* mouse report structure definition */ struct mouse_report { char state; /* buttons and sign bits */ short dx; /* delta X since last change */ short dy; /* delta Y since last change */ char bytcnt; /* mouse report byte count */ };/* * tablet command/interface definitions */#define T_STREAM 'R' /* continuous stream report mode */#define T_POINT 'D' /* enter report-on-request mode */#define T_REQUEST 'P' /* request position report */#define T_BAUD 'B' /* increase baud to 9600 from 4800 */#define T_RATE_55 'K' /* report rate: 55/sec */#define T_RATE_72 'L' /* report rate: 72/sec */#define T_RATE_120 'M' /* report rate: 120/sec (9600 only) */#define T_TEST SELF_TEST /* do self test */#define TABLET_ID 0x4 /* tablet ID in lo 4 bits */#define T_START_FRAME 0x80 /* start of report frame bit */#define T_PROXIMITY 0x01 /* state pointer in proximity */#define T_LEFT_BUTTON 0x02 /* puck buttons */#define T_FRONT_BUTTON 0x04#define T_RIGHT_BUTTON 0x08#define T_BACK_BUTTON 0x10#define T_BARREL_BUTTON T_LEFT_BUTTON /* stylus buttons */#define T_TIP_BUTTON T_FRONT_BUTTON
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -