Plan 9 from Bell Labs’s /usr/web/sources/contrib/quanstro/root/sys/src/cmd/ssh2/getgeom.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include <u.h>
#include <libc.h>
#include <draw.h>

static Point
fontsize(void)
{
	char *fontname;
	Font *f;
	Point sz;

	if((fontname = getenv("font")) == nil)
		return Pt(8, 12);

	if((f = openfont(nil, fontname)) == nil){
		fprint(2, "%s: %s cannot open - %r\n", argv0, fontname);
		free(fontname);
		return Pt(8, 12);
	}
	sz = stringsize(f, "0");
	freefont(f);
	free(fontname);
	return sz;
}

int
getgeom(int *cols, int *lines, int *width, int *height)
{
	char *a[6], buf[64];
	int fd, n;
	Point sz;

	if((fd = open("/dev/wctl", OREAD)) < 0)
		return -1;

	/* wait for event, but don't care what it says */
	if((n = read(fd, buf, sizeof buf)) < 0){
		fprint(2, "%s: /dev/wctl read failed - %r\n", argv0);
		close(fd);
		return -1;
	}

	buf[n-1] = 0;
	if((n = tokenize(buf, a, nelem(a))) < 4){
		fprint(2, "%s: /dev/wctl too few tokens (%d<4)\n", argv0, n);
		close(2);
		return -1;
	}
	close(fd);

	sz = fontsize();

	/*
	 * This code lifted from mc.c, and is correct for rio(1) windows.
	 * 4 pixels left edge
	 * 1 pixels gap
	 * 12 pixels scrollbar
	 * 4 pixels gap
	 * text
	 * 4 pixels right edge
	 *
	 * 4 pixels top and bottom edges
	 */
	*width = atoi(a[2]) - atoi(a[0]) - (4+1+12+4+4);
	*height = atoi(a[3]) - atoi(a[1]) - (4+4);
	*lines = *height / sz.y;
	*cols = *width / sz.x;

	return 0;
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.