void dirUPDATE(string &line, RawSource *rs) { getoutput(line,rs,UPDATE); }
int main(int argc, char **argv){ int fd; int i, ret; int encodelen, K_byte, code_bit; unsigned char *buf, *outbuf; struct pdma_info info; struct pdma_rw_reg ctrl; int j, k, count; char *filename = "dataByte.txt"; #ifdef DEV fd = open("/dev/kerp", O_RDWR); if (fd == -1){ printf("open failed for pdma device\n"); return -1; } /*reset*/ ctrl.type = 1; //write ctrl.addr = 0; ctrl.val = 1; ret = ioctl(fd, PDMA_IOC_RW_REG, (unsigned long)&ctrl); if(ret == -1){ printf("pdma_ioc_rw_reg error\n"); return -1; } ret = ioctl(fd, PDMA_IOC_INFO, (unsigned long)&info); if(ret == -1){ printf("get info failed\n"); close(fd); return -1; } #endif #ifdef NODEV info.wt_block_sz = 16384; #endif //get file size K_byte = getfilesize(filename); //the code bit len that write into FPGA code_bit = (K_byte << 3) + 4; //after encode, the len is encodelen byte encodelen = code_bit * 4 * 2; //#ifdef DEBUG printf("\n encodelen : %d\n", encodelen); printf("code_len: %d\n", code_bit); printf("code_reg: %08x\n", code_bit<<19); //#endif //malloc buf if(encodelen%info.wt_block_sz == 0) count = encodelen/info.wt_block_sz; else count = encodelen/info.wt_block_sz + 1; printf("count: %d\n", count); outbuf = (unsigned char *)malloc(encodelen); buf = (unsigned char *)malloc(count * info.wt_block_sz); if(!buf){ printf("alloc buf failed\n"); close(fd); return -1; } #ifdef DEV code_bit = code_bit << 19; ctrl.val = code_bit; printf("code_bit : %08x\n", code_bit); ret = ioctl(fd, PDMA_IOC_RW_REG, (unsigned long)&ctrl); if(ret == -1){ printf("pdma_ioc_rw_reg error\n"); return -1; } #endif memset(outbuf, 0, encodelen); memset(buf, 0, count * info.wt_block_sz); getoutput(filename, K_byte, outbuf); for(i = 0; i < encodelen; i++){ if(outbuf[i] == 1) outbuf[i] = 0x7f; else outbuf[i] = 0x80; } outbuf[encodelen-5] = 0x81; //swap every 8byte for(i = 0; i < encodelen; i+=8){ j = 7; for(k = i; k < i+8; k++){ buf[k] = outbuf[i+j]; j--; } } #ifdef DEBUG printf("outbuf data:\n"); for(i = 0; i < encodelen; i++){ printf("%x ", outbuf[i]); } printf("\n \n"); printf("buf data: \n"); for(i = 0; i < encodelen; i++){ printf("%x ", buf[i]); } printf("\n"); #endif #ifdef WFILE if(access("writeout.txt", 0) == 0) remove("writeout.txt"); FILE *tt = fopen("writeout.txt", "w"); for(i = 0; i < count*info.wt_block_sz; i++){ if(i%8 == 0) fprintf(tt, "n=%d, ", i); fprintf(tt, "%x ", buf[i]); if((i+1)%8 == 0) fprintf(tt, "\n"); } fclose(tt); #endif #ifdef DEV /*wiret data*/ i = 0; while(i < count){ ret = write(fd, buf+i*info.wt_block_sz, info.wt_block_sz); if(ret != info.wt_block_sz){ printf("write failed\n"); return -1; } printf("%d write finish\n", i+1); i++; } #endif free(buf); close(fd); return 0; }
void dirOUTPUT(string &line, RawSource *rs) { getoutput(line,rs,OVERWRITE); }
LinkNode stringsubst(LinkList list, LinkNode node, int ssub) { int qt; char *str3 = (char *)getdata(node); char *str = str3; while (!errflag && *str) { if ((qt = *str == Qstring) || *str == String) if (str[1] == Inpar) { str++; goto comsub; } else if (str[1] == Inbrack) { /* $[...] */ char *str2 = str; str2++; if (skipparens(Inbrack, Outbrack, &str2)) { zerr("closing bracket missing", NULL, 0); return NULL; } str2[-1] = *str = '\0'; str = arithsubst(str + 2, &str3, str2); setdata(node, (void *) str3); continue; } else { node = paramsubst(list, node, &str, qt, ssub); if (errflag || !node) return NULL; str3 = (char *)getdata(node); continue; } else if ((qt = *str == Qtick) || *str == Tick) comsub: { LinkList pl; char *s, *str2 = str; char endchar; int l1, l2; if (*str == Inpar) { endchar = Outpar; str[-1] = '\0'; if (skipparens(Inpar, Outpar, &str)) DPUTS(1, "Oops. parse error in command substitution"); str--; } else { endchar = *str; *str = '\0'; while (*++str != endchar) DPUTS(!*str, "Oops. parse error in command substitution"); } *str++ = '\0'; if (endchar == Outpar && str2[1] == '(' && str[-2] == ')') { /* Math substitution of the form $((...)) */ str = arithsubst(str2 + 1, &str3, str); setdata(node, (void *) str3); continue; } /* It is a command substitution, which will be parsed again * * by the lexer, so we untokenize it first, but we cannot use * * untokenize() since in the case of `...` some Bnulls should * * be left unchanged. Note that the lexer doesn't tokenize * * the body of a command substitution so if there are some * * tokens here they are from a ${(e)~...} substitution. */ for (str = str2; *++str; ) if (itok(*str) && *str != Nularg && !(endchar != Outpar && *str == Bnull && (str[1] == '$' || str[1] == '\\' || str[1] == '`' || (qt && str[1] == '"')))) *str = ztokens[*str - Pound]; str++; if (!(pl = getoutput(str2 + 1, qt || ssub))) { zerr("parse error in command substitution", NULL, 0); return NULL; } if (endchar == Outpar) str2--; if (!(s = (char *) ugetnode(pl))) { str = strcpy(str2, str); continue; } if (!qt && ssub && isset(GLOBSUBST)) tokenize(s); l1 = str2 - str3; l2 = strlen(s); if (nonempty(pl)) { LinkNode n = lastnode(pl); str2 = (char *) ncalloc(l1 + l2 + 1); strcpy(str2, str3); strcpy(str2 + l1, s); setdata(node, str2); insertlinklist(pl, node, list); s = (char *) getdata(node = n); l1 = 0; l2 = strlen(s); } str2 = (char *) ncalloc(l1 + l2 + strlen(str) + 1); if (l1) strcpy(str2, str3); strcpy(str2 + l1, s); str = strcpy(str2 + l1 + l2, str); str3 = str2; setdata(node, str3); continue; } str++; } return errflag ? NULL : node; }