mirror of
https://github.com/0intro/wmii
synced 2025-01-21 01:22:07 +03:00
Reduced the memory consumption of place_client. Replaced strncmps against literal strings with strcmps.
This commit is contained in:
parent
d8e827bc21
commit
73a594825f
55
area.c
55
area.c
@ -6,6 +6,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
static void place_client(Area *a, Client *c);
|
||||
|
||||
@ -214,10 +215,35 @@ detach_from_area(Frame *f) {
|
||||
assert(a->sel);
|
||||
}
|
||||
|
||||
void
|
||||
bit_twiddle(uint *field, uint width, uint x, uint y, Bool set) {
|
||||
enum { devisor = sizeof(uint) * 8 };
|
||||
uint bx, mask;
|
||||
|
||||
bx = x / devisor;
|
||||
mask = 1 << x % devisor;
|
||||
if(set)
|
||||
field[y*width + bx] |= mask;
|
||||
else
|
||||
field[y*width + bx] &= ~mask;
|
||||
}
|
||||
|
||||
static Bool
|
||||
bit_get(uint *field, uint width, uint x, uint y) {
|
||||
enum { devisor = sizeof(uint) * 8 };
|
||||
uint bx, mask;
|
||||
|
||||
bx = x / devisor;
|
||||
mask = 1 << x % devisor;
|
||||
|
||||
return (field[y*width + bx] & mask) != 0;
|
||||
}
|
||||
|
||||
static void
|
||||
place_client(Area *a, Client *c) {
|
||||
static uint mx, my;
|
||||
static Bool *field;
|
||||
enum { devisor = sizeof(uint) * 8 };
|
||||
static uint mwidth, mx, my;
|
||||
static uint *field = nil;
|
||||
BlitzAlign align;
|
||||
XPoint p1 = {0, 0};
|
||||
XPoint p2 = {0, 0};
|
||||
@ -231,7 +257,6 @@ place_client(Area *a, Client *c) {
|
||||
num = 0;
|
||||
fit = False;
|
||||
align = CENTER;
|
||||
field = nil;
|
||||
|
||||
f = c->sel;
|
||||
|
||||
@ -246,13 +271,12 @@ place_client(Area *a, Client *c) {
|
||||
if(!field) {
|
||||
mx = screen->rect.width / 8;
|
||||
my = screen->rect.height / 8;
|
||||
field = emallocz(my * mx * sizeof(Bool));
|
||||
mwidth = ceil((float)mx / devisor);
|
||||
field = emallocz(sizeof(uint) * mwidth * my);
|
||||
}
|
||||
for(y = 0; y < my; y++)
|
||||
for(x = 0; x < mx; x++)
|
||||
field[y*mx + x] = True;
|
||||
dx = screen->rect.width / mx;
|
||||
dy = screen->rect.height / my;
|
||||
memset(field, ~0, (sizeof(uint) * mwidth * my));
|
||||
dx = 8;
|
||||
dy = 8;
|
||||
for(fr=a->frame; fr; fr=fr->anext) {
|
||||
if(fr == f) {
|
||||
cx = f->rect.width / dx;
|
||||
@ -271,13 +295,18 @@ place_client(Area *a, Client *c) {
|
||||
maxy = r_south(&fr->rect) / dy;
|
||||
for(j = y; j < my && j < maxy; j++)
|
||||
for(i = x; i < mx && i < maxx; i++)
|
||||
field[j*mx + i] = False;
|
||||
bit_twiddle(field, mwidth, i, j, False);
|
||||
}
|
||||
for(y = 0; y < my; y++) {
|
||||
for(x = 0; x < mx; x++)
|
||||
fprintf(stderr, "%d", bit_get(field, mwidth, x, y));
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
for(y = 0; y < my; y++)
|
||||
for(x = 0; x < mx; x++) {
|
||||
if(field[y*mx + x]) {
|
||||
for(i = x; (i < mx) && field[y*mx + i]; i++);
|
||||
for(j = y; (j < my) && field[j*mx + x]; j++);
|
||||
if(bit_get(field, mwidth, x, y)) {
|
||||
for(i = x; (i < mx) && bit_get(field, mwidth, i, y); i++);
|
||||
for(j = y; (j < my) && bit_get(field, mwidth, x, j); j++);
|
||||
if(((i - x) * (j - y) > (p2.x - p1.x) * (p2.y - p1.y))
|
||||
&& (i - x > cx) && (j - y > cy))
|
||||
{
|
||||
|
26
fs.c
26
fs.c
@ -233,38 +233,38 @@ message_root(char *message)
|
||||
snprintf(buffer, BUFFER_SIZE, "%s ", message);
|
||||
message = buffer;
|
||||
}
|
||||
if(!strncmp(message, "quit ", 5))
|
||||
if(!strcmp(message, "quit "))
|
||||
srv.running = 0;
|
||||
else if(!strncmp(message, "view ", 5))
|
||||
else if(!strcmp(message, "view "))
|
||||
select_view(&message[5]);
|
||||
else if(!strncmp(message, "selcolors ", 10)) {
|
||||
else if(!strcmp(message, "selcolors ")) {
|
||||
fprintf(stderr, "wmiiwm: warning: selcolors have been removed\n");
|
||||
return Ebadcmd;
|
||||
}else if(!strncmp(message, "focuscolors ", 10)) {
|
||||
}else if(!strcmp(message, "focuscolors ")) {
|
||||
message += 10;
|
||||
n = strlen(message);
|
||||
return parse_colors(&message, (int *)&n, &def.focuscolor);
|
||||
}
|
||||
else if(!strncmp(message, "normcolors ", 11)) {
|
||||
else if(!strcmp(message, "normcolors ")) {
|
||||
message += 11;
|
||||
n = strlen(message);
|
||||
return parse_colors(&message, (int *)&n, &def.normcolor);
|
||||
}
|
||||
else if(!strncmp(message, "font ", 5)) {
|
||||
else if(!strcmp(message, "font ")) {
|
||||
message += 5;
|
||||
free(def.font.fontstr);
|
||||
def.font.fontstr = estrdup(message);
|
||||
loadfont(&blz, &def.font);
|
||||
resize_bar(screen);
|
||||
}
|
||||
else if(!strncmp(message, "border ", 7)) {
|
||||
else if(!strcmp(message, "border ")) {
|
||||
message += 7;
|
||||
n = (uint)strtol(message, &message, 10);
|
||||
if(*message)
|
||||
return Ebadvalue;
|
||||
def.border = n;
|
||||
}
|
||||
else if(!strncmp(message, "grabmod ", 8)) {
|
||||
else if(!strcmp(message, "grabmod ")) {
|
||||
message += 8;
|
||||
ulong mod;
|
||||
mod = mod_key_of_str(message);
|
||||
@ -375,7 +375,7 @@ lookup_file(FileId *parent, char *name)
|
||||
if(!*dir->name) { /* strlen(dir->name) == 0 */
|
||||
switch(parent->tab.type) {
|
||||
case FsDClients:
|
||||
if(!name || !strncmp(name, "sel", 4)) {
|
||||
if(!name || !strcmp(name, "sel")) {
|
||||
if((c = sel_client())) {
|
||||
file = get_file();
|
||||
*last = file;
|
||||
@ -407,7 +407,7 @@ lookup_file(FileId *parent, char *name)
|
||||
}
|
||||
break;
|
||||
case FsDTags:
|
||||
if(!name || !strncmp(name, "sel", 4)) {
|
||||
if(!name || !strcmp(name, "sel")) {
|
||||
if(screen->sel) {
|
||||
file = get_file();
|
||||
*last = file;
|
||||
@ -459,7 +459,7 @@ lookup_file(FileId *parent, char *name)
|
||||
/* Special considerations: */
|
||||
switch(file->tab.type) {
|
||||
case FsDBars:
|
||||
if(!strncmp(file->tab.name, "lbar", 5))
|
||||
if(!strcmp(file->tab.name, "lbar"))
|
||||
file->content.bar_p = &screen[0].lbar;
|
||||
else
|
||||
file->content.bar_p = &screen[0].rbar;
|
||||
@ -504,7 +504,7 @@ fs_walk(P9Req *r) {
|
||||
f = r->fid->aux;
|
||||
clone_files(f);
|
||||
for(i=0; i < r->ifcall.nwname; i++) {
|
||||
if(!strncmp(r->ifcall.wname[i], "..", 3)) {
|
||||
if(!strcmp(r->ifcall.wname[i], "..")) {
|
||||
if(f->next) {
|
||||
nf=f;
|
||||
f=f->next;
|
||||
@ -515,7 +515,7 @@ fs_walk(P9Req *r) {
|
||||
if(!nf)
|
||||
break;
|
||||
assert(!nf->next);
|
||||
if(strncmp(r->ifcall.wname[i], ".", 2)) {
|
||||
if(strcmp(r->ifcall.wname[i], ".")) {
|
||||
nf->next = f;
|
||||
f = nf;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user