plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

winsize.c (1290B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <draw.h>
      4 #include <memdraw.h>
      5 #include <memlayer.h>
      6 #include <mouse.h>
      7 #include <cursor.h>
      8 #include <keyboard.h>
      9 #include <drawfcall.h>
     10 #include "devdraw.h"
     11 
     12 int
     13 parsewinsize(char *s, Rectangle *r, int *havemin)
     14 {
     15 	char c, *os;
     16 	int i, j, k, l;
     17 
     18 	os = s;
     19 	*havemin = 0;
     20 	*r = Rect(0,0,0,0);
     21 	if(!isdigit((uchar)*s))
     22 		goto oops;
     23 	i = strtol(s, &s, 0);
     24 	if(*s == 'x'){
     25 		s++;
     26 		if(!isdigit((uchar)*s))
     27 			goto oops;
     28 		j = strtol(s, &s, 0);
     29 		r->max.x = i;
     30 		r->max.y = j;
     31 		if(*s == 0)
     32 			return 0;
     33 		if(*s != '@')
     34 			goto oops;
     35 
     36 		s++;
     37 		if(!isdigit((uchar)*s))
     38 			goto oops;
     39 		i = strtol(s, &s, 0);
     40 		if(*s != ',' && *s != ' ')
     41 			goto oops;
     42 		s++;
     43 		if(!isdigit((uchar)*s))
     44 			goto oops;
     45 		j = strtol(s, &s, 0);
     46 		if(*s != 0)
     47 			goto oops;
     48 		*r = rectaddpt(*r, Pt(i,j));
     49 		*havemin = 1;
     50 		return 0;
     51 	}
     52 
     53 	c = *s;
     54 	if(c != ' ' && c != ',')
     55 		goto oops;
     56 	s++;
     57 	if(!isdigit((uchar)*s))
     58 		goto oops;
     59 	j = strtol(s, &s, 0);
     60 	if(*s != c)
     61 		goto oops;
     62 	s++;
     63 	if(!isdigit((uchar)*s))
     64 		goto oops;
     65 	k = strtol(s, &s, 0);
     66 	if(*s != c)
     67 		goto oops;
     68 	s++;
     69 	if(!isdigit((uchar)*s))
     70 		goto oops;
     71 	l = strtol(s, &s, 0);
     72 	if(*s != 0)
     73 		goto oops;
     74 	*r = Rect(i,j,k,l);
     75 	*havemin = 1;
     76 	return 0;
     77 
     78 oops:
     79 	werrstr("bad syntax in window size '%s'", os);
     80 	return -1;
     81 }