IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.