summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2011-07-16 18:42:00 +0200
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2011-07-16 18:42:00 +0200
commitef9c1456fe0f2fea9b089f3b1fc441a8851f39db (patch)
tree7999e9dc33cc94fcf0d1bc680fb7b1376ac6324f
parent703dea6b559d6281fd25a2532f10b6fd4d1fb147 (diff)
downloadfpGUI-ef9c1456fe0f2fea9b089f3b1fc441a8851f39db.tar.xz
added forgotten units and files
This are all used by the "procedure list" window.
-rw-r--r--images/constructor_16.bmpbin0 -> 822 bytes
-rw-r--r--images/destructor_16.bmpbin0 -> 822 bytes
-rw-r--r--images/function_16.bmpbin0 -> 822 bytes
-rw-r--r--images/gears_16.bmpbin0 -> 822 bytes
-rw-r--r--images/gutter_vertical.bmpbin0 -> 438 bytes
-rw-r--r--src/mPasLex.pas1442
-rw-r--r--src/proclistimages.inc208
7 files changed, 1650 insertions, 0 deletions
diff --git a/images/constructor_16.bmp b/images/constructor_16.bmp
new file mode 100644
index 00000000..992fe262
--- /dev/null
+++ b/images/constructor_16.bmp
Binary files differ
diff --git a/images/destructor_16.bmp b/images/destructor_16.bmp
new file mode 100644
index 00000000..0f0d0c2b
--- /dev/null
+++ b/images/destructor_16.bmp
Binary files differ
diff --git a/images/function_16.bmp b/images/function_16.bmp
new file mode 100644
index 00000000..8929a90b
--- /dev/null
+++ b/images/function_16.bmp
Binary files differ
diff --git a/images/gears_16.bmp b/images/gears_16.bmp
new file mode 100644
index 00000000..c9633504
--- /dev/null
+++ b/images/gears_16.bmp
Binary files differ
diff --git a/images/gutter_vertical.bmp b/images/gutter_vertical.bmp
new file mode 100644
index 00000000..882e2f34
--- /dev/null
+++ b/images/gutter_vertical.bmp
Binary files differ
diff --git a/src/mPasLex.pas b/src/mPasLex.pas
new file mode 100644
index 00000000..a9f452c9
--- /dev/null
+++ b/src/mPasLex.pas
@@ -0,0 +1,1442 @@
+{+--------------------------------------------------------------------------+
+ | Class: TmwPasLex
+ | Created: 07.98 - 10.98
+ | Author: Martin Waldenburg
+ | Description: A very fast Pascal tokenizer.
+ | Version: 1.32
+ | Copyright (c) 1998, 1999 Martin Waldenburg
+ | All rights reserved.
+ |
+ | LICENCE CONDITIONS
+ |
+ | USE OF THE ENCLOSED SOFTWARE
+ | INDICATES YOUR ASSENT TO THE
+ | FOLLOWING LICENCE CONDITIONS.
+ |
+ |
+ |
+ | These Licence Conditions are exlusively
+ | governed by the Law and Rules of the
+ | Federal Republic of Germany.
+ |
+ | Redistribution and use in source and binary form, with or without
+ | modification, are permitted provided that the following conditions
+ | are met:
+ |
+ | 1. Redistributions of source code must retain the above copyright
+ | notice, this list of conditions and the following disclaimer.
+ | If the source is modified, the complete original and unmodified
+ | source code has to distributed with the modified version.
+ |
+ | 2. Redistributions in binary form must reproduce the above
+ | copyright notice, these licence conditions and the disclaimer
+ | found at the end of this licence agreement in the documentation
+ | and/or other materials provided with the distribution.
+ |
+ | 3. Software using this code must contain a visible line of credit.
+ |
+ | 4. If my code is used in a "for profit" product, you have to donate
+ | to a registered charity in an amount that you feel is fair.
+ | You may use it in as many of your products as you like.
+ | Proof of this donation must be provided to the author of
+ | this software.
+ |
+ | 5. If you for some reasons don't want to give public credit to the
+ | author, you have to donate three times the price of your software
+ | product, or any other product including this component in any way,
+ | but no more than $500 US and not less than $200 US, or the
+ | equivalent thereof in other currency, to a registered charity.
+ | You have to do this for every of your products, which uses this
+ | code separately.
+ | Proof of this donations must be provided to the author of
+ | this software.
+ |
+ |
+ | DISCLAIMER:
+ |
+ | THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS'.
+ |
+ | ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ | PARTICULAR PURPOSE ARE DISCLAIMED.
+ |
+ | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ | WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ |
+ | Martin.Waldenburg@T-Online.de
+ +--------------------------------------------------------------------------+}
+
+unit mPasLex;
+
+{$mode delphi}{$H+}
+
+interface
+
+uses
+ SysUtils;
+
+var
+ Identifiers: array[#0..#255]of ByteBool;
+ mHashTable: array[#0..#255]of Integer;
+
+type
+ TTokenKind=(tkAbsolute, tkAbstract, tkAddressOp, tkAnd, tkAnsiComment,
+ tkArray, tkAs, tkAt, tkAsciiChar, tkAsm, tkAssembler, tkAssign, tkAutomated,
+ tkBegin, tkBadString, tkBorComment, tkCase, tkCdecl, tkClass, tkColon,
+ tkComma, tkCompDirect, tkConst, tkConstructor, tkCRLF, tkCRLFCo, tkDefault,
+ tkDestructor, tkDispid, tkDispinterface, tkDiv, tkDo, tkDoubleAddressOp,
+ tkDotDot, tkDownto, tkDynamic, tkElse, tkEnd, tkEqual, tkError, tkExcept,
+ tkExport, tkExports, tkExternal, tkFar, tkFile, tkFinalization, tkFinally,
+ tkFloat, tkFor, tkForward, tkFunction, tkGoto, tkGreater, tkGreaterEqual,
+ tkIdentifier, tkIf, tkImplementation, tkImplements, tkIn, tkIndex,
+ tkInherited, tkInitialization, tkInline, tkInteger, tkInterface, tkIs,
+ tkKeyString, tkLabel, tkLibrary, tkLower, tkLowerEqual, tkMessage, tkMinus,
+ tkMod, tkName, tkNear, tkNil, tkNodefault, tkNone, tkNot, tkNotEqual, tkNull,
+ tkNumber, tkObject, tkOf, tkOn, tkOr, tkOut, tkOverload, tkOverride,
+ tkPacked, tkPascal, tkPlus, tkPoint, tkPointerSymbol, tkPrivate, tkProcedure,
+ tkProgram, tkProperty, tkProtected, tkPublic, tkPublished, tkRaise, tkRead,
+ tkReadonly, tkRecord, tkRegister, tkReintroduce, tkRepeat, tkResident,
+ tkResourcestring, tkRoundClose, tkRoundOpen, tkSafecall, tkSemiColon, tkSet,
+ tkShl, tkShr, tkSlash, tkSlashesComment, tkSquareClose, tkSquareOpen,
+ tkSpace, tkStar, tkStdcall, tkStored, tkString, tkStringresource, tkSymbol,
+ tkThen, tkThreadvar, tkTo, tkTry, tkType, tkUnit, tkUnknown, tkUntil, tkUses,
+ tkVar, tkVirtual, tkWhile, tkWith, tkWrite, tkWriteonly, tkXor);
+
+ TCommentState=(csAnsi, csBor, csNo);
+
+ TmwPasLex=class(TObject)
+ private
+ fComment: TCommentState;
+ fOrigin: PChar;
+ fProcTable: array[#0..#255]of procedure of Object;
+ Run: Longint;
+ Temp: PChar;
+ FRoundCount: Integer;
+ FSquareCount: Integer;
+ fStringLen: Integer;
+ fToIdent: PChar;
+ fIdentFuncTable: array[0..191]of function: TTokenKind of Object;
+ fTokenPos: Integer;
+ fLineNumber: Integer;
+ FTokenID: TTokenKind;
+ fLastIdentPos: Integer;
+ fLastNoSpace: TTokenKind;
+ fLastNoSpacePos: Integer;
+ fLinePos: Integer;
+ fIsInterface: Boolean;
+ fIsClass: Boolean;
+ function KeyHash(ToHash: PChar): Integer;
+ function KeyComp(const aKey: string): Boolean;
+ function Func15: TTokenKind;
+ function Func19: TTokenKind;
+ function Func20: TTokenKind;
+ function Func21: TTokenKind;
+ function Func23: TTokenKind;
+ function Func25: TTokenKind;
+ function Func27: TTokenKind;
+ function Func28: TTokenKind;
+ function Func29: TTokenKind;
+ function Func32: TTokenKind;
+ function Func33: TTokenKind;
+ function Func35: TTokenKind;
+ function Func37: TTokenKind;
+ function Func38: TTokenKind;
+ function Func39: TTokenKind;
+ function Func40: TTokenKind;
+ function Func41: TTokenKind;
+ function Func44: TTokenKind;
+ function Func45: TTokenKind;
+ function Func47: TTokenKind;
+ function Func49: TTokenKind;
+ function Func52: TTokenKind;
+ function Func54: TTokenKind;
+ function Func55: TTokenKind;
+ function Func56: TTokenKind;
+ function Func57: TTokenKind;
+ function Func59: TTokenKind;
+ function Func60: TTokenKind;
+ function Func61: TTokenKind;
+ function Func63: TTokenKind;
+ function Func64: TTokenKind;
+ function Func65: TTokenKind;
+ function Func66: TTokenKind;
+ function Func69: TTokenKind;
+ function Func71: TTokenKind;
+ function Func73: TTokenKind;
+ function Func75: TTokenKind;
+ function Func76: TTokenKind;
+ function Func79: TTokenKind;
+ function Func81: TTokenKind;
+ function Func84: TTokenKind;
+ function Func85: TTokenKind;
+ function Func87: TTokenKind;
+ function Func88: TTokenKind;
+ function Func91: TTokenKind;
+ function Func92: TTokenKind;
+ function Func94: TTokenKind;
+ function Func95: TTokenKind;
+ function Func96: TTokenKind;
+ function Func97: TTokenKind;
+ function Func98: TTokenKind;
+ function Func99: TTokenKind;
+ function Func100: TTokenKind;
+ function Func101: TTokenKind;
+ function Func102: TTokenKind;
+ function Func103: TTokenKind;
+ function Func105: TTokenKind;
+ function Func106: TTokenKind;
+ function Func117: TTokenKind;
+ function Func126: TTokenKind;
+ function Func129: TTokenKind;
+ function Func132: TTokenKind;
+ function Func133: TTokenKind;
+ function Func136: TTokenKind;
+ function Func141: TTokenKind;
+ function Func143: TTokenKind;
+ function Func166: TTokenKind;
+ function Func168: TTokenKind;
+ function Func191: TTokenKind;
+ function AltFunc: TTokenKind;
+ procedure InitIdent;
+ function IdentKind(MayBe: PChar): TTokenKind;
+ procedure SetOrigin(NewValue: PChar);
+ procedure SetRunPos(Value: Integer);
+ procedure MakeMethodTables;
+ procedure AddressOpProc;
+ procedure AsciiCharProc;
+ procedure AnsiProc;
+ procedure BorProc;
+ procedure BraceCloseProc;
+ procedure BraceOpenProc;
+ procedure ColonProc;
+ procedure CommaProc;
+ procedure CRProc;
+ procedure EqualProc;
+ procedure GreaterProc;
+ procedure IdentProc;
+ procedure IntegerProc;
+ procedure LFProc;
+ procedure LowerProc;
+ procedure MinusProc;
+ procedure NullProc;
+ procedure NumberProc;
+ procedure PlusProc;
+ procedure PointerSymbolProc;
+ procedure PointProc;
+ procedure RoundCloseProc;
+ procedure RoundOpenProc;
+ procedure SemiColonProc;
+ procedure SlashProc;
+ procedure SpaceProc;
+ procedure SquareCloseProc;
+ procedure SquareOpenProc;
+ procedure StarProc;
+ procedure StringProc;
+ procedure SymbolProc;
+ procedure UnknownProc;
+ function GetToken: string;
+ function InSymbols(aChar: Char): Boolean;
+ protected
+ public
+ constructor Create;
+ destructor Destroy; override;
+ function CharAhead(Count: Integer): Char;
+ function NextChar: Char;
+ procedure Next;
+ procedure NextID(ID: TTokenKind);
+ procedure NextNoJunk;
+ procedure NextClass;
+ property IsClass: Boolean read fIsClass;
+ property IsInterface: Boolean read fIsInterface;
+ property LastIdentPos: Integer read fLastIdentPos;
+ property LastNoSpace: TTokenKind read fLastNoSpace;
+ property LastNoSpacePos: Integer read fLastNoSpacePos;
+ property LineNumber: Integer read fLineNumber;
+ property LinePos: Integer read fLinePos;
+ property Origin: PChar read fOrigin write SetOrigin;
+ property RunPos: Integer read Run write SetRunPos;
+ property TokenPos: Integer read fTokenPos;
+ property Token: string read GetToken;
+ property TokenID: TTokenKind read FTokenID;
+ published
+ end;
+
+implementation
+
+procedure MakeIdentTable;
+var
+ I, J: Char;
+begin
+ for I:=#0 to #255 do
+ begin
+ Case I of
+ '_', '0'..'9', 'a'..'z', 'A'..'Z': Identifiers[I]:=True;
+ else Identifiers[I]:=False;
+ end;
+ J:=UpperCase(I)[1];
+ Case I of
+ 'a'..'z', 'A'..'Z', '_': mHashTable[I]:=Ord(J)-64;
+ else mHashTable[Char(I)]:=0;
+ end;
+ end;
+end;
+
+procedure TmwPasLex.InitIdent;
+var
+ I: Integer;
+begin
+ for I:=0 to 191 do
+ Case I of
+ 15: fIdentFuncTable[I]:=Func15;
+ 19: fIdentFuncTable[I]:=Func19;
+ 20: fIdentFuncTable[I]:=Func20;
+ 21: fIdentFuncTable[I]:=Func21;
+ 23: fIdentFuncTable[I]:=Func23;
+ 25: fIdentFuncTable[I]:=Func25;
+ 27: fIdentFuncTable[I]:=Func27;
+ 28: fIdentFuncTable[I]:=Func28;
+ 29: fIdentFuncTable[I]:=Func29;
+ 32: fIdentFuncTable[I]:=Func32;
+ 33: fIdentFuncTable[I]:=Func33;
+ 35: fIdentFuncTable[I]:=Func35;
+ 37: fIdentFuncTable[I]:=Func37;
+ 38: fIdentFuncTable[I]:=Func38;
+ 39: fIdentFuncTable[I]:=Func39;
+ 40: fIdentFuncTable[I]:=Func40;
+ 41: fIdentFuncTable[I]:=Func41;
+ 44: fIdentFuncTable[I]:=Func44;
+ 45: fIdentFuncTable[I]:=Func45;
+ 47: fIdentFuncTable[I]:=Func47;
+ 49: fIdentFuncTable[I]:=Func49;
+ 52: fIdentFuncTable[I]:=Func52;
+ 54: fIdentFuncTable[I]:=Func54;
+ 55: fIdentFuncTable[I]:=Func55;
+ 56: fIdentFuncTable[I]:=Func56;
+ 57: fIdentFuncTable[I]:=Func57;
+ 59: fIdentFuncTable[I]:=Func59;
+ 60: fIdentFuncTable[I]:=Func60;
+ 61: fIdentFuncTable[I]:=Func61;
+ 63: fIdentFuncTable[I]:=Func63;
+ 64: fIdentFuncTable[I]:=Func64;
+ 65: fIdentFuncTable[I]:=Func65;
+ 66: fIdentFuncTable[I]:=Func66;
+ 69: fIdentFuncTable[I]:=Func69;
+ 71: fIdentFuncTable[I]:=Func71;
+ 73: fIdentFuncTable[I]:=Func73;
+ 75: fIdentFuncTable[I]:=Func75;
+ 76: fIdentFuncTable[I]:=Func76;
+ 79: fIdentFuncTable[I]:=Func79;
+ 81: fIdentFuncTable[I]:=Func81;
+ 84: fIdentFuncTable[I]:=Func84;
+ 85: fIdentFuncTable[I]:=Func85;
+ 87: fIdentFuncTable[I]:=Func87;
+ 88: fIdentFuncTable[I]:=Func88;
+ 91: fIdentFuncTable[I]:=Func91;
+ 92: fIdentFuncTable[I]:=Func92;
+ 94: fIdentFuncTable[I]:=Func94;
+ 95: fIdentFuncTable[I]:=Func95;
+ 96: fIdentFuncTable[I]:=Func96;
+ 97: fIdentFuncTable[I]:=Func97;
+ 98: fIdentFuncTable[I]:=Func98;
+ 99: fIdentFuncTable[I]:=Func99;
+ 100: fIdentFuncTable[I]:=Func100;
+ 101: fIdentFuncTable[I]:=Func101;
+ 102: fIdentFuncTable[I]:=Func102;
+ 103: fIdentFuncTable[I]:=Func103;
+ 105: fIdentFuncTable[I]:=Func105;
+ 106: fIdentFuncTable[I]:=Func106;
+ 117: fIdentFuncTable[I]:=Func117;
+ 126: fIdentFuncTable[I]:=Func126;
+ 129: fIdentFuncTable[I]:=Func129;
+ 132: fIdentFuncTable[I]:=Func132;
+ 133: fIdentFuncTable[I]:=Func133;
+ 136: fIdentFuncTable[I]:=Func136;
+ 141: fIdentFuncTable[I]:=Func141;
+ 143: fIdentFuncTable[I]:=Func143;
+ 166: fIdentFuncTable[I]:=Func166;
+ 168: fIdentFuncTable[I]:=Func168;
+ 191: fIdentFuncTable[I]:=Func191;
+ else fIdentFuncTable[I]:=AltFunc;
+ end;
+end;
+
+function TmwPasLex.KeyHash(ToHash: PChar): Integer;
+begin
+ Result:=0;
+ while ToHash^in ['a'..'z', 'A'..'Z']do
+ begin
+ Inc(Result, mHashTable[ToHash^]);
+ Inc(ToHash);
+ end;
+ if ToHash^in ['_', '0'..'9']then Inc(ToHash);
+ fStringLen:=ToHash-fToIdent;
+end; { KeyHash }
+
+function TmwPasLex.KeyComp(const aKey: string): Boolean;
+var
+ I: Integer;
+begin
+ Temp:=fToIdent;
+ if Length(aKey)=fStringLen then
+ begin
+ Result:=True;
+ for i:=1 to fStringLen do
+ begin
+ if mHashTable[Temp^]<>mHashTable[aKey[i]]then
+ begin
+ Result:=False;
+ Break;
+ end;
+ Inc(Temp);
+ end;
+ end else Result:=False;
+end; { KeyComp }
+
+function TmwPasLex.Func15: TTokenKind;
+begin
+ if KeyComp('If')then Result:=tkIf else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func19: TTokenKind;
+begin
+ if KeyComp('Do')then Result:=tkDo else
+ if KeyComp('And')then Result:=tkAnd else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func20: TTokenKind;
+begin
+ if KeyComp('As')then Result:=tkAs else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func21: TTokenKind;
+begin
+ if KeyComp('Of')then Result:=tkOf else
+ if KeyComp('At')then Result:=tkAt else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func23: TTokenKind;
+begin
+ if KeyComp('End')then Result:=tkEnd else
+ if KeyComp('In')then Result:=tkIn else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func25: TTokenKind;
+begin
+ if KeyComp('Far')then Result:=tkFar else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func27: TTokenKind;
+begin
+ if KeyComp('Cdecl')then Result:=tkCdecl else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func28: TTokenKind;
+begin
+ if KeyComp('Read')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkRead
+ end else
+ if KeyComp('Case')then Result:=tkCase else
+ if KeyComp('Is')then Result:=tkIs else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func29: TTokenKind;
+begin
+ if KeyComp('On')then Result:=tkOn else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func32: TTokenKind;
+begin
+ if KeyComp('File')then Result:=tkFile else
+ if KeyComp('Label')then Result:=tkLabel else
+ if KeyComp('Mod')then Result:=tkMod else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func33: TTokenKind;
+begin
+ if KeyComp('Or')then Result:=tkOr else
+ if KeyComp('Name')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkName
+ end else
+ if KeyComp('Asm')then Result:=tkAsm else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func35: TTokenKind;
+begin
+ if KeyComp('To')then Result:=tkTo else
+ if KeyComp('Nil')then Result:=tkNil else
+ if KeyComp('Div')then Result:=tkDiv else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func37: TTokenKind;
+begin
+ if KeyComp('Begin')then Result:=tkBegin else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func38: TTokenKind;
+begin
+ if KeyComp('Near')then Result:=tkNear else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func39: TTokenKind;
+begin
+ if KeyComp('For')then Result:=tkFor else
+ if KeyComp('Shl')then Result:=tkShl else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func40: TTokenKind;
+begin
+ if KeyComp('Packed')then Result:=tkPacked else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func41: TTokenKind;
+begin
+ if KeyComp('Else')then Result:=tkElse else
+ if KeyComp('Var')then Result:=tkVar else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func44: TTokenKind;
+begin
+ if KeyComp('Set')then Result:=tkSet else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func45: TTokenKind;
+begin
+ if KeyComp('Shr')then Result:=tkShr else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func47: TTokenKind;
+begin
+ if KeyComp('Then')then Result:=tkThen else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func49: TTokenKind;
+begin
+ if KeyComp('Not')then Result:=tkNot else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func52: TTokenKind;
+begin
+ if KeyComp('Raise')then Result:=tkRaise else
+ if KeyComp('Pascal')then Result:=tkPascal else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func54: TTokenKind;
+begin
+ if KeyComp('Class')then
+ begin
+ Result:=tkClass;
+ if fLastNoSpace=tkEqual then
+ begin
+ fIsClass:=True;
+ if Identifiers[CharAhead(fStringLen)]then fIsClass:=False;
+ end else fIsClass:=False;
+ end else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func55: TTokenKind;
+begin
+ if KeyComp('Object')then Result:=tkObject else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func56: TTokenKind;
+begin
+ if KeyComp('Index')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkIndex
+ end else
+ if KeyComp('Out')then Result:=tkOut else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func57: TTokenKind;
+begin
+ if KeyComp('While')then Result:=tkWhile else
+ if KeyComp('Goto')then Result:=tkGoto else
+ if KeyComp('Xor')then Result:=tkXor else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func59: TTokenKind;
+begin
+ if KeyComp('Safecall')then Result:=tkSafecall else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func60: TTokenKind;
+begin
+ if KeyComp('With')then Result:=tkWith else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func61: TTokenKind;
+begin
+ if KeyComp('Dispid')then Result:=tkDispid else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func63: TTokenKind;
+begin
+ if KeyComp('Public')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkPublic
+ end else
+ if KeyComp('Record')then Result:=tkRecord else
+ if KeyComp('Try')then Result:=tkTry else
+ if KeyComp('Array')then Result:=tkArray else
+ if KeyComp('Inline')then Result:=tkInline else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func64: TTokenKind;
+begin
+ if KeyComp('Uses')then Result:=tkUses else
+ if KeyComp('Unit')then Result:=tkUnit else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func65: TTokenKind;
+begin
+ if KeyComp('Repeat')then Result:=tkRepeat else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func66: TTokenKind;
+begin
+ if KeyComp('Type')then Result:=tkType else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func69: TTokenKind;
+begin
+ if KeyComp('Dynamic')then Result:=tkDynamic else
+ if KeyComp('Default')then Result:=tkDefault else
+ if KeyComp('Message')then Result:=tkMessage else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func71: TTokenKind;
+begin
+ if KeyComp('Stdcall')then Result:=tkStdcall else
+ if KeyComp('Const')then Result:=tkConst else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func73: TTokenKind;
+begin
+ if KeyComp('Except')then Result:=tkExcept else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func75: TTokenKind;
+begin
+ if KeyComp('Write')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkWrite
+ end else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func76: TTokenKind;
+begin
+ if KeyComp('Until')then Result:=tkUntil else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func79: TTokenKind;
+begin
+ if KeyComp('Finally')then Result:=tkFinally else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func81: TTokenKind;
+begin
+ if KeyComp('Interface')then
+ begin
+ Result:=tkInterface;
+ if fLastNoSpace=tkEqual then
+ fIsInterface:=True else fIsInterface:=False;
+ end else
+ if KeyComp('Stored')then Result:=tkStored else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func84: TTokenKind;
+begin
+ if KeyComp('Abstract')then Result:=tkAbstract else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func85: TTokenKind;
+begin
+ if KeyComp('Library')then Result:=tkLibrary else
+ if KeyComp('Forward')then Result:=tkForward else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func87: TTokenKind;
+begin
+ if KeyComp('String')then Result:=tkString else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func88: TTokenKind;
+begin
+ if KeyComp('Program')then Result:=tkProgram else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func91: TTokenKind;
+begin
+ if KeyComp('Private')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkPrivate
+ end else
+ if KeyComp('Downto')then Result:=tkDownto else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func92: TTokenKind;
+begin
+ if KeyComp('overload') then
+ Result:=tkOverload
+ else
+ if KeyComp('Inherited') then
+ Result:=tkInherited
+ else
+ Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func94: TTokenKind;
+begin
+ if KeyComp('Resident')then Result:=tkResident else
+ if KeyComp('Readonly')then Result:=tkReadonly else
+ if KeyComp('Assembler')then Result:=tkAssembler else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func95: TTokenKind;
+begin
+ if KeyComp('Absolute')then Result:=tkAbsolute else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func96: TTokenKind;
+begin
+ if KeyComp('Published')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkPublished
+ end else
+ if KeyComp('Override')then Result:=tkOverride else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func97: TTokenKind;
+begin
+ if KeyComp('Threadvar')then Result:=tkThreadvar else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func98: TTokenKind;
+begin
+ if KeyComp('Export')then Result:=tkExport else
+ if KeyComp('Nodefault')then Result:=tkNodefault else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func99: TTokenKind;
+begin
+ if KeyComp('External')then Result:=tkExternal else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func100: TTokenKind;
+begin
+ if KeyComp('Automated')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkAutomated
+ end else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func101: TTokenKind;
+begin
+ if KeyComp('Register')then Result:=tkRegister else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func102: TTokenKind;
+begin
+ if KeyComp('Function')then Result:=tkFunction else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func103: TTokenKind;
+begin
+ if KeyComp('Virtual')then Result:=tkVirtual else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func105: TTokenKind;
+begin
+ if KeyComp('Procedure')then Result:=tkProcedure else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func106: TTokenKind;
+begin
+ if KeyComp('Protected')then
+ begin
+ if inSymbols(CharAhead(fStringLen))then Result:=tkIdentifier else
+ Result:=tkProtected
+ end else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func117: TTokenKind;
+begin
+ if KeyComp('Exports')then Result:=tkExports else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func126: TTokenKind;
+begin
+ if KeyComp('Implements') then
+ Result:=tkImplements
+ else
+ Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func129: TTokenKind;
+begin
+ if KeyComp('Dispinterface')then Result:=tkDispinterface else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func132: TTokenKind;
+begin
+ if KeyComp('Reintroduce') then
+ Result:=tkReintroduce
+ else
+ Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func133: TTokenKind;
+begin
+ if KeyComp('Property')then Result:=tkProperty else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func136: TTokenKind;
+begin
+ if KeyComp('Finalization')then Result:=tkFinalization else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func141: TTokenKind;
+begin
+ if KeyComp('Writeonly')then Result:=tkWriteonly else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func143: TTokenKind;
+begin
+ if KeyComp('Destructor')then Result:=tkDestructor else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func166: TTokenKind;
+begin
+ if KeyComp('Constructor')then Result:=tkConstructor else
+ if KeyComp('Implementation')then Result:=tkImplementation else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func168: TTokenKind;
+begin
+ if KeyComp('Initialization')then Result:=tkInitialization else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.Func191: TTokenKind;
+begin
+ if KeyComp('Resourcestring')then Result:=tkResourcestring else
+ if KeyComp('Stringresource')then Result:=tkStringresource else Result:=tkIdentifier;
+end;
+
+function TmwPasLex.AltFunc: TTokenKind;
+begin
+ Result:=tkIdentifier
+end;
+
+function TmwPasLex.IdentKind(MayBe: PChar): TTokenKind;
+var
+ HashKey: Integer;
+begin
+ fToIdent:=MayBe;
+ HashKey:=KeyHash(MayBe);
+ if HashKey<192 then Result:=fIdentFuncTable[HashKey]else Result:=tkIdentifier;
+end;
+
+procedure TmwPasLex.MakeMethodTables;
+var
+ I: Char;
+begin
+ for I:=#0 to #255 do
+ case I of
+ #0: fProcTable[I]:=NullProc;
+ #10: fProcTable[I]:=LFProc;
+ #13: fProcTable[I]:=CRProc;
+ #1..#9, #11, #12, #14..#32:
+ fProcTable[I]:=SpaceProc;
+ '#': fProcTable[I]:=AsciiCharProc;
+ '$': fProcTable[I]:=IntegerProc;
+ #39: fProcTable[I]:=StringProc;
+ '0'..'9': fProcTable[I]:=NumberProc;
+ 'A'..'Z', 'a'..'z', '_':
+ fProcTable[I]:=IdentProc;
+ '{': fProcTable[I]:=BraceOpenProc;
+ '}': fProcTable[I]:=BraceCloseProc;
+ '!', '"', '%', '&', '('..'/', ':'..'@', '['..'^', '`', '~':
+ begin
+ case I of
+ '(': fProcTable[I]:=RoundOpenProc;
+ ')': fProcTable[I]:=RoundCloseProc;
+ '*': fProcTable[I]:=StarProc;
+ '+': fProcTable[I]:=PlusProc;
+ ',': fProcTable[I]:=CommaProc;
+ '-': fProcTable[I]:=MinusProc;
+ '.': fProcTable[I]:=PointProc;
+ '/': fProcTable[I]:=SlashProc;
+ ':': fProcTable[I]:=ColonProc;
+ ';': fProcTable[I]:=SemiColonProc;
+ '<': fProcTable[I]:=LowerProc;
+ '=': fProcTable[I]:=EqualProc;
+ '>': fProcTable[I]:=GreaterProc;
+ '@': fProcTable[I]:=AddressOpProc;
+ '[': fProcTable[I]:=SquareOpenProc;
+ ']': fProcTable[I]:=SquareCloseProc;
+ '^': fProcTable[I]:=PointerSymbolProc;
+ else fProcTable[I]:=SymbolProc;
+ end;
+ end;
+ else fProcTable[I]:=UnknownProc;
+ end;
+end;
+
+constructor TmwPasLex.Create;
+begin
+ inherited Create;
+ InitIdent;
+ MakeMethodTables;
+end; { Create }
+
+destructor TmwPasLex.Destroy;
+begin
+ inherited Destroy;
+end; { Destroy }
+
+procedure TmwPasLex.SetOrigin(NewValue: PChar);
+begin
+ fOrigin:=NewValue;
+ fComment:=csNo;
+ fLineNumber:=0;
+ fLinePos:=0;
+ Run:=0;
+ Next;
+end; { SetOrigin }
+
+procedure TmwPasLex.SetRunPos(Value: Integer);
+begin
+ Run:=Value;
+ Next;
+end;
+
+procedure TmwPasLex.AddressOpProc;
+begin
+ Case FOrigin[Run+1]of
+ '@':
+ begin
+ fTokenID:=tkDoubleAddressOp;
+ Inc(Run, 2);
+ end;
+ else
+ begin
+ fTokenID:=tkAddressOp;
+ Inc(Run);
+ end;
+ end;
+end;
+
+procedure TmwPasLex.AsciiCharProc;
+begin
+ fTokenID:=tkAsciiChar;
+ Inc(Run);
+ while FOrigin[Run]in ['0'..'9']do Inc(Run);
+end;
+
+procedure TmwPasLex.BraceCloseProc;
+begin
+ Inc(Run);
+ fTokenId:=tkError;
+end;
+
+procedure TmwPasLex.BorProc;
+begin
+ fTokenID:=tkBorComment;
+ case FOrigin[Run]of
+ #0:
+ begin
+ NullProc;
+ Exit;
+ end;
+
+ #10:
+ begin
+ LFProc;
+ Exit;
+ end;
+
+ #13:
+ begin
+ CRProc;
+ Exit;
+ end;
+ end;
+
+ while FOrigin[Run]<>#0 do
+ case FOrigin[Run]of
+ '}':
+ begin
+ fComment:=csNo;
+ Inc(Run);
+ Break;
+ end;
+ #10: Break;
+
+ #13: Break;
+ else Inc(Run);
+ end;
+end;
+
+procedure TmwPasLex.BraceOpenProc;
+begin
+ Case FOrigin[Run+1]of
+ '$': fTokenID:=tkCompDirect;
+ else
+ begin
+ fTokenID:=tkBorComment;
+ fComment:=csBor;
+ end;
+ end;
+ Inc(Run);
+ while FOrigin[Run]<>#0 do
+ case FOrigin[Run]of
+ '}':
+ begin
+ fComment:=csNo;
+ Inc(Run);
+ Break;
+ end;
+ #10: Break;
+
+ #13: Break;
+ else Inc(Run);
+ end;
+end;
+
+procedure TmwPasLex.ColonProc;
+begin
+ Case FOrigin[Run+1]of
+ '=':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkAssign;
+ end;
+ else
+ begin
+ Inc(Run);
+ fTokenID:=tkColon;
+ end;
+ end;
+end;
+
+procedure TmwPasLex.CommaProc;
+begin
+ Inc(Run);
+ fTokenID:=tkComma;
+end;
+
+procedure TmwPasLex.CRProc;
+begin
+ Case fComment of
+ csBor: fTokenID:=tkCRLFCo;
+ csAnsi: fTokenID:=tkCRLFCo;
+ else fTokenID:=tkCRLF;
+ end;
+
+ Case FOrigin[Run+1]of
+ #10: Inc(Run, 2);
+ else Inc(Run);
+ end;
+ Inc(fLineNumber);
+ fLinePos:=Run;
+end;
+
+procedure TmwPasLex.EqualProc;
+begin
+ Inc(Run);
+ fTokenID:=tkEqual;
+end;
+
+procedure TmwPasLex.GreaterProc;
+begin
+ Case FOrigin[Run+1]of
+ '=':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkGreaterEqual;
+ end;
+ else
+ begin
+ Inc(Run);
+ fTokenID:=tkGreater;
+ end;
+ end;
+end;
+
+function TmwPasLex.InSymbols(aChar: Char): Boolean;
+begin
+ if aChar in ['#', '$', '&', #39, '(', ')', '*', '+', ',', #150, '.', '/', ':',
+ ';', '<', '=', '>', '@', '[', ']', '^']then Result:=True else Result:=False;
+end;
+
+function TmwPasLex.CharAhead(Count: Integer): Char;
+begin
+ Temp:=fOrigin+Run+Count;
+ while Temp^in [#1..#9, #11, #12, #14..#32]do Inc(Temp);
+ Result:=Temp^;
+end;
+
+function TmwPasLex.NextChar: Char;
+begin
+ Temp:=fOrigin+Run;
+ Result:=Temp^;
+end;
+
+procedure TmwPasLex.IdentProc;
+begin
+ fTokenID:=IdentKind((fOrigin+Run));
+ Inc(Run, fStringLen);
+ while Identifiers[fOrigin[Run]]do Inc(Run);
+end;
+
+procedure TmwPasLex.IntegerProc;
+begin
+ Inc(Run);
+ fTokenID:=tkInteger;
+ while FOrigin[Run]in ['0'..'9', 'A'..'F', 'a'..'f']do Inc(Run);
+end;
+
+procedure TmwPasLex.LFProc;
+begin
+ Case fComment of
+ csBor: fTokenID:=tkCRLFCo;
+ csAnsi: fTokenID:=tkCRLFCo;
+ else fTokenID:=tkCRLF;
+ end;
+ Inc(Run);
+ Inc(fLineNumber);
+ fLinePos:=Run;
+end;
+
+procedure TmwPasLex.LowerProc;
+begin
+ case FOrigin[Run+1]of
+ '=':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkLowerEqual;
+ end;
+ '>':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkNotEqual;
+ end
+ else
+ begin
+ Inc(Run);
+ fTokenID:=tkLower;
+ end;
+ end;
+end;
+
+procedure TmwPasLex.MinusProc;
+begin
+ Inc(Run);
+ fTokenID:=tkMinus;
+end;
+
+procedure TmwPasLex.NullProc;
+begin
+ fTokenID:=tkNull;
+end;
+
+procedure TmwPasLex.NumberProc;
+begin
+ Inc(Run);
+ fTokenID:=tkNumber;
+ while FOrigin[Run]in ['0'..'9', '.', 'e', 'E']do
+ begin
+ case FOrigin[Run]of
+ '.':
+ if FOrigin[Run+1]='.' then Break else fTokenID:=tkFloat
+ end;
+ Inc(Run);
+ end;
+end;
+
+procedure TmwPasLex.PlusProc;
+begin
+ Inc(Run);
+ fTokenID:=tkPlus;
+end;
+
+procedure TmwPasLex.PointerSymbolProc;
+begin
+ Inc(Run);
+ fTokenID:=tkPointerSymbol;
+end;
+
+procedure TmwPasLex.PointProc;
+begin
+ case FOrigin[Run+1]of
+ '.':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkDotDot;
+ end;
+ ')':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkSquareClose;
+ Dec(FSquareCount);
+ end;
+ else
+ begin
+ Inc(Run);
+ fTokenID:=tkPoint;
+ end;
+ end;
+end;
+
+procedure TmwPasLex.RoundCloseProc;
+begin
+ Inc(Run);
+ fTokenID:=tkRoundClose;
+ Dec(FRoundCount);
+end;
+
+procedure TmwPasLex.AnsiProc;
+begin
+ fTokenID:=tkAnsiComment;
+ case FOrigin[Run]of
+ #0:
+ begin
+ NullProc;
+ Exit;
+ end;
+
+ #10:
+ begin
+ LFProc;
+ Exit;
+ end;
+
+ #13:
+ begin
+ CRProc;
+ Exit;
+ end;
+ end;
+
+ while fOrigin[Run]<>#0 do
+ case fOrigin[Run]of
+ '*':
+ if fOrigin[Run+1]=')' then
+ begin
+ fComment:=csNo;
+ Inc(Run, 2);
+ Break;
+ end else Inc(Run);
+ #10: Break;
+
+ #13: Break;
+ else Inc(Run);
+ end;
+end;
+
+procedure TmwPasLex.RoundOpenProc;
+begin
+ Inc(Run);
+ case fOrigin[Run]of
+ '*':
+ begin
+ fTokenID:=tkAnsiComment;
+ if FOrigin[Run+1]='$' then fTokenID:=tkCompDirect else fComment:=csAnsi;
+ Inc(Run);
+ while fOrigin[Run]<>#0 do
+ case fOrigin[Run]of
+ '*':
+ if fOrigin[Run+1]=')' then
+ begin
+ fComment:=csNo;
+ Inc(Run, 2);
+ Break;
+ end else Inc(Run);
+ #10: Break;
+ #13: Break;
+ else Inc(Run);
+ end;
+ end;
+ '.':
+ begin
+ Inc(Run);
+ fTokenID:=tkSquareOpen;
+ Inc(FSquareCount);
+ end;
+ else
+ begin
+ FTokenID:=tkRoundOpen;
+ Inc(FRoundCount);
+ end;
+ end;
+end;
+
+procedure TmwPasLex.SemiColonProc;
+begin
+ Inc(Run);
+ fTokenID:=tkSemiColon;
+end;
+
+procedure TmwPasLex.SlashProc;
+begin
+ case FOrigin[Run+1]of
+ '/':
+ begin
+ Inc(Run, 2);
+ fTokenID:=tkSlashesComment;
+ while FOrigin[Run]<>#0 do
+ begin
+ case FOrigin[Run]of
+ #10, #13: Break;
+ end;
+ Inc(Run);
+ end;
+ end;
+ else
+ begin
+ Inc(Run);
+ fTokenID:=tkSlash;
+ end;
+ end;
+end;
+
+procedure TmwPasLex.SpaceProc;
+begin
+ Inc(Run);
+ fTokenID:=tkSpace;
+ while FOrigin[Run]in [#1..#9, #11, #12, #14..#32]do Inc(Run);
+end;
+
+procedure TmwPasLex.SquareCloseProc;
+begin
+ Inc(Run);
+ fTokenID:=tkSquareClose;
+ Dec(FSquareCount);
+end;
+
+procedure TmwPasLex.SquareOpenProc;
+begin
+ Inc(Run);
+ fTokenID:=tkSquareOpen;
+ Inc(FSquareCount);
+end;
+
+procedure TmwPasLex.StarProc;
+begin
+ Inc(Run);
+ fTokenID:=tkStar;
+end;
+
+procedure TmwPasLex.StringProc;
+begin
+ fTokenID:=tkString;
+ if(FOrigin[Run+1]=#39)and(FOrigin[Run+2]=#39)then Inc(Run, 2);
+ repeat
+ case FOrigin[Run]of
+ #0, #10, #13: Break;
+ end;
+ Inc(Run);
+ until FOrigin[Run]=#39;
+ if FOrigin[Run]<>#0 then Inc(Run);
+end;
+
+procedure TmwPasLex.SymbolProc;
+begin
+ Inc(Run);
+ fTokenID:=tkSymbol;
+end;
+
+procedure TmwPasLex.UnknownProc;
+begin
+ Inc(Run);
+ fTokenID:=tkUnknown;
+end;
+
+procedure TmwPasLex.Next;
+begin
+ Case fTokenID of
+ tkIdentifier:
+ begin
+ fLastIdentPos:=fTokenPos;
+ fLastNoSpace:=fTokenID;
+ fLastNoSpacePos:=fTokenPos;
+ end;
+ tkSpace: ;
+ else
+ begin
+ fLastNoSpace:=fTokenID;
+ fLastNoSpacePos:=fTokenPos;
+ end;
+ end;
+ fTokenPos:=Run;
+ Case fComment of
+ csNo: fProcTable[fOrigin[Run]];
+ else
+ Case fComment of
+ csBor: BorProc;
+ csAnsi: AnsiProc;
+ end;
+ end;
+end;
+
+function TmwPasLex.GetToken: string;
+var
+ Len: Longint;
+begin
+ Len:=Run-fTokenPos;
+ SetString(Result, (FOrigin+fTokenPos), Len);
+end;
+
+procedure TmwPasLex.NextID(ID: TTokenKind);
+begin
+ repeat
+ Case fTokenID of
+ tkNull: Break;
+ else Next;
+ end;
+ until fTokenID=ID;
+end;
+
+procedure TmwPasLex.NextNoJunk;
+begin
+ repeat
+ Next;
+ until not(fTokenID in [tkSlashesComment, tkAnsiComment, tkBorComment, tkCRLF, tkCRLFCo, tkSpace]);
+end;
+
+procedure TmwPasLex.NextClass;
+begin
+ if fTokenID<>tkNull then next;
+ repeat
+ Case fTokenID of
+ tkNull: Break;
+ else Next;
+ end;
+ until(fTokenID=tkClass)and(IsClass);
+end;
+
+initialization
+ MakeIdentTable;
+
+end.
+
+
+
+
+
diff --git a/src/proclistimages.inc b/src/proclistimages.inc
new file mode 100644
index 00000000..0b6454db
--- /dev/null
+++ b/src/proclistimages.inc
@@ -0,0 +1,208 @@
+
+Const
+ grdimg_destructor_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0,
+ 0,132,132,132,132,132,132,132,132,132,132,132,132, 0, 0, 0, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,132,132,132, 0, 0,
+ 0,132,132,132, 0, 0, 0, 0, 0, 0,132,132,132,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0,
+ 0,255, 0,255, 0, 0, 0,255, 0,255, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255, 0,255, 0, 0,
+ 0,255, 0,255,132,132,132,255, 0,255, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0,255,255,255,
+ 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0,
+ 0,255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0,255,255,255,255,255,255,132,132,132,255,255,255, 0, 0,
+ 0,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,132,
+ 132,132, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0,255,255,255,
+ 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0,
+ 0, 0, 0, 0,132,132,132,255, 0,255,255, 0,255, 0, 0, 0,132,
+ 132,132,255,255,255, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0,255,255,255,255,255,255, 0, 0, 0,255,255,255,132,132,
+ 132, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,132,
+ 132,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,132,132,132,255,255,255, 0, 0,
+ 0,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,
+ 0,255,132,132,132,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,132,132,132,255,
+ 0,255,132,132,132,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,198,198,198, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0, 0, 0, 0,132,132,132,255, 0,255,132,
+ 132,132,255,255,255,255,255,255,255,255,255,255,255,255,198,198,198,
+ 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,132,
+ 132,132,255,255,255,255,255,255,198,198,198, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,
+ 132,132,198,198,198, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ grdimg_function_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,132, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,132, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 132, 0, 0,132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,255, 0,
+ 255,255, 0,255,132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,255,
+ 0,255,255, 0,255,132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,
+ 132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,255, 0,255,255, 0,
+ 255,132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,255, 0,255,255,
+ 0,255,132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,132, 0, 0,
+ 255, 0,255,255, 0,255,132, 0, 0,255, 0,255,255, 0,255,132, 0,
+ 0,255, 0,255,255, 0,255,132, 0, 0,255, 0,255,255, 0,255,132,
+ 0, 0,255, 0,255,255, 0,255,132, 0, 0,132, 0, 0,255, 0,255,
+ 255, 0,255,132, 0, 0,255, 0,255,255, 0,255,132, 0, 0,132, 0,
+ 0,132, 0, 0,255, 0,255,255, 0,255,255, 0,255,132, 0, 0,255,
+ 0,255,255, 0,255,132, 0, 0,132, 0, 0,255, 0,255,255, 0,255,
+ 132, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,132, 0, 0,255, 0,255,132,
+ 0, 0,132, 0, 0,132, 0, 0,132, 0, 0,255, 0,255,255, 0,255,
+ 132, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,132, 0, 0,255, 0,255,255, 0,255,255, 0,255,132,
+ 0, 0,132, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132, 0, 0,132,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,132, 0, 0,132, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,132, 0, 0,132, 0, 0,255, 0,255,132,
+ 0, 0,132, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,132, 0, 0,132, 0, 0,132, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ grdimg_constructor_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,
+ 132,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+ 198,198,198,198,198,198,198,198, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,198,198,198, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,132,132,132,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,
+ 198,198, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,132,132,132,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,198,198,198, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,132,132,132,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,198,198,198, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 132,132,132,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,198,198,198, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255,255,255,255, 0,255,255, 0,255,132,132,132,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,198,198,198, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,132,132,132,255,255,255,132,132,132,132,132,132,255,255,255,
+ 255,255,255,132,132,132,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,132,132,132, 0,255,255,132,132,132,255,255,255,132,132,132,
+ 255,255,255,255,255,255,255,255,255,198,198,198,255,255,255,132,132,
+ 132,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,255,255,
+ 255,255,132,132,132,255,255,255, 0,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,198,198,198,132,132,132,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132,132,
+ 132,132, 0,255,255,255,255,255,255,255,255,132,132,132,132,132,132,
+ 132,132,132,132,132,132,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,132,132,132, 0,255,255,132,
+ 132,132, 0,255,255,132,132,132,255,255,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,132,132,132,255,255,255,255, 0,255,132,132,132,255,
+ 255,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255,255,255,255, 0,255,255, 0,255,132,132,132,255,255,255,255,
+ 0,255,255, 0,255,132,132,132,255,255,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,132,132,132,255,255,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ grdimg_gears_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0, 0,132,132, 0, 0, 0, 0,255,255, 0,
+ 0, 0, 0,132,132, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0,132,132, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,132,132, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,132,132, 0,132,
+ 132, 0,255,255, 0,132,132, 0, 0, 0, 0,132,132, 0,255,255, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255, 0,132,132, 0,255,255, 0,255,
+ 255, 0, 0, 0,132,132,132, 0, 0, 0, 0,255,255, 0,255,255, 0,
+ 132,132, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0,132,132, 0,132,132, 0,255,255, 0,132,
+ 132, 0, 0, 0, 0,132,132, 0,255,255, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0,132,132, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,132,132, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,132,132, 0,132,132, 0, 0, 0, 0,255,255, 0, 0,
+ 0, 0,132,132, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255, 0,
+ 0, 0, 0,132,132, 0, 0, 0, 0,255,255, 0, 0, 0, 0,132,132,
+ 0, 0, 0, 0, 0, 0, 0,132,132, 0,132,132, 0,132,132, 0,132,
+ 132,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,132,132, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,132,132,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0,132,132, 0,132,132, 0,255,255, 0,
+ 132,132, 0, 0, 0, 0,132,132, 0,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0,132,132, 0,255,255, 0,255,255, 0, 0, 0,132,
+ 132,132, 0, 0, 0, 0,255,255, 0,255,255, 0,132,132, 0, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0,132,132, 0,132,132, 0,255,255, 0,132,132, 0, 0, 0, 0,
+ 132,132, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0,132,132, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,132,132, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,132,
+ 132, 0,132,132, 0, 0, 0, 0,255,255, 0, 0, 0, 0,132,132, 0,
+ 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0,132,132, 0,132,132, 0,132,132, 0,132,132,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);