mirror of https://github.com/0intro/wmii
New tree layout and make system. Note: This will currently *not* install configuration scripts.
This commit is contained in:
parent
a490d34b58
commit
b306ac581f
251
LICENSE.p9p
251
LICENSE.p9p
|
@ -1,251 +0,0 @@
|
||||||
The bulk of this software is derived from Plan 9 and is thus distributed
|
|
||||||
under the Lucent Public License, Version 1.02, reproduced below.
|
|
||||||
|
|
||||||
There are a few exceptions: libutf, libfmt, and libregexp are distributed
|
|
||||||
under simpler BSD-like boilerplates. See the LICENSE files in those
|
|
||||||
directories. There are other exceptions, also marked with LICENSE files
|
|
||||||
in their directories.
|
|
||||||
|
|
||||||
The bitmap fonts in the font/luc, font/lucm, font/lucsans, and font/pelm
|
|
||||||
directory are copyright B&H Inc. and distributed under more restricted
|
|
||||||
terms under agreement with B&H. See the NOTICE file in those directories.
|
|
||||||
|
|
||||||
===================================================================
|
|
||||||
|
|
||||||
Lucent Public License Version 1.02
|
|
||||||
|
|
||||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS PUBLIC
|
|
||||||
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE
|
|
||||||
PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
|
||||||
|
|
||||||
1. DEFINITIONS
|
|
||||||
|
|
||||||
"Contribution" means:
|
|
||||||
|
|
||||||
a. in the case of Lucent Technologies Inc. ("LUCENT"), the Original
|
|
||||||
Program, and
|
|
||||||
b. in the case of each Contributor,
|
|
||||||
|
|
||||||
i. changes to the Program, and
|
|
||||||
ii. additions to the Program;
|
|
||||||
|
|
||||||
where such changes and/or additions to the Program were added to the
|
|
||||||
Program by such Contributor itself or anyone acting on such
|
|
||||||
Contributor's behalf, and the Contributor explicitly consents, in
|
|
||||||
accordance with Section 3C, to characterization of the changes and/or
|
|
||||||
additions as Contributions.
|
|
||||||
|
|
||||||
"Contributor" means LUCENT and any other entity that has Contributed a
|
|
||||||
Contribution to the Program.
|
|
||||||
|
|
||||||
"Distributor" means a Recipient that distributes the Program,
|
|
||||||
modifications to the Program, or any part thereof.
|
|
||||||
|
|
||||||
"Licensed Patents" mean patent claims licensable by a Contributor
|
|
||||||
which are necessarily infringed by the use or sale of its Contribution
|
|
||||||
alone or when combined with the Program.
|
|
||||||
|
|
||||||
"Original Program" means the original version of the software
|
|
||||||
accompanying this Agreement as released by LUCENT, including source
|
|
||||||
code, object code and documentation, if any.
|
|
||||||
|
|
||||||
"Program" means the Original Program and Contributions or any part
|
|
||||||
thereof
|
|
||||||
|
|
||||||
"Recipient" means anyone who receives the Program under this
|
|
||||||
Agreement, including all Contributors.
|
|
||||||
|
|
||||||
2. GRANT OF RIGHTS
|
|
||||||
|
|
||||||
a. Subject to the terms of this Agreement, each Contributor hereby
|
|
||||||
grants Recipient a non-exclusive, worldwide, royalty-free copyright
|
|
||||||
license to reproduce, prepare derivative works of, publicly display,
|
|
||||||
publicly perform, distribute and sublicense the Contribution of such
|
|
||||||
Contributor, if any, and such derivative works, in source code and
|
|
||||||
object code form.
|
|
||||||
|
|
||||||
b. Subject to the terms of this Agreement, each Contributor hereby
|
|
||||||
grants Recipient a non-exclusive, worldwide, royalty-free patent
|
|
||||||
license under Licensed Patents to make, use, sell, offer to sell,
|
|
||||||
import and otherwise transfer the Contribution of such Contributor, if
|
|
||||||
any, in source code and object code form. The patent license granted
|
|
||||||
by a Contributor shall also apply to the combination of the
|
|
||||||
Contribution of that Contributor and the Program if, at the time the
|
|
||||||
Contribution is added by the Contributor, such addition of the
|
|
||||||
Contribution causes such combination to be covered by the Licensed
|
|
||||||
Patents. The patent license granted by a Contributor shall not apply
|
|
||||||
to (i) any other combinations which include the Contribution, nor to
|
|
||||||
(ii) Contributions of other Contributors. No hardware per se is
|
|
||||||
licensed hereunder.
|
|
||||||
|
|
||||||
c. Recipient understands that although each Contributor grants the
|
|
||||||
licenses to its Contributions set forth herein, no assurances are
|
|
||||||
provided by any Contributor that the Program does not infringe the
|
|
||||||
patent or other intellectual property rights of any other entity. Each
|
|
||||||
Contributor disclaims any liability to Recipient for claims brought by
|
|
||||||
any other entity based on infringement of intellectual property rights
|
|
||||||
or otherwise. As a condition to exercising the rights and licenses
|
|
||||||
granted hereunder, each Recipient hereby assumes sole responsibility
|
|
||||||
to secure any other intellectual property rights needed, if any. For
|
|
||||||
example, if a third party patent license is required to allow
|
|
||||||
Recipient to distribute the Program, it is Recipient's responsibility
|
|
||||||
to acquire that license before distributing the Program.
|
|
||||||
|
|
||||||
d. Each Contributor represents that to its knowledge it has sufficient
|
|
||||||
copyright rights in its Contribution, if any, to grant the copyright
|
|
||||||
license set forth in this Agreement.
|
|
||||||
|
|
||||||
3. REQUIREMENTS
|
|
||||||
|
|
||||||
A. Distributor may choose to distribute the Program in any form under
|
|
||||||
this Agreement or under its own license agreement, provided that:
|
|
||||||
|
|
||||||
a. it complies with the terms and conditions of this Agreement;
|
|
||||||
|
|
||||||
b. if the Program is distributed in source code or other tangible
|
|
||||||
form, a copy of this Agreement or Distributor's own license agreement
|
|
||||||
is included with each copy of the Program; and
|
|
||||||
|
|
||||||
c. if distributed under Distributor's own license agreement, such
|
|
||||||
license agreement:
|
|
||||||
|
|
||||||
i. effectively disclaims on behalf of all Contributors all warranties
|
|
||||||
and conditions, express and implied, including warranties or
|
|
||||||
conditions of title and non-infringement, and implied warranties or
|
|
||||||
conditions of merchantability and fitness for a particular purpose;
|
|
||||||
ii. effectively excludes on behalf of all Contributors all liability
|
|
||||||
for damages, including direct, indirect, special, incidental and
|
|
||||||
consequential damages, such as lost profits; and
|
|
||||||
iii. states that any provisions which differ from this Agreement are
|
|
||||||
offered by that Contributor alone and not by any other party.
|
|
||||||
|
|
||||||
B. Each Distributor must include the following in a conspicuous
|
|
||||||
location in the Program:
|
|
||||||
|
|
||||||
Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights
|
|
||||||
Reserved.
|
|
||||||
|
|
||||||
C. In addition, each Contributor must identify itself as the
|
|
||||||
originator of its Contribution in a manner that reasonably allows
|
|
||||||
subsequent Recipients to identify the originator of the Contribution.
|
|
||||||
Also, each Contributor must agree that the additions and/or changes
|
|
||||||
are intended to be a Contribution. Once a Contribution is contributed,
|
|
||||||
it may not thereafter be revoked.
|
|
||||||
|
|
||||||
4. COMMERCIAL DISTRIBUTION
|
|
||||||
|
|
||||||
Commercial distributors of software may accept certain
|
|
||||||
responsibilities with respect to end users, business partners and the
|
|
||||||
like. While this license is intended to facilitate the commercial use
|
|
||||||
of the Program, the Distributor who includes the Program in a
|
|
||||||
commercial product offering should do so in a manner which does not
|
|
||||||
create potential liability for Contributors. Therefore, if a
|
|
||||||
Distributor includes the Program in a commercial product offering,
|
|
||||||
such Distributor ("Commercial Distributor") hereby agrees to defend
|
|
||||||
and indemnify every Contributor ("Indemnified Contributor") against
|
|
||||||
any losses, damages and costs (collectively"Losses") arising from
|
|
||||||
claims, lawsuits and other legal actions brought by a third party
|
|
||||||
against the Indemnified Contributor to the extent caused by the acts
|
|
||||||
or omissions of such Commercial Distributor in connection with its
|
|
||||||
distribution of the Program in a commercial product offering. The
|
|
||||||
obligations in this section do not apply to any claims or Losses
|
|
||||||
relating to any actual or alleged intellectual property infringement.
|
|
||||||
In order to qualify, an Indemnified Contributor must: a) promptly
|
|
||||||
notify the Commercial Distributor in writing of such claim, and b)
|
|
||||||
allow the Commercial Distributor to control, and cooperate with the
|
|
||||||
Commercial Distributor in, the defense and any related settlement
|
|
||||||
negotiations. The Indemnified Contributor may participate in any such
|
|
||||||
claim at its own expense.
|
|
||||||
|
|
||||||
For example, a Distributor might include the Program in a commercial
|
|
||||||
product offering, Product X. That Distributor is then a Commercial
|
|
||||||
Distributor. If that Commercial Distributor then makes performance
|
|
||||||
claims, or offers warranties related to Product X, those performance
|
|
||||||
claims and warranties are such Commercial Distributor's responsibility
|
|
||||||
alone. Under this section, the Commercial Distributor would have to
|
|
||||||
defend claims against the Contributors related to those performance
|
|
||||||
claims and warranties, and if a court requires any Contributor to pay
|
|
||||||
any damages as a result, the Commercial Distributor must pay those
|
|
||||||
damages.
|
|
||||||
|
|
||||||
5. NO WARRANTY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
|
|
||||||
PROVIDED ON AN"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
|
|
||||||
WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
|
|
||||||
OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
|
|
||||||
responsible for determining the appropriateness of using and
|
|
||||||
distributing the Program and assumes all risks associated with its
|
|
||||||
exercise of rights under this Agreement, including but not limited to
|
|
||||||
the risks and costs of program errors, compliance with applicable
|
|
||||||
laws, damage to or loss of data, programs or equipment, and
|
|
||||||
unavailability or interruption of operations.
|
|
||||||
|
|
||||||
6. DISCLAIMER OF LIABILITY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
|
|
||||||
ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
|
|
||||||
WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
|
|
||||||
DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
|
|
||||||
HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
7. EXPORT CONTROL
|
|
||||||
|
|
||||||
Recipient agrees that Recipient alone is responsible for compliance
|
|
||||||
with the United States export administration regulations (and the
|
|
||||||
export control laws and regulation of any other countries).
|
|
||||||
|
|
||||||
8. GENERAL
|
|
||||||
|
|
||||||
If any provision of this Agreement is invalid or unenforceable under
|
|
||||||
applicable law, it shall not affect the validity or enforceability of
|
|
||||||
the remainder of the terms of this Agreement, and without further
|
|
||||||
action by the parties hereto, such provision shall be reformed to the
|
|
||||||
minimum extent necessary to make such provision valid and enforceable.
|
|
||||||
|
|
||||||
If Recipient institutes patent litigation against a Contributor with
|
|
||||||
respect to a patent applicable to software (including a cross-claim or
|
|
||||||
counterclaim in a lawsuit), then any patent licenses granted by that
|
|
||||||
Contributor to such Recipient under this Agreement shall terminate as
|
|
||||||
of the date such litigation is filed. In addition, if Recipient
|
|
||||||
institutes patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Program
|
|
||||||
itself (excluding combinations of the Program with other software or
|
|
||||||
hardware) infringes such Recipient's patent(s), then such Recipient's
|
|
||||||
rights granted under Section 2(b) shall terminate as of the date such
|
|
||||||
litigation is filed.
|
|
||||||
|
|
||||||
All Recipient's rights under this Agreement shall terminate if it
|
|
||||||
fails to comply with any of the material terms or conditions of this
|
|
||||||
Agreement and does not cure such failure in a reasonable period of
|
|
||||||
time after becoming aware of such noncompliance. If all Recipient's
|
|
||||||
rights under this Agreement terminate, Recipient agrees to cease use
|
|
||||||
and distribution of the Program as soon as reasonably practicable.
|
|
||||||
However, Recipient's obligations under this Agreement and any licenses
|
|
||||||
granted by Recipient relating to the Program shall continue and
|
|
||||||
survive.
|
|
||||||
|
|
||||||
LUCENT may publish new versions (including revisions) of this
|
|
||||||
Agreement from time to time. Each new version of the Agreement will be
|
|
||||||
given a distinguishing version number. The Program (including
|
|
||||||
Contributions) may always be distributed subject to the version of the
|
|
||||||
Agreement under which it was received. In addition, after a new
|
|
||||||
version of the Agreement is published, Contributor may elect to
|
|
||||||
distribute the Program (including its Contributions) under the new
|
|
||||||
version. No one other than LUCENT has the right to modify this
|
|
||||||
Agreement. Except as expressly stated in Sections 2(a) and 2(b) above,
|
|
||||||
Recipient receives no rights or licenses to the intellectual property
|
|
||||||
of any Contributor under this Agreement, whether expressly, by
|
|
||||||
implication, estoppel or otherwise. All rights in the Program not
|
|
||||||
expressly granted under this Agreement are reserved.
|
|
||||||
|
|
||||||
This Agreement is governed by the laws of the State of New York and
|
|
||||||
the intellectual property laws of the United States of America. No
|
|
||||||
party to this Agreement will bring a legal action under this Agreement
|
|
||||||
more than one year after the cause of action arose. Each party waives
|
|
||||||
its rights to a jury trial in any resulting litigation.
|
|
||||||
|
|
105
Makefile
105
Makefile
|
@ -1,101 +1,8 @@
|
||||||
# window manager improved 2 - window manager improved 2
|
ROOT=.
|
||||||
# © 2006 Anselm R. Garbe
|
include ${ROOT}/mk/hdr.mk
|
||||||
# © 2006-2007 Kris Maglione
|
|
||||||
.POSIX:
|
|
||||||
|
|
||||||
include config.mk
|
DIRS = libixp \
|
||||||
|
cmd \
|
||||||
|
man
|
||||||
|
|
||||||
SRC = area.c bar.c client.c column.c draw.c event.c frame.c fs.c \
|
include ${ROOT}/mk/dir.mk
|
||||||
geom.c key.c main.c mouse.c rule.c printevent.c util.c view.c
|
|
||||||
OBJ = ${SRC:.c=.o}
|
|
||||||
MAN1 = wmii wmiir wmiiwm wmiiloop
|
|
||||||
SCRIPTS = wmiistartrc wmiir wmiiloop wmii9rc
|
|
||||||
BIN = wmii wmii9menu
|
|
||||||
|
|
||||||
all: options ${BIN}
|
|
||||||
|
|
||||||
options:
|
|
||||||
@echo wmii build options:
|
|
||||||
@echo "CFLAGS = ${CFLAGS}"
|
|
||||||
@echo "LDFLAGS = ${LDFLAGS}"
|
|
||||||
@echo "CC = ${CC}"
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
@echo CC $<
|
|
||||||
@${CC} -c ${CFLAGS} $<
|
|
||||||
|
|
||||||
# In case this isn't from hg
|
|
||||||
.hg/00changelog.i:
|
|
||||||
@mkdir .hg
|
|
||||||
@touch .hg/00changelog.i
|
|
||||||
# VERSION must be updated on every commit/pull
|
|
||||||
config.mk: .hg/00changelog.i
|
|
||||||
|
|
||||||
${OBJ}: wmii.h config.mk
|
|
||||||
|
|
||||||
9menu.o: config.mk
|
|
||||||
|
|
||||||
wmii: ${OBJ}
|
|
||||||
@echo LD $@
|
|
||||||
@${CC} -o $@ ${OBJ} ${LDFLAGS} ${LIBIXP}
|
|
||||||
|
|
||||||
wmii9menu: 9menu.o
|
|
||||||
@echo LD $@
|
|
||||||
@${CC} -o $@ 9menu.o ${LDFLAGS}
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo cleaning
|
|
||||||
@rm -f ${BIN} ${OBJ} 9menu.o wmii-${VERSION}.tar.gz
|
|
||||||
|
|
||||||
dist: clean
|
|
||||||
@echo creating dist tarball
|
|
||||||
@mkdir -p wmii-${VERSION}
|
|
||||||
@ln LICENSE Makefile config.mk README rc/ \
|
|
||||||
wmii.eps wmii.mp \
|
|
||||||
${MAN1:=.1} ${SRC} ${SCRIPTS} wmii.h 9menu.c \
|
|
||||||
wmii-${VERSION}/
|
|
||||||
@tar -zcf wmii-${VERSION}.tgz wmii-${VERSION}
|
|
||||||
@rm -rf wmii-${VERSION}
|
|
||||||
|
|
||||||
install: all
|
|
||||||
@echo installing executable files to ${DESTDIR}${PREFIX}/bin
|
|
||||||
@mkdir -p -m 0755 ${DESTDIR}${PREFIX}/bin
|
|
||||||
@for i in ${SCRIPTS}; do \
|
|
||||||
sed "s|CONFPREFIX|${CONFPREFIX}|g; \
|
|
||||||
s|CONFVERSION|${CONFVERSION}|g; \
|
|
||||||
s|P9PATHS|${P9PATHS}|g; \
|
|
||||||
s|AWKPATH|${AWKPATH}|g" \
|
|
||||||
$$i \
|
|
||||||
>${DESTDIR}${PREFIX}/bin/$$i; \
|
|
||||||
chmod 755 ${DESTDIR}${PREFIX}/bin/$$i; \
|
|
||||||
done
|
|
||||||
@for i in ${BIN}; do\
|
|
||||||
cp -f $$i ${DESTDIR}${PREFIX}/bin; \
|
|
||||||
chmod 755 ${DESTDIR}${PREFIX}/bin/$$i; \
|
|
||||||
done
|
|
||||||
@echo installing scripts to ${DESTDIR}${CONFPREFIX}/wmii-${CONFVERSION}
|
|
||||||
@mkdir -p -m 0755 ${DESTDIR}${CONFPREFIX}/wmii-${CONFVERSION}
|
|
||||||
@cd rc; for i in *; do \
|
|
||||||
sed "s|CONFPREFIX|${CONFPREFIX}|g" $$i \
|
|
||||||
>${DESTDIR}${CONFPREFIX}/wmii-${CONFVERSION}/$$i; \
|
|
||||||
chmod 755 ${DESTDIR}${CONFPREFIX}/wmii-${CONFVERSION}/$$i; \
|
|
||||||
done
|
|
||||||
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
|
|
||||||
@mkdir -p -m 0755 ${DESTDIR}${MANPREFIX}/man1
|
|
||||||
@for i in ${MAN1:=.1}; do \
|
|
||||||
sed "s/VERSION/${VERSION}/g; \
|
|
||||||
s|CONFPREFIX|${CONFPREFIX}|g" \
|
|
||||||
$$i \
|
|
||||||
>${DESTDIR}${MANPREFIX}/man1/$$i; \
|
|
||||||
chmod 644 ${DESTDIR}${MANPREFIX}/man1/$$i; \
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
@echo removing executable files from ${DESTDIR}${PREFIX}/bin
|
|
||||||
@cd ${DESTDIR}${PREFIX}/bin && rm -f ${SCRIPTS} ${BIN}
|
|
||||||
@echo removing scripts from ${DESTDIR}${CONFPREFIX}/wmii-${CONFVERSION}
|
|
||||||
@rm -rf ${DESTDIR}${CONFPREFIX}/wmii-${CONFVERSION}
|
|
||||||
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
|
|
||||||
@cd ${DESTDIR}${MANPREFIX}/man1 && rm -f ${MAN1:=.1}
|
|
||||||
|
|
||||||
.PHONY: all options clean dist install uninstall
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
ROOT=..
|
||||||
|
include ${ROOT}/mk/hdr.mk
|
||||||
|
|
||||||
|
DIRS = wmii
|
||||||
|
TARG = wmii9menu \
|
||||||
|
wmii9rc \
|
||||||
|
wmiiloop \
|
||||||
|
wmiir \
|
||||||
|
wmiistartrc
|
||||||
|
|
||||||
|
OFILES = util.o
|
||||||
|
FILTER = sed "s|CONFPREFIX|${CONFPREFIX}|g; \
|
||||||
|
s|CONFVERSION|${CONFVERSION}|g; \
|
||||||
|
s|P9PATHS|${P9PATHS}|g; \
|
||||||
|
s|AWKPATH|${AWKPATH}|g"
|
||||||
|
|
||||||
|
include ${ROOT}/mk/many.mk
|
||||||
|
include ${ROOT}/mk/dir.mk
|
||||||
|
|
||||||
|
OWMIIR=${OFILES} ${LIBIXP}
|
||||||
|
wmiir.O: ${OWMIIR}
|
||||||
|
${LINK} $@ $*.o ${OWMIIR}
|
||||||
|
|
||||||
|
EXCFLAGS=${INCX11}
|
||||||
|
wmii9menu.O:
|
||||||
|
${LINK} $@ $*.o ${LIBX11}
|
|
@ -3,9 +3,10 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "wmii.h"
|
#include <util.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
fatal(const char *fmt, ...) {
|
fatal(const char *fmt, ...) {
|
||||||
|
@ -13,7 +14,7 @@ fatal(const char *fmt, ...) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = errno;
|
err = errno;
|
||||||
fprintf(stderr, "wmii: fatal: ");
|
fprintf(stderr, "%s: fatal: ", argv0);
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vfprintf(stderr, fmt, ap);
|
vfprintf(stderr, fmt, ap);
|
||||||
|
@ -31,7 +32,7 @@ fatal(const char *fmt, ...) {
|
||||||
void
|
void
|
||||||
mfatal(char *name, uint size) {
|
mfatal(char *name, uint size) {
|
||||||
const char
|
const char
|
||||||
couldnot[] = "wmii: fatal: Could not ",
|
couldnot[] = ": fatal: Could not ",
|
||||||
paren[] = "() ",
|
paren[] = "() ",
|
||||||
bytes[] = " bytes\n";
|
bytes[] = " bytes\n";
|
||||||
char sizestr[8];
|
char sizestr[8];
|
||||||
|
@ -43,6 +44,7 @@ mfatal(char *name, uint size) {
|
||||||
size /= 10;
|
size /= 10;
|
||||||
} while(size > 0);
|
} while(size > 0);
|
||||||
|
|
||||||
|
write(1, argv0, strlen(argv0)-1);
|
||||||
write(1, couldnot, sizeof(couldnot)-1);
|
write(1, couldnot, sizeof(couldnot)-1);
|
||||||
write(1, name, strlen(name));
|
write(1, name, strlen(name));
|
||||||
write(1, paren, sizeof(paren)-1);
|
write(1, paren, sizeof(paren)-1);
|
|
@ -0,0 +1,26 @@
|
||||||
|
ROOT= ../..
|
||||||
|
include ${ROOT}/mk/hdr.mk
|
||||||
|
|
||||||
|
TARG = wmii
|
||||||
|
|
||||||
|
LIB = ${LIBIXP}
|
||||||
|
EXLDFLAGS = -lm ${LIBX11}
|
||||||
|
EXCFLAGS = ${INCX11}
|
||||||
|
OBJ = area \
|
||||||
|
bar \
|
||||||
|
client \
|
||||||
|
column \
|
||||||
|
draw \
|
||||||
|
event \
|
||||||
|
frame \
|
||||||
|
fs \
|
||||||
|
geom \
|
||||||
|
key \
|
||||||
|
main \
|
||||||
|
mouse \
|
||||||
|
rule \
|
||||||
|
printevent\
|
||||||
|
view \
|
||||||
|
../util
|
||||||
|
|
||||||
|
include ${ROOT}/mk/one.mk
|
|
@ -436,7 +436,7 @@ void (*handler[LASTEvent]) (XEvent *) = {
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
check_x_event(IXPConn *c) {
|
check_x_event(IxpConn *c) {
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
while(XPending(blz.dpy)) {
|
while(XPending(blz.dpy)) {
|
||||||
XNextEvent(blz.dpy, &ev);
|
XNextEvent(blz.dpy, &ev);
|
|
@ -70,10 +70,10 @@ static char
|
||||||
/* Global Vars */
|
/* Global Vars */
|
||||||
/***************/
|
/***************/
|
||||||
FileId *free_fileid;
|
FileId *free_fileid;
|
||||||
P9Req *pending_event_reads;
|
Ixp9Req *pending_event_reads;
|
||||||
P9Req *outgoing_event_reads;
|
Ixp9Req *outgoing_event_reads;
|
||||||
FidLink *pending_event_fids;
|
FidLink *pending_event_fids;
|
||||||
P9Srv p9srv = {
|
Ixp9Srv p9srv = {
|
||||||
.open= fs_open,
|
.open= fs_open,
|
||||||
.walk= fs_walk,
|
.walk= fs_walk,
|
||||||
.read= fs_read,
|
.read= fs_read,
|
||||||
|
@ -90,34 +90,34 @@ P9Srv p9srv = {
|
||||||
/* ad-hoc file tree. Empty names ("") indicate dynamic entries to be filled
|
/* ad-hoc file tree. Empty names ("") indicate dynamic entries to be filled
|
||||||
* in by lookup_file */
|
* in by lookup_file */
|
||||||
static Dirtab
|
static Dirtab
|
||||||
dirtab_root[]= {{".", P9QTDIR, FsRoot, 0500|P9DMDIR },
|
dirtab_root[]= {{".", QTDIR, FsRoot, 0500|P9_DMDIR },
|
||||||
{"rbar", P9QTDIR, FsDBars, 0700|P9DMDIR },
|
{"rbar", QTDIR, FsDBars, 0700|P9_DMDIR },
|
||||||
{"lbar", P9QTDIR, FsDBars, 0700|P9DMDIR },
|
{"lbar", QTDIR, FsDBars, 0700|P9_DMDIR },
|
||||||
{"client", P9QTDIR, FsDClients, 0500|P9DMDIR },
|
{"client", QTDIR, FsDClients, 0500|P9_DMDIR },
|
||||||
{"tag", P9QTDIR, FsDTags, 0500|P9DMDIR },
|
{"tag", QTDIR, FsDTags, 0500|P9_DMDIR },
|
||||||
{"ctl", P9QTAPPEND, FsFRctl, 0600|P9DMAPPEND },
|
{"ctl", QTAPPEND, FsFRctl, 0600|P9_DMAPPEND },
|
||||||
{"colrules", P9QTFILE, FsFColRules, 0600 },
|
{"colrules", QTFILE, FsFColRules, 0600 },
|
||||||
{"event", P9QTFILE, FsFEvent, 0600 },
|
{"event", QTFILE, FsFEvent, 0600 },
|
||||||
{"keys", P9QTFILE, FsFKeys, 0600 },
|
{"keys", QTFILE, FsFKeys, 0600 },
|
||||||
{"tagrules", P9QTFILE, FsFTagRules, 0600 },
|
{"tagrules", QTFILE, FsFTagRules, 0600 },
|
||||||
{nil}},
|
{nil}},
|
||||||
dirtab_clients[]={{".", P9QTDIR, FsDClients, 0500|P9DMDIR },
|
dirtab_clients[]={{".", QTDIR, FsDClients, 0500|P9_DMDIR },
|
||||||
{"", P9QTDIR, FsDClient, 0500|P9DMDIR },
|
{"", QTDIR, FsDClient, 0500|P9_DMDIR },
|
||||||
{nil}},
|
{nil}},
|
||||||
dirtab_client[]= {{".", P9QTDIR, FsDClient, 0500|P9DMDIR },
|
dirtab_client[]= {{".", QTDIR, FsDClient, 0500|P9_DMDIR },
|
||||||
{"ctl", P9QTAPPEND, FsFCctl, 0600|P9DMAPPEND },
|
{"ctl", QTAPPEND, FsFCctl, 0600|P9_DMAPPEND },
|
||||||
{"tags", P9QTFILE, FsFCtags, 0600 },
|
{"tags", QTFILE, FsFCtags, 0600 },
|
||||||
{"props", P9QTFILE, FsFprops, 0400 },
|
{"props", QTFILE, FsFprops, 0400 },
|
||||||
{nil}},
|
{nil}},
|
||||||
dirtab_bars[]= {{".", P9QTDIR, FsDBars, 0700|P9DMDIR },
|
dirtab_bars[]= {{".", QTDIR, FsDBars, 0700|P9_DMDIR },
|
||||||
{"", P9QTFILE, FsFBar, 0600 },
|
{"", QTFILE, FsFBar, 0600 },
|
||||||
{nil}},
|
{nil}},
|
||||||
dirtab_tags[]= {{".", P9QTDIR, FsDTags, 0500|P9DMDIR },
|
dirtab_tags[]= {{".", QTDIR, FsDTags, 0500|P9_DMDIR },
|
||||||
{"", P9QTDIR, FsDTag, 0500|P9DMDIR },
|
{"", QTDIR, FsDTag, 0500|P9_DMDIR },
|
||||||
{nil}},
|
{nil}},
|
||||||
dirtab_tag[]= {{".", P9QTDIR, FsDTag, 0500|P9DMDIR },
|
dirtab_tag[]= {{".", QTDIR, FsDTag, 0500|P9_DMDIR },
|
||||||
{"ctl", P9QTAPPEND, FsFTctl, 0600|P9DMAPPEND },
|
{"ctl", QTAPPEND, FsFTctl, 0600|P9_DMAPPEND },
|
||||||
{"index", P9QTFILE, FsFTindex, 0400 },
|
{"index", QTFILE, FsFTindex, 0400 },
|
||||||
{nil}};
|
{nil}};
|
||||||
/* Writing the lists separately and using an array of their references
|
/* Writing the lists separately and using an array of their references
|
||||||
* removes the need for casting and allows for C90 conformance,
|
* removes the need for casting and allows for C90 conformance,
|
||||||
|
@ -174,7 +174,7 @@ clone_files(FileId *f) {
|
||||||
|
|
||||||
/* This should be moved to libixp */
|
/* This should be moved to libixp */
|
||||||
static void
|
static void
|
||||||
write_buf(P9Req *r, char *buf, uint len) {
|
write_buf(Ixp9Req *r, char *buf, uint len) {
|
||||||
if(r->ifcall.offset >= len)
|
if(r->ifcall.offset >= len)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -188,10 +188,10 @@ write_buf(P9Req *r, char *buf, uint len) {
|
||||||
|
|
||||||
/* This should be moved to libixp */
|
/* This should be moved to libixp */
|
||||||
void
|
void
|
||||||
write_to_buf(P9Req *r, void *buf, uint *len, uint max) {
|
write_to_buf(Ixp9Req *r, void *buf, uint *len, uint max) {
|
||||||
uint offset, count;
|
uint offset, count;
|
||||||
|
|
||||||
offset = (r->fid->omode&P9OAPPEND) ? *len : r->ifcall.offset;
|
offset = (r->fid->omode&P9_OAPPEND) ? *len : r->ifcall.offset;
|
||||||
if(offset > *len || r->ifcall.count == 0) {
|
if(offset > *len || r->ifcall.count == 0) {
|
||||||
r->ofcall.count = 0;
|
r->ofcall.count = 0;
|
||||||
return;
|
return;
|
||||||
|
@ -215,7 +215,7 @@ write_to_buf(P9Req *r, void *buf, uint *len, uint max) {
|
||||||
|
|
||||||
/* This should be moved to libixp */
|
/* This should be moved to libixp */
|
||||||
void
|
void
|
||||||
data_to_cstring(P9Req *r) {
|
data_to_cstring(Ixp9Req *r) {
|
||||||
uint i;
|
uint i;
|
||||||
i = r->ifcall.count;
|
i = r->ifcall.count;
|
||||||
if(!i || r->ifcall.data[i - 1] != '\n')
|
if(!i || r->ifcall.data[i - 1] != '\n')
|
||||||
|
@ -301,7 +301,7 @@ read_root_ctl() {
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
respond_event(P9Req *r) {
|
respond_event(Ixp9Req *r) {
|
||||||
FileId *f = r->fid->aux;
|
FileId *f = r->fid->aux;
|
||||||
if(f->content.buf) {
|
if(f->content.buf) {
|
||||||
r->ofcall.data = (void *)f->content.buf;
|
r->ofcall.data = (void *)f->content.buf;
|
||||||
|
@ -320,7 +320,7 @@ write_event(char *format, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
FidLink *f;
|
FidLink *f;
|
||||||
FileId *fi;
|
FileId *fi;
|
||||||
P9Req *req;
|
Ixp9Req *req;
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
vsnprintf(buffer, BUFFER_SIZE, format, ap);
|
vsnprintf(buffer, BUFFER_SIZE, format, ap);
|
||||||
|
@ -373,7 +373,7 @@ lookup_file(FileId *parent, char *name)
|
||||||
Bar *b;
|
Bar *b;
|
||||||
uint id;
|
uint id;
|
||||||
|
|
||||||
if(!(parent->tab.perm & P9DMDIR))
|
if(!(parent->tab.perm & P9_DMDIR))
|
||||||
return nil;
|
return nil;
|
||||||
dir = dirtab[parent->tab.type];
|
dir = dirtab[parent->tab.type];
|
||||||
last = &ret;
|
last = &ret;
|
||||||
|
@ -508,7 +508,7 @@ verify_file(FileId *f) {
|
||||||
/* Service Functions */
|
/* Service Functions */
|
||||||
/*********************/
|
/*********************/
|
||||||
void
|
void
|
||||||
fs_attach(P9Req *r) {
|
fs_attach(Ixp9Req *r) {
|
||||||
FileId *f = get_file();
|
FileId *f = get_file();
|
||||||
f->tab = dirtab[FsRoot][0];
|
f->tab = dirtab[FsRoot][0];
|
||||||
f->tab.name = estrdup("/");
|
f->tab.name = estrdup("/");
|
||||||
|
@ -521,7 +521,7 @@ fs_attach(P9Req *r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_walk(P9Req *r) {
|
fs_walk(Ixp9Req *r) {
|
||||||
FileId *f, *nf;
|
FileId *f, *nf;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -588,7 +588,8 @@ fs_size(FileId *f) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_stat(P9Req *r) {
|
fs_stat(Ixp9Req *r) {
|
||||||
|
Message m;
|
||||||
Stat s;
|
Stat s;
|
||||||
int size;
|
int size;
|
||||||
uchar *buf;
|
uchar *buf;
|
||||||
|
@ -602,13 +603,16 @@ fs_stat(P9Req *r) {
|
||||||
dostat(&s, fs_size(f), f);
|
dostat(&s, fs_size(f), f);
|
||||||
r->ofcall.nstat = size = ixp_sizeof_stat(&s);
|
r->ofcall.nstat = size = ixp_sizeof_stat(&s);
|
||||||
buf = emallocz(size);
|
buf = emallocz(size);
|
||||||
r->ofcall.stat = buf;
|
|
||||||
ixp_pack_stat(&buf, &size, &s);
|
m = ixp_message(buf, size, MsgPack);
|
||||||
|
ixp_pstat(&m, &s);
|
||||||
|
|
||||||
|
r->ofcall.stat = m.data;
|
||||||
respond(r, nil);
|
respond(r, nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_read(P9Req *r) {
|
fs_read(Ixp9Req *r) {
|
||||||
char *buf;
|
char *buf;
|
||||||
FileId *f, *tf;
|
FileId *f, *tf;
|
||||||
int n, offset;
|
int n, offset;
|
||||||
|
@ -622,12 +626,15 @@ fs_read(P9Req *r) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(f->tab.perm & P9DMDIR && f->tab.perm & 0400) {
|
if(f->tab.perm & P9_DMDIR && f->tab.perm & 0400) {
|
||||||
Stat s;
|
Stat s;
|
||||||
|
Message m;
|
||||||
|
|
||||||
offset = 0;
|
offset = 0;
|
||||||
size = r->ifcall.count;
|
size = r->ifcall.count;
|
||||||
buf = emallocz(size);
|
buf = emallocz(size);
|
||||||
r->ofcall.data = buf;
|
m = ixp_message(buf, size, MsgPack);
|
||||||
|
|
||||||
tf = f = lookup_file(f, nil);
|
tf = f = lookup_file(f, nil);
|
||||||
/* Note: f->tab.name == "." so we skip it */
|
/* Note: f->tab.name == "." so we skip it */
|
||||||
for(f=f->next; f; f=f->next) {
|
for(f=f->next; f; f=f->next) {
|
||||||
|
@ -636,7 +643,7 @@ fs_read(P9Req *r) {
|
||||||
if(offset >= r->ifcall.offset) {
|
if(offset >= r->ifcall.offset) {
|
||||||
if(size < n)
|
if(size < n)
|
||||||
break;
|
break;
|
||||||
ixp_pack_stat((uchar **)&buf, &size, &s);
|
ixp_pstat(&m, &s);
|
||||||
}
|
}
|
||||||
offset += n;
|
offset += n;
|
||||||
}
|
}
|
||||||
|
@ -645,6 +652,7 @@ fs_read(P9Req *r) {
|
||||||
free_file(f);
|
free_file(f);
|
||||||
}
|
}
|
||||||
r->ofcall.count = r->ifcall.count - size;
|
r->ofcall.count = r->ifcall.count - size;
|
||||||
|
r->ofcall.data = m.data;
|
||||||
respond(r, nil);
|
respond(r, nil);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -709,7 +717,7 @@ fs_read(P9Req *r) {
|
||||||
|
|
||||||
/* This function needs to be seriously cleaned up */
|
/* This function needs to be seriously cleaned up */
|
||||||
void
|
void
|
||||||
fs_write(P9Req *r) {
|
fs_write(Ixp9Req *r) {
|
||||||
FileId *f;
|
FileId *f;
|
||||||
char *errstr = nil;
|
char *errstr = nil;
|
||||||
uint i;
|
uint i;
|
||||||
|
@ -802,7 +810,7 @@ fs_write(P9Req *r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_open(P9Req *r) {
|
fs_open(Ixp9Req *r) {
|
||||||
FidLink *fl;
|
FidLink *fl;
|
||||||
FileId *f = r->fid->aux;
|
FileId *f = r->fid->aux;
|
||||||
|
|
||||||
|
@ -819,19 +827,19 @@ fs_open(P9Req *r) {
|
||||||
pending_event_fids = fl;
|
pending_event_fids = fl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if((r->ifcall.mode&3) == P9OEXEC) {
|
if((r->ifcall.mode&3) == P9_OEXEC) {
|
||||||
respond(r, Enoperm);
|
respond(r, Enoperm);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if((r->ifcall.mode&3) != P9OREAD && !(f->tab.perm & 0200)) {
|
if((r->ifcall.mode&3) != P9_OREAD && !(f->tab.perm & 0200)) {
|
||||||
respond(r, Enoperm);
|
respond(r, Enoperm);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if((r->ifcall.mode&3) != P9OWRITE && !(f->tab.perm & 0400)) {
|
if((r->ifcall.mode&3) != P9_OWRITE && !(f->tab.perm & 0400)) {
|
||||||
respond(r, Enoperm);
|
respond(r, Enoperm);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if((r->ifcall.mode&~(3|P9OAPPEND|P9OTRUNC))) {
|
if((r->ifcall.mode&~(3|P9_OAPPEND|P9_OTRUNC))) {
|
||||||
respond(r, Enoperm);
|
respond(r, Enoperm);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -839,7 +847,7 @@ fs_open(P9Req *r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_create(P9Req *r) {
|
fs_create(Ixp9Req *r) {
|
||||||
FileId *f = r->fid->aux;
|
FileId *f = r->fid->aux;
|
||||||
|
|
||||||
switch(f->tab.type) {
|
switch(f->tab.type) {
|
||||||
|
@ -868,7 +876,7 @@ fs_create(P9Req *r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_remove(P9Req *r) {
|
fs_remove(Ixp9Req *r) {
|
||||||
FileId *f = r->fid->aux;
|
FileId *f = r->fid->aux;
|
||||||
|
|
||||||
if(!verify_file(f)) {
|
if(!verify_file(f)) {
|
||||||
|
@ -891,7 +899,7 @@ fs_remove(P9Req *r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_clunk(P9Req *r) {
|
fs_clunk(Ixp9Req *r) {
|
||||||
Client *c;
|
Client *c;
|
||||||
FidLink **fl, *ft;
|
FidLink **fl, *ft;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
@ -941,11 +949,11 @@ fs_clunk(P9Req *r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fs_flush(P9Req *r) {
|
fs_flush(Ixp9Req *r) {
|
||||||
P9Req **i, **j;
|
Ixp9Req **i, **j;
|
||||||
|
|
||||||
for(i=&pending_event_reads; i != &outgoing_event_reads; i=&outgoing_event_reads)
|
for(i=&pending_event_reads; i != &outgoing_event_reads; i=&outgoing_event_reads)
|
||||||
for(j=i; *j; j=(P9Req **)&(*j)->aux)
|
for(j=i; *j; j=(Ixp9Req **)&(*j)->aux)
|
||||||
if(*j == r->oldreq) {
|
if(*j == r->oldreq) {
|
||||||
*j = (*j)->aux;
|
*j = (*j)->aux;
|
||||||
respond(r->oldreq, Einterrupted);
|
respond(r->oldreq, Einterrupted);
|
|
@ -412,7 +412,7 @@ spawn_command(const char *cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
check_9pcon(IXPConn *c) {
|
check_9pcon(IxpConn *c) {
|
||||||
serve_9pcon(c);
|
serve_9pcon(c);
|
||||||
check_x_event(nil);
|
check_x_event(nil);
|
||||||
}
|
}
|
||||||
|
@ -429,36 +429,23 @@ main(int argc, char *argv[]) {
|
||||||
wmiirc = "wmiistartrc";
|
wmiirc = "wmiistartrc";
|
||||||
|
|
||||||
/* command line args */
|
/* command line args */
|
||||||
for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
|
ARGBEGIN{
|
||||||
switch (argv[i][1]) {
|
case 'v':
|
||||||
case 'v':
|
printf("%s", version);
|
||||||
printf("%s", version);
|
exit(0);
|
||||||
exit(0);
|
case 'V':
|
||||||
break;
|
verbose = True;
|
||||||
case 'V':
|
break;
|
||||||
verbose = True;
|
case 'a':
|
||||||
break;
|
address = EARGF(usage());
|
||||||
case 'a':
|
break;
|
||||||
if(argv[i][2] != '\0')
|
case 'r':
|
||||||
address = &argv[i][2];
|
wmiirc = EARGF(usage());
|
||||||
else if(++i < argc)
|
break;
|
||||||
address = argv[i];
|
default:
|
||||||
else
|
usage();
|
||||||
usage();
|
break;
|
||||||
break;
|
}ARGEND;
|
||||||
case 'r':
|
|
||||||
if(argv[i][2] != '\0')
|
|
||||||
wmiirc = &argv[i][2];
|
|
||||||
else if(++i < argc)
|
|
||||||
wmiirc = argv[i];
|
|
||||||
else
|
|
||||||
usage();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
usage();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setlocale(LC_CTYPE, "");
|
setlocale(LC_CTYPE, "");
|
||||||
starting = True;
|
starting = True;
|
||||||
|
@ -479,15 +466,15 @@ main(int argc, char *argv[]) {
|
||||||
init_traps();
|
init_traps();
|
||||||
|
|
||||||
errstr = nil;
|
errstr = nil;
|
||||||
sock = ixp_create_sock(address, &errstr);
|
sock = ixp_dial(address);
|
||||||
if(sock < 0)
|
if(sock < 0)
|
||||||
fatal("Can't create socket '%s': %s", address, errstr);
|
fatal("Can't create socket '%s': %s", address, errstr);
|
||||||
|
|
||||||
if(wmiirc)
|
if(wmiirc)
|
||||||
spawn_command(wmiirc);
|
spawn_command(wmiirc);
|
||||||
|
|
||||||
ixp_server_open_conn(&srv, sock, &p9srv, check_9pcon, nil);
|
ixp_listen(&srv, sock, &p9srv, check_9pcon, nil);
|
||||||
ixp_server_open_conn(&srv, ConnectionNumber(blz.dpy), nil, check_x_event, nil);
|
ixp_listen(&srv, ConnectionNumber(blz.dpy), nil, check_x_event, nil);
|
||||||
|
|
||||||
view = nil;
|
view = nil;
|
||||||
client = nil;
|
client = nil;
|
||||||
|
@ -579,7 +566,7 @@ main(int argc, char *argv[]) {
|
||||||
write_event("FocusTag %s\n", screen->sel->name);
|
write_event("FocusTag %s\n", screen->sel->name);
|
||||||
|
|
||||||
check_x_event(nil);
|
check_x_event(nil);
|
||||||
errstr = ixp_server_loop(&srv);
|
errstr = ixp_serverloop(&srv);
|
||||||
if(errstr)
|
if(errstr)
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
|
@ -9,6 +9,7 @@
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
#include <ixp.h>
|
#include <ixp.h>
|
||||||
|
#include <util.h>
|
||||||
|
|
||||||
#define nil ((void*)0)
|
#define nil ((void*)0)
|
||||||
#define nelem(ary) (sizeof(ary) / sizeof(*ary))
|
#define nelem(ary) (sizeof(ary) / sizeof(*ary))
|
||||||
|
@ -256,8 +257,8 @@ enum { BUFFER_SIZE = 8092 };
|
||||||
char buffer[BUFFER_SIZE];
|
char buffer[BUFFER_SIZE];
|
||||||
|
|
||||||
/* IXP */
|
/* IXP */
|
||||||
IXPServer srv;
|
IxpServer srv;
|
||||||
P9Srv p9srv;
|
Ixp9Srv p9srv;
|
||||||
|
|
||||||
/* X11 */
|
/* X11 */
|
||||||
uint num_screens;
|
uint num_screens;
|
||||||
|
@ -354,7 +355,7 @@ char *parse_colors(char **buf, int *buflen, BlitzColor *col);
|
||||||
|
|
||||||
/* event.c */
|
/* event.c */
|
||||||
void dispatch_event(XEvent *e);
|
void dispatch_event(XEvent *e);
|
||||||
void check_x_event(IXPConn *c);
|
void check_x_event(IxpConn *c);
|
||||||
uint flushevents(long even_mask, Bool dispatch);
|
uint flushevents(long even_mask, Bool dispatch);
|
||||||
|
|
||||||
/* frame.c */
|
/* frame.c */
|
||||||
|
@ -374,17 +375,17 @@ void update_frame_widget_colors(Frame *f);
|
||||||
void check_frame_constraints(XRectangle *rect);
|
void check_frame_constraints(XRectangle *rect);
|
||||||
|
|
||||||
/* fs.c */
|
/* fs.c */
|
||||||
void fs_attach(P9Req *r);
|
void fs_attach(Ixp9Req *r);
|
||||||
void fs_clunk(P9Req *r);
|
void fs_clunk(Ixp9Req *r);
|
||||||
void fs_create(P9Req *r);
|
void fs_create(Ixp9Req *r);
|
||||||
void fs_flush(P9Req *r);
|
void fs_flush(Ixp9Req *r);
|
||||||
void fs_freefid(Fid *f);
|
void fs_freefid(Fid *f);
|
||||||
void fs_open(P9Req *r);
|
void fs_open(Ixp9Req *r);
|
||||||
void fs_read(P9Req *r);
|
void fs_read(Ixp9Req *r);
|
||||||
void fs_remove(P9Req *r);
|
void fs_remove(Ixp9Req *r);
|
||||||
void fs_stat(P9Req *r);
|
void fs_stat(Ixp9Req *r);
|
||||||
void fs_walk(P9Req *r);
|
void fs_walk(Ixp9Req *r);
|
||||||
void fs_write(P9Req *r);
|
void fs_write(Ixp9Req *r);
|
||||||
void write_event(char *format, ...);
|
void write_event(char *format, ...);
|
||||||
|
|
||||||
/* geom.c */
|
/* geom.c */
|
||||||
|
@ -414,19 +415,6 @@ void grab_button(Window w, uint button, ulong mod);
|
||||||
void update_rules(Rule **rule, const char *data);
|
void update_rules(Rule **rule, const char *data);
|
||||||
void trim(char *str, const char *chars);
|
void trim(char *str, const char *chars);
|
||||||
|
|
||||||
#define strlcat wmii_strlcat
|
|
||||||
/* util.c */
|
|
||||||
uint tokenize(char *res[], uint reslen, char *str, char delim);
|
|
||||||
char *estrdup(const char *str);
|
|
||||||
void *erealloc(void *ptr, uint size);
|
|
||||||
void *emallocz(uint size);
|
|
||||||
void *emalloc(uint size);
|
|
||||||
void fatal(const char *fmt, ...);
|
|
||||||
int max(int a, int b);
|
|
||||||
int min(int a, int b);
|
|
||||||
char *str_nil(char *s);
|
|
||||||
uint strlcat(char *dst, const char *src, unsigned int siz);
|
|
||||||
|
|
||||||
/* view.c */
|
/* view.c */
|
||||||
void arrange_view(View *v);
|
void arrange_view(View *v);
|
||||||
void scale_view(View *v, float w);
|
void scale_view(View *v, float w);
|
|
@ -0,0 +1,321 @@
|
||||||
|
/* Copyright ©2007 Kris Maglione <fbsdaemon@gmail.com>
|
||||||
|
* See LICENSE file for license details.
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <ixp.h>
|
||||||
|
#include <util.h>
|
||||||
|
|
||||||
|
static IxpClient *client;
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage() {
|
||||||
|
fprintf(stderr,
|
||||||
|
"usage: %1$s [-a <address>] {create | read | ls [-ld] | remove | write} <file>\n"
|
||||||
|
" %1$s [-a <address>] xwrite <file> <data>\n"
|
||||||
|
" %1$s -v\n", argv0);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Utility Functions */
|
||||||
|
static void
|
||||||
|
write_data(IxpCFid *fid) {
|
||||||
|
void *buf;
|
||||||
|
uint len;
|
||||||
|
|
||||||
|
buf = ixp_emalloc(fid->iounit);;
|
||||||
|
while((len = read(0, buf, fid->iounit)) > 0)
|
||||||
|
if(ixp_write(fid, buf, len) != len)
|
||||||
|
fatal("cannot write file: %s\n", errstr);
|
||||||
|
/* do an explicit empty write when no writing has been done yet */
|
||||||
|
if(fid->offset == 0)
|
||||||
|
if(ixp_write(fid, buf, 0) != 0)
|
||||||
|
fatal("cannot write file: %s\n", errstr);
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
comp_stat(const void *s1, const void *s2) {
|
||||||
|
Stat *st1, *st2;
|
||||||
|
|
||||||
|
st1 = (Stat*)s1;
|
||||||
|
st2 = (Stat*)s2;
|
||||||
|
return strcmp(st1->name, st2->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setrwx(long m, char *s) {
|
||||||
|
static char *modes[] = {
|
||||||
|
"---", "--x", "-w-",
|
||||||
|
"-wx", "r--", "r-x",
|
||||||
|
"rw-", "rwx",
|
||||||
|
};
|
||||||
|
strncpy(s, modes[m], 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
str_of_mode(uint mode) {
|
||||||
|
static char buf[16];
|
||||||
|
|
||||||
|
buf[0]='-';
|
||||||
|
if(mode & P9_DMDIR)
|
||||||
|
buf[0]='d';
|
||||||
|
buf[1]='-';
|
||||||
|
setrwx((mode >> 6) & 7, &buf[2]);
|
||||||
|
setrwx((mode >> 3) & 7, &buf[5]);
|
||||||
|
setrwx((mode >> 0) & 7, &buf[8]);
|
||||||
|
buf[11] = 0;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
str_of_time(uint val) {
|
||||||
|
static char buf[32];
|
||||||
|
|
||||||
|
ctime_r((time_t*)&val, buf);
|
||||||
|
buf[strlen(buf) - 1] = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_stat(Stat *s, int details) {
|
||||||
|
if(details)
|
||||||
|
fprintf(stdout, "%s %s %s %5llu %s %s\n", str_of_mode(s->mode),
|
||||||
|
s->uid, s->gid, s->length, str_of_time(s->mtime), s->name);
|
||||||
|
else {
|
||||||
|
if((s->mode&P9_DMDIR) && strcmp(s->name, "/"))
|
||||||
|
fprintf(stdout, "%s/\n", s->name);
|
||||||
|
else
|
||||||
|
fprintf(stdout, "%s\n", s->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Service Functions */
|
||||||
|
static int
|
||||||
|
xwrite(int argc, char *argv[]) {
|
||||||
|
IxpCFid *fid;
|
||||||
|
char *file;
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
file = EARGF(usage());
|
||||||
|
fid = ixp_open(client, file, P9_OWRITE);
|
||||||
|
if(fid == nil)
|
||||||
|
fatal("Can't open file '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
write_data(fid);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xawrite(int argc, char *argv[]) {
|
||||||
|
IxpCFid *fid;
|
||||||
|
char *file, *buf, *arg;
|
||||||
|
int nbuf, mbuf, len;
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
file = EARGF(usage());
|
||||||
|
fid = ixp_open(client, file, P9_OWRITE);
|
||||||
|
if(fid == nil)
|
||||||
|
fatal("Can't open file '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
nbuf = 0;
|
||||||
|
mbuf = 128;
|
||||||
|
buf = ixp_emalloc(mbuf);
|
||||||
|
while(argc) {
|
||||||
|
arg = ARGF();
|
||||||
|
len = strlen(arg);
|
||||||
|
if(nbuf + len > mbuf) {
|
||||||
|
mbuf <<= 1;
|
||||||
|
buf = ixp_erealloc(buf, mbuf);
|
||||||
|
}
|
||||||
|
memcpy(buf+nbuf, arg, len);
|
||||||
|
nbuf += len;
|
||||||
|
if(argc)
|
||||||
|
buf[nbuf++] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ixp_write(fid, buf, nbuf) == -1)
|
||||||
|
fatal("cannot write file '%s': %s\n", file, errstr);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xcreate(int argc, char *argv[]) {
|
||||||
|
IxpCFid *fid;
|
||||||
|
char *file;
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
file = EARGF(usage());
|
||||||
|
fid = ixp_create(client, file, 0777, P9_OREAD);
|
||||||
|
if(fid == nil)
|
||||||
|
fatal("Can't create file '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
if((fid->qid.type&P9_DMDIR) == 0)
|
||||||
|
write_data(fid);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xremove(int argc, char *argv[]) {
|
||||||
|
char *file;
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
file = EARGF(usage());
|
||||||
|
if(ixp_remove(client, file) == 0)
|
||||||
|
fatal("Can't remove file '%s': %s\n", file, errstr);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xread(int argc, char *argv[]) {
|
||||||
|
IxpCFid *fid;
|
||||||
|
char *file, *buf;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
file = EARGF(usage());
|
||||||
|
fid = ixp_open(client, file, P9_OREAD);
|
||||||
|
if(fid == nil)
|
||||||
|
fatal("Can't open file '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
buf = ixp_emalloc(fid->iounit);
|
||||||
|
while((count = ixp_read(fid, buf, fid->iounit)) > 0)
|
||||||
|
write(1, buf, count);
|
||||||
|
|
||||||
|
if(count == -1)
|
||||||
|
fatal("cannot read file/directory '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xls(int argc, char *argv[]) {
|
||||||
|
Message m;
|
||||||
|
Stat *stat;
|
||||||
|
IxpCFid *fid;
|
||||||
|
char *file, *buf;
|
||||||
|
int lflag, dflag, count, nstat, mstat, i;
|
||||||
|
|
||||||
|
lflag = dflag = 0;
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
case 'l':
|
||||||
|
lflag++;
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
dflag++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
file = EARGF(usage());
|
||||||
|
|
||||||
|
stat = ixp_stat(client, file);
|
||||||
|
if(stat == nil)
|
||||||
|
fatal("cannot stat file '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
if(dflag || (stat->mode&P9_DMDIR) == 0) {
|
||||||
|
print_stat(stat, lflag);
|
||||||
|
ixp_freestat(stat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ixp_freestat(stat);
|
||||||
|
|
||||||
|
fid = ixp_open(client, file, P9_OREAD);
|
||||||
|
if(fid == nil)
|
||||||
|
fatal("Can't open file '%s': %s\n", file, errstr);
|
||||||
|
|
||||||
|
nstat = 0;
|
||||||
|
mstat = 16;
|
||||||
|
stat = ixp_emalloc(sizeof(*stat) * mstat);
|
||||||
|
buf = ixp_emalloc(fid->iounit);
|
||||||
|
while((count = ixp_read(fid, buf, fid->iounit)) > 0) {
|
||||||
|
m = ixp_message(buf, count, MsgUnpack);
|
||||||
|
while(m.pos < m.end) {
|
||||||
|
if(nstat == mstat) {
|
||||||
|
mstat <<= 1;
|
||||||
|
stat = ixp_erealloc(stat, mstat);
|
||||||
|
}
|
||||||
|
ixp_pstat(&m, &stat[nstat++]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qsort(stat, nstat, sizeof(*stat), comp_stat);
|
||||||
|
for(i = 0; i < nstat; i++) {
|
||||||
|
print_stat(&stat[i], lflag);
|
||||||
|
ixp_freestat(&stat[i]);
|
||||||
|
}
|
||||||
|
free(stat);
|
||||||
|
|
||||||
|
if(count == -1)
|
||||||
|
fatal("cannot read directory '%s': %s\n", file, errstr);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[]) {
|
||||||
|
int ret;
|
||||||
|
char *cmd, *address;
|
||||||
|
|
||||||
|
address = getenv("WMII_ADDRESS");
|
||||||
|
|
||||||
|
ARGBEGIN{
|
||||||
|
case 'v':
|
||||||
|
puts("ixpc-" VERSION ", ©2007 Kris Maglione\n");
|
||||||
|
exit(0);
|
||||||
|
case 'a':
|
||||||
|
address = EARGF(usage());
|
||||||
|
}ARGEND;
|
||||||
|
|
||||||
|
cmd = EARGF(usage());
|
||||||
|
|
||||||
|
if(!address)
|
||||||
|
fatal("$WMII_ADDRESS not set\n");
|
||||||
|
|
||||||
|
client = ixp_mount(address);
|
||||||
|
if(client == nil)
|
||||||
|
fatal("%s\n", errstr);
|
||||||
|
|
||||||
|
if(!strcmp(cmd, "create"))
|
||||||
|
ret = xcreate(argc, argv);
|
||||||
|
else if(!strcmp(cmd, "ls"))
|
||||||
|
ret = xls(argc, argv);
|
||||||
|
else if(!strcmp(cmd, "read"))
|
||||||
|
ret = xread(argc, argv);
|
||||||
|
else if(!strcmp(cmd, "remove"))
|
||||||
|
ret = xremove(argc, argv);
|
||||||
|
else if(!strcmp(cmd, "write"))
|
||||||
|
ret = xwrite(argc, argv);
|
||||||
|
else if(!strcmp(cmd, "xwrite"))
|
||||||
|
ret = xawrite(argc, argv);
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
|
||||||
|
ixp_unmount(client);
|
||||||
|
return ret;
|
||||||
|
}
|
47
config.mk
47
config.mk
|
@ -1,35 +1,38 @@
|
||||||
# wmii version
|
|
||||||
VERSION = $$(hg tip --template 'hg{rev}' 2>/dev/null)
|
|
||||||
CONFVERSION = 3.5
|
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
# paths
|
# paths
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
CONFPREFIX = ${PREFIX}/etc
|
BIN = ${PREFIX}/bin
|
||||||
MANPREFIX = ${PREFIX}/share/man
|
MAN = ${PREFIX}/share/man
|
||||||
|
ETC = ${PREFIX}/etc
|
||||||
|
LIBDIR = ${PREFIX}/lib
|
||||||
|
INCLUDE = ${PREFIX}/include
|
||||||
|
|
||||||
|
# Includes and libs
|
||||||
|
INCS = -I. -I${ROOT}/include -I${INCLUDE} -I/usr/include
|
||||||
|
LIBS = -L/usr/lib -lc
|
||||||
|
|
||||||
|
# Flags
|
||||||
|
CFLAGS = -g -Wall ${INCS} -DVERSION=\"${VERSION}\"
|
||||||
|
LDFLAGS = -g ${LIBS}
|
||||||
|
|
||||||
|
# Compiler
|
||||||
|
CC = cc -c
|
||||||
|
# Linker (Under normal circumstances, this should *not* be 'ld')
|
||||||
|
LD = cc
|
||||||
|
# Other
|
||||||
|
AR = ar cr
|
||||||
|
RANLIB = ranlib
|
||||||
|
|
||||||
AWKPATH = /usr/bin/awk
|
AWKPATH = /usr/bin/awk
|
||||||
P9PATHS = /usr/local/plan9 /usr/local/9 /opt/plan9 /opt/9 /usr/plan9 /usr/9
|
P9PATHS = /usr/local/plan9 /usr/local/9 /opt/plan9 /opt/9 /usr/plan9 /usr/9
|
||||||
|
|
||||||
X11INC = /usr/X11R6/include
|
INCX11 = -I/usr/X11R6/include
|
||||||
X11LIB = /usr/X11R6/lib
|
LIBX11 = -L/usr/X11R6/lib -lX11
|
||||||
|
LIBIXP = ${ROOT}/libixp/libixp.a
|
||||||
# includes and libs
|
|
||||||
INCS = -I. -I${PREFIX}/include -I/usr/include -I${X11INC}
|
|
||||||
LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lX11
|
|
||||||
LIBIXP = -L${PREFIX}/lib -lixp
|
|
||||||
|
|
||||||
# flags
|
|
||||||
#CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
|
|
||||||
#LDFLAGS = ${LIBS}
|
|
||||||
CFLAGS = -g -Wall ${INCS} -DVERSION=\"${VERSION}\"
|
|
||||||
LDFLAGS = -g ${LIBS}
|
|
||||||
|
|
||||||
# Solaris
|
# Solaris
|
||||||
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
|
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
|
||||||
#LDFLAGS = ${LIBS} -R${PREFIX}/lib
|
#LDFLAGS = ${LIBS} -R${PREFIX}/lib
|
||||||
#LDFLAGS += -lsocket -lnsl
|
#LDFLAGS += -lsocket -lnsl
|
||||||
#CFLAGS += -xtarget=ultra
|
#CFLAGS += -xtarget=ultra
|
||||||
|
|
||||||
# compiler and linker
|
|
||||||
CC = cc
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
ROOT= ..
|
||||||
|
include ${ROOT}/mk/hdr.mk
|
||||||
|
|
||||||
|
HFILES = ixp.h ixp_fcall.h
|
||||||
|
|
||||||
|
include ${ROOT}/mk/common.mk
|
|
@ -0,0 +1,36 @@
|
||||||
|
#define strlcat wmii_strlcat
|
||||||
|
/* util.c */
|
||||||
|
uint tokenize(char *res[], uint reslen, char *str, char delim);
|
||||||
|
char *estrdup(const char *str);
|
||||||
|
void *erealloc(void *ptr, uint size);
|
||||||
|
void *emallocz(uint size);
|
||||||
|
void *emalloc(uint size);
|
||||||
|
void fatal(const char *fmt, ...);
|
||||||
|
int max(int a, int b);
|
||||||
|
int min(int a, int b);
|
||||||
|
char *str_nil(char *s);
|
||||||
|
uint strlcat(char *dst, const char *src, unsigned int siz);
|
||||||
|
|
||||||
|
char *argv0;
|
||||||
|
#undef ARGBEGIN
|
||||||
|
#undef ARGEND
|
||||||
|
#undef ARGF
|
||||||
|
#undef EARGF
|
||||||
|
#define ARGBEGIN int _argi, _argtmp, _inargv=0; char *_argv; \
|
||||||
|
if(!argv0)argv0=ARGF(); _inargv=1; \
|
||||||
|
while(argc && argv[0][0] == '-') { \
|
||||||
|
_argi=1; _argv=*argv++; argc++; \
|
||||||
|
while(_argv[_argi]) switch(_argv[_argi++])
|
||||||
|
#define ARGEND }_inargv=0;USED(_argtmp);USED(_argv);USED(_argi)
|
||||||
|
#define ARGF() ((_inargv && _argv[_argi]) ? \
|
||||||
|
(_argtmp=_argi, _argi=strlen(_argv), _argv+_argtmp) \
|
||||||
|
: ((argc > 0) ? (argc--, *argv++) : ((char*)0)))
|
||||||
|
#define EARGF(f) ((_inargv && _argv[_argi]) ? \
|
||||||
|
(_argtmp=_argi, _argi=strlen(_argv), _argv+_argtmp) \
|
||||||
|
: ((argc > 0) ? (argc--, *argv++) : ((f), (char*)0)))
|
||||||
|
|
||||||
|
#undef USED
|
||||||
|
#undef SET
|
||||||
|
#define USED(x) if(x){}else
|
||||||
|
#define SET(x) ((x)=0)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
ROOT=..
|
||||||
|
include ${ROOT}/mk/hdr.mk
|
||||||
|
|
||||||
|
TARG = wmii.1 \
|
||||||
|
wmiiloop.1 \
|
||||||
|
wmiir.1 \
|
||||||
|
wmiiwm.1
|
||||||
|
|
||||||
|
FILTER = sed "s|CONFPREFIX|${CONFPREFIX}|g; \
|
||||||
|
s|CONFVERSION|${CONFVERSION}|g; \
|
||||||
|
s|P9PATHS|${P9PATHS}|g; \
|
||||||
|
s|AWKPATH|${AWKPATH}|g"
|
||||||
|
|
||||||
|
include ${ROOT}/mk/man.mk
|
|
@ -0,0 +1,18 @@
|
||||||
|
all:
|
||||||
|
|
||||||
|
install: all
|
||||||
|
depend: cleandep
|
||||||
|
|
||||||
|
MANDIRS=${MAN}/man1
|
||||||
|
mkdirs:
|
||||||
|
for i in ${BIN} ${ETC} ${MANDIRS} ${DIRS}; do \
|
||||||
|
test -d $$i || echo MKDIR $$i; \
|
||||||
|
mkdir -pm 0755 $$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install: ${HFILES:.h=.install}
|
||||||
|
|
||||||
|
cleandep:
|
||||||
|
rm .depend 2>/dev/null || true
|
||||||
|
|
||||||
|
.PHONY: all options clean dist install uninstall depend cleandep
|
|
@ -0,0 +1,29 @@
|
||||||
|
dall:
|
||||||
|
for i in ${DIRS}; do \
|
||||||
|
if [ ! -d $$i ]; then echo Skipping nonexistent directory: $$i 1>&2; continue; fi; \
|
||||||
|
echo MAKE all ${BASE}$$i/; \
|
||||||
|
(cd $$i && ${MAKE} BASE="${BASE}$$i/" all) || exit $?; \
|
||||||
|
done
|
||||||
|
dclean:
|
||||||
|
for i in ${DIRS}; do \
|
||||||
|
if [ ! -d $$i ]; then echo Skipping nonexistent directory: $$i 1>&2; continue; fi; \
|
||||||
|
echo MAKE clean ${BASE}$$i/; \
|
||||||
|
(cd $$i && ${MAKE} BASE="${BASE}$$i/" clean) || exit $?; \
|
||||||
|
done
|
||||||
|
dinstall:
|
||||||
|
for i in ${DIRS}; do \
|
||||||
|
if [ ! -d $$i ]; then echo Skipping nonexistent directory: $$i 1>&2; continue; fi; \
|
||||||
|
echo MAKE install ${BASE}$$i/; \
|
||||||
|
(cd $$i && ${MAKE} BASE="${BASE}$$i/" install) || exit $?; \
|
||||||
|
done
|
||||||
|
ddepend:
|
||||||
|
for i in ${DIRS}; do \
|
||||||
|
if [ ! -d $$i ]; then echo Skipping nonexistent directory: $$i 1>&2; continue; fi; \
|
||||||
|
echo MAKE depend ${BASE}$$i/; \
|
||||||
|
(cd $$i && ${MAKE} BASE="${BASE}$$i/" depend) || exit $?; \
|
||||||
|
done
|
||||||
|
|
||||||
|
all: dall
|
||||||
|
clean: dclean
|
||||||
|
install: dinstall
|
||||||
|
depend: ddepend
|
|
@ -0,0 +1,60 @@
|
||||||
|
.SILENT:
|
||||||
|
.SUFFIXES: .O .o .c .sh .rc .awk .1 .depend .install .clean
|
||||||
|
all:
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
${COMPILE} $@ $<
|
||||||
|
|
||||||
|
.c.depend:
|
||||||
|
${DEPEND} $< >>.depend
|
||||||
|
|
||||||
|
.o.O:
|
||||||
|
${LINK} $@ $<
|
||||||
|
|
||||||
|
.awk.O:
|
||||||
|
echo FILTER ${BASE}$<
|
||||||
|
${FILTER} $< >$@
|
||||||
|
|
||||||
|
.rc.O:
|
||||||
|
echo FILTER ${BASE}$<
|
||||||
|
${FILTER} $< >$@
|
||||||
|
|
||||||
|
.sh.O:
|
||||||
|
echo FILTER ${BASE}$<
|
||||||
|
${FILTER} $< >$@
|
||||||
|
|
||||||
|
.O.install:
|
||||||
|
echo INSTALL $*
|
||||||
|
cp -f $< ${BIN}/$*
|
||||||
|
chmod 0755 ${BIN}/$*
|
||||||
|
|
||||||
|
.a.install:
|
||||||
|
echo INSTALL $<
|
||||||
|
cp -f $< ${LIBDIR}/$<
|
||||||
|
chmod 0644 ${LIBDIR}/$<
|
||||||
|
|
||||||
|
.h.install:
|
||||||
|
echo INSTALL $<
|
||||||
|
cp -f $< ${INCLUDE}/$<
|
||||||
|
chmod 0644 ${INCLUDE}/$<
|
||||||
|
|
||||||
|
.1.install:
|
||||||
|
echo INSTALL man $*'(1)'
|
||||||
|
${FILTER} $< >${MAN}/man1/$<
|
||||||
|
chmod 0644 ${MAN}/man1/$<
|
||||||
|
|
||||||
|
.O.clean:
|
||||||
|
rm $< || true 2>/dev/null
|
||||||
|
rm $*.o || true 2>/dev/null
|
||||||
|
.o.clean:
|
||||||
|
rm $< || true 2>/dev/null
|
||||||
|
|
||||||
|
printinstall:
|
||||||
|
mkdirs:
|
||||||
|
clean:
|
||||||
|
install: printinstall mkdirs
|
||||||
|
|
||||||
|
COMPILE= CC="${CC}" CFLAGS="${CFLAGS} ${EXCFLAGS}" ${ROOT}/util/compile
|
||||||
|
LINK= LD="${LD}" LDFLAGS="${LDFLAGS} ${EXLDFLAGS}" ${ROOT}/util/link
|
||||||
|
|
||||||
|
include ${ROOT}/config.mk
|
|
@ -0,0 +1,24 @@
|
||||||
|
LIB = ${TARG}.a
|
||||||
|
OFILES = ${OBJ:=.o}
|
||||||
|
|
||||||
|
all: ${HFILES} ${LIB}
|
||||||
|
|
||||||
|
install: ${TARG}.install
|
||||||
|
clean: libclean
|
||||||
|
depend: ${OBJ:=.depend}
|
||||||
|
|
||||||
|
libclean:
|
||||||
|
for i in ${LIB} ${OFILES}; do \
|
||||||
|
rm $$i; \
|
||||||
|
done 2>/dev/null || true
|
||||||
|
|
||||||
|
printinstall:
|
||||||
|
echo 'Install directories:'
|
||||||
|
echo ' Lib: ${LIBDIR}'
|
||||||
|
|
||||||
|
${LIB}: ${OFILES}
|
||||||
|
@echo AR $@
|
||||||
|
@${AR} $@ ${OFILES}
|
||||||
|
@${RANLIB} $@
|
||||||
|
|
||||||
|
include ${ROOT}/mk/common.mk
|
|
@ -0,0 +1,7 @@
|
||||||
|
install: ${TARG:.1=.install}
|
||||||
|
|
||||||
|
printinstall:
|
||||||
|
echo 'Install directories:'
|
||||||
|
echo ' Man: ${MAN}'
|
||||||
|
|
||||||
|
include ${ROOT}/mk/common.mk
|
|
@ -0,0 +1,18 @@
|
||||||
|
PROGS = ${TARG:=.O}
|
||||||
|
|
||||||
|
all: ${PROGS}
|
||||||
|
|
||||||
|
install: ${TARG:=.install}
|
||||||
|
clean: manyclean
|
||||||
|
|
||||||
|
printinstall:
|
||||||
|
echo 'Install directories:'
|
||||||
|
echo ' Bin: ${BIN}'
|
||||||
|
|
||||||
|
manyclean:
|
||||||
|
for i in ${TARG}; do \
|
||||||
|
rm $$i.o; rm $$i.O; \
|
||||||
|
done 2>/dev/null || true
|
||||||
|
|
||||||
|
include ${ROOT}/mk/common.mk
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
PROG = ${TARG}.O
|
||||||
|
OFILES = ${OBJ:=.o}
|
||||||
|
|
||||||
|
all: ${PROG}
|
||||||
|
|
||||||
|
install: ${TARG}.install
|
||||||
|
clean: oneclean
|
||||||
|
depend: ${OBJ:=.depend}
|
||||||
|
|
||||||
|
printinstall:
|
||||||
|
echo 'Install directories:'
|
||||||
|
echo ' Bin: ${BIN}'
|
||||||
|
|
||||||
|
oneclean:
|
||||||
|
for i in ${PROG} ${OFILES}; do \
|
||||||
|
rm $$i; \
|
||||||
|
done 2>/dev/null || true
|
||||||
|
|
||||||
|
${PROG}: ${OFILES} ${LIB}
|
||||||
|
${LINK} $@ ${OFILES} ${LIB}
|
||||||
|
|
||||||
|
include ${ROOT}/mk/common.mk
|
|
@ -0,0 +1,2 @@
|
||||||
|
VERSION = $$(hg tip --template 'hg{rev}' 2>/dev/null)
|
||||||
|
CONFVERSION = 3.5
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh -f
|
||||||
|
|
||||||
|
outfile="$1"; shift
|
||||||
|
|
||||||
|
# Derived from Russ Cox's 9c in plan9port.
|
||||||
|
|
||||||
|
xtmp=/tmp/cc.$$.$USER.out
|
||||||
|
|
||||||
|
echo CC ${BASE}$outfile
|
||||||
|
$CC -o $outfile $CFLAGS $@ 2>$xtmp
|
||||||
|
status=$?
|
||||||
|
|
||||||
|
cat $xtmp \
|
||||||
|
| egrep -v ': error: .Each undeclared identifier|: error: for each function it appears|is dangerous, better use|is almost always misused|: In function |: At top level:|support .long long.|In file included from| from|use of C99 long long|ISO C forbids conversion' \
|
||||||
|
| sed 's/ .first use in this function.$//; s/\"\([^\"][^\"]*\)\", line \([0-9][0-9]*\)/\1:\2/g' \
|
||||||
|
| uniq 1>&2
|
||||||
|
|
||||||
|
rm -f $xtmp $xtmp.status
|
||||||
|
exit $status
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh -f
|
||||||
|
|
||||||
|
outfile="$1"; shift
|
||||||
|
|
||||||
|
# Derived from Russ Cox's 9l in plan9port.
|
||||||
|
ofiles=""
|
||||||
|
args=""
|
||||||
|
for i
|
||||||
|
do
|
||||||
|
case "$i" in
|
||||||
|
*.[ao])
|
||||||
|
ofiles="$ofiles $i"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
args="$args $i"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
xtmp=/tmp/ld.$$.$USER.out
|
||||||
|
|
||||||
|
echo LD ${BASE}$outfile
|
||||||
|
$LD -o $outfile $ofiles $LDFLAGS $args >$xtmp 2>&1
|
||||||
|
status=$?
|
||||||
|
|
||||||
|
sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
|
||||||
|
egrep -v 'is almost always misused|is dangerous, better use'
|
||||||
|
rm -f $xtmp
|
||||||
|
|
||||||
|
exit $status
|
||||||
|
|
Loading…
Reference in New Issue