DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦3eb5d59ac⟧ TextFile

    Length: 1130 (0x46a)
    Types: TextFile
    Notes: UNIX file
    Names: »mesg.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/mesg.c« 

TextFile

/*
 * Permit or deny messages (e.g. write, msg, etc.)
 * to be sent to the user's terminal.
 * As these commands are setuid, execute permission
 * may be used to control use of the terminal without
 * allowing indiscriminate use by other users of the
 * terminal.
 *
 * NOTE: the terminal is assumed to be stderr.
 */

#include <stdio.h>
#include <stat.h>

main(argc, argv)
char *argv[];
{
	struct stat sb;
	char type = 'c';
	char *tty;
	char *ttyname();

	if (argc == 2) {
		if (argv[1][1]=='\0' && (*argv[1]=='y' || *argv[1]=='n'))
			type = *argv[1];
		else if (strcmp(argv[1], "no")==0 || strcmp(argv[1], "yes")==0)
			type = *argv[1];
		else
			usage();
	} else if (argc != 1)
		usage();
	tty = ttyname(fileno(stderr));
	if (tty==NULL || stat(tty, &sb)<0) {
		fprintf(stderr, "Standard error not a tty\n");
		exit(2);
	}
	if (argc > 1) {
		if (type == 'n')
			sb.st_mode &= ~S_IEXEC;
		else if (type == 'y')
			sb.st_mode |= S_IEXEC;
		chmod(tty, sb.st_mode);
	} else
		printf("%s\n", sb.st_mode&S_IEXEC ? "yes" : "no");
	exit (sb.st_mode&S_IEXEC ? 0 : 1);
}

usage()
{
	fprintf(stderr, "Usage: mesg [n] [y]\n");
	exit(2);
}