Index: trunk/Ohana/src/opihi/cmd.data/cast.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/cast.c	(revision 36489)
+++ trunk/Ohana/src/opihi/cmd.data/cast.c	(revision 38441)
@@ -17,7 +17,15 @@
   // out type 
   char outType = OPIHI_NOTYPE;
-  if (!strcasecmp(argv[5], "int")) outType = OPIHI_INT;
-  if (!strcasecmp(argv[5], "float")) outType = OPIHI_FLT;
+  if (!strcasecmp(argv[5], "int"))    outType = OPIHI_INT;
+  if (!strcasecmp(argv[5], "float"))  outType = OPIHI_FLT;
+  if (!strcasecmp(argv[5], "single")) outType = OPIHI_FLT;
+  if (!strcasecmp(argv[5], "int64"))  outType = OPIHI_FLT;
   if (outType == OPIHI_NOTYPE) goto usage;
+
+  int ForceSingle = FALSE;
+  if (!strcasecmp(argv[5], "single")) ForceSingle = TRUE;
+
+  int ForceI64 = FALSE;
+  if (!strcasecmp(argv[5], "int64")) ForceI64 = TRUE;
 
   if ((ovec = SelectVector (argv[1], ANYVECTOR, TRUE)) == NULL) goto error;
@@ -32,5 +40,13 @@
     opihi_flt *vo = ovec[0].elements.Flt;
     for (i = 0; i < ovec[0].Nelements; i++, vi++, vo++) {
-      *vo = *vi;
+      if (ForceSingle) {
+	float tmp = *vi;
+	*vo = tmp;
+      } else if (ForceI64) {
+	int64_t tmp = *vi;
+	*vo = tmp;
+      } else {
+	*vo = *vi;
+      }
     }
     return (TRUE);
@@ -48,5 +64,10 @@
     opihi_flt *vo = ovec[0].elements.Flt;
     for (i = 0; i < ovec[0].Nelements; i++, vi++, vo++) {
-      *vo = *vi;
+      if (ForceSingle) {
+	float tmp = *vi;
+	*vo = tmp;
+      } else {
+	*vo = *vi;
+      }
     }
     return (TRUE);
@@ -66,5 +87,6 @@
 
 usage:
-  gprint (GP_ERR, "SYNTAX: cast vec = vec as (int/float)\n");
+  gprint (GP_ERR, "SYNTAX: cast vec = vec as (int/float/single)\n");
+  gprint (GP_ERR, "  note: (single) forces vector to have single precision\n");
   return (FALSE);
 }
