text:
/******************************************************************************
 * Description
 *	Display a wire-frame rotating icosahedron, with hidden lines removed
 *
 * Arguments:
 *	-r		display on root window instead of creating a new one
 * (plus a host of others, try -help)
 *****************************************************************************/
/* Additions by jimmc@sci:
 *  faces and colors
 *  double buffering on the display
 *  additional polyhedra
 *  sleep switch
 */

/*
 * multi-thread version by Stephen Gildea, January 1992
 */

/* Additions by Carlos A M dos Santos, XFree86 project, September 1999:
 *  use of "q" to quit threads
 *  support for ICCCM delete window message
 *  better thread support - mutex and condition to control termination
 */

#ifdef HAVE_CONFIG_H
#include "config.h"

#include <X11/XlibConf.h>
#ifdef XTHREADS
# define MULTITHREAD
#endif
#endif /* HAVE_CONFIG_H / autoconf */

#include <math.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/Xfuncs.h>
#include <X11/keysym.h>
#include <stdio.h>
#ifdef MULTIBUFFER
#include <X11/extensions/multibuf.h>
#endif /* MULTIBUFFER */
#ifdef MULTITHREAD
#include <X11/Xthreads.h>
#endif
#include <X11/Xos.h>

#define MIN_ICO_WIDTH 5
#define MIN_ICO_HEIGHT 5
#define DEFAULT_ICO_WIDTH 150
#define DEFAULT_ICO_HEIGHT 150
#define DEFAULT_DELTAX 13
#define DEFAULT_DELTAY 9

#include "polyinfo.h"	/* define format of one polyhedron */

/* Now include all the files which define the actual polyhedra */
static Polyinfo polygons[] = {
#include "allobjs.h"
};
#define NumberPolygons sizeof(polygons)/sizeof(polygons[0])

#include <stdlib.h>
#include <time.h>	/* for time_t */
#include <sys/time.h>	/* for struct timeval */

typedef double Transform3D[4][4];

typedef struct {
	int prevX, prevY;
	unsigned long *plane_masks;	/* points into dbpair.plane_masks */
	unsigned long enplanemask;	/* what we enable for drawing */
	XColor *colors;		/* size = 2 ** totalplanes */
	unsigned long *pixels;	/* size = 2 ** planesperbuf */
} DBufInfo;

/* variables that need to be per-thread */

struct closure {
    /* these elements were originally in DBufPair, a struct type */
    int planesperbuf;
    int pixelsperbuf;	/* = 1<<planesperbuf */
    int totalplanes;	/* = 2*planesperbuf */
    int totalpixels;	/* = 1<<totalplanes */
    unsigned long *plane_masks;	/* size = totalplanes */
    unsigned long pixels[1];
    int dbufnum;
    DBufInfo bufs[2];
    DBufInfo *drawbuf, *dpybuf;
    /* end of old DBufPair dbpair */
    /* these elements were originally global variables */
    Window win, draw_window;
    int winW, winH;
    Colormap cmap;
    GC gcontext;
#ifdef MULTIBUFFER
    Multibuffer multibuffers[2];
#endif /* MULTIBUFFER */
    int nplanesets;
    /* items needed by drawPoly */
    char drawn[MAXNV][MAXNV];
    Transform3D xform;
    Point3D xv[2][MAXNV];
    int xv_buffer;
    double wo2, ho2;
#ifdef MULTITHREAD
    int thread_num;
#endif
};

/* The display is shared and writable, but Xlib locks it as necessary */

static Display *dpy;

/* This atom will be used to catch the ICCCM "delete window" message. It will
 * be allocated once and used in read-only mode by threads, so it can be a
 * global variable */

static Atom wm_delete_window;

/*
 * variables that are not set except maybe in initialization before
 * any additional threads are created
 */

static char *Primaries[] = {
    "red", "green", "blue", "yellow", "cyan", "magenta"
};
#define NumberPrimaries 6

static const char *help_message[] = {
"where options include:",
"-display host:dpy           X server to use",
"    -geometry geom          geometry of window to use",
"    -size WxH               size of object to rotate",
"    -delta +X+Y             amount by which to move object",
"    -r                      draw in the root window",
"    -d number               dashed line pattern for wire frames",
"    -bg color               background color",
"    -colors color ...       codes to use on sides",
"    -p#                     use # (1 through 8) primary colors",
#ifdef MULTIBUFFER
"    -dbl                    use double buffering (extension if present)",
#else
"    -dbl                    use double buffering (software only)",
#endif
"    -softdbl                use software double buffering",
"    -noedges                don't draw wire frame edges",
"    -faces                  draw faces",
"    -copy                   use multibuffer update action Copied",
"    -untouched              use multibuffer update action Untouched",
"    -undefined              use multibuffer update action Undefined",
"    -lw number              line width to use",
"    -i                      invert",
"    -sleep number           seconds to sleep in between draws",
"    -obj objname            type of polyhedral object to draw",
"    -objhelp                list polyhedral objects available",
#ifdef MULTITHREAD
"    -threads number         number of windows, each its own thread",
#endif
NULL};

static const char *ProgramName;	/* argv[0] */

/*
 * variables set by command-line options
 */
static const char *geom = NULL;	/* -geometry: window geometry */
static int useRoot = 0;		/* -r */
static int dash = 0;		/* -d: dashed line pattern */
static char **colornames;	/* -colors (points into argv) */
#ifdef MULTIBUFFER
static int update_action = MultibufferUpdateActionBackground;
#endif
static int linewidth = 0;	/* -lw */
static int multibufext = 0;	/* -dbl: use Multi-Buffering extension */
static int dblbuf = 0;		/* -dbl or -softdbl: double buffering */
static int numcolors = 0;	/* -p: number of primary colors to use */
static const char *background_colorname = NULL; /* -bg */
static int doedges = 1;		/* -noedges turns this off */
static int dofaces = 0;		/* -faces */
static int invert = 0;		/* -i */
static const char *ico_geom = NULL;	/* -size: size of object in window */
static const char *delta_geom = NULL;	/* -delta: amount by which to move object */
static Polyinfo *poly;		/* -obj: the poly to draw */
static int dsync = 0;		/* -dsync */
static int xsync = 0;		/* -sync */
static int msleepcount = 0;	/* -sleep value in milliseconds*/
#ifdef MULTITHREAD
static int thread_count;
#ifdef XMUTEX_INITIALIZER
static xmutex_rec count_mutex = XMUTEX_INITIALIZER;
#else
static xmutex_rec count_mutex;
#endif
static xcondition_rec count_cond;/* Xthreads doesn't define an equivalent to
				 * PTHREAD_COND_INITIALIZER, so we must call
				 * xcondition_init later */
#endif

/******************************************************************************
 * Description
 *	Error handling
 *****************************************************************************/

#if defined(__GNUC__) && \
    ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
void icoFatal (const char *fmt, const char *a0) __attribute__((__noreturn__));
#endif
void
icoFatal(const char *fmt, const char *a0)
{
	fprintf(stderr, "%s: ", ProgramName);
	fprintf(stderr, fmt, a0);
	fprintf(stderr, "\n");
	exit(1);
}

/******************************************************************************
 * Description
 *	Memory allocation
 *****************************************************************************/

static char *
xalloc(unsigned int nbytes)
{
        char *p;

	p = malloc(nbytes);
	if (p)
		return p;

	fprintf(stderr, "%s: no more memory\n", ProgramName);
	exit(1);
}

/******************************************************************************
 * Description
 *	Sleep a certain number of milliseconds
 *****************************************************************************/

static void
msleep(unsigned int msecs)
{
	struct timeval timeout;

	timeout.tv_sec = msecs / 1000; timeout.tv_usec = (msecs % 1000) * 1000;
	select(1,NULL,NULL,NULL,&timeout);
}

/******************************************************************************
 * Description
 *	Format a 4x4 identity matrix.
 *
 * Output
 *	*m		Formatted identity matrix
 *****************************************************************************/

static void
IdentMat(Transform3D m)
{
	int i;
	int j;

	for (i = 3; i >= 0; --i) {
		for (j = 3; j >= 0; --j)
			m[i][j] = 0.0;
		m[i][i] = 1.0;
	}
}

/******************************************************************************
 * Description
 *	Concatenate two 4-by-4 transformation matrices.
 *
 * Input
 *	l		multiplicand (left operand)
 *	r		multiplier (right operand)
 *
 * Output
 *	*m		Result matrix
 *****************************************************************************/

static void
ConcatMat(Transform3D l, Transform3D r, Transform3D m)
{
	int i;
	int j;

	for (i = 0; i < 4; ++i)
		for (j = 0; j < 4; ++j)
			m[i][j] = l[i][0] * r[0][j]
			    + l[i][1] * r[1][j]
			    + l[i][2] * r[2][j]
			    + l[i][3] * r[3][j];
}

/******************************************************************************
 * Description
 *	Format a matrix that will perform a rotation transformation
 *	about the specified axis.  The rotation angle is measured
 *	counterclockwise about the specified axis when looking
 *	at the origin from the positive axis.
 *
 * Input
 *	axis		Axis ('x', 'y', 'z') about which to perform rotation
 *	angle		Angle (in radians) of rotation
 *	A		Pointer to rotation matrix
 *
 * Output
 *	*m		Formatted rotation matrix
 *****************************************************************************/

static void
FormatRotateMat(char axis, double angle, Transform3D m)
{
	double s, c;

	IdentMat(m);

	s = sin(angle);
	c = cos(angle);

	switch (axis)
	{
		case 'x':
			m[1][1] = m[2][2] = c;
			m[1][2] = s;
			m[2][1] = -s;
			break;
		case 'y':
			m[0][0] = m[2][2] = c;
			m[2][0] = s;
			m[0][2] = -s;
			break;
		case 'z':
			m[0][0] = m[1][1] = c;
			m[0][1] = s;
			m[1][0] = -s;
			break;
	}
}

/******************************************************************************
 * Description
 *	Perform a partial transform on non-homogeneous points.
 *	Given an array of non-homogeneous (3-coordinate) input points,
 *	this routine multiplies them by the 3-by-3 upper left submatrix
 *	of a standard 4-by-4 transform matrix.  The resulting non-homogeneous
 *	points are returned.
 *
 * Input
 *	n		number of points to transform
 *	m		4-by-4 transform matrix
 *	in		array of non-homogeneous input points
 *
 * Output
 *	*out		array of transformed non-homogeneous output points
 *****************************************************************************/

static void
PartialNonHomTransform(int n, Transform3D m, const Point3D *in, Point3D *out)
{
	for (; n > 0; --n, ++in, ++out) {
		out->x = in->x * m[0][0] + in->y * m[1][0] + in->z * m[2][0];
		out->y = in->x * m[0][1] + in->y * m[1][1] + in->z * m[2][1];
		out->z = in->x * m[0][2] + in->y * m[1][2] + in->z * m[2][2];
	}
}

/*
 * Unfortunately we can not use XWindowEvent and XCheckWindowEvent to get
 * ClientMessage events, because there is no corresponding event mask. We must
 * use XIfEvent and XCheckIfEvent and this function as a predicate. Better if
 * Xlib had some kind of XWindowAnyEvent and XCheckWindowEvent. -- Casantos.
 */

static Bool
predicate(Display *display, XEvent *event, XPointer args)
{
    Window w = (Window) args;
    return event->xany.window == w;
}

/******************************************************************************
 * Description
 *	Icosahedron animator.
 *****************************************************************************/

static void
icoClearArea(struct closure *closure, int x, int y, int w, int h)
{
	if (multibufext && dblbuf)
		return;

	if (dblbuf || dofaces) {
		XSetForeground(dpy,
			closure->gcontext,
			closure->drawbuf->pixels[0]);

		/* use background as foreground color for fill */
		XFillRectangle(dpy,closure->win,closure->gcontext,x,y,w,h);
	} else {
		XClearArea(dpy,closure->win,x,y,w,h,0);
	}
}

/* Set up points, transforms, etc.  */

static void
initPoly(struct closure *closure, Polyinfo *poly, int icoW, int icoH)
{
    Point3D *vertices = poly->v;
    int NV = poly->numverts;
    Transform3D r1;
    Transform3D r2;

    FormatRotateMat('x', 5 * 3.1416 / 180.0, r1);
    FormatRotateMat('y', 5 * 3.1416 / 180.0, r2);
    ConcatMat(r1, r2, closure->xform);

    memcpy((char *)closure->xv[0], (char *)vertices, NV * sizeof(Point3D));
    closure->xv_buffer = 0;

    closure->wo2 = icoW / 2.0;
    closure->ho2 = icoH / 2.0;
}

static void
setDrawBuf (struct closure *closure, int n)
{
    XGCValues xgcv;
    unsigned long mask;

#ifdef MULTIBUFFER
    if (multibufext && dblbuf) {
	closure->win = closure->multibuffers[n];
	n = 0;
    }
#endif /* MULTIBUFFER */

    closure->drawbuf = closure->bufs+n;
    xgcv.foreground = closure->drawbuf->pixels[closure->pixelsperbuf-1];
    xgcv.background = closure->drawbuf->pixels[0];
    mask = GCForeground | GCBackground;
    if (dblbuf && !multibufext) {
	xgcv.plane_mask = closure->drawbuf->enplanemask;
	mask |= GCPlaneMask;
    }
    XChangeGC(dpy, closure->gcontext, mask, &xgcv);
}

static void
setDisplayBuf(struct closure *closure, int n, int firsttime)
{
#ifdef MULTIBUFFER
	if (multibufext && dblbuf) {
		XmbufDisplayBuffers (dpy, 1, &closure->multibuffers[n], msleepcount, 0);
		if (!firsttime)
			return;
		n = 0;
	}
#endif
	closure->dpybuf = closure->bufs+n;
	if (closure->totalpixels > 2)
	    XStoreColors(dpy,closure->cmap,closure->dpybuf->colors,closure->totalpixels);
}

static void
setBufColor(struct closure *closure, int n, XColor *color)
{
	int i,j,cx;
	DBufInfo *b;
	unsigned long pix;

	for (i=0; i<closure->nplanesets; i++) {
		b = closure->bufs+i;
		for (j=0; j<(dblbuf&&!multibufext?closure->pixelsperbuf:1); j++) {
			cx = n + j*closure->pixelsperbuf;
			pix = b->colors[cx].pixel;
			b->colors[cx] = *color;
			b->colors[cx].pixel = pix;
			b->colors[cx].flags = DoRed | DoGreen | DoBlue;
		}
	}
}

/******************************************************************************
 * Description
 *	Undraw previous polyhedron (by erasing its bounding box).
 *	Rotate and draw the new polyhedron.
 *
 * Input
 *	poly		the polyhedron to draw
 *	gc		X11 graphics context to be used for drawing
 *	icoX, icoY	position of upper left of bounding-box
 *	icoW, icoH	size of bounding-box
 *	prevX, prevY	position of previous bounding-box
 *****************************************************************************/

static void
drawPoly(struct closure *closure, Polyinfo *poly, GC gc,
	 int icoX, int icoY, int icoW, int icoH, int prevX, int prevY)
{
	int *f = poly->f;
	int NV = poly->numverts;
	int NF = poly->numfaces;

	int p0;
	int p1;
	XPoint *pv2;
	XSegment *pe;
	Point3D *pxv;
	XPoint v2[MAXNV];
	XSegment edges[MAXEDGES];
	int i;
	int j,k;
	int *pf;
	int facecolor;

	int pcount;
	double pxvz;
	XPoint ppts[MAXEDGESPERPOLY];

	/* Switch double-buffer and rotate vertices */

	closure->xv_buffer = !closure->xv_buffer;
	PartialNonHomTransform(NV, closure->xform,
		closure->xv[!closure->xv_buffer],
		closure->xv[closure->xv_buffer]);

	/* Convert 3D coordinates to 2D window coordinates: */

	pxv = closure->xv[closure->xv_buffer];
	pv2 = v2;
	for (i = NV - 1; i >= 0; --i) {
		pv2->x = (int) ((pxv->x + 1.0) * closure->wo2) + icoX;
		pv2->y = (int) ((pxv->y + 1.0) * closure->ho2) + icoY;
		++pxv;
		++pv2;
	}

	/* Accumulate edges to be drawn, eliminating duplicates for speed: */

	pxv = closure->xv[closure->xv_buffer];
	pv2 = v2;
	pf = f;
	pe = edges;
	bzero(closure->drawn, sizeof(closure->drawn));

	if (dblbuf)
		setDrawBuf(closure, closure->dbufnum);
			/* switch drawing buffers if double buffered */
	/* for faces, need to clear before FillPoly */
	if (dofaces && !(multibufext && dblbuf)) {
		/* multibuf uses update background */
		if (dblbuf)
			icoClearArea(closure,
				closure->drawbuf->prevX - linewidth/2,
				closure->drawbuf->prevY - linewidth/2,
				icoW + linewidth + 1, icoH + linewidth + 1);
		icoClearArea(closure,
			prevX - linewidth/2, prevY - linewidth/2,
			icoW + linewidth + 1, icoH + linewidth + 1);
	}

	if (dsync)
		XSync(dpy, 0);

	for (i = NF - 1; i >= 0; --i, pf += pcount) {

		pcount = *pf++;	/* number of edges for this face */
		pxvz = 0.0;
		for (j=0; j<pcount; j++) {
			p0 = pf[j];
			pxvz += pxv[p0].z;
		}

		/* If facet faces away from viewer, don't consider it: */
		if (pxvz<0.0)
			continue;

		if (dofaces) {
			if (numcolors)
				facecolor = i%numcolors + 1;
			else
				facecolor = 1;
			XSetForeground(dpy, gc,
				closure->drawbuf->pixels[facecolor]);
			for (j=0; j<pcount; j++) {
				p0 = pf[j];
				ppts[j].x = pv2[p0].x;
				ppts[j].y = pv2[p0].y;
			}
			XFillPolygon(dpy, closure->win, gc, ppts, pcount,
				Convex, CoordModeOrigin);
		}

		if (doedges) {
			for (j=0; j<pcount; j++) {
				if (j<pcount-1) k=j+1;
				else k=0;
				p0 = pf[j];
				p1 = pf[k];
				if (!closure->drawn[p0][p1]) {
					closure->drawn[p0][p1] = 1;
					closure->drawn[p1][p0] = 1;
					pe->x1 = pv2[p0].x;
					pe->y1 = pv2[p0].y;
					pe->x2 = pv2[p1].x;
					pe->y2 = pv2[p1].y;
					++pe;
				}
			}
		}
	}

	/* Erase previous, draw current icosahedrons; sync for smoothness. */

	if (doedges) {
		if (dofaces) {
			XSetForeground(dpy, gc, closure->drawbuf->pixels[0]);
				/* use background as foreground color */
		} else {
			if (dblbuf && !multibufext)
				icoClearArea(closure,
					closure->drawbuf->prevX - linewidth/2,
					closure->drawbuf->prevY - linewidth/2,
					icoW + linewidth + 1,
					icoH + linewidth + 1);
			if (!(multibufext && dblbuf))
				icoClearArea(closure,
					prevX - linewidth/2,
					prevY - linewidth/2,
					icoW + linewidth + 1,
					icoH + linewidth + 1);
			if (dblbuf || dofaces) {
				XSetForeground(dpy, gc, closure->drawbuf->pixels[
					closure->pixelsperbuf-1]);
			}
		}
		XDrawSegments(dpy, closure->win, gc, edges, pe - edges);
	}

	if (dsync)
		XSync(dpy, 0);

	if (dblbuf) {
		closure->drawbuf->prevX = icoX;
		closure->drawbuf->prevY = icoY;
		setDisplayBuf(closure, closure->dbufnum, 0);
	}
	if (dblbuf)
		closure->dbufnum = 1 - closure->dbufnum;
	if (!(multibufext && dblbuf) && msleepcount > 0)
		msleep(msleepcount);
}

static void
initDBufs(struct closure *closure, int fg, int bg, int planesperbuf)
{
	int i,j,jj,j0,j1,k,m,t;
	DBufInfo *b;
	XColor bgcolor, fgcolor;

	closure->nplanesets = (dblbuf && !multibufext ? 2 : 1);

	closure->planesperbuf = planesperbuf;
	closure->pixelsperbuf = 1<<planesperbuf;
	closure->totalplanes = closure->nplanesets * planesperbuf;
	closure->totalpixels = 1<<closure->totalplanes;
	closure->plane_masks = (unsigned long *)
		xalloc(closure->totalplanes * sizeof(unsigned long));
	closure->dbufnum = 0;
	for (i=0; i < closure->nplanesets; i++) {
		b = closure->bufs+i;
		b->plane_masks = closure->plane_masks + (i*planesperbuf);
		b->colors = (XColor *)
			xalloc(closure->totalpixels * sizeof(XColor));
		b->pixels = (unsigned long *)
			xalloc(closure->pixelsperbuf * sizeof(unsigned long));
	}

	if (closure->totalplanes == 1) {
	    closure->pixels[0] = bg;
	    closure->plane_masks[0] = fg ^ bg;
	} else {
	    t = XAllocColorCells(dpy,closure->cmap,0,
		    closure->plane_masks,closure->totalplanes, closure->pixels,1);
			    /* allocate color planes */
	    if (t==0) {
		    icoFatal("can't allocate enough color planes", NULL);
	    }
	}

	fgcolor.pixel = fg;
	bgcolor.pixel = bg;
	XQueryColor(dpy,closure->cmap,&fgcolor);
	XQueryColor(dpy,closure->cmap,&bgcolor);

	setBufColor(closure, 0,&bgcolor);
	setBufColor(closure, 1,&fgcolor);
	for (i=0; i<closure->nplanesets; i++) {
		b = closure->bufs+i;
		for (j0=0; j0<(dblbuf&&!multibufext?closure->pixelsperbuf:1); j0++) {
		    for (j1=0; j1<closure->pixelsperbuf; j1++) {
			j = (j0<<closure->planesperbuf)|j1;
			if (i==0) jj=j;
			else jj= (j1<<closure->planesperbuf)|j0;
			b->colors[jj].pixel = closure->pixels[0];
			for (k=0, m=j; m; k++, m=m>>1) {
				if (m&1)
				   b->colors[jj].pixel ^= closure->plane_masks[k];
			}
			b->colors[jj].flags = DoRed | DoGreen | DoBlue;
		    }
		}
		b->prevX = b->prevY = 0;
		b->enplanemask = 0;
		for (j=0; j<planesperbuf; j++) {
			b->enplanemask |= b->plane_masks[j];
		}
		for (j=0; j<closure->pixelsperbuf; j++) {
			b->pixels[j] = closure->pixels[0];
			for (k=0, m=j; m; k++, m=m>>1) {
				if (m&1)
				   b->pixels[j] ^= b->plane_masks[k];
			}
		}
	}

	if (!(multibufext && dblbuf)) {
	    setDrawBuf(closure, 0);
	    XSetBackground(dpy, closure->gcontext, closure->bufs[0].pixels[0]);
	    XSetWindowBackground(dpy, closure->draw_window, closure->bufs[0].pixels[0]);
	    XSetPlaneMask(dpy, closure->gcontext, AllPlanes);
	    icoClearArea(closure, 0, 0, closure->winW, closure->winH); /* clear entire window */
	}
}

static void
setBufColname(struct closure *closure, int n, char *colname)
{
	int t;
	XColor dcolor, color;

	t = XLookupColor(dpy,closure->cmap,colname,&dcolor,&color);
	if (t==0) {	/* no such color */
		icoFatal("no such color %s",colname);
	}
	setBufColor(closure, n,&color);
}

/* function to create and run an ico window */
static void *
do_ico_window(void *ptr)
{
	int fg, bg;
	XSetWindowAttributes xswa;
	XWindowAttributes xwa;
	XEvent xev;
	int icoX, icoY;
	unsigned long vmask;
	XGCValues xgcv;
	int initcolors = 0;
	int icoDeltaX = DEFAULT_DELTAX, icoDeltaY = DEFAULT_DELTAY;
	int icodeltax2, icodeltay2;
	Bool blocking = False;
	int winX, winY;
	int icoW = 0, icoH = 0;
	KeySym ksym;
	Bool do_it = True;
	char buf[20];
	struct closure *closure = ptr;
#ifdef MULTITHREAD
	int len;
#endif

#ifdef DEBUG
	printf("thread %x starting\n", xthread_self());
#endif
	closure->cmap = XDefaultColormap(dpy,DefaultScreen(dpy));
	if (!closure->cmap) {
		icoFatal("no default colormap!", NULL);
	}

	fg = WhitePixel(dpy, DefaultScreen(dpy));
	bg = BlackPixel(dpy, DefaultScreen(dpy));
	if (background_colorname) {
	    XColor cdef, igndef;

	    if (XAllocNamedColor (dpy, closure->cmap, background_colorname,
				  &cdef, &igndef))
	      bg = cdef.pixel;
	    else
	      icoFatal("background: no such color \"%s\"",background_colorname);
	}
	if (numcolors && (!dofaces || numcolors == 1)) {
	    XColor cdef, igndef;

	    if (XAllocNamedColor (dpy, closure->cmap, colornames[0], &cdef, &igndef))
	      fg = cdef.pixel;
	    else
	      icoFatal("face: no such color \"%s\"", colornames[0]);
	}

	if (invert) {
	    unsigned long tmp = fg;
	    fg = bg;
	    bg = tmp;
	}

	/* Set up window parameters, create and map window if necessary */

	if (useRoot) {
		closure->draw_window = DefaultRootWindow(dpy);
		winX = 0;
		winY = 0;
		closure->winW = DisplayWidth(dpy, DefaultScreen(dpy));
		closure->winH = DisplayHeight(dpy, DefaultScreen(dpy));
	} else {
		closure->winW = closure->winH = (multibufext&&dblbuf ? 300 : 600);
		winX = (DisplayWidth(dpy, DefaultScreen(dpy)) - closure->winW) >> 1;
		winY = (DisplayHeight(dpy, DefaultScreen(dpy)) - closure->winH) >> 1;
		if (geom)
			XParseGeometry(geom, &winX, &winY,
				       (unsigned int *)&closure->winW,
				       (unsigned int *)&closure->winH);

		xswa.event_mask = ExposureMask |
				  StructureNotifyMask |
				  KeyPressMask;
		xswa.background_pixel = bg;
		xswa.border_pixel = fg;

		closure->draw_window = XCreateWindow(dpy,
		    DefaultRootWindow(dpy),
		    winX, winY, closure->winW, closure->winH, 0,
		    DefaultDepth(dpy, DefaultScreen(dpy)),
		    InputOutput, DefaultVisual(dpy, DefaultScreen(dpy)),
		    CWEventMask | CWBackPixel | CWBorderPixel, &xswa);
#ifdef MULTITHREAD
		len = sprintf(buf, "Ico: thread %d", closure->thread_num);
		XChangeProperty(dpy, closure->draw_window,
				XA_WM_NAME, XA_STRING, 8,
				PropModeReplace, (unsigned char *)buf, len);
#else
		XChangeProperty(dpy, closure->draw_window,
				XA_WM_NAME, XA_STRING, 8,
				PropModeReplace, (unsigned char *)"Ico", 3);
#endif
		(void) XSetWMProtocols (dpy, closure->draw_window,
					&wm_delete_window, 1);
		XMapWindow(dpy, closure->draw_window);
#ifdef DEBUG
		printf("thread %x waiting for Expose\n", xthread_self());
#endif
		for (;;) {
		    XIfEvent(dpy, &xev, predicate, (XPointer) closure->draw_window);
		    if (xev.type == Expose)
			break;
		}
#ifdef DEBUG
		printf("thread %x got Expose\n", xthread_self());
#endif
		if (XGetWindowAttributes(dpy,closure->draw_window,&xwa)==0) {
			icoFatal("cannot get window attributes (size)", NULL);
		}
		closure->winW = xwa.width;
		closure->winH = xwa.height;
	}

	if (ico_geom)
	  XParseGeometry (ico_geom, &icoX, &icoY,
			  (unsigned int *)&icoW,
			  (unsigned int *)&icoH);
	if (icoW <= 0) icoW = DEFAULT_ICO_WIDTH;
	if (icoH <= 0) icoH = DEFAULT_ICO_HEIGHT;
	if (icoW < MIN_ICO_WIDTH) icoW = MIN_ICO_WIDTH;
	if (icoH < MIN_ICO_HEIGHT) icoH = MIN_ICO_HEIGHT;

	if (delta_geom) {
	    unsigned int junk;

	    XParseGeometry (delta_geom, &icoDeltaX, &icoDeltaY, &junk, &junk);
	    if (icoDeltaX == 0 && icoDeltaY == 0) {
		icoDeltaX = DEFAULT_DELTAX;
		icoDeltaY = DEFAULT_DELTAY;
	    }
	}

	closure->win = None;

#ifdef MULTIBUFFER
	if (multibufext && dblbuf) {
	    if (XmbufCreateBuffers (dpy, closure->draw_window, 2, update_action,
				    MultibufferUpdateHintFrequent,
				    closure->multibuffers) == 2) {
		XCopyArea (dpy, closure->draw_window, closure->multibuffers[1],
			   DefaultGC(dpy, DefaultScreen(dpy)),
			   0, 0, closure->winW, closure->winH, 0, 0);
		closure->win = closure->multibuffers[1];
	    } else
	      icoFatal ("unable to obtain 2 buffers", NULL);
	}
#endif /* MULTIBUFFER */
	if (closure->win == None) closure->win = closure->draw_window;

	/* Set up a graphics context */

	vmask = (GCBackground | GCForeground | GCLineWidth);
	xgcv.background = bg;
	xgcv.foreground = fg;
	xgcv.line_width = linewidth;
	if (dash) {
	    xgcv.line_style = LineDoubleDash;
	    xgcv.dashes = dash;
	    vmask |= (GCLineStyle | GCDashList);
	}
	closure->gcontext = XCreateGC (dpy, closure->draw_window, vmask, &xgcv);

	if (dofaces && numcolors>1) {
	    int i,t,bits;
		bits = 0;
		for (t=numcolors; t; t=t>>1) bits++;
		initDBufs(closure, fg,bg,bits);
		/* don't set the background color */
		for (i=0; i<numcolors; i++) {
			setBufColname(closure, i+1,colornames[i]);
		}
		initcolors = 1;
	}
	else if (dblbuf || dofaces) {
		initDBufs(closure, fg,bg,1);
		initcolors = 1;
	}
	if (initcolors) {
	    setDisplayBuf(closure, dblbuf?1:0, 1); /* insert new colors */
	}

	if (dsync)
		XSync(dpy, 0);

	/* Get the initial position, size, and speed of the bounding-box */

	srand((int) time((time_t *)0) % 231);
	icoX = ((closure->winW - icoW) * (rand() & 0xFF)) >> 8;
	icoY = ((closure->winH - icoH) * (rand() & 0xFF)) >> 8;

	/* Bounce the box in the window */

	icodeltax2 = icoDeltaX * 2;
	icodeltay2 = icoDeltaY * 2;
	initPoly(closure, poly, icoW, icoH);

	while (do_it) {
		int prevX;
		int prevY;
		Bool do_event;

		/*
		 * This is not a good example of how to do event reading
		 * in multi-threaded programs.  More commonly there would
		 * be one thread reading all events and dispatching them
		 * to the appropriate thread.  However, the threaded version
		 * of ico was developed to test the MT Xlib implementation,
		 * so it is useful to have it behave a little oddly.
		 * For a discussion of how to write multi-threaded X programs,
		 * see Gildea, S., "Multi-Threaded Xlib", The X Resource,
		 * Issue 5, January 1993, pp. 159-166.
		 */
		if (blocking) {
		    XIfEvent(dpy, &xev, predicate, (XPointer) closure->win);
		    do_event = True;
		} else
		    do_event = XCheckIfEvent(dpy, &xev, predicate,
			    (XPointer) closure->win);
		if (do_event) {
		    switch (xev.type) {
		      case ConfigureNotify:
#ifdef DEBUG
			printf("thread %x configure\n", xthread_self());
#endif
			if (xev.xconfigure.width != closure->winW ||
			    xev.xconfigure.height != closure->winH)
			  icoX = icoY = 1;
			closure->winW = xev.xconfigure.width;
			closure->winH = xev.xconfigure.height;
			break;
		      case KeyPress:
#ifdef DEBUG
			printf("thread %x keypress\n", xthread_self());
#endif
			XLookupString(&xev.xkey, buf, 10, &ksym, NULL);
			do_it = ((ksym != XK_Q) && ksym != XK_q);
			break;
		      case MapNotify:
			blocking = False;
#ifdef DEBUG
			printf("thread %x unblocking\n", xthread_self());
#endif
			break;
		      case UnmapNotify:
			blocking = True;
#ifdef DEBUG
			printf("thread %x blocking\n", xthread_self());
#endif
			break;
		      case ClientMessage:
#ifdef DEBUG
			printf("thread %x message\n", xthread_self());
#endif
			if (xev.xclient.data.l[0] == wm_delete_window)
			    do_it = False;
			else
			    XBell (dpy, 0);
			continue;
		    }
		}

		prevX = icoX;
		prevY = icoY;

		icoX += icoDeltaX;
		if (icoX < 0 || icoX + icoW > closure->winW) {
			icoX -= icodeltax2;
			icoDeltaX = - icoDeltaX;
			icodeltax2 = icoDeltaX * 2;
		}
		icoY += icoDeltaY;
		if (icoY < 0 || icoY + icoH > closure->winH) {
			icoY -= icodeltay2;
			icoDeltaY = - icoDeltaY;
			icodeltay2 = icoDeltaY * 2;
		}

		drawPoly(closure, poly, closure->gcontext,
			 icoX, icoY, icoW, icoH, prevX, prevY);
	}
	XDestroyWindow(dpy, closure->win);
#ifdef MULTITHREAD
	xmutex_lock(&count_mutex);
	thread_count--;
	if (thread_count == 0) {
	    xcondition_broadcast(&count_cond);
	}
	xmutex_unlock(&count_mutex);
#endif
	return NULL;
}

/******************************************************************************
 * Description
 *	Main routine.  Process command-line arguments, then bounce a bounding
 *	box inside the window.  Call DrawIco() to redraw the icosahedron.
 *****************************************************************************/

static void
giveObjHelp(void)
{
	int i;
	Polyinfo *poly;

	printf("%-16s%-12s  #Vert.  #Edges  #Faces  %-16s\n",
		"Name", "ShortName", "Dual");
	for (i=0; i<NumberPolygons; i++) {
		poly = polygons+i;
		printf("%-16s%-12s%6d%8d%8d    %-16s\n",
			poly->longname, poly->shortname,
			poly->numverts, poly->numedges, poly->numfaces,
			poly->dual);
	}
}

static Polyinfo *
findpoly(const char *name)
{
	int i;
        Polyinfo *poly;

	for (i=0; i<NumberPolygons; i++) {
		poly = polygons+i;
		if (strcmp(name,poly->longname)==0 || strcmp(name,poly->shortname)==0)
			return poly;
	}
	icoFatal("can't find object %s", name);
}

int main(int argc, char **argv)
{
	const char *display = NULL;
#ifdef MULTIBUFFER
	int mbevbase, mberrbase;
#endif
#ifdef MULTITHREAD
	int nthreads = 1;	/* -threads: number of windows */
	int i;
#endif
	struct closure *closure;

	ProgramName = argv[0];

	/* Process arguments: */

	poly = findpoly("icosahedron");	/* default */

	for (argv++, argc--; argc > 0; argv++, argc--) {
		if (!strcmp (*argv, "-display")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			display = *++argv; argc--;
		} else if (!strncmp (*argv, "-g", 2)) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			geom = *++argv; argc--;
		} else if (!strcmp(*argv, "-r"))
			useRoot = 1;
		else if (!strcmp (*argv, "-d")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			dash = atoi(*++argv); argc--;
		}
#ifdef MULTITHREAD
		else if (!strcmp(*argv, "-threads")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
		        nthreads = atoi(*++argv); argc--;
		}
#endif
		else if (!strcmp(*argv, "-colors")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			colornames = ++argv; argc--; numcolors = 0;
			for ( ; argc > 0 && argv[0][0]!='-'; argv++, argc--, numcolors++) ;
			argv--; argc++;
		}
		else if (!strcmp (*argv, "-copy")) {
#ifdef MULTIBUFFER
			update_action = MultibufferUpdateActionCopied;
#endif
		}
		else if (!strcmp (*argv, "-untouched")) {
#ifdef MULTIBUFFER
			update_action = MultibufferUpdateActionUntouched;
#endif
		}
		else if (!strcmp (*argv, "-undefined")) {
#ifdef MULTIBUFFER
			update_action = MultibufferUpdateActionUndefined;
#endif
		} else if (!strcmp (*argv, "-lw")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			linewidth = atoi(*++argv); argc--;
		} else if (!strcmp (*argv, "-dbl")) {
			dblbuf = 1;
#ifdef MULTIBUFFER
			multibufext = 1;
#endif
		}
		else if (!strcmp(*argv, "-softdbl")) {
		        dblbuf = 1;
			multibufext = 0;
		}
		else if (!strncmp(*argv, "-p", 2)) {
			numcolors = atoi(argv[0]+2);
			if (numcolors < 1 || numcolors > NumberPrimaries)
				numcolors = NumberPrimaries;
			colornames = Primaries;
			dofaces = 1;
		}
		else if (!strcmp(*argv, "-bg")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			background_colorname = *++argv; argc--;
		} else if (!strcmp(*argv, "-noedges"))
			doedges = 0;
		else if (!strcmp(*argv, "-faces"))
			dofaces = 1;
		else if (!strcmp(*argv, "-i"))
			invert = 1;
		else if (!strcmp(*argv, "-size")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			ico_geom = *++argv; argc--;
		} else if (!strcmp(*argv, "-delta")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			delta_geom = *++argv; argc--;
		} else if (!strcmp (*argv, "-sleep")) {
			float f;
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			if (sscanf (*++argv, "%f", &f) < 1)
				icoFatal("invalid argument for %s", argv[-1]);
			msleepcount = (int) (f * 1000.0);
			argc--;
		} else if (!strcmp (*argv, "-obj")) {
			if (argc < 2)
				icoFatal("missing argument for %s", *argv);
			poly = findpoly(*++argv); argc--;
		} else if (!strcmp(*argv, "-dsync"))
			dsync = 1;
		else if (!strncmp(*argv, "-sync",  5))
			xsync = 1;
		else if (!strcmp(*argv, "-objhelp")) {
			giveObjHelp();
			exit(1);
		}
		else {	/* unknown arg */
			const char **cpp;

			fprintf (stderr, "usage:  %s [options]\n\n",
			         ProgramName);
			for (cpp = help_message; *cpp; cpp++)
				fprintf (stderr, "%s\n", *cpp);
			exit (1);
		}
	}

	if (!dofaces && !doedges)
		icoFatal("nothing to draw", NULL);

#ifdef MULTITHREAD
	XInitThreads();
#endif
	if (!(dpy = XOpenDisplay(display)))
	    icoFatal("cannot open display \"%s\"", XDisplayName(display));
    	wm_delete_window = XInternAtom (dpy, "WM_DELETE_WINDOW", False);
	if (xsync)
	    XSynchronize(dpy, True);

#ifdef MULTIBUFFER
	if (multibufext && !XmbufQueryExtension (dpy, &mbevbase, &mberrbase)) {
	    multibufext = 0;
	}
#endif

#ifdef MULTITHREAD
#ifndef XMUTEX_INITIALIZER
	xmutex_init(&count_mutex);
#endif
	xcondition_init(&count_cond);

	/* start all threads here */
	thread_count = nthreads;
	for (i=1; i <= nthreads; i++) {
	    closure = (struct closure *) xalloc(sizeof(struct closure));
	    closure->thread_num = i;
	    xthread_fork(do_ico_window, closure);
	}
	/* wait until all theads terminate */
	xmutex_lock(&count_mutex);
	xcondition_wait(&count_cond, &count_mutex);
	xmutex_unlock(&count_mutex);
#else
	/* start the animation */
	closure = (struct closure *) xalloc(sizeof(struct closure));
	do_ico_window(closure);
#endif
	XCloseDisplay(dpy);
	return 0;
}

redpajama_set_name: RedPajamaGithub


text:
Calixa Lavallée: Father of Canada's National Anthem and Lafayette of American music
ibykus20
By Matthew Ehret
Many may have heard of the name Calixa Lavallée as the composer of the song "Ô Canada" which officially became the Canadian National anthem one hundred years after it was first produced in 1880.
Many know of the name Marquis de Lafayette as the young French nobleman, who changed the course of the American Revolution and devoted his life to the creation of republican institutions both in America and around the globe.
However, few people know that Canada's Calixa Lavallée (1842-1891), whose life was cut short at the age of 48 was known across America as the "Lafayette of American music".
Recruited from his home in Saint-Hyacinthe to the elite of the cultural music scene by the Institut Canadien which spread beach heads across all of Quebec throughout the mid-19th century Calixa soon found himself working in Montreal and studying under the mentorship of the great French composer Charles Wugk Sabatier who composed the famous patriotic song "Le Drapeau de Carillon". In order to earn a living, Calixa began touring America as a director and performer of minstrel shows just as the first shots on Fort Sumter ushered in the Civil War in April of 1861.
The Civil War Veteran Fights Two Confederacies (south and north)
A devoted republican inspired by the traditions of Louis-Joseph Papineau, leader of the failed Lower Canada Rebellions against the British in 1837-1838, Calixa was quick to join the Union Army in the 4th Rhode Island regiment fighting in one of the bloodiest Civil War battles of Antietam in Maryland in September 1862 where his wounds ended his time in the military. Papineau had himself created the Institut Canadien in 1844 in order to provide an aesthetical and scientific education to the masses of the Quebec population who did not have the adequate cultural development to properly undertake a complex revolution as he had dreamed years earlier. Papineau's nephew Louis-Antoine Dessaulles was the President of the Montreal branch of the Institut Canadien and former seigneur and mayor of Saint-Hyacinthe who knew Lavallée's family well and likely played a role in the early part of the young man's career.
Lavallee in his union uniform 1862
Struck with the realization that Lincoln's victory would finally create international conditions favourable to Canada's liberation from the British Empire, Lavallée returned home to Montreal in 1863 in order to help guide the young nation towards becoming a republic free of hereditary institutions.
Lavallée quickly found himself allied with a powerful network of young nationalists then dubbed "Les Rouges" led by L.-O. David, Médéric Lanctôt (his childhood friend and founder of La Presse), and a young lawyer named Wilfrid Laurier (later to become Prime Minister of Canada from 1896-1911). These republican networks quickly set up a newspaper known as L'Union national which was devoted to overthrowing a London-steered plot to create a British confederate beachhead in the Americas after it had become apparent that London's "other" confederate operation in the slave owning south was about to fail. That plot came to be called the "British North America Act" and was first drafted after a booze-drenched conference in Charlottetown Nova Scotia in September 1864.
Before it was ratified in London on July 1 1867, Lavallée's entourage led a two-fold combat against this anti-republican program which they saw as a perversion of human nature (as it embedded hereditary rights and powers into the very constitution of the new nation).
Louis-Joseph Papineau
The Union National and La Presse newspapers run by Lavallée's friends held a clearly defined position that the only two acceptable pathways to the future for Lower Canada was 1) Full independence from the British Empire or 2) Annexation to Lincoln's America.
All members of this group recognized the dangerous fallacy of composition that would be unleashed should a nation be created on British Imperial foundations and administered by Privy Council networks loyal to a hereditary power structure.
The Battle Against the Ultramontane Church
While polemicizing against Confederation, the L'Union national newspaper and the Institut Canadien de Montéal conducted a second line of battle by advocating a separation of Church and State. This put them into conflict with the Ultramontane Church whose tyrannical leadership under Montreal's Bishop Bourget demanded that the population of Quebec show their faith to God by remaining as ignorant as Adam and Eve were before spoiling their morality by eating from the tree of knowledge. It was this commitment to keeping the population in a peasant dream state that the corrupt church then found itself so closely aligned with the highest echelons of the British Empire.
Bishop Ignace Bourget
When Bishop Bourget excommunicated Joseph Guibord due to his membership in the Institute canadien, as punishment for the institut's refusal to ban books from the library which were placed on the Church's black list, many supporters quickly abandoned the fight out of fear and the Institut canadien began crumbling.
The L'Union national newspaper collapsed when the British North America Act passed into law in 1867 whereby the paper lost its raison d'etre.
In spite of these setbacks, the fight was not over for Calixa.
Taking Lazard Carnot's famous statement seriously that "it is better to have republicans without a republic than a republic without republicans", and recognizing that the conditions for republicanism was the moral, and intellectual cultivation of the personality in alignment with the ideals of Benjamin Franklin and Friedrich Schiller, Lavallée devoted the remainder of his life to creating durable cultural institutions that could organize, develop and deploy the creative powers of the population so that future generations could succeed where his generation failed.
To undertake this task, Calixa had recognized that he must first cultivate his own artistic powers to a much higher degree. After working as an exile in America for several years becoming the superintendent of the Grand Opera of New York (as an appointee of his friend and soon-to-be assassinated musical patron Jim Fisk in 1872), Lavallée briefly returned back to Montreal bursting with passion to create a conservatory of Quebec and a durable classical musical culture capable of producing native geniuses, and Canadian compositions.
Studying in France from 1873-1875 under the tutelage of the great pedagogue François Marmontel, Lavallée's powers of performance and composition grew to new heights and several original works were produced including the Papillon, Souvenirs de Tolède, La Grande Marche and the Fatherland Overture.
The Fight for a Canadian Conservatory
Having returned to Montreal in 1875 Calixa gave everything to his mission and made alliances with every person of influence he could come into contact with in order to gain support for his Canadian Conservatory. To pay his bills, he tutored prolifically, arranged countless concerts – often with the Montreal-based Mechanics Institute and worked as organist in many churches across Quebec. In one instance, the new ultramontane Bishop of Montreal Édouard-Charles Fabre passed a decree banning mixed choruses in all diocese churches causing Lavallée to resign, taking the Saint-Jacques Church choir with him.
In response to this attack on culture, Lavallée decided to fight back by organizing his choir to perform Gounod's Jeanne d'Arc. Jeanne was recognized as a Promethean symbol of republicanism across the world and a figure who saved her nation in a time when all hope for freedom was lost. For this, d'Arc was burned at the stake by an unholy alliance between the Catholic Church and the British Aristocracy who ran a mock trial declaring her to be an agent of the devil.
In the wake of the electric success of the performances of Jeanne d'Arc, Lavallée became president of the prestigious Académie de Musique de Québec (AMQ). The AMQ was founded in 1868 as an instrument to administer musical examinations and conduct talent searches as part of the drive to create a national musical culture. Once made President in June 1876, Lavallée devoted his every free moment to the AMQ. After a successful 1877 session of the AMQ music competition which included performances of the greatest young talents from around Québec, an article published in Le National and attributed to Lavallée read: "Yesterday's results have clearly shown us that there could be a music school just as there is one for the fine arts and that this school should be funded in a manner that best encourages the continuation of work and the spread of this the most noble and beautiful art, the one that best raises the soul toward its creator."
Sadly by June 19, 1878 Lavallée was saddened to receive news that his petition to create a conservatory submitted a year earlier had crept through the bureaucracy and became a Bill only to be struck down on procedural grounds. The Québec-city newspaper L'Événement reported on this short-sighted decision saying: "Analyzing the public feeling regarding serious musical institutions, one soon discovers a profound ignorance of the importance of music, of the necessity of institutions organized appropriately in its interest and of its potential as the co-efficient of a superior civilization. This ignorance is found to some extent everywhere, among the governed and the governors, but is most serious among the governors."
A Change of Strategy
At this point, Lavallée changed his strategy to focus on the failure of the governors. Rather than focus all of his attention to "bottom up" organizing of the population while hoping the elite would respond to the call of the times, Calixa moved to Québec City in 1878 in order to be closer to the Assemblée nationale and the political class whose favor he needed for his plan to succeed. Establishing himself in Quebec City, Lavallée quickly became a founding member of an interesting republican group of artists, poets, musicians and statesmen called "Le Club des 21" (whose name was derived by the 21 member limit). The group's president was the diplomat musician José Antonio De Lavalle Romero-Montezumaa (aka: the Count of Premio-Real) who served as the Spanish Consul to Quebec.
Calixa worked hard to procure favor and friendship wherever it could be found, devoting an enormous amount of energy to the Lieutenant Governor of Quebec and the Governor General the Marquis of Lornes (John Douglas Campbell) who had been appointed to represent the Crown as the new head of state of Canada that year. Many of his compositions featured dedications to members of the Anglo-Canadian elite during this time, which Lavallée has been heavily criticized for over the years. However it is only by understanding his strategic plan to by-pass the bureaucratic channels of government that we can appreciate what he was doing.
Lavallée produced a spectacular cantata for the new Governor General in 1878 and performed a selection of it in Ottawa's Rideau Hall where it was warmly received by the Marquis and his wife who befriended Calixa, talking with him throughout the night.
When the Marquis finally came to Québec City in June 1879, Lavallée gave the full performance of the Cantata for the first time featuring 150 singers and 60 instrumentalists. Never one to break from his republican passions, the poetry selected for the cantata included a military chorus celebrating the French victory over the English. The translated text is worth citing here:
The drum beats, the bugle rings,
Here, the call of the regiment;
On the ramparts the cannon thunders
Let's go, companions, forward!
Second Soldier
Let us leave, let us show our banners,
Oriflammes, floats on the wind!
And you, old flag of our fathers,
Unfold your triumphant pleats
Ring, battle bugles
Cannons, thunder towards the skies!
Awaken from our walls
The glorious echoes of the past!
And, you magnanimous warriors
That sleep beneath laurels,
Rise, sublime heroes,
Show your proud foreheads!
To the walls of the cathedral
Unhook the white flag;
In the triumphant march
Come to take your rank!
O days of glorious combat
Where rang the warlike horn!
O all of you, brave soldiers
That sleep under the same rock!
Sun that formerly illuminated
So of great battles
Night discreetly reveals
So many bloody funerals!
The blood everywhere is obliterated:
Gather together our glory,
From great names of our past
Let us sing together our history!
The lyrics were so scandalous that it was decided to not publish the lyrics at the event.
While the Marquis did not indicate any open displeasure towards Calixa, neither he nor any of the elites whom Calixa attempted to win over to the cause supported the conservatory project. Although a hope briefly arose in October 1879, when Joseph-Adolphe Chapleau (a member of Calixa's Club de 21) became premier of Quebec, it was soon squashed as Chapleau made no moves in support of his friend.
O Canada is Born
By June 1880, the Congrès Catholique Canadiens-français had commissioned Lavallée to compose a national song for Canada. Although many English speakers considered "God Save the Queen" and "the Maple Leaf Forever" as unofficial anthems, these were not pieces that the French could relate to and something more universal was required. Calixa went straight to work.
Working alongside conservative judge and poet A.B. Routhier who authored the original words to the anthem, Lavallée had requested that the poet wait until the music was first composed before choosing the lyrics. As Lavallée had recently conducted a series of performances of works by Mozart such the Twelfth Mass and operas by Verdi, and Rossini, the Magic Flute (the famous "masonic" opera) was likely fresh in his mind when he composed the music to what became known as "Ô Canada".
Upon listening to the first two measures of Act two (the March of the Priests), the borrowed melody is striking and leaves very little doubt that Mozart was the inspiration for the anthem.
The fact that the ceremony at which the anthem was scheduled to be performed was to follow a Mass given by the ultramontane Archbishop of Quebec accompanied by 500 priests may have been tied to Lavallée's choice of Mozart's march of the priests under the leadership of Zarastro as his inspiration. When one realizes that the priests in Mozart's opera called for an obedience to a Natural Law that rises above man's religions, it becomes no surprise that Lavallée's composition was pulled from its scheduled debut that day. Whatever the case, it was performed to a smaller audience at a national banquet that evening and once more in the morning to very positive effect. In spite of its positive reception, no signs emerged that his dream of a conservatory had come any closer to reality.
In the following weeks, Lavallée received an opportunity to plant his dream in more fertile soil as an invitation to leave Canada for the USA arose. This was an opportunity he did not pass up and in the heat of the night, without any fanfare, Lavallée departed for America.
In Hartford Connecticut, Lavallée wrote to a friend in Quebec describing the spread of slander and gossip against the composer: "When one returns here, one realizes the insignificance of the ideas of our poor country… I have complete confidence in this trip as well as in others, and besides, an artist is not meant to rot in an obscure place and especially in an even more obscure country."[1]
Lavallée's friend could see that the composer was frustrated and exhausted after five years of efforts to create a conservatory had found no support. He made an appeal to the Quebec government knowing that it was likely that Lavallée would not return if nothing were done: "In the aftermath of Mr. Lavallée's wonderful results, the government that has already generously assisted in the organization of this lovely musical event must also help such a talent to develop and produce other works that will contribute to the artistic progress and glory of Canada. We only need to found a music conservatory where our talented young people- which we certainly do not lack- may take shape, and place at the head of that institution a man of unparalleled calibre such as Mr. Lavallée."[2]
As those wise words fell on deaf ears, Calixa decided to settle roots in America, and establishing himself in Massachusetts. It was here that he chose to devote all of his energy to create an American Conservatory where the Canadian Conservatory project failed. In his new republican home, his efforts would prove infinitely more successful.
The Lafayette of American Music
After composing his first opera, The Widow, to great success, Calixa attempted a second, more radical intervention into the American culture with a satirical comic opera called The Indian Question Settled At Last which featured the real life events surrounding Indian Chief Sitting Bull as a Zorastro-like wise figure who guided foolish soldiers, missionaries and natives into a state of wisdom by encouraging everyone to part with their prejudices and awaken love for each other with various natives and whites falling in love and living in harmony. This second play was deemed too controversial for the stage and it was never performed whereby Calixa decided to leave operas behind him and focus on a new pathway which brought him into contact with the Music Teachers National Association (MTNA) in Rhode Island in 1883.
By the end of this 1883 meeting Calixa recommended to the MTNA President E.M.B. Bowman, the unthinkable idea of organizing a concert made up of American composers the following year. Lavallée's biographer Christopher Thompson wrote that "it seems that playing a program of music composed by one's U.S. contemporaries was something no one had considered doing."
The following year, the fruits of Lavallée's efforts paid off as a 100% American repertoire was performed for the first time in history on July 3, 1884 at Case Hall in Cleveland, Ohio. In the wake of the incredible success of this concert, a letter to the Senate and House of Representatives by MTNA members led to the passage of the first copyright legislation for music into law. In gratitude for initiating this bold new movement, Calixa was named Vice President of the MTNA. Reporting on the concert, Folio magazine stated that Lavallée's concert had inaugurated "a new departure in the musical history of the country".
On July 4 1884, the MTNA announced the creation of the American College of Musicians (ACM) with the goal of examining music teachers under various categories of music (voice, piano, organ, theory) and offering various grades of proficiency (master, fellow and certificate of competency). Lavallée gave a stirring speech at the event and he was elected to head the program committee. The College fell under heavy attack by many of the "musical Brahmins" of New England who controlled the musical scene as the self-ordained elite. The primary enemy of the ACM was Eben Toujee, a co-founder of the MTNA who feared that the new institution broke the monopoly enjoyed by the New England Conservatory of which he was president.
Lavallée and Thurber Lead the Movement for a New School of American Music
With Lavallée now firmly driving this new movement, visionary art patron Jeanette Thurber joined the cause going on to found the American Conservatory in 1885. Lavallée's biographer Brian C. Thompson noted the dramatic growth of the MTNA once Thurber offered her support: "With the financial support of the arts patron Jeannette Thurber, the MTNA raised its profile to a new level with its 1885 summer meeting in New York."
Jeanette Thurber
During the 1886-1887 meeting, President S.N Penfield endorsed Lavallée's election to the presidency of the institution saying "You may refer to last year, when American compositions were given in a very worthy manner at the Academy of Music in New York, with a large orchestra and chorus, under the auspices of the President and officers of that year. But what led up to that? One modest piano recital of the year before (applause) by a gentleman who staked his reputation upon it. That, in one sense, was the commencement of this policy of the Music Teachers' National Association, which has now grown to these dimensions. I have the honor to present, as your candidate for the Presidency in the ensuing year, the gentleman who gave that recital, Mr. Calixa Lavallée, of Boston."
Toasting to the prospects of the new movement, composer Wilson G. Smith said on March 15, 1886: "To Mr. Lavallée (a foreigner, too, be it said to the shame of some of our native artists) belongs the honor of inaugurating the present movement, on behalf of American composers and their works. The history of American art will accord to him this distinction".
In gratitude for being elected President, Lavallée said that he would "put his heart, soul and all his energy, into the service of American music."
True to his word, Calixa was known for working 16-18 hours per day, teaching, organizing concerts, programs, composing, fundraising and managing administrative affairs of the MTNA, often out of his own pocket. He worked closely with conductor Frank Van der Stucken, and also E.M. Bowman and Carlyle Petersilea to advance the careers of such composers as George Chadwick, John Knowles Paine, Arthur Foote, Wilson Smith, Ernst Jonas and Emil Liebling among many others.
Although he was the acting President of the MTNA at the 1889 meeting in Philadelphia and re-elected to chair the Program committee for the 1892 meeting at the Columbia Exposition, Calixa had pushed himself too far and succumbed to tuberculosis dying on January 21, 1891 at the age of 48.
At the 1892 meeting's Presidential address, J.B. Hahn spoke of the new movement and the role played by Lavallée:
"It was in this city- yes, in this very hall, eight years ago, that Calixa Lavallée sounded the key-note of a movement whose reverberations found a re-echoing and a responsive sentiment throughout the length and breath of the land. Many here today will readily remember the occasion- a modest, unpretentious pianoforte recital, with the distinguishing characteristic that it was the first complete programme of American compositions ever presented… For his patriotism, his courage, his judicious selection which led to victory and the leadership he then assumed, all honor to our late associate and ex-President, Calixa Lavallée, the Lafayette of our American musicians."
Just nine months before his death, Calixa gave an interview to the Boston Herald describing his inspired hope and vision of the new epoch in American composition that he had helped to unleash:
"Somebody must sacrifice themselves for the cause. When I read the dispatch from Washington two or three weeks ago about the successful concert of American composers given at that city I was delighted. I little dreamed six years ago that the incipient effort I made in that direction would find its reward so soon. No, American music has come to stay and the sooner the American public realizes the fact the better for the cause and all parties concerned. Of course, we are working through a transition, which is the fate of every new country, and it may take some years yet before we acquire a national color to our music: but who knows how soon a genius may come to us to crown our labors."
1892 was an auspicious year for the movement. Although Lavallée did not live long enough to see his prophecy unfold, this was the year that Jeanette Thurber brought another foreign musical genius to America in order to guide the America through its transition in the discovery of "a national color".
Leading Hungarian-born composer Antonín Dvořák arrived in New York in September 1892 and set to work to pick up the baton where Lavallée had left it in 1891, becoming the leading figure in Thurber's National Conservatory of America and creating a new school of American music generated from his intense studies of Native American, and African-American melodies. Dvořák gave an interview to the NY Herald on May 23, 1893 saying:
"I am now satisfied that the future music of this country must be based on what are called the negro melodies. This must be the foundation of any serious and original school of composition to be developed in the United States…These beautiful and varied themes are the product of the soil. They are American."
Dvorak's work resulted in his 1893 New World Symphony, and a new generation of African American composers and musicians under the leadership of Harry Burleigh, the Fisk Jubillee singers and many more.
[1] Brian C. Thompson, Anthems and Minstrel Shows: The Life and Times of Calixa Lavallee, McGill-Queens University Press 2015, P.228
[2] Ibid, p. 230
Categories: History, Music
Tags: abraham lincoln, Aesthetical Education, dvorak, fred haight, hudson river school, jeanette thurber, marquis lafayette, national anthem, o canada, schiller, Universal History, wilfrid laurier

redpajama_set_name: RedPajamaCommonCrawl


Acetylcholine receptors are required for agrin-induced clustering of postsynaptic proteins.
We have investigated the role of acetylcholine receptors (AChRs) in an early step of postsynaptic assembly at the neuromuscular synapse, the clustering of postsynaptic proteins induced by nerve-released agrin. To achieve this, we used two variants of C2 myotubes virtually lacking AChRs and C2 cells in which surface AChRs were down-regulated by AChR antibodies. In all cases, agrin caused normal clustering of the agrin receptor component MuSK, alpha-dystrobrevin and utrophin, but failed to aggregate AChRs, alpha- and beta-dystroglycan, syntrophin isoforms and rapsyn, an AChR-anchoring protein necessary for postsynaptic assembly and AChR clustering. In C2 variants, the stability of rapsyn was decreased, whereas in antibody-treated cells, rapsyn efficiently co-localized with remaining AChRs in microaggregates. Upon ectopic injection into myofibers in vivo, rapsyn did not form clusters in the absence of AChRs. These results show that AChRs and rapsyn are interdependent components of a pre-assembled protein complex that is required for agrin-induced clustering of a full set of postsynaptic proteins, thus providing evidence for an active role of AChRs in postsynaptic assembly.


Wrongful Termination Lawyer – Do I have a case?
– Was My Firing Illegal?
– Can I Sue My Former Employer for Wrongful Termination?
– Do you have the legal grounds to file a lawsuit against your former employer?
– Do I Have a Wrongful Termination Case?
– How do you prove wrongful termination?
– I believe my firing was illegal. Can you listen to my story and let me know if I have a case?
– What Is the Statute of Limitations to File a Wrongful Demotion Lawsuit?
Being fired from your job is an event that can turn your entire life upside-down. Losing your job can an extremely stressful time because you all of a sudden have lost your steady stream of income which you use to pay for food, rent/mortgage, loans, and the livelihood of your family.
If you believe that your firing was wrongful termination, you may have a right to file a lawsuit against your former employer. Do you have the legal grounds to file a lawsuit against your former employer? Here are a few things that may help you determine if you have a wrongful termination case.
Even though California is an at-will state and gives your employer to fire you with or without reason, it does not mean that they can fire you for any reason. The employer cannot breach any contract (written or oral); they cannot violate public policy (federal, state, nor local); and the employer cannot retaliate against any employee who brought unsafe or illegal work practices to light. To prove a wrongful termination, you would consider various scenarios.
If you signed an employee contract which states certain promises, job security, growth, and other aspects, you have a strong argument against you being an at-will employee. For example, in your contract it may explicitly state that your employer can only dismiss you if they have a good cause or for reasons which are inscribed in the contract.
If long-term promises were made upon your hire.
Not detailing the negative aspects of a job, like having to travel to dangerous neighborhoods late at night.
It is against the law for an employer to fire employees for reasons that are in violation of the state and federal laws put in place to protect certain groups of people. Here are a few things to know if you believe your termination was unlawful.
Termination discrimination for sexual orientation.
If you believe that the reason for your termination fits under these laws, you may have a right to file a wrongful termination lawsuit against your former employer. Our Los Angeles wrongful termination attorneys can sue your employer and get you the justice that you deserve. Based in Los Angeles, our lawyers take cases from the entire state of California.
Show that you engaged in a legally protected action, like, for example, filing a complaint with the Equal Employment Opportunity Commission against your employer. Your job is legally protected if you file a complaint.
That your employer acted negatively towards you and had adverse effects on you and your position. For example, you were denied promotion, fired, or given an unjust negative review about your performance at work.
Your employer cannot retaliate against you if your activity forced them to act. They cannot terminate you if they find out you are going to file a lawsuit against them for racial discrimination.
Employees are protected from whistle-blowing against their employer because of the whistle-blowing laws that protect the employee. The whistleblower laws protect employees who bring to light any illegal activity, which breaks laws, regulations, or ordinances, in which their employer is taking part.
If you believe that your former employer wrongfully terminated you from the job you held on either discrimination, retaliation, and harassment, you have 12 months to file the lawsuit in court. If the EEOC believes your claim to be legitimate, you will be given a "right-to-sue" letter which gives you the right to sue your employer. The time allotted to file a lawsuit or claim against your former employer gives you 90-300 days to file your lawsuit, from the date you receive your right-to-sue letter. An attorney can make this entire process much, much shorter by acquiring the right-to-sue letter right away and promptly begin the lawsuit.
If your employer terminated you in breach of public policy, meaning they terminated you for practicing your rights, you have two years to file a lawsuit against them from the date your employer dismissed you from your employee duties. Should your employer have terminated you for breach of contract, you have two years from the breach of the written or oral contract that was made when you signed on.
The best way to determine whether or not you have a strong wrongful termination case is to contact an employment lawyer and have them review your case. Here at the California Labor Law Employment Attorneys Group, you have free consultation and a zero fee guarantee. The free consultation means that we will sit down with you and listen to you as you present your case to us. We will evaluate your case and give you our thoughts on whether you have a strong enough case. The zero fee guarantee means that you will not pay anything unless we win the case. This removes any financial risk from you and transfers it all on us.
Based on our experience and past case results, we believe we are the best wrongful termination lawyers in Los Angeles. The California Employment Attorneys Group offers a zero fee guarantee. We never require our clients to pay any upfront fees. We will work on your case on a contingency fee structure, and when your case settles, our fee will be calculated based on whatever we recovered for you. Our attorneys also offer free consultations and free case reviews. Call or email us today to find out more about your rights.


text:
License-Free Two-Way Radios
If you need to keep in touch quickly and easily, without any additional fees to pay, then license-free two-way radios are the obvious choice. Browse our full selection below, from top brands like Motorola, Cobra, and Binatone.
Licence Free Two Way Radios
Manufacturer: Cobra
Number of Handsets: Four
Quad Handset (5)
Hytera (5)
Twelve (5)
Maximum Range
Up to 10 Km (1)
Up to 8 Km (1)
Charging Dock Included
Cobra AM245 Quad Pack License-Free Walkie Talkies
As low as: £54.16 ex-VAT £64.99 inc-VAT
Cobra MT245 Quad Pack License-Free Two Way Radios
Cobra AM1035 12km Quad Walkie Talkies
Quad set of IPX7-rated waterproof walkie talkies with up to 12km range.
Cobra AM845 Quad Walkie Talkies
Quad set of Cobra Walkie Talkies with up to 10km range.
Quad set of Cobra Walkie Talkies for up to 8km range.
PMR 446 Licence Free Two Way Radios
PMR446-compliant radios can be used without a radio licence so are ideal for leisure pursuits or small businesses. We stock a wide range of licence-free two-way radios to choose from from budget models that are ideal for kids to more robust weatherproof models for braving the elements.
What range can you get on Licence Free Walkie Talkies?
The range capabilities of licence-free two way radios depends on a number of different factors. Depending on the surrounding terrain, the range can vary from a few hundred metres in a built up area to a few kilometres in open ground. Manufacturers will quote the maximum range handsets are capable of in clear line of site under ideal conditions. The maximum range on top-quality PMR446 two-way radios is up to 10km but you won't be able to achieve this range in a built-up city environment or heavily wooded areas. If you're in doubt about whether one of the two-way radios will suit your requirements, get in touch with one of our experts for advice.
Benefits of Licence Free Two Way Radios
The most obvious benefit of using Licence-Free Two Way Radios is the cost, as there is no licence required. They are also extremely easy to use as they come with pre-programmed radio frequencies so they will work out the box.


=> Hast du auf Fels oder Sand gebaut?
=> Have you built on Rock or Sand?
dem darf wahrlich nimmer bangen.
um sein Leben zu vollenden!
1. Siehe, du Mein lieber Anselm-Wortemsig, auf menschliche Art wünsche Ich dir nichts, sondern, was Ich dir wünsche, das gebe Ich dir auch alsogleich – und habe es dir schon gegeben und habe noch Unendliches für dich im Vorrate, so du es nur annehmen willst.
2. Siehe, Ich will dir alles im Überflusse geben… 'Silber, Gold und Edelsteine' aus Meinem Vaterherzen! – Silber gebe Ich dir deiner Kinder wegen, Gold für dein Weib, und dich aber will Ich schmücken mit allen Edelsteinen!
3. Aber glaube fest an Meinen Namen! Baue auf Ihn wie auf einen Diamantfelsen! Und liebe über alles Mich, deinen überguten, heiligen Vater, so wirst du bald das grosse Wunder der Kraft und Macht Meines Namens Jesus in deinem Herzen gewahr werden!
4. Das sage Ich, dein heiliger Vater. Amen!
1. So schreibe… Fürwahr, diese Frage ist überaus albern! Wie kannst du nur so etwas fragen!?
3. Was sagte Ich zu den Aposteln? – Dass sie untereinander Brüder in aller Liebe sein sollen, das sagte Ich ihnen! – Wie nannten diese nach Meinem Gebote alle Menschen? – Nicht anders als… 'Liebe Brüder' usw. – Was soll's denn da mit der Kasterei?
8. Ich sage… Wer nicht Barmherzigkeit übet als ein freier Bekenner Meines Wortes und Meiner Liebe, und das aus allen seinen Kräften ohne Entgelt, dessen Werk werde Ich ansehen als das eines Tieres, das da in seiner gerichteten Ordnung allezeit ein und dieselben Werke verrichten muss, weil es nicht anders kann und darf vermöge der gerichteten Ordnung, welche Werke aber so gut wie gar keine "Werke" sind.
1. Eine Kirche ist nur Kirche, wenn sie lehret Meinen Willen und das Leben predigt aus der Liebe, die am Kreuze für die ganze Erde, ja für die ganze Schöpfung blutete.
2. Aber eine Kirche, die sich nur segnet und alles andere verfluchet, ist wie ein Geizhals, der allen den Tod wünscht, damit er aller Habe habhaft werden möchte. Es wird aber ein Kamel eher durch ein Nadelloch traben als ein solcher 'Geizhals' in den Himmel.
this one mustn't ever worry again.
then I have already grasped him with all My ruses of love.
Yes, I carry him on hands, to complete his life!
1. Look, My dear Anselm, I do not wish you anything in a human way, whatever I wish you I will give you instantly – and I have already given it to you, and I have endless more things in store for you, if only you will accept them.
2. Look, I want to give you everything in abundance… 'Silver, gold and precious stones' out of My paternal heart! – I give you silver because of your children, gold for your wife, but you I want to adorn with all sorts of precious stones!
3. But firmly believe in My Name! Build upon it as you would on a diamond rock! And love Me above all, your kindhearted and holy Father, so you will soon recognize in your heart the great wonder of the power and might of My Name Jesus!
4. This say I, your holy Father. Amen!
1. Ok then, write… Truly, this question is indeed silly! How can you ask something like this!?
2. Have you never read a gospel before? – Tell Me, on which occasion have I ever established such a religious order – and least of all a religious women's order?! – Or are dreams, which some bile and weak sighted order founders have dreamt, also part of the gospels?
3. What did I say to the apostles? – They shall be brothers among each other in all love, that's what I told them! – How did these call all men according to My commandment? – Nothing else than… 'Dear brothers' etc. – So what's up with this caste system here?
4. You shall all be a religious order of pure love for Me, nothing but children of one and the same Father, and redeemed ones through My incarnation! You shall be one and the same loving, compassionate brother and sister caste in the living power of My word and Name, since you all have been made children of My love, mercy and grace through one and the same Jesus Christ.
5. However, when people – even though in part with an honest intention – isolate themselves from others, in order to somehow form a certain virtuous caste, into which only very few can be accepted – what kind of blessing can come forth for the people, if not all are like one and one like all?!
6. Of course, not everyone may be a weaver, a tailor, a cobbler or a blacksmith at the same time etc; there has to be diversity of workers and classes outwardly. However, it shall not be so inwardly! There, everyone should only be a loving and merciful brother and sister towards his neighbour!
7. What kind of charity should a paid charity be? – Or does charity only exist in the care for the sick?
8. I say… Whoever does not practice charity as a free confessor of My word and My love, and doing it so with all of his strength and without reward, their work I will consider as the work of an animal, which, in its judged order, must perform at all times one and the same works, because it cannot act otherwise, according to the judged order. However, their works are just about no works at all.
9. The free man must also act free and unbound, in the infinite free order of My eternal and free love, if they wish for Me to consider his work as something. – But whoever acts under a certain oppressed order, and even more often according to the more deplorable enclosure, those are very rarely more than conditioned lazy ones doing a certain work, and they never look to the work, but only to the wage.
10. This should be enough to answer your question, not so worthy of Me! – But in future spare Me from any of this! For such worldly flaunting establishments are an abomination for Me! – But whoever practices charity, shall practice it in secret, and not in front of the world!
11. This say I, the One, who only looks at the works done in secret! – Amen. Amen. Amen.
1. A church is only a true church, if it teaches My Will and preaches the life out of love, which has bled on the cross for the whole earth, yes for the entire creation.
2. However, a church that only blesses itself, and curses everything else is like a cheapskate who wishes death upon everyone, so he may get a hold of everything. But it is more likely for a camel to fit through an eye of a needle than for such a 'cheapskate' to enter heaven.
1. The cross is a true (basic) necessity in life! – When life contains no adversities and trials, it straggles and evaporates like an ether drop. A soul, that does not carry a cross, languishes, dies and loses itself into the night of death.
2. The hardship of life, however, is the vessel of life, in which it becomes consolidated like a diamond, which is also only a consolidated ether drop, although not a life droplet.
3. Therefore, each of you shall take their cross upon their shoulder and follow Me in all love, thus they will preserve their life forever!
4. Those who coddle their life will lose it. But those who crucify it and those who let Me crucify it, will preserve it for all eternity!
5. This say I, the Crucified One. Amen!
This entry was posted in Aussagen des Herrn - Statements of the Lord, Himmelsgaben Jakob Lorber Gifts of Heaven and tagged Der Kreuzessegen, Die wahre Kirche, Heavenly Gifts Jakob Lorber, Himmelsgaben Jakob Lorber, The blessing of the Cross, The true Church, true Compassion, True Happiness, wahre Barmherzigkeit, Wahres Glück by jcadmin. Bookmark the permalink.


A high-functioning alcoholic battles the shame of sobriety.
The day we brought our newborn daughter, Cathryn, home from the hospital, I sat on our back porch and held her in one arm leaving my other hand free to hoist my vodka tonic. I had no idea at the time that these two precious loves would eventually be unable to coexist. I would have to choose, and it would be the hardest, and yet most rewarding, thing I would ever do.
I had alcohol in my system during the births of all four of my children, and the shame from that fact lingers to this day. I don't think the nurses or doctors knew. I don't even think my wife, Sheri, realizes I was four for four carrying a buzz into the delivery room. But I know. I will never forget.
Sheri was in labor with Cathryn for over 24 hours. After a stint at the hospital overnight, they sent us home until the contractions moved closer together and intensified. Just after dawn, I mowed the lawn to feel productive while we waited. I really mowed the lawn because I felt the chore provided cover for drinking Rolling Rocks in the morning.
When we returned to the hospital later in the day, I was worried the hospital staff knew I had been drinking. I only had a few beers, and I was not drunk – not even close. But I could feel the disapproving stares of the nurses who attended to Sheri. Your wife is going through torture to give you this beautiful gift and you are too self-absorbed to abstain for her, they were surely thinking. What a waste of humanity this poor woman has to tolerate.
And a beautiful gift Cathryn is indeed. After delivery, I held both of my amazing girls close. We talked on the phone to family from all over the country and eagerly awaited our release so we could bring our child home. I had a healthy baby girl and a beautiful, healthy wife. I didn't have to go to work for a few days. We could spend the time bonding as a new family and watching our gift from God make her first discoveries. It was pure bliss. But it wasn't enough.
As soon as we arrived home – away from the judgy stares of the maternity nurses – I poured a drink. And then another and another. I deserved it, I thought. Labor and delivery was hard and I had performed by husband and father roles admirably. I never considered for a second that my wife deserved a fully engaged husband in the first hours of our daughter's life. I didn't give a thought to letting her sleep deeply and peacefully without worrying that I would overdo it leaving her all alone to care for our newborn after an incredibly exhausting delivery. I didn't think that way because my drinking wasn't about the effect on Sheri or anyone else. My drinking was selfish – that day and always.
Two years later, our first son was born. Nicky came at night, so I had vodka in my system. I never considered suspending my ritual of nightly cocktails as the delivery date approached. The idea simply wasn't even on my radar screen. Again, I was filled with paranoia at the hospital as I tried not to exhale around the nurses or doctors. I was embarrassed of my buzz, but not enough so to consider a change to my drinking patterns.
Two and a half years later, Sheri went into labor with our second son just after we finished dinner. Joey was coming in a hurry, which meant racing to the hospital through a blizzard. I remember thinking about the alcohol in my system as I blew through stop lights and drove far faster than the conditions warranted. I felt both justified and ashamed. While Sheri tried to stay calm and slow the process until we reached the hospital, I sat next to her wondering if our predicament would be considered justification if my driving drew the attention of a cop. My pride for getting my wife into the care of the delivery ward was shadowed by a cloud of shame. Again.
When it was Andrew's turn to be born three years later, Sheri's water broke before labor began. We spent a bunch of overnight hours in the delivery room waiting. While Sheri endured discomfort and worry in bed, I dozed in a chair next to her. As I floated in and out of sleep I remember feeling embarrassed and helpless that my drinking earlier in the evening left me unable to stay attentive to my wife when she needed my comfort and support. I wasn't drunk. But I had enough poison in my system to render my efforts to stay awake useless. As I drifted in and out, I was overwhelmed by the shame of letting my wife down again.
I was four for four. Alcohol had played a disgusting role in the births of all of my children. Even before Andrew was born, I felt the weight of this despicable and permanent fact. I was not drunk on any of these occasions, but I wasn't sober, either. Sheri and I have been married for over twenty years. During those two decades, our babies being born are some of the times my wife most needed me – the times she deserved to have all of me. I let her and my children down 100% of these times. And while there is nothing I can do to change the past, I dedicate the rest of my life to never letting my family down again.
This is a story about disappointment alcohol brought to my family. It is not a story of being drunk, and I had not yet progressed across the invisible line into alcoholism for most of it. The impacts of alcohol on a family are often subtle, yet profound. If you're not looking for them – if your vision is clouded by a haze of booze – if you are simply taking what our society leads you to believe you deserve, you might miss the signs that alcohol is negatively impacting your family. I sure did for a very long time. Now my challenge each day is to keep my hope for the future stronger than my shame from the past. My family depends on it.
Good read, but you will let your wife down again. Not from drinking but you will let her down in some way. We are human. I appreciate your honesty and the seriousness of your blog and feelings but don't forget to forgive yourself. Thank you for this blog.
Good advice – I appreciate it. And you're right. In sobriety I do disappoint my wife sometimes. It's just so different to make an honest, human mistake than to have been "along for the ride" wherever my alcohol-warped brain wanted to take me. Thanks again for your feedback!
Thanks Brian. I have come to really value your opinion and your friendship. Your comment is just what I needed to hear today.


text:
Обо́зівка — село в Україні, у Погребищенській міській громаді Вінницького району Вінницької області. Населення становить 94 особи (2001).

Географія
Село Обозівка розташоване у лісостеповій зоні центральної частини північної області Придніпровської височини у північно-східній частині Вінницької області. Село лежить на правому березі річки Рось. На півдні й півночі від села розташовані ліси. Ліс на півночі має назву Липник. Крім того, на захід від села, на кордоні з селом Дзюньковом, розташований невеличкий Поповий ліс, що входить до меж Дзюнькова.

На заході Обозівка межує з селом Дзюньковом, на схід від неї розташовані села Збаржівка і Травневе.

Історія
Село Обозівка описується у спогадах араба Булос Ібн аз-Заїма аль-Халебі (Павла Халебського) під час подорожі у 1654 р. патріарха Макарія III.

У 19 столітті Обозівка входила до складу містечка Дзюнькова, будучи одним з шести його кутків, себто частин. Однак, наприкінці 19 століття Обозівка виділилася в окремий населений пункт і з того часу іменувалася як село Обозівка.

У 1900 році в селі було 94 подвір'я, мешканців налічувалося 734 особи, з яких чоловіків — 362 особи, жінок — 372 особи. Головним зайняттям населення було хліборобство. У селі лічилося землі — 605 десятин, з яких належало поміщикам 365 десятин, селянам — 240 десятин. Село відносилося до категорії власницьких сіл й належало дворянину М. О. Шубовичу, будучи в оренді у Ю. Ф. Крачкевича. Система господарювання в Крачкевича й в селян — трипільна. У селі були початкова школа, водяний млин з чотирма поставами, що належав Шубовичу й був у оренді в такого собі М. Я. Спектора. На млину працювало троє чоловіків з місцевих селян. У селі також була цегельня, що також належала Шубовичу. Вона працювала під управлінням майстра І. Артемчука, на ній працювало п'ятеро робітників. В селі була також пожежна частина, що складалася з 1 насоса, 4 бочок, 2 багрів і 2 драбин й утримувалася селянською громадою з витратою 6 рублів на рік.

Під час Другої світової війни Обозівка в період з другої половини липня 1941 року була окупована фашистськими військами. Червоною армією село було зайняте 1 січня 1944 року.

Адміністративна приналежність
Від часу утворення наприкінці 19 століття Обозівка входила до Дзюньківської волості Бердичівського повіту Київської губернії.

Населення
За даними перепису 2001 року населення села становило 94 особи, із них 100 % зазначили рідною мову українську.

Транспорт
Через село проходить маршрутний автобус з Погребищ до сіл Борщагівка й Довгалівка.

Примітки

Література
 Зба́ржівка // Історія міст і сіл Української РСР: у 26 т. / П. Т. Тронько (голова Головної редколегії). — К. : Головна редакція УРЕ АН УРСР, 1967—1974 — том Вінницька область / А. Ф. Олійник (голова редколегії тому), 1972 : 788с. — С.529

Посилання

 Погода в селі Обозівка

Села Вінницької області
Населені пункти Вінницького району

redpajama_set_name: RedPajamaWikipedia


text:
A Blog About Facts of the World
Home » Economy » 10 Facts about Cotton Mills
10 Facts about Cotton Mills
Thursday, March 31st 2016. | Economy
Let's find out the interesting information about the factory used to produce cloth or yarn on Facts about Cotton Mills. The production is conducted by using the weaving and spinning machinery. The cotton is a material to produce cloth, thread and yarn. The development of the factory system was contributed by the presence by the cotton mill in the industrial revolution. Here are some facts to notice about the cotton mills:
Facts about Cotton Mills 1: the early cotton mills
The animal was used to power the earlier cotton mills. But some of them were established near the streams or rivers so that the cotton mills could be powered by the flowing or moving waters. Most of them were located in the rural regions.
Facts about Cotton Mills 2: the invention of steam engines
The growth of cotton mills was higher due to the invention of Boulton and Watt's steam engines in 1781.
Cotton Mills Facts
Facts about Cotton Mills 3: the urban areas
At first, most cotton mills were located in the rural areas. Then they were situated in the urban regions due to the steam engine's invention. The most notable mills were located in Manchester.
Facts about Cotton Mills 4: the machine tool
The larger cotton mills were built because of the usage of the machine tool industry. Therefore, the spinning process could be conducted easily.
Cotton Mills Image
Facts about Cotton Mills 5: Manchester
Manchester was considered as a commercial city because of the development of cotton mills. The urban population was expanded because the cotton mills needed more workers.
Facts about Cotton Mills 6: the child labor
The women and girls worked in the cotton mills. They also employed the child labor.
Cotton Mills Pic
Facts about Cotton Mills 7: Factory Acts
The Factory Acts were passed in England to regulate the cotton mills for most of them provided the labors with poor conditions.
Facts about Cotton Mills 8: the spread of cotton mill
At first, the development of cotton mill was considered as a part of a Lancashire phenomenon. Then it spread to New England and southern states in America. Check facts about cotton fabric here.
Cotton Mills
Facts about Cotton Mills 9: the risk
The main risk in the main cotton mills was the fire. In 1790s, the fireproof building in the cotton mill was built. Get facts about cotton here.
Facts about Cotton Mills 10: the construction of the fireproof building
The beams and columns in the fireproof cotton mills were made in cast iron. Some mills were equipped with timber construction.
Facts about Cotton Mills
Are you interested reading facts about cotton mills?
tags: Cotton Mills, Facts about Cotton Mills
Related For 10 Facts about Cotton Mills
10 Facts about China's Economy
Get the interesting Facts about China's Economy in the following post below. By the nominal GDP, China is the
10 Facts about Buying a Car
If this is the first time for you to buy a new car, you need to know Facts about
10 Facts about Credit Cards
Let me show you interesting information about a method of payment on facts about credit cards. The cardholders are
10 Facts about Adam Smith
Facts about Adam Smith talk about the famous author, moralist, and philosopher. If we talk about Adam Smith, we
10 Facts about Emile Waldteufel
10 Facts about Emile Durkheim
10 Facts about Emiliano Zapata
10 Facts about Emeralds
10 Facts about Brazil's Economy
10 Facts about Agricultural Product
10 Facts about Credit Card Debt
10 Facts about Coal Mining in Bedwo
About Us Contact Us Disclaimer Privacy Policy Sitemap
Copyright © 2017 Fact File


Hatteras Indians in New Bern, NC???
Note – if you have an original of this paper WITH page 30, please, PLEASE, send me page 30.
Mr. Thomas makes two very interesting statements in his paper. Unfortunately, he is deceased, or I could ask him about his sources. But since I can't, I'm asking if any of you have any information that might be useful. Let's take a look at what he says.
Given my numerous years of Native research focused on the eastern tribes, I was surprised to see this comment, as I've never heard of this before. I would love to be able to find and track some confirmed Hatteras families, but who are they?
I do know that for years, the Lumbee have claimed Hatteras ancestors of course, and that the older people could go back to the coastland and knew where their land was. Of course, those "older people" were "older people" a long time ago, in the late 1800s, so now that knowledge, whatever it was, is long gone. But maybe these two items are related. If anyone knows any specifics about the Lumbee and their eastern coastal relations, please, please, let me know.
To be sure, there are just about as many origin stories or hypothesis for the word Melungeon as there are drops of rain, but Thomas was an academic with no horse in this race. He obviously had found something, but what? The first written account of the word Melungeon is found in the Stoney Creek Church Minutes of Russell (now Scott) County, Virginia in 1813. According to various court records, the term was apparently used in both the Robeson County areas of North Carolina and the adjacent border counties of South Carolina in reference to people living there in the late 1700s. So it's entirely possible that the term might have originated in the New Bern area.
These two statements, combined, if in fact they can be associated, certainly generate more questions than answers. Does anyone have any research that might suggest what it was that Mr. Thomas came across?
This entry was posted in Cherokee, Hatteras, Lumbee, Melungeon, North Carolina. Bookmark the permalink.
4 Responses to Hatteras Indians in New Bern, NC???
My 4th great-grandfather, Michael W. Taylor, was born on December 23, 1789 in the Core Creek/Flat Swamp area of Craven County, NC. His mother's name is supposedly Susannah and his father's name is an Unknown Taylor. I suspect that his mother was mixed-blood Coree Indian, since they intermarried and assimilated with the local European population.


text:
Report of the ... Annual Meeting of the American Bar Association, Volum 38
Av American Bar Association
Brought forward
Aug. 18. By cash paid Howe Addressing Co., Philadelphia, Pa., for cash advanced for postage and for services for Membership Committee
19. By cash paid Lithograph & Envelope
Co., Albany, N. Y., for 500 two
cent stamped envelopes and print-
ing card on same
19. By cash paid Ambrose Fowler, New
York, photographer, for photo-
graphs of Lord Haldane, M.
Labori, etc., for use of Committee
on Publicity
19. By cash paid Joseph P. Hogan,
Albany, N. Y., sign painter, for
placards for use of dinner com-
mittee
20. By cash paid Thomas W. Shelton,
Norfolk, Va., to refund his dis-
bursements on behalf of the Com-
mittee on Uniform Judicial Pro-
cedure
25. By cash paid Frederick E. Wadhams,
Albany, N. Y., to refund his dis-
bursements in going to Montreal,
August 14-17, to make final ar-
rangements for annual meeting...
By cash paid United States Express
Co., Baltimore, Md., for ship-
ments made by Secretary during
the year 1912-1913 exclusive of
shipment of annual report......
Carried forward
MONTREAL, September 2, 1913.
We have examined the foregoing report, and checked it with the book accounts and vouchers, and find the report to be correct.
WM. P. RUDD,
ROME G. BROWN,
Auditing Committee.
MONTREAL, CANADA, September 1, 1913.
The Executive Committee respectfully reports that under the last clause of Art. IV of the Constitution, providing for the election of members by the Executive Committee between meetings when nominated by a majority of the Vice-President and Local Council, over 2000 new members were elected.
The committee further reports that in accordance with By-Law XII, appropriations were made for the use of the committees of 1912-1913 not exceeding the following amounts:
$900 to Comparative Law Bureau.
$150 to Comparative Law Bureau (special).
$1000 to Commissioners on Uniform State Laws.
$1000 to Section of Legal Education.
$200 to Committee on Commercial Law.
$750 to Committee to Suggest Remedies and Formulate Proposed Laws to Prevent Delay and Unnecessary Cost of Litigation.
$500 to Committee on Compensation for Industrial Accidents.
$250 to Committee on Legal Education and Admissions to
Bar.
$250 to Committee on Insurance Law.
$250 to Committee on Publicity.
$600 to Committee to Oppose Judicial Recall.
$300 to Committee on Legislative Drafting.
$3476.95 to Committee on Membership (the amount to be payable monthly upon statements to be submitted by the Chairman of the Committee to the Treasurer).
$450 to Committee on Uniform Judicial Procedure.
The special appropriation of the Comparative Law Bureau was made to cover the cost of translating the Civil Code of the Argentine Republic. In connection with the appropriation of $750 to the Section of Legal Education, it was ordered that the unex
pended balance of last year's appropriation be re-appropriated for the use of that section, and that the unexpended balance of last year's appropriation for the Committee to Oppose Recall of Judges be re-appropriated for the use of that committee.
The Treasurer was authorized to pay certain bills incurred by the late Arthur Steuart in connection with the Patent Committee.
The sum of $400 was appropriated for extra services rendered by Mr. Clark, Miss Davidson, Miss McCourt and Mr. Pohlmann, the clerical force employed by the Secretary, and a similar appropriation of $100 for Mr. Caplan, an employe of the Treasurer.
The Treasurer was directed to pay the expenses incurred by Mr. Carl F. Geilfuss in arranging hotel accommodations for the members in Milwaukee, and also the expenses of Charles J. O'Connor, Chairman of the special Committee on Increase of Membership, incurred by him in connection with the work of that committee. Mr. O'Connor's expenses amounted to $1,759.85.
The Treasurer was authorized to pay the expenses incurred by the delegate who represented the Association at the meeting of the American Roads Congress at Atlantic City, N. J., September 30 to October 5, 1912.
The resolution offered at the Milwaukee meeting that an office of the Association be maintained in the City of Chicago was considered, and the matter was laid on the table.
The amount to be charged for the 1913 and subsequent Annual Reports of the Association was fixed at $2 for cloth bound copies, and $1.50 for paper bound copies.
In pursuance of a resolution passed at the January meeting of the Executive Committee the chief judge of the court of last resort in each state, the presiding judge of each Federal Circuit Court of Appeals, the chief justice of the Court of Appeals of the District of Columbia, and the chief judge of the Court of Commerce were invited to attend the meeting of the Association at Montreal and be its guests at the annual banquet; and if in any instance the chief judge could not attend personally, that he delegate some member of his court to represent it. The Committee on Uniform Judicial Procedure was authorized also to invite


Maximum file size allowed is 15360 KB.
Currently 516 unique user posts.
What'd you guys think of this show?
Pancakes In Space: The Musical.
Loved it, wished the cast had gone on to be better known than they are.


In 2012, Metalsinos is completing 25 years of activities. The growth achieved throughout these years is also an achievement of all its friends, customers, and employees. We would like to say "thank you very much!" Thanks for the trust, for the partnership, in short, for all the relationship built.