/*
 * disalloc.c - aeb - 940501 - Disallocate virtual terminal(s)
 * Renamed deallocvt.
 */
#include "internal.h"
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/vt.h>
#include <stdio.h>

extern int getfd(void);
char *progname;

int
deallocvt_main(int argc, char *argv[]) {
    int fd, num, i;

    if (argc < 1)		/* unlikely */
      exit(1);
    progname = argv[0];

    fd = get_console_fd("/dev/console");

    if (argc == 1) {
	/* deallocate all unused consoles */
	if (ioctl(fd,VT_DISALLOCATE,0)) {
	    perror("VT_DISALLOCATE");
	    exit(1);
	}
    } else
    for (i = 1; i < argc; i++) {
	num = atoi(argv[i]);
	if (num == 0)
	    fprintf(stderr, "%s: 0: illegal VT number\n", progname);
	else if (num == 1)
	    fprintf(stderr, "%s: VT 1 cannot be deallocated\n", progname);
	else
	if (ioctl(fd,VT_DISALLOCATE,num)) {
	    perror("VT_DISALLOCATE");
	    fprintf(stderr, "%s: could not deallocate console %d\n",
		    progname, num);
	    exit(1);
	}
    }
    exit(0);
}
