hunt@wheaties.ai.mit.edu (Tim Hunt) (11/29/88)
> I have 1-bit and 8-bit monitors hooked up to a Sun. Is there an easy way > to find out the screen depth (under Suntools) without creating a new > window? I have a small program that I use with shell scripts to determine both screen size and depth. A shar file follows: Tim Hunt Fusion Systems Group, New York (212)285-8001 sun!gotham!fusion!tim #----------------------------------------------------------------------- #!/bin/sh # # This is a shell archive, meaning: # # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create: # fbtype.c # # This archive created: Wed Nov 16 09:27:14 EST 1988 shar: fbtype.c (1985 characters) if [ -s fbtype.c ] then echo 'shar: fbtype.c already exists - not extracted' else echo 'shar: extracting fbtype.c (1985 characters)' sed -n 's/^XX//p' > fbtype.c <<'*-*-END-of-fbtype.c-*-*' XX#ifndef lint XXstatic char *Sccsid="%W% %E% %U% (TIM HUNT)"; XX#endif XX/*********************************************************************** XX XX %F% XX XX Routines: XX main XX XX Purpose: XX Print out the type and resolution of workstation. XX XX usage: fbtype [-s] [/dev/device] XX XX -s Prints out values in a form suitable for using XX with shell eval commands. XX XX History: XX XX***********************************************************************/ XX#include <stdio.h> XX XX#include <fcntl.h> XX XX#include <sys/ioctl.h> XX#include <sun/fbio.h> XX XXmain(argc,argv) XXint argc; XXchar **argv; XX{ XX char *device = "/dev/fb"; XX XX char *type; XX XX /* Output format without the "-s" option */ XX XX char *fmt = "%s %d %d %d %d\n"; XX XX int fd; XX XX struct fbtype fb, *realfb; XX struct fbgattr fba; XX XX if ( argc > 1 ) { XX if ( strcmp(argv[1],"-s") == 0 ) { XX argv++; XX argc--; XX XX /* Format for Bourne shell and derivatives */ XX XX fmt = "FB_TYPE='%s';\nFB_HEIGHT=%d;\nFB_WIDTH=%d;\nFB_DEPTH=%d;\nFB_CMSIZE=%d;\n"; XX XX /* Handle C-Shell and derivatives */ XX XX if ( strcmp("/bin/csh",getenv("SHELL")) == 0 XX || strcmp("/bin/tcsh",getenv("SHELL")) == 0 ) XX fmt = "set fb_type='%s';\n@ fb_height=%d;\n@ fb_width=%d;\n@ fb_depth=%d;\n@ fb_cmsize=%d;\n"; XX XX } XX if ( argc > 1 ) XX device = argv[1]; XX } XX XX if ( (fd = open(device,O_WRONLY)) < 0 ) { XX perror(device); XX exit(1); XX } XX XX bzero((char *)(&fb),sizeof fb); XX if ( ioctl(fd,FBIOGTYPE,&fb) < 0 ) { XX perror(device); XX exit(1); XX } XX bzero((char *)(&fba),sizeof fba); XX if ( ioctl(fd,FBIOGATTR,&fba) < 0 ) { XX realfb = &fb; XX } else { XX realfb = &(fba.fbtype); XX } XX XX close (fd); XX XX switch ( realfb->fb_type ) { XX case FBTYPE_SUN1BW: XX case FBTYPE_SUN2BW: XX case FBTYPE_SUN3BW: XX type = "bw"; XX break; XX case FBTYPE_SUN1COLOR: XX case FBTYPE_SUN2COLOR: XX case FBTYPE_SUN3COLOR: XX case FBTYPE_SUN4COLOR: XX type = "color"; XX break; XX case FBTYPE_SUN2GP: XX type = "gp"; XX break; XX default: XX type = "undef"; XX break; XX } XX XX printf(fmt,type,realfb->fb_height,realfb->fb_width,realfb->fb_depth,realfb->fb_cmsize); XX} *-*-END-of-fbtype.c-*-* if [ ` wc -w < fbtype.c ` != 238 ] then echo 'shar: warning possible error in fbtype.c' fi fi