//Advanced Delphi Systems Code: ads_wbServer
unit ads_wbServer;
{Copyright(c)2016 Advanced Delphi Systems

 Richard Maley
 Advanced Delphi Systems
 12613 Maidens Bower Drive
 Potomac, MD 20854 USA
 phone 301-840-1554
 dickmaley@advdelphisys.com

 The code herein can be used or modified by anyone.  Please retain references
 to Richard Maley at Advanced Delphi Systems.  If you make improvements to the
 code please send your improvements to dickmaley@advdelphisys.com so that the
 entire Delphi community can benefit.  All comments are welcome.
}

(*
UnitIndex Master Index Implementation Section Download Units
Description: ads_wbServer.pas
This unit contains the following routines.

AdvDelphiSysComment   CheckLoginDatabase   CleanUnEncryptedField   Counter   DeEncryptAndCleanField   DeEncryptString   DeEncryptValidate   DeleteItemsFromList   EncryptString   ER   FieldList   FieldsInit   FieldsUpdate   FieldTypeToStr   FieldValuesStrToLst   FileToStr   GetDBImageByRecno   GetEncryptedLoginID   GetEncryptedPwd   GetLoginID   GetPwd   GetRequestInfo   MakeAccessDenied   MakeBrowserPage   MakeDBNamesPage   MakeFieldNamesPage   MakeLogin   MakeOptionsPage   MakePageFooter   MakePageHeader   MakeTableNamesPage   MinMaxStrFieldTypes   PageHeader   PublishDebugData   ReplaceStringInString   ShouldIGenList   StrToFieldType   SyncConfigParams   TWebServerDB.Database1Login  WriteErrors  

*)
interface
uses
  Windows, Messages, SysUtils, Classes, HTTPApp, Graphics, DBTables, DB,
  FieldClass, ads_wbserver_util;

Type

TWebServerDB = Class(TDatabase)
  procedure Database1Login(Database: TDatabase; LoginParams: TStrings);
End;

  Function PublishDebugData(PageStr: String;Values: TWebRequest): String;

  Function Counter: String;

  Function FieldList(
    Request     : TWebRequest;
    FieldPrefix : String
    ): String;
  Function FieldValuesStrToLst(
    Var lst     : TStringList;
    FieldValues : String;
    ListName    : String): Boolean;
  Function MakeOptionsPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Button      : String;
    Values      : String;
    FieldValues : String
    ): String;

  Function StrToFieldType(FieldType : String): TFieldType;
  Function FieldTypeToStr(FieldType : TFieldType): String;
  Function MinMaxStrFieldTypes(FieldType : String): Boolean;

  Function FieldsUpdate(
    FieldDisplay : TStringList;
    FieldMax     : TStringList;
    FieldMin     : TStringList;
    FieldNames   : TStringList;
    FieldNumber  : TStringList;
    FieldOrder   : TStringList;
    FieldSize    : TStringList;
    FieldType    : TStringList;
    FieldVisible : TStringList;
    TableData    : TStringList;
    SaveToFile   : Boolean
    ): String;
  Function FieldsInit(
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Role        : String
    ): String;

  Function CheckLoginDatabase(
    DatabaseName : String;
    TableName    : String;
    LoadBalance  : String;
    BufferSize   : String
    ): Boolean;

  Function DeEncryptAndCleanField(
    Request: TWebRequest;
    Field  : String
    ): String;

  Function CleanUnEncryptedField(
    Request: TWebRequest;
    Field  : String
    ): String;

  Function MakeFieldNamesPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Button      : String;
    Values      : String;
    FieldValues : String
    ): String;

  Function MakeBrowserPage(
    ActionURL   : String;
    DatabaseName: String;
    TableName   : String;
    LoadBalance : String;
    BufferSize  : String;
    Role        : String;
    RecNo       : String;
    RecMax      : String;
    FieldList   : String;
    NavButton   : String
    ): String;

  Function ShouldIGenList(var lst : TStringList): Boolean;

  Function DeleteItemsFromList(InputList : String): String;

  Function MakeLogin: String;
  
  Function PageHeader: String;

  Function AdvDelphiSysComment: String;

  Procedure FileToStr(
    Var Str  : String;
    FileName : String);

  Function GetRequestInfo(
    Request: TWebRequest;
    AsTable: Boolean): String;

  procedure GetDBImageByRecno(
    Sender       : TObject;
    Request      : TWebRequest;
    Response     : TWebResponse;
    var Handled  : Boolean);

  Function MakeTableNamesPage(
    ActionURL   : String;
    DatabaseName: String;
    LoadBalance : String;
    BufferSize  : String
    ): String;

  Function MakeDBNamesPage(
    //Session     : TSession;
    ActionURL   : String;
    LoadBalance : String;
    BufferSize  : String
    ): String;

  Function GetLoginID(Request : TWebRequest): String;

  Function GetPwd(Request : TWebRequest): String;
  Function GetEncryptedLoginID(Request : TWebRequest): String;
  Function GetEncryptedPwd(Request : TWebRequest): String;

  Function EncryptString(sg : String): String;
  Function DeEncryptString(sg : String): String;
  Function MakePageHeader(
    HTMLMetaDataTitle    : String;
    HTMLMetaDataAuthor   : String;
    HTMLMetaDataKeywords : String;
    HTMLMetaDataDesc     : String;
    MainTitle            : String;
    SubTitle             : String;
    BackGround           : String;
    DebugData            : Boolean
    ): String;

  Function MakePageFooter: String;
  Function ReplaceStringInString(
    SourceString : String;
    OldString    : String;
    NewString    : String
    ): String;

  Procedure MakeAccessDenied;
  Procedure SyncConfigParams(
    var ConfigParam : String;
    sgConfigParam   : String);
  Function ER(
    ProcName : String;
    Group    : String;
    Var E    : Exception): String;

  Var
    ConfigParams              : TStringList;
    ConfigParamsWas           : String;
    DBLoadDatabaseName        : String;
    DBLoadFieldValues         : String;
    DBLoadRole                : String;
    DBLoadTableName           : String;
    DBSaveDatabaseName        : String;
    DBSaveFieldValues         : String;
    DBSaveRole                : String;
    DBSaveTableName           : String;
    DBValueDatabaseName       : String;
    DBValueFieldValues        : String;
    DBValueRole               : String;
    DBValueTableName          : String;
    DebugDataPublish          : String;
    Errors                    : TStringList;
    ExecutableName            : String;
    ExecutablePath            : String;
    FileConfiguration         : String;
    FileHTMLPageFooter        : String;
    FileHTMLPageHeader        : String;
    FileListDelete            : String;
    FileListOfOnlyItems       : String;
    FileMetaDataDescription   : String;
    FileMetaDataKeywords      : String;
    HTMLHideSource            : String;
    HTMLHideString            : String;
    HTMLMetaDataAuthor        : String;
    HTMLMetaDataDesc          : String;
    HTMLMetaDataKeywords      : String;
    HTMLMetaDataTitle         : String;
    HTMLPageFooter            : String;
    HTMLPageHeader            : String;
    HTMLTable2CellPadding     : String;
    HTMLTable2CellSpacing     : String;
    HTMLTable2ColorBackGrd    : String;
    HTMLTable2ColorBorder     : String;
    HTMLTable2ColorFont       : String;
    HTMLTable2FontSize        : String;
    HTMLTable3CellPadding     : String;
    HTMLTable3CellSpacing     : String;
    HTMLTable3ColorBackGrd    : String;
    HTMLTable3ColorBorder     : String;
    HTMLTable3ColorFont       : String;
    HTMLTable3FontSize        : String;
    HTMLTableCellPadding      : String;
    HTMLTableCellSpacing      : String;
    HTMLTableColorBackGrd     : String;
    HTMLTableColorBorder      : String;
    HTMLTableColorFont        : String;
    HTMLTableFontSize         : String;
    HTMLTitleMain             : String;
    HTMLTitleMainColor        : String;
    HTMLTitleMainSize         : String;
    HTMLTitleSub              : String;
    HTMLTitleSubColor         : String;
    HTMLTitleSubSize          : String;
    ListOfItemsToDelete       : String;
    ListOfOnlyDisplayItems    : String;
    MeterCounterBold          : String;
    MeterCounterColorBackGrd  : String;
    MeterCounterColorBorder   : String;
    MeterCounterColorFont     : String;
    MeterCounterFontSize      : String;
    MeterCounterItalics       : String;
    MeterCounterShow          : String;
    MeterDateBold             : String;
    MeterDateColorBackGrd     : String;
    MeterDateColorBorder      : String;
    MeterDateColorFont        : String;
    MeterDateFontSize         : String;
    MeterDateItalics          : String;
    MeterDateShow             : String;
    MeterTimeBold             : String;
    MeterTimeColorBackGrd     : String;
    MeterTimeColorBorder      : String;
    MeterTimeColorFont        : String;
    MeterTimeFontSize         : String;
    MeterTimeItalics          : String;
    MeterTimeShow             : String;
    sgBoolean                 : String;
    URLAction                 : String;
    URLAction2                : String;
    URLAction3                : String;
    URLAction4                : String;
    URLBackground             : String;
    URLImageTop               : String;
    URLScriptDir              : String;

implementation


uses JPeg;

//
Unit Description UnitIndex Master Index
procedure TWebServerDB.Database1Login(Database: TDatabase;
  LoginParams: TStrings);
begin
  LoginParams.Clear;
  LoginParams.Add('USER NAME='+Params.Values['USER NAME']);
  LoginParams.Add('PASSWORD=' +Params.Values['PASSWORD']);
end;

//
Unit Description UnitIndex Master Index
Function DeEncryptValidate(InputString: ShortString): String;
Var
  NewString: String;
  L        : Integer;
  i        : Integer;
  C        : Char;
Begin
  Result    := InputString;
  NewString := '';
  L         := Length(InputString);
  For i:= 1 To L Do
  Begin
    C := InputString[i];
    Case C of
    '0' : NewString := NewString + C;
    '1' : NewString := NewString + C;
    '2' : NewString := NewString + C;
    '3' : NewString := NewString + C;
    '4' : NewString := NewString + C;
    '5' : NewString := NewString + C;
    '6' : NewString := NewString + C;
    '7' : NewString := NewString + C;
    '8' : NewString := NewString + C;
    '9' : NewString := NewString + C;
    End;
  End;
  Result    := NewString;
End;

//
Unit Description UnitIndex Master Index
Function ER(
  ProcName : String;
  Group    : String;
  Var E    : Exception): String;
Var
  sgRec : String;
  dt    : TDateTime;
  Filler: String;
Begin
  Filler := '                                                                 ';
  dt := now();
  sgRec := FormatDateTime('yymmdd',dt);
  sgRec := sgRec + FormatFloat('.0000000000',dt)+' ';
  ProcName := ProcName + Filler;
  Group    := Group + Filler;
  sgRec := sgRec + Copy(ProcName, 1, 35) + ' ';
  sgRec := sgRec + Copy(Group,1,25) + ' ';
  sgRec := sgRec + E.Message;
  Result :=
    ''+
    ''+
    '
'+ '

'+ '

ERROR MESSAGE

'+ '
'+ sgRec+ ''+ ''; Errors.Add(sgRec); End; //
Unit Description UnitIndex Master Index
Procedure WriteErrors;
Var
  lst      : TStringList;
  FileName : String;
Begin
  FileName := ExecutablePath+'ads_wbServer.txt';
  If FileExists(FileName) Then
  Begin
    lst := TStringList.Create();
    Try
      lst.LoadFromFile(FileName);
      lst.SetText(PChar(lst.Text+Errors.Text));
      lst.Sorted := True;
      lst.SaveToFile(FileName);
    Finally
      lst.Free;
    End;
  End
  Else
  Begin
    Errors.SaveToFile(FileName);
  End;
End;

//
Unit Description UnitIndex Master Index
Function GetRequestInfo(
  Request: TWebRequest;
  AsTable: Boolean): String;
Var
  lst          : TStringList;
  CommentStart : String;
  CommentEnd   : String;
  TableStart   : String;
  TableEnd     : String;
  RowStart     : String;
  RowEnd       : String;
  CellStart    : String;
  CellEnd      : String;
  inCounter    : Integer;
  inPos        : Integer;
Begin
  If AsTable Then
  Begin
    CommentStart := '';
    CommentEnd   := '';
    TableStart   := '';
    TableEnd     := '
'; RowStart := ''; RowEnd := ''; CellStart := ''; CellEnd := ''; End Else Begin CommentStart := ''; TableStart := ''; TableEnd := ''; RowStart := ''; RowEnd := ''; CellStart := ''; CellEnd := ''; End; lst := TStringList.Create; Try With lst Do Begin Clear; Add(CommentStart+'

'+CommentEnd); Add(CommentStart+'Requestor Data'+CommentEnd); Add(CommentStart+'
'+CommentEnd); Add(CommentStart+TableStart+CommentEnd); Add(CommentStart+RowStart+CellStart+'Property' +CellEnd+CellStart + 'Value'+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Method' +CellEnd+CellStart + Request.Method+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ProtocolVersion'+CellEnd+CellStart + Request.ProtocolVersion+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'URL' +CellEnd+CellStart + Request.URL+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Query' +CellEnd+CellStart + Request.Query+CellEnd+RowEnd+CommentEnd); If Request.Query <> '' Then Begin For inCounter := 0 To Request.QueryFields.Count - 1 Do Begin Add( CommentStart+RowStart+CellStart+'QueryFields['+ IntToStr(inCounter)+']' +CellEnd+CellStart + Request.QueryFields[inCounter]+CellEnd+RowEnd+CommentEnd); inPos := Pos('LoadBalance',Request.QueryFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.QueryFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'QueryFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'LoadBalance='+ DeEncryptString(Copy(Request.QueryFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; inPos := Pos('BufferSize',Request.QueryFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.QueryFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'QueryFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'BufferSize='+ DeEncryptString(Copy(Request.QueryFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; End; End; Add(CommentStart+RowStart+CellStart+'PathInfo' +CellEnd+CellStart + Request.PathInfo+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'PathTranslated' +CellEnd+CellStart + Request.PathTranslated+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Authorization' +CellEnd+CellStart + Request.Authorization+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'CacheControl' +CellEnd+CellStart + Request.CacheControl+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Cookie' +CellEnd+CellStart + Request.Cookie+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Date' +CellEnd+CellStart + FormatDateTime ('mmm dd, yyyy hh:mm', Request.Date)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Accept' +CellEnd+CellStart + Request.Accept+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'From' +CellEnd+CellStart + Request.From+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Host' +CellEnd+CellStart + Request.Host+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'IfModifiedSince'+CellEnd+CellStart + FormatDateTime ('mmm dd, yyyy hh:mm', Request.IfModifiedSince)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Referer' +CellEnd+CellStart + Request.Referer+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'UserAgent' +CellEnd+CellStart + Request.UserAgent+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentEncoding'+CellEnd+CellStart + Request.ContentEncoding+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentType' +CellEnd+CellStart + Request.ContentType+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentLength' +CellEnd+CellStart + IntToStr(Request.ContentLength)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ContentVersion' +CellEnd+CellStart + Request.ContentVersion+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Content' +CellEnd+CellStart + Request.Content+CellEnd+RowEnd+CommentEnd); If Request.Content <> '' Then Begin For inCounter := 0 To Request.ContentFields.Count - 1 Do Begin Add( CommentStart+RowStart+CellStart+'ContentFields['+ IntToStr(inCounter)+']' +CellEnd+CellStart + Request.ContentFields[inCounter]+CellEnd+RowEnd+CommentEnd); inPos := Pos('LoadBalance',Request.ContentFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.ContentFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'ContentFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'LoadBalance='+ DeEncryptString(Copy(Request.ContentFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; inPos := Pos('BufferSize',Request.ContentFields[inCounter]); If inPos > 0 Then Begin inPos := Pos('=',Request.ContentFields[inCounter]); If inPos > 0 Then Begin Add( CommentStart+RowStart+CellStart+'ContentFields['+ IntToStr(inCounter)+']' + CellEnd+CellStart + 'BufferSize='+ DeEncryptString(Copy(Request.ContentFields[inCounter],inPos+1,255))+ CellEnd+RowEnd+CommentEnd); End; End; End; End; Add(CommentStart+RowStart+CellStart+'Connection' +CellEnd+CellStart + Request.Connection+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'DerivedFrom' +CellEnd+CellStart + Request.DerivedFrom+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Expires' +CellEnd+CellStart + FormatDateTime ('mmm dd, yyyy hh:mm', Request.Expires)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'Title' +CellEnd+CellStart + Request.Title+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'RemoteAddr' +CellEnd+CellStart + Request.RemoteAddr+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'RemoteHost' +CellEnd+CellStart + Request.RemoteHost+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ScriptName' +CellEnd+CellStart + Request.ScriptName+CellEnd+RowEnd+CommentEnd); Add(CommentStart+RowStart+CellStart+'ServerPort' +CellEnd+CellStart + IntToStr(Request.ServerPort)+CellEnd+RowEnd+CommentEnd); Add(CommentStart+TableEnd+CommentEnd); End; lst.Add(CommentStart+'Start Configuration file Entries'+CommentEnd); For inCounter := 0 To ConfigParams.Count - 1 Do Begin lst.Add(CommentStart+ConfigParams[inCounter]+CommentEnd); End; lst.Add(CommentStart+'End Configuration file Entries'+CommentEnd); Result := lst.text; Finally lst.Free; End; End; //

Unit Description UnitIndex Master Index
procedure GetDBImageByRecno(
  Sender       : TObject;
  Request      : TWebRequest;
  Response     : TWebResponse;
  var Handled  : Boolean);
var
  Jpeg         : TJpegImage;
  MemoryStream : TMemoryStream;
  Picture      : TPicture;
  DatabaseName : String;
  TableName    : String;
  FieldName    : String;
  RecNo        : String;
  RecNum       : Integer;
  inCounter    : Integer;
  qry          : TQuery;
  Graphic      : TGraphicField;
  ProcName     : String;
begin
  ProcName := 'GetDBImageByRecno';
  Try
    qry     := TQuery.Create(nil);
    DatabaseName := Request.QueryFields.Values['DatabaseName'];
    TableName    := Request.QueryFields.Values['TableName'];
    FieldName    := Request.QueryFields.Values['FieldName'];
    RecNo        := Request.QueryFields.Values['RecNo'];
    Try
      RecNum       := StrToInt(RecNo);
    Except
      RecNum := 1;
    End;
    Graphic := TGraphicField.Create(nil);
    Jpeg    := TJpegImage.Create;
    Try
      qry.Active := False;
      qry.DatabaseName := DatabaseName;
      qry.RequestLive  := False;
      qry.Sql.Clear;
      qry.Sql.Add('Select');
      qry.Sql.Add(FieldName);
      qry.Sql.Add('From');
      If Pos('.DB',UpperCase(TableName)) > 0 Then
      Begin
        qry.Sql.Add('"'+TableName+'"');
      End
      Else
      Begin
        qry.Sql.Add(TableName);
      End;

      Graphic.FieldName := FieldName;
      Graphic.BlobType  := ftGraphic;

      //qry.sql.add('/* '+'RecNo='       +RecNo           +' */');
      //qry.sql.add('/* '+'RecNum='      +IntToStr(RecNum)+' */');
      //qry.sql.add('/* '+'DatabaseName='+Databasename    +' */');
      //qry.sql.add('/* '+'TableName='   +Tablename       +' */');
      //qry.sql.add('/* '+'FieldName='   +FieldName       +' */');
      Graphic.DataSet   := qry;
      qry.Active := True;
      qry.First;
      For inCounter := 1 To RecNum Do
      Begin
        If inCounter = RecNum Then
        Begin
          Break;
        End
        Else
        Begin
          qry.Next;
        End;
      End;
      Picture           := TPicture.Create;
      Picture.Assign(Graphic);
      qry.Active := False;
      Jpeg.Assign(Picture.Graphic);
      MemoryStream := TMemoryStream.Create;
      qry.sql.SaveToFile('c:\program files\apache group\apache\scripts\sql03.txt');
      Try
        Jpeg.SaveToStream(MemoryStream);
        MemoryStream.Position  := 0;
        Response.ContentType   := 'image/jpeg';
        Response.ContentStream := MemoryStream;
        Response.SendResponse;
      Finally
        Picture.Free;
        MemoryStream.Free;
      End;
      Handled := True;
    Finally
      Jpeg.Free;
      qry.Free;
      Graphic.Free;
    End;
  Except
    On E : Exception Do ER(ProcName,'all',E);
  End;
End;

//
Unit Description UnitIndex Master Index
Function EncryptString(sg : String): String;
Var
  inCounter : Integer;
  inDOY     : Integer;
  flDOY     : Double;
  dtToday   : TDateTime;
  dtFirst   : TDateTime;
  Str       : String;
  sgChar    : String;
  pcChar    : PChar;
  chChar    : Char;
  inChar    : Integer;
  sgInChar  : String;
  insgLen   : Integer;
  inCharLen : Integer;
  ProcName  : String;
Begin
  ProcName  := 'EncryptString';
  Try
    dtToday   := now();
    dtFirst   := StrToDateTime(FormatDateTime('1/1/yyyy',dtToday));
    flDOY     := dtToday - dtFirst + 1;
    inDOY     := StrToInt(FormatFloat('#0',flDOY));
    sgChar    := '';
    sgInChar  := '';
    Str       := '';
    insgLen   := Length(sg);
    For inCounter := 1 To insgLen Do
    Begin
      sgChar   := Copy(sg,inCounter,1);
      pcChar   := PChar(sgChar);
      chChar   := pcChar[0];
      inChar   := Ord(chChar);
      If inChar = 10 Then Continue;
      If inChar = 13 Then Continue;
      If inChar =  9 Then Continue;
      inChar   := inChar + inDOY;
      If Odd(inCounter) Then
      Begin
        inChar := inChar - inCounter;
      End
      Else
      Begin
        inChar := inChar + inCounter;
      End;
      sgInChar := IntToStr(inChar);
      inCharLen:= Length(sgInChar);
      Case inCharLen Of
      0 : sgInChar := '000'+sgInChar;
      1 : sgInChar :=  '00'+sgInChar;
      2 : sgInChar :=   '0'+sgInChar;
      3 : sgInChar :=    ''+sgInChar;
      End;
      Str := Str + sgInChar;
    End;
    Str := Str + '677968';

    Str := Str + IntToStr(inDOY + 486772);
    Str := Str + IntToStr(inDOY + 967465);
    Str := Str + IntToStr(inDOY + 601754);
    Str := Str + IntToStr(inDOY + 629573);
    Str := Str + IntToStr(inDOY + 566285);
    Str := Str + IntToStr(inDOY + 835649);
    Str := Str + IntToStr(inDOY + 907835);
    Str := Str + IntToStr(inDOY + 541653);
    Str := Str + IntToStr(inDOY + 905906);
    Str := Str + IntToStr(inDOY + 756907);
    Str := Str + IntToStr(inDOY + 835665);
   
    Str := Copy(Str,1,66);
    Result := Str;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function DeEncryptString(sg : String): String;
Var
  inCounter : Integer;
  inDOY     : Integer;
  flDOY     : Double;
  dtToday   : TDateTime;
  dtFirst   : TDateTime;
  Str       : String;
  sgChar    : String;
  inChar    : Integer;
  sgInChar  : String;
  ProcName  : String;
  inPos     : Integer;
  inMax     : Integer;
Begin
  ProcName  := 'DeEncryptString';
  Try
    sg := DeEncryptValidate(sg);
    inChar    := 0;
    inPos     := Pos('677968',sg);
    If inPos < 4 Then
    Begin
      Result := '';
      Exit;
    End;
    sg := Copy(sg,1,inPos-1);
    dtToday   := now();
    dtFirst   := StrToDateTime(FormatDateTime('1/1/yyyy',dtToday));
    flDOY     := dtToday - dtFirst + 1;
    inDOY     := StrToInt(FormatFloat('#0',flDOY));
    sgChar    := '';
    sgInChar  := '';
    Str       := '';
    inMax     := Length(sg) div 3;
    For inCounter := 1 To inMax Do
    Begin
      sgInChar := Copy(sg,1,3);
      sg       := Copy(sg,4,60);
      Try
        inChar   := StrToInt(sgInChar)-inDOY;
      Except
        Continue;
      End;
      If Odd(inCounter) Then
      Begin
        inChar := inChar + inCounter;
      End
      Else
      Begin
        inChar := inChar - inCounter;
      End;
      Str      := Str + Chr(inChar);
      If Length(sg) = 0 Then Break;
    End;
    Result := Str;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;  
End;

//
Unit Description UnitIndex Master Index
Function MakeTableNamesPage(
  ActionURL   : String;
  DatabaseName: String;
  LoadBalance : String;
  BufferSize  : String
  ): String;
var
  TableNames: TStringList;
  i         : Integer;
  ProcName  : String;
  Page      : TStringList;
  DBName    : TWebServerDB;
begin
  ProcName  := 'MakeTableNamesPage';
  Try
    DatabaseName := DeEncryptString(EncryptString(Trim(DatabaseName)));
    ActionURL    := DeEncryptString(EncryptString(Trim(ActionURL)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    Page         := TStringList.Create();
    TableNames   := TStringList.Create;
    DBName       := TWebServerDB.Create(nil);
    Try
      If ShouldIGenList(TableNames) Then
      Begin
        DBName.LoginPrompt    := False;
        DBName.DatabaseName   := 'DBName';
        DBName.AliasName      := DatabaseName;
        DBName.KeepConnection := True;
        DBName.Params.Clear;
        DBName.Params.Add('USER NAME='+DeEncryptString(LoadBalance));
        DBName.Params.Add('PASSWORD='+DeEncryptString(BufferSize));
        Try
          DBName.Connected := True;
        Except
          On E : Exception Do
          Begin
            Result := ER(ProcName,'Connection',E);
            Exit;
          End;
        End;

        TableNames.Sorted := True;

        DBname.Session.GetTableNames(
            'DBName',
            '',
            True,
            False,
            TableNames);
        TableNames.SetText(PChar(DeleteItemsFromList(TableNames.Text)));
      End;
      Page.SetText(PChar(PageHeader));
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(DatabaseName+' Database'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Please select a database table.'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Page.SaveToFile(ExecutableName+'.txt'); Finally Page .Free; TableNames.Free; DBName .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //
Unit Description UnitIndex Master Index
Function MakePageHeader(
  HTMLMetaDataTitle    : String;
  HTMLMetaDataAuthor   : String;
  HTMLMetaDataKeywords : String;
  HTMLMetaDataDesc     : String;
  MainTitle            : String;
  SubTitle             : String;
  BackGround           : String;
  DebugData            : Boolean
  ): String;
Var
  Page     : TStringList;
  ProcName : String;
  inCounter: Integer;
Begin
  ProcName := 'MakePageHeader';
  Try
    Page   := TStringList.Create();
    Try
      Page.Clear;
      Page.Add('');
      Page.Add('');
      sgBoolean :=  HTMLHideSource;
      If (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
      Begin
        //sgBoolean :=  DebugDataPublish;
        //If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
        //Begin
          //sgBoolean := '';
          Page.Add('');
        //End;
      End;
      Page.Add('');
      Page.Add('');
      Page.Add(''+HTMLMetaDataTitle+'');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add(' '' Then Page.Add(' BACKGROUND="'+Background+'"');
      Page.Add('>');
      If URLImageTop <> '' Then Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
        Page.Add('');
        Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); If ExecutableName = 'LOGIN.EXE' Then Begin Page.Add(''); Page.Add(''); Page.Add('
'); End Else Begin Page.Add(''); End; Page.Add('
'); If (Trim(MainTitle) <> '') Or (Trim(SubTitle) <> '') Then Begin Page.Add(''); If Trim(MainTitle) <> '' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; If Trim(SubTitle) <> '' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(MainTitle); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(SubTitle); Page.Add(''); Page.Add('
'); End; Result := Page.Text; Finally Page.Free; End; Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //Unit Description UnitIndex Master Index
Function MakePageFooter: String;
Var
  Page     : TStringList;
  ProcName : String;
Begin
  ProcName := 'MakePageFooter';
  Try
    If Trim(HTMLPageFooter) = '' Then
    Begin
      Page   := TStringList.Create();
      Try
        Page.Clear;
        Page.Add('');

        If (Copy(UpperCase(MeterCounterShow),1,1) = 'T') Or
           (Copy(UpperCase(MeterDateShow)   ,1,1) = 'T') Or
           (Copy(UpperCase(MeterTimeShow)   ,1,1) = 'T')
        Then
        Begin
          Page.Add('');
          Page.Add('');
          If Copy(UpperCase(MeterCounterShow),1,1) = 'T' Then
          Begin
            Page.Add('');
          End;
          If Copy(UpperCase(MeterDateShow),1,1) = 'T' Then
          Begin
            Page.Add('');
          End;
          If Copy(UpperCase(MeterTimeShow),1,1) = 'T' Then
          Begin
            Page.Add('');
          End;
          Page.Add('');
          Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); If Copy(UpperCase(MeterCounterBold),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterCounterItalics),1,1) = 'T' Then Page.Add(''); Page.Add(''); Page.Add(Counter); Page.Add(''); If Copy(UpperCase(MeterCounterItalics),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterCounterBold),1,1) = 'T' Then Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); If Copy(UpperCase(MeterDateBold),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterDateItalics),1,1) = 'T' Then Page.Add(''); Page.Add(''); Page.Add(FormatDateTime('mm/dd/yyyy',Now())); Page.Add(''); If Copy(UpperCase(MeterDateItalics),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterDateBold),1,1) = 'T' Then Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); If Copy(UpperCase(MeterTimeBold),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterTimeItalics),1,1) = 'T' Then Page.Add(''); Page.Add(''); Page.Add(FormatDateTime('hh:nn:ss',Now())); Page.Add(''); If Copy(UpperCase(MeterTimeItalics),1,1) = 'T' Then Page.Add(''); If Copy(UpperCase(MeterTimeBold),1,1) = 'T' Then Page.Add(''); Page.Add('
'); Page.Add('
'); End; Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); If Copy(UpperCase(DebugDataPublish),1,1) = 'T' Then Begin Page.Add(''); End; Result := Page.Text; Finally Page.Free; End; End Else Begin Result := HTMLPageFooter; End; Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //
Unit Description UnitIndex Master Index
Function ReplaceStringInString(
  SourceString : String;
  OldString    : String;
  NewString    : String
  ): String;
Var
  inPos    : Integer;
  ProcName : String;
Begin
  ProcName := 'ReplaceStringInString';
  Try
    inPos := Pos(OldString,SourceString);
    If inPos < 1 Then
    Begin
      Result := SourceString;
      Exit;
    End;
    Result :=
      Copy(SourceString,1,inPos-1)+
      NewString+
      Copy(
        SourceString,
        (inPos+Length(OldString)),
        (Length(SourceString)-inPos-Length(OldString)+1));
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeDBNamesPage(
 //Session     : TSession;
  ActionURL   : String;
  LoadBalance : String;
  BufferSize  : String
  ): String;
var
  AliasNames: TStringList;
  inCounter : Integer;
  ProcName  : String;
  Page      : TStringList;
  Session   : TSession;
begin
  ProcName  := 'MakeDBNamesPage';
  Try
    ActionURL    := DeEncryptString(EncryptString(Trim(ActionURL)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));
    AliasNames   := TStringList.Create();
    Page         := TStringList.Create();
    Session      := TSession.Create(nil);
    AliasNames.Sorted := True;
    Try
      Session.SessionName := 'Session';
      Page.SetText(PChar(PageHeader));
      If ShouldIGenList(AliasNames) Then
      Begin
        With Session Do
        Begin
          Active := True;
          GetAliasNames(AliasNames);
          Active := False
        End;
        AliasNames.SetText(PChar(DeleteItemsFromList(AliasNames.Text)));
      End;
      Page.Add('
'); Page.Add(''); Page.Add(''); //Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); (* Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); *) Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Database Selection'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Please select a database.'); Page.Add(''); Page.Add('

Database Selection

'); Page.Add('
'); Page.Add('Please select a database.' ); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
' ); Page.Add('
' ); Page.SetText(PChar(Page.Text+MakePageFooter)); Result := Page.Text; Finally AliasNames.Free; Page .Free; Session .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //
Unit Description UnitIndex Master Index
Function GetLoginID(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetLoginID';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := DeEncryptString(Request.QueryFields.Values['LoadBalance']);
    End
    Else
    Begin
      Result   := DeEncryptString(Request.ContentFields.Values['LoadBalance']);
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function GetEncryptedLoginID(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetEncryptedLoginID';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := Request.QueryFields.Values['LoadBalance'];
    End
    Else
    Begin
      Result   := Request.ContentFields.Values['LoadBalance'];
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function GetEncryptedPwd(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetEncryptedPwd';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := Request.QueryFields.Values['BufferSize'];
    End
    Else
    Begin
      Result   := Request.ContentFields.Values['BufferSize'];
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;



//
Unit Description UnitIndex Master Index
Function GetPwd(Request : TWebRequest): String;
Var
  ProcName : String;
Begin
  ProcName := 'GetPwd';
  Try
    If Request.MethodType = mtGet	Then
    Begin
      Result   := DeEncryptString(Request.QueryFields.Values['BufferSize']);
    End
    Else
    Begin
      Result   := DeEncryptString(Request.ContentFields.Values['BufferSize']);
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Procedure MakeAccessDenied;
Var
  lst      : TStringList;
  ProcName : String;
Begin
  ProcName := 'MakeAccessDenied';
  Try
    If FileExists(ExecutablePath+'index.htm')
       And
       FileExists(ExecutablePath+'index.htm')
    Then Exit;
    lst := TStringList.Create();
    Try
      lst.Clear;
      lst.Add('');
      lst.Add('');
      lst.Add('
'); lst.Add('

'); lst.Add('ACCESS DENIED'); lst.Add('

'); lst.Add('
'); lst.Add(''); lst.Add(''); lst.SaveToFile(ExecutablePath+'index.htm'); lst.SaveToFile(ExecutablePath+'index.html'); Finally lst.Free; End; Except On E : Exception Do Begin ER(ProcName,'all',E); End; End; End; //
Unit Description UnitIndex Master Index
Procedure SyncConfigParams(
  var ConfigParam : String;
  sgConfigParam   : String);
Var
  ProcName  : String;
  inPos     : Integer;
  inCounter : Integer;
  Found     : Boolean;
Begin
  ProcName := 'SyncConfigParams';
  Try
    If FileExists(FileConfiguration) Then
    Begin
      If ConfigParams.Values[sgConfigParam]
         <>                    ConfigParam       Then
                               ConfigParam :=
         ConfigParams.Values[sgConfigParam];
    End;
    Found := False;
    For inCounter := 0 To ConfigParams.Count - 1 Do
    Begin
      inPos := Pos(UpperCase(sgConfigParam)+'=',UpperCase(ConfigParams[inCounter]));
      If inPos > 0 Then
      Begin
        Found := True;
        Break;
      End;
    End;
    If Not Found Then ConfigParams.Add(sgConfigParam+'='+ConfigParam);
  Except
    On E : Exception Do ER(ProcName,'all',E);
  End;
End;

//
Unit Description UnitIndex Master Index
Procedure FileToStr(
  Var Str  : String;
  FileName : String);
Var
  lst      : TStringList;
  ProcName : String;
Begin
  ProcName := 'FillStringFromFile';
  Try
    If FileName = '' Then Exit;
    lst := TStringList.Create();
    Try
      lst.Clear;
      If FileExists(FileName) Then
      Begin
        lst.LoadFromFile(FileName);
      End
      Else
      Begin
        Exit;
      End;
      Str := lst.Text;
    Finally
      lst.Free;
    End;
  Except
    On E : Exception Do ER(ProcName,'all',E);
  End;
End;

//
Unit Description UnitIndex Master Index
Function PageHeader: String;
Var
  ProcName : String;
Begin
  ProcName := 'PageHeader';
  Try
    If Trim(HTMLPageHeader) = '' Then
    Begin
      Result :=
        MakePageHeader(
          HTMLMetaDataTitle,       //HTMLMetaDataTitle    : String;
          HTMLMetaDataAuthor,      //HTMLMetaDataAuthor  : String;
          FileMetaDataKeywords,    //FileMetaDataKeywords : String;
          HTMLMetaDataDesc,        //HTMLMetaDataDesc : String;
          HTMLTitleMain,           //MainTitle        : String;
          HTMLTitleSub,            //SubTitle         : String;
          URLBackground,           //BackGround       : String;
          (DebugDataPublish='TRUE')//DebugData        : Boolean;
          );                       //): String;
    End
    Else
    Begin
      Result := AdvDelphiSysComment+HTMLPageHeader;
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeLogin: String;
Var
  lst      : TStringList;
  ProcName : String;
begin
  ProcName := 'MakeLogin';
  Try
    lst := TStringList.Create();
    Try
      lst.Clear;
      lst.SetText(PChar(PageHeader));
      lst.Add('');
      lst.Add('');
      lst.Add('');
      lst.Add('');
      lst.Add('
'); lst.Add('
'); lst.Add('
'); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('
'); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('
Security Login
'); lst.Add('
 
Please enter your Login ID and Password
 
 
 Login ID  
 
 Password '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('  '); lst.Add(' '); lst.Add(' '); lst.Add(' '); lst.Add('  
 
'); lst.Add('
'); lst.Add('
'); lst.Add('
'); lst.SetText(PChar(lst.Text+MakePageFooter)); Result := lst.Text; Finally lst.Free; End; Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; end; //
Unit Description UnitIndex Master Index
Function DeleteItemsFromList(InputList : String): String;
Var
  ProcName  : String;
  lstSource : TStringList;
  lstDelete : TStringList;
  lstOut    : TStringList;
  inCounter : Integer;
Begin
  ProcName := 'DeleteItemsFromList';
  If Trim(ListOfItemsToDelete) = '' Then
  Begin
    Result := InputList;
    Exit;
  End;
  If Trim(ListOfOnlyDisplayItems) <> '' Then
  Begin
    Result := InputList;
    Exit;
  End;
  Try
    lstSource := TStringList.Create();
    lstDelete := TStringList.Create();
    lstOut    := TStringList.Create();
    Try
      lstSource.SetText(PChar(InputList));
      lstDelete.SetText(PChar(ListOfItemsToDelete));
      lstOut.Clear;
      For inCounter := 0 To lstSource.Count -1 Do
      Begin
        If lstDelete.IndexOf(lstSource[inCounter]) < 0 Then
        Begin
          lstOut.Add(lstSource[inCounter]);
        End;
      End;
      Result := lstOut.Text;
    Finally
      lstSource.Free;
      lstDelete.Free;
      lstOut   .Free;
    End;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function ShouldIGenList(var lst : TStringList): Boolean;
Var
  ProcName  : String;
Begin
  ProcName := 'ShouldIGenList';
  Try
    lst.Clear;
    If Trim(ListOfOnlyDisplayItems) <> '' Then
    Begin
      lst.SetText(PChar(ListOfOnlyDisplayItems));
      Result := False;
    End
    Else
    Begin
      Result := True;
    End;
  Except
    On E : Exception Do
    Begin
      Result := True;
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function AdvDelphiSysComment: String;
Var
  Page      : TStringList;
  ProcName : String;
Begin
  ProcName := 'AdvDelphiSysComment';
  Try
    Page := TStringList.Create();
    Try
      Page.Clear;
      Page.Add('');
      Result := Page.Text;
    Finally
      Page.Free;
    End;
  Except
    On E : Exception Do
    Begin
      Result := '';
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeFieldNamesPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Button      : String;
  Values      : String;
  FieldValues : String
  ): String;
var
  ChangeVisibility : Boolean;
  DBName           : TWebServerDB;
  inCounter        : Integer;
  inVisNum         : Integer;
  inOrder          : Integer;
  lstValues        : TStringList;
  Page             : TStringList;
  ProcName         : String;
  sgVisValue       : String;
  sgCallingApp     : String;
  sgEndTag         : String;
  sgLineFeedTag    : String;
  sgReturnTag      : String;
  sgStartTag       : String;
  Table            : TTable;
  FC               : TFieldClass;
begin
  ProcName  := 'MakeFieldNamesPage';
  Try
    sgEndTag         := #201;
    sgLineFeedTag    := #203;
    sgReturnTag      := #202;
    sgStartTag       := #200;
    BufferSize       := EncryptString(DeEncryptString(Trim(BufferSize)));
    ChangeVisibility := False;
    DatabaseName     := DeEncryptString(EncryptString(Trim(DatabaseName)));
    DBName           := TWebServerDB.Create(nil);
    FC               := TFieldClass.Create(nil);
    inVisNum         := -1;
    LoadBalance      := EncryptString(DeEncryptString(Trim(LoadBalance)));
    lstValues        := TStringList.Create();
    Page             := TStringList.Create();
    Table            := TTable.Create(nil);
    TableName        := DeEncryptString(EncryptString(Trim(TableName)));
    Try
      lstValues.SetText(PChar(Values));
      sgCallingApp := lstValues.Values['CallingApp'];

      If sgCallingApp = ExecutableName Then
      Begin
        ChangeVisibility := True;
        Try
          inVisNum := StrToInt(Button);
        Except
          ChangeVisibility := False;
          inVisNum := -1;
        End;
      End;
      FC.FieldValues := FieldValues;
      If Not FC.Populated Then
      Begin
        FC.DatabaseName := DatabaseName;
        FC.TableName    := TableName;
      End;

      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); For inCounter := 0 To FC.FieldNames.Count - 1 Do Begin inOrder := FC.FieldOrder.IndexOf(IntToStr(inCounter)); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); End; FieldValues := FC.FieldValues; Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Field Visibility'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Field Name'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('Visible'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('Change'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(FC.FieldNames[inOrder]); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); sgVisValue := FC.FieldVisible[inOrder]; If sgVisValue = '' Then sgVisValue := 'Y'; If ChangeVisibility = True Then Begin If inVisNum = (inCounter + 1) Then Begin If sgVisValue = 'Y' Then sgVisValue := 'N' Else sgVisValue := 'Y'; FC.FieldVisible[inOrder] := sgVisValue; End; End; Page.Add(sgVisValue); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Page.SaveToFile(ExecutableName+'.txt'); Finally DBName .Free; lstValues .Free; Page .Free; Table .Free; FC .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //Unit Description UnitIndex Master Index
Function MakeOptionsPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Button      : String;
  Values      : String;
  FieldValues : String
  ): String;
var
  lstValues        : TStringList;
  Page             : TStringList;
  ProcName         : String;
  sgCallingApp     : String;
  FC               : TFieldClass;
begin
  ProcName  := 'MakeOptionsPage';
  Try
    BufferSize       := EncryptString(DeEncryptString(Trim(BufferSize)));
    DatabaseName     := DeEncryptString(EncryptString(Trim(DatabaseName)));
    LoadBalance      := EncryptString(DeEncryptString(Trim(LoadBalance)));
    lstValues        := TStringList.Create();
    Page             := TStringList.Create();
    FC               := TFieldClass.Create(nil);
    TableName        := DeEncryptString(EncryptString(Trim(TableName)));
    Try
      lstValues.SetText(PChar(Values));
      sgCallingApp := lstValues.Values['CallingApp'];

      If FieldValues = '' Then
      Begin
        FieldValues :=
          FieldsInit(
            DatabaseName,//DatabaseName: String;
            TableName   ,//TableName   : String;
            LoadBalance ,//LoadBalance : String;
            BufferSize  ,//BufferSize  : String;
            ''           //Role        : String;
            );           //): String;
      End;

      FC.FieldValues := FieldValues;
      If Not FC.Populated Then
      Begin
        FC.Role         := '';
        FC.LoadBalance  := LoadBalance;
        FC.BufferSize   := BufferSize;
        FC.DatabaseName := DatabaseName;
        FC.TableName    := TableName;
      End;

      Page.SetText(PChar(PageHeader));

      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('');
      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Options'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Finished'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.Add('
'); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Page.SaveToFile(ExecutableName+'.txt'); Finally FC .Free; lstValues .Free; Page .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //
Unit Description UnitIndex Master Index
Function CleanUnEncryptedField(
  Request: TWebRequest;
  Field  : String
  ): String;
Var
  ProcName : String;
  sg       : String;
Begin
  ProcName := 'CleanField';
  Try
    Field := Trim(Field);
    If Field = '' Then
    Begin
      Result := '';
      Exit;
    End;
    If Request.MethodType = mtPost Then
    Begin
      sg := Request.ContentFields.Values[Field];
    End
    Else
    Begin
      sg := Request.QueryFields.Values[Field];
    End;
    sg := Trim(sg);
    If sg = '' Then
    Begin
      Result := '';
      Exit;
    End;
    sg := EncryptString(sg);
    sg := DeEncryptString(sg);
    Result := Trim(sg);
  Except
    On E : Exception Do
    Begin
      Result := '';
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function DeEncryptAndCleanField(
  Request: TWebRequest;
  Field  : String
  ): String;
Var
  ProcName : String;
  sg       : String;
Begin
  ProcName := 'DeEncryptAndCleanField';
  Try
    Field := Trim(Field);
    If Field = '' Then
    Begin
      Result := '';
      Exit;
    End;
    If Request.MethodType = mtPost Then
    Begin
      sg := Request.ContentFields.Values[Field];
    End
    Else
    Begin
      sg := Request.QueryFields.Values[Field];
    End;
    sg := Trim(sg);
    If sg = '' Then
    Begin
      Result := '';
      Exit;
    End;
    sg := DeEncryptString(sg);
    Result := Trim(sg);
  Except
    On E : Exception Do
    Begin
      Result := '';
      ER(ProcName,'all',E);
    End;
  End;
End;

//
Unit Description UnitIndex Master Index
Function CheckLoginDatabase(
  DatabaseName : String;
  TableName    : String;
  LoadBalance  : String;
  BufferSize   : String
  ): Boolean;
Begin
  Result := True;
End;

//
Unit Description UnitIndex Master Index
Function FieldList(
  Request     : TWebRequest;
  FieldPrefix : String
  ): String;
Var
  lst          : TStringList;
  inCounter    : Integer;
  LFieldPrefix : Integer;
  UFieldPrefix : String;
  //sgOn         : String;
  inPos        : Integer;
  FieldName    : String;
  FieldValue   : String;
  ContentField : String;
Begin
  lst := TStringList.Create();
  Try
    lst.Clear;
    LFieldPrefix := Length(FieldPrefix);
    UFieldPrefix := UpperCase(FieldPrefix);
    For inCounter := 0 To Request.ContentFields.Count - 1 Do
    Begin
      ContentField := Request.ContentFields[inCounter];
      If UpperCase(Copy(ContentField,1,LFieldPrefix)) = UFieldPrefix Then
      Begin
        inPos := Pos('=',ContentField);
        If inPos > 0 Then
        Begin
          FieldName  := Copy(ContentField,LFieldPrefix+1,inPos-1-LFieldPrefix);
          FieldValue := UpperCase(Trim(Copy(ContentField,inPos+1,255)));
          If FieldValue = 'ON' Then lst.Add(FieldName);
        End;
      End;
    End;
    Result := lst.Text;
  Finally
    lst.Free;
  End;
End;

//
Unit Description UnitIndex Master Index
Function MakeBrowserPage(
  ActionURL   : String;
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Role        : String;
  RecNo       : String;
  RecMax      : String;
  FieldList   : String;
  NavButton   : String
  ): String;
var
  FieldNames: TStringList;
  inCounter : Integer;
  ProcName  : String;
  Page      : TStringList;
  DBName    : TWebServerDB;
  Table     : TTable;
  FieldHtml : TStringList;
begin
  ProcName  := 'MakeBrowserPage';
  Try
    DatabaseName := DeEncryptString(EncryptString(Trim(DatabaseName)));
    TableName    := DeEncryptString(EncryptString(Trim(TableName)));
    LoadBalance  := EncryptString(DeEncryptString(Trim(LoadBalance)));
    BufferSize   := EncryptString(DeEncryptString(Trim(BufferSize)));

    Page         := TStringList.Create();
    FieldNames   := TStringList.Create();
    FieldHtml    := TStringList.Create();
    DBName       := TWebServerDB.Create(nil);
    Table        := TTable.Create(nil);
    Try
      FieldNames.SetText(PChar(FieldList));
      FieldHtml.Clear;
      For inCounter := 0 To FieldNames.Count - 1 Do
      Begin
        FieldHtml.Add('');
      End;



      If ShouldIGenList(FieldNames) Then
      Begin
        DBName.Connected      := False;
        DBName.LoginPrompt    := False;
        DBName.DatabaseName   := 'DBName';
        DBName.AliasName      := DatabaseName;
        DBName.KeepConnection := True;
        DBName.Params.Clear;
        DBName.Params.Add('USER NAME='+DeEncryptString(LoadBalance));
        DBName.Params.Add('PASSWORD='+DeEncryptString(BufferSize));
        Table.Active          := False;
        Table.DatabaseName    := 'DBName';
        Table.TableName       := TableName;
        Try
          DBName.Connected := True;
        Except
          On E : Exception Do
          Begin
            Result :=
            //  ''+#13+
            //  ''+#13+
            //  ''+#13+
            //  ''+#13+
            //  ''+#13+
            ER(ProcName,'all',E);
            Exit;
          End;
        End;

        FieldNames.Sorted := False;
        With Table Do
        Begin
          Active := False;
          FieldDefs.Update;
          FieldNames.Clear;
          For inCounter := 0 To FieldDefs.Count - 1 Do
          Begin
            FieldNames.Add(FieldDefs[inCounter].DisplayName);
          End;
        end;
        FieldNames.SetText(PChar(DeleteItemsFromList(FieldNames.Text)));
      End;
      Page.SetText(PChar(PageHeader));





      Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); If RecMax <> '' Then Begin Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add(''); Page.Add(''); For inCounter := 0 To FieldNames.Count - 1 Do Begin Page.Add(''); Page.Add(''); Page.Add(''); End; Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('DB: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(DatabaseName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('TABLE: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add(TableName); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('REC #: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'+RecNo+'
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('RECORDS: '); Page.Add(''); Page.Add(''); Page.Add(''); Page.Add('
'+RecMax+'
'); Page.Add('
'); Page.Add('
'); Page.Add(''); Page.Add('Record Data'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add(''+FieldNames[inCounter]); Page.Add(''); Page.Add('
'); Page.Add(''); Page.Add('Back to Top'); Page.Add(''); Page.Add('
'); Page.Add(''); Page.SetText(PChar(Page.Text+ MakePageFooter)); Result := Page.Text; Page.SaveToFile(ExecutableName+'.txt'); Finally Page .Free; FieldNames.Free; Table .Free; DBName .Free; End Except On E : Exception Do Begin Result := ER(ProcName,'all',E); End; End; End; //Unit Description UnitIndex Master Index
Function FieldTypeToStr(FieldType : TFieldType): String;
Begin
  Result := 'Unknown';
  If FieldType = ftUnknown     Then Begin Result := 'Unknown';     Exit; End;
  If FieldType = ftString      Then Begin Result := 'String';      Exit; End;
  If FieldType = ftSmallint    Then Begin Result := 'Smallint';    Exit; End;
  If FieldType = ftInteger     Then Begin Result := 'Integer';     Exit; End;
  If FieldType = ftWord        Then Begin Result := 'Word';        Exit; End;
  If FieldType = ftBoolean     Then Begin Result := 'Boolean';     Exit; End;
  If FieldType = ftFloat       Then Begin Result := 'Float';       Exit; End;
  If FieldType = ftCurrency    Then Begin Result := 'Currency';    Exit; End;
  If FieldType = ftBCD         Then Begin Result := 'BCD';         Exit; End;
  If FieldType = ftDate        Then Begin Result := 'Date';        Exit; End;
  If FieldType = ftTime        Then Begin Result := 'Time';        Exit; End;
  If FieldType = ftDateTime    Then Begin Result := 'DateTime';    Exit; End;
  If FieldType = ftBytes       Then Begin Result := 'Bytes';       Exit; End;
  If FieldType = ftVarBytes    Then Begin Result := 'VarBytes';    Exit; End;
  If FieldType = ftAutoInc     Then Begin Result := 'AutoInc';     Exit; End;
  If FieldType = ftBlob        Then Begin Result := 'Blob';        Exit; End;
  If FieldType = ftMemo        Then Begin Result := 'Memo';        Exit; End;
  If FieldType = ftGraphic     Then Begin Result := 'Graphic';     Exit; End;
  If FieldType = ftFmtMemo     Then Begin Result := 'FmtMemo';     Exit; End;
  If FieldType = ftParadoxOle  Then Begin Result := 'ParadoxOle';  Exit; End;
  If FieldType = ftDBaseOle    Then Begin Result := 'DBaseOle';    Exit; End;
  If FieldType = ftTypedBinary Then Begin Result := 'TypedBinary'; Exit; End;
  If FieldType = ftCursor      Then Begin Result := 'Cursor';      Exit; End;
  If FieldType = ftFixedChar   Then Begin Result := 'FixedChar';   Exit; End;
  If FieldType = ftWideString  Then Begin Result := 'WideString';  Exit; End;
  If FieldType = ftLargeInt    Then Begin Result := 'LargeInt';    Exit; End;
  If FieldType = ftADT         Then Begin Result := 'ADT';         Exit; End;
  If FieldType = ftArray       Then Begin Result := 'Array';       Exit; End;
  If FieldType = ftReference   Then Begin Result := 'Reference';   Exit; End;
  If FieldType = ftDataSet     Then Begin Result := 'DataSet';     Exit; End;
End;

//
Unit Description UnitIndex Master Index
Function StrToFieldType(FieldType : String): TFieldType;
Begin
  Result      := ftUnknown;
  If FieldType = 'Unknown'     Then Begin Result := ftUnknown;     Exit; End;
  If FieldType = 'String'      Then Begin Result := ftString;      Exit; End;
  If FieldType = 'Smallint'    Then Begin Result := ftSmallint;    Exit; End;
  If FieldType = 'Integer'     Then Begin Result := ftInteger;     Exit; End;
  If FieldType = 'Word'        Then Begin Result := ftWord;        Exit; End;
  If FieldType = 'Boolean'     Then Begin Result := ftBoolean;     Exit; End;
  If FieldType = 'Float'       Then Begin Result := ftFloat;       Exit; End;
  If FieldType = 'Currency'    Then Begin Result := ftCurrency;    Exit; End;
  If FieldType = 'BCD'         Then Begin Result := ftBCD;         Exit; End;
  If FieldType = 'Date'        Then Begin Result := ftDate;        Exit; End;
  If FieldType = 'Time'        Then Begin Result := ftTime;        Exit; End;
  If FieldType = 'DateTime'    Then Begin Result := ftDateTime;    Exit; End;
  If FieldType = 'Bytes'       Then Begin Result := ftBytes;       Exit; End;
  If FieldType = 'VarBytes'    Then Begin Result := ftVarBytes;    Exit; End;
  If FieldType = 'AutoInc'     Then Begin Result := ftAutoInc;     Exit; End;
  If FieldType = 'Blob'        Then Begin Result := ftBlob;        Exit; End;
  If FieldType = 'Memo'        Then Begin Result := ftMemo;        Exit; End;
  If FieldType = 'Graphic'     Then Begin Result := ftGraphic;     Exit; End;
  If FieldType = 'FmtMemo'     Then Begin Result := ftFmtMemo;     Exit; End;
  If FieldType = 'ParadoxOle'  Then Begin Result := ftParadoxOle;  Exit; End;
  If FieldType = 'DBaseOle'    Then Begin Result := ftDBaseOle;    Exit; End;
  If FieldType = 'TypedBinary' Then Begin Result := ftTypedBinary; Exit; End;
  If FieldType = 'Cursor'      Then Begin Result := ftCursor;      Exit; End;
  If FieldType = 'FixedChar'   Then Begin Result := ftFixedChar;   Exit; End;
  If FieldType = 'WideString'  Then Begin Result := ftWideString;  Exit; End;
  If FieldType = 'LargeInt'    Then Begin Result := ftLargeInt;    Exit; End;
  If FieldType = 'ADT'         Then Begin Result := ftADT;         Exit; End;
  If FieldType = 'Array'       Then Begin Result := ftArray;       Exit; End;
  If FieldType = 'Reference'   Then Begin Result := ftReference;   Exit; End;
  If FieldType = 'DataSet'     Then Begin Result := ftDataSet;     Exit; End;
End;

//
Unit Description UnitIndex Master Index
Function FieldValuesStrToLst(
  Var lst     : TStringList;
  FieldValues : String;
  ListName    : String): Boolean;
Var
  inLenEnd     : Integer;
  inPosEnd     : Integer;
  inPosStart   : Integer;
  sgEndTag     : String;
  sgEndTagAll  : String;
  sgReturnTag  : String;
  sgLineFeedTag: String;
  sgStartTag   : String;
  sgStartTagAll: String;
  sgTemp       : String;
Begin
  Result := False;
  lst.Clear;
  sgEndTag     := #201;
  sgReturnTag  := #202;
  sgLineFeedTag:= #203;
  sgStartTag   := #200;
  ListName     := UpperCase(ListName);
  sgStartTagAll:= sgStartTag+ListName+sgStartTag;
  sgEndTagAll  := sgEndTag+ListName+sgEndTag;
  inLenEnd     := Length(sgEndTagAll);
  inPosStart   := Pos(sgStartTagAll,FieldValues);
  If inPosStart = 0 Then Exit;
  inPosEnd     := Pos(sgEndTagAll,FieldValues);
  If inPosEnd   = 0 Then Exit;
  If inPosEnd  <= inPosStart Then Exit;
  sgTemp       := Copy(FieldValues,inPosStart,inPosEnd + inLenEnd -inPosStart);
  sgTemp       := AdjustLineBreaks(sgTemp);
  sgTemp       := StringReplace(sgTemp,sgReturnTag,  #13,[rfReplaceAll]);
  sgTemp       := StringReplace(sgTemp,sgLineFeedTag,#10,[rfReplaceAll]);
  lst.SetText(PChar(sgTemp));
  lst.Delete(lst.Count-1);
  If lst.Count >= 1 Then lst.Delete(0);
  Result := True;;
End;

//
Unit Description UnitIndex Master Index
Function FieldsUpdate(
  FieldDisplay : TStringList;
  FieldMax     : TStringList;
  FieldMin     : TStringList;
  FieldNames   : TStringList;
  FieldNumber  : TStringList;
  FieldOrder   : TStringList;
  FieldSize    : TStringList;
  FieldType    : TStringList;
  FieldVisible : TStringList;
  TableData    : TStringList;
  SaveToFile   : Boolean
  ): String;
Var
  ProcName     : String;
  sgEndTag     : String;
  sgLineFeedTag: String;
  sgReturnTag  : String;
  sgStartTag   : String;
  sgLst        : String;
  sgLabel      : String;
  lst          : TStringList;
  lstTemp      : TStringList;
Begin
  ProcName     := 'FieldsUpdate';
  sgEndTag     := #201;
  sgLineFeedTag:= #203;
  sgReturnTag  := #202;
  sgStartTag   := #200;
  sgLst        := '';

  lst := TStringList.Create();
  Try
    lstTemp := FieldDisplay;
    sgLabel := 'FIELDDISPLAY';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := FieldMax;
    sgLabel := 'FIELDMAX';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldMin;
    sgLabel := 'FIELDMIN';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldNames;
    sgLabel := 'FIELDNAMES';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldNumber;
    sgLabel := 'FIELDNUMBER';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
 
    lstTemp := FieldOrder;
    sgLabel := 'FIELDORDER';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := FieldSize;
    sgLabel := 'FIELDSIZE';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := FieldType;
    sgLabel := 'FIELDTYPE';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;

    lstTemp := FieldVisible;
    sgLabel := 'FIELDVISIBLE';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    lstTemp := TableData;
    sgLabel := 'TABLEDATA';
    lst.Clear;
    If FieldDisplay <> nil Then
    Begin
      lst.SetText(PChar(lstTemp.Text));
      If SaveToFile Then lst.SaveToFile(sgLabel+'.txt');
      lst.Insert(0,sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End
    Else
    Begin
      lst.Add(sgStartTag+sgLabel+sgStartTag);
      lst.Add(sgEndTag+sgLabel+sgEndTag);
    End;
    sgLst := sgLst + lst.Text;
  
    Result := StringReplace(sgLst, #13,sgReturnTag,  [rfReplaceAll]);
    Result := StringReplace(Result,#10,sgLineFeedTag,[rfReplaceAll]);
  Finally
    lst.Free;
  End;
End;

//
Unit Description UnitIndex Master Index
Function FieldsInit(
  DatabaseName: String;
  TableName   : String;
  LoadBalance : String;
  BufferSize  : String;
  Role        : String
  ): String;
Var
  DBName       : TDatabase;
  FieldDisplay : TStringList;
  FieldMax     : TStringList;
  FieldMin     : TStringList;
  FieldNames   : TStringList;
  FieldNumber  : TStringList;
  FieldOrder   : TStringList;
  FieldSize    : TStringList;
  FieldType    : TStringList;
  FieldVisible : TStringList;
  inCounter    : Integer;
  inDelete     : Integer;
  lst          : TStringList;
  ProcName     : String;
  sgEndTag     : String;
  sgLineFeedTag: String;
  sgReturnTag  : String;
  sgStartTag   : String;
  Table        : TTable;
  TableData    : TStringList;
Begin
  ProcName     := 'FieldInit';
  DBName       := TDatabase  .Create(nil);
  FieldDisplay := TStringList.Create();
  FieldMax     := TStringList.Create();
  FieldMin     := TStringList.Create();
  FieldNames   := TStringList.Create();
  FieldNumber  := TStringList.Create();
  FieldOrder   := TStringList.Create();
  FieldSize    := TStringList.Create();
  FieldType    := TStringList.Create();
  FieldVisible := TStringList.Create();
  lst          := TStringList.Create();
  Table        := TTable.Create(nil);
  sgEndTag     := #201;
  sgLineFeedTag:= #203;
  sgReturnTag  := #202;
  sgStartTag   := #200;
  TableData    := TStringList.Create();
 
  Try
    DBName.Connected      := False;
    DBName.LoginPrompt    := False;
    DBName.DatabaseName   := 'DBName';
    DBName.AliasName      := DatabaseName;
    DBName.KeepConnection := True;
    DBName.Params.Clear;
    DBName.Params.Add('USER NAME='+DeEncryptString(LoadBalance));
    DBName.Params.Add('PASSWORD='+DeEncryptString(BufferSize));
    Table.Active          := False;
    Table.DatabaseName    := 'DBName';
    Table.TableName       := TableName;
    Try
      DBName.Connected := True;
    Except
      On E : Exception Do
      Begin
        Result :=
        ER(ProcName,'all',E);
        Exit;
      End;
    End;

    FieldDisplay .Clear;
    FieldMax     .Clear;
    FieldMin     .Clear;
    FieldNames   .Clear;
    FieldNumber  .Clear;
    FieldOrder   .Clear;
    FieldSize    .Clear;
    FieldType    .Clear;
    FieldVisible .Clear;
    TableData    .Clear;
    FieldDisplay .Sorted := False;
    FieldMax     .Sorted := False;
    FieldMin     .Sorted := False;
    FieldNames   .Sorted := False;
    FieldNumber  .Sorted := False;
    FieldOrder   .Sorted := False;
    FieldSize    .Sorted := False;
    FieldType    .Sorted := False;
    FieldVisible .Sorted := False;
    TableData    .Sorted := False;

    FieldDisplay .Add(sgStartTag+'FIELDDISPLAY'+sgStartTag);
    FieldMax     .Add(sgStartTag+'FIELDMAX'    +sgStartTag);
    FieldMin     .Add(sgStartTag+'FIELDMIN'    +sgStartTag);
    FieldNames   .Add(sgStartTag+'FIELDNAMES'  +sgStartTag);
    FieldNumber  .Add(sgStartTag+'FIELDNUMBER' +sgStartTag);
    FieldOrder   .Add(sgStartTag+'FIELDORDER'  +sgStartTag);
    FieldSize    .Add(sgStartTag+'FIELDSIZE'   +sgStartTag);
    FieldType    .Add(sgStartTag+'FIELDTYPE'   +sgStartTag);
    FieldVisible .Add(sgStartTag+'FIELDVISIBLE'+sgStartTag);
    TableData    .Add(sgStartTag+'TABLEDATA'   +sgStartTag);

    With Table Do
    Begin
      Active      := False;
      FieldDefs   .Update;

      For inCounter := 0 To FieldDefs.Count - 1 Do
      Begin
        FieldDisplay .Add(FieldDefs[inCounter].DisplayName);
        FieldMax     .Add(' ');
        FieldMin     .Add(' ');
        FieldNames   .Add(FieldDefs[inCounter].Name);
        FieldNumber  .Add(IntToStr(inCounter));
        FieldOrder   .Add(IntToStr(inCounter));
        FieldSize    .Add(IntToStr(FieldDefs[inCounter].Size));
        FieldType    .Add(FieldTypeToStr(FieldDefs[inCounter].DataType));
        FieldVisible .Add('Y');
      End;
    End;
    TableData.Add('DATABASENAME='+DatabaseName);
    TableData.Add('TABLENAME='+TableName);
    TableData.Add('LOADBALANCE='+LoadBalance);
    TableData.Add('BUFFERSIZE='+BufferSize);
    TableData.Add('ROLE='+Role);
    lst.Clear;
    lst.SetText(PChar(ListOfItemsToDelete));
    For inCounter := 0 To lst.Count - 1 Do
    Begin
      inDelete := FieldNames.IndexOf(lst[inCounter]);
      If inDelete <> -1 Then
      Begin
        FieldVisible[inDelete] := 'N';
      End;
    End;

    FieldDisplay .Add(sgEndTag+'FIELDDISPLAY'+sgEndTag);
    FieldMax     .Add(sgEndTag+'FIELDMAX'    +sgEndTag);
    FieldMin     .Add(sgEndTag+'FIELDMIN'    +sgEndTag);
    FieldNames   .Add(sgEndTag+'FIELDNAMES'  +sgEndTag);
    FieldNumber  .Add(sgEndTag+'FIELDNUMBER' +sgEndTag);
    FieldOrder   .Add(sgEndTag+'FIELDORDER'  +sgEndTag);
    FieldSize    .Add(sgEndTag+'FIELDSIZE'   +sgEndTag);
    FieldType    .Add(sgEndTag+'FIELDTYPE'   +sgEndTag);
    FieldVisible .Add(sgEndTag+'FIELDVISIBLE'+sgEndTag);
    TableData    .Add(sgEndTag+'TABLEDATA'   +sgEndTag);

    Result :=
      FieldDisplay .Text +
      FieldMax     .Text +
      FieldMin     .Text +
      FieldNames   .Text +
      FieldNumber  .Text +
      FieldOrder   .Text +
      FieldSize    .Text +
      FieldType    .Text +
      FieldVisible .Text +
      TableData    .Text;
    Result := StringReplace(Result,#13,sgReturnTag,  [rfReplaceAll]);
    Result := StringReplace(Result,#10,sgLineFeedTag,[rfReplaceAll]);
  Finally
    DBName       .Free;
    FieldDisplay .Free;
    FieldMax     .Free;
    FieldMin     .Free;
    FieldNames   .Free;
    FieldNumber  .Free;
    FieldOrder   .Free;
    FieldSize    .Free;
    FieldType    .Free;
    FieldVisible .Free;
    lst          .Free;
    Table        .Free;
    TableData    .Free;
  End;
End;

//
Unit Description UnitIndex Master Index
Function Counter: String;
Var
  FileName  : String;
  lst       : TStringList;
  sgCount   : String;
  inCount   : Integer;
Begin
  lst := TStringList.Create();
  Try
    Try
      lst.Clear;
      FileName := ExecutableName;
      FileName := Copy(FileName,1,Length(ExecutableName)-3)+'cnt';
      FileName := ExecutablePath + FileName;
      sgCount  := '0';
      If FileExists(FileName) Then
      Begin
        lst.LoadFromFile(FileName);
        If lst.Count >= 1 Then
        Begin
          sgCount := lst[0];
        End;
      End;
      inCount := StrToInt(sgCount);
      inCount := inCount + 1;
      sgCount := IntToStr(inCount);
      sgCount := StringPad(sgCount,'0',8,False);
      Result := sgCount;
      Try
        lst.Clear;
        lst.Add(intToStr(inCount));
        lst.SaveToFile(FileName);
      Except
      End;
    Except
      sgCount := StringPad(sgCount,'0',8,False);
      Result := sgCount;
    End;
  Finally
    lst.Free;
  End;
End;

//
Unit Description UnitIndex Master Index
Function PublishDebugData(PageStr: String; Values: TWebRequest): String;
Var
  ErrorLocation : String;
  ProcName      : String;
Begin
  ProcName := 'PublishDebugData';
  Try
    ErrorLocation := 'Top';
    If UpperCase(Copy(DebugDataPublish,1,1)) = 'T' Then
    Begin
      ErrorLocation := '1';
      PageStr :=
        ReplaceStringInString(
          PageStr,                        //SourceString : String;
          '',           //OldString    : String;
          GetRequestInfo(TWebRequest(Values),False)    //NewString    : String
          );                              //): String;
    End
    Else
    Begin
      ErrorLocation := '2';
      PageStr :=
        ReplaceStringInString(
          PageStr,                        //SourceString : String;
          '',           //OldString    : String;
          ''                              //NewString    : String
          );                              //): String;
    End;
    ErrorLocation := 'Bottom';
    Result := PageStr;
  Except
    On E : Exception Do
    Begin
      Result := ER(ProcName,ErrorLocation,E);
    End;
  End;

End;

//
Unit Description UnitIndex Master Index
Function MinMaxStrFieldTypes(FieldType : String): Boolean;
Begin
  FieldType   := UpperCase(FieldType);
  Result      := False;
  If FieldType = 'UNKNOWN'     Then Begin Result := False;         Exit; End;
  If FieldType = 'STRING'      Then Begin Result := False;         Exit; End;
  If FieldType = 'SMALLINT'    Then Begin Result := True;          Exit; End;
  If FieldType = 'INTEGER'     Then Begin Result := True;          Exit; End;
  If FieldType = 'WORD'        Then Begin Result := False;         Exit; End;
  If FieldType = 'BOOLEAN'     Then Begin Result := False;         Exit; End;
  If FieldType = 'FLOAT'       Then Begin Result := True;          Exit; End;
  If FieldType = 'CURRENCY'    Then Begin Result := True;          Exit; End;
  If FieldType = 'BCD'         Then Begin Result := False;         Exit; End;
  If FieldType = 'DATE'        Then Begin Result := True;          Exit; End;
  If FieldType = 'TIME'        Then Begin Result := True;          Exit; End;
  If FieldType = 'DATETIME'    Then Begin Result := True;          Exit; End;
  If FieldType = 'BYTES'       Then Begin Result := False;         Exit; End;
  If FieldType = 'VARBYTES'    Then Begin Result := False;         Exit; End;
  If FieldType = 'AUTOINC'     Then Begin Result := False;         Exit; End;
  If FieldType = 'BLOB'        Then Begin Result := False;         Exit; End;
  If FieldType = 'MEMO'        Then Begin Result := False;         Exit; End;
  If FieldType = 'GRAPHIC'     Then Begin Result := False;         Exit; End;
  If FieldType = 'FMTMEMO'     Then Begin Result := False;         Exit; End;
  If FieldType = 'PARADOXOLE'  Then Begin Result := False;         Exit; End;
  If FieldType = 'DBASEOLE'    Then Begin Result := False;         Exit; End;
  If FieldType = 'TYPEDBINARY' Then Begin Result := False;         Exit; End;
  If FieldType = 'CURSOR'      Then Begin Result := False;         Exit; End;
  If FieldType = 'FIXEDCHAR'   Then Begin Result := False;         Exit; End;
  If FieldType = 'WIDESTRING'  Then Begin Result := False;         Exit; End;
  If FieldType = 'LARGEINT'    Then Begin Result := True;          Exit; End;
  If FieldType = 'ADT'         Then Begin Result := False;         Exit; End;
  If FieldType = 'ARRAY'       Then Begin Result := False;         Exit; End;
  If FieldType = 'REFERENCE'   Then Begin Result := False;         Exit; End;
  If FieldType = 'DATASET'     Then Begin Result := False;         Exit; End;
End;

Initialization
  Begin


    DBLoadDatabaseName        := 'FALSE';
    DBLoadFieldValues         := 'FALSE';
    DBLoadRole                := 'FALSE';
    DBLoadTableName           := 'FALSE';
    DBSaveDatabaseName        := 'FALSE';
    DBSaveFieldValues         := 'FALSE';
    DBSaveRole                := 'FALSE';
    DBSaveTableName           := 'FALSE';
    DBValueDatabaseName       := '';
    DBValueFieldValues        := '';
    DBValueRole               := '';
    DBValueTableName          := '';
    DebugDataPublish          := 'TRUE';
    FileListDelete            := '';
    FileListOfOnlyItems       := '';
    FileMetaDataDescription   := '';
    FileMetaDataKeywords      := '';
    HTMLHideSource            := 'TRUE';
    HTMLHideString            := #13;
    HTMLMetaDataAuthor        := 'Richard Maley';
    HTMLMetaDataDesc          := '';
    HTMLMetaDataTitle         := 'Advanced Delphi Systems Web Server';
    HTMLPageFooter            := '';
    HTMLPageHeader            := '';
    HTMLTable2CellPadding     := '7';
    HTMLTable2CellSpacing     := '1';
    HTMLTable2ColorBackGrd    := '#000080';
    HTMLTable2ColorBorder     := '#000080';
    HTMLTable2ColorFont       := '#F0FFF0';
    HTMLTable2FontSize        := '2';
    HTMLTable3CellPadding     := '7';
    HTMLTable3CellSpacing     := '1';
    HTMLTable3ColorBackGrd    := '#87CEFA';
    HTMLTable3ColorBorder     := '#000080';
    HTMLTable3ColorFont       := '#000080';
    HTMLTable3FontSize        := '2';
    HTMLTableCellPadding      := '7';
    HTMLTableCellSpacing      := '1';
    HTMLTableColorBackGrd     := '#6A5ACD';
    HTMLTableColorBorder      := '#8B0000';
    HTMLTableColorFont        := '#FFFFFF';
    HTMLTableFontSize         := '4';
    HTMLTitleMain             := '';
    HTMLTitleMainColor        := '#ff0000';
    HTMLTitleMainSize         := '10';
    HTMLTitleSub              := '';
    HTMLTitleSubColor         := '#ff0000';
    HTMLTitleSubSize          := '5';
    ListOfItemsToDelete       := '';
    ListOfOnlyDisplayItems    := '';
    MeterCounterBold          := 'TRUE';
    MeterCounterColorBackGrd  := '#00008B';
    MeterCounterColorBorder   := '#00FFFF';
    MeterCounterColorFont     := '#00FFFF';
    MeterCounterFontSize      := '2';
    MeterCounterItalics       := 'TRUE';
    MeterCounterShow          := 'TRUE';
    MeterDateBold             := 'TRUE';
    MeterDateColorBackGrd     := '#00008B';
    MeterDateColorBorder      := '#00FFFF';
    MeterDateColorFont        := '#00FFFF';
    MeterDateFontSize         := '2';
    MeterDateItalics          := 'TRUE';
    MeterDateShow             := 'TRUE';
    MeterTimeBold             := 'TRUE';
    MeterTimeColorBackGrd     := '#00008B';
    MeterTimeColorBorder      := '#00FFFF';
    MeterTimeColorFont        := '#00FFFF';
    MeterTimeFontSize         := '2';
    MeterTimeItalics          := 'TRUE';
    MeterTimeShow             := 'TRUE';
    URLAction                 := '';
    URLAction2                := '';
    URLAction3                := '';
    URLAction4                := '';
    URLBackground             := '/BACKGR003.JPG';
    URLImageTop               := '/ESA001.GIF';
    URLScriptDir              := '/scripts/';

    DebugDataPublish     := 'TRUE';
    ExecutableName := ExtractFileName(ParamStr(0));
    FileConfiguration     := Copy(ExecutableName,1,Length(ExecutableName)-3)+'cgg';
    ExecutablePath := Trim(ExtractFilePath(ParamStr(0)));
    If ExecutablePath <> '' Then
    Begin
      If Copy(ExecutablePath,Length(ExecutablePath),1) <> '\' Then
        ExecutablePath := ExecutablePath + '\';
    End;
    Errors := TStringList.Create();
    Errors.Clear;
    ConfigParams   := TStringList.Create();
    If FileExists(ExecutablePath+FileConfiguration) Then
    Begin
      ConfigParams.LoadFromFile(ExecutablePath+FileConfiguration);
    End;
    ConfigParamsWas := ConfigParams.Text;
    MakeAccessDenied;

    SyncConfigParams(DBLoadDatabaseName      ,'DBLoadDatabaseName'      );
    SyncConfigParams(DBLoadFieldValues       ,'DBLoadFieldValues'       );
    SyncConfigParams(DBLoadRole              ,'DBLoadRole'              );
    SyncConfigParams(DBLoadTableName         ,'DBLoadTableName'         );
    SyncConfigParams(DBSaveDatabaseName      ,'DBSaveDatabaseName'      );
    SyncConfigParams(DBSaveFieldValues       ,'DBSaveFieldValues'       );
    SyncConfigParams(DBSaveRole              ,'DBSaveRole'              );
    SyncConfigParams(DBSaveTableName         ,'DBSaveTableName'         );
    SyncConfigParams(DBValueDatabaseName     ,'DBValueDatabaseName'     );
    SyncConfigParams(DBValueFieldValues      ,'DBValueFieldValues'      );
    SyncConfigParams(DBValueRole             ,'DBValueRole'             );
    SyncConfigParams(DBValueTableName        ,'DBValueTableName'        );
    SyncConfigParams(DebugDataPublish        ,'DebugDataPublish'        );
    SyncConfigParams(FileHTMLPageFooter      ,'FileHTMLPageFooter'      );
    SyncConfigParams(FileHTMLPageHeader      ,'FileHTMLPageHeader'      );
    SyncConfigParams(FileListDelete          ,'FileListDelete'          );
    SyncConfigParams(FileListOfOnlyItems     ,'FileListOfOnlyItems'     );
    SyncConfigParams(FileMetaDataDescription ,'FileMetaDataDescription' );
    SyncConfigParams(FileMetaDataKeywords    ,'FileMetaDataKeywords'    );
    SyncConfigParams(HTMLHideSource          ,'HTMLHideSource'          );
    SyncConfigParams(HTMLMetaDataAuthor      ,'HTMLMetaDataAuthor'      );
    SyncConfigParams(HTMLMetaDataTitle       ,'HTMLMetaDataTitle'       );
    SyncConfigParams(HTMLTable2CellPadding   ,'HTMLTable2CellPadding'   );
    SyncConfigParams(HTMLTable2CellSpacing   ,'HTMLTable2CellSpacing'   );
    SyncConfigParams(HTMLTable2ColorBackGrd  ,'HTMLTable2ColorBackGrd'  );
    SyncConfigParams(HTMLTable2ColorBorder   ,'HTMLTable2ColorBorder'   );
    SyncConfigParams(HTMLTable2ColorFont     ,'HTMLTable2ColorFont'     );
    SyncConfigParams(HTMLTable2FontSize      ,'HTMLTable2FontSize'      );
    SyncConfigParams(HTMLTable3CellPadding   ,'HTMLTable3CellPadding'   );
    SyncConfigParams(HTMLTable3CellSpacing   ,'HTMLTable3CellSpacing'   );
    SyncConfigParams(HTMLTable3ColorBackGrd  ,'HTMLTable3ColorBackGrd'  );
    SyncConfigParams(HTMLTable3ColorBorder   ,'HTMLTable3ColorBorder'   );
    SyncConfigParams(HTMLTable3ColorFont     ,'HTMLTable3ColorFont'     );
    SyncConfigParams(HTMLTable3FontSize      ,'HTMLTable3FontSize'      );
    SyncConfigParams(HTMLTableCellPadding    ,'HTMLTableCellPadding'    );
    SyncConfigParams(HTMLTableCellSpacing    ,'HTMLTableCellSpacing'    );
    SyncConfigParams(HTMLTableColorBackGrd   ,'HTMLTableColorBackGrd'   );
    SyncConfigParams(HTMLTableColorBorder    ,'HTMLTableColorBorder'    );
    SyncConfigParams(HTMLTableColorFont      ,'HTMLTableColorFont'      );
    SyncConfigParams(HTMLTableFontSize       ,'HTMLTableFontSize'       );
    SyncConfigParams(HTMLTitleMain           ,'HTMLTitleMain'           );
    SyncConfigParams(HTMLTitleMainColor      ,'HTMLTitleMainColor'      );
    SyncConfigParams(HTMLTitleMainSize       ,'HTMLTitleMainSize'       );
    SyncConfigParams(HTMLTitleSub            ,'HTMLTitleSub'            );
    SyncConfigParams(HTMLTitleSubColor       ,'HTMLTitleSubColor'       );
    SyncConfigParams(HTMLTitleSubSize        ,'HTMLTitleSubSize'        );
    SyncConfigParams(MeterCounterBold        ,'MeterCounterBold'        );
    SyncConfigParams(MeterCounterColorBackGrd,'MeterCounterColorBackGrd');
    SyncConfigParams(MeterCounterColorBorder ,'MeterCounterColorBorder' );
    SyncConfigParams(MeterCounterColorFont   ,'MeterCounterColorFont'   );
    SyncConfigParams(MeterCounterFontSize    ,'MeterCounterFontSize'    );
    SyncConfigParams(MeterCounterItalics     ,'MeterCounterItalics'     );
    SyncConfigParams(MeterCounterShow        ,'MeterCounterShow'        );
    SyncConfigParams(MeterDateBold           ,'MeterDateBold'           );
    SyncConfigParams(MeterDateColorBackGrd   ,'MeterDateColorBackGrd'   );
    SyncConfigParams(MeterDateColorBorder    ,'MeterDateColorBorder'    );
    SyncConfigParams(MeterDateColorFont      ,'MeterDateColorFont'      );
    SyncConfigParams(MeterDateFontSize       ,'MeterDateFontSize'       );
    SyncConfigParams(MeterDateItalics        ,'MeterDateItalics'        );
    SyncConfigParams(MeterDateShow           ,'MeterDateShow'           );
    SyncConfigParams(MeterTimeBold           ,'MeterTimeBold'           );
    SyncConfigParams(MeterTimeColorBackGrd   ,'MeterTimeColorBackGrd'   );
    SyncConfigParams(MeterTimeColorBorder    ,'MeterTimeColorBorder'    );
    SyncConfigParams(MeterTimeColorFont      ,'MeterTimeColorFont'      );
    SyncConfigParams(MeterTimeFontSize       ,'MeterTimeFontSize'       );
    SyncConfigParams(MeterTimeItalics        ,'MeterTimeItalics'        );
    SyncConfigParams(MeterTimeShow           ,'MeterTimeShow'           );
    SyncConfigParams(URLAction               ,'URLAction'               );
    SyncConfigParams(URLAction2              ,'URLAction2'              );
    SyncConfigParams(URLAction3              ,'URLAction3'              );
    SyncConfigParams(URLAction4              ,'URLAction4'              );
    SyncConfigParams(URLBackground           ,'URLBackground'           );
    SyncConfigParams(URLImageTop             ,'URLImageTop'             );
    SyncConfigParams(URLScriptDir            ,'URLScriptDir'            );

    sgBoolean :=           DBLoadDatabaseName;
    If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
                           DBValueDatabaseName := '';

    sgBoolean :=           DBLoadFieldValues;
    If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
                           DBValueFieldValues  := '';

    sgBoolean :=           DBLoadRole;
    If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
                           DBValueRole         := '';

    sgBoolean :=           DBLoadTableName;
    If Not (UpperCase(Copy(sgBoolean,1,1))= 'T') Then
                           DBValueTableName    := '';

{T} FileToStr(HTMLMetaDataKeywords          ,FileMetaDataKeywords     );
{T} FileToStr(HTMLMetaDataDesc              ,FileMetaDataDescription  );
{T} FileToStr(ListOfOnlyDisplayItems        ,FileListOfOnlyItems      );
{T} FileToStr(ListOfItemsToDelete           ,FileListDelete           );
{T} FileToStr(HTMLPageHeader                ,FileHTMLPageHeader       );
{T} FileToStr(HTMLPageFooter                ,FileHTMLPageFooter       );

  End;
Finalization
  Begin
    WriteErrors;

    sgBoolean :=           DBSaveDatabaseName;
    If UpperCase(Copy(sgBoolean,1,1))= 'T' Then
      ConfigParams.Values['DBValueDatabaseName'       ] :=
                           DBValueDatabaseName          ;

    sgBoolean :=           DBSaveFieldValues;
    If UpperCase(Copy(sgBoolean,1,1))= 'T' Then
      ConfigParams.Values['DBValueFieldValues'       ] :=
                           DBValueFieldValues          ;

    sgBoolean :=           DBSaveRole;
    If UpperCase(Copy(sgBoolean,1,1))= 'T' Then
      ConfigParams.Values['DBValueRole'       ] :=
                           DBValueRole          ;

    sgBoolean :=           DBSaveTableName;
    If UpperCase(Copy(sgBoolean,1,1))= 'T' Then
      ConfigParams.Values['DBValueTableName'       ] :=
                           DBValueTableName          ;


    If (Not FileExists(ExecutablePath+FileConfiguration))
       Or
       (ConfigParamsWas <> ConfigParams.Text)
    Then
    Begin
      ConfigParams.SaveToFile(ExecutablePath+FileConfiguration);
    End;
    ConfigParams.Free;
  End;
end.
//