[ekg2-devel] windows.h na bitpolach, podejście drugie

Michał Górny mgorny.hejl w mailnull.com
Pią, 29 Lut 2008, 17:01:04 CET


Przejrzeć, wypowiedzieć się. Ostro psuje ABI, starając się
zminimalizować marnowaną pamięć. Obok przepisania części ficzerów
na bitpola, zwężyłem do połowy (16b) wymiary ekranu, nieco przestawiłem
pola (by bitpola coś dały) i zmieniłem ostatnią modyfikację na time_t
[żeby samego zysku nie było ( ;]. W sumie myślałem jeszcze, żeby id
zamienić na shorta (albo nawet chara, bo toto długie być nie może).

Tak swoją drogą, skoro korzystamy z C99, to nie powinniśmy z boola
korzystać?

-- 
Z powaĹźaniem,
Michał Górny

<http://mailnull.com/w?au=f6744c6f5e097cc9816a562802f331c2>
<xmpp:mgorny w jabster.pl>
-------------- następna część ---------
Index: ekg/windows.c
===================================================================
--- ekg/windows.c	(wersja 3825)
+++ ekg/windows.c	(kopia robocza)
@@ -596,7 +596,7 @@
 
 			if (w->id) {
 				if (w->target) {
-					if (!w->floating)	
+					if (!w->floating)
 						printq("window_list_query", itoa(w->id), w->target);
 					else
 						printq("window_list_floating", itoa(w->id), itoa(w->left), itoa(w->top), itoa(w->width), itoa(w->height), w->target);
Index: ekg/windows.h
===================================================================
--- ekg/windows.h	(wersja 3825)
+++ ekg/windows.h	(kopia robocza)
@@ -34,23 +34,23 @@
 #endif
 
 typedef struct {
-	void *w;		/* window, if NULL it means current */
-	int casense;		/* 0 - ignore case; 1 - don't ignore case, -1 - use global variable */
-	int lock;		/* if 0, don't update */
-	int isregex;		/* 1 - in target regexp */
+	void *w;			/* window, if NULL it means current */
+	int casense		: 2;	/* 0 - ignore case; 1 - don't ignore case, -1 - use global variable */
+	unsigned int lock	: 1;	/* if 0, don't update */
+	unsigned int isregex	: 1;	/* 1 - in target regexp */
 #ifdef HAVE_REGEX_H
-	regex_t reg;		/* regexp compilated expression */
+	regex_t reg;			/* regexp compilated expression */
 #endif
-	char *expression;	/* expression */
+	char *expression;		/* expression */
 } window_lastlog_t;
 
 typedef struct {
-	int id;			/* numer okna */
-	char *target;		/* nick query albo inna nazwa albo NULL */
-	session_t *session;	/* której sesji dotyczy okno */
+	int id;				/* numer okna */
+	char *target;			/* nick query albo inna nazwa albo NULL */
+	session_t *session;		/* której sesji dotyczy okno */
 
-	int left, top;		/* pozycja (x, y) względem początku ekranu */
-	int width, height;	/* wymiary okna */
+	short unsigned int left, top;		/* pozycja (x, y) względem początku ekranu */
+	short unsigned int width, height;	/* wymiary okna */
 
 	unsigned int act	: 2;	/* activity: 1 - status/junk; 2 - msg */
 	unsigned int in_typing	: 1;	/* user is composing a message to us */
@@ -58,21 +58,23 @@
 					   so we can start sending composing to him/her */
 	unsigned int out_active	: 1;	/* we 'started' sending messages to user (considered
 					   ourselves active), so we shall say goodbye when done */
-	int more;		/* pojawiło się coś poza ekranem */
+	unsigned int more	: 1;	/* pojawiło się coś poza ekranem */
+	unsigned int floating	: 1;	/* czy pływające? */
+	unsigned int doodle	: 1;	/* czy do gryzmolenia?		[we don't set it anywhere] */
 
-	int floating;		/* czy pływające? */
-	int doodle;		/* czy do gryzmolenia? */
-	int frames;		/* informacje o ramkach */
-	int edge;		/* okienko brzegowe */
-	int last_update;	/* czas ostatniego uaktualnienia */
-	int nowrap;		/* nie zawijamy linii */
-	int hide;		/* ukrywamy, bo jest zbyt duże */
-	int lock;		/* blokowanie zmian w obrębie komendy */
+	unsigned int frames	: 4;	/* informacje o ramkach */
+	unsigned int edge	: 4;	/* okienko brzegowe */
 
-	list_t userlist;	/* sometimes window may require separate userlist */
+	unsigned int nowrap	: 1;	/* nie zawijamy linii */
+	unsigned int hide	: 1;	/* ukrywamy, bo jest zbyt duże */
 
+	time_t last_update;		/* czas ostatniego uaktualnienia */
+	int lock;			/* blokowanie zmian w obrębie komendy */
+
+	list_t userlist;		/* sometimes window may require separate userlist */
+
 	window_lastlog_t *lastlog;	/* prywatne informacje lastloga */
-	void *private;		/* prywatne informacje ui */
+	void *private;			/* prywatne informacje ui */
 } window_t;
 
 #ifndef EKG2_WIN32_NOFUNCTION


Więcej informacji o liście dyskusyjnej ekg2-devel