{******************************************************************}
{ ConstDef.pas                                                     }
{                                                                  }
{ Author    : A.Nasir Senturk                                      }
{ Home Page : http://www.shenturk.com                              }
{ Email     : shenturk@gmail.com                                   }
{                                                                  }
{ Date      : 28.11.2006                                           }
{ Update    : 27.03.2007                                           }
{                                                                  }
{ Sizden iki şey rica edicem:                                      }
{ 1. Lutfen bu baslik kismini kaldirmayiniz.                       }
{ 2. Mumkunse bagis yapiniz.                                       }
{ *****************************************************************}

unit ConstDef;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses Windows, Messages, SysUtils, IniFiles;

const

  WM_LOGINPAGEDONE = WM_USER + $100;
  WM_SECUREIMGDONE = WM_USER + $101;
  WM_POSTFORMDONE  = WM_USER + $102;
  WM_AGREEMENTDONE = WM_USER + $103;
  WM_GETQUOTADONE  = WM_USER + $104;
  WM_LOGOUTDONE    = WM_USER + $105;
  WM_VERSIONDONE   = WM_USER + $106;

  SC_DRAGMOVE   = $F012;
  CM_RESTORE    = WM_USER + 11;
  WM_INETDONE   = WM_USER + 12;
  WM_IPADDRDONE = WM_USER + 13;
  WM_LOGSTATUS  = WM_USER + 14;

const
  MAX_ITEM = 12;
  
type
  TTableItem = packed record
    Found: Boolean;
    Year: string;
    Month: WideString;
    Upload, Download: Double;
  end;

const
  sErrorText      = 'Hata';
  sWarningText    = 'Uyarı';
  sInfoText       = 'Bilgi';
  sConfirmText    = 'Onay';

  sUserCannotEmpty    = 'Kullanıcı adı boş bırakılamaz! Lütfen geçerli bir kullanıcı adı giriniz.';
  sPassCannotEmpty    = 'Şifre boş bırakılamaz!';
  sRetryCannotEmpty   = 'Şifreyi tekrar girerek onaylamanız gerekmektedir.';
  sPassMismatch       = 'Tekrar girdiğiniz şifre ile ilk girilen şifre aynı değil!';
  sWizardNotCompleted = 'Ey DSL! kurulum sihirbazını tamamlamadınız!'#13#10 +
                        'Kurulum işlemini iptal etmek istediğinizden emin misiniz?';

  sCurrVersion    = '1.00';
  sUpdateMessage  = 'Ey DSL! in %s sürümü çıkmış! İndirmek ister misiniz?';
  sBalloonHintMsg = 'Ey DSL! çalışıyor! Artık kota bilgilerinize ulaşmak çok kolay!'#13#10 +
                    'Hemen ana ekranda farenin sağ tuşuna basın ve Ey DSL!''in'#13#10 +
                    'yeniliklerini keşfedin. Hem dahası da var...';
const
  MyHomePageURL     = 'http://www.shenturk.com/';
  MyHomeHost        = 'www.shenturk.com';
  TTNetHost         = 'adslkota.ttnet.net.tr';
  ShowIPorgURL      = 'www.showip.org';

  DefNameJpeg      = '.\cache\jcaptcha.jpg';
  DefNameMonoJpeg  = '.\cache\jcaptchabw.jpg';
  DefNameTiff      = '.\cache\jcaptcha.tif';
  DefNamePnm       = '.\cache\jcaptcha.pnm';
  DefNameBmp       = '.\cache\jcaptcha.bmp';
  DefNameGocr      = '.\cache\jcaptchag.txt';
  DefNameTxt       = '.\cache\jcaptcha.txt';
  DefNameTess      = '.\cache\jcaptcha';

  DefPostPage      = '.\cache\post.html';
  DefQuotaPage     = '.\cache\quota.html';
  RelQuotaPage     = '\cache\quota.html';

const
  KiloByte = 1024;
  MegaByte = KiloByte * 1024;
  GigaByte = MegaByte * 1024;

const
  DefOpacityMin   = 0;
  DefOpacityMax   = 255;
  DefOpacityStep  = 16;
  DefOpacityWait  = 2;

const
  DefWidth  = 256;
  DefHeight = 256;

  MinuteMs = 60000;
  HourMs   = MinuteMs * 60;

type
  PARGB = ^TARGB;
  TARGB = record
    B, G, R, A: Byte; // Dikkat, Sirasi onemli.
  end;

  PARGBArray = ^TARGBArray;
  TARGBArray = array[0..MaxInt div SizeOf(TARGB) - 1] of TARGB;

type
  TConnectionStatus = (csConnected, csConnecting, csNotConnected, csException);
  TLoginState = (lsConnecting, lsNotConnected, lsException);
  TViewStyle = (vsNormal, vsBrief);
  TFormatType = (ftDefault, ftByte, ftKiloByte, ftMegaByte, ftGigaByte);
  TNotifyType = (ntAuditory, ntVisual, ntBoth);

const
  sShellLinkName    = '\Ey DSL!.lnk';

  sException        = 'Hata: İstisnai durum oluştu.';
  UserAppPath       = '\Ey DSL!';
  IniFilePath       = '.\Options.ini';
  IniPriceFile      = '.\Tarife.ini';
  ContentsPath      = '.\Contents\';
  SoundsPath        = ContentsPath + 'Sounds\';
  UIPath            = ContentsPath + 'UI\';
  Background6Image  = 'Background6.png';
  Overlay6Image     = 'Overlay6.png';
  Background4Image  = 'Background4.png';
  Overlay4Image     = 'Overlay4.png';
  LogoImageName     = 'Logo.png';
  {
  CloseEnterImage   = 'Close Enter.png';
  CloseLeaveImage   = 'Close.png';
  }
  CloseEnterImage   = 'Close.png';
  CloseLeaveImage   = 'Close.png';
  {
  HideEnterImage    = 'Min Enter.png';
  HideLeaveImage    = 'Min.png';
  }
  HideEnterImage    = 'Min.png';
  HideLeaveImage    = 'Min.png';
  {
  HideEnterImage    = 'Minimize.Hover.png';
  HideLeaveImage    = 'Minimize.Down.png';
  }
  OptEnterImage     = 'Options.png';
  OptLeaveImage     = 'Options.png';
  CancelEnterImage  = 'Cancel Button Pressed.png';
  CancelLeaveImage  = 'Cancel Button.png';

  OkEnterImage      = 'Ok Button Pressed.png';
  OkLeaveImage      = 'Ok Button.png';
  
  {
  OkEnterImage      = 'RedOk_Over.png';
  OkLeaveImage      = 'BlueOk.png';
  }
  NotChangeWave     = 'receive.wav';
  InfoWave          = 'receive.wav';
  OverflowWave      = 'error.wav';
  InvalidUserWave   = 'error.wav';
  InvalidPassWave   = 'error.wav';

  strHibernateMenu  = 'Kış Uykusu'#9'Shift+Sol Tık';

  sGeneral          = 'General';
  sStartup          = 'Startup';
  sDesktop          = 'Desktop';
  sQuickLunch       = 'QuickLunch';
  sAutoUpdate       = 'AutoUpdate';
  sUpdatePeriod     = 'UpdatePeriod';
  sShowTrayIcon     = 'ShowTrayIcon';
  sAlwaysTop        = 'AlwaysTop';
  sLeft             = 'Left';
  sTop              = 'Top';
  sCheckNewVersion  = 'CheckNewVersion';
  sLastTabSheet     = 'LastTabSheet';
  sFadeEffect       = 'FadeEffect';
  sFirstUsage       = 'FirstUsage';
  sDownload         = 'Download';
  sUpload           = 'Upload';
  sQuota            = 'Quota';
  sDownloadFloat    = 'DownloadFloat';
  sUploadFloat      = 'UploadFloat';
  sQuotaFloat       = 'QuotaFloat';
  sWidth            = 'Width';
  sHeight           = 'Height';
  sTrayIcon         = 'TrayIcon';
  sTryPeriod        = 'TryPeriod';
  sMaxTry           = 'MaxTry';
  sAlert            = 'Alert';
  sAlertPercent     = 'AlertPercent';
  sBandWidthDown    = 'BandWidthDown';
  sBandWidthUp      = 'BandWidthUp';
  sUpdateStartup    = 'UpdateStartup';
  sUseOCR           = 'UseOCR';
  sNotify           = 'Notify';
  sNotifyType       = 'NotifyType';
  sMonth            = 'Month';
  sYear             = 'Year';
  sRecordTime       = 'RecordTime';
  sServiceNo        = 'ServiceNo';
  sViewStyle        = 'ViewStyle';
  sPriceIndex       = 'PriceIndex';
  sMaxPayRef        = 'MaxPayRef';
  sPayPercent       = 'PayPercent';
  sTextColor        = 'TextColor';
  sShowTaskbar      = 'ShowTaskbar';

  sNetworkMonitor   = 'NetworkMonitor';
  sEnable           = 'Enable';
  sAdapter          = 'Adapter';
  sAdapterIndex     = 'AdapterIndex';
  sInGridColor      = 'InGridColor';
  sInLineColor      = 'InLineColor';
  sInBackColor      = 'InBackColor';
  sOutGridColor     = 'OutGridColor';
  sOutLineColor     = 'OutLineColor';
  sOutBackColor     = 'OutBackColor';
  sBackColor        = 'BackColor';
  sBackOpacity      = 'BackOpacity';
  
  sBackFillColor    = 'BackFillColor';
  sBackFillOpacity  = 'BackFillOpacity';

  sPeriod           = 'Period';
  sPeriodFormat     = 'Period%d';
  sFound            = 'Found';
  sDisplayName      = 'DisplayName';
  sUserName         = 'UserName';
  sDataCount        = 'DataCount';

  sDetails          = 'Details';

  sDefaultFormat    = 'DefaultFormat';
  sDownFormat       = 'DownFormat';
  sUpFormat         = 'UpFormat';
  sQuotaFormat      = 'QuotaFormat';
  sLeftFormat       = 'LeftFormat';
  sExcessFormat     = 'ExcessFormat';
  sMonthlyPay       = 'MonthlyPay';
  sPayPerMB         = 'PayPerMB';
  sLineStyle        = 'LineStyle';
  sDownLineColor    = 'DownLineColor';
  sUpLineColor      = 'UpLineColor';
  sUseInteger       = 'UseInteger';
  sHibernateAlert   = 'HibernateAlert';
  sMoveWith         = 'MoveWith';
  sRunWizard        = 'RunWizard';
  sTextColorNormal  = 'TextColorNormal';
  sTextColorExcess  = 'TextColorExcess';
  sTextColorHeader  = 'TextColorHeader';

  sInformation   = 'Information';
  sSectionFormat = 'Limited_%d';
  sDescription   = 'Description';
  sDownSpeed     = 'DownSpeed';
  sUpSpeed       = 'UpSpeed';

const
  { Status Codes }
  scStatusBase     =  0;
  scConnecting     =  1;
  scSecureCode     =  2;
  scRecognizing    =  3;
  scEntering       =  4;
  scAgreement      =  5;
  scGettingData    =  6;
  scCancel         =  7;
  scRetrying       =  8;
  scTryOverflow    =  9;
  scNotChange      = 10;
  scUpdated        = 11;
  scLogout         = 12;
  scSuccess        =  0;
  scNotResponse    = -1;
  scNoLoginPage    = -2;
  scNoSecureImg    = -3;
  scNotRecognize   = -4;
  scInvalidPost    = -5;
  scUnexpected     = -6;
  scInvalidData    = -7;
  scSystemError    = -8;
  scUserCanceled   = -9;
  scInvalidUser    = -10;
  scInvalidPass    = -11;
  scEndSession     = -12;
  scException      = -13;

{ TPriceRecord }
type
  TPriceRecord = record
    Description: WideString;
    DownSpeed, UpSpeed,
    Quota, MonthlyPay,
    PayPerMB,
    MaxPayRef, PayPercent: Double;
  end;

var
  IniFile: TIniFile;
  FormatSettings: TFormatSettings;
  //PriceFile: TMemIniFile;

{ GetSystemFolder }
function GetSystemFolder: string;

{ GetModuleFileNameStr }
function GetModuleFileNameStr: string;

{ GetApplicationPath }
function GetApplicationPath: string;

{ GetSpecialFolderPath }
function GetSpecialFolderPath(nFolder: Integer): WideString;

{ GetUserAppDataPath }
function GetUserAppDataPath: WideString;

{ MakeLangID }
function MakeLangID(usPrimaryLanguage, usSubLanguage: ShortInt): Word;

{ MakeLCID }
function MakeLCID(vLanguageID, vSortID: Word): DWORD;

{ BytesToString }
function BytesToString(Value : Double) : string;

{ BytesToGigaBytes }
function BytesToGigaBytes(Value : Double) : string;

{ BytesToGigaBytes2 }
function BytesToGigaBytes2(Value : Double) : string;

{ ConvertFloat }
function ConvertFloat(const AText: string): Double;

{ ConvertInt64 }
function ConvertInt64(const AText: string): Int64;

{ DeletePoints }
function DeletePoints(const AText: string): string;

{ FileSetHidden }
function FileSetHidden(const FileName: string; Hidden: Boolean): Boolean;

implementation

uses ShlObj;

{ GetSystemFolder }
function GetSystemFolder: string;
begin
  SetLength(Result, MAX_PATH);
  GetSystemDirectory(PChar(Result), MAX_PATH);
  Result := PChar(Result);
end;

{ GetModuleFileNameStr }
function GetModuleFileNameStr: string;
begin
  SetLength(Result, MAX_PATH);
  GetModuleFileName( MainInstance, PChar(Result), MAX_PATH );
  Result := PChar(Result);
end;

{ GetApplicationPath }
function GetApplicationPath: string;
begin
  Result := ExtractFileDir(GetModuleFileNameStr());
end;

{ GetSpecialFolderPath }
function GetSpecialFolderPath(nFolder: Integer): WideString;
begin
  SetLength(Result, MAX_PATH);
  if SHGetSpecialFolderPathW(GetDesktopWindow(), PWideChar(Result), nFolder, False) then
    Result := PWideChar(Result)
  else Result := '';
end;

{ GetUserAppDataPath }
function GetUserAppDataPath: WideString;
begin
  Result := GetSpecialFolderPath(CSIDL_APPDATA) + UserAppPath;
end;

{ BytesToString }
function BytesToString(Value : Double) : string;
begin
  if Value < KiloByte then
    Result := FormatFloat('#,0 B', Value)
  else
    if Value < MegaByte then
      Result := FormatFloat('#,###0.000 KB', Value / KiloByte)
    else
      if Value < GigaByte then
        Result := FormatFloat('#,###0.000 MB', Value / MegaByte)
      else Result := FormatFloat('#,###0.000 GB', Value / GigaByte);

end;

{ BytesToGigaBytes }
function BytesToGigaBytes(Value : Double) : string;
begin
  Result := FormatFloat('#,###0.000 GB', Value / GigaByte);
end;

{ BytesToGigaBytes2 }
function BytesToGigaBytes2(Value : Double) : string;
begin
  Result := FormatFloat('#,##0.00 GB', Value / GigaByte);
end;

{ DeletePoints }
function DeletePoints(const AText: string): string;
begin
  Result := AText;
  while Pos(ThousandSeparator, Result) > 0 do begin
    Delete(Result, Pos(ThousandSeparator, Result), 1);
  end;
end;

{ ConvertFloat }
function ConvertFloat(const AText: string): Double;
var
  TempText: string;
begin
  TempText := DeletePoints(AText);
  Result := StrToFloatDef(TempText, 0.0);
end;

{ ConvertInt64 }
function ConvertInt64(const AText: string): Int64;
var
  TempText: string;
begin
  TempText := DeletePoints(AText);
  Result := StrToInt64Def(TempText, 0);
end;

{ MakeLangID }
function MakeLangID(usPrimaryLanguage, usSubLanguage: ShortInt): Word;
begin
  Result := (usSubLanguage shl 10) or usPrimaryLanguage;
end;

{ MakeLCID }
function MakeLCID(vLanguageID, vSortID: Word): DWORD;
begin
  Result := (vSortID shl 16) or vLanguageID;
end;

{ Initialize }
procedure Initialize;
begin
  GetLocaleFormatSettings(
    MakeLCID(
      MakeLangID(LANG_TURKISH, SUBLANG_DEFAULT),
    SORT_DEFAULT),
    FormatSettings);
  IniFile := TIniFile.Create(IniFilePath);
  //PriceFile := TMemIniFile.Create(IniPriceFile);
end;

{ UnInitialize }
procedure UnInitialize;
begin
  //PriceFile.Free;
  IniFile.UpdateFile;
  IniFile.Free;
end;

{ FileSetHidden }
function FileSetHidden(const FileName: string; Hidden: Boolean): Boolean;
var
  Flags: Integer;
begin
  Result := False;
  Flags := GetFileAttributes(PChar(FileName));
  if Flags = -1 then Exit;
  if Hidden then
    Flags := Flags or faHidden
  else
    Flags := Flags and not faHidden;
  Result := SetFileAttributes(PChar(FileName), Flags);
end;

initialization
  Initialize;

finalization
  UnInitialize;

end.
