Esempio n. 1
0
File: hf.c Progetto: taojt/Huffman
void decompress(File *in, File *out)
{
    uint32_t fileSize, length = 0;
	uint16_t encoderNodeCount;
	uint16_t ch, *xList, *zList;
	Encoder_Node *root, *p;

	decoder_readHead(&fileSize, &encoderNodeCount, &xList, &zList, in);
	root = decoder_rebuildEncoder(xList, zList, 0, 0, encoderNodeCount);

	ch = Fgetc(in);
	p = root;
	while (!Feof(in)) {
		int8_t bit;

		while (((bit=FgetBit(ch)) != (int8_t)-1) && length < fileSize) {
			if (bit == (int8_t)0)
				p = p->left;
			else
				p = p->right;

			if (p->left == NULL && p->right == NULL) {
				Fputc(p->ch, out);
				p = root;
				++length;
			}
		}

		ch = Fgetc(in);
	}

	free(xList);
	free(zList);
	encoder_freeEncoder(root);
}
Esempio n. 2
0
File: moveto.c Progetto: 8l/sam
void
doubleclick(File *f, Posn p1)
{
	int c, i;
	Rune *r, *l;

	if(p1 > f->nrunes)
		return;
	f->dot.r.p1 = f->dot.r.p2 = p1;
	for(i=0; left[i]; i++){
		l = left[i];
		r = right[i];
		/* try left match */
		if(p1 == 0){
			Fgetcset(f, p1);
			c = '\n';
		}else{
			Fgetcset(f, p1-1);
			c = Fgetc(f);
		}
		if(c!=-1 && strrune(l, c)){
			if(clickmatch(f, c, r[strrune(l, c)-l], 1)){
				f->dot.r.p1 = p1;
				f->dot.r.p2 = f->getcp-(c!='\n');
			}
			return;
		}
		/* try right match */
		if(p1 == f->nrunes){
			Fbgetcset(f, p1);
			c = '\n';
		}else{
			Fbgetcset(f, p1+1);
			c = Fbgetc(f);
		}
		if(c!=-1 && strrune(r, c)){
			if(clickmatch(f, c, l[strrune(r, c)-r], -1)){
				f->dot.r.p1 = f->getcp;
				if(c!='\n' || f->getcp!=0 ||
				   (Fgetcset(f, (Posn)0),Fgetc(f))=='\n')
					f->dot.r.p1++;
				f->dot.r.p2 = p1+(p1<f->nrunes && c=='\n');
			}
			return;
		}
	}
	/* try filling out word to right */
	Fgetcset(f, p1);
	while((c=Fgetc(f))!=-1 && alnum(c))
		f->dot.r.p2++;
	/* try filling out word to left */
	Fbgetcset(f, p1);
	while((c=Fbgetc(f))!=-1 && alnum(c))
		f->dot.r.p1--;
}
Esempio n. 3
0
t_stat sim_load (FILE *fileref, CONST char *cptr, CONST char *fnam, int flag)
{
t_stat r;
int32 val;
uint32 origin, limit;

if (flag)                                               /* dump? */
    return sim_messagef (SCPE_NOFNC, "Command Not Implemented\n");
origin = 0;                                             /* memory */
limit = (uint32) cpu_unit.capac;
if (sim_switches & SWMASK ('O')) {                      /* origin? */
    origin = (int32) get_uint (cptr, 16, 0xFFFFFFFF, &r);
    if (r != SCPE_OK)
        return SCPE_ARG;
    }

while ((val = Fgetc (fileref)) != EOF) {                 /* read byte stream */
    if (sim_switches & SWMASK ('R')) {                  /* ROM0? */
        return SCPE_NXM;
        }
    else if (sim_switches & SWMASK ('S')) {             /* ROM1? */
        return SCPE_NXM;
        }
    else {
        if (origin >= limit)                            /* NXM? */
            return SCPE_NXM;
        WriteB (origin, val);                           /* memory */
        }
    origin = origin + 1;
    }
return SCPE_OK;
}
Esempio n. 4
0
File: moveto.c Progetto: 8l/sam
int
clickmatch(File *f, int cl, int cr, int dir)
{
	int c;
	int nest = 1;

	while((c=(dir>0? Fgetc(f) : Fbgetc(f))) > 0)
		if(c == cr){
			if(--nest==0)
				return 1;
		}else if(c == cl)
			nest++;
	return cl=='\n' && nest==1;
}
Esempio n. 5
0
File: hf.c Progetto: taojt/Huffman
void compress(File *in, File *out)
{
	uint8_t ch;
	Queue_Node *buf[256];
	Queue *queueHead;
	Encoder_Node *en, *root;
	Encoder_Table **table;
	Queue_Node *qn;
	uint16_t nodeCount;

	memset(buf, 0, sizeof(buf));

	queueHead = queue_new();
	ch = Fgetc(in);
	while (!Feof(in)) {
		if (buf[ch] == NULL) {
			en = encoder_newNode(ch, 0, NULL, NULL);
			qn = queue_newNode(1, en, NULL, NULL);
			queue_append(queueHead, qn);
			buf[ch] = qn;
		} else
			buf[ch]->count++;

		ch = Fgetc(in);
	}

	Frewind(in);
	root = encoder_newEncoder(queueHead);
	table = encoder_newEncoderTable(buf);
	nodeCount = encoder_getEncoderNodeCount(table);
	encoder_writeHeader(root, out, in->size, nodeCount);
	encoder_writeData(table, in, out);

	encoder_freeEncoder(root);
	encoder_freeEncoderTable(table);
	queue_freeQueue(queueHead);
}
Esempio n. 6
0
File: cmd.c Progetto: 4ad/sam
void
termcommand(void)
{
	Posn p;

	Fgetcset(cmd, cmdpt);
	for(p=cmdpt; p<cmd->nrunes; p++){
		if(terminp >= &termline[BLOCKSIZE]){
			cmdpt = cmd->nrunes;
			error(Etoolong);
		}
		*terminp++ = Fgetc(cmd);
	}
	cmdpt = cmd->nrunes;
}
Esempio n. 7
0
File: port.c Progetto: jaw0/jlisp
int compgetc(Obj p){
	int c;
	Obj cp = CDR(p), r;

	switch (SUBSUBPORT(p)){
	  case COMP_T:
	  case COMP_ECHO:
		c = readchar( CAR(cp));
		writechar( CDR(cp), c);
		break;
	  case COMP_2WAY:
		c = readchar( CAR(cp));
		break;
	  case COMP_CONCAT:
		c = readchar( CAR(cp));
		if( c == EOF ){
			/* go to next component */
			CDR(p) = CDR(cp);
			if( NULLP(CDR(p))){
				CAR(p) = IC_NIL;
				c = EOF;
			}else{
				c = compgetc(p);
			}
		}
		break;
	  case COMP_SYNO:
		r = Fgetc( getvalue(cp));
		if( r == IC_EOF )
			return EOF;
		if( !ICHARP(r) )
			return JLERROR("#<internal:compgetc>", r, "synonym-port returned a non-char");
		c = CCHAR(r);
		break;
	  case COMP_FUNC:
		r = funcall_0("#<internal:compgetc>", CVECTOR(cp)[0]);
		if( r == IC_EOF )
			return EOF;
		if( !ICHARP(r) )
			return JLERROR("#<internal:compgetc>", r, "function-port returned a non-char");
		c = CCHAR(r);
		break;
	  default:
		c = EOF;
		break;
	}
	return c;
}
Esempio n. 8
0
t_stat sim_load (FILE *fileref, CONST char *cptr, CONST char *fnam, int flag)
{
t_stat r;
int32 i;
uint32 origin, limit;
extern int32 ssc_cnf;
#define SSCCNF_BLO      0x80000000

if (flag)                                               /* dump? */
    return sim_messagef (SCPE_NOFNC, "Command Not Implemented\n");
if (sim_switches & SWMASK ('R')) {                      /* ROM? */
    origin = ROMBASE;
    limit = ROMBASE + ROMSIZE;
    }
else if (sim_switches & SWMASK ('N')) {                 /* NVR? */
    origin = NVRBASE;
    limit = NVRBASE + NVRSIZE;
    ssc_cnf = ssc_cnf & ~SSCCNF_BLO;
    }
else {
    origin = 0;                                         /* memory */
    limit = (uint32) cpu_unit.capac;
    if (sim_switches & SWMASK ('O')) {                  /* origin? */
        origin = (int32) get_uint (cptr, 16, 0xFFFFFFFF, &r);
        if (r != SCPE_OK)
            return SCPE_ARG;
        }
    }
while ((i = Fgetc (fileref)) != EOF) {                   /* read byte stream */
    if (origin >= limit)                                /* NXM? */
        return SCPE_NXM;
    if (sim_switches & SWMASK ('R'))                    /* ROM? */
        rom_wr_B (origin, i);                           /* not writeable */
    else WriteB (origin, i);                            /* store byte */
    origin = origin + 1;
    }
return SCPE_OK;
}
Esempio n. 9
0
t_stat sim_load (FILE *fileref, char *cptr, char *fnam, int flag)
{
t_stat r;
int32 i;
uint32 origin, limit;

if (flag)                                               /* dump? */
    return SCPE_ARG;
origin = 0;                                             /* memory */
limit = (uint32) cpu_unit.capac;
if (sim_switches & SWMASK ('O')) {                      /* origin? */
    origin = (int32) get_uint (cptr, 16, 0xFFFFFFFF, &r);
    if (r != SCPE_OK)
        return SCPE_ARG;
    }
while ((i = Fgetc (fileref)) != EOF) {                   /* read byte stream */
    if (origin >= limit)                                /* NXM? */
        return SCPE_NXM;
    else WriteB (origin, i);                            /* store byte */
    origin = origin + 1;
    }
return SCPE_OK;
}
Esempio n. 10
0
File: address.c Progetto: 8l/sam
Address
lineaddr(Posn l, Address addr, int sign)
{
	int n;
	int c;
	File *f = addr.f;
	Address a;

	SET(c);
	a.f = f;
	if(sign >= 0){
		if(l == 0){
			if(sign==0 || addr.r.p2==0){
				a.r.p1 = a.r.p2 = 0;
				return a;
			}
			a.r.p1 = addr.r.p2;
			Fgetcset(f, addr.r.p2-1);
		}else{
			if(sign==0 || addr.r.p2==0){
				Fgetcset(f, (Posn)0);
				n = 1;
			}else{
				Fgetcset(f, addr.r.p2-1);
				n = Fgetc(f)=='\n';
			}
			for(; n<l; ){
				c = Fgetc(f);
				if(c == -1)
					error(Erange);
				else if(c == '\n')
					n++;
			}
			a.r.p1 = f->getcp;
		}
		do; while((c=Fgetc(f))!='\n' && c!=-1);
		a.r.p2 = f->getcp;
	}else{
		Fbgetcset(f, addr.r.p1);
		if(l == 0)
			a.r.p2 = addr.r.p1;
		else{
			for(n = 0; n<l; ){	/* always runs once */
				c = Fbgetc(f);
				if(c == '\n')
					n++;
				else if(c == -1){
					if(++n != l)
						error(Erange);
				}
			}
			a.r.p2 = f->getcp;
			if(c == '\n')
				a.r.p2++;	/* lines start after a newline */
		}
		do; while((c=Fbgetc(f))!='\n' && c!=-1);
		a.r.p1 = f->getcp;
		if(c == '\n')
			a.r.p1++;	/* lines start after a newline */
	}
	return a;
}