See dynasm.lua for full copyright notice.

*/

#include <stddef.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>

#define DASM_ARCH		"x86"

#ifndef DASM_EXTERN
#define DASM_EXTERN(a,b,c,d)	0
#endif

/* Action definitions.

enum {
  DASM_DISP = 233,
  DASM_IMM_S, DASM_IMM_B, DASM_IMM_W, DASM_IMM_D, DASM_IMM_WB, DASM_IMM_DB,
  DASM_VREG, DASM_SPACE, DASM_SETLABEL, DASM_REL_A, DASM_REL_LG, DASM_REL_PC,
  DASM_IMM_LG, DASM_IMM_PC, DASM_LABEL_LG, DASM_LABEL_PC, DASM_ALIGN,
  DASM_EXTERN, DASM_ESC, DASM_MARK, DASM_SECTION, DASM_STOP
};

/* Maximum number of section buffer positions for a single dasm_put() call. */

#define DASM_MAXSECPOS		25

/* DynASM encoder status codes.

Action list offset or number are or'ed in. */

#define DASM_S_OK		0x00000000
#define DASM_S_NOMEM		0x01000000
#define DASM_S_PHASE		0x02000000
#define DASM_S_MATCH_SEC	0x03000000
#define DASM_S_RANGE_I		0x11000000
#define DASM_S_RANGE_SEC	0x12000000
#define DASM_S_RANGE_LG		0x13000000
#define DASM_S_RANGE_PC		0x14000000
#define DASM_S_RANGE_VREG	0x15000000
#define DASM_S_UNDEF_L		0x21000000
#define DASM_S_UNDEF_PC		0x22000000

/* Macros to convert positions (8 bit section + 24 bit index). */

#define DASM_POS2IDX(pos)	((pos)&0x00ffffff)
#define DASM_POS2BIAS(pos)	((pos)&0xff000000)
#define DASM_SEC2POS(sec)	((sec)<<24)
#define DASM_POS2SEC(pos)	((pos)>>24)
#define DASM_POS2PTR(D, pos)	(D->sections[DASM_POS2SEC(pos)].rbuf + (pos))

/* Action list type. */

typedef const unsigned char *dasm_ActList;

/* Per-section structure. */

typedef struct dasm_Section {
  int *rbuf;		/* Biased buffer pointer (negative section bias). */

size_t bsize;		/* Buffer size in bytes. */

int epos;		/* End of biased buffer position - max single put. */

int ofs;		/* Byte offset into section. */

} dasm_Section;

/* Core structure holding the DynASM encoding state. */

struct dasm_State {
  size_t psize;			/* Allocated size of this structure. */

dasm_ActList actionlist;	/* Current actionlist pointer. */

int *lglabels;		/* Local/global chain/pos ptrs. */

  size_t lgsize;
  int *pclabels;		/* PC label chains/pos ptrs. */

  size_t pcsize;
  void **globals;		/* Array of globals (bias -10). */

dasm_Section *section;	/* Pointer to active section. */

size_t codesize;		/* Total size of all code sections. */

int maxsection;		/* 0 <= sectionidx < maxsection. */

dasm_Section sections[1];	/* All sections.

};

/* The size of the core structure depends on the max.

#define DASM_PSZ(ms)	(sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section))

/* Initialize DynASM state. */

void dasm_init(Dst_DECL, int maxsection)
{
  dasm_State *D;
  size_t psz = 0;
  int i;
  Dst_REF = NULL;
  DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection));
  D = Dst_REF;
  D->psize = psz;
  D->lglabels = NULL;
  D->lgsize = 0;
  D->pclabels = NULL;
  D->pcsize = 0;
  D->globals = NULL;
  D->maxsection = maxsection;
  for (i = 0; i < maxsection; i++) {
    D->sections[i].buf = NULL;  /* Need this for pass3. */

    D->sections[i].rbuf = D->sections[i].buf - DASM_SEC2POS(i);
    D->sections[i].bsize = 0;
    D->sections[i].epos = 0;  /* Wrong, but is recalculated after resize. */

void dasm_free(Dst_DECL)
{
  dasm_State *D = Dst_REF;
  int i;
  for (i = 0; i < D->maxsection; i++)
    if (D->sections[i].buf)
      DASM_M_FREE(Dst, D->sections[i].buf, D->sections[i].bsize);
  if (D->pclabels) DASM_M_FREE(Dst, D->pclabels, D->pcsize);
  if (D->lglabels) DASM_M_FREE(Dst, D->lglabels, D->lgsize);
  DASM_M_FREE(Dst, D, D->psize);
}

/* Setup global label array.

void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl)
{
  dasm_State *D = Dst_REF;
  D->globals = gl - 10;  /* Negative bias to compensate for locals. */

  DASM_M_GROW(Dst, int, D->lglabels, D->lgsize, (10+maxgl)*sizeof(int));
}

/* Grow PC label array.

Can be called after dasm_setup(), too. */

void dasm_growpc(Dst_DECL, unsigned int maxpc)
{
  dasm_State *D = Dst_REF;
  size_t osz = D->pcsize;
  DASM_M_GROW(Dst, int, D->pclabels, D->pcsize, maxpc*sizeof(int));
  memset((void *)(((unsigned char *)D->pclabels)+osz), 0, D->pcsize-osz);
}

/* Setup encoder. */

void dasm_setup(Dst_DECL, const void *actionlist)
{
  dasm_State *D = Dst_REF;
  int i;
  D->actionlist = (dasm_ActList)actionlist;
  D->status = DASM_S_OK;
  D->section = &D->sections[0];
  memset((void *)D->lglabels, 0, D->lgsize);
  if (D->pclabels) memset((void *)D->pclabels, 0, D->pcsize);
  for (i = 0; i < D->maxsection; i++) {
    D->sections[i].pos = DASM_SEC2POS(i);
    D->sections[i].ofs = 0;
  }
}

#ifdef DASM_CHECKS
#define CK(x, st) \
  do { if (!(

x)) { \
    D->status = DASM_S_##st|(int)(p-D->actionlist-1); return; } } while (0)
#define CKPL(kind, st) \
  do { if ((size_t)((char *)pl-(char *)D->kind##labels) >= D->kind##size) { \
    D->status=DASM_S_RANGE_##st|(int)(p-D->actionlist-1); return; } } while (0)
#else
#define CK(x, st)	((void)0)
#define CKPL(kind, st)	((void)0)
#endif

/* Pass 1: Store actions and args, link branches/labels, estimate offsets. */

void dasm_put(Dst_DECL, int start, ...)
{
  va_list ap;
  dasm_State *D = Dst_REF;
  dasm_ActList p = D->actionlist + start;
  dasm_Section *sec = D->section;
  int pos = sec->pos, ofs = sec->ofs, mrm = -1;
  int *b;

  if (pos >= sec->epos) {
    DASM_M_GROW(Dst, int, sec->buf, sec->bsize,
      sec->bsize + 2*DASM_MAXSECPOS*sizeof(int));
    sec->rbuf = sec->buf - DASM_POS2BIAS(pos);
    sec->epos = (int)sec->bsize/sizeof(int) - DASM_MAXSECPOS+DASM_POS2BIAS(pos);
  }

  b = sec->rbuf;
  b[pos++] = start;

  va_start(ap, start);
  while (1) {
    int action = *p++;
    if (action < DASM_DISP) {
      ofs++;
    } else if (action <= DASM_REL_A) {
      int n = va_arg(ap, int);
      b[pos++] = n;
      switch (action) {
      case DASM_DISP:
	if (n == 0) { if (mrm < 0) mrm = p[-2]; if ((mrm&7) !

= 5) break; }
      case DASM_IMM_DB: if (((n+128)&-256) == 0) goto ob;
      case DASM_REL_A: /* Assumes ptrdiff_t is int. !

x64 */
      case DASM_IMM_D: ofs += 4; break;
      case DASM_IMM_S: CK(((n+128)&-256) == 0, RANGE_I); goto ob;
      case DASM_IMM_B: CK((n&-256) == 0, RANGE_I); ob: ofs++; break;
      case DASM_IMM_WB: if (((n+128)&-256) == 0) goto ob;
      case DASM_IMM_W: CK((n&-65536) == 0, RANGE_I); ofs += 2; break;
      case DASM_SPACE: p++; ofs += n; break;
      case DASM_SETLABEL: b[pos-2] = -0x40000000; break;  /* Neg.

= 2), RANGE_VREG);
	if (*p < 0x40 && p[1] == DASM_DISP) mrm = n;
	if (*p < 0x20 && (n&7) == 4) ofs++;
	switch ((*p++ >> 3) & 3) {
	case 3: n |= b[pos-3];
	case 2: n |= b[pos-2];
	case 1: if (n <= 7) { b[pos-1] |= 0x10; ofs--; }
	}
	continue;
      }
      mrm = -1;
    } else {
      int *pl, n;
      switch (action) {
      case DASM_REL_LG:
      case DASM_IMM_LG:
	n = *p++; pl = D->lglabels + n;
	/* Bkwd rel or global. */

	if (n <= 246) { CK(n>=10||*pl<0, RANGE_LG); CKPL(lg, LG); goto putrel; }
	pl -= 246; n = *pl;
	if (n < 0) n = 0;  /* Start new chain for fwd rel if label exists. */

	goto linkrel;
      case DASM_REL_PC:
      case DASM_IMM_PC: pl = D->pclabels + va_arg(ap, int); CKPL(pc, PC);
      putrel:
	n = *pl;
	if (n < 0) {  /* Label exists.

	  b[pos] = -n;
	} else {
      linkrel:
	  b[pos] = n;  /* Else link to rel chain, anchored at label. */

	  *pl = pos;
	}
	pos++;
	ofs += 4;  /* Maximum offset needed. */

	if (action == DASM_REL_LG || action == DASM_REL_PC)
	  b[pos++] = ofs;  /* Store pass1 offset estimate. */

	break;
      case DASM_LABEL_LG: pl = D->lglabels + *p++; CKPL(lg, LG); goto putlabel;
      case DASM_LABEL_PC: pl = D->pclabels + va_arg(ap, int); CKPL(pc, PC);
      putlabel:
	n = *pl;  /* n > 0: Collapse rel chain and replace with label pos. */

	while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = pos; }
	*pl = -pos;  /* Label exists now. */

b[pos++] = ofs;  /* Store pass1 offset estimate. */

	break;
      case DASM_ALIGN:
	ofs += *p++;  /* Maximum alignment needed (arg is 2**n-1). */

	break;
      case DASM_EXTERN: p += 2; ofs += 4; break;
      case DASM_ESC: p++; ofs++; break;
      case DASM_MARK: mrm = p[-2]; break;
      case DASM_SECTION:
	n = *p; CK(n < D->maxsection, RANGE_SEC); D->section = &D->sections[n];
      case DASM_STOP: goto stop;
      }
    }
  }
stop:
  va_end(ap);
  sec->pos = pos;
  sec->ofs = ofs;
}
#undef CK

/* Pass 2: Link sections, shrink branches/aligns, fix label offsets. */

int dasm_link(Dst_DECL, size_t *szp)
{
  dasm_State *D = Dst_REF;
  int secnum;
  int ofs = 0;

#ifdef DASM_CHECKS
  *szp = 0;
  if (D->status !

= DASM_S_OK) return D->status;
  {
    int pc;
    for (pc = 0; pc*sizeof(int) < D->pcsize; pc++)
      if (D->pclabels[pc] > 0) return DASM_S_UNDEF_PC|pc;
  }
#endif

  { /* Handle globals not defined in this translation unit. */

    int idx;
    for (idx = 10; idx*sizeof(int) < D->lgsize; idx++) {
      int n = D->lglabels[idx];
      /* Undefined label: Collapse rel chain and replace with marker (< 0). */

      while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = -idx; }
    }
  }

  /* Combine all code sections.

  for (secnum = 0; secnum < D->maxsection; secnum++) {
    dasm_Section *sec = D->sections + secnum;
    int *b = sec->rbuf;
    int pos = DASM_SEC2POS(secnum);
    int lastpos = sec->pos;

    while (pos !

= lastpos) {
      dasm_ActList p = D->actionlist + b[pos++];
      while (1) {
	int op, action = *p++;
	switch (action) {
	case DASM_REL_LG: p++; op = p[-3]; goto rel_pc;
	case DASM_REL_PC: op = p[-2]; rel_pc: {
	  int shrink = op == 0xe9 ?

4 : 0);
	  if (shrink) {  /* Shrinkable branch opcode? */

	    int lofs, lpos = b[pos];
	    if (lpos < 0) goto noshrink;  /* Ext global? */

	    lofs = *DASM_POS2PTR(D, lpos);
	    if (lpos > pos) {  /* Fwd label: add cumulative section offsets. */

	      int i;
	      for (i = secnum; i < DASM_POS2SEC(lpos); i++)
		lofs += D->sections[i].ofs;
	    } else {
	      lofs -= ofs;  /* Bkwd label: unfix offset. */

	    }
	    lofs -= b[pos+1];  /* Short branch ok? */

if (lofs >= -128-shrink && lofs <= 127) ofs -= shrink;  /* Yes. */

else { noshrink: shrink = 0; }  /* No, cannot shrink op. */

	  }
	  b[pos+1] = shrink;
	  pos += 2;
	  break;
	}
	case DASM_SPACE: case DASM_IMM_LG: case DASM_VREG: p++;
	case DASM_DISP: case DASM_IMM_S: case DASM_IMM_B: case DASM_IMM_W:
	case DASM_IMM_D: case DASM_IMM_WB: case DASM_IMM_DB:
	case DASM_SETLABEL: case DASM_REL_A: case DASM_IMM_PC: pos++; break;
	case DASM_LABEL_LG: p++;
	case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */

case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */

	case DASM_EXTERN: p += 2; break;
	case DASM_ESC: p++; break;
	case DASM_MARK: break;
	case DASM_SECTION: case DASM_STOP: goto stop;
	}
      }
      stop: (void)0;
    }
    ofs += sec->ofs;  /* Next section starts right after current section. */

  }

  D->codesize = ofs;  /* Total size of all code sections */
  *szp = ofs;
  return DASM_S_OK;
}

#define dasmb(x)	*cp++ = (unsigned char)(x)
#ifndef DASM_ALIGNED_WRITES
#define dasmw(x) \
  do { *((unsigned short *)cp) = (unsigned short)(x); cp+=2; } while (0)
#define dasmd(x) \
  do { *((unsigned int *)cp) = (unsigned int)(x); cp+=4; } while (0)
#else
#define dasmw(x)	do { dasmb(x); dasmb((x)>>8); } while (0)
#define dasmd(x)	do { dasmw(x); dasmw((x)>>16); } while (0)
#endif

/* Pass 3: Encode sections. */

int dasm_encode(Dst_DECL, void *buffer)
{
  dasm_State *D = Dst_REF;
  unsigned char *base = (unsigned char *)buffer;
  unsigned char *cp = base;
  int secnum;

  /* Encode all code sections.

  for (secnum = 0; secnum < D->maxsection; secnum++) {
    dasm_Section *sec = D->sections + secnum;
    int *b = sec->buf;
    int *endb = sec->rbuf + sec->pos;

    while (b !

= endb) {
      dasm_ActList p = D->actionlist + *b++;
      unsigned char *mark = NULL;
      while (1) {
	int action = *p++;
	int n = (action >= DASM_DISP && action <= DASM_ALIGN) ? *

b++ : 0;
	switch (action) {
	case DASM_DISP: if (!

mark) mark = cp; {
	  unsigned char *mm = mark;
	  if (*p !

= DASM_IMM_WB) mark = NULL;
	  if (n == 0) { int mrm = mm[-1]&7; if (mrm == 4) mrm = mm[0]&7;
	    if (mrm !

= 0) goto wd; else mm[-1] -= 0x40;
	}
	case DASM_IMM_S: case DASM_IMM_B: wb: dasmb(n); break;
	case DASM_IMM_DB: if (((n+128)&-256) == 0) {
	    db: if (!

mark) mark = cp; mark[-2] += 2; mark = NULL; goto wb;
	  } else mark = NULL;
	case DASM_IMM_D: wd: dasmd(n); break;
	case DASM_IMM_WB: if (((n+128)&-256) == 0) goto db; else mark = NULL;
	case DASM_IMM_W: dasmw(n); break;
	case DASM_VREG: {
	  int t = *p++;
	  unsigned char *ex = cp - (t&7);
	  if ((n & 8) && t < 0xa0) {
	    if (*ex & 0x80) ex[1] ^= 0x20 << (t>>6); else *ex ^= 1 << (t>>6);
	    n &= 7;
	  } else if (n & 0x10) {
	    if (*ex & 0x80) {
	      *ex = 0xc5; ex[1] = (ex[1] & 0x80) | ex[2]; ex += 2;
	    }
	    while (++ex < cp) ex[-1] = *ex;
	    if (mark) mark--;
	    cp--;
	    n &= 7;
	  }
	  if (t >= 0xc0) n <<= 4;
	  else if (t >= 0x40) n <<= 3;
	  else if (n == 4 && t < 0x20) { cp[-1] ^= n; *cp++ = 0x20; }
	  cp[-1] ^= n;
	  break;
	}
	case DASM_REL_LG: p++; if (n >= 0) goto rel_pc;
	  b++; n = (int)(ptrdiff_t)D->globals[-n];
	case DASM_REL_A: rel_a: n -= (int)(ptrdiff_t)(cp+4); goto wd; /* !

x64 */
	case DASM_REL_PC: rel_pc: {
	  int shrink = *b++;
	  int *pb = DASM_POS2PTR(D, n); if (*pb < 0) { n = pb[1]; goto rel_a; }
	  n = *pb - ((int)(cp-base) + 4-shrink);
	  if (shrink == 0) goto wd;
	  if (shrink == 4) { cp--; cp[-1] = *cp-0x10; } else cp[-1] = 0xeb;
	  goto wb;
	}
	case DASM_IMM_LG:
	  p++; if (n < 0) { n = (int)(ptrdiff_t)D->globals[-n]; goto wd; }
	case DASM_IMM_PC: {
	  int *pb = DASM_POS2PTR(D, n);
	  n = *pb < 0 ?

pb[1] : (*pb + (int)(ptrdiff_t)base);
	  goto wd;
	}
	case DASM_LABEL_LG: {
	  int idx = *p++;
	  if (idx >= 10)
	    D->globals[idx] = (void *)(base + (*p == DASM_SETLABEL ? *

b : n));
	  break;
	}
	case DASM_LABEL_PC: case DASM_SETLABEL: break;
	case DASM_SPACE: { int fill = *p++; while (n--) *cp++ = fill; break; }
	case DASM_ALIGN:
	  n = *p++;
	  while (((cp-base) & n)) *cp++ = 0x90; /* nop */
	  break;
	case DASM_EXTERN: n = DASM_EXTERN(Dst, cp, p[1], *p); p += 2; goto wd;
	case DASM_MARK: mark = cp; break;
	case DASM_ESC: action = *p++;
	default: *cp++ = action; break;
	case DASM_SECTION: case DASM_STOP: goto stop;
	}
      }
      stop: (void)0;
    }
  }

  if (base + D->codesize !

    return DASM_S_PHASE;
  return DASM_S_OK;
}

/* Get PC label offset. */

int dasm_getpclabel(Dst_DECL, unsigned int pc)
{
  dasm_State *D = Dst_REF;
  if (pc*sizeof(int) < D->pcsize) {
    int pos = D->pclabels[pc];
    if (pos < 0) return *DASM_POS2PTR(D, -pos);
    if (pos > 0) return -1;  /* Undefined. */

  }
  return -2;  /* Unused or out of range. */

}

#ifdef DASM_CHECKS
/* Optional sanity checker to call between isolated encoding steps. */

int dasm_checkstep(Dst_DECL, int secmatch)
{
  dasm_State *D = Dst_REF;
  if (D->status == DASM_S_OK) {
    int i;
    for (i = 1; i <= 9; i++) {
      if (D->lglabels[i] > 0) { D->status = DASM_S_UNDEF_L|i; break; }
      D->lglabels[i] = 0;
    }
  }
  if (D->status == DASM_S_OK && secmatch >= 0 &&
      D->section !

= &D->sections[secmatch])
    D->status = DASM_S_MATCH_SEC|(int)(D->section-D->sections);
  return D->status;
}
#endif


Post by Vermin King on Oct 28, 2015 10:24:07 GMT -9

I suppose they could be 'Wilhelm' goats...

Is anyone going to do a chariot driver?

I think I could do a harness for the goats.

On my build, I made a spacer for between the goats that the chariot tongue sits on.

Post by Vermin King on Oct 30, 2015 16:03:52 GMT -9

This is where I am at.

Goats now have chest plates from Mesper and a rather plain harness.

The little piece is the spacer I used between the goats to rest the chariot tongue on.

I glued it to the front legs at a height I thought was 'about right'

If we had a driver, this would be ready for the horde

There are no strangers in this world,only people I haven't embarrassed ... yet!

Post by mproteau on Oct 30, 2015 17:00:04 GMT -9

Want some help with layout (to simplify cutting and assembling, and to make cutfiles)?

That image doesn't appear to be 300dpi... Not sure if I could get right onto helping out, but certainly I would do what I could.

Post by mesper on Oct 31, 2015 2:23:09 GMT -9

Big/extended harness - test version based on Vermin King simplified one.

Some details like stitches are too small, so almost invincible invisible after rescaling...The "central" or "internal" part of harness could be added as modding element with various colours - so could be changed according to dwarven driver clan colours (ie.

Then not sure but I think that gold/bronze metal parts / buckles might look better (or at least more "dwarvish" style)?

(BTW got some idea for chariot driver, will post some preliminary version later perhaps)

Post by mesper on Oct 31, 2015 14:27:52 GMT -9

Very first attempt...

Dwarven chariot driver - Master Chief, Champion or just trumpeter?

Despite some obvious sketch issues/errors - IMHO too much details here (in comparison with Chariot and Goat), then to maintain art-style still some more details are needed here and there...So I'm considering kinda shortcut solution, which is covering torso with a shield - as a bonus it would be definitely easier and faster to colour/texturise:)

Post by mesper on Nov 13, 2015 17:17:10 GMT -9

Well, there are some obvious mistakes visible: like lack of B-side thumb, then exactly the same A-B tunic borderings and folds(still some small/not important details are OK, vide runic signs on tunic border:)

Then actually I think that boots might remain the same for both A and B side (OK, with some minor straps variations perhaps)Additionally some slight changes/additions could be made in order to distinguish A-B sides (like some small helmet and horn changes?)

Post by mesper on Dec 2, 2015 18:09:32 GMT -9

Step by step (so slooowly:)...

Basic A-B sides done (still some more shadow/light/texture details should be added here and there)However not convinced yet: with or without a shield (so just to prove that laziness is not the major factor /at least in this particular case/ you can see coloured and textured figurine behind the shield's "placeholder"

Post by Vermin King on Dec 2, 2015 18:31:42 GMT -9

Totally not a historical comment, but in movies (which are always full of inaccuracies), and in History Channel programs (only slightly more factual) in a chariot, you may see a rider with a shield slung across his back, but I don't remember seeing a rider with a shield on his arm.

Generally in those shows, you don't see a shield at all.

That's not to say that real chariot riders didn't carry a shield.

Just a comment, right or wrong

There are no strangers in this world,only people I haven't embarrassed ... yet!

Post by mesper on Dec 9, 2015 15:45:09 GMT -9

Shoutbox

cowboyleland: Now I have seen it.

It doesn't advance our hobby, but anyone with half a brain who wanted 2nd rate figures could easily figure this out for themselves so I guess he isn't doing any harm.

Mar 19, 2019 17:53:59 GMT -9

berneart76: well, this is fun, (not) transferring all my papercrafting sets into the cloud.

The stuff I got from DriveTrhruRPG was simple with their library desktop app,but my other stuff, sometimes with multiple duplicate copies is entertaining.

Mar 1, 2019 15:44:32 GMT -9

berneart76: Vermin King I usually use a mix of drybrush/watercolor/photocopy and occasionally posterizing at different levels of opacity.

Feb 26, 2019 20:46:54 GMT -9

berneart76: Vermin King, that's similar to the enhancing that I do on my texturing.

I've found that sometimes I need to scale up or scale down the image (usually by 50 or 25 percent down or 200 or 300 percent up) to make get the enhancements to look "right"Feb 26, 2019 20:44:53 GMT -9

Vermin King: On the zebras, I did multiple enhancements and cartoon filters and used them at 100%, and they still didn't look that different than the photosFeb 26, 2019 12:27:26 GMT -9

Vermin King: When I make a figure or terrain piece based on a photo, I clean it up and align things to look 'right', then I create another layer and do enhancing and cartoonizing on it.

I then adjust opacity over the photo image until it looks good.

On the zebras, Feb 26, 2019 12:26:35 GMT -9

Vermin King: berneart76, do you mean giving them green or purple manes and tails?

maybe a cig hanging out of their mouths?Feb 26, 2019 12:24:18 GMT -9

Vermin King: And due to the snow, I'm off tonight.

I am going to miss the cash on the paycheck, but I'm glad they want their employees to be safeFeb 15, 2019 10:52:24 GMT -9

ignatious: Actually I was referring to the two previous posts.

I was trying to be subtle in order to sublimate the crassness.

Read them again, but in Mel Brooks voice while he is winking, and nudging the person to his right.

Feb 9, 2019 13:38:11 GMT -9

cowboyleland: We hadn't had snow for a few days.

Last night the plow came down my street and did nothing but fill every ones driveways back in.

Feb 8, 2019 7:48:16 GMT -9

Vermin King: In KC we had an ice storm (with thunder sleet) the other night.

Left things drivable, but last night the plow came down my street.

Might as well have ran a Zamboni...Feb 8, 2019 6:42:32 GMT -9


DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

 Further scope of applicability of the present invention will become apparent from the detailed description given hereinafter. However, it should be understood that the detailed description and specific examples, while indicating preferred embodiments of the invention, are given by way of illustration only, since various changes and modifications within the spirit and scope of the invention will become apparent to those skilled in the art from this detailed description.

 FIG. 1 shows an inventive floor element essentially in a transportation state. When in use, the element 1 has a generally flat, rectangular shape and is comprised of a thin aluminium foil 10 of corresponding size and a thickness that is less than 200 m, preferably a thickness of 100 m.

 The foil 10 is carried by a floor sheet 11 , e.g. a cellular sheet, particle board, plaster board, or a technical equivalent. The sheet 11 includes through-extending, mutually parallel slits 12 , which are also parallel with the longitudinal edges of the sheet 11 . The slits divide the sheet 11 into mutually parallel, longitudinally extending strips 13 , wherewith the side strips of the sheet suitably have a width corresponding to half the width of the inwardly lying strips.

 The slits 12 are bridged by foil portions 15 whose width is adapted to the thickness of the sheet 11 and to the outer diameter of the conductor to be placed in the foil portions or sections 15 , such that the foil 15 will tightly embrace the bottom half of the conductor circumference and to enable the conductor to be placed between the top and bottom main surfaces of the sheet.

 As evident from FIG. 1 , the sheet 11 may include a through-extending transversal slit 16 in the longitudinal centre region of the sheet, wherewith the connecting foil portions 17 forms a hinge means for both parts of the floor element.

 The gap between the strips 13 is bridged on the rear side of the sheet with a two-way tape reinforcement 77 or some corresponding device, wherein said tapes 77 define a maximum distance between the strips 13 to which the foil width 15 is well-adapted to embrace a pipe/a conductor whose diameter corresponds to the greatest width between the strips 13 . It is, of course, possible to mount a fully covering foil on the underside of the sheet as an alternative to adhesive tape 77 at the gap between each pair of strips 13 .

 The adhesive tapes 77 shall suitably have such flexibility as to enable the width of the element to be minimised, by bringing the side edges of mutually adjacent strips 13 together, for instance during transportation.

 After having folded out the element 1 shown in FIG. 1 , said element can be placed in a correct position on a sub-floor and the sheet parts 13 fixed to said floor with centrally stretched adhesive tapes 77 . A heating cable/heating conductor/cooling conductor can now be readily pressed down correctly into the channels that are exposed when the spacing holders are removed.

 As will be evident from FIG. 2 , the adhesive tapes 77 can be replaced with adhesive foil that covers the corresponding main surface of the floor element. Naturally, it is necessary to slit the foil at the hinge join 16 , 17 .

 FIGS. 4 and 5 illustrate an embodiment in which the foil portions 15 are folded together and laid flat on one main surface of the sheet 11 , whereas the strips 13 on the sheet are brought laterally into contact with each other. A rigid element transportation state is achieved with the aid of pieces of adhesive tape 34 , 35 that bridge the channels 12 on the main surface distal from the AL-foil, said channels 12 being eliminated by pressing the strips against one another, and by folding the element double about a transversal slit located at half the length of the sheet for instance, although not penetrating the AL-foil 10 . After folding out the sheet 1 about the hinge means 16 , 17 and cutting through the tapes 34 , 35 at the location of the channels 12 , the sheet can be placed on a supportive surface and the strips mutually separated to open the channels 12 , wherewith the conductor can be developed and the foil portion 15 pressed down into the channelling.

 As will be evident from FIGS. 7 and 8 , the conductor 4 is normally laid in a meandering fashion, wherewith mutually adjacent, straight and parallel conductor sections 45 are placed in mutually adjacent, corresponding foil-clad channels in the element 1 . The curves or bends 41 of the conductor 4 are also placed in the channels 32 in the plate 30 . It will be seen from FIG. 7 that the channels 32 are generally semicircular in shape, so that the ends of the channel 32 connect with adjacent channels 12 in the sheet 1 .

 Although the invention has been described above with reference to a floor structure for the sake of simplicity, it will be obvious that the invention is not limited to this particular application, but can also be applied with the use of the inventive element and inventive plate on wall surfaces, ceiling surfaces and other surfaces with the intention of delivering heat or of removing heat from said structures.

 FIGS. 6 , 9 and 10 show that the sheet 1 of FIG. 1 can be produced by advancing arrays of laterally spaced lamellae along a feed path, wherein the lamellae are spaced mutually apart ( FIG. 9 ) with the aid of spacer elements 81 in a first part of said path. In the illustrated case, said spacer elements 81 have the form of wheels of specific width, wherewith a flat AL-foil 10 is adhered to one main surface. The lamellae 13 are then brought together laterally to a smaller distance apart with the aid of spacing elements 82 , which in the illustrated case have the form of wheels that also function to press the aluminium foil down into the channels, whereafter pieces of flat adhesive tape 77 are applied to opposite sides of the strips 13 across the channels 12 , so as to define a largest channel width that corresponds to the diameter of the conductor. The first mentioned width of the channels is chosen to enable the conductor to be embraced around half its circumference by the AL-foil, while providing room for the conductor between the main surfaces of the sheet at the same time.

 In the case of straight channels that lack heat conducting foil but where such foil is desired, a conductive tape can, in principle, be produced in accordance with FIG. 5 , detail 15 . The tape can be obtained either with adhesive and a paper backing, or solely with adhesive on the whole or parts of the underside of the formed foil, preferably on the two edge portions outwardly of the folded region. The double-folded part will be smaller than the nose width and can thus be used particularly easily. The conductive tape will automatically assume a U-shape and embrace the conductor at least around half its circumference, as the conductor is pressed or trod down into the channel.

 The invention being thus described, it will be apparent that the same may be varied in many ways. Such variations are not to be regarded as a departure from the spirit and scope of the invention, and all such modifications as would be recognized by one skilled in the art are intended to be included within the scope of the following claims.


DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT
Referring now to FIG. 2, a synthetic aperture radar system according to the
present invention comprises a plurality of antenna elements 11 arranged in
a one dimensional or two dimensional configuration, receivers (Rx) 12
connected to the respective antenna elements 11 for receiving radio waves
therethrough, AD converters 13 connected to the respective receivers 12
for analog-to-digital conversion, and a plurality of digital beam forming
units 14 for receiving a plurality of digital signals simultaneously
transferred from the A/D converters 13, performing discrete Fourier
transform (DFT) and discriminating the radio waves received from different
directions to output them. Thus, the antenna elements 11, the receivers
12, the A/D converters 13 and the digital beam forming units 14 constitute
a digital beam forming (DBF) antenna 20 which is capable of simultaneously
forming a plurality of receiving beams directed in different directions
without any scanning operation. The present invention utilizes such
digital beam forming antenna 20 as receiving means, pulse compression
units 5 being provided for the respective outputs of the digital beam
forming units 14 (four units being provided in this embodiment). An
azimuth compression section 6 is also provided with first Fourier
transform units 61 for the respective pulse compression units 5, and there
is further provided a spectral synthesis unit 65 for synthesizing the
spectra of the respective outputs of the respective first Fourier
transform units 61, and the output of the spectral synthesis unit 65 is
supplied to a complex multiplication unit 63.
The operation will now be described.
A transmission signal having a beam width 4.theta..sub.B which is four
times that of the conventional system, as shown in FIG. 3, is radiated
from a transmitter 1 through a transmitting antenna 2.
On the other hand, the signal reception is carried out using the digital
beam forming antenna 20, and, as shown in FIG. 4, four narrow beams No.
1-No. 4 (beam width of .theta..sub.B ) for reception directed to
respective small areas of a target object to be observed are formed and
echo signals from the respective small areas are simultaneously received.
The respective echo signals received are processed by the corresponding
pulse compression units 5 to enhance their range resolution. The received
signals for the respective beams have different center frequencies, as
shown in FIG. 5, but all have the same bandwidth B. Therefore, the pulse
repetition frequency PRF is sufficient, i.e., PRF=B, to avoid a reduction
in the observation distance.
The outputs of the respective pulse compression units 5 are supplied to the
respective first Fourier transform units 61 of the azimuth compression
section 6 and subjected to the pulse compression and Fourier transform to
obtain four spectra of bandwidth B which are, in turn, synthesized by a
spectral synthesis unit 65 to a spectrum of bandwidth 4B and azimuth
compression is performed to provide such a resolution .DELTA..gamma. as
represented by the following equation and enhanced by the number of the
beam, i.e., four times that of the conventional system.
##EQU4##
FIGS. 6(a) to (c) show the concept of expanding the Doppler frequency
bandwidth by the spectrum synthesization.
In this manner, the utilization of the digital beam forming antenna 20
using a plurality of narrow beams in the receiving means narrows the
Doppler frequency bandwidth in the respective beams during the pulse
compression and makes it possible to prevent a reduction in the
observation distance, and the spectral synthesis of the plurality of beam
outputs can expand the bandwidth of the signals to be subjected to azimuth
compression, thereby providing a high resolution.
Although the embodiment has been described in which the cross-range
resolution is enhanced without reducing the observation distance, the
present invention can be applied for enhancing an observation distance
without reducing the cross-range resolution, or for enhancing both the
cross-range resolution and the observation distance, which may be
determined by setting the number of beams, etc., depending upon the
application of the radar system.
As described above, the present invention is advantageous in that the
receiving means is provided with the digital beam forming antenna for A/D
conversion and digitally processing the echo signals received through a
plurality of the antenna elements to permit the simultaneous formation of
a plurality of beams for reception directed in different directions to
provide pulse compression means for each of the outputs and the azimuth
compression means is provided with first Fourier transform units for each
of the outputs and also with a spectral synthesis unit for synthesizing
the spectra of the respective outputs to provide an output to the complex
multiplication unit, thereby enhancing the cross-range resolution and the
observation distance.


EXAMPLE 1

 Preparation of a Partial Hydrolyzate of Alkoxysilane Oligomer

 Two kinds of a partial hydrolyzate of alkoxysilane oligomer of (I) and (II) were prepared at the mixing ratios of raw materials and the reaction conditions, shown in Table 1.

 EXAMPLE 2

 Preparation of the Silica Sol Liquid

 (2-1) 13.8 g of 2-ethylhexanoic barium (C 7 H 15 COO) 2 Ba was dissolved in a mixed solvent of 60 g of iso-amyl alcohol and 26.2 g of iso-amyl acetate to make a 5 weight % solution, which was calculated as BaO. Next, 20 g and 50 g of the partial hydrolyzates of alkoxysilane oligomer shown in Table 1 (I), were added and mixed with 20 g, 40 g, and 50 g of the solutions respectively. Furthermore, in the liquid A and the liquid B, 1-butanol was added to adjust the concentrations. Then, the silica sol liquids of A, B, and C shown in Table 2 were prepared.

 (2-2) 24.0 g of 2-ethylbutyric barium (C 5 H 11 COO) 2 Ba was dissolved in a mixed solvent of 70 g of 1-butanol and 6 g of acetylacetone, and refluxed to make 10 weight % solution, which was calculated as BaO. Next, 40 g and 80 g of the partial hydrolyzates of alkoxysilane oligomer shown in Table 1 (II) were added to mix with 20 g and 50 g of the solutions respectively. Furthermore, in the liquid D, iso-amyl alcohol was added to adjust the concentration. Then, the silica sol liquids D and E shown in Table 2 were prepared.

 (2-3) 0.5 g of barium carbonate powder having an average particle size of 10 m was dispersed in 100 g of a partial hydrolyzate of alkoxysilane oligomer shown in Table 1 (I) to prepare the silica sol liquid F in Table 2. In the reaction vessel for the preparation, the equipment having the stirring propeller was used to prevent the precipitation of the barium carbonate powder.

 EXAMPLE 3

 Formation of the Coated Layer

 Five kinds of the silica sol liquids, (A-E), shown in Table 2, were sprayed to coat the surfaces of quartz glass crucibles single crystal silicon production, and the single crystal, and the coated layers were formed by baking the coated liquids at 850 C. for 30 minutes, wherein the crucibles were made by an arc fusion with rotating mold method, which is generally used in the process to produce the crucible for pulling up a single crystal.

 In this case, the quartz glass crucibles were surface treated by using the liquids F and H. Sample No. 6 was made by spaying the silica sol liquid F to coat the surface of the crucible to be burned at 850 C. for 30 minutes. In addition, Sample No. 8 was made by a conventional coating method. This is, the liquid H, where barium hydroxide octahydrate was mixed with water, in which, the mixing ratio is 3 g of barium hydroxide octahydrate in 1-liter of water, was sprayed on the crucible to heat at 300 C. with carbon dioxide gas.

 EXAMPLE 4

 Strength of the Coated Layer

 The mechanical strength of the coated layer formed by using the liquids A, F, and H, shown in Table 2, was evaluated according to the specification standard (JIS 5600-5-4). This evaluation was done using a scratching method with a marketed pencil (trade name Mitsubishi UNI). The results are shown in Table 3. Regarding the coated layer formed by using the liquid A of the present invention, the strength of the layer was high since the layer was glassy, and scratching did not appear with the pencil. Moreover, regarding the coated layer formed by using the liquid F, although the barium carbonate powder was contained, the silica component became a binder, so that the strength of the layer was high, and scratching did not appear with a pencil. On the other hand, regarding the coated layer formed by using the conventional liquid H, scratching appeared using a pencil of 3H hardness. From these results, it was confirmed that the coated layer of the present invention had remarkably stronger mechanical property than the conventional layer.

 EXAMPLE 5

 Washing Test

 Washing tests were carried out on the quartz glass crucibles, (No. 1, 6, 8) in Table 2, which, were coating treated. The tests were conducted on the following processes. (1) Washing with pure water and drying. (2) Washing with pure water and drying after washing with dilute hydrochloric acid. The adhesion amounts of the residual barium on the surface after each washing test, are shown in Table 3. Regarding the quartz glass crucible of the present invention (No. 1), barium was not removed, and the adhesion amounts were not changed in the water washing process (1) and the acid washing process (2). Moreover, regarding the quartz glass crucible of the present invention (No. 6), although the form of barium was the barium carbonate, which was same as the conventional, one, since the barium carbonate was dispersed in the silica sol liquid and coated and baked, the coated silica became the preservation layer. So the barium was not removed in the washing process (1) and the acid washing process (2) like the quartz glass crucible (No. 1). On the other hand, regarding the conventional quartz glass crucible (No. 8), since the barium carbonate was not baked, the barium was washed away a little in the water washing process (1), and the barium carbonate was washed away completely in the acid washing process (2).

 EXAMPLE 6

 Test of the Dislocation Free Ratio

 The pulling up tests of the silicon single crystal were carried out by using quartz glass crucibles having transparent coated layers (No. 1 to No. 5), and the quartz glass crucible where the barium carbonate powder was dispersed in the partial hydrolyzate of the alkoxysilane oligomer (No. 6). The dislocation free ratios of the pulled crystals, are shown in Table 4. (The dislocation free ratio is defined as kilograms of dislocation free single crystal per kilograms of polysilicon charged to the crucible.) Moreover, for the comparison, the same pulling up tests were also conducted on quartz glass crucible (No. 7), in which the surface was not modified and there is no crystallization promoter layer on its surface and to the quartz glass crucible (No. 8), in which the crystallization promoter layer was formed by a conventional method. The dislocation free ratios of the single crystal are shown in Table 4. In addition, the thickness of the crystallization layer of the crucible after pulling up the single crystal was measured. The thickness of the crystallization layers is shown in Table 4. As shown in the results in Table 4, regarding the quartz glass crucible of the present invention, the crystallization layers having the sufficient layer thickness were formed on the surface of the crucible also with comparatively a little amount of barium, and a high dislocation free ratio could be obtained. On the other hand, regarding the quartz glass crucible of the comparative example No. 7, the dislocation free ratio was remarkably low. Moreover, regarding the quartz glass crucible of the comparative example No. 8, where barium carbonate was adhered by the conventional method, although this quartz glass crucible has the almost same adhesion amount of barium as used of the present invention, the crystallization layer after pulling up the single crystal was thin in the crucible, and the dislocation free ratio was remarkably low.

 EXAMPLE 7

 Burning Temperature

 The silica sol liquid (No. 1) shown in Table 2 was sprayed to coat the surface of a quartz glass crucible for pulling up the single crystal, and a coated layer was formed by baking said coated liquid at the temperatures shown in Table 5 for 30 minutes. The mechanical strength of the coated layer was evaluated according to the specification standard (JIS 5600-5-4). This evaluation was carried out using the scratching method with a marketed pencil (trade name Mitsubishi UNI). Furthermore, washing tests were also conducted. The washing tests were carried out by measuring the adhesion amount of the residual barium on the surface after washing with pure water and drying. Moreover, for comparison, the same tests were conducted on a quartz glass crucible which was not baked after coating. These results are shown in Table 5.

 As shown by these results, regarding the coated layer baked at a temperature of more than 600 C., scratching did not appear when using a pencil of hardness 6H, and the adhesion amount of barium in the coated layer after washing was not changed. In addition, regarding the coated layer baked at 400 C., although the thin trace of the scratching was sometimes appeared with a pencil of hardness 6H, cracking did not appear with a pencil of hardness 5H, and the decreased adhesion amount of barium by washing was remarkably low. On the other hand, regarding the coated layer baked at 200 C., since the baking was not sufficient, scratching appeared with a pencil of hardness 3H, and the adhesion amount of barium decreased to less than half by washing. In addition, regarding the coated layer, which was not baked, since the layer was soft due to being in the gel state, scratching appeared using a pencil of hardness 2B easily, and the coated layer was almost washed away in the washing test due not being baked.

 EXAMPLE 8

 Multi-pulling Test

 Regarding the quartz glass crucible having the coated layer of the present invention (No. 3), the crystal layer was formed uniformly on the inside surface of the crucible with the crystallization promoter contained in the coated layer, and the releasing of cristobalite did not occur. Therefore, even when the pulling up of a single crystal was repeated 4 times, a high dislocation free ratio, which was the level of 80%, was kept. As a result, the crucible life was prolonged. On the other hand, regarding the conventional quartz glass crucible having weakly adhered barium carbonate powder, (No. 8) in Table 2, the cristobalite was deposited non-uniformly and partially as the pulling up was repeated. Then, the frequency of the release of cristobalite to the molten silicon increases so that the dislocation free ratio was decreased gradually. In addition, regarding the crucible, in which the pulling up the single crystal was repeated 4 times, the cristobalite layer was not identified on the surface of the crucible. By the way, regarding the conventional quartz glass crucible having the adhered barium carbonate powder (No. 8), it is necessary that the amount of adhered barium is more than 20 g/cm 2 for obtaining the multi-pulling effect, which was the same as the present invention. When such an amount of barium is adhered on the surface of the crucible, it cannot be avoided to give the bad influence to the quality of the single crystal silicon.

 Regarding the quartz glass crucible having the coated layer of the present invention (No. 3), the crystal layer was formed uniformly on the inside surface of the crucible with the crystallization accelerator contained in the coated layer, and the releasing of cristobalite was stopped. Therefore, even when the pulling up of a single crystal was repeated 4 times, a high dislocation free ratio, which was the level of 80%, was kept. As a result, the crucible life was prolonged. On the other hand, regarding the conventional quartz glass crucible having weakly adhered barium carbonate powder, (No. 8) in Table 2, the cristobalite was deposited non-uniformly and partially as the pulling up was repeated. Then, the frequency of the release of cristobalite to the molten silicon increases so that the dislocation free ratio was decreased gradually. In addition, regarding the crucible, in which the pulling up the single crystal was repeated 4 times, the cristobalite layer was not identified on the surface of the crucible. By the way, regarding the conventional quartz glass crucible having the adhered barium carbonate powder (No. 8), it is necessary that the amount of adhered barium is more than 20 m/g for obtaining the multi-pulling effect, which was the same as the present invention. When such an amount of barium is adhered on the surface of the crucible, it cannot be avoided to give the bad influence to the quality of the single crystal silicon.

 EXAMPLE 9

 Other Crystallization Accelerator

 2-ethylhexanoic acid salts of Mg, Ca, and Sr were added to the partial hydrolyzate of the alkoxysilane oligomer shown in Table 2 (I) to prepare a silica sol liquid. The silica sol liquid was sprayed to coat a quartz piece having 10 cm square, and the transparent coated layer was formed by baking said coated liquid at 850 C. for 30 minutes. The adhesion amount of the metal was adjusted, so that it became 1 g/cm 2 , which was calculated as an oxide. Next, the transparent coated layer was put into an electric furnace to bake at 1450 C. for 5 hours in argon gas at 1 atmosphere pressure. Then, it was confirmed that the uniform crystallization layer could be formed by also using all said metals.

 Effect of the Invention

 A quartz glass crucible has a transparent coated layer containing a crystallization promoter on the surface, and since the coated layer forms an integrated structure to the surface of the crucible, there is no abrasion, and the adhesion state of a crystallization promoter, such as barium, contained in the coated layer, is kept uniformly. Therefore, the cristobalite formation on the surface of the crucible during pulling up the single crystal is completely uniform, so that an excellent dislocation free ratio can be obtained. Moreover, there is no problem that the coated layer is abraded in contact with the handling instruments or persons, in the working process after making the crucible, during from the inspection to the shipment, and the working process in the user side of the crucible. In addition, there is no conventional problem that the fine barium carbonate powder is scattered whenever the case containing the crucible is opened.

 TABLE 1 Oligomer (I) Oligomer (II) Starting Raw Material Ethylsilicate40 150 g Ethylsilicate40 67.5 g and Used Amount Solvent and Used Ethylalcohol 400 g Ethylalcohol 1.1 g Amount Catalyst and Used 60% concentration 60% concentration of Amount of Nitric acid 0.6 g Nitric acid 0.7 g Additional Amount of 45 g 36.4 g Water Reaction Temperature 45 C.-3 hours 45 C.-3 hours and Time Silica Solid Part About 10 wt. % About 25 wt. % TABLE 2 Silica Sol Liquid Adhesion BaO SiO 2 Amounts of No. Kinds Oligomer Solutions Containing Metal Salt Dilution Alcohol Amounts Amounts Metal Oxide 1 A (I) 20 g 5 wt. % Calculated as BaO 20 g Butanol 60 g 1 2 0.6 2 B (I) 20 g 5 wt. % Calculated as BaO 40 g Butanol 40 g 2 2 0.8 3 C (I) 5 g 10 wt. % Calculated as BaO 50 g 5 5 1 4 D (II) 40 g 10 wt. % Calculated as BaO 50 g Isoamyl 10 g 5 10 5.2 5 E (II) 80 g 10 wt. % Calculated as BaO 20 g 2 20 9.5 6 F (I) 100 g Carbonic Acid Ba Powder 0.5 g 0.4 10 2.1 7 G Non-Surface Treatment 0 8 H Conventional Ba Carbonate Powder 1 (Note) (I) and (II) of Oligomer is same as Table 1. Amounts of BaO and SiO 2 are in wt. %. Isoamyl is Isoamyl Alcohol, Adhesion Amounts of Metal Oxide is in g/cm 2 TABLE 3 Sample No. 1 6 8 Silica Sol Liquids A F H Hardness of Coated Layer No Cracking No Cracking Cracking (Hardness by Pencil) by 6H by 6H Appeared by 3H Ba Amount Before Washing 0.6 2.1 1.0 (1) Ba Amounts After Water 0.6 2.1 0.3 Washing and Drying (2) Ba Amounts After Acid 0.6 2.1 0 Washing, Water Washing, and Drying (Note) Ba amounts is g/cm 2 TABLE 4 No. 1 2 3 4 5 6 7 8 Dislocation free 81 83 85 83 80 81 35 55 ratio % Crystallization 80 77 83 95 90 103 0 10 Layers After Pulling up m TABLE 5 Baking Not- Temperature Baked 200 C. 400 C. 600 C. 800 C. 1000 C. Hardness of Crack- Crack- No No coating ing ing Crack- Crack- Layer Appear- Appear- ing ing ed ed by 5H By 6H by 2B by 3H Washing Test Ba Amounts 0.6 0.6 0.6 0.6 Before Washing Ba Amounts 0 0.2 0.5 0.6 After Washing and Drying TABLE 6 Dislocation free ratio % Number of Times of Pulling up 1 2 3 4 Coated Crucible (No. 3) 85 85 83 83 Conventional Crucible Having 55 50 47 42 Ba Carbonate Powder (No. 8) Japanese application 2001-318032, filed on Oct. 16, 2001 is incorporated herein by reference in its entirety.

 Obviously, numerous modifications and variations of the present invention are possible in light of the above teachings. It is therefore to be understood that within the scope of the appended claims, the invention may be practiced otherwise than as specifically described herein.


DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

 The present invention proposes a novel method to fabricate the FLASH device and the structure of the same. The aspect of the present invention includes that the device has a spacer floating gate and the control gate is also shaped with the spacer profile. Further, the control gate will be self-aligned on the floating gate during formation. The detail description of the method will be seen as follows. Turning to FIG. 1 , it shows the cross sectional view according to the present invention. The first procedure of the present invention is to form the LOCOS for isolation.

 The steps for forming the LOCOS are illustrated as follows. A substrate 2 for forming the semiconductor device according to the present invention suitably includes a single crystal wafer 2 with a <100> or <111> crystallographic orientation. Other substrate material may be used. In a preferred embodiment, a silicon dioxide layer (not shown) is formed to a thickness of about 150 to 400 angstroms. However, the silicon dioxide layer is suitably formed using thermal oxidation. The temperature for this process may be about higher than 900 centigrade degrees. Alternatively, the silicon oxide layer can also be formed using a chemical vapor deposition (CVD) process, with a tetramethyl orthosilicate (TEOS) source, at a temperature between about 600 to 800 C. and a pressure between about 0.1 to 10 torr. Further, the silicon oxide layer also acts as a cushion between the silicon substrate 2 and a subsequent silicon nitride layer for reducing stress during subsequent oxidation for forming isolation.

 Subsequently, a silicon nitride layer (not shown) is formed on the silicon dioxide to a thickness of about 500 to 1000 angstroms. After the silicon nitride layer is formed, a photoresist is patterned on the silicon nitride layer to define active areas. The silicon nitride layer and the oxide are etched using the photoresist as an etching mask. Any suitable process can deposit the silicon nitride layer. For example, low pressure chemical vapor deposition (LPCVD), plasma enhanced chemical vapor deposition (PECVD), or high density plasma chemical vapor deposition (HDPCVD) may be used. In the preferred embodiment, the reaction gases used to form silicon nitride layer 6 are SiH 4 , NH 3 , N 2 , N 2 O or SiH 2 Cl 2 , NH 3 , N 2 , N 2 O. In the preferred embodiment, the silicon nitride layer is etched using CF 4 plasma as the etchant. The photoresist is then removed. Then, a thermal oxidation process is performed using the silicon nitride layer as a mask at a temperature between about 1000 to 1100 C. to form isolation 4 in the substrate 2 . Therefore, the conventional LOCOS structure is formed for isolation. Then, the nitride and oxide are both removed.

 Turning to FIG. 2 , a further pad oxide 6 and the nitride layer 8 are respectively formed on the substrate 2 . Subsequently, the nitride masking 8 is next pattern on the substrate 2 by using conventional lithography procedure. The method for forming the nitride 8 and oxide 6 are illustrated as previously mentioned procedure. Successively, a polysilicon layer 10 is formed along the surface of the nitride masking 8 . The next step is performed to anisotropically etch the polysilicon layer 10 , thereby forming conductive spacer 10 a lying on the sidewall of the opening of the nitride masking 8 as the floating gate. Preferably, the conductive spacers 10 are formed of doped polysilicon layer or in-situ doped polysilicon. A portion of the oxide layer 6 is also removed to expose the substrate 2 , a shown in FIG. 3 .

 Referring to FIG. 4 , a TEOS-oxide spacer 12 is formed on the conductive spacer 10 a by using conventional deposition and anisotropical etching. The oxide for forming the oxide spacer 12 may be formed using other known oxide chemical compositions and procedures. For example, the TEOS-oxide layer can be silicon dioxide formed using a chemical vapor deposition process, with a tetramethyl orthosilicate (TEOS) source, at a temperature between about 600 to 800 degrees centigrade and a pressure of about 0.1 to 10 torr. The TEOS-oxide spacer 12 is utilized to limit the doped-ion regions. In another case, the dielectric spacer 12 may be omitted and the procedure for forming the structure is optional.

 After the TEOS-oxide spacer 12 is formed. A blanket ion implantation with n type conductive dopants such as arsenic and phosphorus are respectively doped into the substrate 2 using the TEOS-oxide spacer 12 as masking. Therefore, the n type highly doped source region 14 is formed adjacent to the floating gate structures 10 a . The energy and dosage of the arsenic implantation are about 50 to 70 KeV, 4E16 to 6E16 atoms/cm 2 , respectively. Further, The energy and dosage of the phosphorus implantation are about 40 to 60 KeV, 2E15 to 4E15 atoms/cm 2 .

 Please see FIG. 5 , a further TEOS-oxide layer 16 is formed on the nitride masking 8 and the TEOS-oxide spacer 12 , followed by etching the TEOS-oxide layer 16 to remain the residual oxide on the top of the TEOS-oxide spacer 12 . If the dielectric spacer 12 is omitted, then the oxide plug formed by the TEOS-oxide layer 16 will be located on the floating gate 10 . Next, the nitride masking 8 and the pad oxide 6 is removed as shown in FIG. 6 . In a preferred embodiment, the silicon nitride material may be removed by the using a heated solution of phosphorus acid. The silicon oxide layer 4 may be removed by HF solution or BOE (buffer oxide etching) solution. Please turn to FIG. 6 , a gate dielectric layer 18 is then formed on the substrate 2 after the removal of the nitride masking 8 and pad oxide 6 . This step can be omitted, namely, is optional.

 As shown in FIG. 6 , a dielectric layer 20 is formed along the surface of the floating gates as a tunneling dielectric layer (or called inter-gate dielectric layer). Preferably, the tunneling dielectric may be composed by oxide, nitride, silicon oxynitride, ON (oxide/nitride) or ONO (oxide/nitride/oxide). A further conductive layer 22 , such as doped polysilicon layer, is formed on the tunneling dielectric layer 20 as a control gate. Finally, turning to FIG. 7 , etching processes is introduced to define the control gate 16 . It should be noted that the control gate is self-aligned on the floating gate without the masking and alignments procedure.

 The next procedures are to form the interconnection and doped regions. These steps may be achieved by various methods. One of the methods will be introduced as an example rather than limiting to the present invention. Turning to FIG. 8 , an isolation layer 24 is formed on the cell structure for isolation. A contact hole is formed in the isolation layer 24 and the memory cell is separated by the etching for forming via hole. Then, doped region 28 is formed by ion implantation through the contact hole into the substrate 2 . Conductive plugs 26 are subsequently formed in the isolation layer 24 by using the conventional manner.

 The structure of the FLASH device includes a first dielectric layer 6 formed on a substrate 2 . A floating gate 10 a with spacer profile formed on the first dielectric layer 6 . A dielectric spacer 12 is formed on the floating gate for isolation. A second dielectric layer 20 is formed along the approximately vertical surface of the floating gate 10 a and the dielectric spacer 12 and a lateral portion of the second dielectric layer 20 laterally extends over the substrate adjacent the floating gate 10 a . A control gate 22 is formed on the lateral portion of the second dielectric layer 20 that laterally extends over the substrate and the control gate 22 is attached on the second dielectric layer 20 .

 Some parameters of the preferred embodiment for the present invention are illustrated in Table 1 and Table 2 as follows. As will be understood by persons skilled in the art, the foregoing parameters of the present invention is illustrative of the present invention rather than limiting the present invention.

 As will be understood by persons skilled in the art, the foregoing preferred embodiment of the present invention is illustrative of the present invention rather than limiting the present invention. Having described the invention in connection with a preferred embodiment, modification will now suggest itself to those skilled in the art. Thus, the invention is not to be limited to this embodiment, but rather the invention is intended to cover various modifications and similar arrangements included within the spirit and scope of the appended claims, the scope of which should be accorded the broadest interpretation so as to encompass all such modifications and similar structures. While the preferred embodiment of the invention has been illustrated and described, it will be appreciated that various changes can be made therein without departing from the spirit and scope of the invention.

 TABLE 1 FLASH memory device parameters p-substrate 8 12 -cm tunnel oxide thickness 70 100A floating gate thickness 1500A ONO thickness 250 500A control gate thickness 5000A source/drain implant As75, 50 70 Kev, 5E15, tilt 0 deg P31, 40 60 Kev, 3E15, tilt 0 deg TABLE 2 FLASH memory cell operation conditions MODE bias conditions programming erasing reading control gate 8 V 4 V 3 V 10 12 V 2 V (word line) source 4 V 8 V 6 V 0 V 4 V Drain (bit line) 0.8 SV 0 V 0 V


DETAILED DESCRIPTION OF A PREFERRED EMBODIMENT OF THE PRESENT INVENTION
With respect to FIG. 1, a combination manual and electric door opener 10
having door 12 hingedly connected to a door frame 14 is shown. The door 12
has a hinged side 16 and a latched side 18. The door 12 typically has a
knob 20 located near the latched side 18 for manually unlatching the door
to pivot about the door frame 14.
A bracket 22 is affixed to the door frame 14 adjacent to the hinged side 16
of the door 12. The positioning of the bracket 22, as will be indicated
later, is crucial to the generation of optimal leverage by the door opener
10 when opening the door 12. Referring to FIGS. 2 and 3, an electric motor
24 is pivotably attached to the bracket 22 by a pivot pin 26. As shown in
phantom in FIG. 3, the pivot pin 26 allows the motor 24 to pivot with
respect to the fixed bracket 22 when opening the door 12. The electric
motor 24 has a rotary output shaft 30 which extends longitudinally from
the body of the motor 24.
The output shaft 30 of the electric motor 24 is connected to a threaded rod
32 by means of a coupling 34. The coupling 34 secures the threaded rod 32
in abutting contact with the output shaft 30. As a result, the threaded
rod 32 is a longitudinal extension of the output shaft 30.
A threaded nut 36 is threadably received on the threaded rod 32 so that
threads of the threaded nut 36 engage the threads of the threaded rod 32.
The threaded nut 36 has a hollow cylindrical shape and extends only partly
along the length of the threaded rod 32. A first arm 44 of a cam lever 40
has one end pivotably connected to the threaded nut 36. A second arm 48 of
cam lever 40 connects to other end of the first arm 44 and extends at an
angle with respect to the first arm 44 so that it is parallel to the plane
of the door 12 when the door 12 is in a closed position as shown in FIGS.
2 and 3.
Referring to FIG. 4, the first arm 44 of the cam lever is pivotably
connected to the threaded nut 36 by a vertically disposed pivot pin 50
attached to the threaded nut 36. A snap ring 52 is received in an annular
recess provided in the pin 50 to lock the one end of the first arm 44 of
the cam lever 40 to the threaded nut 36. Washers 38 are provided on
opposite sides of the first arm 44 to permit the one end of the cam lever
40 to freely pivot relative to the threaded nut 36.
Referring to FIG. 5, a capped pivot pin 54 pivotably connects the cam lever
40 to a top 56 of the door frame 14. The capped pivot pin 54 is disposed
through an aperture provided in the cam lever 40 at the junction between
the first and second arms 44 and 48 respectively and is secured to the top
56 of the door frame 14 by a plug 58. The plug 58 has a truncated conical
surface which wedges open an end 59 of the capped pivot pin 54 to lock the
capped pivot pin 54 in an aperture 55 provided in the top 56 of the door
frame 14. A screw 57 displaces the plug 58 to wedge open the end 59 of the
capped pivot pin 54. Alternatively, a threaded bolt, may be used in place
of the capped pivot pin 54 as is known in the art. A washer 62 is disposed
between a cap 60 of the capped pivot pin 54 and the cam lever 40 to permit
the cam lever 40 to freely rotate and pivot during opening and closing of
the door 12.
Referring to FIGS. 2, 3 and 6, a roller 64 is fastened to the end of the
cam arm 48 by means of a shaft 66 and second snap ring 68 as shown in FIG.
6. The roller 64 engages the surface of the door 12 and opens the door 12
as the door opener mechanism 10 is activated. A small amount of
pre-travel, preferably about one-eights of an inch, exists between the
roller 64 and the door 12 and assists in opening the door 12. The electric
motor 24 is bi-directional permitting both opening and closing when
assisted by appropriate spring biasing means (not shown), of a door 12 as
a result of the translational motion imparted to the threaded nut 36 by
the rotation of threaded shaft 32, the pivotal motion imparted to the cam
lever 40 by the translation of the threaded nut 36 and consequently to the
roller 64 engaging the door 12 by the pivotal motion of the cam lever 40.
Referring to FIGS. 2, 3 and 6, a restraining bracket 70 is mounted to the
door 12. The bracket 70 is divided into a mounting portion 72, an
extending portion 74 and an angled end portion 76. The mounting portion 72
is mounted to the door 12 by a pair of bolts 78 which extend through
apertures in the mounting portion 72. The extending portion 74 extends
from the door 12 beneath the roller 64 and the cam arm 48. The angled end
portion 76 extends perpendicularly and upwardly from the extending portion
74. The angled portion 76 and the door 12 surround the roller 64 and the
cam arm 48 and define a channel 80 within which the roller 64 travels. The
purpose of the restraining bracket 70 is to maintain contact between the
roller 64 and the door 12 and to prevent the door 12 from being swung open
by the wind and away from the door opener 10. Accordingly, contact is
ensured between the opener 10 and door 12 during both opening and closing
of the door.
As shown in FIG. 1, a junction box 82 is secured to the door frame 14 at
the hinged side 16 of the door 12. Electrical lines 84 and 86 connect the
junction box 82 with a first sensor 88 located on the electric motor 24
and a second sensor 90 located on the door 12 adjacent the knob 20. A door
latch 92 mounted in the door 12 at latched side 18 engages a latch plate
attached to the door frame 14 to prevent the door 12 from freely opening.
A portable control 94, capable of being carried by a user, generates a
radio signal 96 simultaneously received by the first sensor 88 and second
sensor 90. In response to the radio signal 96, the sensor 88 activates the
electric motor 24, and the sensor 90 activates a latch actuator 98 to
retract the door latch 92 from engagement with the latch plate attached to
the door frame 14. Thus, the electric motor 24 will pivot the cam lever 40
simultaneously with the door latch 92. In this manner, the door 12 may be
effectively opened. A timing mechanism, such as an electronic timer
container within the junction box 82 or a limit switch terminates the
electrical power to the motor 24 once the door 12 has pivoted to an
acceptable degree, usually approximately 90.degree., with respect to the
door frame 14. When it is desirable to close the door 12, activation of
the portable control 94 causes the electric motor 24 to rotate in the
opposite direction until the door 12 is closed and deactivates the latch
actuator 98 so that the retractable door latch 92 re-engages the latch
plate attached to the door frame 14 to latch the door 12 in a closed
position.
Having described my invention, many modifications thereto will become
apparent to those skilled in the art to which it pertains without
deviation from the spirit of the invention as defined in the scope of the
appended claims.


EXAMPLE 1
In an electrolytic cell having a platinum plate (1.times.1=1 cm.sup.2) as a
cathode and a glass electrode (1.times.1=1 cm.sup.2) an anode disposed as
separated by 1 cm, 62 mg (0.25 m.mol) of 2,5-di(2-thienyl)thiazole, 82 mg
(0.25 m.mol) of tetra-n-butyl ammonium tetrafluoroborate, and 5 ml of
propylene carbonate were placed and dissolved. The solution was blown with
argon for 15 minutes and then subjected to electrolytic polymerization at
a current density of 1 mA/cm.sup.2 and a polymerization temperature of
25.degree. C. for 30 seconds. Consequently, a brown film of polymer
composition doped with tetrafluoroborate ion was obtained on the anode.
The film had a thickness of about 0.2 .mu.m. When this polymer composition
was further electrolyzed, with the polarity reversed, at a current density
of 0.1 mA/cm.sup.2 and a temperature of 25.degree. C. for 30 seconds, the
composition was deprived of tetrafluoroborate. Consequently, there was
obtained a yellow filmlike polymer.
In the infrared absorption spectrum of the yellow filmlike polymer, there
was found a band at 800 cm.sup.-1 indicative of the presence of
2,5-di-substituted thiophene ring. The bands at 730 and 820 cm.sup.-1
indicative of the presence of a 2,4-di-substituted thiophene ring were
absent from this infrared absorption spectrum. Thus, the polymer was
identified to be the polymer of
##STR12##
EXAMPLE 2
In an electrolytic cell having two platinum plates (1.times.1=1 cm.sup.2)
disposed as separated by 1 cm, 62 mg (0.25 m.mol) of
2,5-di(2-thienyl)thiazole, 82 mg (0.25 m.mol) of tetra-n-butyl ammonium
tetrafluoroborate, and 5 ml of propylene carbonate were placed and
dissolved. The resultant solution was blown with argon for 15 minutes and
then subjected to electrolytic polymerization at a current density of 1
mA/cm.sup.2 and a polymerization temperature of 25.degree. C. for 2 hours.
Consequently, a blackish brown filmlike polymer composition doped with
tetrafluoroborate ion was obtained as deposited on the anode. This film
had a thickness of 18 .mu.m. It showed electroconductivity of
6.3.times.10.sup.-5 S/cm.
EXAMPLE 3
In an electrolytic cell having two glass electrodes (1.times.1=1 cm.sup.2)
disposed as separated by 1 cm, 122 mg (0.5 m.mol) of
2,5-di(2-thienyl)pyridine, 82 mg (0.25 m.mol) of tetra-n-butyl ammonium
tetrafluoroborate, and 5 ml of nitrobenzene were placed and dissolved. The
resultant solution was blown with argon for 15 minutes and then subjected
to electrolytic polymerization at a current density of 1 mA/cm.sup.2 and a
polymerization temperature of 25.degree. C. for 1 minute. Consequently, a
grayish black filmlike polymer composition doped with tetrafluoroborate
ion was obtained as deposited on the anode. This film had a thickness of
about 1 .mu.m. When this polymer composition was further electrolyzed,
with the polarity reversed, at a current density of 1 mA/cm.sup.2 and a
temperature of 25.degree. C. for 60 seconds, the composition was deprived
of tetrafluoroborate. Thus, there was obtained a yellowish orange filmlike
polymer.
In the infrared absorption spectrum of this yellowish orange filmlike
polymer, there was found a band at 800 cm.sup.-1 indicative of the
presence of 2,5-di-substituted thiophene ring. The bands at 730 and 820
cm.sup.-1 indicative of the presence of a 2,4-substituted thiophene ring
were absent from this infrared absorption spectrum. Thus, this polymer was
identified to be the polymer of
##STR13##
EXAMPLE 4
In the same electrolytic cell as described in Example 1, 122 mg (0.5 m.mol)
of 2,5-di(2-thienyl)pyridine, 82 mg (0.25 m.mol) of tetra-n-butyl ammonium
tetrafluoroborate, and 5 ml of nitrobenzene were placed and dissolved. The
resultant solution was blown with argon for 15 minutes and then subjected
to electrolytic polymerization at a current density of 1 mA/cm.sup.2 and a
polymerization temperature of 25.degree. C. for 5 minutes. Consequently, a
grayish black filmlike polymer composition doped with tetrafluoroborate
ion was obtained as deposited on the anode. When this polymer composition
was further electrolyzed, with the polarity reversed, at a current density
of 1 mA/cm.sup.2 at a temperature of 25.degree. C., it was deprived of the
dopant. Consequently, there was obtained a reddish brown filmlike polymer.
When this filmlike polymer was exposed to the vapor of iodine, there was
obtained a polymer doped with iodine ion. This polymer showed
electroconductivity of 6.0.times.10.sup.-3 S/cm.
EXAMPLE 5
In the same electrolytic cell as described in Example 1, 122 mg (0.5 m.mol)
of 2,5-di(2-thienyl)pyridine, 85 mg (0.25 m.mol) of tetra-n-butyl ammonium
perchlorate, and 5 ml of nitrobenzene were placed and dissolved. The
resultant solution was blown with argon for 15 minutes and then subjected
to electrolytic polymerization at a current density of 1 mA/cm.sup.2 and a
polymerization temperature of 25.degree. C. for 5 minutes. Consequently, a
grayish black filmlike polymer composition doped with perchlorate ion was
obtained as deposited on the anode. When the polymer composition was
further electrolyzed, with the polarity reversed, at a current density of
1 mA/cm.sup.2 and a temperature of 25.degree. C., there was obtained a
reddish brown filmlike polymer deprived of the dopant.
EXAMPLE 6
In the same electrolytic cell as described in Example 3, 122 mg (0.5 m.mol)
of 2,6-di(2-thienyl)pyridine, 82 mg (0.25 m.mol) of tetra-n-butyl ammonium
tetrafluoroborate, and 5 ml of nitrobenzene were placed and dissolved. The
resultant solution was blown with argon and then subjected to electrolytic
polymerization at a current density of 1 mA/cm.sup.2 and a polymerization
temperature of 25.degree. C. for 2 minutes. Consequently, a blackish brown
filmlike polymer composition doped with tetrafluoroborate ion was obtained
as deposited on the anode. This filmlike polymer composition had a
thickness of about 1 .mu.m. When this polymer composition was further
electrolyzed with the polarity reversed, there was obtained a brown
polymer deprived of the dopant.
In the infrared absorption spectrum of the brown filmlike polymer, a band
at 800 cm.sup.-1 indicative of the presence of a 2,5-di-substituted
thiophene ring was observed. The oands at 730 and 820 cm.sup.-1 indicative
of the presence of a 2,4-di-substituted thiophene ring were not found.
Thus, the polymer was identified to be the polymer of
##STR14##
The film of this polymer had a very smooth surface. The surface smoothness
of this film was higher than that of any other film obtained by
electrolytic polymerization as reported in literature to date. Table 1
shows the results of thermogravimetric analysis of the polymer as compared
with that of poly(3-methylthiophene).
TABLE 1
______________________________________
Gravimetric residual ratio of polymer (%)
______________________________________
Temperature (.degree.C.)
200 300 400 500 600
Poly[ 2,6-di(thienyl)pyridine]
100 100 99 99 94
Poly(3-methylthiophene)
100 98 96 90 73
______________________________________
From this table, it can be clearly noted that the polymer showed better
thermal stability than poly(3-methylthiophene), a substance heretofore
accepted as possessing relatively high stability.
EXAMPLE 7
In the same electrolytic cell as described in Example 1, 122 mg (0.5 m.mol)
of 2,6-di(2-thienyl)pyridine, 82 mg (0.25 m.mol) of tetra-n-ammonium
tetrafluoroborate, and 5 ml of nitrobenzene were placed and dissolved. The
resultant solution was blown with argon for 15 minutes and then subjected
to electrolytic polymerization at a current density of 1 mA/cm.sup.2 and a
polymerization temperature of 25.degree. C. for 5 minutes. Consequently, a
blackish brown filmlike polymer composition doped with tetrafluoroborate
ion was obtained as deposited on the anode. When this polymer composition
was further electrolyzed with the polarity reversed, there was obtained a
brown filmlike polymer deprived of the dopant. When this polymer was
exposed to the vapor of iodine, it was doped with iodine ion. This polymer
had an electroconductivity of 1.3.times.10.sup.-2 S/cm.
EXAMPLE 8
In the same electrolytic cell as described in Example 1, 122 mg (0.5 m.mol)
of 2,6-di(2-thienyl)pyridine, 97 mg (0.25 m.mol) of tetra-n-butyl ammonium
hexafluorophosphate, and 5 ml of nitrobenzene were placed and dissolved.
The resultant solution was blown with argon for 15 minutes and then
subjected to electrolytic polymerization at a current density of 1
mA/cm.sup.2 and a polymerization temperature of 25.degree. C. for 5
minutes. Consequently, a blackish brown filmlike polymer composition doped
with hexafluorophosphate ion was obtained as deposited on the anode. When
this polymer composition was further electrolyzed with the polarity
reversed, there was obtained a brown filmlike polymer deprived of the
dopant.


DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT
Referring to the figures, and most particularly to FIGS. 1-3, a castor
assembly 10 includes a pair of legs 12 and 14 from which is supported by a
castor wheel 16. The legs extend from a rotatable member 18 which is
rotatably supported from a mounting plate 20. The rotatable member 18 is
secured by means of a rivet or bolt (not shown) to the mounting plate 20
with a bearing means such as ball bearing ring 22 therebetween. The
rotatable member 18 may be rotated with respect to the mounting plate 20,
with the rivet or bolt being the axis of rotation. A pair of apertures 24
and 26 are formed in the legs 12 and 14 for receiving an axle or bolt 28
for supporting the wheel 16 from the legs. The wheel 16 is formed with a
ridged support member having an inner hub 32 and an outer rim 34 supported
from the hub by an annular web 36. A tread or tire 38 is secured over the
rim 34. A cylindrical sleeve 40 is received over the outer diameter of the
bolt 28. The central bore of the hub 32 is supported on the sleeve 40 by a
stepped cylindrical spacer 42 on the left side as viewed in FIG. 3 and a
cylindrical spacer 44 on the right side. For the purpose of lubricating
the castor, a bore 46 is provided in the axle 28. The bore 46 is closed at
the left end by a grease zerk 48, and has a radially extending open end 50
at the center of the axle. The castor assembly so far described is
generally in accordance with the prior art.
The braking mechanism in accordance with this invention includes a cam
member 52 and an operating member 54. The cam member 52 as shown in the
figures is formed with a flat base or pressure surface 56, opposite edges
of which are bent at essentially right angles to form outwardly projecting
members 58 and 60. The outer edges of the members 58 and 60 form caming
surfaces 62 and 64. As best seen in FIGS. 1, 3 and 4, the caming surface
62 and 64 each have the shape of a generally widespread V being of least
height closest at the center and increasing in height toward both ends of
the members. The base 56 of the cam member 52 is provided with a hole 66
to receive axle 28, and is shaped to receive the leg 14 between the
outwardly projecting members 58 and 60. The base 56 is interposed between
the end of the hub 13 of the wheel 16 and the inside surface of the leg
14.
The operating member 54 is formed with two portions at essentially right
angles to each other. A first portion includes a triangularly shaped
embossed cam engaging portion 68. An aperture 70 is provided in the
embossed cam engaging portion 68 to receive the axle or shaft 28, with
enough clearance to also receive an inwardly projecting sleeve extending
from a washer 72.
The axle 28 is shown as a bolt having a head 74 at the left end as viewed
in FIG. 3 and a threaded portion 76 at the right end. A locking nut 78 is
threaded onto the threaded portion 76 and a predetermined torque applied
thereto such that as will hereinafter be explained, with the operating
member 54 in the unlocked position as shown in FIG. 3, the wheel will
freely turn, but when the operating member is rotated to a locked position
such as shown in FIG. 4, forces will be applied to the edges of the hub as
shown in FIG. 4 to impede or prevent rotation of the wheel.
Referring to FIG. 5, it will be noted that the widespread V-shaped caming
surfaces 62 and 64 of the outwardly projecting members 58 and 60 are each
provided with a recessed portion 80 at the center. The embossed cam
engaging portion 68 of the operating member 54 is located in the recessed
portions 80 when the brake is in the unlocked position as shown in FIGS. 2
and 3. When the operating member 54 is pivoted clockwise or counter
clockwise from the position shown in FIG. 2, the cam engaging portion 68
on each side of the axle 28 engage the cam surfaces on the outwardly
projecting members 58 and 60 to develop the axially directed forces as
shown in FIG. 4. When the operating member is rotated in the counter
clockwise direction as viewed in FIG. 2, the cam engaging portion 68 will
engage the lower portion of the caming surface 62 and the upper portion of
the caming surface 64.
It can thus be understood that with the wheel locking mechanism of this
invention, the operating member 54 can be rotated either clockwise or
counterclockwise, such as by stepping on surface 82 or 84 as shown in FIG.
2, to bring about engagement of the locking mechanism to impede or prevent
turning of the wheel 16. To disengage the brake, it is only necessary to
apply a force to the upwardly projecting one of the surfaces 82 or 84 to
return operating member 54 to its horizontal position.
In summary, using the brake mechanism of this invention, braking action is
initiated by applying a force to either surface 82 or 84, whichever may be
most accessible due to the position of the castor with respect to the body
which it is supporting. Further, the unlocked position of the brake
mechanism is easily determined by returning of the operating member 48 to
the horizontal position.
While one embodiment of the invention has been shown, it should be apparent
to those skilled in the art that what has been described is considered at
the present to be the preferred embodiment of the braking mechanism of
this invention. In accordance with the patent statutes, changes may be
made in the braking mechanism without actually departing from the true
spirit and scope of this invention. The appended claims are intended to
cover all such changes and modifications which fall within the true spirit
and scope of this invention.


Context: Good Old War and person L : I saw both of these bands Wednesday night , and they both blew me away . seriously . Good Old War is acoustic and makes me smile . I really can not help but be happy when I listen to them ; I think it 's the fact that they seemed so happy themselves when they played .

Question: In the future , will this person go to see other bands play ?

This person likes music and likes to see the show , they will see other bands play .

This person only likes Good Old War and Person L , no other bands .

Other Bands is not on tour and this person can not see them .


Context: I mean it : not one person said ANYTHING to me . They would have if I did something wrong , right ? But , this morning , I got a call from my guy at the temp agency and he said that I was no longer needed in that position , that I did n't need to go out there .

Question: Why might have the temp agency tell me I am not needed at that position ?

The company hiring the temp workers might have had a change of mind .

The temp agency hiring the temp workers might have had a change of mind .

I might have had a change of mind working for the company .


Context: Leaving my shift Thursday day shift I arrived the same time as my partner just after six that evening and before long the radio erupted in dispatch tones . A car fleeing the police has crashed and landed on its roof with four separate people entrapped inside . Our medic unit is dispatched along with multiple other ambulances and Rescue Companies .

Question: What may have caused the radio to erupt with dispatch tones ?

Someone was running from the ambulances after they got into a wreck .

Someone was running from the cops and got into a wreck .


Context: So , last day in Seattle , and my flight was at 1:30 . I got to chit chat with my old manager ( more like a mentor ) , and left Seattle feeling really good and inspired . .

Question: Why did I chit chat with my old manager ?

Because I left Seattle feeling really good and inspired .


Context: Ms. Mumma informed Mr. Dail that evidence had been found in his case . " I fell out of my chair and burst into tears . Evidence meant I was going home , and I knew that , " said Mr. Dail . He immediately told Ms. Mumma , " Test anything and everything you can find .

Question: Why did I burst into tears ?

Because I had an intense emotional response to the new development .


Context: A while later I tried the car again and lo and behold it does n't start at all , so a tow truck was called , and I chatted with Ellen ( who was n't in class after all ) while I waited . My dad came and got me from the body shop . The End . ( Where the hell did my freaking cow go ?

Question: What is n't working properly ?


Context: Until we went to a playdate two weeks ago . Thea 's mom is Serbian and crepes are apparently as common in Serbia as they are in France . We discussed the batter , the texture , the cooking process , the topping options and Dee generally brought me up to speed . Being not brave enough to just start throwing ingredients in a bowl as she did , I got a recipe of the internet for general proportions , ended up not using nearly as much water as was called for and successfully made crepes .

Question: Why did they discuss crepes ?

Because the writer got a recipe from the internet .

Because the writer is interested in learning how to cook crepes .


Context: Let me be clear , everything is good . Having said that , I ' ve been a little preoccupied lately , as Leslie threw out her back on Sunday . It 's been an interesting , and marriage - solidifying 36 hours . Sunday afternoon , around 2 pm , Leslie and I were hanging in the library , sans kids ( they were with their father ) , listening to music and talking .

Question: How did Leslie 's throwing out of her back help to solidify your marriage ?

Leslie realized that I am really good at taking care of people and wants to keep me around for that reason

Leslie saw that if she ever hurt herself she would need my help to heal and realized that she needs me

We were able to spend time together just talking and that helped us to connect better


Context: WHAT could be in the package ? Something PORNOGRAPHIC , that 's for sure ! I rushed into the house and went to the laundry room , closed the door and pulled the package out of the magazine . I flipped it over , and reread the words on the side . Contains PHOTOGRAPHIC material . Damn .

Question: Why is this person disappointed that they misread the label on the package ?

Pornographic implies something forbidden , this person was exited by the thought .

The person ordered a package of pornographic material and anticipated its arrival .

The material inside the package contains ordinary pornography , not a magazine .


Question: Why is this person disappointed that they misread the label on the package ?

The material inside the package contains ordinary pornography , not a magazine .

The person ordered a package of pornographic material and anticipated its arrival .

The misread label made the person think the package contains something forbidden , the truth was dull .


Dataset Viewer issue for vadis/sv-ident

dataset-viewer

Related to the dataset viewer on huggingface.co

### Link

https://huggingface.co/datasets/vadis/sv-ident

### Description

The dataset preview does not work:
```
Server Error

Status code:   400
Exception:     Status400Error
Message:       The dataset does not exist.
```

However, the dataset is streamable and works locally:
```python
In [1]: from datasets import load_dataset; ds = load_dataset("sv-ident.py", split="train", streaming=True); item = next(iter(ds)); item
Using custom data configuration default
Out[1]:
{'sentence': 'Our point, however, is that so long as downward (favorable) comparisons overwhelm the potential for unfavorable comparisons, system justification should be a likely outcome amongst the disadvantaged.',
 'is_variable': 1,
 'variable': ['exploredata-ZA5400_VarV66', 'exploredata-ZA5400_VarV53'],
 'research_data': ['ZA5400'],
 'doc_id': '73106',
 'uuid': 'b9fbb80f-3492-4b42-b9d5-0254cc33ac10',
 'lang': 'en'}
```

CC: @e-tornike

### Owner

No


split cache used when processing different split

bug

Something isn't working

## Describe the bug`
```
ds1 = load_dataset('squad', split='validation')
ds2 = load_dataset('squad', split='train')
ds1 = ds1.map(some_function)
ds2 = ds2.map(some_function)
assert ds1 == ds2
```
This happens when ds1 and ds2 are created in `pytorch_lightning.DataModule` through

```
class myDataModule:

    def train_dataloader(self):
         ds = load_dataset('squad', split='train')
         ds = ds.map(some_function)
         return [ds]

    def val_dataloader(self):
         ds = load_dataset('squad', split="validation")
         ds = ds.map(some_function)
         return [ds]
```
I don't know if it depends on `pytorch_lightning` or `datasets` but setting `ds.map(some_function, load_from_cache_file=False)` fixes the issue.

If this is not enough to replicate I will try and provide and MWE, I don't have time now so I thought I wuld open the issue first!


Out of memory error on workers while running Beam+Dataflow

Something isn't working

Some naive ideas to cope with this:
- enable more RAM on each worker
- force the spanning of more workers
- others?

## Describe the bug
While running the preprocessing of the natural_question dataset (see PR #4368), there is an issue for the "default" config (train+dev files).

Previously we ran the preprocessing for the "dev" config (only dev files) with success.

Train data files are larger than dev ones and apparently workers run out of memory while processing them.

Any help/hint is welcome!

Error message:
```
Data channel closed, unable to receive additional data from SDK sdk-0-0
```

Info from the Diagnostics tab:
```
Out of memory: Killed process 1882 (python) total-vm:6041764kB, anon-rss:3290928kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:9520kB oom_score_adj:900
The worker VM had to shut down one or more processes due to lack of memory.
```

## Additional information

### Stack trace
```
Traceback (most recent call last):
  File "/home/albert_huggingface_co/natural_questions/venv/bin/datasets-cli", line 8, in <module>
    sys.exit(main())
  File "/home/albert_huggingface_co/natural_questions/venv/lib/python3.9/site-packages/datasets/commands/datasets_cli.py", line 39, in main
    service.run()
  File "/home/albert_huggingface_co/natural_questions/venv/lib/python3.9/site-packages/datasets/commands/run_beam.py", line 127, in run
    builder.download_and_prepare(
  File "/home/albert_huggingface_co/natural_questions/venv/lib/python3.9/site-packages/datasets/builder.py", line 704, in download_and_prepare
    self._download_and_prepare(
  File "/home/albert_huggingface_co/natural_questions/venv/lib/python3.9/site-packages/datasets/builder.py", line 1389, in _download_and_prepare
    pipeline_results.wait_until_finish()
  File "/home/albert_huggingface_co/natural_questions/venv/lib/python3.9/site-packages/apache_beam/runners/dataflow/dataflow_runner.py", line 1667, in wait_until_finish
    raise DataflowRuntimeException(
apache_beam.runners.dataflow.dataflow_runner.DataflowRuntimeException: Dataflow pipeline failed. State: FAILED, Error:
Data channel closed, unable to receive additional data from SDK sdk-0-0
```

### Logs
```
Error message from worker: Data channel closed, unable to receive additional data from SDK sdk-0-0

Workflow failed. Causes: S30:train/ReadAllFromText/ReadAllFiles/Reshard/ReshufflePerKey/GroupByKey/Read+train/ReadAllFromText/ReadAllFiles/Reshard/ReshufflePerKey/GroupByKey/GroupByWindow+train/ReadAllFromText/ReadAllFiles/Reshard/ReshufflePerKey/FlatMap(restore_timestamps)+train/ReadAllFromText/ReadAllFiles/Reshard/RemoveRandomKeys+train/ReadAllFromText/ReadAllFiles/ReadRange+train/Map(_parse_example)+train/Encode+train/Count N. Examples+train/Get values/Values+train/Save to parquet/Write/WriteImpl/WindowInto(WindowIntoFn)+train/Save to parquet/Write/WriteImpl/WriteBundles+train/Save to parquet/Write/WriteImpl/Pair+train/Save to parquet/Write/WriteImpl/GroupByKey/Write failed., The job failed because a work item has failed 4 times. Look in previous log entries for the cause of each one of the 4 failures. For more information, see https://cloud.google.com/dataflow/docs/guides/common-errors. The work item was attempted on these workers: beamapp-alberthuggingface-06170554-5p23-harness-t4v9 Root cause: Data channel closed, unable to receive additional data from SDK sdk-0-0, beamapp-alberthuggingface-06170554-5p23-harness-t4v9 Root cause: The worker lost contact with the service., beamapp-alberthuggingface-06170554-5p23-harness-bwsj Root cause: The worker lost contact with the service., beamapp-alberthuggingface-06170554-5p23-harness-5052 Root cause: The worker lost contact with the service.
```