From f6ab857b4123236e4e6bb27dd1a3cdc409806d8c Mon Sep 17 00:00:00 2001 From: Ronald Reagan Date: Wed, 5 Jun 2019 14:04:42 +0100 Subject: [PATCH] pywal compatible --- LICENSE | 12 ++++--- Makefile | 78 ++++++++++++++++++----------------------- README | 24 +++++++++++++ README.md | 11 ------ config.def.h | 23 ++++++++++++ config.h | 11 +++--- config.mk | 16 ++++----- dmenu | Bin 31536 -> 0 bytes dmenu.1 | 68 +++++++++++++++++++++--------------- dmenu.c | 96 +++++++++++++++++++++++++++++++++++++++++---------- dmenu.o | Bin 29224 -> 0 bytes dmenu_path | 12 +++---- drw.c | 14 ++++++++ drw.o | Bin 10168 -> 0 bytes stest | Bin 14432 -> 0 bytes stest.o | Bin 5288 -> 0 bytes util.o | Bin 2216 -> 0 bytes 17 files changed, 237 insertions(+), 128 deletions(-) create mode 100644 README delete mode 100644 README.md create mode 100644 config.def.h delete mode 100755 dmenu delete mode 100644 dmenu.o mode change 100644 => 100755 dmenu_path delete mode 100644 drw.o delete mode 100755 stest delete mode 100644 stest.o delete mode 100644 util.o diff --git a/LICENSE b/LICENSE index 221603d..9762166 100644 --- a/LICENSE +++ b/LICENSE @@ -1,13 +1,15 @@ MIT/X Consortium License -© 2006-2014 Anselm R Garbe -© 2010-2012 Connor Lane Smith +© 2006-2019 Anselm R Garbe +© 2006-2008 Sander van Dijk +© 2006-2007 Michał Janeczek +© 2007 Kris Maglione © 2009 Gottox © 2009 Markus Schnalke © 2009 Evan Gates -© 2006-2008 Sander van Dijk -© 2006-2007 Michał Janeczek -© 2014-2015 Hiltjo Posthuma +© 2010-2012 Connor Lane Smith +© 2014-2019 Hiltjo Posthuma +© 2015-2019 Quentin Rameau Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/Makefile b/Makefile index a7cd04f..a03a95c 100644 --- a/Makefile +++ b/Makefile @@ -4,71 +4,61 @@ include config.mk SRC = drw.c dmenu.c stest.c util.c -OBJ = ${SRC:.c=.o} +OBJ = $(SRC:.c=.o) all: options dmenu stest options: @echo dmenu build options: - @echo "CFLAGS = ${CFLAGS}" - @echo "LDFLAGS = ${LDFLAGS}" - @echo "CC = ${CC}" + @echo "CFLAGS = $(CFLAGS)" + @echo "LDFLAGS = $(LDFLAGS)" + @echo "CC = $(CC)" .c.o: - @echo CC $< - @${CC} -c ${CFLAGS} $< + $(CC) -c $(CFLAGS) $< config.h: - @echo creating $@ from config.def.h - @cp config.def.h $@ + cp config.def.h $@ -${OBJ}: arg.h config.h config.mk drw.h +$(OBJ): arg.h config.h config.mk drw.h dmenu: dmenu.o drw.o util.o - @echo CC -o $@ - @${CC} -o $@ dmenu.o drw.o util.o ${LDFLAGS} + $(CC) -o $@ dmenu.o drw.o util.o $(LDFLAGS) stest: stest.o - @echo CC -o $@ - @${CC} -o $@ stest.o ${LDFLAGS} + $(CC) -o $@ stest.o $(LDFLAGS) clean: - @echo cleaning - @rm -f dmenu stest ${OBJ} dmenu-${VERSION}.tar.gz + rm -f dmenu stest $(OBJ) dmenu-$(VERSION).tar.gz dist: clean - @echo creating dist tarball - @mkdir -p dmenu-${VERSION} - @cp LICENSE Makefile README arg.h config.def.h config.mk dmenu.1 \ - drw.h util.h dmenu_path dmenu_run stest.1 ${SRC} \ - dmenu-${VERSION} - @tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} - @gzip dmenu-${VERSION}.tar - @rm -rf dmenu-${VERSION} + mkdir -p dmenu-$(VERSION) + cp LICENSE Makefile README arg.h config.def.h config.mk dmenu.1\ + drw.h util.h dmenu_path dmenu_run stest.1 $(SRC)\ + dmenu-$(VERSION) + tar -cf dmenu-$(VERSION).tar dmenu-$(VERSION) + gzip dmenu-$(VERSION).tar + rm -rf dmenu-$(VERSION) install: all - @echo installing executables to ${DESTDIR}${PREFIX}/bin - @mkdir -p ${DESTDIR}${PREFIX}/bin - @cp -f dmenu dmenu_path dmenu_run stest ${DESTDIR}${PREFIX}/bin - @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu - @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_path - @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_run - @chmod 755 ${DESTDIR}${PREFIX}/bin/stest - @echo installing manual pages to ${DESTDIR}${MANPREFIX}/man1 - @mkdir -p ${DESTDIR}${MANPREFIX}/man1 - @sed "s/VERSION/${VERSION}/g" < dmenu.1 > ${DESTDIR}${MANPREFIX}/man1/dmenu.1 - @sed "s/VERSION/${VERSION}/g" < stest.1 > ${DESTDIR}${MANPREFIX}/man1/stest.1 - @chmod 644 ${DESTDIR}${MANPREFIX}/man1/dmenu.1 - @chmod 644 ${DESTDIR}${MANPREFIX}/man1/stest.1 + mkdir -p $(DESTDIR)$(PREFIX)/bin + cp -f dmenu dmenu_path dmenu_run stest $(DESTDIR)$(PREFIX)/bin + chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu + chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_path + chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_run + chmod 755 $(DESTDIR)$(PREFIX)/bin/stest + mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + sed "s/VERSION/$(VERSION)/g" < dmenu.1 > $(DESTDIR)$(MANPREFIX)/man1/dmenu.1 + sed "s/VERSION/$(VERSION)/g" < stest.1 > $(DESTDIR)$(MANPREFIX)/man1/stest.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/dmenu.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/stest.1 uninstall: - @echo removing executables from ${DESTDIR}${PREFIX}/bin - @rm -f ${DESTDIR}${PREFIX}/bin/dmenu - @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_path - @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_run - @rm -f ${DESTDIR}${PREFIX}/bin/stest - @echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 - @rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1 - @rm -f ${DESTDIR}${MANPREFIX}/man1/stest.1 + rm -f $(DESTDIR)$(PREFIX)/bin/dmenu\ + $(DESTDIR)$(PREFIX)/bin/dmenu_path\ + $(DESTDIR)$(PREFIX)/bin/dmenu_run\ + $(DESTDIR)$(PREFIX)/bin/stest\ + $(DESTDIR)$(MANPREFIX)/man1/dmenu.1\ + $(DESTDIR)$(MANPREFIX)/man1/stest.1 .PHONY: all options clean dist install uninstall diff --git a/README b/README new file mode 100644 index 0000000..a8fcdfe --- /dev/null +++ b/README @@ -0,0 +1,24 @@ +dmenu - dynamic menu +==================== +dmenu is an efficient dynamic menu for X. + + +Requirements +------------ +In order to build dmenu you need the Xlib header files. + + +Installation +------------ +Edit config.mk to match your local setup (dmenu is installed into +the /usr/local namespace by default). + +Afterwards enter the following command to build and install dmenu +(if necessary as root): + + make clean install + + +Running dmenu +------------- +See the man page for details. diff --git a/README.md b/README.md deleted file mode 100644 index 202f04b..0000000 --- a/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Ronald's dmenu - -This is just my build of dmenu. Nothing special, don't bother starring ;-) - -Only changes are minor config ones: bigger font and different colors. - -This is very similar to Luke Smith's Config, but with a few minor changes, a different font and different size. - -## Installation - -After making any config changes that you want, but `make`, `sudo make install` it. diff --git a/config.def.h b/config.def.h new file mode 100644 index 0000000..c022db1 --- /dev/null +++ b/config.def.h @@ -0,0 +1,23 @@ +/* See LICENSE file for copyright and license details. */ +/* Default settings; can be overriden by command line. */ + +static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ +/* -fn option overrides fonts[0]; default X11 font or font set */ +static const char *fonts[] = { + "Inconsolata:size=14" +}; +static const char *prompt = NULL; /* -p option; prompt to the left of input field */ +static const char *colors[SchemeLast][2] = { + /* fg bg */ + [SchemeNorm] = { "#fbf1c7", "#1d2021" }, + [SchemeSel] = { "#fbf1c7", "#fb4934" }, + [SchemeOut] = { "#fbf1c7", "#8ec07c" }, +}; +/* -l option; if nonzero, dmenu uses vertical list with given number of lines */ +static unsigned int lines = 0; + +/* + * Characters not considered part of a word while deleting words + * for example: " /?\"&[]" + */ +static const char worddelimiters[] = " "; diff --git a/config.h b/config.h index e837018..4bbea21 100644 --- a/config.h +++ b/config.h @@ -4,15 +4,12 @@ static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ /* -fn option overrides fonts[0]; default X11 font or font set */ static const char *fonts[] = { - "DejaVu Sans Mono:size=10" + "xos4 Terminus:size=13" + }; static const char *prompt = NULL; /* -p option; prompt to the left of input field */ -static const char *colors[SchemeLast][2] = { - /* fg bg */ - [SchemeNorm] = { "#268bd2", "#000000" }, - [SchemeSel] = { "#000000", "#268bd2" }, - [SchemeOut] = { "#000000", "#00ffff" }, -}; +#include "/home/regan/.cache/wal/colors-wal-dmenu.h" + /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ static unsigned int lines = 0; diff --git a/config.mk b/config.mk index de3f1d9..0929b4a 100644 --- a/config.mk +++ b/config.mk @@ -1,9 +1,9 @@ # dmenu version -VERSION = 4.7 +VERSION = 4.9 # paths PREFIX = /usr/local -MANPREFIX = ${PREFIX}/share/man +MANPREFIX = $(PREFIX)/share/man X11INC = /usr/X11R6/include X11LIB = /usr/X11R6/lib @@ -16,16 +16,16 @@ XINERAMAFLAGS = -DXINERAMA FREETYPELIBS = -lfontconfig -lXft FREETYPEINC = /usr/include/freetype2 # OpenBSD (uncomment) -#FREETYPEINC = ${X11INC}/freetype2 +#FREETYPEINC = $(X11INC)/freetype2 # includes and libs -INCS = -I${X11INC} -I${FREETYPEINC} -LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} +INCS = -I$(X11INC) -I$(FREETYPEINC) +LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) # flags -CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} -CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} -LDFLAGS = -s ${LIBS} +CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) +CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS) +LDFLAGS = $(LIBS) # compiler and linker CC = cc diff --git a/dmenu b/dmenu deleted file mode 100755 index d8e28f60d720a7b9e87291c9f82494fc49068dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31536 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 #include #include +#include #include #include @@ -144,7 +145,7 @@ drawmenu(void) drw_setscheme(drw, scheme[SchemeNorm]); drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); - drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL); + curpos = TEXTW(text) - TEXTW(&text[cursor]); if ((curpos += lrpad / 2 - 1) < w) { drw_setscheme(drw, scheme[SchemeNorm]); drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); @@ -287,18 +288,42 @@ nextrune(int inc) return n; } +static void +movewordedge(int dir) +{ + if (dir < 0) { /* move cursor to the start of the word*/ + while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)])) + cursor = nextrune(-1); + while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)])) + cursor = nextrune(-1); + } else { /* move cursor to the end of the word */ + while (text[cursor] && strchr(worddelimiters, text[cursor])) + cursor = nextrune(+1); + while (text[cursor] && !strchr(worddelimiters, text[cursor])) + cursor = nextrune(+1); + } +} + static void keypress(XKeyEvent *ev) { char buf[32]; int len; - KeySym ksym = NoSymbol; + KeySym ksym; Status status; len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); - if (status == XBufferOverflow) + switch (status) { + default: /* XLookupNone, XBufferOverflow */ return; - if (ev->state & ControlMask) + case XLookupChars: + goto insert; + case XLookupKeySym: + case XLookupBoth: + break; + } + + if (ev->state & ControlMask) { switch(ksym) { case XK_a: ksym = XK_Home; break; case XK_b: ksym = XK_Left; break; @@ -334,6 +359,12 @@ keypress(XKeyEvent *ev) XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY, utf8, utf8, win, CurrentTime); return; + case XK_Left: + movewordedge(-1); + goto draw; + case XK_Right: + movewordedge(+1); + goto draw; case XK_Return: case XK_KP_Enter: break; @@ -343,8 +374,14 @@ keypress(XKeyEvent *ev) default: return; } - else if (ev->state & Mod1Mask) + } else if (ev->state & Mod1Mask) { switch(ksym) { + case XK_b: + movewordedge(-1); + goto draw; + case XK_f: + movewordedge(+1); + goto draw; case XK_g: ksym = XK_Home; break; case XK_G: ksym = XK_End; break; case XK_h: ksym = XK_Up; break; @@ -354,8 +391,11 @@ keypress(XKeyEvent *ev) default: return; } + } + switch(ksym) { default: +insert: if (!iscntrl(*buf)) insert(buf, len); break; @@ -455,6 +495,8 @@ keypress(XKeyEvent *ev) match(); break; } + +draw: drawmenu(); } @@ -467,10 +509,12 @@ paste(void) Atom da; /* we have been given the current selection, now insert it into input */ - XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False, - utf8, &da, &di, &dl, &dl, (unsigned char **)&p); - insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p)); - XFree(p); + if (XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False, + utf8, &da, &di, &dl, &dl, (unsigned char **)&p) + == Success && p) { + insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p)); + XFree(p); + } drawmenu(); } @@ -512,6 +556,11 @@ run(void) if (XFilterEvent(&ev, win)) continue; switch(ev.type) { + case DestroyNotify: + if (ev.xdestroywindow.window != win) + break; + cleanup(); + exit(1); case Expose: if (ev.xexpose.count == 0) drw_map(drw, win, 0, 0, mw, mh); @@ -539,22 +588,21 @@ run(void) static void setup(void) { - int x, y, i = 0; + int x, y, i, j; unsigned int du; XSetWindowAttributes swa; XIM xim; Window w, dw, *dws; XWindowAttributes wa; + XClassHint ch = {"dmenu", "dmenu"}; #ifdef XINERAMA XineramaScreenInfo *info; Window pw; - int a, j, di, n, area = 0; + int a, di, n, area = 0; #endif - /* init appearance */ - scheme[SchemeNorm] = drw_scm_create(drw, colors[SchemeNorm], 2); - scheme[SchemeSel] = drw_scm_create(drw, colors[SchemeSel], 2); - scheme[SchemeOut] = drw_scm_create(drw, colors[SchemeOut], 2); + for (j = 0; j < SchemeLast; j++) + scheme[j] = drw_scm_create(drw, colors[j], 2); clip = XInternAtom(dpy, "CLIPBOARD", False); utf8 = XInternAtom(dpy, "UTF8_STRING", False); @@ -564,6 +612,7 @@ setup(void) lines = MAX(lines, 0); mh = (lines + 1) * bh; #ifdef XINERAMA + i = 0; if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) { XGetInputFocus(dpy, &w, &di); if (mon >= 0 && mon < n) @@ -613,15 +662,19 @@ setup(void) win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0, CopyFromParent, CopyFromParent, CopyFromParent, CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); + XSetClassHint(dpy, win, &ch); + + + /* input methods */ + if ((xim = XOpenIM(dpy, NULL, NULL, NULL)) == NULL) + die("XOpenIM failed: could not open input device"); - /* open input methods */ - xim = XOpenIM(dpy, NULL, NULL, NULL); xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, XNClientWindow, win, XNFocusWindow, win, NULL); XMapRaised(dpy, win); if (embed) { - XSelectInput(dpy, parentwin, FocusChangeMask); + XSelectInput(dpy, parentwin, FocusChangeMask | SubstructureNotifyMask); if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) { for (i = 0; i < du && dws[i] != win; ++i) XSelectInput(dpy, dws[i], FocusChangeMask); @@ -699,7 +752,12 @@ main(int argc, char *argv[]) die("no fonts could be loaded."); lrpad = drw->fonts->h; - if (fast) { +#ifdef __OpenBSD__ + if (pledge("stdio rpath", NULL) == -1) + die("pledge"); +#endif + + if (fast && !isatty(0)) { grabkeyboard(); readstdin(); } else { diff --git a/dmenu.o b/dmenu.o deleted file mode 100644 index ed69458112b9a0d65d937fa150b1841436877aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29224 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 {s#~f#jK^K1{u8C+%XH z{NpOv<9k|6$mYVv`tdz2CexpSoB{q#$g;eLIO@SVw44z5-5)08*TBZ|U(odE{aCDV zUH|2p9*jSynHtA2!}{lHdUX9uGMztY7B);LHT~DY zG3)Ph(Nlm1A>j`7aGd#l2l555v7Ylu-fS0spM?o`SoRzqK$@*_oHJMtepiJFWjkSG zzF3pLLF4>AHWpWFJfi8jQRDc%6(-cb2{zW>uJM~SzJWOIu+B2rFzN3>7Q!*>No#ua z^@I5yg!SBM=;!!6Xz;kSD#T8MW1BJk-r#sHVfr(1^gRI^`}vZK{0SG{r|C&*dh+OG z#$vR=c1LM^ktS~uM_D~S_uEv%ox}$?NS}t;y^9I}H8=8ilk;*Uo$vg--8C{b;*2#A0+*Y3|>uqxxslJ!0*&B znQ@2{$DIQk$L&8{=xL#T@MjQ|4~2u`L|4u zY8>lu|MGKnZts&&hUsZdzaF4T)&Rw(eqXGy&g7h z?`Yy?doR(r-d^*0JGXbbAwLF#0O?wT^Z8Xp9CfdTjr}p7!#{yaAT=0zn713eTS~*< zZyB8Zyv^V}ByT>SXMT?+k1^u=y8AVbZ5U5_9yK_Rlbr@*P7w>7(XkI8(# zCXYU`UGw=lw`;i}e-+fhRIBOV3dgL!!I0kDqO0-~bZG{}FX4?$$V# z@%;G{jiYUr|CPp3{$4unHaN%afW}Kfp82!HQTIxX|5cOM^}nfc-Jg#&j`FNOS9|WK z+w~AP?fNu%-R`9t*X>?y@F3X6bdAC56c*J6ZzR6d;5@GCiKET$!N%>{s>!3DJZ>j> zltN@!2hSx;3y358K5VR~!;t6xO=(<@=eISEx>$a@3x7!Cx}HZ3&f{mV#&!J}gD1c? zruPhfm%`#BgY!Hv+)@G@AC^DM;9E$~IU2`0OYjHM`5M>b>@_&+nV@l9&m@hb9&Xp= z24_717e3$M_en2>SY&XHL&V_!N%Ap+|BCoc24_9D8=RIs;s+YX_VReUSL1sBK5TH- z^SHs;?h7vbn87)2?--oVi;oSSr1p+3R2lRg{bW7o7@Yl?=E5rt&gVGGI=jW~rlE6;qKtcCwp zgR0AVyas3ai3a}%=`S|;yTn-!#uztF(9|l0;zfWhoY3wve`0uDfNyQ{Z2Vk4}MqE^D&TmDV#{K;6WL;sVHF7nWs-%5;~gea(4lkEb2h<@1Bb z{TGST@KD0=yN>L#JQvV#;Y0ac6lKi%omBt0H!CVL#-Z>7MZc!X(t#hYKbpn|mvH-e zUk(MBH{+M0>lgpMwppK#%OEpU{Ki!(iJH%;J;o1ha6CAEHNeom+5Xmx0Yc(=M;#5+ z=i@5K3}wG{wUXd@1?{74(|#>5v~Pq-bdr6OqpY4<-~gHF{|>58!zf$Do6V^Vx;d2p zJIMbBNgn+l4V&pdzB5Mq+)l{KbcF2V_|_B3V&eU+T3!~=&wEr~XPD=D%<#;K3$ zw;F+A|GEAhkQu7|HeTEym5@PfKMqN*&*KM+P1}IPstNcj#BXT5eh%dEJ*Zh9Z_5oA ffe7KH3(O95PD^I{(XXNEcQ&d@4`_8UYu5iipattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) { + XftFontClose(drw->dpy, xfont); + return NULL; + } + font = ecalloc(1, sizeof(Fnt)); font->xfont = xfont; font->pattern = pattern; @@ -337,6 +350,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp fcpattern = FcPatternDuplicate(drw->fonts->pattern); FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); + FcPatternAddBool(fcpattern, FC_COLOR, FcFalse); FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); FcDefaultSubstitute(fcpattern); diff --git a/drw.o b/drw.o deleted file mode 100644 index f26e71b5e7a6acc14226a5f575caee91e59d019b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10168 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 J=36=ce*lazA?5%8 diff --git a/stest b/stest deleted file mode 100755 index a3ba4b35ef719837bd8c017b5fea5a13fcb72449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14432 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 PeMUL_!V03!b`1X;j!z1T diff --git a/stest.o b/stest.o deleted file mode 100644 index 1aeb634c8f1db7d8611930f0475b2795b1348668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5288 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 diff --git a/util.o b/util.o deleted file mode 100644 index f3ada11505f5cce37247f21f75b17e32155e49a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2216 zcmbVN%}-N75TDW_$X6?Pz~G^W)zGLfEymE`M+y{J@kKytj2^6|JOUAD^ZIJgn1}%r z8$!Y#;K4+XYCL!}p@|376MFKb#CR~#7$qhiG}f8dUD!NdFAUkv>~DTEJ8x%qxz(rl zS9v@j#RI2cdnQqU$?9!8W}7i+ga#Pph2Q-4*L8$=!D8*akYHh6&{} z;sj^!dEp~pUSu0MTl2A68;rABz8q)4wK(&I1rqp-2FxD^zI2Q%>kwafRl-b#51UVT z;WhvDcK&9|->!ViY7pHvJ5sXMm%7zD39Ztm*yxD;%kLEP4Sd(C;>j&LLzjvkF*ioG~UJU7mPXD;ArYpAJR!Q8Eg?YBJuo20v& z0t;1xO&h`&6~2AKccH0PAnuCF^}&ylo7d~wVE`}wxrrAuxrrB)L!l77P@~MYO)vak za~Y|WXV-SHuo_V}EA`uZh1eb(0l`rf?W-HERlqwd;M8chJn;(nX~d~cS)biE#0D$y zA#Y7hYiZE*-Y|?$8IZHa4bz0=fIigIttW^2`$zi{$wYUL-j{@H6IpX=)|!BcY~D&k z7MU3njJYWbjPfzWWo$8pu0map<4>t94+Kt~r9GASV}U#QZxnu$!hfgWeg*%e;41%{ zg42G=b$=>&vx3W3Q$2K6B)^&tI11HImsH|Gv`L6hL&^zZNL=;>wA}R>D>a7NGRt~W zTBb3b(kx@n0&P5Hr9d0YS~qKNZ*E~3w^f9nLI$nT>5QLK!Y{i9`^Ya;|jvHnY;>5Y&% l$S>n}qwVY+`R@vFgeHoJbXy3$&u;PZU&!PZvurry{{gtq0l)wN