faqts : Computers : Programming : Languages : Tse : Search

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

1 of 1 people (100%) answered Yes
Recently 1 of 1 people (100%) answered Yes

Entry

TSE: Text: Noun: Article: Indefinite: Macro: How to check use of 'a' or 'an' as indefinite article?

Nov 22nd, 2003 07:22
Knud van Eeden,


----------------------------------------------------------------------
--- Knud van Eeden --- 11 November 2003 - 07:42 pm -------------------

TSE: Text: Noun: Article: Indefinite: Macro: How to check use of 'a' 
or 'an' as indefinite article?

---


Steps: Overview:

 1. -Compile this macro

 2. -Highlight the text you want to check

 3. -Put the cursor at the position where you want to start
     checking

 4. -Press <F12> to find the next occurrence of 'a' or 'an'
     in the highlighted text

 5. -In case it might be wrong edit the text

 6. -Goto step 4.

--- cut here ---------------------------------------------------------

FORWARD INTEGER PROC FNBlockCheckCurrentIsMarkedB()

FORWARD INTEGER PROC FNBlockCheckCursorInBlockB()

FORWARD INTEGER PROC FNBlockCheckIsMarkedNotCurrentDefaultMessageB()

FORWARD INTEGER PROC FNBlockCheckIsMarkedNotCurrentMessageB( STRING 
s1 )

FORWARD INTEGER PROC FNBlockGetCurrentMarkedTypeI()

FORWARD INTEGER PROC FNInitializeNewBooleanFalseB()

FORWARD INTEGER PROC FNInitializeNewIntegerI()

FORWARD INTEGER PROC FNIntegerZeroI()

FORWARD INTEGER PROC FNLineGetColumnPositionCurrentI()

FORWARD INTEGER PROC FNMathCheckLogicAndB( INTEGER i1, INTEGER i2 )

FORWARD INTEGER PROC FNMathCheckLogicNotB( INTEGER i1 )

FORWARD INTEGER PROC FNMathCheckLogicOr3B( INTEGER i1, INTEGER i2, 
INTEGER i3 )

FORWARD INTEGER PROC FNMathCheckLogicOrB( INTEGER i1, INTEGER i2 )

FORWARD INTEGER PROC FNMathCheckNumberEqualB( INTEGER i1, INTEGER i2 )

FORWARD INTEGER PROC FNMathCheckNumberEqualZeroB( INTEGER i1 )

FORWARD INTEGER PROC FNMathCheckNumberGreaterOrEqualB( INTEGER i1, 
INTEGER i2 )

FORWARD INTEGER PROC FNMathCheckNumberIntegerGreaterOrEqualB( INTEGER 
i1, INTEGER i2 )

FORWARD INTEGER PROC FNMathGetLogicFalseB()

FORWARD INTEGER PROC FNStringCheckCaseVariableUpperDigitB( STRING s1 )

FORWARD INTEGER PROC FNStringCheckCharacterCaseDigitB( STRING s1 )

FORWARD INTEGER PROC FNStringCheckCharacterCaseLowerB( STRING s1 )

FORWARD INTEGER PROC FNStringCheckCharacterCaseUpperB( STRING s1 )

FORWARD INTEGER PROC FNStringCheckCharacterCaseUpperDigitB( STRING s1 )

FORWARD INTEGER PROC FNStringCheckCharacterCaseUpperLowerDigitB( 
STRING s1 )

FORWARD INTEGER PROC FNStringCheckEmptyB( STRING s1 )

FORWARD INTEGER PROC FNStringCheckEqualB( STRING s1, STRING s2 )

FORWARD INTEGER PROC FNStringCheckEqualNotB( STRING s1, STRING s2 )

FORWARD INTEGER PROC FNStringGetLengthI( STRING s1 )

FORWARD INTEGER PROC FNTextCheckCharacterIsAlphaDigitB()

FORWARD INTEGER PROC FNTextCheckCharacterIs_AlphaDigitNotB()

FORWARD INTEGER PROC FNTextCheckGotoWordRightB()

FORWARD INTEGER PROC FNTextCheckGotoWordRightNotB()

FORWARD INTEGER PROC FNTextCheckSearchExpressionB( STRING s1, STRING 
s2 )

FORWARD INTEGER PROC FNTokenCheckLineEndAtOrBeyondB()

FORWARD PROC Main()

FORWARD PROC PROCBlockSearchWord( STRING s1, STRING s2 )

FORWARD PROC PROCBlockSearchWordSub( STRING s1, STRING s2 )

FORWARD PROC PROCTextGotoWordRight()

FORWARD PROC PROCTextGotoWordRightAlphaDigitLineBeyond()

FORWARD PROC PROCTextGotoWordRightLineBeyond()

FORWARD PROC PROCWarn( STRING s1 )

FORWARD PROC PROCWarnCons5( STRING s1, STRING s2, STRING s3, STRING 
s4, STRING s5 )

FORWARD STRING PROC FNInitializeNewStringS()

FORWARD STRING PROC FNStringGetArticleIndefiniteNounEnglishS( STRING 
s1 )

FORWARD STRING PROC FNStringGetAsciiToCharacterS( INTEGER i1 )

FORWARD STRING PROC FNStringGetCharacterS( STRING s1, INTEGER i1 )

FORWARD STRING PROC FNStringGetCharacterSymbolCentralS( INTEGER i1 )

FORWARD STRING PROC FNStringGetCharacterSymbolSpaceS()

FORWARD STRING PROC FNStringGetConcatSeparatorS( STRING s1, STRING s2, 
STRING s3 )

FORWARD STRING PROC FNStringGetCons3S( STRING s1, STRING s2, STRING 
s3 )

FORWARD STRING PROC FNStringGetCons4S( STRING s1, STRING s2, STRING 
s3, STRING s4 )

FORWARD STRING PROC FNStringGetCons5S( STRING s1, STRING s2, STRING 
s3, STRING s4, STRING s5 )

FORWARD STRING PROC FNStringGetConsS( STRING s1, STRING s2 )

FORWARD STRING PROC FNStringGetEmptyS()

FORWARD STRING PROC FNStringGetMidStringS( STRING s1, INTEGER i1, 
INTEGER i2 )

FORWARD STRING PROC FNTextGetCharacterCurrentS()

FORWARD STRING PROC FNTextGetS( INTEGER i1, INTEGER i2 )

// --- MAIN --- //

PROC Main()

 PROCBlockSearchWord( "{an}|{a}", "ixw" )

END

<F12> Main()

// --- LIBRARY --- //

// library: block: search: word (filenamemacro=searblsw.s) [kn, ni, 
fr, 21-11-2003 23:53:59]

PROC PROCBlockSearchWord( STRING searchS, STRING searchoptioninitS )

 // e.g. PROC Main()

 // e.g.  PROCBlockSearchWord( "{an}|{a}", "ixw" )

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 //

 // This is an example of a text.

 STRING searchoptionS[255] = searchoptioninitS + "l"

 IF FNBlockCheckIsMarkedNotCurrentDefaultMessageB() RETURN() ENDIF // 
return from the current procedure if no block is marked

 // PROCTextSavePositionStackPush()

 // GotoBlockBegin()

 WHILE FNTextCheckSearchExpressionB( searchS, searchoptionS ) AND 
FNBlockCheckCursorInBlockB()

  PROCBlockSearchWordSub( searchS, searchoptionS )

 ENDWHILE

 // PROCTextRemovePositionStackPop()

END

// library: block: mark: if NO block in CURRENT file marked, give a 
default message (filenamemacro=checbldm.s) [kn, ri, zo, 17-10-1999 
08:21:38]

INTEGER PROC FNBlockCheckIsMarkedNotCurrentDefaultMessageB()

 // e.g. PROC Main()

 // e.g.  Message( FNBlockCheckIsMarkedNotCurrentDefaultMessageB
() ) // gives e.g. TRUE

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNBlockCheckIsMarkedNotCurrentMessageB( "No block is marked 
in current file. First mark a block" ) )

END

// library: text: search: return true if found 
(filenamemacro=searteex.s) [kn, ni, vr, 07-08-1998 19:36:39]

INTEGER PROC FNTextCheckSearchExpressionB( STRING searchS, STRING 
searchoptionS )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  STRING searchoptionS[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "text: search: string = ", "test" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  searchoptionS = FNStringGetInputS( "text: search: string 
= ", "test" )

 // e.g.  IF FNEscapeB( searchoptionS ) RETURN() ENDIF

 // e.g.  Message( FNTextCheckSearchExpressionB( s, 
searchoptionS ) ) // gives e.g. TRUE when the string is found in the 
text

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( LFind( searchS, searchoptionS ) )

END

// library: block: check: cursor: is cursor in block? (Determines 
Whether Cursor is Inside a Marked Block) N    * 
(filenamemacro=checblic.s) [kn, ri, ma, 29-03-1999 20:24:05]i

INTEGER PROC FNBlockCheckCursorInBlockB()

 // e.g. PROC Main()

 // e.g.  Message( FNBlockCheckCursorInBlockB() ) // gives TRUE or 
FALSE depending on if the cursor is in the highlighted blcok, or not

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( IsCursorInBlock() )

END

// library: block: search: pattern [kn, ni, fr, 21-11-2003 23:55:03]

PROC PROCBlockSearchWordSub( STRING searchS, STRING searchoptionS )

 STRING s[255] = Lower( GetWord() )

 STRING nextS[255] = ""

 // PROCTextGotoWordRightAlphaLineBeyond()

 PROCTextGotoWordRightAlphaDigitLineBeyond()

 nextS = GetWord()

 // Warn( nextS )

 IF FNStringCheckEqualNotB( s, FNStringGetArticleIndefiniteNounEnglishS
( nextS ) )

  PROCWarnCons5( "indefinite article", s, "possibly not 
correct", "for", nextS )

  // KillPosition()

  Halt

 ENDIF

END

// library: block: mark: if NO block in CURRENT file marked, give a 
message (filenamemacro=checblcn.s) [kn, ri, zo, 17-10-1999 08:21:38]

INTEGER PROC FNBlockCheckIsMarkedNotCurrentMessageB( STRING s )

 // e.g. PROC Main()

 // e.g.  IF FNBlockCheckIsMarkedNotCurrentMessageB( "No block is 
marked in current file" ) RETURN() ENDIF // return from the current 
procedure if no block is marked

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 INTEGER blockcurrentismarkedB = FNBlockCheckCurrentIsMarkedB()

 IF FNMathCheckLogicNotB( blockcurrentismarkedb ) // block is not 
marked

  PROCWarn( s )

 ENDIF

 RETURN( FNMathCheckLogicNotB( blockcurrentismarkedB ) )

END

// library: text: goto: word: right: alpha: digit: line: beyond 
(filenamemacro=gototelj.s) [kn, ni, sa, 22-11-2003  2:48:23]

PROC PROCTextGotoWordRightAlphaDigitLineBeyond()

 // e.g. PROC Main()

 // e.g.  PROCTextGotoWordRightAlphaDigitLineBeyond()

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 PROCTextGotoWordRightLineBeyond()

 WHILE FNTextCheckCharacterIs_AlphaDigitNotB()

  PROCTextGotoWordRight()

 ENDWHILE

END

// library: string: equal: are two given strings not equal? 
(filenamemacro=checsten.s) [kn, ri, tu, 10-07-2001 12:48:46]

INTEGER PROC FNStringCheckEqualNotB( STRING s1, STRING s2 )

 // e.g. PROC Main()

 // e.g.  STRING s1[255] = FNInitializeNewStringS()

 // e.g.  STRING s2[255] = FNInitializeNewStringS()

 // e.g.  s1 = FNStringGetInputS( "string: check: equal: not: first 
string = ", "a" )

 // e.g.  IF FNEscapeB( s1 ) RETURN() ENDIF

 // e.g.  s2 = FNStringGetInputS( "string: check: equal: not: second 
string = ", "b" )

 // e.g.  IF FNEscapeB( s2 ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckEqualNotB( s1, s2 ) ) // gives e.g. 
TRUE when string1 is not equal to string2

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 //

 // variation: RETURN( s1 != s2 )

 RETURN( FNMathCheckLogicNotB( FNStringCheckEqualB( s1, s2 ) ) )

END

// library: string: get: article: indefinite: noun: english 
(filenamemacro=getstnen.s) [kn, ni, tu, 11-11-2003 19:23:17]

STRING PROC FNStringGetArticleIndefiniteNounEnglishS( STRING wordS )

 // e.g. PROC Main()

 // e.g.  Warn( FNStringGetArticleIndefiniteNounEnglishS
( "uniform" ) ) // gives e.g. "a"

 // e.g.  Warn( FNStringGetArticleIndefiniteNounEnglishS( "SUV" ) ) // 
gives e.g. "an"

 // e.g.  Warn( FNStringGetArticleIndefiniteNounEnglishS
( "elephant" ) ) // gives e.g. "an"

 // e.g.  Warn( FNStringGetArticleIndefiniteNounEnglishS( "RGB" ) ) // 
gives e.g. "an"

 // e.g.  Warn( FNStringGetArticleIndefiniteNounEnglishS( "dog" ) ) // 
gives e.g. "a"

 // e.g.  Warn( FNStringGetArticleIndefiniteNounEnglishS( "one" ) ) // 
gives e.g. decision to user (can be 'a' or 'an')

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 STRING firstS[255] = FNInitializeNewStringS()

 STRING s[255] = FNInitializeNewStringS()

 INTEGER nounlengthI = FNInitializeNewIntegerI()

 // IF FNStringCheckCaseUpperB( wordS ) // if an acronym, thus all 
characters in uppercase, then take off only first character

 IF FNStringCheckCaseVariableUpperDigitB( wordS ) // if an acronym or 
all uppercase with digits, thus all characters in uppercase, then take 
off only first character

  firstS = wordS[1]

 ELSE // else take off the first part of the word separated by spaces

  firstS = GetToken( wordS, " ", 1 )

 ENDIF

 nounlengthI = Length( firstS )

 s = firstS[1] // take off the first character of this first word or 
character

 s = Lower( s ) // make it lower case to simplify the comparison to 
all lower cases

 IF s == "" RETURN( "?: do not enter empty string" ) ENDIF

 // Warn( wordS ) // for debugging purposes only. Remove later

 // Warn( s ) // for debugging purposes only. Remove later

 IF s == "a" RETURN( "an" ) ENDIF

 IF s == "b" RETURN( "a" ) ENDIF

 IF s == "c" RETURN( "a" ) ENDIF

 IF s == "d" RETURN( "a" ) ENDIF

 IF s == "e" RETURN( "an" ) ENDIF

 IF Lower( wordS ) == "ftp" RETURN( "an" ) ENDIF

 IF ( s == "f" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "f" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF s == "g" RETURN( "a" ) ENDIF

 IF Lower( wordS ) == "hour" RETURN( "an" ) ENDIF

 IF Lower( wordS ) == "http" RETURN( "an" ) ENDIF

 IF ( s == "h" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "h" ) AND ( nounlengthI > 1 ) RETURN( "can be 'a' or 'an'. 
Please decide further yourself" ) ENDIF

 IF s == "i" RETURN( "an" ) ENDIF

 IF s == "j" RETURN( "a" ) ENDIF

 IF s == "k" RETURN( "a" ) ENDIF

 IF ( s == "l" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "l" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF ( s == "m" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "m" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF ( s == "n" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "n" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF ( s == "o" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF Lower( wordS ) == "one" RETURN( "a" ) ENDIF

 IF ( s == "o" ) AND ( nounlengthI > 1 ) RETURN( "an" ) ENDIF

 IF s == "p" RETURN( "a" ) ENDIF

 IF s == "q" RETURN( "a" ) ENDIF

 IF ( s == "r" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "r" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF ( s == "s" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "s" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF ( s == "t" ) RETURN( "a" ) ENDIF

 IF Lower( wordS ) == "uniform" RETURN( "a" ) ENDIF

 IF Lower( wordS ) == "update" RETURN( "an" ) ENDIF

 IF ( s == "u" ) AND ( nounlengthI == 1 ) RETURN( "a" ) ENDIF

 // IF ( s == "u" ) AND ( nounlengthI > 1 ) RETURN( "can be 'a' 
or 'an'. Please decide further yourself" ) ENDIF

 IF ( s == "u" ) AND ( nounlengthI > 1 ) RETURN( "an" ) ENDIF // 
almost always 'an'

 IF ( s == "v" ) RETURN( "a" ) ENDIF

 IF ( s == "w" ) RETURN( "a" ) ENDIF

 IF ( s == "x" ) AND ( nounlengthI == 1 ) RETURN( "an" ) ENDIF

 IF ( s == "x" ) AND ( nounlengthI > 1 ) RETURN( "a" ) ENDIF

 IF ( s == "y" ) RETURN( "a" ) ENDIF

 IF ( s == "z" ) RETURN( "a" ) ENDIF

 //

 IF ( s == "1" ) RETURN( "a" ) ENDIF

 IF ( s == "2" ) RETURN( "a" ) ENDIF

 IF ( s == "3" ) RETURN( "a" ) ENDIF

 IF ( s == "4" ) RETURN( "a" ) ENDIF

 IF ( s == "5" ) RETURN( "a" ) ENDIF

 IF ( s == "6" ) RETURN( "a" ) ENDIF

 IF ( s == "7" ) RETURN( "a" ) ENDIF

 IF ( s == "8" ) RETURN( "an" ) ENDIF

 IF ( s == "9" ) RETURN( "a" ) ENDIF

 IF ( s == "0" ) RETURN( "a" ) ENDIF

 RETURN( "character currently not known, please adapt this table" )

END

// library: error: warning: give a warning message via 5 strings [kn, 
ri, su, 29-07-2001 18:57:23]

PROC PROCWarnCons5( STRING s1, STRING s2, STRING s3, STRING s4, STRING 
s5 )

 PROCWarn( FNStringGetCons5S( s1, s2, s3, s4, s5 ) )

END

// library: block: mark: is a block marked in CURRENT file? 
(filenamemacro=checblim.s) [kn, zoe, do, 20-05-1999 12:41:49]

INTEGER PROC FNBlockCheckCurrentIsMarkedB()

 // e.g. PROC Main()

 // e.g.  Message( FNBlockCheckCurrentIsMarkedB() ) // gives TRUE if a 
block is marked in the current file

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNMathCheckLogicNotB( FNMathCheckNumberEqualZeroB( 
FNBlockGetCurrentMarkedTypeI() ) ) )

END

// library: math: check: logic: not (filenamemacro=checmaln.s) [kn, 
ri, tu, 15-05-2001 16:54:21]

INTEGER PROC FNMathCheckLogicNotB( INTEGER B )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "math: check: logic: not: number 
= ", "1" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNMathCheckLogicNotB( FNStringGetToIntegerI( s ) ) )

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( NOT B )

END

// library: error: warning: give a warning message [kn, zoe, wo, 09-06-
1999 22:11:07]

PROC PROCWarn( STRING s )

 // e.g. <F12> PROCWarn( "you have forgotten to input a value" )

 Warn( s )

END

// library: text: goto: word: right: line: beyond 
(filenamemacro=gototeli.s) [kn, ni, sa, 22-11-2003  1:09:19]

PROC PROCTextGotoWordRightLineBeyond()

 // e.g. PROC Main()

 // e.g.  PROCTextGotoWordRightLineBeyond()

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 PROCTextGotoWordRight()

 IF FNTokenCheckLineEndAtOrBeyondB()

  REPEAT

   Down()

   BegLine()

  UNTIL PosFirstNonWhite() <> 0

  GotoPos( PosFirstNonWhite() )

 ENDIF

END

// library: text: check: character: is: alpha: digit: not 
(filenamemacro=chectedn.s) [kn, ni, sa, 22-11-2003  2:44:05]

INTEGER PROC FNTextCheckCharacterIs_AlphaDigitNotB()

 // e.g. PROC Main()

 // e.g.  Message( FNTextCheckCharacterIs_AlphaDigitNotB() ) // gives 
e.g. TRUE if current character is not an alphanumeric character or a 
digit

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNMathCheckLogicNotB( FNTextCheckCharacterIsAlphaDigitB() ) )

END

// library: movement: word: move to the beginning of the next word (if 
necessary on the next line) (filenamemacro=gotowong.s) [kn, zoe, ma, 
14-06-1999 21:51:17]

PROC PROCTextGotoWordRight()

 // e.g. PROC Main()

 // e.g.  PROCTextGotoWordRight()

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 IF FNTextCheckGotoWordRightNotB()

  // PROCWarn( "text: goto: word: going to the next word was not 
successful" )

 ENDIF

END

// library: string: equal: are two given strings equal? (stored 
in 'checstcf.s') [kn, zoe, wo, 04-10-2000 18:23:27]

INTEGER PROC FNStringCheckEqualB( STRING s1, STRING s2 )

 // e.g. PROC Main()

 // e.g.  STRING s1[255] = FNInitializeNewStringS()

 // e.g.  STRING s2[255] = FNInitializeNewStringS()

 // e.g.  s1 = FNStringGetInputS( "string: check: equal: first string 
= ", "a" )

 // e.g.  IF FNEscapeB( s1 ) RETURN() ENDIF

 // e.g.  s2 = FNStringGetInputS( "string: check: equal: second string 
= ", "a" )

 // e.g.  IF FNEscapeB( s2 ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckEqualB( s1, s2 ) ) // gives e.g. TRUE 
when string1 is equal to string2

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 //

 // // <F12> PROCMessage( FNStringCheckEqualB( "knud", "knud" ) ) // 
gives TRUE

 // // <F12> PROCMessage( FNStringCheckEqualB( "knud", "van" ) ) // 
gives FALSE

 RETURN( s1 == s2 )

END

// library: string: initialize [kn, ri, mo, 09-07-2001 12:00:07]

STRING PROC FNInitializeNewStringS()

 RETURN( FNStringGetEmptyS() )

END

// library: math: number: integer: initialize [kn, noot, mo, 09-07-
2001 11:59:54]

INTEGER PROC FNInitializeNewIntegerI()

 RETURN( FNIntegerZeroI() )

END

// library: string: check: case: upper: digit 
(filenamemacro=checstud.s) [kn, ni, sa, 22-11-2003  2:53:04]

INTEGER PROC FNStringCheckCaseVariableUpperDigitB( STRING s )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: character: case: upper: 
string = ", "THISISANUPPERDIGITCASESTRING12342" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckCaseVariableUpperDigitB( s ) ) // 
gives e.g. TRUE when all characters of the given string are upper case

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 INTEGER T = FNInitializeNewIntegerI()

 INTEGER lastB = FNInitializeNewBooleanFalseB()

 INTEGER upperdigitB = FNInitializeNewBooleanFalseB()

 INTEGER lengthT = FNStringGetLengthI( s )

 upperdigitB = FNStringCheckCharacterCaseUpperB( FNStringGetCharacterS
( s, 1 ) )

 IF FNMathCheckLogicNotB( upperdigitB ) RETURN( FNMathGetLogicFalseB
() ) ENDIF

 T = 2 - 1

 REPEAT

  T = T + 1

  upperdigitB = FNStringCheckCharacterCaseUpperDigitB( 
FNStringGetCharacterS( s, T ) )

  lastB = FNMathCheckNumberIntegerGreaterOrEqualB( T, lengthT )

 UNTIL FNMathCheckLogicOrB( FNMathCheckLogicNotB( upperdigitB ), 
lastB )

 RETURN( FNMathCheckLogicAndB( lastB, upperdigitB ) ) // as you tested 
all characters, then if last character reached and this is still upper 
case, then all the characters must be upper

END

// library: string: concatenation: 5 strings [kn, zoe, fr, 17-11-2000 
13:55:03]

STRING PROC FNStringGetCons5S( STRING s1, STRING s2, STRING s3, STRING 
s4, STRING s5 )

 RETURN( FNStringGetConsS( FNStringGetCons4S( s1, s2, s3, s4 ), s5 ) )

END

// library: math: number equal to ZERO? [kn, ri, th, 03-05-2001 
14:19:57]

INTEGER PROC FNMathCheckNumberEqualZeroB( INTEGER x )

 RETURN( FNMathCheckNumberEqualB( x, 0 ) )

END

// library: block: mark: type: return the type of the block marked in 
the current file (Determines Whether a Block is Marked in Current 
File, 0 if no block, else _INCLUSIVE_, _NON_INCLUSIVE_, _LINE_, 
_COLUMN_) N (filenamemacro=getblmty.s) [kn, ri, zo, 17-10-1999 
07:17:38]

INTEGER PROC FNBlockGetCurrentMarkedTypeI()

 // e.g. PROC Main()

 // e.g.  Message( FNBlockGetCurrentMarkedTypeI() ) // gives e.g. 1

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( IsBlockInCurrFile() )

END

// library: token: check: line: end: at: or: beyond 
(filenamemacro=chectoob.s) [kn, ni, su, 25-05-2003 02:33:26]

INTEGER PROC FNTokenCheckLineEndAtOrBeyondB()

 // e.g. PROC Main()

 // e.g.  Message( FNTokenCheckLineEndAtOrBeyondB() ) // gives 
e.g. ...""

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 INTEGER I = CurrChar()

 RETURN( ( I == _AT_EOL_ ) OR ( I == _BEYOND_EOL_ ) )

END

// library: text: check: character: is: alpha: digit 
(filenamemacro=chectead.s) [kn, ni, sa, 22-11-2003  2:44:08]

INTEGER PROC FNTextCheckCharacterIsAlphaDigitB()

 // e.g. PROC Main()

 // e.g.  Message( FNTextCheckCharacterIsAlphaDigitB() ) // gives e.g. 
TRUE if current character is an alphanumeric character or a digit

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNStringCheckCharacterCaseUpperLowerDigitB( 
FNTextGetCharacterCurrentS() ) )

END

// library: text: check: goto: word: next: line: beyond: not 
(filenamemacro=chectebn.s) [kn, ni, fr, 02-05-2003 19:02:19]

INTEGER PROC FNTextCheckGotoWordRightNotB()

 // e.g. PROC Main()

 // e.g.  Message( FNTextCheckGotoWordRightNotB() ) // gives e.g. TRUE 
when cursor can not move to the begin of the word right of it

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNMathCheckLogicNotB( FNTextCheckGotoWordRightB() ) )

END

// library: string: empty: return an empty string [kn, ri, za, 20-05-
2000 20:11:03]

STRING PROC FNStringGetEmptyS()

 RETURN( "" )

END

// library: integer: zero [kn, ri, we, 06-02-2002 21:12:47]

INTEGER PROC FNIntegerZeroI()

 RETURN( 0 )

END

// library: math: logic: false: initialize [kn, ri, su, 22-07-2001 
15:58:06]

INTEGER PROC FNInitializeNewBooleanFalseB()

 RETURN( FNMathGetLogicFalseB() )

END

// library: string: line: length: what is the length 
(filenamemacro=getstgle.s) [kn, ri, wo, 25-11-1998 20:20:58]

INTEGER PROC FNStringGetLengthI( STRING s )

 // e.g. PROC Main()

 // e.g.  STRING s1[255] = FNInitializeNewStringS()

 // e.g.  s1 = FNStringGetInputS( "string: line: length: string 
= ", "this is a test" )

 // e.g.  IF FNEscapeB( s1 ) RETURN() ENDIF

 // e.g.  Message( FNStringGetLengthI( s1 ) ) // gives e.g. 14

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 //

 // e.g. // <F12> Message( FNStringGetLengthI( "knud" ) ) // gives 4

 // e.g. // <F12> Message( FNStringGetLengthI( "the" ) ) // gives 3

 RETURN( Length( s ) )

END

// library: string: character: case: upper: is current character upper 
case? (filenamemacro=checstcu.s) [kn, zoe, wo, 30-06-1999 00:46:18]

INTEGER PROC FNStringCheckCharacterCaseUpperB( STRING kS )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: check: case: character: 
case: upper: character = ", "A" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckCharacterCaseUpperB( s ) ) // gives 
e.g. TRUE when given character is upper case

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 // e.g.

 // e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseUpperB
( "A" ) ) // gives TRUE

 // e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseUpperB
( "a" ) ) // gives FALSE

 RETURN( kS IN 'A'..'Z' )

END

// library: string: get: character: token: return the character in the 
given string on the given position [kn, ri, vr, 25-12-1998 23:35:43]

STRING PROC FNStringGetCharacterS( STRING s, INTEGER positionT )

 // e.g. FNStringGetCharacterS( "knud", 3 ) gives "u"

 // variation: RETURN( s[ positionT ] ) // TSE only

 RETURN( FNStringGetMidStringS( s, positionT, 1 ) )

END

// library: math: logic: false: wrapper [kn, ri, su, 22-07-2001 
15:43:08]

INTEGER PROC FNMathGetLogicFalseB()

 RETURN( FALSE )

END

// library: string: check: character: case: upper: digit 
(filenamemacro=checstue.s) [kn, ni, sa, 22-11-2003  2:56:05]

INTEGER PROC FNStringCheckCharacterCaseUpperDigitB( STRING s )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: check: character: case: is 
this not a character in A-Z0-9: character = ", "A" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckCharacterCaseUpperDigitB( s ) ) // 
gives e.g. FALSE when the character is a lowercase character

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNMathCheckLogicOrB( FNStringCheckCharacterCaseUpperB( s ), 
FNStringCheckCharacterCaseDigitB( s ) ) )

END

// library: math: number: compare: are two given numbers greater or 
equal? (filenamemacro=checmaoe.s) [kn, ri, fr, 28-09-2001 13:46:35]

INTEGER PROC FNMathCheckNumberIntegerGreaterOrEqualB( INTEGER x1, 
INTEGER x2 )

 // e.g. PROC Main()

 // e.g.  Message( FNMathCheckNumberIntegerGreaterOrEqualB( 2, 
1 ) ) // gives e.g. TRUE

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNMathCheckNumberGreaterOrEqualB( x1, x2 ) )

END

// library: math: check: logic: or: 2 arguments 
(filenamemacro=checmalo.s) [kn, ri, tu, 15-05-2001 16:54:17]

INTEGER PROC FNMathCheckLogicOrB( INTEGER B1, INTEGER B2 )

 // e.g. PROC Main()

 // e.g.  STRING s1[255] = FNInitializeNewStringS()

 // e.g.  STRING s2[255] = FNInitializeNewStringS()

 // e.g.  s1 = FNStringGetInputS( "math: check: logic: or: number1 
= ", "1" )

 // e.g.  IF FNEscapeB( s1 ) RETURN() ENDIF

 // e.g.  s2 = FNStringGetInputS( "math: check: logic: or: number2 
= ", "1" )

 // e.g.  IF FNEscapeB( s2 ) RETURN() ENDIF

 // e.g.  Message( FNMathCheckLogicOrB( FNStringGetToIntegerI( s1 ), 
FNStringGetToIntegerI( s2 ) ) ) // gives e.g. ...""

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( B1 OR B2 )

END

// library: math: check: logic: and (filenamemacro=checmala.s) [kn, 
ri, tu, 15-05-2001 16:54:21]

INTEGER PROC FNMathCheckLogicAndB( INTEGER B1, INTEGER B2 )

 // e.g. PROC Main()

 // e.g.  STRING s1[255] = FNInitializeNewStringS()

 // e.g.  STRING s2[255] = FNInitializeNewStringS()

 // e.g.  s1 = FNStringGetInputS( "math: check: logic: and: number1 
= ", "1" )

 // e.g.  IF FNEscapeB( s1 ) RETURN() ENDIF

 // e.g.  s2 = FNStringGetInputS( "math: check: logic: and: number2 
= ", "1" )

 // e.g.  IF FNEscapeB( s2 ) RETURN() ENDIF

 // e.g.  Message( FNMathCheckLogicAndB( FNStringGetToIntegerI( s1 ), 
FNStringGetToIntegerI( s2 ) ) ) // gives e.g. ...""

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( B1 AND B2 )

END

// library: string: concatenation: concatenation 2 words to 1 word 
(separated by a space) [kn, ri, wo, 25-11-1998 20:15:03]

STRING PROC FNStringGetConsS( STRING s1, STRING s2 ) // version with 
test if string empty

 // e.g. <F12> PROCMessage( FNStringGetConsS( "knud", "van" ) )

 RETURN( FNStringGetConcatSeparatorS( s1, s2, 
FNStringGetCharacterSymbolSpaceS() ) )

END

// library: string: concatenation: 4 strings [kn, zoe, fr, 17-11-2000 
13:54:56]

STRING PROC FNStringGetCons4S( STRING s1, STRING s2, STRING s3, STRING 
s4 )

 RETURN( FNStringGetConsS( FNStringGetCons3S( s1, s2, s3 ), s4 ) )

END

// library: math: number: compare: equal: number1 EQUAL TO number2? 
[kn, ri, th, 03-05-2001 12:51:27]

INTEGER PROC FNMathCheckNumberEqualB( INTEGER x1, INTEGER x2 )

 RETURN( x1 == x2 )

END

// library: string: check: character: case: is this a character in A-
Za-z0-9? (filenamemacro=checstld.s) [kn, ri, sa, 04-05-2002 23:05:45]

INTEGER PROC FNStringCheckCharacterCaseUpperLowerDigitB( STRING s )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: check: character: case: is 
this a character in A-Za-z0-9: character = ", "A" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckCharacterCaseUpperLowerDigitB( 
s ) ) // gives e.g. TRUE when the character is a digit, an uppercase 
or a lowercase character

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNMathCheckLogicOr3B( FNStringCheckCharacterCaseUpperB( s ), 
FNStringCheckCharacterCaseLowerB( s ), FNStringCheckCharacterCaseDigitB
( s ) ) )

END

// library: string: character: token: get: current: string: return the 
current character as a string (filenamemacro=getteccv.s) [kn, ri, zo, 
16-05-1999 19:18:17]

STRING PROC FNTextGetCharacterCurrentS()

 // e.g. PROC Main()

 // e.g.  Message( FNTextGetCharacterCurrentS() ) // gives e.g. "A" if 
ASCII value current character is 65

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNTextGetS( FNLineGetColumnPositionCurrentI(), 1 ) )

 // RETURN( FNTextGetCharacterCentralS( FNTextGetCharacterCurrentI
() ) ) // do not use

END

// library: movement: word: goto the beginning of the next word 
(filenamemacro=gototele.s) [kn, zoe, ma, 14-06-1999 21:51:17]

INTEGER PROC FNTextCheckGotoWordRightB()

 // e.g. PROC Main()

 // e.g.  Message( FNTextCheckGotoWordRightB() ) // gives e.g. ...""

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( WordRight() )

END

// library: string: get: word: token: middle: return a given integer 
amount of characters from the a given startposition (=MID$ in BASIC) 
(filenamemacro=getstmid.s) [kn, ri, di, 13-10-1998 20:29:00]

STRING PROC FNStringGetMidStringS( STRING s, INTEGER beginT, INTEGER 
totalT )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  STRING positionbeginS[255] = FNInitializeNewStringS()

 // e.g.  STRING charactertotalS[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: get: MIDSTRING: string 
= ", "testing" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  positionbeginS = FNStringGetInputS( "string: get: MIDSTRING: 
beginposition = ", "2" )

 // e.g.  IF FNEscapeB( positionbeginS ) RETURN() ENDIF

 // e.g.  charactertotalS = FNStringGetInputS( "string: get: 
MIDSTRING: character total = ", "3" )

 // e.g.  IF FNEscapeB( charactertotalS ) RETURN() ENDIF

 // e.g.  Message( FNStringGetMidStringS( s, FNStringGetToIntegerI( 
positionbeginS ), FNStringGetToIntegerI( charactertotalS ) ) )

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 //

 //

 // Message( FNStringGetMidStringS( "knud", 2, 3 ) ) //  gives "nud"

 // Message( FNStringGetMidStringS( "knud", 3, 2 ) ) //  gives "ud"

 RETURN( SubStr( s, beginT, totalT ) )

END

// library: string: check: character: case: digit: is this a single 
digit 0-9? (filenamemacro=checstcd.s) [kn, zoe, di, 14-12-1999 
19:31:13]

INTEGER PROC FNStringCheckCharacterCaseDigitB( STRING s )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: check: character: case: 
digit: is this a single digit 0-9: character = ", "9" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckCharacterCaseDigitB( s ) ) // gives 
e.g. TRUE when given character is a digit 0,1,2,3,4,5,6,7,8,9

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 // e.g.

 // e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseDigitB
( "3" ) ) // gives TRUE

 // e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseDigitB
( "k" ) ) // gives FALSE

 RETURN( s IN '0'..'9' )

END

// library: math: number: compare: number1 GREATER THAN or EQUAL TO 
number2? [kn, ri, th, 03-05-2001 12:55:02]

INTEGER PROC FNMathCheckNumberGreaterOrEqualB( INTEGER x1, INTEGER x2 )

 RETURN( x1 >= x2 )

END

// library: string: concatenation: concatenate 2 words to 1 word, 
separated by separator S [kn, zoe, do, 01-07-1999 01:33:18]

STRING PROC FNStringGetConcatSeparatorS( STRING s1, STRING s2, STRING 
separatorS )

 IF FNStringCheckEmptyB( s1 ) RETURN( s2 ) ENDIF

 IF FNStringCheckEmptyB( s2 ) RETURN( s1 ) ENDIF

 RETURN( s1 + separatorS + s2 ) // leave this like this. Do not call a 
function, as this is a primitive function, you will get into a 
recursive loop, and get stack overflow

END

// library: string: get: character: symbol: " " 
(filenamemacro=getstssp.s) [kn, zoe, we, 25-10-2000 01:33:39]

STRING PROC FNStringGetCharacterSymbolSpaceS()

 // e.g. PROC Main()

 // e.g.  Message( FNStringGetCharacterSymbolSpaceS() ) // gives 
e.g. ...""

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( FNStringGetCharacterSymbolCentralS( 32 ) )

END

// library: string: concatenation: 3 strings [kn, zoe, fr, 17-11-2000 
13:52:07]

STRING PROC FNStringGetCons3S( STRING s1, STRING s2, STRING s3 )

 RETURN( FNStringGetConsS( FNStringGetConsS( s1, s2 ), s3 ) )

END

// library: math: check: logic: or: 3 arguments [kn, ri, th, 25-10-
2001 04:29:17]

INTEGER PROC FNMathCheckLogicOr3B( INTEGER B1, INTEGER B2, INTEGER B3 )

 // RETURN( FNMathCheckLogicOrB( FNMathCheckLogicOrB( B1, B2 ), 
B3 ) ) // possibly not always equivalent. Do not use

 RETURN( B1 OR B2 OR B3 )

END

// library: string: check: case: character: case: lower: is current 
character lower case? (filenamemacro=checstcl.s) [kn, zoe, wo, 30-06-
1999 00:46:18]

INTEGER PROC FNStringCheckCharacterCaseLowerB( STRING kS )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInitializeNewStringS()

 // e.g.  s = FNStringGetInputS( "string: check: case: character: 
case: lower: character = ", "a" )

 // e.g.  IF FNEscapeB( s ) RETURN() ENDIF

 // e.g.  Message( FNStringCheckCharacterCaseLowerB( s ) ) // gives 
e.g. TRUE when given character is lower case

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 // e.g.

 // e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseLowerB
( "a" ) ) // gives TRUE

 // e.g. // <F12> PROCMessage( FNStringCheckCharacterCaseLowerB
( "A" ) ) // gives FALSE

 RETURN( kS IN 'a'..'z' )

END

// library: text: get: retrieves text from current line of current 
file) r    gettext(integer pos, integer len)* [kn, zoe, wo, 16-06-1999 
01:06:55]

STRING PROC FNTextGetS( INTEGER positionstartI, INTEGER 
charactertotalI )

 RETURN( GetText( positionstartI, charactertotalI ) )

END

// library: line: position: character position: return the current 
character position (=column number) (get the current position on the 
current line) (filenamemacro=getlipcu.s) [kn, ni, ma, 03-08-1998 
13:35:20]

INTEGER PROC FNLineGetColumnPositionCurrentI()

 // e.g. PROC Main()

 // e.g.  Message( FNLineGetColumnPositionCurrentI() ) // gives e.g. 
15 when the current column position of the cursor is on the 15th 
character

 // e.g. END

 // e.g.

 // e.g. <F12> Main()

 RETURN( CurrPos() )

END

// library: string: empty: is given string empty? [kn, ri, za, 20-05-
2000 20:11:08]

INTEGER PROC FNStringCheckEmptyB( STRING s )

 RETURN( FNStringCheckEqualB( s, FNStringGetEmptyS() ) )

END

// library: string: get: character: symbol: central [kn, ri, sa, 07-07-
2001 22:35:39]

STRING PROC FNStringGetCharacterSymbolCentralS( INTEGER I )

 RETURN( FNStringGetAsciiToCharacterS( I ) )

END

// library: string: get: character: convert: ASCII: given the ASCII 
value, what is the corresponding character? (Get Single Character 
Equivalent of an Integer). Syntax: Chr(INTEGER i)* [kn, zoe, wo, 16-06-
1999 01:06:51]

STRING PROC FNStringGetAsciiToCharacterS( INTEGER asciiI )

 // e.g. <F12> PROCMessage( FNStringGetAsciiToCharacterS( 65 ) ) // 
gives "A"

 // e.g. // <F12> PROCMessage( FNStringGetAsciiToCharacterS( 66 ) ) // 
gives "B"

 // e.g. // <F12> PROCMessage( FNStringGetAsciiToCharacterS( 
100 ) ) // gives "d"

 RETURN( Chr( asciiI ) )

END

--- cut here ---------------------------------------------------------

---
---

Internet: see also:

---

TSE: Text: Noun: Article: Algorithm: Which algorithm to use 'a' 
or 'an' as indefinite article?
http://www.faqts.com/knowledge_base/view.phtml/aid/26356/fid/865

----------------------------------------------------------------------