File: File.cpp

package info (click to toggle)
quickplot 0.8.6-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,544 kB
  • ctags: 1,019
  • sloc: cpp: 10,051; sh: 7,597; makefile: 176
file content (141 lines) | stat: -rw-r--r-- 2,723 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* Copyright (c) 1998, 1999, 2003, 2004  Lance Arsenault, (GNU GPL (v2+))
 */
#include "config.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>

#ifdef QP_ARCH_DARWIN
# include <limits.h>
# include <float.h>
#else
# include <values.h>
#endif

#include <list>
#include <iomanip>

#include <gtkmm.h>

using namespace Gtk;
#include "errorStr.h"
#include "value_t.h"
#include "Field.h"
#include "Plot.h"
#include "ColorGen.h"
#include "Graph.h"
#include "PlotSelector.h"
#include "ValueSlider.h"
#include "PlotLister.h"
#include "PlotConfig.h"
#include "GraphConfig.h"

#include "MainMenuBar.h"
#include "ButtonBar.h"
#include "StatusBar.h"
#include "MainWindow.h"
#include "App.h"

#include "Globel.h"

#include "Source.h"
#include "FileList.h"
#include "File.h"
#include "errorStr.h"

#ifdef MINGW  /* MinGW on windoz */
#  define DIR_CHAR '\\'
#else
#  define DIR_CHAR '/'
#endif

File::File(const char *filename)
{
  FileList fileList;
  fileList.setFileName(filename);
  init(&fileList);
}

File::File(const FileList *fileList)
{
  init(fileList);
}
 

void File::init(const FileList *fileList)
{
  isValid=false;
  char *filename = fileList->getFileName();

  bool isStdin = (filename)? false: true;
  
  
  // Check for errors in filename.
  if(filename && !filename[0])
    {
      // zero length file name.
      sprintf(errorStr,"File name \"%s\" is invalid.", filename);
      return; // failed.
    }

  if(filename)
  {
    size_t len=strlen(filename);
    // Check for errors in filename again.
    if(filename[len-1] == DIR_CHAR)
    {
      // The filename end with a DIR_CHAR (/).
      snprintf(errorStr, ERRORSTR_LENGTH,
               "Invalid file name \"%s\".", filename);
      return; // failed.
    }
  }
  
  // Set the fileName
  if(filename) // It's not stdin.
    fileName = strdup(filename);
  else // It's stdin.
    fileName = strdup(STDIN_FILENAME);

  {
    size_t len=strlen(fileName);
    size_t  i;
    for(i=len-1; i>0 && fileName[i] != DIR_CHAR; i--);
    if(i>0) i++;
    baseFileName = strdup(&fileName[i]);
  }

  error = 0;

#ifdef USE_LIBSNDFILE

  // readSndFile() or readASCIIFile() may set error.
  if(!isStdin && readSndFile(fileList))
    isValid = !error;
  else

#endif // #ifdef USE_LIBSNDFILE

  if(readASCIIFile(isStdin ? stdin : 0, fileList))
    isValid = !error;
  else
    isValid = false;


  if(isValid)
  {
    // signal that the files that are loaded changed.
    m_signal_addedSource.emit(this);
    // Add a File->"Close fileName" to the MainMenu.  Base class
    // Source::~Source() will remove it automatically.
    addCloseMenus(fileName);
  }
}


//File::~File(void)
//{
// Source::~Source() will remove all the fields.
//}