/* Copyright (C) 2021 Free Software Foundation, Inc.
Contributed by Oracle.
This file is part of GNU Binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
#include "config.h"
#include <stdio.h>
#include "PreviewExp.h"
#include "Data_window.h"
#include "DbeSession.h"
#include "Emsg.h"
#include "Print.h"
#include "i18n.h"
PreviewExp::PreviewExp (): Experiment () { }
PreviewExp::~PreviewExp () { }//~PreviewExp
Experiment::Exp_status
PreviewExp::experiment_open (char *path)
{
// Find experiment directory
if ((status = find_expdir (path)) != SUCCESS)
{
size_t len = strlen (path);
is_group = ((len > 4) && !strcmp (&path[len - 4], NTXT (".erg")));
return status;
}
else
is_group = 0;
read_log_file ();
if (status == FAILURE)
return status;
if (status == INCOMPLETE && resume_ts != MAX_TIME)
// experiment is incomplete and "resumed" (non-paused)
// PreviewExp does not process all the packets, therefore...
// ... last_event does not reflect reality
// ... we don't know the duration or the end.
last_event = ZERO_TIME; // mark last_event as uninitialized
read_notes_file ();
return status;
}
Vector<char*> *
PreviewExp::preview_info ()
{
Vector<char*> *info = new Vector<char*>;
if (is_group)
info->append (GTXT ("Experiment Group"));
else
info->append (GTXT ("Experiment"));
info->append (expt_name);
if (status == FAILURE /* != SUCCESS */)
{
if (is_group)
{
Vector<char*> *grp_list = dbeSession->get_group_or_expt (expt_name);
for (int i = 0, grp_sz = grp_list->size (); i < grp_sz; i++)
{
char *nm = grp_list->fetch (i);
char *str = dbe_sprintf (GTXT ("Exp.#%d"), i + 1);
info->append (str);
info->append (nm);
}
delete grp_list;
}
else
{
info->append (GTXT ("Error message"));
info->append (mqueue_str (errorq, GTXT ("No errors\n")));
}
return info;
}
info->append (GTXT ("Experiment header"));
info->append (mqueue_str (commentq, GTXT ("Empty header\n")));
info->append (GTXT ("Error message"));
info->append (mqueue_str (errorq, GTXT ("No errors\n")));
info->append (GTXT ("Warning message"));
info->append (mqueue_str (warnq, GTXT ("No warnings\n")));
info->append (GTXT ("Notes"));
info->append (mqueue_str (notesq, GTXT ("\n")));
return info;
}
char *
PreviewExp::mqueue_str (Emsgqueue *msgqueue, char *null_str)
{
char *mesgs = pr_mesgs (msgqueue->fetch (), null_str, "");
char *last = mesgs + strlen (mesgs) - 1;
if (*last == '\n')
*last = '\0';
return mesgs;
}