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); }
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--; }
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; }
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; }
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); }
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; }
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; }
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; }
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; }
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; }