Initial. Don't... just don't ask.
This commit is contained in:
commit
00bae13bba
586 changed files with 129057 additions and 0 deletions
90
utils/restoretextmode.c
Normal file
90
utils/restoretextmode.c
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <vga.h>
|
||||
#include "../src/driver.h"
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
/*
|
||||
* Note: Observe that when writing the font to a file, the file to write is
|
||||
* opened after vga_init has been called (so that root permissions have been
|
||||
* given up). This means that there is no major security hole lurking here.
|
||||
*/
|
||||
|
||||
unsigned char regs[MAX_REGS];
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
vga_init ();
|
||||
if (argc == 1)
|
||||
{
|
||||
printf ("Save/restore textmode registers.\n");
|
||||
printf ("Syntax: restoretextmode option filename\n");
|
||||
printf (" -r filename Restore registers from file.\n");
|
||||
printf (" -w filename Write registers to file.\n");
|
||||
return 0;
|
||||
}
|
||||
if (argv[1][0] != '-')
|
||||
{
|
||||
printf ("Must specify -r or -w.\n");
|
||||
return 1;
|
||||
}
|
||||
switch (argv[1][1])
|
||||
{
|
||||
case 'r':
|
||||
case 'w':
|
||||
if (argc != 3)
|
||||
{
|
||||
printf ("Must specify filename.\n");
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf ("Invalid option. Must specify -r or -w.\n");
|
||||
return 1;
|
||||
}
|
||||
if (argv[1][1] == 'r')
|
||||
{
|
||||
FILE *f;
|
||||
f = fopen (argv[2], "rb");
|
||||
if (f == NULL)
|
||||
{
|
||||
error:
|
||||
perror ("restoretextmode");
|
||||
return 1;
|
||||
}
|
||||
if (1 != fread (regs, MAX_REGS, 1, f))
|
||||
{
|
||||
if (errno)
|
||||
goto error;
|
||||
puts ("restoretextmode: input file corrupted.");
|
||||
return 1;
|
||||
}
|
||||
fclose (f);
|
||||
}
|
||||
vga_setmode (G640x350x16);
|
||||
switch (argv[1][1])
|
||||
{
|
||||
case 'r':
|
||||
vga_settextmoderegs (regs);
|
||||
break;
|
||||
case 'w':
|
||||
vga_gettextmoderegs (regs);
|
||||
break;
|
||||
}
|
||||
vga_setmode (TEXT);
|
||||
if (argv[1][1] == 'w')
|
||||
{
|
||||
FILE *f;
|
||||
f = fopen (argv[2], "wb");
|
||||
if (f == NULL)
|
||||
goto error;
|
||||
if (1 != fwrite (regs, MAX_REGS, 1, f))
|
||||
goto error;
|
||||
if (fclose (f))
|
||||
goto error;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue