Subversion Repositories f9daq

Compare Revisions

Regard whitespace Rev 130 → Rev 129

/lab/sipmscan/fieldpoint_standalone/time_offset.sh
File deleted
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: sipmscan/fieldpoint_standalone/Makefile
===================================================================
--- sipmscan/fieldpoint_standalone/Makefile (revision 130)
+++ sipmscan/fieldpoint_standalone/Makefile (nonexistent)
@@ -1,57 +0,0 @@
-# Makefile tutorial: https://www.gnu.org/software/make/manual/html_node/index.html#SEC_Contents
-
-# Make variables ----------------------------------------------------
-
-# ROOT include and libraries
-ROOTINC=$(shell root-config --incdir)
-ROOTLIB=$(shell root-config --libs)
-GRROOTLIB=$(shell root-config --cflags --glibs)
-
-# Source and debug directories
-SRC=./src
-DBG=./dbg
-IDIR=./include
-BIN=./bin
-DICT=./dict
-LDIR=./lib
-
-# Includes and libraries
-INC=-I. -I$(ROOTINC)
-LIBS=$(ROOTLIB) -L. -lm
-
-
-# Specific variables for the main program
-TARGET=root_app
-FILES=$(SRC)/root_app.C
-HEADER=$(IDIR)/root_app.h $(IDIR)/root_include.h
-
-# -------------------------------------------------------------------
-
-# Base rules --------------------------------------------------------
-
-# Make the main program and libraries
-#all: libtest.so $(TARGET)
-all: $(TARGET)
-
-# Rules for making the main program
-$(TARGET): $(FILES)
- @echo "\n# Generating dictionary GuiDict.C ---------------------------"
- rootcint -f $(DICT)/GuiDict.C -c -p $(INC) $(CPPFLAGS) $(IDIR)/root_app.h $(DICT)/GuiLinkDef.h
- @echo "\n# Checking to see if bin directory already exists -----------"
- if [ ! -d "$(BIN)" ];then mkdir $(BIN); fi
- @echo "\n# Compiling main program ------------------------------------"
- $(CXX) $(INC) -fPIC -g -Wall $(FILES) $(DICT)/GuiDict.C $(CPPFLAGS) -o ./bin/$(TARGET) $(GRROOTLIB) -lstdc++
- cp -f ./input/start.sh ./
- @echo "\n# Compilation successful ------------------------------------"
- @echo "# Use ./start.sh to run the program -------------------------"
-
-# -------------------------------------------------------------------
-
-# Cleaning rules ----------------------------------------------------
-
-# Rules for cleaning the installation
-clean:
- @echo "# Cleaning the installation directory -------------------------"
- rm -fr $(DICT)/*Dict.C $(DICT)/*Dict.h ./bin ./lib start.sh $(SRC)/$(TARGET)_C.d $(SRC)/$(TARGET)_C.so *.o
-
-# -------------------------------------------------------------------
Index: sipmscan/fieldpoint_standalone/input/workstation.h.in
===================================================================
--- sipmscan/fieldpoint_standalone/input/workstation.h.in (revision 130)
+++ sipmscan/fieldpoint_standalone/input/workstation.h.in (nonexistent)
@@ -1,10 +0,0 @@
-#ifndef _workstation_h_
-#define _workstation_h_
-
-// Debug signal
-#define DBGSIG 0
-
-// Time offset
-#define TIMEOFF 0
-
-#endif
Index: sipmscan/fieldpoint_standalone/input/start.sh
===================================================================
--- sipmscan/fieldpoint_standalone/input/start.sh (revision 130)
+++ sipmscan/fieldpoint_standalone/input/start.sh (nonexistent)
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-./bin/root_app
/sipmscan/fieldpoint_standalone/input/start.sh
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: sipmscan/fieldpoint_standalone/dict/GuiLinkDef.h
===================================================================
--- sipmscan/fieldpoint_standalone/dict/GuiLinkDef.h (revision 130)
+++ sipmscan/fieldpoint_standalone/dict/GuiLinkDef.h (nonexistent)
@@ -1,18 +0,0 @@
-#ifdef __CINT__
-
-#pragma link off all globals;
-#pragma link off all classes;
-#pragma link off all functions;
-
-//#pragma link C++ class TGMdiSubwindow+;
-#pragma link C++ class TGAppMainFrame+;
-
-//#pragma link C++ function MyEventHandler;
-//#pragma link C++ function GetDebug;
-//#pragma link C++ function MyRedraw;
-//#pragma link C++ function MyTimer;
-
-//#pragma link C++ class daq;
-
-#endif
-
Index: sipmscan/fieldpoint_standalone/include/root_app.h
===================================================================
--- sipmscan/fieldpoint_standalone/include/root_app.h (revision 130)
+++ sipmscan/fieldpoint_standalone/include/root_app.h (nonexistent)
@@ -1,45 +0,0 @@
-#ifndef __ROOT_APP_H__
-#define __ROOT_APP_H__
-
-#define winWidth 900
-#define winHeight 600
-#define WINDOW_NAME "Fieldpoint FP RTD 122 temperature sensor"
-
-#include "root_include.h"
-
-class TGAppMainFrame
-{
-RQ_OBJECT("TGAppMainFrame")
-
-protected:
- TGMainFrame *fMain;
-
- void AppLayout();
-
-public:
- TGAppMainFrame(const TGWindow *p, int w, int h);
- virtual ~TGAppMainFrame();
-
- void CloseWindow();
-
- TRootEmbeddedCanvas *displayCanvas;
- TGComboBox *tempCh;
- TGComboBox *tempDay[2];
- TGComboBox *tempMonth[2];
- TGComboBox *tempYear[2];
- TGComboBox *tempHour[2];
- TGComboBox *tempMinute[2];
- TGComboBox *tempSecond[2];
- TGCheckButton *tempEndOn;
- TGComboBox *datSettings;
- TGTextButton *updateTemp;
- TGTextButton *exportTemp;
- TGTextButton *closeTemp;
-
- void fieldpoint(int *timerange, int selch);
- void UpdateTempPlot();
- void TempEndToggle();
- void ExportTempPlot();
-};
-
-#endif
Index: sipmscan/fieldpoint_standalone/include/workstation.h
===================================================================
--- sipmscan/fieldpoint_standalone/include/workstation.h (revision 130)
+++ sipmscan/fieldpoint_standalone/include/workstation.h (nonexistent)
@@ -1,10 +0,0 @@
-#ifndef _workstation_h_
-#define _workstation_h_
-
-// Debug signal
-#define DBGSIG 0
-
-// Time offset
-#define TIMEOFF +1754
-
-#endif
Index: sipmscan/fieldpoint_standalone/include/root_include.h
===================================================================
--- sipmscan/fieldpoint_standalone/include/root_include.h (revision 130)
+++ sipmscan/fieldpoint_standalone/include/root_include.h (nonexistent)
@@ -1,231 +0,0 @@
-#ifndef _root_include_h_
-#define _root_include_h_
-
-// ROOT base includes
-#ifndef ROOT_TRootBrowser
-#include "TRootBrowser.h"
-#endif
-#ifndef ROOT_IOstream
-#include "Riostream.h"
-#endif
-#ifndef ROOT_TSystem
-#include "TSystem.h"
-#endif
-#ifndef ROOT_TApplication
-#include "TApplication.h"
-#endif
-#ifndef ROOT_TROOT
-#include "TROOT.h"
-#endif
-#ifndef ROOT_TQObject
-#include "TQObject.h"
-#endif
-#ifndef ROOT_RQ_Object
-#include "RQ_OBJECT.h"
-#endif
-#ifndef ROOT_TGClient
-#include "TGClient.h"
-#endif
-#ifndef ROOT_TGResourcePool
-#include "TGResourcePool.h"
-#endif
-#ifndef ROOT_TEnv
-#include "TEnv.h"
-#endif
-
-// ROOT GUI frame includes
-#ifndef ROOT_TGFrame
-#include "TGFrame.h"
-#endif
-#ifndef ROOT_TGDockableFrame
-#include "TGDockableFrame.h"
-#endif
-#ifndef ROOT_TGMenu
-#include "TGMenu.h"
-#endif
-#ifndef ROOT_TGMdiDecorFrame
-#include "TGMdiDecorFrame.h"
-#endif
-#ifndef ROOT_TGMdiFrame
-#include "TGMdiFrame.h"
-#endif
-#ifndef ROOT_TGMdiMainFrame
-#include "TGMdiMainFrame.h"
-#endif
-#ifndef ROOT_TGMdiMenu
-#include "TGMdiMenu.h"
-#endif
-#ifndef ROOT_TGMdi
-#include "TGMdi.h"
-#endif
-#ifndef ROOT_TG3DLine
-#include "TG3DLine.h"
-#endif
-#ifndef ROOT_TGStatusBar
-#include "TGStatusBar.h"
-#endif
-
-// ROOT GUI builder incudes (not needed)
-#ifndef ROOT_TRootGuiBuilder
-#include "TRootGuiBuilder.h"
-#endif
-#ifndef ROOT_TGuiBldHintsButton
-#include "TGuiBldHintsButton.h"
-#endif
-#ifndef ROOT_TGuiBldHintsEditor
-#include "TGuiBldHintsEditor.h"
-#endif
-#ifndef ROOT_TGuiBldEditor
-#include "TGuiBldEditor.h"
-#endif
-#ifndef ROOT_TGuiBldDragManager
-#include "TGuiBldDragManager.h"
-#endif
-
-// ROOT GUI object includes
-#ifndef ROOT_TGListBox
-#include "TGListBox.h"
-#endif
-#ifndef ROOT_TGNumberEntry
-#include "TGNumberEntry.h"
-#endif
-#ifndef ROOT_TGScrollBar
-#include "TGScrollBar.h"
-#endif
-#ifndef ROOT_TGFileDialog
-#include "TGFileDialog.h"
-#endif
-#ifndef ROOT_TGShutter
-#include "TGShutter.h"
-#endif
-#ifndef ROOT_TGButtonGroup
-#include "TGButtonGroup.h"
-#endif
-#ifndef ROOT_TGCanvas
-#include "TGCanvas.h"
-#endif
-#ifndef ROOT_TGButton
-#include "TGButton.h"
-#endif
-#ifndef ROOT_TGTextEdit
-#include "TGTextEdit.h"
-#endif
-#ifndef ROOT_TGLabel
-#include "TGLabel.h"
-#endif
-#ifndef ROOT_TGView
-#include "TGView.h"
-#endif
-#ifndef ROOT_TGTab
-#include "TGTab.h"
-#endif
-#ifndef ROOT_TGListView
-#include "TGListView.h"
-#endif
-#ifndef ROOT_TGSplitter
-#include "TGSplitter.h"
-#endif
-#ifndef ROOT_TGListTree
-#include "TGListTree.h"
-#endif
-#ifndef ROOT_TGToolTip
-#include "TGToolTip.h"
-#endif
-#ifndef ROOT_TGToolBar
-#include "TGToolBar.h"
-#endif
-#ifndef ROOT_TRootEmbeddedCanvas
-#include "TRootEmbeddedCanvas.h"
-#endif
-#ifndef ROOT_TCanvas
-#include "TCanvas.h"
-#endif
-#ifndef ROOT_TGComboBox
-#include "TGComboBox.h"
-#endif
-#ifndef ROOT_TGProgressBar
-#include "TGProgressBar.h"
-#endif
-#ifndef ROOT_TGTextEntry
-#include "TGTextEntry.h"
-#endif
-#ifndef ROOT_TGMsgBox
-#include "TGMsgBox.h"
-#endif
-#ifndef ROOT_TGSlider
-#include "TGSlider.h"
-#endif
-#ifndef ROOT_TGFSContainer
-#include "TGFSContainer.h"
-#endif
-#ifndef ROOT_TGFSComboBox
-#include "TGFSComboBox.h"
-#endif
-
-// ROOT File browser includes
-#ifndef ROOT_TSystemDir
-#include "TSystemDirectory.h"
-#endif
-#ifndef ROOT_TTree
-#include "TTree.h"
-#endif
-#ifndef ROOT_TFile
-#include "TFile.h"
-#endif
-
-// ROOT plotting includes
-#ifndef ROOT_TPaveStats
-#include "TPaveStats.h"
-#endif
-#ifndef ROOT_TGraph2D
-#include "TGraph2D.h"
-#endif
-#ifndef ROOT_TLatex
-#include "TLatex.h"
-#endif
-#ifndef ROOT_TGraphErrors
-#include "TGraphErrors.h"
-#endif
-#ifndef ROOT_TStyle
-#include "TStyle.h"
-#endif
-#ifndef ROOT_TPaletteAxis
-#include "TPaletteAxis.h"
-#endif
-#ifndef ROOT_TGraph
-#include "TGraph.h"
-#endif
-#ifndef ROOT_TH1F
-#include "TH1F.h"
-#endif
-#ifndef ROOT_TH2F
-#include "TH2F.h"
-#endif
-#ifndef ROOT_TF1
-#include "TF1.h"
-#endif
-#ifndef ROOT_TSpectrum
-#include "TSpectrum.h"
-#endif
-#ifndef ROOT_TVirtualFitter
-#include "TVirtualFitter.h"
-#endif
-#ifndef ROOT_TMath
-#include "TMath.h"
-#endif
-#ifndef ROOT_TRandom
-#include "TRandom.h"
-#endif
-
-// ROOT MYSQL includes
-#ifndef ROOT_TSQLServer
-#include <TSQLServer.h>
-#endif
-#ifndef ROOT_TSQLResult
-#include <TSQLResult.h>
-#endif
-#ifndef ROOT_TSQLRow
-#include <TSQLRow.h>
-#endif
-
-#endif
Index: sipmscan/fieldpoint_standalone/doc/README
===================================================================
--- sipmscan/fieldpoint_standalone/doc/README (revision 130)
+++ sipmscan/fieldpoint_standalone/doc/README (nonexistent)
@@ -1,34 +0,0 @@
------------------------
-1. Program description:
-
-This is a program for monitoring the fieldpoint temperature sensor (National Instruments FP RTD-122) in the F9 photon detectors laboratory. As an output, it produces a formatted text output and an optional ROOT plot. Note that this program will only work on computers connected to the IJS network (IP = 178.172.43.*).
-
------------------------------
-2. Installation instructions:
-
-Make sure environmental variables for ROOT are set and that there is an installation of ROOT with MySQL support on the running computer (./configure --enable-mysql).
-
-Installation is done by using
-> make
-
-Run the program with
-> ./start.sh
-
-Clean the installation by using
-> make clean
-
----------------
-3. Program use:
-
-Program use is straight-forward:
-- Fieldpoint channel selects the channel we wish to get temperature from.
-- Start and end time determine the data range to be retrieved from the MySQL database.
-- Draw to last time point selects the data range between start time and the most current point in the database.
-- Output data settings determine what kind of format should be used for timestamps in the text output (local time, UNIX timestamp).
-- Update button updates the plot, Export button exports the plot (saved in folder ./fieldpoint) and Close button closes the application.
-- At any change in start or end times and updating the plot, the text output (saved in folder ./fieldpoint) is also updated.
-
--------------------------------
-4. Time difference - Important!
-
-Data saved in the MySQL database have a time shift to the current local time. To fix this time shift use the ./time_offset script (password needed to connect to f9lab04), followed by the installation instructions above (make). The timing of old datapoints can still be wrong!
Index: sipmscan/fieldpoint_standalone/doc/configuration.txt
===================================================================
--- sipmscan/fieldpoint_standalone/doc/configuration.txt (revision 130)
+++ sipmscan/fieldpoint_standalone/doc/configuration.txt (nonexistent)
@@ -1,61 +0,0 @@
-$BASE/.rootrc:
-This file is for setting ROOT environment. See the following to properly use it:
-https://root.cern.ch/root/html/TAttText.html
-ftp://root.cern.ch/root/doc/ROOTUsersGuideHTML/ch02s07.html
-https://root.cern.ch/root/roottalk/roottalk01/2867.html
-
-Here is an example of a .rootrc file:
-Gui.DefaultFont: -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.MenuFont: -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.MenuHiFont: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.DocFixedFont: -*-courier-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.DocPropFont: -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.IconFont: -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
-Gui.StatusFont: -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
-Root.MemStat: 1
-Root.ObjectStat: 1
-
-If needed we can also add additional instructions in a C file and run it on each ROOT login:
-Rint.Logon: /path/to/rootlogon.C
-
-/---------------------------
-/--- rootlogon.C -----------
-/---------------------------
-{
- TStyle *mystyle = new TStyle("mystyle", "My own ROOT style");
-
- mystyle->SetCanvasBorderMode(0);
- mystyle->SetFrameBorderMode(0);
- mystyle->SetPalette(1,0);
- mystyle->SetOptTitle(0);
- mystyle->SetCanvasColor(0);
-
- mystyle->SetStatFontSize(0.024);
- mystyle->SetStatBorderSize(1);
- mystyle->SetStatColor(kGray);
- mystyle->SetStatX(0.925);
- mystyle->SetStatY(0.925);
- mystyle->SetStatW(0.13);
-
- mystyle->SetTextFont(132);
- mystyle->SetTextSize(0.08);
-
- mystyle->SetLabelSize(0.03,"xyz");
- mystyle->SetLabelOffset(0.01,"xyz");
- mystyle->SetPadTickX(1);
- mystyle->SetPadTickY(1);
-
- mystyle->SetCanvasDefX(100);
- mystyle->SetCanvasDefY(50);
- mystyle->SetCanvasDefW(900);
- mystyle->SetCanvasDefH(600);
- mystyle->SetPadBottomMargin(0.1);
- mystyle->SetPadTopMargin(0.04);
- mystyle->SetPadLeftMargin(0.125);
- mystyle->SetPadRightMargin(0.04);
-
- gROOT->SetStyle("mystyle");
- cout << "Setting custom style from /path/to/.rootlogon.C" << endl;
- return;
-}
-
Index: sipmscan/fieldpoint_standalone/.rootrc
===================================================================
--- sipmscan/fieldpoint_standalone/.rootrc (revision 130)
+++ sipmscan/fieldpoint_standalone/.rootrc (nonexistent)
@@ -1,10 +0,0 @@
-#Rint.Logon: /afs/p-ng.si/home/gkukec/private/Gasper/Programi/rootlogon.C
-Gui.DefaultFont: -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.MenuFont: -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.MenuHiFont: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.DocFixedFont: -*-courier-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.DocPropFont: -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1
-Gui.IconFont: -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
-Gui.StatusFont: -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
-Root.MemStat: 1
-Root.ObjectStat: 1
Index: sipmscan/fieldpoint_standalone/src/root_app.C
===================================================================
--- sipmscan/fieldpoint_standalone/src/root_app.C (revision 130)
+++ sipmscan/fieldpoint_standalone/src/root_app.C (nonexistent)
@@ -1,809 +0,0 @@
-#include "../include/root_app.h"
-#include "../include/workstation.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-// Main window constructor (+layout) ---------------------------------
-
-TGAppMainFrame::TGAppMainFrame(const TGWindow *p, int w, int h)
-{
- // Define main window and menubar
- fMain = new TGMainFrame(p, w, h, kVerticalFrame);
-
- AppLayout();
- fMain->SetWindowName(WINDOW_NAME);
- fMain->MapSubwindows();
- fMain->MapWindow();
- fMain->Layout();
-}
-
-TGAppMainFrame::~TGAppMainFrame()
-{
- fMain->Cleanup();
- delete fMain;
-}
-
-// Closing main window and checking about information ----------------
-
-void TGAppMainFrame::CloseWindow()
-{
- fMain->Cleanup();
- delete fMain;
- gApplication->Terminate(0);
-}
-
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
-// Separate functions -----------------------------------------
-void GetTime(int intime, char *outtime)
-{
- time_t rawtime;
- struct tm * timeinfo;
- if(intime < 0)
- time(&rawtime);
- else
- rawtime = (time_t)intime;
- timeinfo = localtime(&rawtime);
- sprintf(outtime, "%s", asctime(timeinfo));
- int len = strlen(outtime);
- if(len) outtime[len-1] = 0;
-}
-
-// ----------------------------------------------------------
-
-// Temperature sensor functions -----------------------------
-const char* dbname = "mysql://f9lab08.ijs.si/f9phdet";
-const char* tblname = "fprtd122";
-const char* username = "f9daq";
-const char* userpass = "f9lab";
-
-// Get the temperature from MYSQL database
-double GetTemperature(int ch, const char *s)
-{
- int bin=5+7*4-ch*4;
- char hex[16];
- strncpy(hex, (const char *) &s[bin], 4);
- hex[4]=0;
- int ix;
- sscanf (hex,"%x",&ix);
- //printf("0x%s\t",hex);
- return (ix/65535.)*1050.-200.;
-}
-
-// Transform local time to timestamp
-int GetTimeStamp(int *intime)
-{
- time_t rawtime;
- struct tm * timeinfo;
- time(&rawtime);
- timeinfo = localtime(&rawtime);
-
- if(DBGSIG)
- printf("%d.%d.%d, %d:%d:%d\n", intime[0], intime[1], intime[2], intime[3], intime[4], intime[5]);
-
- timeinfo->tm_mday = intime[0];
- timeinfo->tm_mon = intime[1] - 1;
- timeinfo->tm_year = intime[2] - 1900;
- timeinfo->tm_hour = intime[3];
- timeinfo->tm_min = intime[4];
- timeinfo->tm_sec = intime[5];
-
- return (int)mktime(timeinfo);
-}
-
-// Get data from MYSQL database
-void TGAppMainFrame::fieldpoint(int *timerange, int selch)
-{
- char humantime[256];
-
- // Display selected timestamps
- GetTime(timerange[0], humantime);
- printf("Minimum time set to: %s (%d)\n", humantime, timerange[0]);
- if(timerange[1] != -1)
- {
- GetTime(timerange[1], humantime);
- printf("Maximum time set to: %s (%d)\n", humantime, timerange[1]);
- }
- printf("Selected fieldpoint channel: %d\n", selch);
- printf("\n");
-
- // Database settings
- TSQLServer *db = TSQLServer::Connect(dbname, username, userpass);
- printf("Server info: %s\n", db->ServerInfo());
- TSQLRow *row;
- TSQLResult *res;
-
- if(DBGSIG)
- {
- // list databases available on server
- printf("\nList all databases on server %s\n", db->GetHost());
- res = db->GetDataBases();
- while ((row = res->Next())) {
- printf("%s\n", row->GetField(0));
- delete row;
- }
- delete res;
-
- // list tables in database "test" (the permission tables)
- printf("\nList all tables in database \"f9phdet\" on server %s\n", db->GetHost());
- res = db->GetTables("f9phdet");
- while ((row = res->Next())) {
- printf("%s\n", row->GetField(0));
- delete row;
- }
- delete res;
-
- // list columns in table "runcatalog" in database "mysql"
- printf("\nList all columns in table \"f9phdet\" in database \"f9rtd122\" on server %s\n", db->GetHost());
- res = db->GetColumns("f9phdet", "fprtd122");
- while ((row = res->Next())) {
- printf("%s\n", row->GetField(0));
- delete row;
- }
- delete res;
- }
-
- // query database and print results
- char sql[1000] = "SELECT status,data,timestamp FROM fprtd122 WHERE status='A272727272727272748' AND substring(data,1,4)='A00C' ";
- if(timerange[1] == -1)
- sprintf(sql,"%s AND timestamp>='%d'", sql, timerange[0]);
- else
- sprintf(sql,"%s AND timestamp>='%d' AND timestamp<='%d'", sql, timerange[0], timerange[1]);
- if(DBGSIG)
- printf("%s\n",sql);
-
- res = db->Query(sql);
-
- int nrows = res->GetRowCount();
- printf("\nGot %d rows in result\n", nrows);
-
- // Printing and plotting
- char timeval[256];
- TGraph *gr;
- double *x, *y;
- double firsttime, lasttime;
-
- gr = new TGraph(nrows);
- gr->SetLineColor(kRed);
- gr->SetLineWidth(1);
- gr->SetMarkerColor(kBlack);
- gr->SetMarkerSize(0.8);
- gr->SetMarkerStyle(20);
- gr->SetTitle("Temperature sensor;Time;Temperature (deg.)");
-
- FILE *fp;
- fp = fopen("./fieldpoint/dataout_fieldpoint.txt", "w");
-
- if(DBGSIG)
- printf("Time\tTemperature\n");
- for (int i = 0; i < nrows; i++) {
- row = res->Next();
-
- GetTime((int)atof(row->GetField(2))-TIMEOFF, timeval);
- x = new double;
- y = new double;
-
- *x = atof(row->GetField(2))-TIMEOFF;
- *y = GetTemperature(selch,row->GetField(1));
- gr->SetPoint(i,*x,*y);
-
- if(i == 0) firsttime = *x;
- else if(i == nrows-1) lasttime = *x;
-
- if(datSettings->GetSelected() == 0)
- {
- fprintf(fp, "%s\t%d\t%f\n",timeval,(int)*x,*y);
- if(DBGSIG)
- printf("%s\t%d\t%f\n",timeval,(int)*x,*y);
- }
- else if(datSettings->GetSelected() == 1)
- {
- fprintf(fp, "%s\t%f\n",timeval,*y);
- if(DBGSIG)
- printf("%s\t%f\n",timeval,*y);
- }
- else if(datSettings->GetSelected() == 2)
- {
- fprintf(fp, "%d\t%f\n",(int)*x,*y);
- if(DBGSIG)
- printf("%d\t%f\n",(int)*x,*y);
- }
-
- delete x;
- delete y;
-
- delete row;
- }
-
- fclose(fp);
-
- delete res;
- delete db;
-
- TCanvas *gCanvas = displayCanvas->GetCanvas();
- gCanvas->SetGrid();
- gr->GetXaxis()->SetTimeDisplay(1);
- gr->GetXaxis()->SetTimeFormat("%H:%M, %d.%m.");
- gr->GetXaxis()->SetTimeOffset(0);
- gr->GetXaxis()->SetLabelSize(0.027);
- gr->GetXaxis()->SetLabelOffset(0.015);
- gr->GetXaxis()->SetTitleSize(0.038);
- gr->GetXaxis()->SetTitleOffset(1.2);
- gr->GetYaxis()->SetLabelSize(0.027);
- gr->GetYaxis()->SetTitleSize(0.038);
- gr->GetXaxis()->SetNdivisions(-507);
- gr->GetXaxis()->SetRange(firsttime,lasttime);
- gr->GetXaxis()->SetRangeUser(firsttime,lasttime);
- gr->Draw("APL");
-
- gCanvas->Modified();
- gCanvas->Update();
-}
-
-// Update the temperature plot
-void TGAppMainFrame::UpdateTempPlot()
-{
- int stime[6];
- int etime[6];
-
- int timestamp[2];
-
- time_t rtime;
- int curyear;
- time(&rtime);
- curyear = (int)(localtime(&rtime))->tm_year+1900;
-
- int leapy = 0;
-
- // Getting the start time
- stime[0] = (int)(tempDay[0]->GetSelected())+1;
- stime[2] = curyear - (int)(tempYear[0]->GetSelected());
- if(DBGSIG)
- printf("%d, %d, %d\n", stime[2], curyear, (int)(tempYear[0]->GetSelected()));
- stime[3] = (int)(tempHour[0]->GetSelected());
- stime[4] = (int)(tempMinute[0]->GetSelected());
- stime[5] = (int)(tempSecond[0]->GetSelected());
-
- switch( tempMonth[0]->GetSelected() )
- {
- case 0:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 1:
- if( stime[2]%4 == 0)
- leapy = 1;
-
- if( (leapy == 1) && (stime[0] > 29) )
- {
- stime[0] = 29;
- tempDay[0]->Select(28);
- }
- else if( (leapy == 0) && (stime[0] > 28) )
- {
- stime[0] = 28;
- tempDay[0]->Select(27);
- }
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 2:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 3:
- if(stime[0] > 30)
- {
- stime[0] = 30;
- tempDay[0]->Select(29);
- }
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 4:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 5:
- if(stime[0] > 30)
- {
- stime[0] = 30;
- tempDay[0]->Select(29);
- }
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 6:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 7:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 8:
- if(stime[0] > 30)
- {
- stime[0] = 30;
- tempDay[0]->Select(29);
- }
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 9:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 10:
- if(stime[0] > 30)
- {
- stime[0] = 30;
- tempDay[0]->Select(29);
- }
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- case 11:
- stime[1] = (int)(tempMonth[0]->GetSelected())+1;
- break;
- default:
- break;
- }
-
- timestamp[0] = GetTimeStamp(stime);
- if(DBGSIG)
- printf("Start time: %d\n", timestamp[0]);
-
- // Getting the end time
- etime[0] = (int)(tempDay[1]->GetSelected())+1;
- etime[2] = curyear - (int)(tempYear[1]->GetSelected());
- etime[3] = (int)(tempHour[1]->GetSelected());
- etime[4] = (int)(tempMinute[1]->GetSelected());
- etime[5] = (int)(tempSecond[1]->GetSelected());
-
- switch( tempMonth[1]->GetSelected() )
- {
- case 0:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 1:
- if( etime[2]%4 == 0)
- leapy = 1;
-
- if( (leapy == 1) && (etime[0] > 29) )
- {
- etime[0] = 29;
- tempDay[1]->Select(28);
- }
- else if( (leapy == 0) && (etime[0] > 28) )
- {
- etime[0] = 28;
- tempDay[1]->Select(27);
- }
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 2:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 3:
- if(etime[0] > 30)
- {
- etime[0] = 30;
- tempDay[1]->Select(29);
- }
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 4:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 5:
- if(etime[0] > 30)
- {
- etime[0] = 30;
- tempDay[1]->Select(29);
- }
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 6:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 7:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 8:
- if(etime[0] > 30)
- {
- etime[0] = 30;
- tempDay[1]->Select(29);
- }
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 9:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 10:
- if(etime[0] > 30)
- {
- etime[0] = 30;
- tempDay[1]->Select(29);
- }
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- case 11:
- etime[1] = (int)(tempMonth[1]->GetSelected())+1;
- break;
- default:
- break;
- }
-
- if( tempEndOn->IsDown() )
- timestamp[1] = -1;
- else
- timestamp[1] = GetTimeStamp(etime);
- if(DBGSIG)
- printf("End time: %d\n", timestamp[1]);
-
- fieldpoint(timestamp, tempCh->GetSelected());
-}
-
-// Export the temperature plot to pdf
-void TGAppMainFrame::ExportTempPlot()
-{
- TCanvas *gCanvas = displayCanvas->GetCanvas();
- gCanvas->Modified();
- gCanvas->Update();
- gCanvas->SaveAs("./fieldpoint/plotout_fieldpoint.pdf");
-}
-
-// Toggle the endtime settings for temperature sensor
-void TGAppMainFrame::TempEndToggle()
-{
- if( tempEndOn->IsDown() )
- {
- tempDay[1]->SetEnabled(kFALSE);
- tempMonth[1]->SetEnabled(kFALSE);
- tempYear[1]->SetEnabled(kFALSE);
- tempHour[1]->SetEnabled(kFALSE);
- tempMinute[1]->SetEnabled(kFALSE);
- tempSecond[1]->SetEnabled(kFALSE);
- }
- else
- {
- tempDay[1]->SetEnabled(kTRUE);
- tempMonth[1]->SetEnabled(kTRUE);
- tempYear[1]->SetEnabled(kTRUE);
- tempHour[1]->SetEnabled(kTRUE);
- tempMinute[1]->SetEnabled(kTRUE);
- tempSecond[1]->SetEnabled(kTRUE);
- }
-}
-
-// --------------------------------------------------------------
-
-// Setting the application layout ------------------------------------
-
-void TGAppMainFrame::AppLayout()
-{
-// Fieldpoint window ------------------------
-
- TGLayoutHints *f0 = new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2);
- TGLayoutHints *f0centerx = new TGLayoutHints(kLHintsCenterX,2,2,2,2);
- TGLayoutHints *f0centery = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
- TGLayoutHints *f1 = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,2,2,2,2);
- TGLayoutHints *f2 = new TGLayoutHints(kLHintsExpandX,2,2,2,2);
-
- TGHorizontalFrame *fH1, *fH2;
- TGGroupFrame *fG1;
- TGLabel *lab;
-
- time_t rtime;
- int yearrange[2];
- int subwin[2];
- char ctemp[256];
-
- subwin[0] = winWidth-10;
- subwin[1] = 6.6*winHeight/12;
-
- // Display canvas for temperature sensor
- displayCanvas = new TRootEmbeddedCanvas("displayCanvas",fMain,subwin[0],subwin[1]);
- fMain->AddFrame(displayCanvas, f0centerx);
- TCanvas *gCanvas = displayCanvas->GetCanvas();
- gCanvas->SetGridx();
- gCanvas->SetGridy();
-
- fG1 = new TGGroupFrame(fMain, "Temperature sensor settings");
- // Channel selector
- fH1 = new TGHorizontalFrame(fG1, subwin[0], 30);
- lab = new TGLabel(fH1, "Fieldpoint channel:");
- fH1->AddFrame(lab, f0centery);
- tempCh = new TGComboBox(fH1, 200);
- tempCh->AddEntry("0", 0);
- tempCh->AddEntry("1", 1);
- tempCh->AddEntry("2", 2);
- tempCh->AddEntry("3", 3);
- tempCh->AddEntry("4", 4);
- tempCh->AddEntry("5", 5);
- tempCh->AddEntry("6", 6);
- tempCh->AddEntry("7", 7);
- tempCh->Resize(50,22);
- tempCh->Select(1);
- fH1->AddFrame(tempCh, f0centery);
- fG1->AddFrame(fH1, f2);
-
- // Start and stop time ------------------------
- time(&rtime);
-
- lab = new TGLabel(fG1, "Start time:");
- fG1->AddFrame(lab, f0);
- fH1 = new TGHorizontalFrame(fG1, subwin[0], 30);
- // Start day
- lab = new TGLabel(fH1, "\tDay: ");
- fH1->AddFrame(lab, f0centery);
- tempDay[0] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 31; i++)
- {
- sprintf(ctemp, "%d", i+1);
- tempDay[0]->AddEntry(ctemp, i);
- }
- tempDay[0]->Resize(50,22);
- tempDay[0]->Select((int)(localtime(&rtime))->tm_mday-1);
- fH1->AddFrame(tempDay[0], f0centery);
-
- // Start month
- lab = new TGLabel(fH1, " Month: ");
- fH1->AddFrame(lab, f0centery);
- tempMonth[0] = new TGComboBox(fH1, 200);
- tempMonth[0]->AddEntry("January", 0);
- tempMonth[0]->AddEntry("February", 1);
- tempMonth[0]->AddEntry("March", 2);
- tempMonth[0]->AddEntry("April", 3);
- tempMonth[0]->AddEntry("May", 4);
- tempMonth[0]->AddEntry("June", 5);
- tempMonth[0]->AddEntry("July", 6);
- tempMonth[0]->AddEntry("August", 7);
- tempMonth[0]->AddEntry("September", 8);
- tempMonth[0]->AddEntry("October", 9);
- tempMonth[0]->AddEntry("November", 10);
- tempMonth[0]->AddEntry("December", 11);
- tempMonth[0]->Resize(80,22);
- tempMonth[0]->Select((int)(localtime(&rtime))->tm_mon);
- fH1->AddFrame(tempMonth[0], f0centery);
-
- // Start year
- yearrange[0] = 2010;
- yearrange[1] = (int)(localtime(&rtime))->tm_year+1900;
-
- lab = new TGLabel(fH1, " Year: ");
- fH1->AddFrame(lab, f0centery);
- tempYear[0] = new TGComboBox(fH1, 200);
- for(int i = 0; i < (yearrange[1]-yearrange[0])+1; i++)
- {
- sprintf(ctemp, "%d", yearrange[1]-i);
- tempYear[0]->AddEntry(ctemp, i);
- }
- tempYear[0]->Resize(60,22);
- tempYear[0]->Select(0);
- fH1->AddFrame(tempYear[0], f0centery);
-
- // Start hour
- lab = new TGLabel(fH1, " Hour: ");
- fH1->AddFrame(lab, f0centery);
- tempHour[0] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 24; i++)
- {
- if(i < 10)
- sprintf(ctemp, "0%d", i);
- else
- sprintf(ctemp, "%d", i);
- tempHour[0]->AddEntry(ctemp, i);
- }
- tempHour[0]->Resize(50,22);
- tempHour[0]->Select(7);
- fH1->AddFrame(tempHour[0], f0centery);
-
- // Start minute
- lab = new TGLabel(fH1, " Minute: ");
- fH1->AddFrame(lab, f0centery);
- tempMinute[0] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 60; i++)
- {
- if(i < 10)
- sprintf(ctemp, "0%d", i);
- else
- sprintf(ctemp, "%d", i);
- tempMinute[0]->AddEntry(ctemp, i);
- }
- tempMinute[0]->Resize(50,22);
- tempMinute[0]->Select(0);
- fH1->AddFrame(tempMinute[0], f0centery);
-
- // Start second
- lab = new TGLabel(fH1, " Second: ");
- fH1->AddFrame(lab, f0centery);
- tempSecond[0] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 60; i++)
- {
- if(i < 10)
- sprintf(ctemp, "0%d", i);
- else
- sprintf(ctemp, "%d", i);
- tempSecond[0]->AddEntry(ctemp, i);
- }
- tempSecond[0]->Resize(50,22);
- tempSecond[0]->Select(0);
- fH1->AddFrame(tempSecond[0], f0centery);
-
- fG1->AddFrame(fH1, f2);
-
- // Use the end time or not
- tempEndOn = new TGCheckButton(fG1, "Draw to last time point (ON/OFF)");
- tempEndOn->Resize(100,22);
- tempEndOn->SetState(kButtonUp);
- fG1->AddFrame(tempEndOn, f0);
-
- lab = new TGLabel(fG1, "End time:");
- fG1->AddFrame(lab, f0);
- fH1 = new TGHorizontalFrame(fG1, subwin[0], 30);
- // End day
- lab = new TGLabel(fH1, "\tDay: ");
- fH1->AddFrame(lab, f0centery);
- tempDay[1] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 31; i++)
- {
- sprintf(ctemp, "%d", i+1);
- tempDay[1]->AddEntry(ctemp, i);
- }
- tempDay[1]->Resize(50,22);
- tempDay[1]->Select((int)(localtime(&rtime))->tm_mday-1);
- fH1->AddFrame(tempDay[1], f0centery);
-
- // End month
- lab = new TGLabel(fH1, " Month: ");
- fH1->AddFrame(lab, f0centery);
- tempMonth[1] = new TGComboBox(fH1, 200);
- tempMonth[1]->AddEntry("January", 0);
- tempMonth[1]->AddEntry("February", 1);
- tempMonth[1]->AddEntry("March", 2);
- tempMonth[1]->AddEntry("April", 3);
- tempMonth[1]->AddEntry("May", 4);
- tempMonth[1]->AddEntry("June", 5);
- tempMonth[1]->AddEntry("July", 6);
- tempMonth[1]->AddEntry("August", 7);
- tempMonth[1]->AddEntry("September", 8);
- tempMonth[1]->AddEntry("October", 9);
- tempMonth[1]->AddEntry("November", 10);
- tempMonth[1]->AddEntry("December", 11);
- tempMonth[1]->Resize(80,22);
- tempMonth[1]->Select((int)(localtime(&rtime))->tm_mon);
- fH1->AddFrame(tempMonth[1], f0centery);
-
- // End year
- time(&rtime);
- yearrange[0] = 2010;
- yearrange[1] = (int)(localtime(&rtime))->tm_year+1900;
-
- lab = new TGLabel(fH1, " Year: ");
- fH1->AddFrame(lab, f0centery);
- tempYear[1] = new TGComboBox(fH1, 200);
- for(int i = 0; i < (yearrange[1]-yearrange[0])+1; i++)
- {
- sprintf(ctemp, "%d", yearrange[1]-i);
- tempYear[1]->AddEntry(ctemp, i);
- }
- tempYear[1]->Resize(60,22);
- tempYear[1]->Select(0);
- fH1->AddFrame(tempYear[1], f0centery);
-
- // End hour
- lab = new TGLabel(fH1, " Hour: ");
- fH1->AddFrame(lab, f0centery);
- tempHour[1] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 24; i++)
- {
- if(i < 10)
- sprintf(ctemp, "0%d", i);
- else
- sprintf(ctemp, "%d", i);
- tempHour[1]->AddEntry(ctemp, i);
- }
- tempHour[1]->Resize(50,22);
- tempHour[1]->Select(18);
- fH1->AddFrame(tempHour[1], f0centery);
-
- // End minute
- lab = new TGLabel(fH1, " Minute: ");
- fH1->AddFrame(lab, f0centery);
- tempMinute[1] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 60; i++)
- {
- if(i < 10)
- sprintf(ctemp, "0%d", i);
- else
- sprintf(ctemp, "%d", i);
- tempMinute[1]->AddEntry(ctemp, i);
- }
- tempMinute[1]->Resize(50,22);
- tempMinute[1]->Select(0);
- fH1->AddFrame(tempMinute[1], f0centery);
-
- // End second
- lab = new TGLabel(fH1, " Second: ");
- fH1->AddFrame(lab, f0centery);
- tempSecond[1] = new TGComboBox(fH1, 200);
- for(int i = 0; i < 60; i++)
- {
- if(i < 10)
- sprintf(ctemp, "0%d", i);
- else
- sprintf(ctemp, "%d", i);
- tempSecond[1]->AddEntry(ctemp, i);
- }
- tempSecond[1]->Resize(50,22);
- tempSecond[1]->Select(0);
- fH1->AddFrame(tempSecond[1], f0centery);
-
- fG1->AddFrame(fH1, f2);
- // Start and stop time ------------------------
-
- // Dataout settings
- fH1 = new TGHorizontalFrame(fG1, subwin[0], 30);
- lab = new TGLabel(fH1, "Output data settings: ");
- fH1->AddFrame(lab, f0centery);
- datSettings = new TGComboBox(fH1, 200);
- datSettings->AddEntry("Export local time and UNIX timestamp", 0);
- datSettings->AddEntry("Export only local time", 1);
- datSettings->AddEntry("Export only UNIX timestamp", 2);
- datSettings->Resize(300,22);
- datSettings->Select(0);
- fH1->AddFrame(datSettings, f0centery);
-
- fG1->AddFrame(fH1, f2);
-
- // Control buttons
- fH2 = new TGHorizontalFrame(fG1, subwin[0], 30);
- fH1 = new TGHorizontalFrame(fH2, subwin[0], 30);
- updateTemp = new TGTextButton(fH1, "Update");
- updateTemp->SetTextJustify(36);
- updateTemp->SetWrapLength(-1);
- updateTemp->Resize(80,22);
- fH1->AddFrame(updateTemp, f0);
-
- exportTemp = new TGTextButton(fH1, "Export");
- exportTemp->SetTextJustify(36);
- exportTemp->SetWrapLength(-1);
- exportTemp->Resize(80,22);
- fH1->AddFrame(exportTemp, f0);
-
- closeTemp = new TGTextButton(fH1, "Close");
- closeTemp->SetTextJustify(36);
- closeTemp->SetWrapLength(-1);
- closeTemp->Resize(80,22);
- fH1->AddFrame(closeTemp, f0);
- fH2->AddFrame(fH1, f0centerx);
-
- fG1->AddFrame(fH2, f2);
-
- fMain->AddFrame(fG1, f1);
-
- // Action connections
- updateTemp->Connect("Clicked()", "TGAppMainFrame", this, "UpdateTempPlot()");
- tempEndOn->Connect("Clicked()", "TGAppMainFrame", this, "TempEndToggle()");
- exportTemp->Connect("Clicked()", "TGAppMainFrame", this, "ExportTempPlot()");
- closeTemp->Connect("Clicked()", "TGAppMainFrame", this, "CloseWindow()");
-
-// Fieldpoint window ------------------------
-
-}
-
-// -------------------------------------------------------------------
-
-// Main function -----------------------------------------------------
-
-void root_app()
-{
- new TGAppMainFrame(gClient->GetRoot(), winWidth, winHeight);
-}
-
-int main(int argc, char **argv)
-{
- TApplication theApp("TGAppMainFrame", &argc, argv);
- root_app();
- theApp.Run();
-
- return 0;
-}
-
-// -------------------------------------------------------------------
Index: sipmscan/fieldpoint_standalone/src/offset.cc
===================================================================
--- sipmscan/fieldpoint_standalone/src/offset.cc (revision 130)
+++ sipmscan/fieldpoint_standalone/src/offset.cc (nonexistent)
@@ -1,32 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-int main()
-{
- FILE *fp, *fpout;
-
- fp = fopen("../dbg/time_offset.txt","r");
- fpout = fopen("../dbg/time_offset_out.txt","w");
-
- int hosttime, hometime, difftime;
- fscanf(fp, "%d\n%d", &hosttime, &hometime);
-
- if(hosttime >= hometime)
- {
- difftime = hosttime - hometime;
-// printf("Host = %d\nHome = %d\nDifference = +%d\n", hosttime, hometime, difftime);
- fprintf(fpout, "+%d", difftime);
- }
- else
- {
- difftime = hometime - hosttime;
-// printf("Host = %d\nHome = %d\nDifference = -%d\n", hosttime, hometime, difftime);
- fprintf(fpout, "-%d", difftime);
- }
-
- fclose(fpout);
- fclose(fp);
-
- return 0;
-}