📄 encode.c
字号:
/* ENCODE.C - Encode message blocks. *//* Copyright (c) 2000, 2001 by Radford M. Neal * * Permission is granted for anyone to copy, use, or modify this program * for purposes of research or education, provided this copyright notice * is retained, and note is made of any changes that have been made. * * This program is distributed without any warranty, express or implied. * As this program was written for research purposes only, it has not been * tested to the degree that would be advisable in any important application. * All use of this program is entirely at the user's own risk. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include "rand.h"#include "alloc.h"#include "blockio.h"#include "open.h"#include "mod2sparse.h"#include "mod2dense.h"#include "mod2convert.h"#include "rcode.h"#include "enc.h"void usage(void);/* MAIN PROGRAM. */int main( int argc, char **argv){ char *source_file, *encoded_file; char *pchk_file, *gen_file; mod2dense *u, *v; FILE *srcf, *encf; char *sblk, *cblk, *chks;//sourceblock???codeblock??? int i, n; /* Look at arguments. */ if (!(pchk_file = argv[1]) || !(gen_file = argv[2]) || !(source_file = argv[3])|| !(encoded_file = argv[4])|| argv[5]) {
usage(); } if ((strcmp(pchk_file,"-")==0) + (strcmp(gen_file,"-")==0) + (strcmp(source_file,"-")==0) > 1) {
fprintf(stderr,"Can't read more than one stream from standard input\n"); exit(1); } /* Read parity check file */ read_pchk(pchk_file); if (N<=M) {
fprintf(stderr, "Can't encode if number of bits (%d) not greater than number of checks (%d)\n", N,M); exit(1); } /* Read generator matrix file. */ read_gen(gen_file,0,0); /* Allocate needed space. */ if (type=='d') {
u = mod2dense_allocate(N-M,1); v = mod2dense_allocate(M,1); } if (type=='m') {
u = mod2dense_allocate(M,1); v = mod2dense_allocate(M,1); } /* Open source file. */ srcf = open_file_std(source_file,"r"); if (srcf==NULL) {
fprintf(stderr,"Can't open source file: %s\n",source_file); exit(1); } /* Create encoded output file. */ encf = open_file_std(encoded_file,"w"); if (encf==NULL) {
fprintf(stderr,"Can't create file for encoded data: %s\n",encoded_file); exit(1); } sblk = chk_alloc (N-M, sizeof *sblk);// cblk = chk_alloc (N, sizeof *cblk); chks = chk_alloc (M, sizeof *chks); /* Encode successive blocks. */ for (n = 0; ; n++) { /* Read block from source file. */ if (blockio_read(srcf,sblk,N-M)==EOF) {
break; } /* Compute encoded block. */ switch (type) {
case 's': {
sparse_encode (sblk, cblk); break; } case 'd': {
dense_encode (sblk, cblk, u, v); break; } case 'm': {
mixed_encode (sblk, cblk, u, v); break; } } /* Check that encoded block is a code word. */ mod2sparse_mulvec (H, cblk, chks); for (i = 0; i<M; i++) {
if (chks[i]==1) {
fprintf(stderr,"Output block %d is not a code word! (Fails check %d)\n",n,i); abort(); } } /* Write encoded block to encoded output file. */ blockio_write(encf,cblk,N); } fprintf(stderr, "Encoded %d blocks, source block size %d, encoded block size %d\n",n,N-M,N); if (ferror(encf) || fclose(encf)!=0) {
fprintf(stderr,"Error writing encoded blocks to %s\n",encoded_file); exit(1); } return 0;}/* PRINT USAGE MESSAGE AND EXIT. */void usage(void){
fprintf(stderr, "Usage: encode pchk-file gen-file source-file encoded-file\n"); exit(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -