home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mitsch75.zip / scheme-7_5_17-src.zip / scheme-7.5.17 / src / microcode / ntscreen.h < prev    next >
C/C++ Source or Header  |  2000-04-18  |  9KB  |  277 lines

  1. /* -*-C-*-
  2.  
  3. $Id: ntscreen.h,v 1.20 2000/04/19 03:21:07 cph Exp $
  4.  
  5. Copyright (c) 1993-2000 Massachusetts Institute of Technology
  6.  
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or (at
  10. your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful, but
  13. WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15. General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. */
  21.  
  22. #ifndef SCM_NTSCREEN_H
  23. #define SCM_NTSCREEN_H
  24.  
  25. #include <windows.h>
  26. #include <commdlg.h>
  27.  
  28. typedef struct tagSCREENINFO *SCREEN;
  29. typedef unsigned char SCREEN_ATTRIBUTE;
  30.  
  31. /* Events */
  32.  
  33. /* Mode flags: */
  34.  
  35. /* a) mask of interesting events */
  36. #define    SCREEN_EVENT_TYPE_RESIZE    0x000001
  37. #define    SCREEN_EVENT_TYPE_KEY        0x000002
  38. #define    SCREEN_EVENT_TYPE_MOUSE        0x000004
  39. #define    SCREEN_EVENT_TYPE_CLOSE        0x000008
  40. #define    SCREEN_EVENT_TYPE_FOCUS        0x000010
  41. #define    SCREEN_EVENT_TYPE_VISIBILITY    0x000020
  42. #define SCREEN_EVENT_TYPE_MASK        0x00003F
  43.  
  44. /* b) flags for screen behaviour */
  45. #define SCREEN_MODE_AUTOWRAP        0x001000
  46. #define SCREEN_MODE_ECHO        0x002000
  47. #define SCREEN_MODE_CR_NEWLINES        0x004000
  48. #define SCREEN_MODE_LINE_INPUT        0x008000
  49. #define SCREEN_MODE_PROCESS_OUTPUT    0x010000
  50. #define SCREEN_MODE_EAGER_UPDATE    0x020000
  51. #define SCREEN_MODE_EDWIN        0x040000
  52. #define SCREEN_MODE_NEWLINE_CRS        0x080000
  53. #define SCREEN_MODE_VK_KEYS        0x100000
  54. #define SCREEN_MODE_MASK        0x1FF000
  55.  
  56. /* Kludge: */
  57. #define SCREEN_EDWIN_RESIZE_COMMAND    0323        /* M-S */
  58.  
  59. typedef unsigned long SCREEN_EVENT_TYPE;
  60.  
  61. typedef struct
  62. {
  63.   unsigned int rows;
  64.   unsigned int columns;
  65. } SCREEN_RESIZE_EVENT_RECORD;
  66.  
  67. typedef struct
  68. {
  69.   unsigned int repeat_count;
  70.   int virtual_keycode;
  71.   unsigned int virtual_scancode;
  72.   int ch;
  73.   unsigned int control_key_state : 9;
  74.   unsigned int key_down : 1;
  75. } SCREEN_KEY_EVENT_RECORD;
  76.  
  77. typedef struct
  78. {
  79.   unsigned int row;
  80.   unsigned int column;
  81.   unsigned int control_key_state : 9;
  82.   unsigned int button_state : 3;    /* the button being pressed */
  83.   unsigned int up : 1;                  /* set for mouse *BUTTONUP messages */
  84.   unsigned int mouse_moved : 1;        /* if neither then single click */
  85.   unsigned int double_click : 1;
  86. } SCREEN_MOUSE_EVENT_RECORD;
  87.  
  88. typedef struct
  89. {
  90.   unsigned int gained_p : 1;
  91. } SCREEN_FOCUS_EVENT_RECORD;
  92.  
  93. typedef struct
  94. {
  95.   unsigned int show_p : 1;
  96. } SCREEN_VISIBILITY_EVENT_RECORD;
  97.  
  98. typedef struct
  99. {
  100.   HWND handle;
  101.   SCREEN_EVENT_TYPE type;
  102.   union
  103.     {
  104.       SCREEN_KEY_EVENT_RECORD key;
  105.       SCREEN_RESIZE_EVENT_RECORD resize;
  106.       SCREEN_MOUSE_EVENT_RECORD mouse;
  107.       SCREEN_FOCUS_EVENT_RECORD focus;
  108.       SCREEN_VISIBILITY_EVENT_RECORD visibility;
  109.     } event;
  110. } SCREEN_EVENT;
  111.  
  112. /* control_key_state flags.  Only used for effective modifiers (i.e.
  113.    not set when already incorporated into a character translation.  */
  114.  
  115. #define SCREEN_ALT_PRESSED            0x0001 /* An Alt key is pressed. */
  116. #define SCREEN_CONTROL_PRESSED        0x0002 /* A Ctrl key is pressed. */
  117. #define SCREEN_SHIFT_PRESSED          0x0004 /* A Shift key is pressed. */
  118. #define SCREEN_CAPSLOCK_ON            0x0008
  119. #define SCREEN_LEFT_CONTROL_PRESSED   0x0010
  120. #define SCREEN_RIGHT_CONTROL_PRESSED  0x0020
  121. #define SCREEN_LEFT_ALT_PRESSED       0x0040
  122. #define SCREEN_RIGHT_ALT_PRESSED      0x0080
  123. #define SCREEN_NUMLOCK_ON             0x0100
  124. #define SCREEN_SCROLLLOCK_ON          0x0200
  125. #define SCREEN_ANY_ALT_KEY_MASK          SCREEN_ALT_PRESSED
  126.  
  127. /* button_state flags */
  128. #define SCREEN_MOUSE_EVENT_LEFT_PRESSED   0x01
  129. #define SCREEN_MOUSE_EVENT_RIGHT_PRESSED  0x02
  130. #define SCREEN_MOUSE_EVENT_MIDDLE_PRESSED 0x04
  131.  
  132. /* Messages */
  133.  
  134. #ifndef SCREEN_COMMAND_FIRST
  135. #define SCREEN_COMMAND_FIRST    (WM_USER + 10)
  136. #endif
  137.  
  138. #define SCREEN_WRITE        (SCREEN_COMMAND_FIRST+0)
  139.   /* text = (LPSTR)lParam */
  140.   /* len  = (int)wParam */
  141.  
  142. #define SCREEN_SETPOSITION    (SCREEN_COMMAND_FIRST+1)
  143.   /* column = LOWORD(lParam) */
  144.   /* row    = HIWORD(lParam) */
  145.  
  146. #define SCREEN_GETPOSITION    (SCREEN_COMMAND_FIRST+2)
  147.   /* return  column = LOWORD(retval) */
  148.   /* return  row    = HIWORD(retval) */
  149.  
  150. #define SCREEN_SETATTRIBUTE    (SCREEN_COMMAND_FIRST+3)
  151.   /* attribute = wParam */
  152.     
  153. #define SCREEN_GETATTRIBUTE    (SCREEN_COMMAND_FIRST+4)
  154.   /* return  attribute = retval */
  155.     
  156. #define SCREEN_PEEKEVENT    (SCREEN_COMMAND_FIRST+5)
  157.   /* count  = wParam */
  158.   /* buffer = (SCREEN_EVENT*) lParam */
  159.   /* returns #of events peeked */
  160.   /* if buffer is NULL, can be used to count events pending */
  161.  
  162. #define SCREEN_READEVENT        (SCREEN_COMMAND_FIRST+6)
  163.   /* count  = wParam */
  164.   /* buffer = (SCREEN_EVENT*) lParam */
  165.   /* returns #of events */
  166.   /* if buffer is NULL, events are discarded */
  167.  
  168. #define SCREEN_SETMODES        (SCREEN_COMMAND_FIRST+7)
  169.   /* modes = (WORD) wParam */
  170.  
  171. #define SCREEN_GETMODES        (SCREEN_COMMAND_FIRST+8)
  172.   /* return  modes */
  173.  
  174. /* A window has commands, which may be bound to thunks.
  175.    Control characters may be bound to commands.
  176.    Thus commands may be invoked by keypress and by menu action.  */
  177.  
  178. typedef LRESULT (* COMMAND_HANDLER) (HWND, WORD);
  179.  
  180. #define SCREEN_SETCOMMAND    (SCREEN_COMMAND_FIRST+9)
  181.   /* command = wParam */
  182.   /* handler = COMMAND_HANDLER = lParam;  NULL=disable */
  183.   /* returns old handler, or -1 on space error */
  184.  
  185. #define SCREEN_GETCOMMAND    (SCREEN_COMMAND_FIRST+10)
  186.   /* command = wParam */
  187.   /* return  handler for char */
  188.  
  189. #define SCREEN_SETBINDING    (SCREEN_COMMAND_FIRST+11)
  190.   /* char = wParam */
  191.   /* command = lParam; */
  192.  
  193. #define SCREEN_GETBINDING    (SCREEN_COMMAND_FIRST+12)
  194.   /* char = wParam */
  195.   /* return command */
  196.  
  197. #define SCREEN_SETMENU        (SCREEN_COMMAND_FIRST+13)
  198.   /* hMenu = (HMENU)lParam */
  199.  
  200. #define SCREEN_READ        (SCREEN_COMMAND_FIRST+14)
  201.   /* buffer = (LPSTR) lParam */
  202.   /* length = wParam */
  203.   /* return  characters read */
  204.   /* (-1) if read would block in line-mode */
  205.  
  206. #define SCREEN_CLEAR        (SCREEN_COMMAND_FIRST+15)
  207.   /* kind = wParam */
  208.   /* kind=0  : whole screen */
  209.   /* kind=1  : to eol */
  210.     
  211. /* Predefined commands for SCREEN_SETBINDING etc */
  212.  
  213. #define SCREEN_COMMAND_CHOOSEFONT    0x400
  214. #define SCREEN_COMMAND_CLOSE        0x401
  215. #define SCREEN_COMMAND_CHOOSEBACKCOLOR    0x402
  216.  
  217. struct screen_write_char_s
  218. {
  219.   RECT rect;
  220.   unsigned int row;
  221.   unsigned int col;
  222. };
  223.  
  224. /* Do user-level timer interrupts by using WM_TIMER.  */
  225. #define USE_WM_TIMER
  226.  
  227. extern FILE * win32_trace_file;
  228. extern unsigned long win32_trace_level;
  229. #ifndef WIN32_TRACE_FILENAME
  230. #define WIN32_TRACE_FILENAME "w32trace.out"
  231. #endif
  232.  
  233. #ifdef __WATCOMC__
  234. #define _fastcall
  235. #endif
  236.  
  237. extern VOID _fastcall clear_screen_rectangle (SCREEN, int, int, int, int);
  238. extern VOID Screen_CR_to_RECT (RECT *, SCREEN, int, int, int, int);
  239. extern VOID _fastcall scroll_screen_vertically
  240.   (SCREEN, int, int, int, int, int);
  241. extern VOID _fastcall Screen_WriteCharUninterpreted
  242.   (SCREEN, int, struct screen_write_char_s *);
  243. extern VOID _fastcall Screen_SetAttributeDirect (SCREEN, SCREEN_ATTRIBUTE);
  244. extern VOID WriteScreenBlock_NoInvalidRect (SCREEN, int, int, LPSTR, int);
  245. extern void Enable_Cursor (SCREEN, BOOL);
  246. extern HICON ScreenSetIcon (SCREEN, HICON);
  247. extern BOOL ScreenSetFont (SCREEN, char *);
  248. extern BOOL ScreenSetForegroundColour (SCREEN, DWORD);
  249. extern BOOL ScreenSetBackgroundColour (SCREEN, DWORD);
  250. extern BOOL ScreenSetFont (SCREEN, char *);
  251. extern BOOL ScreenSetDefaultFont (char *);
  252.  
  253. extern BOOL Screen_InitApplication (HANDLE hInstance);
  254. extern BOOL Screen_InitInstance (HANDLE hInstance, int nCmdShow);
  255.  
  256. extern HANDLE Screen_Create (HANDLE, LPCSTR, int);
  257. extern VOID Screen_Destroy (BOOL, HANDLE);
  258. extern HWND ScreenCurrentFocus (void);
  259. extern BOOL Screen_SetPosition (SCREEN, int, int);
  260.  
  261. extern void Screen_SetAttribute (HANDLE, SCREEN_ATTRIBUTE);
  262. extern void Screen_WriteChar (HANDLE, char);
  263. extern void Screen_WriteText (HANDLE, char*);
  264. extern int  Screen_Read (HANDLE, BOOL, char *, int);
  265. extern void Screen_SetCursorPosition (HANDLE, int line, int column);
  266. extern void Screen_SetMenu (HANDLE, HMENU);
  267. extern void Screen_SetMode (HANDLE, int);
  268. extern int  Screen_GetMode (HANDLE);
  269. extern VOID Screen_GetSize (HANDLE, int *rows, int *columns);
  270. extern void screen_char_dimensions (HWND, int *, int *);
  271.  
  272. /* The following return zero iff no events */
  273. extern int Screen_read_event (SCREEN_EVENT *);
  274. extern int Screen_pending_events_p (void);
  275.  
  276. #endif /* SCM_NTSCREEN_H */
  277.