<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.bishopphillips.com/riskwiki/index.php?action=history&amp;feed=atom&amp;title=BPCStndLib1</id>
	<title>BPCStndLib1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.bishopphillips.com/riskwiki/index.php?action=history&amp;feed=atom&amp;title=BPCStndLib1"/>
	<link rel="alternate" type="text/html" href="https://www.bishopphillips.com/riskwiki/index.php?title=BPCStndLib1&amp;action=history"/>
	<updated>2026-08-16T03:11:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.bishopphillips.com/riskwiki/index.php?title=BPCStndLib1&amp;diff=7&amp;oldid=prev</id>
		<title>Bishopj: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.bishopphillips.com/riskwiki/index.php?title=BPCStndLib1&amp;diff=7&amp;oldid=prev"/>
		<updated>2026-04-12T06:36:00Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 06:36, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Bishopj</name></author>
	</entry>
	<entry>
		<id>https://www.bishopphillips.com/riskwiki/index.php?title=BPCStndLib1&amp;diff=6&amp;oldid=prev</id>
		<title>Bishopj: Created page with &quot;==Language Tokenising and Parsing, tree, date and file support library==  Language: Delphi 7 - 2007  * String Tokenising functions * BPC FLang1 Language parsing routines * DAT...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.bishopphillips.com/riskwiki/index.php?title=BPCStndLib1&amp;diff=6&amp;oldid=prev"/>
		<updated>2019-09-11T16:35:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Language Tokenising and Parsing, tree, date and file support library==  Language: Delphi 7 - 2007  * String Tokenising functions * BPC FLang1 Language parsing routines * DAT...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Language Tokenising and Parsing, tree, date and file support library==&lt;br /&gt;
&lt;br /&gt;
Language: Delphi 7 - 2007&lt;br /&gt;
&lt;br /&gt;
* String Tokenising functions&lt;br /&gt;
* BPC FLang1 Language parsing routines&lt;br /&gt;
* DATE to String functions&lt;br /&gt;
* GENERAL FILE Import/Export Functions - COMMA TEXT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use the bpcSMScript equivalents in preference to these routines where available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface&lt;br /&gt;
uses windows, classes, Sysutils, db, DBTables;&lt;br /&gt;
&lt;br /&gt;
const&lt;br /&gt;
  bpslSkipSpace = 1;&lt;br /&gt;
  bpslDropDelimeters = 2;&lt;br /&gt;
  bpslPushBack = 4;&lt;br /&gt;
  bpslMatchSE = 8;&lt;br /&gt;
  bpslToEOL = 16;&lt;br /&gt;
  bpslDelimOveridesNum = 32;&lt;br /&gt;
  bpslCmprsSpace = 64;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TbpTreeNodeType = ( tttnCell, tttnOp, tttnVal );&lt;br /&gt;
{&lt;br /&gt;
  TbpTreeNode = class( Tobject )&lt;br /&gt;
  private&lt;br /&gt;
  public&lt;br /&gt;
    NodeType : TbpTreeNodeType;&lt;br /&gt;
    Token : string;&lt;br /&gt;
    Done : boolean;&lt;br /&gt;
    Value : double;&lt;br /&gt;
    LeftPtr : TbpTreeNode;&lt;br /&gt;
    RightPtr : TbpTreeNode;&lt;br /&gt;
    constructor Create( myToken : string);&lt;br /&gt;
    destructor Destroy ;&lt;br /&gt;
    function Eval : boolean;&lt;br /&gt;
    function FindInTree( Target : string ) : TbpTreeNode;&lt;br /&gt;
    function BuildTree( SourceString : string ) : TbpTreeNode;&lt;br /&gt;
  end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  tbpReservedWord = ( tbpRwNIL, tbpRwILLEGAL, tbpRwVAR, tbpRwIGNORE, tbpRwPOST, tbpRwHOLD, tbpRwIF, tbpRwDO, tbpRwEQ, tbpRwNEQ, tbpRwLT, tbpRwGT ,&lt;br /&gt;
                    tbpRwLTE, tbpRwGTE ,tbpRwASSIGN, tbpRwPLUS, tbpRwMINUS, tbpRwTIMES,&lt;br /&gt;
                    tbpRwDIVIDE, tbpRwPERIOD, tbpRwSEMIC, tbpRwCOLON, tbpRwCOMMA, tbpRwLEFTBRACKET, tbpRwRIGHTBRACKET,&lt;br /&gt;
                    tbpRwNOT, tbpRwTRUE, tbpRwFALSE, tbpRwAND, tbpRwOR );&lt;br /&gt;
&lt;br /&gt;
  TbpTokenType = (ttComma, ttMapArg, ttReserved  );&lt;br /&gt;
  TbpMapArgType = (ftxNil, ftxInt, ftxDateYearLead, ftxDateLongMonLead, ftxDateDayLeadTime, ftxDateDayLead, ftxDateYearLeadTime, ftxDateYearLeadWithDiv, ftxChar, ftxMoney, ftxFloat, ftxLogical, ftxBlob, ftxQChar, ftxQNil);&lt;br /&gt;
  TbpTrimType = (ttTrimLeft, ttTrimRight, ttTrimBoth  );&lt;br /&gt;
  TbpTokenListType = (tltRelation, tltMap);&lt;br /&gt;
&lt;br /&gt;
  TbpToken = class(TObject)&lt;br /&gt;
  private&lt;br /&gt;
  public&lt;br /&gt;
    TokenType : TbpTokenType;&lt;br /&gt;
    TokenString : string;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TbpMapDividerToken = class(TbpToken)&lt;br /&gt;
  private&lt;br /&gt;
  public&lt;br /&gt;
    DividerWord : string;&lt;br /&gt;
    constructor Create(myDivider : string);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TbpMapReservedWordToken = class(TbpToken)&lt;br /&gt;
  private&lt;br /&gt;
  public&lt;br /&gt;
    ReservedWord : string;&lt;br /&gt;
    constructor Create(myReservedWord : string);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TbpMapArgToken = class(TbpToken)&lt;br /&gt;
  private&lt;br /&gt;
  public&lt;br /&gt;
    MapToName : string;&lt;br /&gt;
    MapSrcType : TbpMapArgType;&lt;br /&gt;
    Size : integer;&lt;br /&gt;
    constructor Create(myMapToName : string; myMapSrcType : TbpMapArgType; mySize : integer );&lt;br /&gt;
    function MapTo( MyDataSet : TDataSet ; var Erra : string ) : boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TbpTokenList = class(TStringlist)&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    ListType : TbpTokenListType ;&lt;br /&gt;
    procedure AddToken( TokenName : string; MyToken : TbpToken );&lt;br /&gt;
    procedure DelToken( TokenName : string );&lt;br /&gt;
    function GetTokenStrIfComma( i : integer) : string;&lt;br /&gt;
    function GetToken( i : integer)  : TbpToken;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TbpMapTokenList = class(TbpTokenList)&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
     Rows : string;&lt;br /&gt;
     Criteria : string;&lt;br /&gt;
     MergeWith : string;&lt;br /&gt;
     Action : string;&lt;br /&gt;
     Prep : string;&lt;br /&gt;
     SrcLine : string;&lt;br /&gt;
     SrcMask : string;&lt;br /&gt;
     ParseError : string;&lt;br /&gt;
     SrcIgnored : string;&lt;br /&gt;
     SrcParseError : tstringlist;&lt;br /&gt;
     constructor Create;&lt;br /&gt;
     destructor Destroy; override;&lt;br /&gt;
     function IsCriteriaMatch( sourceline : string ) : boolean;&lt;br /&gt;
     function ReLoadSrc( TargetDataSet : TDataSet)  : boolean;&lt;br /&gt;
     function LoadMask : boolean;&lt;br /&gt;
     function LoadSrc ( TargetDataSet : TDataSet; NoPost : boolean = false ) : boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  TbpListTokenList = class(TStringlist)&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
  public&lt;br /&gt;
    { Public declarations }&lt;br /&gt;
     SrcLines : TStringList;&lt;br /&gt;
     SrcMasks : TStringList;&lt;br /&gt;
     ParseErrors : TStringList;&lt;br /&gt;
     SrcIgnoreds : TStringList;&lt;br /&gt;
&lt;br /&gt;
     constructor Create;&lt;br /&gt;
     destructor Destroy; override;&lt;br /&gt;
     function MatchSourceToMaskCriteria(  SourceLine : String )  : integer;&lt;br /&gt;
     procedure ClearMasks ;&lt;br /&gt;
     function LoadMasks : boolean;&lt;br /&gt;
     function LoadSrcs(debugflg : boolean; Imid, Imbid : integer;  TargetDataSet : TDataSet; SourceLines : TStringList)  : boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////&lt;br /&gt;
//// String Tokenising functions&lt;br /&gt;
/////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
// Return a copy of the string bounded by start and end&lt;br /&gt;
function bpStrWhatsBetween(strTokenStart, strSource, strTokenEnd : string ): string;&lt;br /&gt;
// Returns the index of the closing delimeter matching the nesting level of the&lt;br /&gt;
// current start delimeters, (or the outermost match if direction is not forward).&lt;br /&gt;
// Source string unaffected&lt;br /&gt;
function bpNextMatchDelim(bGoForwards : boolean; strTokenStart, strTokenEnd, strSource: string; startpos : integer ): integer;&lt;br /&gt;
// Returns the index of the next delimeter from startpos or the last occurence&lt;br /&gt;
// in string if direction is not forward).  Forward Search starts from startpos.&lt;br /&gt;
// Source string unaffected&lt;br /&gt;
function bpNextDelimiter(bGoForwards : boolean; strTokenDelim, strSource : string; startpos : integer ): integer;&lt;br /&gt;
// Returns a string without the removechars. Doesn&amp;#039;t Change Source&lt;br /&gt;
function bpStripCh(removechars : string; targetstr : string ) : string;&lt;br /&gt;
// Returns a string token optionally delimetered by start and pos, according to a variety of rules in Flags. Changes Source&lt;br /&gt;
function bpStrStripToken(Num : integer; Flags:integer; strTokenStart, strPunct, strTokenEnd : string; var strSource : string; var bTokenComplete : boolean; NumChar : integer = 0 ) : string;&lt;br /&gt;
// Returns the Map type given a string type name&lt;br /&gt;
function bpstrtoMapArgToken( strArgType : string ) : TbpMapArgType;&lt;br /&gt;
// Trim leading and trailing trimchars&lt;br /&gt;
function bpChTrim( LTrimByString, RTrimByString: string; TokenString: string): string;&lt;br /&gt;
// Move the sign char at the back to the front&lt;br /&gt;
function bpSignToLeft( chSign : string; TokenString: string): string;&lt;br /&gt;
// Returns the value part of a Name/Value pair in the string of the form:&lt;br /&gt;
// Name=&amp;quot;MyValue&amp;quot; or Name.MyValue&lt;br /&gt;
function RetrieveValue(strSource,strName,strAssign,strTokenStart,strTokenEnd : string) : string;&lt;br /&gt;
// Returns a simple token : &amp;quot;word&amp;quot; | Punctuation&lt;br /&gt;
function RetrieveToken(strSource : string; var curpos : integer ) : string;&lt;br /&gt;
// Retrieves the entire first line after index &amp;lt;startfrom&amp;gt; in the tstring &amp;lt;strSource&amp;gt;&lt;br /&gt;
// that matches the pattern &amp;#039;CALC.&amp;lt;strinstance&amp;gt; &amp;lt;strsubname&amp;gt;=&amp;quot;&amp;lt;strsubinstance&amp;gt;&amp;quot; &amp;#039;&lt;br /&gt;
// Returns the entire line string including all attributes - use RetrieveValue to extract the&lt;br /&gt;
// component attributes or filter further&lt;br /&gt;
// the CALC pattern where &amp;quot; symbol is replaced by &amp;lt;strTokenStart&amp;gt;, &amp;lt;strTokenEnd&amp;gt;&lt;br /&gt;
// EG: StartingOffset := 0;&lt;br /&gt;
//     RetrievSPattern( FormuliStringList,  StartingOffset, &amp;#039;BASXL&amp;#039;, &amp;#039;PeriodGroup&amp;#039;, &amp;#039;Monthly&amp;#039; );&lt;br /&gt;
// If &amp;lt;strsubname&amp;gt; is &amp;#039;&amp;#039; then the match is to the CALC.strinstance tag alone and&lt;br /&gt;
//    &amp;lt;strsubinstance&amp;gt; is ignored.&lt;br /&gt;
// ##JB : Assumes CALC name and subName pair are unique, or queued&lt;br /&gt;
function RetrieveSPattern( strSource : TStrings; var StartFrom : integer; strName, strInstance, strSubName, strSubInstance : string) : string;&lt;br /&gt;
// Uses RetrieveSPattern to return CALC formula (the value attribute of the tag) or &amp;#039;&amp;#039;&lt;br /&gt;
// EG: RetrievePeriodCalc( FormuliStringList, &amp;#039;BASXL&amp;#039;, &amp;#039;Monthly&amp;#039;, &amp;#039;&amp;quot;&amp;#039;, &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
function RetrievePeriodCalcValue( strSource : TStrings; strInstance, strSubInstance, strTokenStart,strTokenEnd : string) : string;&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
/// Language parsing routines&lt;br /&gt;
{&lt;br /&gt;
  In all cases the source is not damaged and (except for RetrieveValue,&lt;br /&gt;
  the structure of the calling pascal function is:&lt;br /&gt;
  &amp;lt;func&amp;gt;(&amp;lt;source string&amp;gt;, Var &amp;lt;curpos&amp;gt; ; Var &amp;lt;return args&amp;gt; ) : &amp;lt;parsed ok&amp;gt;;&lt;br /&gt;
  where &amp;lt;func&amp;gt; is function name&lt;br /&gt;
        &amp;lt;source string&amp;gt; is the source string&lt;br /&gt;
        &amp;lt;curpos&amp;gt; next char position immediately after expression or 1 if at start of line&lt;br /&gt;
                 or -1 if EOLN&lt;br /&gt;
        &amp;lt;return args&amp;gt; the arguments returned&lt;br /&gt;
        &amp;lt;parsed ok&amp;gt; a boolean verifying correct syntax&lt;br /&gt;
  These routines assume a language of expressions containing (examples):&lt;br /&gt;
  value=&amp;quot;POST&amp;quot; or value=&amp;quot;POST;&amp;quot;&lt;br /&gt;
  value=&amp;quot;if( NE(a,b), POST, HOLD)&amp;quot;&lt;br /&gt;
  value=&amp;quot;if( NE(a,b), if( NE(a,c), POST, do( =(a,d), POST), HOLD));&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  LANGUAGE GRAMMAR:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;statementlist&amp;gt; = [&amp;lt;statement&amp;gt;]...;&lt;br /&gt;
  &amp;lt;statement&amp;gt; = &amp;lt;postfunc&amp;gt; | &amp;lt;holdfunc&amp;gt; | &amp;lt;iffunc&amp;gt; | &amp;lt;dofunc&amp;gt; | &amp;lt;assignfunc&amp;gt; | &amp;lt;mathfunc&amp;gt;&lt;br /&gt;
  &amp;lt;arglist&amp;gt; = ( &amp;lt;statement&amp;gt; [,&amp;lt;statement&amp;gt;]... )&lt;br /&gt;
  &amp;lt;postfunc&amp;gt; = POST // return true&lt;br /&gt;
  &amp;lt;holdfunc&amp;gt; = HOLD // return true&lt;br /&gt;
  &amp;lt;dofunc&amp;gt; = DO ( &amp;lt;statement&amp;gt; [, &amp;lt;statement&amp;gt;]... )  // return last statement executed&lt;br /&gt;
  &amp;lt;iffunc&amp;gt; = IF ( &amp;lt;conditionpart&amp;gt;, &amp;lt;truepart&amp;gt;, &amp;lt;falsepart&amp;gt; )  // return whichever part is executed&lt;br /&gt;
  &amp;lt;conditionpart&amp;gt; = &amp;lt;logicfunc&amp;gt; ( &amp;lt;logicarg&amp;gt;, &amp;lt;logicarg&amp;gt;) | &amp;lt;logicliteral&amp;gt;&lt;br /&gt;
  &amp;lt;logicfunc&amp;gt; = EQ | NE | LT | GT | LTE | GTE  | OR | AND&lt;br /&gt;
  &amp;lt;logicliteral&amp;gt; = TRUE  | FALSE&lt;br /&gt;
  &amp;lt;logicarg&amp;gt; = &amp;lt;literal&amp;gt; | &amp;lt;var&amp;gt; | &amp;lt;logicliteral&amp;gt;&lt;br /&gt;
  &amp;lt;mathfunc&amp;gt; = [+ | - | * | / ]( &amp;lt;statement&amp;gt; [, &amp;lt;statement&amp;gt;]... )&lt;br /&gt;
  &amp;lt;assignfunc&amp;gt; = =( &amp;lt;lvalue&amp;gt;, &amp;lt;rvalue&amp;gt; )&lt;br /&gt;
  &amp;lt;lvalue&amp;gt; = &amp;lt;var&amp;gt;&lt;br /&gt;
  &amp;lt;rvalue&amp;gt; = &amp;lt;logicfunc&amp;gt; | &amp;lt;var&amp;gt; | &amp;lt;literal&amp;gt; | &amp;lt;iffunc&amp;gt;&lt;br /&gt;
  &amp;lt;literal&amp;gt; = &amp;lt;logicliteral&amp;gt; | &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  END GRAMMAR.&lt;br /&gt;
&lt;br /&gt;
  An example of the use is:&lt;br /&gt;
  curpos := 1;&lt;br /&gt;
  myValStr := RetrieveValue( &amp;#039;Relation.R1 value=&amp;quot;if( NE(a,b), if( NE(a,c), POST, do( =( a,b), HOLD ), HOLD)&amp;quot;&amp;#039;, &amp;#039;value&amp;#039;, &amp;#039;=&amp;#039;, &amp;#039;&amp;quot;&amp;#039;, &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
  if EvalStatementList( myValStr, curpos, strStatementList) then&lt;br /&gt;
     Parse Complete;&lt;br /&gt;
&lt;br /&gt;
EvalLiteral&lt;br /&gt;
  RetrieveToken( strSource, curpos );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EvalStatementList&lt;br /&gt;
  while curpos &amp;gt; 0 do&lt;br /&gt;
  begin&lt;br /&gt;
    parseok := EvalStatement(myValStr, curpos, strstatement );&lt;br /&gt;
    if curpos &amp;gt;= length(myValStr) then curpos := -1;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
EvalStatement&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// Returns the statement list of a string of the form (terminates on EOL):&lt;br /&gt;
// &amp;quot;statement;statement;&amp;quot;&lt;br /&gt;
function RetrieveStatementList( strSource: string; var curpos : integer; var strStatementList : string ) : boolean;&lt;br /&gt;
// Returns the statement part of a string of the form (terminates statement part on ; or EOL):&lt;br /&gt;
// &amp;quot;function &amp;lt; optionally some other stuff&amp;gt;;&amp;quot;&lt;br /&gt;
function RetrieveStatement( strSource: string; var curpos : integer; var strStatement : string) : boolean;&lt;br /&gt;
// Returns the Function part of a string of the form (terminates function part on space, ; or EOL:&lt;br /&gt;
// &amp;quot;function &amp;lt; optionally some other stuff&amp;gt;;&amp;quot;&lt;br /&gt;
function RetrieveFunction( strSource : string; var curpos : integer; var strFunc, strArglist : string ) : boolean;&lt;br /&gt;
// Returns true if parsed OK and Decomposes an ifexpression into its component parts of the form:&lt;br /&gt;
// &amp;quot;(condition action )? true action : false action&amp;quot;&lt;br /&gt;
// &amp;quot;if ( a&amp;lt;&amp;gt;b )? POST : HOLD;&amp;quot;&lt;br /&gt;
function RetrieveIfExpr(strSource: string; var strCondition: string; strIfTrue, strIfFalse : string ) : boolean;&lt;br /&gt;
&lt;br /&gt;
// Returns the Function part of a string of the form (terminates function part on space, ; or EOL:&lt;br /&gt;
// &amp;quot;function &amp;lt; optionally some other stuff&amp;gt;;&amp;quot;&lt;br /&gt;
{function RetrieveFunction( strSource; var  ) : string;&lt;br /&gt;
var&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// True if ch at curpos is numeric else false&lt;br /&gt;
function bpChIsNum( strSource : string; curpos : integer ) : boolean;&lt;br /&gt;
// True if ch at curpos is A..z&lt;br /&gt;
function bpChIsAlpha( strSource : string; curpos : integer ) : boolean;&lt;br /&gt;
// Returns the index of the strSource after chars (spaces) skipped&lt;br /&gt;
function bpSkip( strDelims, strSource : string; var curpos : integer ) : integer;&lt;br /&gt;
&lt;br /&gt;
// Returns the reserved word corresponding (or VAR flag or illegal flag ) to the token&lt;br /&gt;
function bpWhichReservedWord( strSource : string ) : tbpReservedWord;&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////&lt;br /&gt;
//// DATE to String functions&lt;br /&gt;
///////////////////////////////&lt;br /&gt;
&lt;br /&gt;
// Return the Number of Days in a month (1..12) - use IsLeapYear [Borland VCL]&lt;br /&gt;
// for isleapy test.&lt;br /&gt;
function DaysInMonth( monthint : integer; isleapy : boolean ) : integer;&lt;br /&gt;
// convert a month num (1..12) to a month string&lt;br /&gt;
function MonthToStr( monthint : integer ) : string;&lt;br /&gt;
// convert a month string to the closest possible month num (1..12)&lt;br /&gt;
function StrToMonth( month : string  ) : integer;&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////////////////////&lt;br /&gt;
//////////////////////////////////////////////////////&lt;br /&gt;
/// GENERAL FILE Import/Export Functions - COMMA TEXT&lt;br /&gt;
//////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
// General Table Import Routine&lt;br /&gt;
function ImportATable( TargetTableName: string; TargetTable : TDataSet; FileName : string; DoMemFields : boolean = False ) : boolean;&lt;br /&gt;
// General Table Export Routine&lt;br /&gt;
function ExportATable(  FileName : string ; TargetTable : TDataSet; DoMemFields : boolean = False ) : boolean;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=BackLinks=&lt;br /&gt;
&lt;br /&gt;
{{#dpl: linksto={{FULLPAGENAME}} }}&lt;/div&gt;</summary>
		<author><name>Bishopj</name></author>
	</entry>
</feed>