IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41489 for trunk


Ignore:
Timestamp:
Feb 9, 2021, 10:49:12 AM (5 years ago)
Author:
eugene
Message:

fix library order for pcontrol linkage; report buffer dimensions and NAXIS3 size; add file stats; allow string vector element assignment

Location:
trunk/Ohana/src/opihi
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.basic/file.c

    r41405 r41489  
    88  struct stat fstats;
    99
     10  if ((N = get_argument (argc, argv, "-h"))) goto usage;
     11  if ((N = get_argument (argc, argv, "-help"))) goto usage;
     12
    1013  int CAN_READ = FALSE;
    1114  if ((N = get_argument (argc, argv, "-can-read"))) {
     
    1518  int CAN_WRITE = FALSE;
    1619  if ((N = get_argument (argc, argv, "-can-write"))) {
     20    if (CAN_READ) goto badopts;
    1721    remove_argument (N, &argc, argv);
    1822    CAN_WRITE = TRUE;
    1923  }
     24  int GET_STATS = FALSE;
     25  if ((N = get_argument (argc, argv, "-stats"))) {
     26    if (CAN_READ || CAN_WRITE) goto badopts;
     27    remove_argument (N, &argc, argv);
     28    GET_STATS = TRUE;
     29  }
    2030
    21   if ((argc < 2) || (CAN_READ && CAN_WRITE)) {
    22     gprint (GP_ERR, "USAGE: file (filename) [var] [-can-read] [-can-write]\n");
    23     gprint (GP_ERR, "  NOTE: only one of -can-read or -can-write is allowed\n");
    24     return (FALSE);
    25   }
     31  if ((argc != 2) && (argc != 3)) goto usage;
    2632
    2733  if (CAN_READ) {
     
    3036      set_int_variable (argv[2], status);
    3137    } else {
    32       gprint (GP_ERR, "file %s can", argv[1]);
    33       if (!status) gprint (GP_ERR, "not");
    34       gprint (GP_ERR, " be read\n");
     38      gprint (GP_LOG, "file %s can", argv[1]);
     39      if (!status) gprint (GP_LOG, "not");
     40      gprint (GP_LOG, " be read\n");
    3541    }
    3642    return TRUE;
     
    4147      set_int_variable (argv[2], status);
    4248    } else {
    43       gprint (GP_ERR, "file %s can", argv[1]);
    44       if (!status) gprint (GP_ERR, "not");
    45       gprint (GP_ERR, " be written\n");
     49      gprint (GP_LOG, "file %s can", argv[1]);
     50      if (!status) gprint (GP_LOG, "not");
     51      gprint (GP_LOG, " be written\n");
    4652    }
    4753    return TRUE;
     
    5056  status = stat (argv[1], &fstats);
    5157
    52   vstat = !status;
     58  if (!GET_STATS) {
     59    vstat = !status;
     60
     61    if (argc == 3) {
     62      set_int_variable (argv[2], vstat);
     63    } else {
     64      gprint (GP_LOG, "file %s is ", argv[1]);
     65      if (!vstat) gprint (GP_LOG, "not ");
     66      gprint (GP_LOG, "found\n");
     67    }
     68    return (TRUE);
     69  }
     70
     71  int TimeFormat;
     72  time_t TimeReference;
     73
     74  // use the variable to set the stats fields
     75  GetTimeFormat (&TimeReference, &TimeFormat);
    5376
    5477  if (argc == 3) {
    55     set_int_variable (argv[2], vstat);
     78    char varname[1024];
     79
     80    snprintf (varname, 1024, "%s:devID",   argv[2]); set_int_variable (varname, fstats.st_dev);
     81    snprintf (varname, 1024, "%s:inode",   argv[2]); set_int_variable (varname, fstats.st_ino);
     82    snprintf (varname, 1024, "%s:mode",    argv[2]); set_int_variable (varname, fstats.st_mode);
     83    snprintf (varname, 1024, "%s:nlink",   argv[2]); set_int_variable (varname, fstats.st_nlink);
     84    snprintf (varname, 1024, "%s:uid",     argv[2]); set_int_variable (varname, fstats.st_uid);
     85    snprintf (varname, 1024, "%s:gid",     argv[2]); set_int_variable (varname, fstats.st_gid);
     86    snprintf (varname, 1024, "%s:rdev",    argv[2]); set_int_variable (varname, fstats.st_rdev);
     87    snprintf (varname, 1024, "%s:size",    argv[2]); set_int_variable (varname, fstats.st_size);
     88    snprintf (varname, 1024, "%s:blksize", argv[2]); set_int_variable (varname, fstats.st_blksize);
     89    snprintf (varname, 1024, "%s:blocks",  argv[2]); set_int_variable (varname, fstats.st_blocks);
     90
     91    snprintf (varname, 1024, "%s:atime", argv[2]); set_variable (varname, TimeValue (fstats.st_atim.tv_sec, TimeReference, TimeFormat));
     92    snprintf (varname, 1024, "%s:mtime", argv[2]); set_variable (varname, TimeValue (fstats.st_mtim.tv_sec, TimeReference, TimeFormat));
     93    snprintf (varname, 1024, "%s:ctime", argv[2]); set_variable (varname, TimeValue (fstats.st_ctim.tv_sec, TimeReference, TimeFormat));
    5694  } else {
    57     gprint (GP_ERR, "file %s is ", argv[1]);
    58     if (!vstat) gprint (GP_ERR, "not ");
    59     gprint (GP_ERR, "found\n");
     95    gprint (GP_LOG, "devID   : %d\n", (int) fstats.st_dev);
     96    gprint (GP_LOG, "inode   : %d\n", (int) fstats.st_ino);
     97    gprint (GP_LOG, "mode    : %o\n", (int) fstats.st_mode);
     98    gprint (GP_LOG, "nlink   : %d\n", (int) fstats.st_nlink);
     99    gprint (GP_LOG, "uid     : %d\n", (int) fstats.st_uid);
     100    gprint (GP_LOG, "gid     : %d\n", (int) fstats.st_gid);
     101    gprint (GP_LOG, "rdev    : %d\n", (int) fstats.st_rdev);
     102    gprint (GP_LOG, "size    : %d\n", (int) fstats.st_size);
     103    gprint (GP_LOG, "blksize : %d\n", (int) fstats.st_blksize);
     104    gprint (GP_LOG, "blocks  : %d\n", (int) fstats.st_blocks);
     105
     106    char *adate = ohana_sec_to_date (fstats.st_atim.tv_sec);
     107    gprint (GP_LOG, "atime   : %s\n", adate);
     108    free (adate);
     109
     110    char *mdate = ohana_sec_to_date (fstats.st_mtim.tv_sec);
     111    gprint (GP_LOG, "mtime   : %s\n", mdate);
     112    free (mdate);
     113
     114    char *cdate = ohana_sec_to_date (fstats.st_ctim.tv_sec);
     115    gprint (GP_LOG, "ctime   : %s\n", cdate);
     116    free (cdate);
    60117  }
    61   return (TRUE);
     118  return TRUE;
     119
     120badopts:
     121gprint (GP_ERR, "  NOTE: only one (or none) of -can-read, -can-write, -stats is allowed\n");
     122
     123 usage:
     124  gprint (GP_ERR, "USAGE: file [var] [-can-read] [-can-write] [-stats]\n");
     125  gprint (GP_ERR, "  by default, reports if file exists\n");
     126  gprint (GP_ERR, "  -can-read: reports if file exists and can be read\n");
     127  gprint (GP_ERR, "  -can-write: reports if file exists and can be written to\n");
     128  gprint (GP_ERR, "  -stats: reports if file exists and can be written to\n");
     129  return FALSE;
    62130}
    63131
  • trunk/Ohana/src/opihi/lib.shell/BufferOps.c

    r39233 r41489  
    278278 
    279279  if (Long) {
    280     gprint (GP_LOG, "    N       name                      file     X     Y    bytes BP  U   bzero     bscale  \n");
     280    gprint (GP_LOG, "    N       name                      file ND     X     Y     Z      bytes  BP U      bzero     bscale\n");
    281281    for (i = 0; i < Nbuffers; i++) {
    282       gprint (GP_LOG, "%5d %10s %25s %5lld %5lld %10lld %3d %1d %10.4e %10.4e\n",
    283               i, buffers[i][0].name, buffers[i][0].file,
    284               (long long) buffers[i][0].header.Naxis[0], (long long) buffers[i][0].header.Naxis[1],
     282      gprint (GP_LOG, "%5d %10s %25s %2d %5lld %5lld %5lld %10lld %3d %1d %10.4e %10.4e\n",
     283              i, buffers[i][0].name, buffers[i][0].file, buffers[i][0].header.Naxes,
     284              (long long) buffers[i][0].header.Naxis[0], (long long) buffers[i][0].header.Naxis[1], (long long) buffers[i][0].header.Naxis[2],
    285285              (long long) buffers[i][0].header.datasize + buffers[i][0].matrix.datasize, buffers[i][0].bitpix,
    286286              buffers[i][0].unsign, buffers[i][0].bzero, buffers[i][0].bscale);
     
    289289  }
    290290
    291   gprint (GP_LOG, "    N       name                      file     X     Y    bytes\n");
     291  gprint (GP_LOG, "    N       name                      file ND     X     Y     Z      bytes\n");
    292292  for (i = 0; i < Nbuffers; i++) {
    293     gprint (GP_LOG, "%5d %10s %25s %5lld %5lld %10lld\n",
    294             i, buffers[i][0].name, buffers[i][0].file,
    295             (long long) buffers[i][0].header.Naxis[0], (long long) buffers[i][0].header.Naxis[1],
     293    gprint (GP_LOG, "%5d %10s %25s %2d %5lld %5lld %5lld %10lld\n",
     294            i, buffers[i][0].name, buffers[i][0].file, buffers[i][0].header.Naxes,
     295            (long long) buffers[i][0].header.Naxis[0], (long long) buffers[i][0].header.Naxis[1], (long long) buffers[i][0].header.Naxis[2],
    296296            (long long) buffers[i][0].header.datasize + buffers[i][0].matrix.datasize);
    297297  }
  • trunk/Ohana/src/opihi/lib.shell/parse.c

    r41341 r41489  
    200200    }
    201201
    202     /* find value for assignment */
    203     V1 = nextcomm (line);
    204     if (V1 == (char *) NULL) goto error;
    205     if (V1[0] != '=') goto error;
    206     V1 ++;
    207 
    208     /*** assign vector element to value ***/
    209     val = dvomath (1, &V1, &size, 0);
    210     if (val == (char *) NULL) {
    211       print_error ();
    212       goto error;
    213     }
    214 
    215     /* find vector */
     202    /* find vector or buffer (check for valid element)*/
    216203    if (isBuffer) {
     204      // unknown buffer name
    217205      if ((buf = SelectBuffer (V0, OLDBUFFER, TRUE)) == NULL) goto error;
    218206      free (V0); V0 = (char *) NULL;
     
    229217      if (Nx < 0) Nx += buf[0].header.Naxis[0];
    230218      if (Ny < 0) Ny += buf[0].header.Naxis[1];
    231 
    232       fptr = (float *) buf[0].matrix.buffer;
    233       fptr[Nx + Ny*buf[0].header.Naxis[0]] = atof (val);
    234219    } else {
    235220      if ((vec = SelectVector (V0, OLDVECTOR, TRUE)) == NULL) goto error;
     
    244229      }
    245230      if (Nx < 0) Nx += vec[0].Nelements;
     231    }
     232
     233    /* find value for assignment */
     234    V1 = nextcomm (line);
     235    if (V1 == (char *) NULL) goto error;
     236    if (V1[0] != '=') goto error;
     237    V1 ++;
     238
     239    /*** assign vector (or buffer) element to value ***/
     240    val = dvomath (1, &V1, &size, 0);
     241    if (val == NULL) {
     242      if (!isBuffer && (vec->type == OPIHI_STR)) {
     243        while (OHANA_WHITESPACE (*V1)) V1++;
     244        val = strcreate (V1);
     245        init_error ();
     246      } else {
     247        print_error ();
     248        goto error;
     249      }
     250    }
     251
     252    /* find vector */
     253    if (isBuffer) {
     254      fptr = (float *) buf[0].matrix.buffer;
     255      fptr[Nx + Ny*buf[0].header.Naxis[0]] = atof (val);
     256    } else {
    246257      if (vec[0].type == OPIHI_FLT) {
    247258        vec[0].elements.Flt[Nx] = atof (val);
    248       } else {
     259      }
     260      if (vec[0].type == OPIHI_INT) {
    249261        vec[0].elements.Int[Nx] = atoll (val);
    250262      }
     263      if (vec[0].type == OPIHI_STR) {
     264        vec[0].elements.Str[Nx] = strcreate (val);
     265      }
    251266    }
    252267    goto escape;
     
    359374
    360375/* case 3: we hunt for '{', and then the first '}' and pass everything
    361    inbetween.  no nested {{}}s are allowed! */
     376   in between.  no nested {{}}s are allowed! */
    362377 
    363378/* thisword ALLOCATES
  • trunk/Ohana/src/opihi/pcontrol/Makefile

    r37807 r41489  
    1111
    1212# programs may add their own internal requirements here
    13 LIBS1         = -ldvo -lkapa -lFITS -lohana
    14 LIBS2         = -lbasiccmd -lshell -ldata
     13LIBS1         = -lbasiccmd -lshell -ldata
     14LIBS2         = -ldvo -lkapa -lFITS -lohana
    1515FULL_CFLAGS   = $(BASE_CFLAGS)
    1616FULL_CPPFLAGS = $(BASE_CPPFLAGS)
Note: See TracChangeset for help on using the changeset viewer.