summaryrefslogtreecommitdiff
path: root/console/display-drv.h
blob: 803d3180f01edce9d70aaf3e4065eaf1f6c4209d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* display.h - The interface to a display driver.
   Copyright (C) 2002 Free Software Foundation, Inc.
   Written by Marcus Brinkmann.

   This file is part of the GNU Hurd.

   The GNU Hurd is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2, or (at
   your option) any later version.

   The GNU Hurd is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. */

#ifndef _DISPLAY_H_
#define _DISPLAY_H_ 1

#include <errno.h>
#include <argp.h>
#include <sys/ioctl.h>


struct display_ops
{
  /* Initialize the subsystem.  */
  error_t (*init) (void);
  
  /* Create a new (virtual) console display, with the system encoding
     being ENCODING.  A failure at the first time this is called is
     critical.  Subsequent calls might return an error if multiple
     virtual consoles are not supported.  Further operations on this
     console will be called with the first parameter being *HOOK,
     which should be set to some unique identifier for this
     console.  */
  error_t (*create) (void **console, const char *encoding);

  /* Destroy the console CONSOLE.  The caller will first activate a
     different console as the active one.  */
  void (*destroy) (void *console);

  /* Change the active console of WHO to CONSOLE.  WHO is a unique identifier
   for the entity requesting the activation (which can be used by the
   display driver to group several activation requests together).  */
  void (*activate) (void *console, int who);

  /* Scroll the console CONSOLE by the desired amount.  This is only a
     hint, the actual amount scrolled might depend on the capability
     of the subsystem.  Negative AMOUNT scrolls back in history.  */
  error_t (*scroll) (void *console, int amount);

  /* Output LENGTH bytes starting from BUFFER in the system encoding.
     Set BUFFER and LENGTH to the new values.  The exact semantics are
     just as in the iconv interface.  */
  error_t (*output) (void *console, char **buffer, size_t *length);

  /* Return the current size of CONSOLE in WINSIZE.  */
  void (*getsize) (void *console, struct winsize *size);
};
typedef struct display_ops *display_ops_t;

extern struct display_ops vga_display_ops;
extern struct display_ops mach_display_ops;

display_ops_t display_driver[] =
  {
#if defined(__i386__)
    &vga_display_ops,
#endif
    &mach_display_ops,
    0
  };

#endif	/* _DISPLAY_H_ */