unit Global;
{ =========================
  WinWCP - Global variables
  4/12/01 MaxTBuf increased to 32767
  =========================
  12/2/03 vt50 changed to vtDecay
  30/11/04 MaxTBuf increased to 131071
  07/12/9 ... Non-stationary variance settings added to WCP file header}
interface

uses sysUtils, Graphics, Classes, maths, wintypes, seslabio ;

const
     FileVersion = 8.0 ;
     DataFileExtension = '.WCP' ;
     Enable = True ;
     Disable = False ;
     MinDT = 1.5E-5 ;
     NumDACChannels = 2 ;
     WCPChannelLimit = 7 ;
     NumAnalysisBytesPerRecord = 1024 ;
     NumBytesInFileHeader = 1024 ;

     FitVarLimit = 11 ;
     //MaxTBuf = 131072 ;
     //MaxPoints = MaxTBuf+1 ;
     VoltsTomV = 1000. ;
     mVToVolts = 1E-3 ;
     AmpsTonA = 1E9 ;
     nAToAmps = 1E-9 ;
     nSToSeimens = 1E-9 ;
     msToSecs = 1E-3 ;
     SecsToms = 1E3 ;
     pFToFarad = 1E-12 ;
     FaradTopF = 1E12 ;
     MinSingle = 1.5E-45 ;
     { Variable constants }
     vRecord = 0 ;
     vGroup = 1 ;
     vTime = 2 ;
     vAverage = 3 ;
     vArea = 4 ;
     vPeak = 5 ;
     vVariance = 6 ;
     vRiseTime = 7 ;
     vRateofRise = 8 ;
     vLatency = 9 ;
     vTDecay = 10 ;
     vT90 = 11 ;
     vInterval = 12 ;
     vBaseline = 13 ;
     VarLimit = 13 ;
     BitMapsMinSize = 16 ;
     BitMapsMaxSize = 10000 ;
    
type
    TDestination = (ToPrinter,ToClipboard) ;

    THeapBufferOp = (Allocate,Deallocate) ;
    TADCRange = string[20] ;

    TAnalysis = packed record
          Available : boolean ;
          VarName : array[0..VarLimit] of string ;
          ChannelName : array[0..WCPChannelLimit] of string ;
          Units : array[0..WCPChannelLimit,0..VarLimit] of string ;
          UnitsScale : array[0..WCPChannelLimit,0..VarLimit] of single ;
          Value : array[0..WCPChannelLimit,0..VarLimit] of single ;
          MaxValue : array[0..WCPChannelLimit,0..VarLimit] of single ;
          MinValue : array[0..WCPChannelLimit,0..VarLimit] of single ;
          Mean : array[0..WCPChannelLimit,0..VarLimit] of single ;
          StDev : array[0..WCPChannelLimit,0..VarLimit] of single ;
          StErr : array[0..WCPChannelLimit,0..VarLimit] of single ;
          InSummary : array[0..VarLimit] of Boolean ;
          Num : LongInt ;
          NumVariables : LongInt ;
          end ;


{ Data record header block }
TRecHeader = packed record
           Status : string[8] ;
           RecType : string[4] ;
           Number : Single ;
           Time : Single ;
           dt : Single ;
           ADCVoltageRange : array[0..WCPChannelLimit] of Single ;
           Analysis : TAnalysis ;
           Equation : TEquation ;
           Ident : string[16] ;
           end ;

{ Data file header block }
TFileHeader = packed record
            FileName : string ;
            FileHandle : integer ;
            NumSamples : LongInt ;
            NumChannels : LongInt ;
            NumSamplesPerRecord : LongInt ;
            NumBytesPerRecord : LongInt ;
            NumDataBytesPerRecord : LongInt ;
            NumAnalysisBytesPerRecord : LongInt ;
            NumBytesInHeader : LongInt ;
            NumRecords : LongInt ;
            RecordNum : LongInt ;
            dt : single ;
            ADCVoltageRange : single ;
            ADCMaxBits : single ;
            NumZeroAvg : LongInt ;
            IdentLine : string ;
            Version : Single ;
            CurrentRecord : LongInt ;
            DecayTimePercentage : Single ;          // Selected T(x%) decay percentage value
            // Non-stationary variance analysis parameters
            NSVChannel : Integer ;          // Current channel to be analysed
            NSVType : Integer ;             // Type of record to analyse
            NSVAlignmentMode : Integer ;   // Alignment mode for averaging
            NSVScaleToPeak : Boolean ;     // Scale to peak selected
            NSVAnalysisCursor0 : Integer ; // Variance-mean plot selection cursor 0
            NSVAnalysisCursor1 : Integer ; // Variance-mean plot selection cursor 1
            SaveHeader : Boolean ;
            CreationTime : String ;
            end ;

TString4 = string[4] ;
TString6 = string[6] ;
TString8 = string[8] ;
TChannel = record
         xMin : single ;
         xMax : single ;
         yMin : single ;
         yMax : single ;
         xScale : single ;
         yScale : single ;
         Left : LongInt ;
         Right : LongInt ;
         Top : LongInt ;
         Bottom : LongInt ;
         TimeZero : single ;
         ADCZero : LongInt ;
         ADCZeroAt : LongInt ;
         ADCSCale : single ;
         ADCCalibrationFactor : single ;
         ADCCalibrationValue : single ;
         ADCAmplifierGain : single ;
         ADCUnits : string ;
         ADCName : string ;
         InUse : Boolean ;
         ChannelOffset : LongInt ;
         CursorIndex : LongInt ;
         ZeroIndex : LongInt ;
         CursorTime : single ;
         CursorValue : single ;
         Cursor0 : Integer ;
         Cursor1 : Integer ;
         TZeroCursor : Integer ;
         color : TColor ;
         end ;

    { Histogram record }
    TBin = record
         Lo : Single ;
         Mid : Single ;
         Hi :  Single ;
         y : Single ;
         end ;

THistogram = class(TObject)
              StartAt : LongInt ;
              EndAt : LongInt ;
              RecordStart : LongInt ;
              RangeLo : single ;
              RangeHi : Single ;
              NumBins : Integer ;
              NumLogBinsPerDecade : Integer ;
              MaxBin : Integer ;
              Bins : Array[0..2048] of TBin ;
              TotalCount : single ;
              Available : Boolean ;
            {  Equation : TEquation ;}
{              UnitCursor : THistCursorPos ;}
              yHi : Single ;
              BinWidth : single ;
              BinScale : single ;
              TMin : single ;
              NewPlot : Boolean ;
              end ;


TAxis = record
      Lo : Single ;
      Hi : Single ;
      Lo1 : Single ;
      Hi1 : Single ;
      Tic : Single ;
      Min : Single ;
      Max : single ;
      Position : LongInt ;
      Scale : single ;
      Log : Boolean ;
      Lab : string ;
      AutoRange : Boolean ;
      end ;

TPlot = record
      Left : LongInt ;
      Right : LongInt ;
      Top : LongInt ;
      Bottom : LongInt ;
      XAxis : TAxis ;
      YAxis : TAxis ;
      Title : string ;
      FontName : string ;
      FontSize : LongInt ;
      NumGraphs : LongInt ;
      BinBorders : Boolean ;
      BinFillStyle : TBrushStyle ;
      BinFillColor : TColor ;
      LineThickness : LongInt ;
      MarkerSize : LongInt ;
      end ;

TSealTest = record
          CurrentChannel : LongInt ;
          VoltageChannel : LongInt ;
          HoldingVoltage1 : single ;
          HoldingVoltage2 : single ;
          HoldingVoltage3 : single ;
          PulseHeight : single ;
          PulseHeight1 : single ;
          PulseHeight2 : single ;
          PulseHeight3 : single ;
          PulseWidth : single ;
          Use : LongInt ;
          AutoScale : Boolean ;
          DisplayScale : LongInt ;
          FreeRun : Boolean ;
          FirstSweep : Boolean ;
          SmoothingFactor : Single ;
          end ;

TVCommand = record
          DivideFactor : single ;
          HoldingVoltage : single ;
          end ;

TDigitalPort = record
             Value : LongInt ;
             end ;
TEventDetector = record
               Channel : LongInt ;
               Threshold : single ;
               PreTrigger : single ;
               end ;
TPageSettings = record
              FontName : string ;
              FontSize : LongInt ;
              LineThickness : LongInt ;
              ShowLines : boolean ;
              MarkerSize : LongInt ;
              ShowMarkers : boolean ;
              LeftMargin : single ;
              RightMargin : single ;
              TopMargin : single ;
              BottomMargin : single ;
              MetafileWidth : Integer ;
              MetafileHeight : Integer ;
              UseColor : boolean ;
              end ;

TTritonSettings = record
    Source : Array[0..7] of Integer ;
    Gain : Array[0..7] of Integer ;
    InputRange : Array[0..7] of Single ;
    CFAST : Array[0..7] of Single ;
    CSLOW_A : Array[0..7] of Single ;
    CSLOW_B : Array[0..7] of Single ;
    CSLOW_C : Array[0..7] of Single ;
    CSLOW_D : Array[0..7] of Single ;
    RSERIES : Array[0..7] of Single ;
    CHANOFF : Array[0..7] of Single ;
    LEAK : Array[0..7] of Single ;
    BESSEL : Array[0..7] of Single ;
    CSLOW_AEnabled : Array[0..7] of Boolean ;
    CSLOW_BEnabled : Array[0..7] of Boolean ;
    CSLOW_CEnabled : Array[0..7] of Boolean ;
    CSLOW_DEnabled : Array[0..7] of Boolean ;
    RSERIESEnabled : Array[0..7] of Boolean ;
    CHANOFFEnabled : Array[0..7] of Boolean ;
    LEAKEnabled : Array[0..7] of Boolean ;
    end ;

TColors = record
        Cursors : TColor ;
        Grid : TColor ;
        end ;

TSettings = record
          Resolution16Bit : Boolean ;
          NumChannels : Integer ;
          NumSamples : Integer ;
          ADCVoltageRangeIndex : Integer ;
          RecordDuration : Single ;

          TriggerMode : String ;
          EventDetector : TEventDetector ;
          AutoErase : Boolean ;
          NumRecordsRequired : LongInt ;
          VProgramFileName : string ;
          DAC : Array[0..1] of TVCommand ;
          DigitalPort : TDigitalPort ;
          UpdateOutputs : boolean ;
          DACInvertTriggerLevel : Boolean ;
          TopMargin : LongInt ;
          TopLine : LongInt ;
          BottomMargin : LongInt ;
          LeftMargin : LongInt ;
          RightMargin : LongInt ;
          Plot : TPageSettings ;
          ZeroLevels : boolean ;
          BarValue : array[0..WCPChannelLimit] of single ;
          TimeBarValue : single ;
          ShowLabels : boolean ;
          ShowZeroLevels : boolean ;
          CutOffFrequency : single ;
          MinDACInterval : single ;
          MinSamplingInterval : single ;
          MaxSamplingInterval : single ;
          SealTest : TSealTest ;
          TUnits : string ;
          TScale : single ;
          TUnScale : single ;
          BitmapWidth : LongInt ;
          BitmapHeight : LongInt ;
          //SectorWriteTime : single ;
          DataDirectory : string ;
          ProgDirectory : string ;
          VProtDirectory : string ;
          WavGenNoDisplay : boolean ;
          LaboratoryInterface : LongInt ;
          ADCInputMode : Integer ;

          NoINIFile : Boolean ;
          RecentFiles : Array[0..3] of string ;
          RecentFilesPointer : Integer ;
          DisplayGrid : Boolean ;
          NumHorizontalGridLines : Integer ;
          NumVerticalGridLines : Integer ;
          Colors : TColors ;
          TimeRecordingStarted : single ;
          // Waveform measurement module
          DifferentiationMode : Integer ;         // Rate of change differentiation mode
          Amplifier : Integer ;
          GainTelegraphChannel : Integer ;
          ExternalTriggerActiveHigh : Boolean ;
          ResetDisplayMagnification : Boolean ;
          Triton : TTritonSettings ;
          end ;


TBuf = class(TObject)
     Buf : array[0..MaxADCSamples-1] of Integer ;
     end ;

Txy = record
    x : Single ;
    y : Single ;
    end ;

TMarkerShape = ( SquareMarker, CircleMarker ) ;
TxyBuf = class(TObject)
         NumPoints : LongInt ;
         x : array[0..6000] of Single ;
         y : array[0..6000] of Single ;
         MarkerShape : TMarkerShape ;
         MarkerSize : LongInt ;
         MarkerSolid : Boolean ;
         Color : TColor ;
         end ;


THistBuf = class(TObject)
         NumBins : LongInt ;
         Bin : array[0..1000] of TBin ;
         yHi : Single ;
         BinWidth : Single ;
         end ;

{ Global Variables }
var
ProgVersion : string ;
fH : TFileHeader ;
RawfH : TFileHeader ;
AvgfH : TFileHeader ;
LeakfH : TFileHeader ;
DrvFH : TFileHeader ;
HeaderArrayFull : Boolean ;     // File header parameter array full flag

// File channel calibration
Channel : array[0..WCPChannelLimit] of TChannel ;
// Recording channel settings
RecChannel : array[0..WCPChannelLimit] of TChannel ;
RecordTypes : TStringList ;
ChannelNames : TStringList ;
Settings : TSettings ;
MaxADCValue : Integer ;
MinADCValue : Integer ;
MaxDACValue : Integer ;
MinDACValue : Integer ;

LogFileName : string ;
implementation


end.
