/*
 * 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 != 2) || (**(argv+1) == '-' ) ) {
	usage ("deallocvt N\n\nDeallocate unused virtual terminal /dev/ttyN\n");
    }

    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);
}
