[e16e8f2] | 1 | /* -*- c -*- ------------------------------------------------------------- * |
---|
| 2 | * |
---|
| 3 | * Copyright 2004-2005 Murali Krishnan Ganapathy - All Rights Reserved |
---|
| 4 | * |
---|
| 5 | * This program is free software; you can redistribute it and/or modify |
---|
| 6 | * it under the terms of the GNU General Public License as published by |
---|
| 7 | * the Free Software Foundation, Inc., 53 Temple Place Ste 330, |
---|
| 8 | * Boston MA 02111-1307, USA; either version 2 of the License, or |
---|
| 9 | * (at your option) any later version; incorporated herein by reference. |
---|
| 10 | * |
---|
| 11 | * ----------------------------------------------------------------------- */ |
---|
| 12 | |
---|
| 13 | #include <string.h> |
---|
| 14 | #include <com32.h> |
---|
| 15 | #include "com32io.h" |
---|
| 16 | #include "tui.h" |
---|
| 17 | #include "syslnx.h" |
---|
| 18 | |
---|
| 19 | com32sys_t inreg, outreg; // Global register sets for use |
---|
| 20 | |
---|
| 21 | void getpos(char *row, char *col, char page) |
---|
| 22 | { |
---|
| 23 | memset(&inreg, 0, sizeof inreg); |
---|
| 24 | REG_AH(inreg) = 0x03; |
---|
| 25 | REG_BH(inreg) = page; |
---|
| 26 | __intcall(0x10, &inreg, &outreg); |
---|
| 27 | *row = REG_DH(outreg); |
---|
| 28 | *col = REG_DL(outreg); |
---|
| 29 | } |
---|
| 30 | |
---|
| 31 | char inputc(char *scancode) |
---|
| 32 | { |
---|
| 33 | syslinux_idle(); /* So syslinux can perform periodic activity */ |
---|
| 34 | memset(&inreg, 0, sizeof inreg); |
---|
| 35 | REG_AH(inreg) = 0x10; |
---|
| 36 | __intcall(0x16, &inreg, &outreg); |
---|
| 37 | if (scancode) |
---|
| 38 | *scancode = REG_AH(outreg); |
---|
| 39 | return REG_AL(outreg); |
---|
| 40 | } |
---|
| 41 | |
---|
| 42 | void getcursorshape(char *start, char *end) |
---|
| 43 | { |
---|
| 44 | char page = 0; // XXX TODO |
---|
| 45 | memset(&inreg, 0, sizeof inreg); |
---|
| 46 | REG_AH(inreg) = 0x03; |
---|
| 47 | REG_BH(inreg) = page; |
---|
| 48 | __intcall(0x10, &inreg, &outreg); |
---|
| 49 | *start = REG_CH(outreg); |
---|
| 50 | *end = REG_CL(outreg); |
---|
| 51 | } |
---|
| 52 | |
---|
| 53 | void setcursorshape(char start, char end) |
---|
| 54 | { |
---|
| 55 | memset(&inreg, 0, sizeof inreg); |
---|
| 56 | REG_AH(inreg) = 0x01; |
---|
| 57 | REG_CH(inreg) = start; |
---|
| 58 | REG_CL(inreg) = end; |
---|
| 59 | __intcall(0x10, &inreg, &outreg); |
---|
| 60 | } |
---|
| 61 | |
---|
| 62 | void setvideomode(char mode) |
---|
| 63 | { |
---|
| 64 | memset(&inreg, 0, sizeof inreg); |
---|
| 65 | REG_AH(inreg) = 0x00; |
---|
| 66 | REG_AL(inreg) = mode; |
---|
| 67 | __intcall(0x10, &inreg, &outreg); |
---|
| 68 | } |
---|
| 69 | |
---|
| 70 | // Get char displayed at current position |
---|
| 71 | unsigned char getcharat(char page) |
---|
| 72 | { |
---|
| 73 | memset(&inreg, 0, sizeof inreg); |
---|
| 74 | REG_AH(inreg) = 0x08; |
---|
| 75 | REG_BH(inreg) = page; |
---|
| 76 | __intcall(0x16, &inreg, &outreg); |
---|
| 77 | return REG_AL(outreg); |
---|
| 78 | } |
---|