Add a -s option for setting the current vty. This should make

life easier if a PS/2 mouse locks up the keyboard (frequent-ish,
but not repeatable).
Tidy up code (a bit) and make it -Wall

Is this a 2.2 candidate ? (although it doesn't -Wall in 2.2 because
of the lack of sys/sysproto.h
This commit is contained in:
Brian Somers 1997-03-07 01:34:47 +00:00
parent 8a973ca81c
commit bfc214e329
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=23457
5 changed files with 60 additions and 22 deletions

View File

@ -1,4 +1,6 @@
PROG= vidcontrol PROG= vidcontrol
SRCS= vidcontrol.c decode.c SRCS= vidcontrol.c decode.c
CFLAGS += -Wall
.include <bsd.prog.mk> .include <bsd.prog.mk>

View File

@ -25,10 +25,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* $Id$ * $Id: decode.c,v 1.5 1997/02/22 16:14:07 peter Exp $
*/ */
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include "decode.h"
int decode(FILE *fd, char *buffer) int decode(FILE *fd, char *buffer)
{ {

View File

@ -0,0 +1 @@
int decode(FILE *fd, char *buffer);

View File

@ -87,6 +87,9 @@ for
.Ar size .Ar size
(currently, only 8x8, 8x14 or 8x16). (currently, only 8x8, 8x14 or 8x16).
The fontfile can be either uuencoded or in raw binary format. The fontfile can be either uuencoded or in raw binary format.
.It Fl s Ar Number
Sets the current vty to
.Ar Number .
.It Fl t Ar N|off .It Fl t Ar N|off
Sets the screensaver timeout to Sets the screensaver timeout to
.Ar N .Ar N

View File

@ -25,14 +25,17 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* $Id$ * $Id: vidcontrol.c,v 1.15 1997/02/22 16:14:08 peter Exp $
*/ */
#include <ctype.h> #include <ctype.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <machine/console.h> #include <machine/console.h>
#include <sys/errno.h> #include <sys/errno.h>
#include "path.h" #include "path.h"
#include "decode.h"
char legal_colors[16][16] = { char legal_colors[16][16] = {
"black", "blue", "green", "cyan", "black", "blue", "green", "cyan",
@ -111,7 +114,7 @@ mkfullname(const char *s1, const char *s2, const char *s3)
void void
load_scrnmap(char *filename) load_scrnmap(char *filename)
{ {
FILE *fd; FILE *fd = 0;
int i, size; int i, size;
char *name; char *name;
scrmap_t scrnmap; scrmap_t scrnmap;
@ -120,7 +123,8 @@ load_scrnmap(char *filename)
for (i=0; prefix[i]; i++) { for (i=0; prefix[i]; i++) {
name = mkfullname(prefix[i], filename, postfix[i]); name = mkfullname(prefix[i], filename, postfix[i]);
if (fd = fopen(name, "r")) fd = fopen(name, "r");
if (fd)
break; break;
} }
if (fd == NULL) { if (fd == NULL) {
@ -128,17 +132,17 @@ load_scrnmap(char *filename)
return; return;
} }
size = sizeof(scrnmap); size = sizeof(scrnmap);
if (decode(fd, &scrnmap) != size) { if (decode(fd, (char *)&scrnmap) != size) {
rewind(fd); rewind(fd);
if (fread(&scrnmap, 1, size, fd) != size) { if (fread(&scrnmap, 1, size, fd) != size) {
fprintf(stderr, "bad scrnmap file\n"); fprintf(stderr, "bad scrnmap file\n");
close(fd); fclose(fd);
return; return;
} }
} }
if (ioctl(0, PIO_SCRNMAP, &scrnmap) < 0) if (ioctl(0, PIO_SCRNMAP, &scrnmap) < 0)
perror("can't load screenmap"); perror("can't load screenmap");
close(fd); fclose(fd);
} }
void void
@ -178,7 +182,7 @@ print_scrnmap()
void void
load_font(char *type, char *filename) load_font(char *type, char *filename)
{ {
FILE *fd; FILE *fd = 0;
int i, io, size; int i, io, size;
char *name, *fontmap; char *name, *fontmap;
char *prefix[] = {"", "", FONT_PATH, FONT_PATH, NULL}; char *prefix[] = {"", "", FONT_PATH, FONT_PATH, NULL};
@ -186,7 +190,8 @@ load_font(char *type, char *filename)
for (i=0; prefix[i]; i++) { for (i=0; prefix[i]; i++) {
name = mkfullname(prefix[i], filename, postfix[i]); name = mkfullname(prefix[i], filename, postfix[i]);
if (fd = fopen(name, "r")) fd = fopen(name, "r");
if (fd)
break; break;
} }
if (fd == NULL) { if (fd == NULL) {
@ -207,7 +212,7 @@ load_font(char *type, char *filename)
} }
else { else {
perror("bad font size specification"); perror("bad font size specification");
close(fd); fclose(fd);
return; return;
} }
fontmap = (char*) malloc(size); fontmap = (char*) malloc(size);
@ -215,14 +220,14 @@ load_font(char *type, char *filename)
rewind(fd); rewind(fd);
if (fread(fontmap, 1, size, fd) != size) { if (fread(fontmap, 1, size, fd) != size) {
fprintf(stderr, "bad font file\n"); fprintf(stderr, "bad font file\n");
close(fd); fclose(fd);
free(fontmap); free(fontmap);
return; return;
} }
} }
if (ioctl(0, io, fontmap) < 0) if (ioctl(0, io, fontmap) < 0)
perror("can't load font"); perror("can't load font");
close(fd); fclose(fd);
free(fontmap); free(fontmap);
} }
@ -263,7 +268,7 @@ set_cursor_type(char *appearence)
ioctl(0, CONS_CURSORTYPE, &type); ioctl(0, CONS_CURSORTYPE, &type);
} }
int void
video_mode(int argc, char **argv, int *index) video_mode(int argc, char **argv, int *index)
{ {
int mode; int mode;
@ -305,7 +310,7 @@ get_color_number(char *color)
return -1; return -1;
} }
int void
set_normal_colors(int argc, char **argv, int *index) set_normal_colors(int argc, char **argv, int *index)
{ {
int color; int color;
@ -322,6 +327,7 @@ set_normal_colors(int argc, char **argv, int *index)
} }
} }
void
set_reverse_colors(int argc, char **argv, int *index) set_reverse_colors(int argc, char **argv, int *index)
{ {
int color; int color;
@ -337,6 +343,26 @@ set_reverse_colors(int argc, char **argv, int *index)
} }
} }
void
set_console(char *arg)
{
int n;
if( !arg || strspn(arg,"0123456789") != strlen(arg)) {
fprintf(stderr,"vidcontrol: Bad console number\n");
usage();
return;
}
n = atoi(arg);
if (n < 1 || n > 12) {
fprintf(stderr,"vidcontrol: Console number out of range\n");
usage();
} else if (ioctl(0,VT_ACTIVATE,(char *)n) == -1)
perror("ioctl(VT_ACTIVATE)");
}
void
set_border_color(char *arg) set_border_color(char *arg)
{ {
int color; int color;
@ -365,6 +391,7 @@ set_mouse(char *arg)
ioctl(0, CONS_MOUSECTL, &mouse); ioctl(0, CONS_MOUSECTL, &mouse);
} }
void
test_frame() test_frame()
{ {
int i; int i;
@ -382,7 +409,7 @@ test_frame()
info.mv_rev.fore, info.mv_rev.back); info.mv_rev.fore, info.mv_rev.back);
} }
void int
main(int argc, char **argv) main(int argc, char **argv)
{ {
extern char *optarg; extern char *optarg;
@ -393,9 +420,9 @@ main(int argc, char **argv)
info.size = sizeof(info); info.size = sizeof(info);
if (ioctl(0, CONS_GETINFO, &info) < 0) { if (ioctl(0, CONS_GETINFO, &info) < 0) {
perror("Must be on a virtual console"); perror("Must be on a virtual console");
exit(1); return 1;
} }
while((opt = getopt(argc, argv, "b:c:df:l:Lm:r:t:x")) != -1) while((opt = getopt(argc, argv, "b:c:df:l:Lm:r:s:t:x")) != -1)
switch(opt) { switch(opt) {
case 'b': case 'b':
set_border_color(optarg); set_border_color(optarg);
@ -422,6 +449,9 @@ main(int argc, char **argv)
case 'r': case 'r':
set_reverse_colors(argc, argv, &optind); set_reverse_colors(argc, argv, &optind);
break; break;
case 's':
set_console(optarg);
break;
case 't': case 't':
set_screensaver_timeout(optarg); set_screensaver_timeout(optarg);
break; break;
@ -430,18 +460,18 @@ main(int argc, char **argv)
break; break;
default: default:
usage(); usage();
exit(1); return 1;
} }
if (video_mode(argc, argv, &optind)) ; video_mode(argc, argv, &optind);
if (set_normal_colors(argc, argv, &optind)) ; set_normal_colors(argc, argv, &optind);
if (optind < argc && !strcmp(argv[optind], "show")) { if (optind < argc && !strcmp(argv[optind], "show")) {
test_frame(); test_frame();
optind++; optind++;
} }
if ((optind != argc) || (argc == 1)) { if ((optind != argc) || (argc == 1)) {
usage(); usage();
exit(1); return 1;
} }
exit(0); return 0;
} }