*ID GBCZC406
*DC PORTIO2A
*C PORTIO2A
*I GBC6C404.22
#include <sys/stat.h>
*I RS030293.262

static char *real_file_name[MAX_UNITS];
static char file_names[MAX_UNITS*256];
*D GBC6C404.516
*D GBC6C404.521
*D GBC6C404.522
*D GBC6C404.526
*D GBC6C404.527
*D GBC6C404.531
*D GBC6C404.532
*D GBC6C404.537
*D GBC6C404.538
*D GBC6C404.545
*/
*/
*/
*I TS210793.12
    if ( *status != -1.0 ) {
/*    if ( *unit == 23 || *unit == 43 || *unit == 24 || *unit == 44 ) {
      */
      char *where="Read";
      print_file_details(where);
    }
*I GBC6C404.513

   real_file_name[*unit]=&file_names[*unit*256];
   if ( open_flag[*unit] == 0 ) {
     strcpy(real_file_name[*unit], gname);
     if ( *unit == 23 || *unit == 43 || *unit == 24 || *unit == 44 ) {
      char *where="Open";
      print_file_details(where);
     }
   }
   else
     strcpy(real_file_name[*unit], "*** Closed ***\0");
*I GBC6C404.514
real_file_name[*unit]=&file_names[*unit*256];
if ( *unit == 23 || *unit == 43 || *unit == 24 || *unit == 44 ) {
  char *where="Close";
  print_file_details(where);
}
strcpy(real_file_name[*unit], "*** Closed ***\0");
*I GBC0C402.296
print_file_details(where)
char where[];
{
  struct stat buf;
  time_t timval;
  int j;

  time(&timval);
  sprintf(message,
   "\n\nFile Status for %5s on %s", where, ctime(&timval));
  j=strlen(message);
  message[j-1]='\0';
  CALL_MESSAGE_PRINT(message);
  sprintf(message,
   "-------------------------------------------------  ");
  CALL_MESSAGE_PRINT(message);
  fprintf(stderr,
   "\n\nFile Status for %5s on %s", where, ctime(&timval));
  fprintf(stderr,
   "-------------------------------------------------\n");

  sprintf(message,
   "\nFile Name: %s  ", real_file_name[*the_unit]);
  CALL_MESSAGE_PRINT(message);
  fprintf(stderr,
   "\nFile Name: %s\n", real_file_name[*the_unit]);
*IF DEF,CRI_FFIO
  sprintf(message,
   "File Handle  %34xx  ", fd[*the_unit]);
  CALL_MESSAGE_PRINT(message);
  fprintf(stderr,
   "File Handle  %34xx\n", fd[*the_unit]);
*ELSE
  sprintf(message,
   "File Handle  %34xx  ", pf[*the_unit]);
  CALL_MESSAGE_PRINT(message);
  fprintf(stderr,
   "File Handle  %34xx\n", pf[*the_unit]);
*ENDIF
  if ( j = stat(real_file_name[*the_unit], &buf) != 0) {
    perror("\nSTAT File After Failed Read");
    sprintf(message,
     "Unable to STAT the File - Response is%17xx  ", j);
    CALL_MESSAGE_PRINT(message);
    abort();
  }
  fprintf(stderr,
         "File mode                     %17xx\n", buf.st_mode);
  sprintf(message,
         "File mode                     %17xx  ", buf.st_mode);
  CALL_MESSAGE_PRINT(message);
                  /* File mode; see mknod(2). */
  fprintf(stderr,
         "Inode number                  %17xx\n", buf.st_ino);
  sprintf(message,
         "Inode number                  %17xx  ", buf.st_ino);
  CALL_MESSAGE_PRINT(message);
                  /* Inode number for this file */
  fprintf(stderr,
         "Device                        %17xx\n", buf.st_dev);
  sprintf(message,
         "Device                        %17xx  ", buf.st_dev);
  CALL_MESSAGE_PRINT(message);
                  /* Device on which this file resides */
  fprintf(stderr,
         "Device ID                     %17xx\n", buf.st_rdev);
  sprintf(message,
         "Device ID                     %17xx  ", buf.st_rdev);
  CALL_MESSAGE_PRINT(message);
                  /* Device ID; this entry is defined only */
                  /* for character special or block special
                     files. */
  fprintf(stderr,
         "Number of links               %17d\n", buf.st_nlink);
  sprintf(message,
         "Number of links               %17d  ", buf.st_nlink);
  CALL_MESSAGE_PRINT(message);
                  /* Number of links */
  fprintf(stderr,
         "User ID                       %17d\n", buf.st_uid);
  sprintf(message,
         "User ID                       %17d  ", buf.st_uid);
  CALL_MESSAGE_PRINT(message);
                  /* User ID of the file's owner */
  fprintf(stderr,
         "Group ID                      %17d\n", buf.st_gid);
  sprintf(message,
         "Group ID                      %17d  ", buf.st_gid);
  CALL_MESSAGE_PRINT(message);
                  /* Group ID of the file's group */
  fprintf(stderr,
         "Account id                    %17d\n", buf.st_acid);
  sprintf(message,
         "Account id                    %17d  ", buf.st_acid);
  CALL_MESSAGE_PRINT(message);
                  /* Account id of the file */
  fprintf(stderr,
         "File size in Bytes         %20d\n", buf.st_size);
  sprintf(message,
         "File size in Bytes         %20d  ", buf.st_size);
  CALL_MESSAGE_PRINT(message);
                  /* File size in bytes */
  fprintf(stderr,
         "Last Access Time: %30s", ctime(&buf.st_atime));
  sprintf(message,
         "Last Access Time: %30s", ctime(&buf.st_atime));
  j=strlen(message);
  message[j-1]='\0';
  CALL_MESSAGE_PRINT(message);
                  /* Time that file data was last accessed; */
                  /* changed by system calls creat(2), mknod(2),
                     */
                  /* pipe(2), utime(2), and read(2). */
  fprintf(stderr,
         "Last Modified Time: %28s", ctime(&buf.st_mtime));
  sprintf(message,
         "Last Modified Time: %28s", ctime(&buf.st_mtime));
  j=strlen(message);
  message[j-1]='\0';
  CALL_MESSAGE_PRINT(message);
                  /* Time when data was last modified; */
                  /* changed by system calls creat(2), mknod(2),
                     */
                  /* pipe (2), utime(2), and write(2). */
  fprintf(stderr,
         "Status Last Changed: %27s", ctime(&buf.st_ctime));
  sprintf(message,
         "Status Last Changed: %27s", ctime(&buf.st_ctime));
  j=strlen(message);
  message[j-1]='\0';
  CALL_MESSAGE_PRINT(message);
                  /* Time when file status was last changed; */
                  /* times measured in seconds since 00:00:00 */
                  /* GMT, January 1, 1970.  Changed by */
                  /* system calls chmod(2), chown(2), creat(2), */
                  /* link(2), mknod(2), pipe(2), unlink(2),
                     utime(2), */
                  /* and write(2). */
  fprintf(stderr,
         "Number of Active Entries      %17d\n", buf.st_count);
  sprintf(message,
         "Number of Active Entries      %17d  ", buf.st_count);
  CALL_MESSAGE_PRINT(message);
                  /* Reference count from inode; number of active
                     */
  fprintf(stderr,
         "Number of blocks allocated    %17d\n", buf.st_blocks);
  sprintf(message,
         "Number of blocks allocated    %17d  ", buf.st_blocks);
  CALL_MESSAGE_PRINT(message);
                  /* Number of 4096 byte blocks allocated to the
                     file */
  fprintf(stderr,
         "Actual file mode when migrated%17xx\n", buf.st_dm_mode);
  sprintf(message,
         "Actual file mode when migrated%17xx  ", buf.st_dm_mode);
  CALL_MESSAGE_PRINT(message);
                  /* Actual file mode when migrated */
  fprintf(stderr,
         "Migrated file status flags    %17xx\n", 
          buf.st_dm_status);
  sprintf(message,
         "Migrated file status flags    %17xx  ", 
          buf.st_dm_status);
  CALL_MESSAGE_PRINT(message);
                  /* Migrated file status flags */
  fprintf(stderr,
         "Migrated file machine id      %17xx\n", buf.st_dm_mid);
  sprintf(message,
         "Migrated file machine id      %17xx  ", buf.st_dm_mid);
  CALL_MESSAGE_PRINT(message);
                  /* Migrated file machine id */
  fprintf(stderr,
         "Migrated file key             %17xx\n", buf.st_dm_key);
  sprintf(message,
         "Migrated file key             %17xx  ", buf.st_dm_key);
  CALL_MESSAGE_PRINT(message);
                  /* Migrated file key */
  fprintf(stderr,
         "Allocation control flags      %17xx\n", buf.st_allocf);
  sprintf(message,
         "Allocation control flags      %17xx  ", buf.st_allocf);
  CALL_MESSAGE_PRINT(message);
                  /* Allocation control flags; see fcntl(2) */
}
