mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6437 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			140 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* PRINT-CODE.C - Print a Low Density Parity Check code's matrices. */
 | 
						|
 | 
						|
/* Copyright (c) 1995-2012 by Radford M. Neal.
 | 
						|
 *
 | 
						|
 * Permission is granted for anyone to copy, use, modify, and distribute
 | 
						|
 * these programs and accompanying documents for any purpose, provided
 | 
						|
 * this copyright notice is retained and prominently displayed, and note
 | 
						|
 * is made of any changes made to these programs.  These programs and
 | 
						|
 * documents are distributed without any warranty, express or implied.
 | 
						|
 * As the programs were written for research purposes only, they have not
 | 
						|
 * been tested to the degree that would be advisable in any important
 | 
						|
 * application.  All use of these programs 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 "open.h"
 | 
						|
#include "mod2sparse.h"
 | 
						|
#include "mod2dense.h"
 | 
						|
#include "mod2convert.h"
 | 
						|
#include "rcode.h"
 | 
						|
 | 
						|
void usage(void);
 | 
						|
 | 
						|
 | 
						|
/* MAIN PROGRAM. */
 | 
						|
 | 
						|
int main
 | 
						|
( int argc,
 | 
						|
  char **argv
 | 
						|
)
 | 
						|
{
 | 
						|
  char *gen_file;
 | 
						|
  int dprint;
 | 
						|
  int i, j;
 | 
						|
 | 
						|
  dprint = 0;
 | 
						|
  if (argc>1 && strcmp(argv[1],"-d")==0)
 | 
						|
  { dprint = 1;
 | 
						|
    argc -= 1;
 | 
						|
    argv += 1;
 | 
						|
  }
 | 
						|
 | 
						|
  if (!(gen_file = argv[1]) || argv[2])
 | 
						|
  { usage();
 | 
						|
  }
 | 
						|
 | 
						|
  read_gen(gen_file,0,1);
 | 
						|
 | 
						|
  switch (type)
 | 
						|
  {
 | 
						|
    case 's': 
 | 
						|
    { 
 | 
						|
      printf("\nGenerator matrix in %s (sparse representation):\n\n",gen_file);
 | 
						|
 | 
						|
      printf("Column order (message bits at end):\n");
 | 
						|
      for (j = 0; j<N; j++) 
 | 
						|
      { if (j%20==0) printf("\n");
 | 
						|
        printf(" %3d",cols[j]);
 | 
						|
      }
 | 
						|
      printf("\n\n");
 | 
						|
 | 
						|
      printf("Row order:\n");
 | 
						|
      for (i = 0; i<M; i++) 
 | 
						|
      { if (i%20==0) printf("\n");
 | 
						|
        printf(" %3d",rows[i]); 
 | 
						|
      }
 | 
						|
      printf("\n\n");
 | 
						|
 | 
						|
      if (dprint)
 | 
						|
      { mod2dense *Ld, *Ud;
 | 
						|
        Ld = mod2dense_allocate(M,M);
 | 
						|
        Ud = mod2dense_allocate(M,N);
 | 
						|
        mod2sparse_to_dense(L,Ld);
 | 
						|
        mod2sparse_to_dense(U,Ud);
 | 
						|
        printf("L:\n\n");
 | 
						|
        mod2dense_print(stdout,Ld);
 | 
						|
        printf("\n");
 | 
						|
        printf("U:\n\n");
 | 
						|
        mod2dense_print(stdout,Ud);
 | 
						|
        printf("\n");
 | 
						|
      }
 | 
						|
      else
 | 
						|
      { printf("L:\n\n");
 | 
						|
        mod2sparse_print(stdout,L);
 | 
						|
        printf("\n");
 | 
						|
        printf("U:\n\n");
 | 
						|
        mod2sparse_print(stdout,U);
 | 
						|
        printf("\n");
 | 
						|
      }
 | 
						|
     
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    case 'd': case 'm':
 | 
						|
    {
 | 
						|
      if (type=='d')
 | 
						|
      { printf("\nGenerator matrix in %s (dense representation):\n\n",gen_file);
 | 
						|
      }
 | 
						|
      if (type=='m')
 | 
						|
      { printf("\nGenerator matrix in %s (mixed representation):\n\n",gen_file);
 | 
						|
      }
 | 
						|
 | 
						|
      printf("Column order (message bits at end):\n");
 | 
						|
      for (j = 0; j<N; j++) 
 | 
						|
      { if (j%20==0) printf("\n");
 | 
						|
        printf(" %3d",cols[j]);
 | 
						|
      }
 | 
						|
      printf("\n\n");
 | 
						|
 | 
						|
      printf (type=='d' ? "Inv(A) X B:\n\n" : "Inv(A):\n\n");
 | 
						|
      mod2dense_print(stdout,G);
 | 
						|
      printf("\n");
 | 
						|
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    default: 
 | 
						|
    { fprintf(stderr,"Unknown type of generator matrix file\n");
 | 
						|
      exit(1);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* PRINT USAGE MESSAGE AND EXIT. */
 | 
						|
 | 
						|
void usage(void)
 | 
						|
{ fprintf(stderr,"Usage: print-gen [ -d ] gen-file\n");
 | 
						|
  exit(1);
 | 
						|
}
 |