1 /* Copyright (C) 2021 Free Software Foundation, Inc.
2 Contributed by Oracle.
3
4 This file is part of GNU Binutils.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
21 #include "config.h"
22 #include <stdio.h>
23
24 #include "PreviewExp.h"
25 #include "Data_window.h"
26 #include "DbeSession.h"
27 #include "Emsg.h"
28 #include "Print.h"
29 #include "i18n.h"
30
PreviewExp()31 PreviewExp::PreviewExp (): Experiment () { }
32
~PreviewExp()33 PreviewExp::~PreviewExp () { }//~PreviewExp
34
35 Experiment::Exp_status
experiment_open(char * path)36 PreviewExp::experiment_open (char *path)
37 {
38 // Find experiment directory
39 if ((status = find_expdir (path)) != SUCCESS)
40 {
41 size_t len = strlen (path);
42 is_group = ((len > 4) && !strcmp (&path[len - 4], NTXT (".erg")));
43 return status;
44 }
45 else
46 is_group = 0;
47
48 read_log_file ();
49 if (status == FAILURE)
50 return status;
51
52 if (status == INCOMPLETE && resume_ts != MAX_TIME)
53 // experiment is incomplete and "resumed" (non-paused)
54 // PreviewExp does not process all the packets, therefore...
55 // ... last_event does not reflect reality
56 // ... we don't know the duration or the end.
57 last_event = ZERO_TIME; // mark last_event as uninitialized
58
59 read_notes_file ();
60 return status;
61 }
62
63 Vector<char*> *
preview_info()64 PreviewExp::preview_info ()
65 {
66 Vector<char*> *info = new Vector<char*>;
67 if (is_group)
68 info->append (GTXT ("Experiment Group"));
69 else
70 info->append (GTXT ("Experiment"));
71 info->append (expt_name);
72
73 if (status == FAILURE /* != SUCCESS */)
74 {
75 if (is_group)
76 {
77 Vector<char*> *grp_list = dbeSession->get_group_or_expt (expt_name);
78 for (int i = 0, grp_sz = grp_list->size (); i < grp_sz; i++)
79 {
80 char *nm = grp_list->fetch (i);
81 char *str = dbe_sprintf (GTXT ("Exp.#%d"), i + 1);
82 info->append (str);
83 info->append (nm);
84 }
85 delete grp_list;
86 }
87 else
88 {
89 info->append (GTXT ("Error message"));
90 info->append (mqueue_str (errorq, GTXT ("No errors\n")));
91 }
92 return info;
93 }
94 info->append (GTXT ("Experiment header"));
95 info->append (mqueue_str (commentq, GTXT ("Empty header\n")));
96 info->append (GTXT ("Error message"));
97 info->append (mqueue_str (errorq, GTXT ("No errors\n")));
98 info->append (GTXT ("Warning message"));
99 info->append (mqueue_str (warnq, GTXT ("No warnings\n")));
100 info->append (GTXT ("Notes"));
101 info->append (mqueue_str (notesq, GTXT ("\n")));
102 return info;
103 }
104
105 char *
mqueue_str(Emsgqueue * msgqueue,char * null_str)106 PreviewExp::mqueue_str (Emsgqueue *msgqueue, char *null_str)
107 {
108 char *mesgs = pr_mesgs (msgqueue->fetch (), null_str, "");
109 char *last = mesgs + strlen (mesgs) - 1;
110 if (*last == '\n')
111 *last = '\0';
112 return mesgs;
113 }
114