faqts : Computers : Programming : Languages : Tse : Clipboard : TSE

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

Entry

sub3: Using version 2.0 of TSE, is there a way to copy and paste to Windows applications?

Nov 8th, 2001 16:04
Knud van Eeden,


[Internet: see: 
http://www.faqts.com/knowledge_base/view.phtml/aid/12621/fid/900]

ad 3. the 'paste to Windows clipboard' macro for TSE v2.5 for DOS:
   (save and compile this macro as 'clipwpas.s')

---

FORWARD PROC Main()

FORWARD PROC PROCClipboardWPaste()

FORWARD PROC PROCPasteFromWinClip()

FORWARD INTEGER PROC FNOperatingSystemWindowsNt2000XpB()

FORWARD PROC PROCClipboardWPasteTseDosGetDefault()

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

FORWARD INTEGER PROC FNOperatingSystemWindowsNtB()

FORWARD INTEGER PROC FNOperatingSystemWindows2000B()

FORWARD INTEGER PROC FNOperatingSystemWindowsXpB()

FORWARD PROC PROCClipboardWPasteTseDosGet( STRING s1, STRING s2 )

FORWARD STRING PROC FNFilenameTemporaryClipboardWindowsS()

FORWARD INTEGER PROC FNMathLogicOrB( INTEGER i1, INTEGER i2 )

FORWARD INTEGER PROC FNEnvironmentEqualCaseInsensitiveB( STRING s1, 
STRING s2 )

FORWARD PROC PROCTseForWindowsRunMacro( STRING s1 )

FORWARD PROC PROCFileBlockRead( STRING s1 )

FORWARD PROC PROCBlockGotoEndPosition()

FORWARD PROC PROCLineJoin()

FORWARD PROC PROCBlockGotoBegin()

FORWARD STRING PROC FNEnvironmentGetS( STRING s1 )

FORWARD INTEGER PROC FNErrorSB( STRING s1 )

FORWARD INTEGER PROC FNStringEqualCaseInsensitiveB( STRING s1, STRING 
s2 )

FORWARD PROC PROCProgramRunParameter( STRING s1, STRING s2 )

FORWARD STRING PROC FNProgramWordProcessorTseForWindowsS()

FORWARD STRING PROC FNStringConcatS( STRING s1, STRING s2 )

FORWARD INTEGER PROC FNFileBlockReadB( STRING s1 )

FORWARD PROC PROCWarn( STRING s1 )

FORWARD PROC PROCTextGotoPositionRowColumn( INTEGER i1, INTEGER i2 )

FORWARD INTEGER PROC FNBlockLineLastT()

FORWARD INTEGER PROC FNBlockColumnLastT()

FORWARD INTEGER PROC FNBlockBeginB()

FORWARD INTEGER PROC FNStringEmptyB( STRING s1 )

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

FORWARD STRING PROC FNErrorS()

FORWARD INTEGER PROC FNStringEqualB( STRING s1, STRING s2 )

FORWARD STRING PROC FNStringCaseUpperS( STRING s1 )

FORWARD PROC PROCProgramRunCentral( STRING s1, STRING s2 )

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

FORWARD STRING PROC FNStringEmptyS()

FORWARD INTEGER PROC FNFileBlockReadCentralB( STRING s1, INTEGER i1 )

FORWARD PROC PROCTextGotoPositionRow( INTEGER i1 )

FORWARD PROC PROCTextGotoPositionColumn( INTEGER i1 )

FORWARD INTEGER PROC FNBlockRowEndT()

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

FORWARD PROC PROCDosChildCons( STRING s1, STRING s2 )

FORWARD PROC PROCTextGotoPositionLine( INTEGER i1 )

FORWARD STRING PROC FNConsS( STRING s1, STRING s2 )

FORWARD PROC PROCDosChild( STRING s1 )

FORWARD STRING PROC FNCharacterSymbolSpaceS()

FORWARD PROC PROCDos( STRING s1, INTEGER i1 )

FORWARD STRING PROC FNCharacterSymbolCentralS( INTEGER i1 )

FORWARD INTEGER PROC FNDosB( STRING s1, INTEGER i1 )

FORWARD PROC PROCVideoResizeCheckWindowsNt2000Xp()

FORWARD STRING PROC FNStringAsciiToCharacterS( INTEGER i1 )

FORWARD STRING PROC FNProgramRunDosCurrentS()

FORWARD STRING PROC FNWordExitPipeS()

FORWARD INTEGER PROC FNWordprocessorTseVersionDosBits16WindowsNt2000XpB
()

FORWARD INTEGER PROC FNProgramRun4DosNotB( STRING s1 )

FORWARD STRING PROC FNStringCdrS( STRING s1 )

FORWARD INTEGER PROC FNWordExitPipeNotB( STRING s1 )

FORWARD PROC PROCVideoSizeDefault()

FORWARD STRING PROC FNInitializeNewStringS()

FORWARD INTEGER PROC FNOperatingSystemDos4NtB()

FORWARD STRING PROC FNProgramRunDos4NtS()

FORWARD INTEGER PROC FNOperatingSystemDos4DosB()

FORWARD STRING PROC FNProgramRunDos4DosS()

FORWARD INTEGER PROC FNOperatingSystemDosMsDosB()

FORWARD STRING PROC FNProgramRunDosMsDosS()

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

FORWARD INTEGER PROC FNOperatingSystemDos4Dos4NtNotB()

FORWARD INTEGER PROC FNWordprocessorTseVersionBits16B()

FORWARD INTEGER PROC FNWordFrontEqualB( STRING s1, STRING s2 )

FORWARD STRING PROC FNProgramRun4Dos4NtNotS()

FORWARD STRING PROC FNStringWordDeleteFrontS( STRING s1, STRING s2 )

FORWARD STRING PROC FNStringCarS( STRING s1 )

FORWARD STRING PROC FNWordExitPipeNotS()

FORWARD PROC PROCVideoLinesCentral( STRING s1 )

FORWARD STRING PROC FNIntegerToStringS( INTEGER i1 )

FORWARD INTEGER PROC FNIntegerGlobalGetI( STRING s1 )

FORWARD INTEGER PROC FNOperatingSystemDos4Dos4NtCentralB( STRING s1 )

FORWARD STRING PROC FNOperatingSystemDos4Dos4NtExecutableS()

FORWARD STRING PROC FNEnvironmentComSpecS()

FORWARD STRING PROC FNFileinfoToFileNameS( STRING s1 )

FORWARD INTEGER PROC FNMathLogicAndB( INTEGER i1, INTEGER i2 )

FORWARD INTEGER PROC FNMathLogicNotB( INTEGER i1 )

FORWARD INTEGER PROC FNOperatingSystemDos4Dos4NtB()

FORWARD INTEGER PROC FNWordprocessorTseVersionBits32NotB()

FORWARD INTEGER PROC FNStringLengthI( STRING s1 )

FORWARD PROC PROCMacroRunKeep( STRING s1 )

FORWARD INTEGER PROC FNInitializeNewIntegerI()

FORWARD INTEGER PROC FNerrorI()

FORWARD STRING PROC FNOperatingSystemDos4Dos4NtFilenameS()

FORWARD STRING PROC FNOperatingSystemDos4Dos4NtPathS()

FORWARD STRING PROC FNFilenamePathNameS( STRING s1, STRING s2 )

FORWARD STRING PROC FNFilenameSplitInPartsS( STRING s1, INTEGER i1 )

FORWARD INTEGER PROC FNWordprocessorTseVersionBits32B()

FORWARD INTEGER PROC FNMacroLoadB( STRING s1 )

FORWARD PROC PROCMacroExec( STRING s1 )

FORWARD INTEGER PROC FNIntegerMinimumAbsolute()

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

FORWARD INTEGER PROC FNMacroExecB( STRING s1 )

FORWARD INTEGER PROC FNIntegerMaximumAbsolute()

FORWARD INTEGER PROC FNStringCharactersLastEqualB( STRING s1, STRING 
s2 )

FORWARD INTEGER PROC FNStringCharactersFirstEqualB( STRING s1, STRING 
s2 )

FORWARD STRING PROC FNStringCharactersEqualRemoveEndS( STRING s1, 
STRING s2 )

FORWARD STRING PROC FNRightStringS( STRING s1, INTEGER i1 )

FORWARD STRING PROC FNLeftStringS( STRING s1, INTEGER i1 )

FORWARD STRING PROC FNStringCharactersRemoveEndS( STRING s1, STRING s2 )

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



// --- MAIN --- //



PROC Main()

 PROCClipboardWPaste()

END



<F12> Main()



// --- LIBRARY --- //



// library: cut/copy/paste: clipboard: paste: paste from clipboard 
(filenamemacro=clipwpas.s) [kn, ni, ma, 03-08-98 13:06:10]

PROC PROCClipboardWPaste()

 // e.g. PROC Main()

 // e.g.  PROCClipboardWPaste()

 // e.g. END

 // e.g.

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

 //

 // ---

 //

 // Method

 //

 // Two macros, one running on TSE v2.5 for DOS,

 // other running on TSE v3.0 for Windows

 //

 // Macro on TSE v2.5 for DOS:

 // 1. call TSE v3.0 for Windows with a macro

 // 2. read the file that TSE v3.0 for Windows has created, by

 //    pasting from the clipboard, and saving this in a file

 // 3. insert this file at the cursor position

 //

 // Macro on TSE v3.0 for Windows

 // 1. paste the Windows clipboard content in a file

 //

 // ---

 //

 // Install

 //

 // 1. change the 'Paste' menu entry in your .ui to

 //     ExecMacro( "clipwpas" )

 //   and recompile it in TSE v2.5 for DOS,

 //   so that this new paste action becomes active in your TSE menu

 // 2. Copy the file, (which is meant to be run in TSE v3.0 for Windows 
only)

 //     clipptwd.s

 //    to the TSE v3.0 for Windows directory

 // 3. Compile this file

 //     clipptwd.s

 //    in TSE v3.0 for Windows

 // 4. If you now select the Windows paste option in TSE v2.5 for DOS

 //    you will have a paste from clipboard

 #IFDEF WIN32

  PROCPasteFromWinClip()

 #ELSE

  IF FNOperatingSystemWindowsNt2000XpB()

   PROCClipboardWPasteTseDosGetDefault()

  ELSE

   PROCPasteFromWinClip()

  ENDIF

 #ENDIF

END



// library: cut/copy/paste: block: paste from Windows clipboard [kn, 
ri, tu, 28-08-2001 22:04:46]

PROC PROCPasteFromWinClip()

 PasteFromWinClip()

 // in OS2 use: PipeOut()

END



// library: operating system: version: is the current active operating 
system Windows NT/2000/XP? [kn, ri, th, 25-10-2001 02:53:09]

INTEGER PROC FNOperatingSystemWindowsNt2000XpB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemWindowsXpB() ) // gives e.g. 0, 
when not currently running in Windows NT, 2000, XP

 // e.g. END

 // e.g.

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

 RETURN( FNMathLogicOr3B( FNOperatingSystemWindowsNtB(), 
FNOperatingSystemWindows2000B(), FNOperatingSystemWindowsXpB() ) )

END



// library: paste: run this on TSE v2.5 for DOS: get file with content 
of the clipboard: run TSE for Windows with a macroname as a parameter 
[kn, ri, su, 26-08-2001 06:49:18]

PROC PROCClipboardWPasteTseDosGetDefault()

 // e.g. PROC Main()

 // e.g.  PROCClipboardWPasteTseDosGetDefault()

 // e.g. END

 // e.g.

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

 PROCClipboardWPasteTseDosGet( FNFilenameTemporaryClipboardWindowsS
(), "c:\wordproc\tse32_v3\knud\clipptwd.mac" )

END



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

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

 RETURN( FNMathLogicOrB( FNMathLogicOrB( B1, B2 ), B3 ) )

END



// library: operating system: version: is the current active operating 
system Windows NT? [kn, ri, th, 25-10-2001 02:49:04]

INTEGER PROC FNOperatingSystemWindowsNtB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemWindowsNtB() ) // gives e.g. 0, 
when not currently running in Windows NT

 // e.g. END

 // e.g.

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

 RETURN( FNEnvironmentEqualCaseInsensitiveB( "OS", "windows_NT" ) ) // 
the string "OS" must be upper case, as it is case sensitive!

END



// library: operating system: version: is the current active operating 
system Windows 2000? [kn, ri, th, 25-10-2001 02:49:04]

INTEGER PROC FNOperatingSystemWindows2000B()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemWindows2000B() ) // gives e.g. 0, 
when not currently running in Windows 2000

 // e.g. END

 // e.g.

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

 // RETURN( FNNameGlobalComputerDell_LatitudeC600B() )

 RETURN( FNOperatingSystemWindowsNtB() )

END



// library: operating system: version: is the current active operating 
system Windows XP? [kn, ri, th, 25-10-2001 02:51:46]

INTEGER PROC FNOperatingSystemWindowsXpB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemWindowsXpB() ) // gives e.g. 0, 
when not currently running in Windows XP

 // e.g. END

 // e.g.

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

 RETURN( FNOperatingSystemWindowsNtB() )

END



// library: paste: run this on TSE v2.5 for DOS: get file with content 
of the clipboard: run TSE for Windows with a macroname as a parameter 
[kn, ri, su, 26-08-2001 06:49:18]

PROC PROCClipboardWPasteTseDosGet( STRING filenameS, STRING 
filenamemacroS )

 PROCTseForWindowsRunMacro( filenamemacroS ) // make sure this macro is 
compiled for TSE for Windows (so load file 'clipctwd.s' in TSE v3.0 for 
Windows, and compile it)

 PROCFileBlockRead( filenameS )

 PROCBlockGotoEndPosition()

 EndLine()

 PROCLineJoin()

 PROCBlockGotoBegin()

END



// library: clipboard: copy clipboard via TSE v3.0 for windows to TSE 
v2.5 for DOS: temporary filename [kn, ri, su, 26-08-2001 06:36:08]

STRING PROC FNFilenameTemporaryClipboardWindowsS()

 RETURN( "c:\dddxxx.xzy" )

END



// library: math: logic: or: 2 arguments [kn, ri, tu, 15-05-2001 
16:54:17]

INTEGER PROC FNMathLogicOrB( INTEGER B1, INTEGER B2 )

 RETURN( B1 OR B2 )

END



// library: environment: string: equal: is given string equal to the 
current value of that environment variable? [kn, ri, th, 25-10-2001 
02:19:03]

INTEGER PROC FNEnvironmentEqualCaseInsensitiveB( STRING variablenameS, 
STRING variablevalueS )

 // e.g. PROC Main()

 // e.g.  Message( FNEnvironmentEqualCaseInsensitiveB
( "os", "windows_NT" ) ) // gives e.g. 0

 // e.g. END

 // e.g.

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

 STRING s[255] = FNEnvironmentGetS( variablenameS )

 IF FNErrorSB( s )

  RETURN( FALSE )

 ENDIF

 RETURN( FNStringEqualCaseInsensitiveB( s, variablevalueS ) )

END



// library: program: run: parameter: run TSE for Windows with a 
macroname as a parameter [kn, ri, su, 26-08-2001 06:49:18]

PROC PROCTseForWindowsRunMacro( STRING filenamemacroS )

 // e.g. PROC Main()

 // e.g.  PROCTseForWindowsRunMacro( "c:\wordproc\tse32_v3
\knud\clipctwd.mac" ) // make sure this macro is compiled for TSE for 
Windows (so load file 'clipctwd.s' in TSE v3.0 for Windows, and compile 
it)

 // e.g. END

 // e.g.

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

 PROCProgramRunParameter( FNProgramWordProcessorTseForWindowsS(), 
FNStringConcatS( "-e", filenamemacroS ) )

END



// library: file: block: insert/read [kn, ri, ma, 27-12-1999 02:47:25]

PROC PROCFileBlockRead( STRING filenameS )

 // e.g. <F12> PROCFileBlockRead( "ddd.ddd" )

 IF NOT FNFileBlockReadB( filenameS )

  PROCWarn( "File " + filenameS + ": Read: Block: not succesful" )

 ENDIF

END



// library: block: goto: end: position [kn, ri, fr, 09-11-2001 00:53:18]

PROC PROCBlockGotoEndPosition()

 PROCTextGotoPositionRowColumn( FNBlockLineLastT(), FNBlockColumnLastT
() )

END



// library: line: join: join the next line to the end of the current 
line [kn, ni, ma, 03-08-98 13:35:32]

PROC PROCLineJoin()

 // Message( "Join the next line to the end of the current line" )

  JoinLine()

END



// library: block: movement: goto the beginning of the block [kn, zoe, 
ma, 29-03-1999 20:46:25]

PROC PROCBlockGotoBegin()

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

 // variation: GotoBlockBegin()

 IF NOT FNBlockBeginB()

  // PROCWarn( "Block: Goto: Begin: Already in begin or NO block marked 
in the current file" )

 ENDIF

END



// library: environment: string: get (Searches for and Returns a 
Specified Environment Str) R    GetEnvStr(STRING s)* 
(filenamemacro=enviview.s) [kn, ri, th, 25-10-2001 01:44:48]

STRING PROC FNEnvironmentGetS( STRING s )

 // e.g. PROC Main()

 // e.g.  STRING s[255] = FNInputS( "value: environment variable 
= ", "windir" )

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

 // e.g.  PROCMessageCons3( s, "=", FNEnvironmentGetS( s ) ) // gives 
e.g. "windir=C:\WINNT", when working on a Windows2000 machine

 // e.g. END

 // e.g.

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

 STRING valueS[255] = GetEnvStr( s )

 IF FNStringEmptyB( s )

  PROCWarnCons3( "variable", s, "not found" )

  valueS = FNErrorS()

 ENDIF

 RETURN( valueS )

END



// library: error: test if an error occurred, via testing the output // 
version with testing local variable. Better. [kn, ni, wo, 05-08-1998 
20:27:34]

INTEGER PROC FNErrorSB( STRING s )

 // e.g. <F12> PROCMessage( FNErrorSB( "this is an error" ) // version 
with testing local variable. Better. ) // gives ...

 RETURN( FNStringEqualB( s, FNErrorS() ) )

END



// library: string: equal: case: insensitive: convert first the two 
string to upper case, then compare for equality [kn, ri, th, 18-10-2001 
23:04:06]

INTEGER PROC FNStringEqualCaseInsensitiveB( STRING s1, STRING s2 )

 RETURN( FNStringEqualB( FNStringCaseUpperS( s1 ), FNStringCaseUpperS( 
s2 ) ) )

END



// library: browser: run: central [kn, ri, su, 18-03-2001 02:08:08]

PROC PROCProgramRunParameter( STRING filenameS, STRING parameterS )

 PROCProgramRunCentral( filenameS, parameterS )

END



// library: program: fill in here the path to your TSE v3.0 for Windows 
[kn, ri, su, 26-08-2001 06:47:57]

STRING PROC FNProgramWordProcessorTseForWindowsS()

 RETURN( "c:\wordproc\tse32_v3\e32.exe" )

END



// library: string: concatenation: concatenation 2 words tot 1 word 
[kn, zoe, th, 01-02-2001 19:32:49]

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

 RETURN( FNStringConcatSeparatorS( s1, s2, FNStringEmptyS() ) )

END



// library: file: block: insert [kn, ri, ma, 27-12-1999 02:47:25]

INTEGER PROC FNFileBlockReadB( STRING filenameS )

 RETURN( FNFileBlockReadCentralB( filenameS, _DONT_PROMPT_ ) )

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: movement: row/colum: goto: goto row, column [kn, ri, wo, 12-
05-1999 06:42:33]

PROC PROCTextGotoPositionRowColumn( INTEGER rowT, INTEGER colT )

 PROCTextGotoPositionRow( rowT )

 PROCTextGotoPositionColumn( colT )

END



// library: block: line: position: last: return the linenumber of the 
last line in a marked block [kn, ri, zo, 17-10-1999 07:26:53]

INTEGER PROC FNBlockLineLastT()

 // e.g. <F12> PROCMessage( FNBlockLineLastT() ) // gives ...

 RETURN( FNBlockRowEndT() )

END



// library: block: line: position: column: return the last column in a 
marked block [kn, zoe, do, 20-05-1999 11:40:25]

INTEGER PROC FNBlockColumnLastT()

 // e.g. <F12> PROCMessage( FNBlockColumnBeginT() ) // returns e.g. 12, 
if this is the position of the endcolumn (=most right column position) 
in the highlighted block

 RETURN( Query( BlockEndCol ) )

END



// library: block: movement: goto the beginning of the block [kn, zoe, 
ma, 29-03-1999 20:46:25]

INTEGER PROC FNBlockBeginB()

 // e.g. <F12> PROCMessage( FNBlockBeginB() ) // gives 0 if failure, 
else non zero value

 RETURN( GotoBlockBegin() )

END



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

INTEGER PROC FNStringEmptyB( STRING s )

 RETURN( FNStringEqualB( s, "" ) )

END



// library: error: warning: give a warning message via 3 strings [kn, 
ri, su, 29-07-2001 18:24:52]

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

 PROCWarn( FNCons3S( s1, s2, s3 ) )

END



// library: error: general output string to recognize an error (e.g. in 
another routine). Central routine, only one occurrence of this constant 
string [kn, ri, za, 05-12-1998 20:58:17]

STRING PROC FNErrorS()

 // e.g. <F12> PROCMessage( FNErrorS() ) // gives "<ERROR>"

 RETURN( "<ERROR>" )

END



// library: string: equal: Are two given strings equal? [kn, zoe, wo, 
04-10-2000 18:23:27]

INTEGER PROC FNStringEqualB( STRING s1, STRING s2 )

 // e.g. <F12> PROCMessage( FNStringEqualB( "knud", "knud" ) ) // gives 
TRUE

 // e.g. <F12> PROCMessage( FNStringEqualB( "knud", "van" ) ) // gives 
FALSE

 RETURN( s1 == s2 )

END



// library: string: uppercase/lowercase: upper case: convert characters 
in string to upper case [kn, zoe, wo, 30-06-1999 01:21:07]

STRING PROC FNStringCaseUpperS( STRING s )

 // e.g. <F12> Message( FNStringCaseUpperS( "test" ) ) // gives "TEST"

 RETURN( Upper( s ) )

END



// library: program: run: central [kn, ri, th, 31-05-2001 17:23:31]

PROC PROCProgramRunCentral( STRING filenameS, STRING parameterS )

 PROCDosChildCons( filenameS, parameterS )

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 FNStringConcatSeparatorS( STRING s1, STRING s2, STRING 
separatorS )

 IF FNStringEmptyB( s1 ) RETURN( s2 ) ENDIF

 IF FNStringEmptyB( s2 ) RETURN( s1 ) ENDIF

 RETURN( s1 + separatorS + s2 )

END



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

STRING PROC FNStringEmptyS()

 RETURN( "" )

END



// library: file: block: read [kn, zoe, fr, 20-10-2000 20:19:03]

INTEGER PROC FNFileBlockReadCentralB( STRING filenameS, INTEGER caseI )

 RETURN( InsertFile( filenameS, caseI ) )

END



// library: movement: row: goto: goto row in the current file [kn, zoe, 
wo, 07-07-1999 21:14:55]

PROC PROCTextGotoPositionRow( INTEGER rowT )

 PROCTextGotoPositionLine( rowT )

END



// library: movement: column: goto: goto column (Moves Cursor to Column 
Specified) O    GotoColumn([INTEGER column])* 
(filenamemacro=colugoto.s) [kn, ri, wo, 12-05-1999 06:39:17]

PROC PROCTextGotoPositionColumn( INTEGER colT )

 // e.g. PROC Main()

 // e.g.  INTEGER I = FNInitializeNewIntegerI()

 // e.g.  I = FNInputNumberIntegerI( "goto which column = ", 1 )

 // e.g.  IF FNColumnValidB( I )

 // e.g.   PROCTextGotoPositionColumn( I )

 // e.g.  ELSE

 // e.g.   PROCWarnCons( FNIntegerToStringS( I ), "not a valid column 
number (it should be a positive integer: 1, 2, 3, 4, ...)" )

 // e.g.  ENDIF

 // e.g. END

 // e.g.

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

 GotoColumn( colT )

END



// library: block: line: position: row: return the last row in a marked 
block [kn, zoe, do, 20-05-1999 11:40:25]

INTEGER PROC FNBlockRowEndT()

 // e.g. <F12> PROCMessage( FNBlockRowEndT() ) // returns e.g. 50, if 
this is the number of the last line in the highlighted block

 RETURN( Query( BlockEndLine ) )

END



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

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

 RETURN( FNConsS( FNConsS( s1, s2 ), s3 ) )

END



// library: system: operating system: dos: goto Dos, do the action, and 
come back: concatenate input (space in between) [kn, ri, tu, 21-08-2001 
23:52:50]

PROC PROCDosChildCons( STRING s1, STRING s2 )

 PROCDosChild( FNConsS( s1, s2 ) )

END



// library: file: line: goto: (Moves Cursor to Specified Line) O    
GotoLine([INTEGER line_number])* (filenamemacro=linrgoto.s) [kn, zoe, 
wo, 16-06-1999 01:06:55]

PROC PROCTextGotoPositionLine( INTEGER T )

 // e.g. PROC Main()

 // e.g.  INTEGER I = FNInitializeNewIntegerI()

 // e.g.  I = FNInputNumberIntegerI( "goto which line = ", 1 )

 // e.g.  IF FNLineNumberValidB( I )

 // e.g.   PROCTextGotoPositionLine( I )

 // e.g.  ELSE

 // e.g.   PROCWarnCons( FNIntegerToStringS( I ), "not a valid line 
number (it should be a positive integer: 1, 2, 3, 4, ...)" )

 // e.g.  ENDIF

 // e.g. END

 // e.g.

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

 //

 // example 2:

 //

 // // e.g. <F12> PROCTextGotoPositionLine( 10 ) // goto line 10

 GotoLine( T )

END



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

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

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

 RETURN( FNStringConcatSeparatorS( s1, s2, FNCharacterSymbolSpaceS() ) )

END



// library: system: operating system: dos: goto Dos, do the action, and 
come back [kn, ri, zo, 06-12-1998 04:53:24]

PROC PROCDosChild( STRING s )

 // // e.g. <F12> PROCDosChild( "dir" )

 // e.g. <F12> PROCDosChild( "start c:\progra~1\micros~2
\docs\xmlsdk30.chm" )

 // PROCDos( s, _DONT_PROMPT_ | _TEE_OUTPUT_ )

 PROCDos( s, _DONT_PROMPT_ )

END



// library: character: " " [kn, zoe, we, 25-10-2000 01:33:39]

STRING PROC FNCharacterSymbolSpaceS()

 RETURN( FNCharacterSymbolCentralS( 32 ) )

END



// library: system: operating system: dos: passes a command to the 
operating system [kn, zoe, wo, 16-06-1999 01:06:53]

PROC PROCDos( STRING s, INTEGER optionT )

 // e.g. <F12> PROCDos( "dir", _DEFAULT_ )

 // e.g. // <F12> PROCDos( "dir", _DONT_PROMPT_ )

 // e.g. // <F12> PROCDos( "dir", _DONT_CLEAR_ )

 // e.g. // <F12> PROCDos( "dir", _TEE_OUTPUT_ )

 // e.g. // <F12> PROCDos( "dir", _RETURN_CODE )

 IF NOT FNDosB( s, optionT )

  PROCWarn( "DOS: child process: not succesful" )

 ENDIF

 PROCVideoResizeCheckWindowsNt2000Xp()

END



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

STRING PROC FNCharacterSymbolCentralS( INTEGER I )

 RETURN( FNStringAsciiToCharacterS( I ) )

END



// library: system: operating system: dos: passes a command to the 
operating system [kn, zoe, wo, 16-06-1999 01:06:53]

INTEGER PROC FNDosB( STRING inS, INTEGER optionS )

 STRING s[255] = inS

 STRING dosS[255] = FNProgramRunDosCurrentS() // default: run 4nt in 
Windows2000

 STRING exitS[255] = FNWordExitPipeS() // default: pipe '<exit' file in 
the input stream, to stop waiting for your key press input, and further 
automating

 IF FNWordprocessorTseVersionDosBits16WindowsNt2000XpB()

  PROCWarn( "You are running TSE v2.5 for DOS (or lower)" )

  PROCWarn( "in WindowsNT/2000/XP, but not running 4DOS or 4NT" )

  PROCWarn( "The behaviour of Dos() commands can in this case not be 
guaranteed" )

  PROCWarn( "(you get e.g. 'bad command' or similar)" )

  PROCWarn( "My advice is to download 4NT" )

  PROCWarn( "at http://www.jpsoft.com/download.htm" )

  PROCWarn( "and use this as the alternate command processor." )

  PROCWarn( "That should work OK." )

 ENDIF

 IF FNOperatingSystemWindowsNt2000XpB()

  IF FNProgramRun4DosNotB( s )

   s = FNStringCdrS( s ) // remove first word

   dosS = FNStringEmptyS()

  ENDIF

  IF FNWordExitPipeNotB( s )

   s = FNStringCdrS( s ) // remove first word

   exitS = FNStringEmptyS() // no exit string

  ENDIF

  s = FNCons3S( dosS, s, exitS ) // make sure 4DOS or 4NT is your 
command processor, instead of MSDOS

 ENDIF

 // PROCFileTextInsertLineEndGotoNext( s, FNFilenameGlobalTemporaryS
() ) // debugging [kn, ri, fr, 07-09-2001 16:03:22]

 RETURN( Dos( s, optionS ) )

END



// library: system: operating system: Windows2000: dos: when returning 
from a DOS session you have to manually reset the video screen size 
[kn, ri, sa, 07-07-2001 20:19:21]

PROC PROCVideoResizeCheckWindowsNt2000Xp()

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

 IF FNOperatingSystemWindowsNt2000XpB() // variation #IFDEF WINNT2000XP

  PROCVideoSizeDefault()

 ENDIF

END



// library: 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 FNStringAsciiToCharacterS( INTEGER asciiI )

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

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

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

 RETURN( Chr( asciiI ) )

END



// library: operating system: version: DOS: return the currently 
running DOS version (necessary to handle DOS commands in 
WindowsNT/2000/XP) [kn, ri, th, 25-10-2001 03:32:08]

STRING PROC FNProgramRunDosCurrentS()

 // e.g. PROC Main()

 // e.g.  Message( FNProgramRunDosCurrentS() ) // gives 
e.g. "c:\4dos\4dos.com"

 // e.g. END

 // e.g.

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

 STRING s[255] = FNInitializeNewStringS()

 IF FNOperatingSystemDos4NtB()

  s = FNProgramRunDos4NtS()

 ELSEIF FNOperatingSystemDos4DosB()

  s = FNProgramRunDos4DosS()

 ELSEIF FNOperatingSystemDosMsDosB()

  s = FNProgramRunDosMsDosS()

 ELSE

  PROCWarn( "can not determine current DOS system (not 
MSDOS/4DOS/4NT)" )

  s = FNErrorS()

 ENDIF

 RETURN( s )

END



// library: system: operating system: Windows2000: dos: When going to 
the DOS command line in the TSE v2.5 for DOS version, the system waits 
anyhow until the user types 'exit'. Here the word 'exit' is piped from 
a file [kn, ri, we, 22-08-2001 23:35:36]

STRING PROC FNWordExitPipeS()

 RETURN( "<keybexit.bat" )

END



// library: system: operating system: you run a 16 bits DOS version of 
TSE in WindowsNT/2000/XP [kn, ri, th, 25-10-2001 06:03:06]

INTEGER PROC FNWordprocessorTseVersionDosBits16WindowsNt2000XpB()

 RETURN( FNMathLogicAnd3B( FNOperatingSystemDos4Dos4NtNotB(), 
FNWordprocessorTseVersionBits16B(), FNOperatingSystemWindowsNt2000XpB
() ) )

END



// library: system: operating system: Windows2000: dos: When going to 
the DOS command line in the TSE v2.5 for DOS version, the system waits 
anyhow until the user types 'exit'. Here the word 'exit' is piped from 
a file [kn, ri, we, 22-08-2001 23:35:36]

INTEGER PROC FNProgramRun4DosNotB( STRING s )

 RETURN( FNWordFrontEqualB( s, FNProgramRun4Dos4NtNotS() ) )

END



// library: string: word: token: get: rest: FNCdr(): Get a string, 
without the first word (words delimited by a space " "). E.g. Message( 
FNStringCarS( "Knud is the best" ) ) gives "Knud" // [kn, ni, zo, 02-08-
98 15:54:17]

STRING PROC FNStringCdrS( STRING s )

 RETURN( LTrim( FNStringWordDeleteFrontS( LTrim( s ), FNStringCarS( 
s ) ) ) ) // Remove trailing spaces, determine the First word. Delete 
the first word (=FNCarS), and finally remove the trailing spaces from 
the result

END



// library: system: operating system: Windows2000: dos: When going to 
the DOS command line in the TSE v2.5 for DOS version, the system waits 
anyhow until the user types 'exit'. Here the word 'exit' is piped from 
a file [kn, ri, we, 22-08-2001 23:35:36]

INTEGER PROC FNWordExitPipeNotB( STRING s )

 RETURN( FNWordFrontEqualB( s, FNWordExitPipeNotS() ) )

END



// library: video: screen: lines: default [kn, ri, su, 25-03-2001 
03:52:20]

PROC PROCVideoSizeDefault()

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

 #IFDEF WIN32

  PROCVideoLinesCentral( "-1,-1" ) // video.mac wants no spaces between 
rows and columns

  // PROCVideoLinesCentral( "35,110" ) // video.mac wants no spaces 
between rows and columns

  // PROCVideoLinesCentral( FNIntegerToStringS( FNIntegerGlobalGetI
( "videomaxrowGT" ) ) + "," + FNIntegerToStringS( FNIntegerGlobalGetI
( "videomaxcolGT" ) ) ) // video.mac wants no spaces between rows and 
columns

 #ELSE

  PROCVideoLinesCentral( FNIntegerToStringS( FNIntegerGlobalGetI
( "videomaxrowGT" ) ) )

 #ENDIF

END



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

STRING PROC FNInitializeNewStringS()

 RETURN( FNStringEmptyS() )

END



// library: operating system: version: dos: 4NT: current DOS operating 
system is 4NT? [kn, ri, th, 25-10-2001 03:09:12]

INTEGER PROC FNOperatingSystemDos4NtB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemDos4NtB() ) // gives e.g. 0, when 
not running 4NT.exe

 // e.g. END

 // e.g.

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

 RETURN( FNOperatingSystemDos4Dos4NtCentralB( "4NT" ) )

END



// library: system: operating system: WindowsNT/2000/XP: dos: 4NT: When 
going to the DOS command line in the TSE v2.5 for DOS version, the 
system waits anyhow until the user types 'exit'. Here the word 'exit' 
is piped from a file [kn, ri, we, 22-08-2001 23:35:36]

STRING PROC FNProgramRunDos4NtS()

 RETURN( FNOperatingSystemDos4Dos4NtExecutableS() )

END



// library: operating system: version: dos: 4dos: current DOS operating 
system is 4DOS? [kn, ri, th, 25-10-2001 03:09:12]

INTEGER PROC FNOperatingSystemDos4DosB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemDos4DosB() ) // gives e.g. 0, when 
not running 4DOS.exe

 // e.g. END

 // e.g.

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

 RETURN( FNOperatingSystemDos4Dos4NtCentralB( "4DOS" ) )

END



// library: system: operating system: WindowsNT/2000/XP: dos: 4DOS: 
When going to the DOS command line in the TSE v2.5 for DOS version, the 
system waits anyhow until the user types 'exit'. Here the word 'exit' 
is piped from a file [kn, ri, th, 25-10-2001 03:35:48]

STRING PROC FNProgramRunDos4DosS()

 RETURN( FNOperatingSystemDos4Dos4NtExecutableS() )

END



// library: operating system: version: dos: MSdos: current DOS 
operating system is 4DOS? [kn, ri, th, 25-10-2001 03:09:12]

INTEGER PROC FNOperatingSystemDosMsDosB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemDosMsDosB() ) // gives e.g. 0, when 
not running the MSDOS command.exe command processor

 // e.g. END

 // e.g.

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

 STRING s[255] = FNEnvironmentComspecS()

 IF FNErrorSB( s )

  RETURN( FALSE )

 ENDIF

 s = FNFileinfoToFileNameS( s )

 RETURN( FNStringEqualCaseInsensitiveB( s, "COMMAND" ) )

END



// library: system: operating system: WindowsNT/2000/XP: dos: MSDOS: 
When going to the DOS command line in the TSE v2.5 for DOS version, the 
system waits anyhow until the user types 'exit'. Here the word 'exit' 
is piped from a file [kn, ri, th, 25-10-2001 03:48:21]

STRING PROC FNProgramRunDosMsDosS()

 RETURN( FNEnvironmentComSpecS() )

END



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

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

 RETURN( FNMathLogicAndB( FNMathLogicAndB( B1, B2 ), B3 ) )

END



// library: operating system: version: dos: 4NT or 4DOS: current DOS 
operating system is NOT 4DOS or 4NT? [kn, ri, th, 25-10-2001 04:18:47]

INTEGER PROC FNOperatingSystemDos4Dos4NtNotB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemDos4Dos4NtNotB() ) // gives e.g. 0, 
when 4DOS and also 4NT are both not running currently

 // e.g. END

 // e.g.

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

 RETURN( FNMathLogicNotB( FNOperatingSystemDos4Dos4NtB() ) )

END



// library: wordprocessor: tse: version: bits: 16: TSE v2.5 (or 
smaller) for DOS [kn, ri, th, 25-10-2001 04:51:51]

INTEGER PROC FNWordprocessorTseVersionBits16B()

 // e.g. PROC Main()

 // e.g.  Message( FNWordprocessorTseVersionBits16B() ) // gives e.g. 
non zero, if running TSE v2.5 for DOS

 // e.g. END

 // e.g.

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

 RETURN( FNWordprocessorTseVersionBits32NotB() )

END



// library: string: token: word: get: first: get the first word of a 
string (separated by spaces) and test if equal to given string)

INTEGER PROC FNWordFrontEqualB( STRING s, STRING firstS )

 // e.g. PROC Main()

 // e.g.  Message( FNWordFrontEqualB( "Knud van Eeden" , "Knud" ) ) // 
gives TRUE

 // e.g. END

 // e.g.

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

 RETURN( FNStringEqualB( FNStringCarS( s ), firstS ) )

END



// library: system: operating system: Windows2000: dos: When going to 
the DOS command line in the TSE v2.5 for DOS version, the system waits 
anyhow until the user types 'exit'. Here the word 'exit' is piped from 
a file [kn, ri, we, 22-08-2001 23:35:36]

STRING PROC FNProgramRun4Dos4NtNotS()

 RETURN( FNStringConcatS( "no", FNProgramRunDosCurrentS() ) )

END



// library: string: word: token: delete: first: delete 1 occurence of a 
given other string in front of a given string. E.g. 
StringWordDeleteFront( "00001234567", "0" ) gives "0001234567". 
Possible application: deleting the '0' in front of a phonenumber (e.g. 
when dialling internationally). [kn, ni, zo, 02-08-98 16:30:45]

STRING PROC FNStringWordDeleteFrontS( STRING s, STRING deleteS )

 // e.g. <F12> PROCMessage( FNStringWordDeleteFrontS( "this 
is", "this" ) ) // gives " is"

 // e.g. <F12> PROCMessage( FNStringWordDeleteFrontS( "the 
girl", "the" ) ) // gives " girl"

 // STRING PROC FNStringWordDeleteFirstS( STRING s, STRING deleteS )

 INTEGER lengthdeleteI = FNStringLengthI( deleteS )

 RETURN( SubStr( s, lengthdeleteI + 1, FNStringLengthI( s ) - 
lengthdeleteI ) )

END



// library: string: word: token: get: first: FNStringCarS(): Get the 
first word of a string (words delimited by a space " "). [kn, ni, zo, 
02-08-98 15:54:17]

STRING PROC FNStringCarS( STRING s )

 // e.g. Message( FNStringCarS( "Knud is the best" ) ) gives "Knud"

 // variation: RETURN( FNStringTokenFirstS( s, " " ) )

 RETURN( GetToken( s, " ", 1 ) )  // faster, but not central

END



// library: system: operating system: Windows2000: dos: When going to 
the DOS command line in the TSE v2.5 for DOS version, the system waits 
anyhow until the user types 'exit'. Here the word 'exit' is piped from 
a file [kn, ri, we, 22-08-2001 23:35:36]

STRING PROC FNWordExitPipeNotS()

 RETURN( FNStringConcatS( "no", FNWordExitPipeS() ) )

END



// library: video: screen: lines: central [kn, ri, su, 25-03-2001 
03:46:20]

PROC PROCVideoLinesCentral( STRING s )

 PROCMacroRunKeep( FNConsS( "video", s ) )

END



// library: string: convert an integer to a string [kn, ni, ma, 03-08-
98 00:34:05] / [number to string]

STRING PROC FNIntegerToStringS( INTEGER i )

 RETURN( Str( i ) )

END



// library: integer: global: get: get a global integer [kn, zoe, th, 21-
12-2000 17:04:14]

INTEGER PROC FNIntegerGlobalGetI( STRING stringglobalnameS )

 // e.g. <F12> PROCMessage( FNIntegerGlobalGetS( "GT" ) ) // e.g. gives 
3

 INTEGER I = FNInitializeNewIntegerI()

 IF NOT ExistGlobalVar( stringglobalnameS )

  PROCWarn( stringglobalnameS + ": this integer is not known to this 
macro (suggestion: execute 'initglobal.mac' (or 'i.m') for this 
macro)" )

  RETURN( FNErrorI() )

 ENDIF

 I = GetGlobalInt( stringglobalnameS )

 RETURN( I )

END



// library: system: operating system: version: dos: central [kn, ri, 
th, 25-10-2001 03:07:58]

INTEGER PROC FNOperatingSystemDos4Dos4NtCentralB( STRING valueS )

 STRING s[255] = FNOperatingSystemDos4Dos4NtFilenameS()

 IF FNErrorSB( s )

  RETURN( FALSE )

 ENDIF

 RETURN( FNStringEqualCaseInsensitiveB( s, valueS ) )

END



// library: system: operating system: version: dos: 4dos/4nt: get the 
current executable of the 4DOS/4NT command processor [kn, ri, th, 25-10-
2001 05:42:36]

STRING PROC FNOperatingSystemDos4Dos4NtExecutableS()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemDos4Dos4NtExecutableS() ) // gives 
e.g. "c:\4dos\4nt"

 // e.g. END

 // e.g.

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

 STRING pathS[255] = FNOperatingSystemDos4Dos4NtPathS()

 STRING filenameS[255] = FNOperatingSystemDos4Dos4NtFilenameS()

 RETURN( FNFilenamePathNameS( pathS, filenameS ) )

END



// library: operating system: DOS: command processor: get [kn, ri, th, 
25-10-2001 03:50:24]

STRING PROC FNEnvironmentComSpecS()

 // e.g. PROC Main()

 // e.g.  Message( FNEnvironmentComSpecS() ) // gives 
e.g. "c:\4dos\4dos.com"

 // e.g. END

 // e.g.

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

 RETURN( FNEnvironmentGetS( "COMSPEC" ) )

END



// library: file: filename: get: given a filename (and possible drive, 
path, extension), extract the filename (and not the path) [kn, ri, zo, 
28-03-1999 05:01:23]

STRING PROC FNFileinfoToFileNameS( STRING s )

 // e.g. <F12> PROCMessage( FNFileinfoToFileNameS
( "c:\kee\bbc\taal\ddd.dok" ) ) // gives 'ddd'

 RETURN( FNFilenameSplitInPartsS( s, _NAME_ ) )

END



// library: math: logic: and [kn, ri, tu, 15-05-2001 16:54:21]

INTEGER PROC FNMathLogicAndB( INTEGER B1, INTEGER B2 )

 // e.g. <F12> PROCMessage( FNMathLogicAndB( FNMathNumberEqualB( 
employeepayD, hourlyD ), FNMathNumberGreaterB( employee_hoursD, 
40.0 ) ) ) // gives ...

 RETURN( B1 AND B2 )

END



// library: math: logic: not [kn, ri, tu, 15-05-2001 16:54:21]

INTEGER PROC FNMathLogicNotB( INTEGER B )

 RETURN( NOT B )

END



// library: operating system: version: dos: 4NT or 4DOS: current DOS 
operating system is 4DOS or 4NT? [kn, ri, th, 25-10-2001 03:17:58]

INTEGER PROC FNOperatingSystemDos4Dos4NtB()

 // e.g. PROC Main()

 // e.g.  Message( FNOperatingSystemDos4Dos4NtB() ) // gives e.g. 0, 
when not running 4Dos.com or 4NT.exe

 // e.g. END

 // e.g.

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

 RETURN( FNMathLogicOrB( FNOperatingSystemDos4DosB(), 
FNOperatingSystemDos4NtB() ) )

END



// library: wordprocessor: tse: version: bits: 32 [kn, ri, th, 25-10-
2001 04:51:51]

INTEGER PROC FNWordprocessorTseVersionBits32NotB()

 RETURN( FNMathLogicNotB( FNWordprocessorTseVersionBits32B() ) )

END



// library: string: line: length: what is the length [kn, ri, wo, 25-11-
1998 20:20:58]

INTEGER PROC FNStringLengthI( STRING s )

 // e.g. <F12> PROCMessage( FNStringLengthI( "knud" ) ) // gives 4

 // e.g. <F12> PROCMessage( FNStringLengthI( "the" ) ) // gives 3

 RETURN( Length( s ) )

END



// library: macro: run a macro, then keep it [kn, zoe, fr, 27-10-2000 
15:59:33]

PROC PROCMacroRunKeep( STRING macronameS )

 // e.g. PROC Main()

 // e.g.  PROCMacroRunKeep( "mysubma1.mac myparameter11 myparameter12" )

 // e.g.  PROCMacroRunKeep( "mysubma2.mac myparameter21" )

 // e.g.  PROCMacroRunKeep( "mysubma3.mac myparameter31 myparameter32" )

 // e.g. END

 IF FNMacroLoadB( FNStringCarS( macronameS ) )   // necessary if you 
pass parameters in a string

  PROCMacroExec( macronameS )

 ENDIF

END



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

INTEGER PROC FNInitializeNewIntegerI()

 RETURN( 0 )

END



// library: error: indicate, via the returned number, that an error 
occurred [kn, ri, do, 29-04-1999 21:19:56]

INTEGER PROC FNerrorI()

 // e.g. <F12> PROCMessage( FNerrorI() ) // gives ...

 RETURN( FNIntegerMinimumAbsolute() )

END



// library: system: operating system: version: dos: 4dos/4nt: get the 
current filename (without extension) of the 4DOS/4NT command processor 
[kn, ri, th, 25-10-2001 05:40:03]

STRING PROC FNOperatingSystemDos4Dos4NtFilenameS()

 // e.g. <F12> Message( FNOperatingSystemDos4Dos4NtFilenameS() ) // 
gives e.g. "4NT"

 RETURN( FNEnvironmentGetS( "CASE4DOS" ) )

END



// library: system: operating system: version: dos: 4dos/4nt: get the 
current path of the 4DOS/4NT command processor [kn, ri, th, 25-10-2001 
05:42:36]

STRING PROC FNOperatingSystemDos4Dos4NtPathS()

 // e.g. <F12> Message( FNOperatingSystemDos4Dos4NtPathS() ) // gives 
e.g. "c:\4dos\"

 RETURN( FNEnvironmentGetS( "INSTALLPATH" ) )

END



// library: file: path + filename given: return MS DOS filename [kn, 
ri, fr, 25-02-2000 01:11:45]

STRING PROC FNFilenamePathNameS( STRING pathnameS, STRING filenameS )

 // e.g. <F12> PROCMessage( FNFilenamePathNameS
( "c:\temp\", "\ddd.dok" ) ) // gives 'c:\temp\ddd.dok'

 // e.g. // <F12> PROCMessage( FNFilenamePathNameS
( "c:\temp", "ddd.dok" ) ) // gives 'c:\temp\ddd.dok'

 RETURN( FNStringConcatSeparatorMiddleOnce( pathnameS, 
filenameS, "\" ) )

END



// library: file: filename: get: split the given filename in it's parts 
(e.g. split in drive, path, filename, extension or combinations) [kn, 
zoe, ma, 05-07-1999 18:56:12]

STRING PROC FNFilenameSplitInPartsS( STRING s, INTEGER optionV )

 // e.g. <F12> PROCMessage( FNFilenameSplitInPartsS
( "d:\kee\temp\ddd.bbc", _PATH_ ) ) // gives '\kee\temp\'

 RETURN( SplitPath( s, optionV ) )

END



// library: wordprocessor: tse: version: bits: 32: TSE v2.8 (or higher) 
for Windows [kn, ri, th, 25-10-2001 04:51:51]

INTEGER PROC FNWordprocessorTseVersionBits32B()

 #IFDEF WIN32

   RETURN( TRUE )

 #ELSE

   RETURN( FALSE )

 #ENDIF

END



// library: macro: load: (Loads a Macro File From Disk Into Memory) 
R    LoadMacro(STRING macro_filename)* [kn, zoe, wo, 16-06-1999 
01:07:06]

INTEGER PROC FNMacroLoadB( STRING macronameS )

 RETURN( LoadMacro( macronameS ) )

END



// library: macro: (Executes the Requested Macro) O    ExecMacro
([STRING macroname])* [kn, zoe, wo, 16-06-1999 01:06:54]

PROC PROCMacroExec( STRING macronameS )

 // e.g. <F12> PROCMacroExec( "video" )

 IF NOT FNMacroExecB( macronameS )

  PROCWarnCons3( "macro", macronameS, ": could not be executed" )

 ENDIF

END



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

INTEGER PROC FNIntegerMinimumAbsolute()

 RETURN( - FNIntegerMaximumAbsolute() )

END



// library: string: string1 + separatorS + string2, where the separator 
should only occur once [kn, ri, fr, 25-02-2000 01:47:29]

STRING PROC FNStringConcatSeparatorMiddleOnce( STRING s1S, STRING s2S, 
STRING separatorS )

 STRING s[255] = s1S

 INTEGER separatorendB = FNStringCharactersLastEqualB( s, separatorS )

 INTEGER separatorbeginB = FNStringCharactersFirstEqualB( s2S, 
separatorS )

 IF separatorendB AND separatorbeginB

  s = FNStringCharactersEqualRemoveEndS( s, separatorS )

 ELSEIF ( NOT separatorendB ) AND ( NOT separatorbeginB )

  s = FNStringConcatS( s, separatorS )

 ENDIF

 RETURN( FNStringConcatS( s, s2S ) )

END



// library: macro: (Executes the Requested Macro) O    ExecMacro
([STRING macroname])* [kn, zoe, wo, 16-06-1999 01:06:54]

INTEGER PROC FNMacroExecB( STRING macronameS )

 RETURN( ExecMacro( macronameS ) )

END



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

INTEGER PROC FNIntegerMaximumAbsolute()

 RETURN( maxint )

END



// library: string: word: equal: last: compare if a given string is 
equal at the end to another given string [kn, zoe, we, 29-11-2000 
19:08:34]

INTEGER PROC FNStringCharactersLastEqualB( STRING containsS, STRING 
endS ) // version: first parameter containsS then endS

 // e.g. PROC Main()

 // e.g.  Message( FNStringCharactersLastEqualB( "knud", "d" ) ) //  
gives TRUE

 // e.g. END

 RETURN( FNStringEqualB( FNRightStringS( containsS, FNStringLengthI( 
endS ) ), endS ) )

END



// library: string: word: equal: first: compare if a given string is 
equal at the begin to another given string [kn, zoe, mo, 15-01-2001 
18:17:30]

INTEGER PROC FNStringCharactersFirstEqualB( STRING containsS, STRING 
beginS )

 // e.g. PROC Main()

 // e.g.  Message( FNStringCharactersFirstEqualB( "knud", "kn" ) ) //  
gives TRUE

 // e.g. END

 RETURN( FNStringEqualB( FNLeftStringS( containsS, FNStringLengthI( 
beginS ) ), beginS ) )

END



// library: compare if string end is equal, if so remove that string 
[kn, zoe, mo, 15-01-2001 18:00:39]

STRING PROC FNStringCharactersEqualRemoveEndS( STRING containsS, STRING 
endS )

 // e.g. <F12> PROCMessage( FNStringCharactersEqualRemoveEndS( "math: 
todo", ": todo" ) ) // gives "math"

 STRING s[255] = containsS

 IF FNStringCharactersLastEqualB( s, endS )

  s = FNStringCharactersRemoveEndS( s, endS )

 ENDIF

 RETURN( s )

END



// library: string: word: token: get: last: return a given integer 
amount of characters from the right of a given string (=RIGHT$ in 
BASIC) [kn, ri, di, 13-10-1998 20:05:49]

STRING PROC FNRightStringS( STRING s, INTEGER karT )

 // e.g. <F12> PROCMessage( FNRightStringS( "knud", 1 ) ) //  gives "d"

 // e.g. <F12> PROCMessage( FNRightStringS( "knud", 2 ) ) //  gives "ud"

 // e.g. <F12> PROCMessage( FNRightStringS( "best", 3 ) ) //  
gives "est"

 INTEGER lengthT = FNStringLengthI( s )

 IF NOT ( 0 <= karT AND karT <= lengthT ) // if not between 0 and length
( string ), return the whole given string

  karT = LengthT

 ENDIF

 RETURN( FNMidStringS( s, 1 + lengthT - karT, lengthT ) )

END



// library: string: word: token: get: first: return a given integer 
amount of characters from the left of a given string (=LEFT$ in BASIC) 
[kn, ri, di, 13-10-1998 20:05:49]

STRING PROC FNLeftStringS( STRING s, INTEGER karT )

 // e.g. <F12> PROCMessage( FNLeftStringS( "knud", 2 ) ) //  gives "kn"

 // e.g. // <F12> PROCMessage( FNLeftStringS( "best", 3 ) ) //  
gives "bes"

 RETURN( FNMidStringS( s, 1, karT ) )

END



// library: string: token: delete: last: remove as much characters from 
the end of a given string, as total amount of characters of given 
another string [kn, zoe, di, 13-10-1998 19:58:35]

STRING PROC FNStringCharactersRemoveEndS( STRING s, STRING endS )

 // e.g. PROC Main()

 // e.g.  Message( FNStringCharactersRemoveEndS( "knud", "d" ) ) //  
gives "knu"

 // e.g.  Message( FNStringCharactersRemoveEndS( "test", "st" ) ) //  
gives "te"

 // e.g. END

 RETURN( FNLeftStringS( s, FNStringLengthI( s ) - FNStringLengthI( 
endS ) ) )

END



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

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

 // e.g. PROC Main()

 // e.g.  Message( FNMidStringS( "knud", 2, 3 ) ) //  gives "nud"

 // e.g.  Message( FNMidStringS( "knud", 3, 2 ) ) //  gives "ud"

 // e.g. END

 RETURN( SubStr( s, beginT, totalT ) )

END

---