r45: added sqr and sqrt functions
[ctsim.git] / src / sdf-1.c
index 79e01d3260f6063af51577eb91f095d1bcd96d02..b95deb811e32013cc269179cf4c28d911edc1109 100644 (file)
@@ -2,10 +2,20 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: sdf-1.c,v 1.1 2000/04/28 13:02:44 kevin Exp $
+**  $Id: sdf-1.c,v 1.4 2000/05/09 14:52:27 kevin Exp $
 **  $Log: sdf-1.c,v $
-**  Revision 1.1  2000/04/28 13:02:44  kevin
-**  Initial revision
+**  Revision 1.4  2000/05/09 14:52:27  kevin
+**  added sqr and sqrt functions
+**
+**  Revision 1.3  2000/05/08 20:02:32  kevin
+**  ANSI C changes
+**
+**  Revision 1.2  2000/05/03 08:49:50  kevin
+**  Code cleanup
+**
+**  Revision 1.1.1.1  2000/04/28 13:02:44  kevin
+**  Initial CVS import for first public release
+**
 **
 **
 **  This program is free software; you can redistribute it and/or modify
 
 #include "ct.h"
 
-#define O_INVERT   6
-#define O_VERBOSE  7
-#define O_HELP     8
-#define O_VERSION  9
+enum {O_LOG, O_EXP, O_SQRT, O_SQR, O_INVERT, O_VERBOSE, O_HELP, O_VERSION};
 
 static struct option my_options[] =
 {
   {"invert", 0, 0, O_INVERT},
   {"verbose", 0, 0, O_VERBOSE},
+  {"log", 0, 0, O_LOG},
+  {"exp", 0, 0, O_EXP},
+  {"sqr", 0, 0, O_SQR},
+  {"sqrt", 0, 0, O_SQRT},
   {"help", 0, 0, O_HELP},
   {"version", 0, 0, O_VERSION},
   {0, 0, 0, 0}
@@ -48,6 +59,10 @@ usage (const char *program)
   fprintf(stdout, "Generate a SDF2D file from a SDF2D file\n");
   fprintf(stdout, "\n");
   fprintf(stdout, "     --invert   Invert image\n");
+  fprintf(stdout, "     --log      Natural logrithm of image\n");
+  fprintf(stdout, "     --exp      Natural exponential of image\n");
+  fprintf(stdout, "     --sqr      Square of image\n");
+  fprintf(stdout, "     --sqrt     Square root of image\n");
   fprintf(stdout, "     --verbose  Verbose modem\n");
   fprintf(stdout, "     --version  Print version\n");
   fprintf(stdout, "     --help     Print this help message\n");
@@ -63,6 +78,10 @@ main (int argc, char *const argv[])
   char *out_file;
   int opt_verbose = 0;
   int opt_invert = 0;
+  int opt_log = 0;
+  int opt_exp = 0;
+  int opt_sqr = 0;
+  int opt_sqrt = 0;
 
   while (1)
     {
@@ -76,6 +95,18 @@ main (int argc, char *const argv[])
        case O_INVERT:
          opt_invert = 1;
          break;
+       case O_LOG:
+         opt_log = 1;
+         break;
+       case O_SQR:
+         opt_sqr = 1;
+         break;
+       case O_SQRT:
+         opt_sqrt = 1;
+         break;
+       case O_EXP:
+         opt_exp = 1;
+         break;
        case O_VERBOSE:
          opt_verbose = 1;
          break;
@@ -106,16 +137,38 @@ main (int argc, char *const argv[])
   out_file = argv[optind + 1];
 
 
-  if (opt_invert) {
+  if (opt_invert || opt_log || opt_exp) {
     int ix, iy;
 
     im_in = image_load (in_file);
     im_out = image_create (out_file, im_in->nx, im_in->ny);
 
-    for (ix = 0; ix < im_in->nx; ix++)
-      for (iy = 0; iy < im_in->ny; iy++)
-       im_out->v[ix][iy] = - im_in->v[ix][iy];
-       
+    if (opt_invert) {
+      for (ix = 0; ix < im_in->nx; ix++)
+        for (iy = 0; iy < im_in->ny; iy++)
+          im_out->v[ix][iy] = - im_in->v[ix][iy];
+    }
+    if (opt_log) {
+      for (ix = 0; ix < im_in->nx; ix++)
+        for (iy = 0; iy < im_in->ny; iy++)
+          im_out->v[ix][iy] = log (im_in->v[ix][iy]);
+    }
+    if (opt_exp) {
+      for (ix = 0; ix < im_in->nx; ix++)
+        for (iy = 0; iy < im_in->ny; iy++)
+          im_out->v[ix][iy] = exp (im_in->v[ix][iy]);
+    }
+    if (opt_sqr) {
+      for (ix = 0; ix < im_in->nx; ix++)
+        for (iy = 0; iy < im_in->ny; iy++)
+          im_out->v[ix][iy] = im_in->v[ix][iy] * im_in->v[ix][iy];
+    }
+    if (opt_sqrt) {
+      for (ix = 0; ix < im_in->nx; ix++)
+        for (iy = 0; iy < im_in->ny; iy++)
+          im_out->v[ix][iy] = sqrt (im_in->v[ix][iy]);
+    }
+
     image_save(im_out);
   }