Change-Id: If881ec130833c7e7e62caa3d31e350a531f5bc8e Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/12398 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			187 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Public Domain Curses */
 | |
| 
 | |
| /* $Id: pdcdos.h,v 1.30 2008/07/13 16:08:17 wmcbrine Exp $ */
 | |
| 
 | |
| #include <curspriv.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #if defined(_MSC_VER) || defined(_QC)
 | |
| # define MSC 1
 | |
| #endif
 | |
| 
 | |
| #if defined(__PACIFIC__) && !defined(__SMALL__)
 | |
| # define __SMALL__
 | |
| #endif
 | |
| 
 | |
| #if defined(__HIGHC__) || MSC
 | |
| # include <bios.h>
 | |
| #endif
 | |
| 
 | |
| /*----------------------------------------------------------------------
 | |
|  *  MEMORY MODEL SUPPORT:
 | |
|  *
 | |
|  *  MODELS
 | |
|  *    TINY    cs,ds,ss all in 1 segment (not enough memory!)
 | |
|  *    SMALL   cs:1 segment, ds:1 segment
 | |
|  *    MEDIUM  cs:many segments, ds:1 segment
 | |
|  *    COMPACT cs:1 segment, ds:many segments
 | |
|  *    LARGE   cs:many segments, ds:many segments
 | |
|  *    HUGE    cs:many segments, ds:segments > 64K
 | |
|  */
 | |
| 
 | |
| #ifdef __TINY__
 | |
| # define SMALL 1
 | |
| #endif
 | |
| #ifdef __SMALL__
 | |
| # define SMALL 1
 | |
| #endif
 | |
| #ifdef __MEDIUM__
 | |
| # define MEDIUM 1
 | |
| #endif
 | |
| #ifdef __COMPACT__
 | |
| # define COMPACT 1
 | |
| #endif
 | |
| #ifdef __LARGE__
 | |
| # define LARGE 1
 | |
| #endif
 | |
| #ifdef __HUGE__
 | |
| # define HUGE 1
 | |
| #endif
 | |
| 
 | |
| #include <dos.h>
 | |
| 
 | |
| extern unsigned char *pdc_atrtab;
 | |
| extern int pdc_adapter;
 | |
| extern int pdc_scrnmode;
 | |
| extern int pdc_font;
 | |
| extern bool pdc_direct_video;
 | |
| extern bool pdc_bogus_adapter;
 | |
| extern unsigned pdc_video_seg;
 | |
| extern unsigned pdc_video_ofs;
 | |
| 
 | |
| #ifdef __DJGPP__        /* Note: works only in plain DOS... */
 | |
| # if DJGPP == 2
 | |
| #  define _FAR_POINTER(s,o) ((((int)(s)) << 4) + ((int)(o)))
 | |
| # else
 | |
| #  define _FAR_POINTER(s,o) (0xe0000000 + (((int)(s)) << 4) + ((int)(o)))
 | |
| # endif
 | |
| # define _FP_SEGMENT(p)     (unsigned short)((((long)p) >> 4) & 0xffff)
 | |
| #else
 | |
| # ifdef __TURBOC__
 | |
| #  define _FAR_POINTER(s,o) MK_FP(s,o)
 | |
| # else
 | |
| #  if defined(__WATCOMC__) && defined(__FLAT__)
 | |
| #   define _FAR_POINTER(s,o) ((((int)(s)) << 4) + ((int)(o)))
 | |
| #  else
 | |
| #   define _FAR_POINTER(s,o) (((long)s << 16) | (long)o)
 | |
| #  endif
 | |
| # endif
 | |
| # define _FP_SEGMENT(p)     (unsigned short)(((long)p) >> 4)
 | |
| #endif
 | |
| #define _FP_OFFSET(p)       ((unsigned short)p & 0x000f)
 | |
| 
 | |
| #ifdef __DJGPP__
 | |
| # include <sys/movedata.h>
 | |
| unsigned char getdosmembyte(int offs);
 | |
| unsigned short getdosmemword(int offs);
 | |
| unsigned long getdosmemdword(int offs);
 | |
| void setdosmembyte(int offs, unsigned char b);
 | |
| void setdosmemword(int offs, unsigned short w);
 | |
| #else
 | |
| # if SMALL || MEDIUM || MSC
 | |
| #  define PDC_FAR far
 | |
| # else
 | |
| #  define PDC_FAR
 | |
| # endif
 | |
| # define getdosmembyte(offs) \
 | |
|     (*((unsigned char PDC_FAR *) _FAR_POINTER(0,offs)))
 | |
| # define getdosmemword(offs) \
 | |
|     (*((unsigned short PDC_FAR *) _FAR_POINTER(0,offs)))
 | |
| # define getdosmemdword(offs) \
 | |
|     (*((unsigned long PDC_FAR *) _FAR_POINTER(0,offs)))
 | |
| # define setdosmembyte(offs,x) \
 | |
|     (*((unsigned char PDC_FAR *) _FAR_POINTER(0,offs)) = (x))
 | |
| # define setdosmemword(offs,x) \
 | |
|     (*((unsigned short PDC_FAR *) _FAR_POINTER(0,offs)) = (x))
 | |
| #endif
 | |
| 
 | |
| #if defined(__WATCOMC__) && defined(__386__)
 | |
| 
 | |
| typedef union
 | |
| {
 | |
|     struct
 | |
|     {
 | |
|         unsigned long edi, esi, ebp, res, ebx, edx, ecx, eax;
 | |
|     } d;
 | |
| 
 | |
|     struct
 | |
|     {
 | |
|         unsigned short di, di_hi, si, si_hi, bp, bp_hi, res, res_hi,
 | |
|                        bx, bx_hi, dx, dx_hi, cx, cx_hi, ax, ax_hi,
 | |
|                        flags, es, ds, fs, gs, ip, cs, sp, ss;
 | |
|     } w;
 | |
| 
 | |
|     struct
 | |
|     {
 | |
|         unsigned char edi[4], esi[4], ebp[4], res[4],
 | |
|                       bl, bh, ebx_b2, ebx_b3, dl, dh, edx_b2, edx_b3,
 | |
|                       cl, ch, ecx_b2, ecx_b3, al, ah, eax_b2, eax_b3;
 | |
|     } h;
 | |
| } pdc_dpmi_regs;
 | |
| 
 | |
| void PDC_dpmi_int(int, pdc_dpmi_regs *);
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #ifdef __DJGPP__
 | |
| # include <dpmi.h>
 | |
| # define PDCREGS __dpmi_regs
 | |
| # define PDCINT(vector, regs) __dpmi_int(vector, ®s)
 | |
| #else
 | |
| # ifdef __WATCOMC__
 | |
| #  ifdef __386__
 | |
| #   define PDCREGS pdc_dpmi_regs
 | |
| #   define PDCINT(vector, regs) PDC_dpmi_int(vector, ®s)
 | |
| #  else
 | |
| #   define PDCREGS union REGPACK
 | |
| #   define PDCINT(vector, regs) intr(vector, ®s)
 | |
| #  endif
 | |
| # else
 | |
| #  define PDCREGS union REGS
 | |
| #  define PDCINT(vector, regs) int86(vector, ®s, ®s)
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| /* Wide registers in REGS: w or x? */
 | |
| 
 | |
| #ifdef __WATCOMC__
 | |
| # define W w
 | |
| #else
 | |
| # define W x
 | |
| #endif
 | |
| 
 | |
| /* Monitor (terminal) type information */
 | |
| 
 | |
| enum
 | |
| {
 | |
|     _NONE, _MDA, _CGA,
 | |
|     _EGACOLOR = 0x04, _EGAMONO,
 | |
|     _VGACOLOR = 0x07, _VGAMONO,
 | |
|     _MCGACOLOR = 0x0a, _MCGAMONO,
 | |
|     _MDS_GENIUS = 0x30
 | |
| };
 | |
| 
 | |
| /* Text-mode font size information */
 | |
| 
 | |
| enum
 | |
| {
 | |
|     _FONT8 = 8,
 | |
|     _FONT14 = 14,
 | |
|     _FONT15,    /* GENIUS */
 | |
|     _FONT16
 | |
| };
 | |
| 
 | |
| #ifdef __PACIFIC__
 | |
| void movedata(unsigned, unsigned, unsigned, unsigned, unsigned);
 | |
| #endif
 |