
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@44 8e941d3f-bd1b-0410-a28a-d453659cc2b4
366 lines
11 KiB
ObjectPascal
366 lines
11 KiB
ObjectPascal
{*********************************************************}
|
|
{* O32OVLDR.PAS 4.06 *}
|
|
{*********************************************************}
|
|
|
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
|
{* Version: MPL 1.1 *}
|
|
{* *}
|
|
{* The contents of this file are subject to the Mozilla Public License *}
|
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
|
{* compliance with the License. You may obtain a copy of the License at *}
|
|
{* http://www.mozilla.org/MPL/ *}
|
|
{* *}
|
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
|
{* for the specific language governing rights and limitations under the *}
|
|
{* License. *}
|
|
{* *}
|
|
{* The Original Code is TurboPower Orpheus *}
|
|
{* *}
|
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
|
{* *}
|
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
|
{* *}
|
|
{* Contributor(s): *}
|
|
{* *}
|
|
{* ***** END LICENSE BLOCK ***** *}
|
|
|
|
unit o32ovldr;
|
|
{Orpheus Mask Validator}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, O32VlDtr;
|
|
|
|
const
|
|
OrpheusMaskCount = 17;
|
|
OrpheusMaskLength = 11;
|
|
|
|
{ Sample Orpheus Masks }
|
|
OrpheusMaskLookup : array [1..OrpheusMaskCount] of string =
|
|
('XXXXXXXXXX any character',
|
|
'!!!!!!!!!! any char (upper)',
|
|
'LLLLLLLLLL any char (lower)',
|
|
'xxxxxxxxxx any char (mixed)',
|
|
'aaaaaaaaaa alphas only',
|
|
'AAAAAAAAAA alphas (upper)',
|
|
'llllllllll alphas (lower)',
|
|
'9999999999 0-9',
|
|
'iiiiiiiiii 0-9, -',
|
|
'########## 0-9, -, .',
|
|
'EEEEEEEEEE 0-9, E, -, .',
|
|
'KKKK Hexadecimal (1F3E) Allows 0-9, A-F, uppercase Alpha characters',
|
|
'KK Hexadecimal (FF) Allows 0-9, A-F, uppercase Alpha characters',
|
|
'OOOOOOOOOO 0-7 (octal)',
|
|
'bbbbbbbbbb 0, 1 (binary)',
|
|
'B T or F (upper)',
|
|
'Y Y or N (upper)');
|
|
|
|
|
|
{Validation Error Codes}
|
|
vecNotAnyOrUpperChar = 1;
|
|
vecNotAnyOrLowerChar = 2;
|
|
vecNotAlphaChar = 3;
|
|
vecNotUpperAlpha = 4;
|
|
vecNotLowerAlpha = 5;
|
|
vecNotDS = 6;
|
|
vecNotDSM = 9;
|
|
vecNotDSMP = 10;
|
|
vecNotDSMPE = 11;
|
|
vecNotHexadecimal = 12;
|
|
vecNotBinary = 13;
|
|
vecNotOctal = 14;
|
|
vecNotTrueFalse = 15;
|
|
vecNotYesNo = 16;
|
|
|
|
type
|
|
{class - TO32OrMaskValidator}
|
|
TO32OrMaskValidator = class(TO32BaseValidator)
|
|
protected {private}
|
|
FMaskBlank: Char;
|
|
|
|
procedure SetInput(const Value: string); override;
|
|
procedure SetMask(const Value: string); override;
|
|
function GetValid: Boolean; override;
|
|
function GetSampleMasks: TStringList; override;
|
|
function Validate(const Value: string; var ErrorPos: Integer): Boolean;
|
|
public
|
|
function IsValid: Boolean; override;
|
|
property Valid;
|
|
property Input;
|
|
published
|
|
{Properties}
|
|
property Mask;
|
|
{Events}
|
|
property BeforeValidation;
|
|
property AfterValidation;
|
|
property OnValidationError;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils, OvcData, O32VlReg;
|
|
|
|
|
|
{===== TO32OrMaskValidator ===========================================}
|
|
|
|
function TO32OrMaskValidator.GetSampleMasks: TStringList;
|
|
var
|
|
I : Integer;
|
|
begin
|
|
{ Set the length of the mask portion of the string }
|
|
FSampleMaskLength := OrpheusMaskLength;
|
|
|
|
FSampleMasks.Clear;
|
|
|
|
{ Load the string list }
|
|
for I := 1 to OrpheusMaskCount do
|
|
FSampleMasks.Add(OrpheusMaskLookup[I]);
|
|
result := FSampleMasks;
|
|
end;
|
|
{=====}
|
|
|
|
function TO32OrMaskValidator.GetValid: Boolean;
|
|
begin
|
|
result := IsValid;
|
|
end;
|
|
{=====}
|
|
|
|
function TO32OrMaskValidator.IsValid: Boolean;
|
|
var
|
|
ErrorStr: string;
|
|
ErrorPos: Integer;
|
|
begin
|
|
DoBeforeValidation;
|
|
|
|
{assume the worst}
|
|
FValid := false;
|
|
|
|
{Set up validation and execute it against the input}
|
|
FValid := Validate(FInput, ErrorPos);
|
|
|
|
DoAfterValidation;
|
|
|
|
if not FValid then begin
|
|
case FErrorCode of
|
|
vecNotAnyOrUpperChar :
|
|
ErrorStr := 'Lowercase characters not allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotAnyOrLowerChar :
|
|
ErrorStr := 'Uppercase characters not allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotAlphaChar :
|
|
ErrorStr := 'Non-Alpha characters not allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotUpperAlpha :
|
|
ErrorStr := 'Non-Uppercase Alpha characters not allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotLowerAlpha :
|
|
ErrorStr := 'Non-Lowercase Alpha characters not allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotDS :
|
|
ErrorStr := 'Digits and spaces only allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotDSM :
|
|
ErrorStr := 'Digits, spaces and ''-'' only allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotDSMP :
|
|
ErrorStr := 'Digits, spaces ''-'', and ''.'' only allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotDSMPE :
|
|
ErrorStr := 'Digits, spaces ''-'', ''.'', and ''e/E'' only allowed '
|
|
+ 'in position ' + IntToStr(ErrorPos) + '.';
|
|
vecNotHexadecimal :
|
|
ErrorStr := 'Hexadecimal characters only (0-F) allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotBinary :
|
|
ErrorStr := 'Binary characters only (0, 1, and space) allowed in '
|
|
+ 'position ' + IntToStr(ErrorPos) + '.';
|
|
vecNotOctal :
|
|
ErrorStr := 'Octal characters only (0-7) allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
vecNotTrueFalse :
|
|
ErrorStr := 'Only True/false characters (T, t, F, f) allowed in '
|
|
+ 'position ' + IntToStr(ErrorPos) + '.';
|
|
vecNotYesNo :
|
|
ErrorStr := 'Only Yes/No characters (Y, y, N, n) allowed in position '
|
|
+ IntToStr(ErrorPos) + '.';
|
|
end;
|
|
DoOnError(self, 'Invalid match at character position ' + IntToStr(ErrorPos));
|
|
end;
|
|
result := FValid;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32OrMaskValidator.SetInput(const Value: string);
|
|
begin
|
|
if FInput <> Value then
|
|
FInput := Value;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32OrMaskValidator.SetMask(const Value: string);
|
|
begin
|
|
if FMask <> Value then
|
|
FMask := Value;
|
|
end;
|
|
{=====}
|
|
|
|
function TO32OrMaskValidator.Validate(const Value: string;
|
|
var ErrorPos: Integer): Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
ErrorPos := 0;
|
|
result := true;
|
|
if Length(Input) > Length(FMask) then begin
|
|
result := false;
|
|
ErrorPos := Length(FMask) + 1;
|
|
exit;
|
|
end;
|
|
|
|
for I := 1 to Length(Input) do begin
|
|
case FMask[I] of
|
|
{pmAnyChar : 'X' allows any character}
|
|
{ do nothing here - All entry is OK.}
|
|
|
|
pmForceUpper : {'!' allows any uppercase character}
|
|
if (ord(Input[I]) in [97..122]{lowercase characters}) then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotAnyOrUpperChar;
|
|
exit;
|
|
end;
|
|
|
|
pmForceLower : {'L' allows any lowercase character}
|
|
if (ord(Input[I]) in [65..90]{uppercase characters}) then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotAnyOrLowerChar;
|
|
exit;
|
|
end;
|
|
|
|
{pmForceMixed : 'x' allows any character. Just like 'X'}
|
|
{ do nothing here - All entry is ok, no way to force mixed case without }
|
|
{ back tracking }
|
|
|
|
pmAlpha : {'a' allows alphas only}
|
|
if not (ord(Input[I]) in [65..90, 97..122]{any alpha}) then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotAlphaChar;
|
|
exit;
|
|
end;
|
|
|
|
pmUpperAlpha : {'A' allows uppercase alphas only}
|
|
if not (ord(Input[I]) in [65..90]{uppercase alpha}) then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotUpperAlpha;
|
|
exit;
|
|
end;
|
|
|
|
pmLowerAlpha : {'l' allows lowercase alphas only}
|
|
if not (ord(Input[I]) in [97..122]{lowercase alpha}) then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotLowerAlpha;
|
|
exit;
|
|
end;
|
|
|
|
pmPositive : {'9' allows numbers and spaces only}
|
|
if not (ord(Input[I]) in [48..57, 32]) then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotDS;
|
|
exit;
|
|
end;
|
|
|
|
pmWhole : {'i' allows numbers, spaces, minus}
|
|
if not (ord(Input[I]) in [48..57, 32, 45]) then
|
|
begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotDSM;
|
|
exit;
|
|
end;
|
|
|
|
pmDecimal : {'#' allows numbers, spaces, minus, period}
|
|
if not (ord(Input[I]) in [48..57, 32, 45, 46])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotDSMP;
|
|
exit;
|
|
end;
|
|
|
|
pmScientific : {'E' allows numbers, spaces, minus, period, 'e'}
|
|
if not (ord(Input[I]) in [48..57, 32, 45, 46, 101, 69])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotDSMPE;
|
|
exit;
|
|
end;
|
|
|
|
pmHexadecimal : {'K' allows 0-9 and uppercase A-F}
|
|
if not (ord(Input[I]) in [48..57, 65..70])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotHexadecimal;
|
|
exit;
|
|
end;
|
|
|
|
pmBinary : {'b' allows 0-1, space}
|
|
if not (ord(Input[I]) in [48, 49, 32])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotBinary;
|
|
exit;
|
|
end;
|
|
|
|
pmOctal : {'O' allows 0-7, space}
|
|
if not (ord(Input[I]) in [48..55, 32])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotOctal;
|
|
exit;
|
|
end;
|
|
|
|
pmTrueFalse : {'B' allows T, t, F, f}
|
|
if not (ord(Input[I]) in [84, 116, 70, 102])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotTrueFalse;
|
|
exit;
|
|
end;
|
|
|
|
pmYesNo : {'Y' allows Y, y, N, n}
|
|
if not (ord(Input[I]) in [89, 121, 78, 110])
|
|
then begin
|
|
result := false;
|
|
ErrorPos := I;
|
|
FErrorCode := vecNotYesNo;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
initialization
|
|
RegisterValidator(TO32OrMaskValidator);
|
|
|
|
finalization
|
|
UnRegisterValidator(TO32OrMaskValidator);
|
|
|
|
end.
|
|
|